โครงสร้างของ
CPU Z-80 มีโครงสร้างที่พัฒนามาจาก 8080
ดังนั้นในแง่โครงสร้างพื้นฐานจะ
เหมือนกับ CPU 8080 แต่เนื่องจาก Z-80 มีการพัฒนามากขึ้นทางซอฟท์แวร์
และ ฮาร์ดแวร์ จึงทำให้มีรายละเอียดแตกต่างเพิ่มเติมอีกหลายประการด้วยกัน
รูปแสดง
block diagram ของ CPU Z-80
โครงสร้างภายในของ
Z-80 CPU ประกอบด้วย รีจิสเตอร์ภายในที่สามารถ เขียนและอ่านได้ถึง
208 บิท โดยแยกเป็นกลุ่มของรีจิสเตอร์ขนาด
8 บิท 18 รีจิสเตอร์และรีจิสเตอร์ขนาด 16 บิท อีก 4 รีจิสเตอร์
รูปภาพแสดงรีจิสเตอร์ภายในทั้งหมดของ
CPU Z-80
รีจิสเตอร์หลักที่ใช้งานทั่วไป
รีจิสเตอร์ในกลุ่มแรก
คือ A,F,B,C,D,E,H,L เป็นรีจิสเตอร์ขนาด 8บิท ที่ใช้งานทั่วไปโดย
รีจิสเตอร์ เหล่านี้สามารถประกอบรวมกันเป็นคู่รีจิสเตอร์ได้
คือ AF,BC,DE และ HLโดยคู่ รีจิสเตอร์เหล่านี้ได้รับการใช้งานในลักษณะของรีจิสเตอร์
ขนาด 16 บิท การกระทำภายใน CPU อาจจะอาศัยเพียงรีจิสเตอร์เดียวหรือกระทำเป็นคู่รีจิสเตอร์ได้
โดยที่ A คือ Accumulator , F คือ flag , flagของ Z-80 จะมีด้วยกันทั้งหมด
6 ตัว จึงใช้เพียง 6 บิท แต่ Z-80 อาศัยการเพิ่มบิทขึ้นอีก
2 บิท และกลาย เป็นรีจิสเตอร์ F รีจิสเตอร์ F นี้ ได้รับการ
set , reset การกระทำตามคำสั่งทาง คณิตศาสตร์
หรือ ลอจิกได้และเราสามารถใช้ F เหมือนรีจิสเตอร์หนึ่ง
ซึ่งเมื่อรวมกับ A แล้ว จะกลายเป็นรีจิสเตอร์ขนาด
16บิทได้
รูปภาพแสดงกลุ่มรีจิสเตอร์หลักใช้งานทั่วไป
กลุ่มรีจิสเตอร์สำรอง
เป็นกลุ่มรีจิสเตอร์ที่สามารถเก็บข้อมูลได้
โดยเป็นตัวเก็บข้อมูลที่มาจากรีจิสเตอร์หลัก
รีจิสเตอร์ ชุดนี้จึงมีด้วยกัน 8 ตัว คือ A',
F', B', C', D', E', H' ,L' รีจิสเตอร์เหล่านี้เป็นรีจิสเตอร์ที่ใช้ในการ
เก็บข้อมูลชั่วคราว ในการที่ต้องการใช้รีจิสเตอร์หลักทำงานอย่างอื่นก่อน
ดังนั้นรีจิสเตอร์กลุ่ม นี้จึงไม่สามารถกระทำทางคณิตศาสตร์และลอจิกได้
รูปภาพแสดกลุ่มรีจิสเตอร์สำรอง
กลุ่มรีจิสเตอร์ที่ใช้งานเฉพาะอย่าง
โปรแกรมเคาน์เตอร์
(PC - Program counter) โปรแกรมเคาน์เตอร์เป็นรีจิสเตอร์ขนาด
16บิท ที่เป็นตัวกำหนดตำแหน่งของโปรแกรมในขณะสภาวะการกระทำการเฟทช์โดยขณะทำ
การเฟทช์ค่าที่อยู่ใน
โปรแกรมเคาน์เตอร์จะไปปรากฎอยู่ที่แอดเดรสบัสเพื่อชี้ไปยังตำแหน่งในหน่วยความจำ
ให้ CPU อ่านคำสั่งมาตีความหมายค่าที่อยู่ในโปรแกรมเคาน์เตอร์จะเพิ่มค่าขึ้นได้อย่างอัตโนมัติ
หลังการกระทำการเฟทช์ แต่ถ้าหาก CPU กระทำคำสั่งให้ข้ามไป
ยังตำแหน่งอื่น (Jump) ค่าแอดเดรส ที่จะกระโดดข้ามนั้นจะโหลดเข้ามายังโปรแกรมเคาน์เตอร์ได้อย่างอัตโนมัติ
สแตคพอยท์เตอร์
(SP - Stack pointer) เป็นรีจิสเตอร์ที่มีขนาด
16 บิทที่ใช้สำหรับชี้ไปยังแอดเดรสชั้นบนสุดของสแตคที่อยู่ใน
RAM โดยส่วนของสแตคมีลักษณะโครงสร้าง เป็นหน่วยความจำ
เป็นแบบเก็บทีหลังเรียกออกก่อน (last
in first out) ข้อมูลในสแตค อาจได้รับการ
push หรือ pop มาจาก รีจิสเตอร์ภายในCPU ลักษณะของสแตคในที่นี้ยังเป็น
ส่วนช่วยในการกระทำ interrupt และการเรียก
โปรแกรมย่อย กล่าวคือ ในการ interrupt ค่าของโปรแกรมเคาน์เตอร์จะได้รับการรักษาไว้ในชั้นสแตคครั้นเมื่อโปรแกรมกลับจาก
interrupt ไปกระทำยังโปรแกรมหลักก็จะนำค่าจากสแตคกลับเข้ามายังโปรแกรมเคาน์เตอร์
ใหม่ ในทำนองเดียวกัน การกระโดดไปกระทำยังโปรแกรมย่อยก็เช่นเดียวกัน
ดังนั้น การกระทำในรูปของ interrupt ของ
โปรแกรมย่อยสามารถ ซ้อนกันได้ไม่มีสิ้นสุด
อินเดครีจิสเตอร์
(IX,IY - index register) CPU Z-80 มีอินเดครีจิสเตอร์ขนาน
16 บิท 2 ตัว แต่ละตัวใช้ประโยชน์หลักใน
การ ทำหน้าที่เป็นตัวเก็บแอดเดรสฐาน
(base address) เพื่อ ทำหน้าที่อ้างแอดเดรสแบบอินเดคแอดเดรสซิ่ง
(index addressing)ในโหมดของอินเดคแอดเดรส ซึ่งมีข้อมูลที่
อยู่ในอินเดครีจิสเตอร์นี้จะรวมกับข้อมูลที่ติดมากับคำสั่งอีก
8 บิท เพื่อเป็นตัวกำหนดแอดเดรสให้กับ คำสั่งข้อมูลที่ติดมากับคำสั่งนี้เราเรียกว่า
displacement ซึ่งจะเก็บในรูปของตัวเลข
2's complement
อินเตอรร์รัพท์เพจแอดเดรสรีจิสเตอร์
(I-Interrupt page address register) การอินเตอร์รัพท์
ของ Z-80 มี หลายโหมดและโหมดหนึ่งที่ทำให้การอินเตอร์รัพท์ของ
Z-80มีประสิทธิภาพ สูง กล่าวคือ เมื่อเกิดการอินเตอร์รัพท์ในโหมดนี้ขึ้น
มันสามารถอ้างแอดเดรสโดยทางอ้อม ไปกระทำโปรแกรมใน
ที่ใดก็ได้ในหน่วยความจำ โดยอาศัยค่าในรีจิสเตอร์
รวมกับค่าที่ส่งมาจากอุปกรณ์เพอริเฟอรัลอีก
8 บิท ชี้ไปยังค่าในหน่วยความจำเพื่อนำค่านั้นมาโหลดเข้าใน
โปรแกรมเคาวน์เตอร์เพื่อกระทำต่อไป ด้วยวิธีการนี้เราจึงสามารถกระโดดเข้าไปทำที่ส่วนใดก็ได้ในหน่วยความจำ
รีจิสเตอร์รีเฟรชหน่วยความจำ
(R-memory reflesh register) การต่อ
ซีพียูกับหน่วยความจำนั้น โดย ปกติจะต่อกับหน่วยความจำชนิด
static ได้โดยง่าย แต่ชนิด dynamic ที่ต้องการรีเฟรช
มีราคาถูกกว่ามีความหนาแน่นสูงกว่า
Z-80 ให้ข้อดีกว่าประการหนึ่งคือมันสามารถให้การ
รีเฟรชหน่วยความจำได้ อย่างอัตโนมัติ โดยค่าใน
R รีจิสเตอร์จะเพิ่มค่าขึ้นอีก 1 ทุกครั้งที่มีการกระทำการ
fetch คำสั่ง และ ข้อมูลในรีจิสเตอร์ R นี้ จะถูกส่งออกไปยังแอดเดรสบัส
ในส่วนบิทที่มีนัยสำคัญต่ำกว่าจังหวะของการส่งนี้จะเป็นจังหวะเดียวกันกับที่ซีพียู
ส่งสัญญาณ รีเฟรชออกมา ผู้โปรแกรมสามารถกำหนดค่าให้กับ
รีจิสเตอร์ R นี้ได้แต่ค่าในรีจิสเตอร์
นี้จะเรียกใช้โดยผู้โปรแกรมทางคำสั่งโดยตรงไม่ได้
แอคคิวมูเลเตอร์
(accumulator) และแฟลก (flag) ซีพียูจะมีรีจิสเตอร์ที่ใช้เป็นหลักในการ
เป็นตัว operand สำหรับกระทำทางคณิตศาสตร์และลอจิก
โดยรีจิสเตอร์หลักนี้จะมีเพียง 8 บิท เรียกว่า
"แอคคิวมูเลเตอร์ (accumulator)" การกระทำในส่วนของหน่วยคณิตศาสตร์
และลอจิกย่อมเกิดเงื่อนไขได้หลายอย่างที่จะต้องแสดงสถานะภาพของเงื่อนไข
เหล่านั้น เช่น เงื่อนไขผลลัพธ์เป็นศูนย์ผลลัพธ์เป็นบวกหรือลบมีตัวทดหรือตัวขอยืมในการกระทำ
ทางคณิตศาสตร์ แสดงเงื่อนไขพาริตี้คู่หรือคี่สิ่งเหล่านี้จะให้ผลลัพธ์แสดงสถานะ
ได้ด้วย แฟลก (flag) แฟลกเป็นรีจิสเตอ์ขนาด 8 บิท
ซึ่ง สามารถรวมกับแอคคิวมูเลเตอร์เป็น รีจิสเตอร์ขนาด
16 บิท ได้ผู้โปรแกรมยังสามารถใช้คำสั่งในการเคลื่อนย้ายข้อมูลจาก
แอคคิวมูเลเตอร์ A และแฟลก Fไปเก็บไว้ใน A' และ F' ได้ เพื่อทำให้การใช้งาน
ของ A และ F มีประสิทธิภาพดียิ่งขึ้น
รูปภาพแสดงกลุ่มรีจิสเตอร์ใช้งานเฉพาะอย่าง
หน่วยคำนวณทางคณิตศาสตร์และลอจิก
(ALU - arithmetic and logic unit)
การประมวลผลที่สำคัญของ
CPUของคอมพิวเตอร์ยังขึ้นอยู่กับหน่วยคำนวณทางคณิตศาสตร์และ
ลอจิก (ALU) ส่วน ALU นี้จะนำข้อมูลซึ่งอาจจะมาจากภายนอก
CPU หรือภายใน CPU ก็ได้มา ประมวลผล การ ประมวลผลในส่วน
ALU ที่
สำคัญจะประกอบด้วย การบวก (add)
, การลบ (subtract) , ลอจิก AND , ลอจิก OR , ลอจิก EX-OR , เปรียบเทียบ
(compare) , การเลื่อนบิททางซ้ายหรือขวา ,การเพิ่มค่า
(increment) , การลดค่า (decrement) , การเซ็ทบิท (set bit) ,
การรีเซ็ทบิท (reset bit) , การทดสอบบิท (test bit)
รูปภาพแสดงการทำงานของ
ALU ภายใน
Z-80 CPU จะทำงานในลักษณะพื้นฐาน ที่สำคัญประกอบด้วย
การเขียน
- อ่านหน่วยความจำ
การเขียน
- อ่านอุปกรณ์อินพุท - เอาท์พุท
การตอบสนองต่อการอินเตอร์รัพท์
การทำงานในแต่ละไซเคิลของคำสั่งประกอบด้วยส่วนการทำงานสองจังหวะที่สำคัญ
คือ สภาวะเฟทช์ (fetch) และสภาวะ execute ส่วนของสภาวะ
fetchจะประกอบด้วย state ย่อย ๆ หลาย state แต่ละ state
จะ synchronize กับสัญญาณนาฬิกา
- เนื่องจากในแต่ละคำสั่งประกอบด้วย
machine cycle หลายแบบด้วยกัน แต่machine cycle
ที่ใช้ ทั้งหมด สามารถสรุปออกมาเป็นแบบอย่างได้เป็น
- 1.
ไซเคิลการ fetch (M1)
- 2.
ไซเคิลการเขียนหรืออ่านหน่วยความจำ
- 3.
ไซเคิลการรับส่งข้อมูลอินพุทหรือเอาท์พุท
- 4.
ไซเคิลการต้องการใช้บัส หรือการตอบสนองการใช้บัส
- 5.
ไซเคิลการอินเตอร์รัพท์ และการตอบสนองต่อการอินเตอร์รัพท์
- 6.
ไซเคิลการรับอินเตอร์รัพท์แบบนอนมาสค์เคเบิ้ล (Nonmaskable
interrupt)
ไซเคิลการเฟทช์ออพโค้ด
(OCF - opcode fetch)
ในสภาวะ
M1 นี้ เป็นภาวะเริ่มแรกของทุกคำสั่ง
ในสภาวะ M1 นี้ขอให้สังเกตจากระบบ ไดอะแกรมเวลา
จะเห็นสภาวะการทำงานของ CPU ได้ดี
กล่าวคือเมื่อเริ่มเข้าสู่สภาวะ fetch ข้อมูลจาก
program counter จะถ่ายลงไปยัง Address bus และหลังจากครึ่ง
cycleของสัญญาณ นาฬิกา CPU ก็จะส่งสัญญาณ /MREQ ซึ่งเป็น
สัญญาณบอกว่า CPU ต้องการติดต่อกับหน่วย ความจำและขณะเดียวกันก็
ส่งสัญญาณ /RD บอกหน่วย ความจำว่าต้องการ
/RDหรืออ่านข้อมูล ในหน่วยความจำตาม
Address ที่ต้องการ และเมื่อถึงขาลงของ
T2 CPU จะตรวจสอบสัญญาณ ที่ทางขา /WAIT ว่าเป็น
"0" หรือไม่ ถ้าไม่ก็จะทำงานต่อแบบปกติ
แต่ถ้าขา /WAIT เป็น "0" CPU จะเพิ่มสภาวะการรอ
(WAIT state) เกิดขึ้น การ
อ่านข้อมูลจากหน่วยความจำในที่นี้
ถ้านำเอา สัญญาณ /MREQ และ /RD เป็นตัวอ่าน ข้อมูลที่
bus ข้อมูลก็จะมีข้อมูลที่อ่านได้ในขณะที่
/MREQ OR /RD เป็น "0" ทั้งคู่ แต่ CPU จะรับการเปิด
bus นี้เข้าใน IR เพียงชั่วขณะสั้นเท่านั้น(ดูรูป)
เมื่อข้อมูล จาก bus เข้า IR เรียบร้อยแล้ว ก็จบสภาวะการ
fetch สัญญาณที่ขา /M1 ก็จะเป็น "1" บอกว่า fetch
เสร็จ แล้ว แต่อย่างไรก็ตาม สภาวะ /M1 cycle ยังไม่หมด
และ CPU จะส่งสัญญาณ ทำการ refresh หน่วยความจำ
ชนิดไดนามิกส์นั่นคือ ใน Address bus จะมีข้อมูลของ
address ที่ ต้องการ refresh และขา /RFSH ก็จะ บอกสภาวะว่าต้องการ
refresh นั่นเอง
M1 cycle
ที่มี WAIT STATES
ทุก ๆ ขาลงของ
T2 จะมีการตรวจสอบที่ขา /WAIT ว่าเป็น
"0" หรือไม่สมมติว่าเป็น "0" CPU จะสร้าง state
การ /WAIT อีก 1 cycle โดยที่ค่าสัญญาณอื่น ๆ ไว้ดังเดิม
และทุก ๆ ขาลงของ Tw ก็จะตรวจสอบขา
/WAIT อีกเช่นกัน ถ้าขา
/WAIT เป็น "0" ก็จะสร้าง Tw ต่อไปอีกและเป็นเช่นนี้
เรื่องไปไม่สิ้นสุด ในขณะที่ CPU สร้างสัญญาณ
Tw สัญญาณขาต่าง ๆ จะยังคงค่าเดิมไว้หมด สัญญาณต่าง
ๆ เหล่านี้ได้แก่ A0-A15, /MREQ, /RD, /M1 และ /RFSH ครั้นเมื่อขาลงของ
Tw
CPU ตรวจสอบสัญญาณ /WAIT พบ ลอจิก "1" มันจะเริ่ม
การอ่านข้อมูลจาก bus ข้อมูลและต่อท้าย
ด้วย T3 และ T4 ต่อไป
ประโยชน์ของการใช้
Tw ก็ด้วยเหตุผลในการยืดความกว้างขอสัญญาณต่าง
ๆ เพื่อ synchronous หรือให้ ทำงานร่วมกับอุปกรณ์ภายนอกที่ความเร็วช้าได้
เช่น ถ้าต้องการอ่านหน่วยความจำ ที่มีความเร็วต่ำ
เราจำเป็น ต้องยืดสัญญาณ /RD และ /MREQ ออกเพื่อให้ส่งไปควบคุมหน่วย
ความจำได้ เราก็สร้างสัญญาณ /WAIT CPU นั่นเอง
ไซเคิลการอ่านหน่วยความจำ
(MR - memory read cycle) และไซเคิลการเขียนหน่วยความจำ
(MW - memory write cycle)
จากรูป แสดง diagram ของการอ่านและเขียนหน่วยความจำในการอ่านและเขียนหน่วยความจำนี้
CPU จะใช้เวลาทั้งสิ้น 3 clock cycle คือ T1,T2,T3
ในการอ่านหน่วยความจำนั้น
CPU จะส่งแอดเดรสที่ต้องการอ่านเข้าสู่
address bus A0-A15 ก่อน ในตอน แรกของ machine cycle นี้หลังจากั้นต่อมาก็ส่งสัญญาณ
/MREQ และ /RD ออกมาและ ทุกครั้งของขาลง
ในช่วงจังหวะ T2 CPU
จะตรวจสอบขา /WAIT ว่าเป็นลอจิก "0" หรือไม่ ถ้า
ไม่มี CPU ก็จะทำงานตามปกติ แต่ถ้าเป็น
"0" ก็จะสร้าง Tw เพิ่มขึ้น ช่วงจังหวะที่ address
bus และสัญญาณ /MREQ, /RD ไปยังหน่วยความจำจะมีข้อมูลออกจากหน่วยความจำลงมาใน
data bus แล้ว แต่ CPU ยังไม่อ่าน จังหวะการอ่านของ
CPU จะเกิดขึ้นในจังหวะขาลงของ T3 ช่วงการ
อ่านของ CPU จะใช้เวลาสั้น ๆ เพื่อป้องกันการอ่านข้อมูลผิดพลาด
คือ ผิดตำแหน่งแอดเดรสหรือ อ่านได้หลายแอดเดรสนั่นเอง
ในทำนองเดียวกันในจังหวะของ
/MW ก็เช่นกันประกอบด้วย T1,T2 และ T3 (กรณีไม่มี
Tw) ในที่นี้ CPU จะสร้างสัญญาณ /MREQ กับ /WR ให้
active อย่างไรก็ตาม CPUจะส่งข้อมูลออก
ไปรอไว้ที่ data bus ก่อน และยาวนานกว่า
pulse การเขียน (/WR) การเขียนข้อมูล (/WR) จะใช้
เวลาเพียงสั้น ๆในจังหวะที่ข้อมูลมา
รออยู่ที่ bus เรียบร้อยแล้ว
ในกรณีต้องการหน่วงเวลาการทำงานใน
machine cycle เหล่านี้สามารถทำได้ด้วยการสร้างขา
/WAIT ให้มี ค่าเป็น "0" ในขณะขาลงของ T2
ซึ่ง CPU จะสร้าง Twขึ้นตราบเท่าที่ขา /WAIT
ยังคงเป็น "0" อยู่
ไซเคิลการเขียนเอาท์พุทและอ่านอินพุท(PW-port
write and PR-port read)
ในการเขียนเอาท์พุทและอ่านอินพุทก็คล้ยคลึงกับการเขียนและอ่านหน่วยความจำนั่นเอง
โดยการเปลี่ยน สัญญาณ /MREQ เป็น /IORQ เท่านั้น โดย diagram
การเขียนเอาท์พุทและ อ่านอินพุทแสดงดังรูป
ข้อแตกต่างที่เห็นได้ชัดเมื่อเทียบกับการเขียนและอ่านหน่วยความจำอีกข้อหนึ่งส่วนของแอดเดรส
นั้น จะแสดงเบอร์พอร์ทในส่วนของ A0-A7 เท่านั้น
ในการทำงานแบบปกติ CPU จะสร้าง Tw แทรกเข้ามา
1 ลูกโดยอัตโนมัติ แม้จะไม่มีการ/WAIT
ทั้งนี้เพราะช่วงจังหวะ /IORQ นั้น CPU จะสร้างในขณะ
T2 และCPUจะไม่สามารถ ตรวจสอบจังหวะ /WAIT
ในขณะขาลงของ T2 ได้ การตรวจสอบว่า
/WAITจะเกิดขึ้น ในจังหวะของ Tw แทนนั่นเอง
และถ้าหากมีการ /WAIT CPUก็จะสร้างสัญญาณ
Tw ต่อมาอีก
ไซเคิลการขอใช้บัสและการตอบสนองการให้ใช้บัส
(BUS REQUEST and ACKNOWLEDGE CYCLE)
จากรูป เป็น diagram เวลาของการขอใช้บัสและการตอบสนองต่อการใช้บัส
การใช้บัสนั้นจะ ใช้สัญญาณ ที่ส่งเข้ามาขอทางขา
/BUSRQ CPUจะทำการตรวจสอบขา /BUSRQ ในขณะ
สัญญาณนาฬิกากำลังจะ เปลี่ยนจาก "0" ไปเป็น "1"
ในขณะสัญญาณ state สุดท้ายของทุก ๆ Mcycle ถ้า
/BUSRQ แอคตีฟ CPU จะทำการเซท address bus และ data bus
ให้อยู่ในสถานะ ไตรเสตทในสัญญาณนาฬิกาลูกต่อมา
และ CPU ก็จะส่งสัญญาณตอบรับการขอใช้บัส
(/BUSAK) เมื่อ CPU ควบคุมไตรสเตท แล้วอุปกรณ์ภายนอกก็จะใช้บัสได้ซึ่งอาจจะเป็นกรรมวิธีการ
DMA(direct memory access) หรือ การติดต่อระหว่างอุปกรณ์
I/O กับหน่วยความจำโดยตรงได้ กรณีเช่นนี้ทำให้การถ่ายข้อมูลเป็นไปได้เร็วกว่าการใช้
CPU ควบคุมโดยตรงการถ่ายเทข้อมูล
ในกรณีนี้มักใช้สำหรับการถ่ายข้อมูลเป็นจำนวนมาก
ขณะมีการขอใช้บัสนี้ CPU จะตรวจสอบขา
/BUSRQ ทุก ๆ สเตท เช่นกัน และถ้า /BUSRQ เป็น "1" เมื่อใดในสัญญาณนาฬิกาสเตทต่อไปก็จะส่ง
/BUSAK = "1" เพื่อบอกเลิกการใช้บัส และ การควบคุมไตรสเตทหมดสิ้นภาระกิจ
ในขณะการใช้บัสในกรณีนี้
CPU ไม่สามารถตอบสนองต่อการอินเตอร์รัพท์ได้ไม่ว่าจะเป็นการ
อินเตอร์รัพท์ แบบ /NMI หรือ /INT ก็ตาม
ไซเคิลการรับสัญญาณอินเตอร์รัพท์และการตอบสนองต่อสัญญาณอินเตอร์รัพท์
(Interrupt request and acknowledge cycle)
จากรูป เป็นการแสดง
diagram เวลาของการอินเตอร์รัพท์ CPU, CPU จะทำกรตรวจสอบสัญญาณ
INT ทุก ๆ pulse สัญญาณนาฬิกาลูกสุดท้ายของทุกคำสั่งที่กระทำแต่อย่างไรก็ตามการตรวจสอบ
นี้จะไม่เกิดผลหาก software ได้สั่ง DI
(Disable interrupt) ซึ่งจะทำให้อินเตอร์รัพท์ flip-flop
ภาย ในไม่ได้รับการเซท นอกจากนี้ สัญญาณ
/BUSRQ แอคตีฟ การอินเตอร์รัพท์ก็ไม่ได้รับการตอบสนอง
เช่นกัน เมื่อการตอบสนองต่อ /INT เกิดขึ้น
CPU จะสร้างสถานะพิเศษใน /M1
ต่อมา ใน สถานะพิเศษของ /M1 นี้ /IORQ จะแอคตีฟแทน /MREQ
เพื่อเป็นการตอบสนองต่อการอินเตอร์-
รัพท์และตอนท้ายของ /IORQ CPU จะทำการอ่านข้อมูล
8 บิท เป็น เวคเตอร์สำหรับการ อินเตอร์รัพท์จาก data bus สังเกตว่าใน
กรณีนี้ CPU จะสร้างสัญญาณ Tw สองสเตทขึ้น อย่าง อัตโนมัติ
การสร้าง Tw ขึ้นมาก็เพื่อชลอเวลาให้อุปกรณ์ภายนอกตรวจสอบตัวอุปกรณ์ที่สร้าง
อินเตอร์รัพท์ และ จัดลำดับความ สำคัญ (priority) ของสัญญาณที่อินเตอร์รัพท์
เรายังสามารถเพิ่มสเตทการ
/WAIT ขึ้นอีกได้เพื่อให้ CPU รออุปกรณ์ที่จะส่งเวคเตอร์
ของการ อินเตอร์รัพท์ทาง data bus
ไซเคิลการตอบสนองต่อการอินเตอร์รัพท์แบบนอนมาสเคเบิ้ลอินเตอร์รัพท์
(Nonmaskable interrupt response)
จากรูป เป็น diagram เวลาของการตอบสนองต่อการอินเตอร์รัพท์แบบ
nonmaskable เมื่อถึง pulse ของสัญญาณนาฬิกาลูกสุดท้ายก่อนการกระทำการจบคำสั่ง
แต่ละคำสั่ง CPUจะทำการตรวจสอบ ขา
/NMI และถ้า /NMI มีค่าแอคตีฟ (=0) CPU ก็จะ latch
ไว้แล้วตอบสนองต่อการอินเตอร์รัพท์ ทันที
การอินเตอร์รัพท์ด้วย
วิธีนี้ถือว่า CPU ให้ความสำคัญสูงสุด
และขบวนการทาง software ก็ไม่สามารถที่จะป้องกันไม่ให้
CPU ตอบสนองได้ การตอบสนองจะเกิดขึ้นทันทีดังนั้นการอินเตอร์รัพท์ด้วยวิะีนี้จึงนำมาใช้ในกรณีที่
สำคัญเป็นพิเศษ การอินเตอร์รัพท์วิธีนี้
CPU จะส่งข้อมูล เดิมที่อยู่ใน program counter
ไปเก็บไว้ที่ stack แล้วเซทค่า program counter เป็นค่า
0066H เพื่อ กระทำในส่วนของโปรแกรมย่อยที่ตำแหน่ง
0066H
Z-80 ซีพียูเป็นไอชีไมโครโปรเซสเซอร์ที่มีขาเพียง
40 ขาโดยหลักการแล้ว Z-80 เป็น ซีพียู ได้โดย
สมบูรณ์กล่าวคือZ-80ไม่ต้องประกอบกับอุปกรณ์ประกอบอื่นที่จะแยกการทำงานเพื่อ
รวมเป็นซีพียูส่วนของสัญญาณจะประกอยด้วยบัสแอดเดรส
บัสข้อมูลและสัญญาณควบคุม การจัดวางขา
แสดงได้ดังรูป
รายละเอียดของขาต่าง
ๆ แสดงได้ดังนี้
A0
- A15
บัสแอดเดรส สัญญาณที่ออกมาจากขาไอซีเหล่านี้จะให้แอคตีฟขณะ
high โดยขาเหล่านี้เป็น เอาท์พุทแบบไตรสเตท
บัสแอดเดรสมีด้วยกันทั้งหมด16สายเพื่อให้ซีพียูติดต่อกับหน่วย
ความจำได้มากถึง 216 = 64 K ไบท์นอกจากนี้ส่วนของ
แอดเดรสยังเป็นตัวกำหนดเบอร์ พอร์ทของอุปกรณ์อินพุท-เอาท์พุทโดยขณะที่ซีพียูกระทำคำสั่งเกี่ยวกับอินพุทหรือเอาท์พุท
ค่าของแอดเดรสบัสใน 8 บิทล่าง (A0 - A7)
จะแสดงค่าเบอร์พอร์ทดังนั้นเราจึงมีอุปกรณ์อินพุทหรือเอาท์พุทได้
ทั้งหมด 28 = 256 พอร์ท และในขณะช่วงเวลารีเฟทชโดยเมื่อสัญญาณรีเฟรช
ปรากฎขึ้นที่ขารีเฟรช (/RFSH) ค่าในแอดเดรสบัส
A0 - A7จะแสดงค่าแอดเดรสของหน่วย
ความจำที่จะได้รับการกระทำการรีเฟรช
D0
- D7
บัสข้อมูล
(data bus) เป็นลักษณะบัสแบบสองทิศทาง Z-80 ซีพียูมีบัสข้อมูล
8 เส้น บัสข้อมูล เป็นเส้นทางผ่านของข้อมูลระหว่าง
ซีพียูกับหน่วยความจำซีพียู กับอุปกรณ์อินพุท-เอาพุทหรือการติดต่อระหว่างอุปกรณ์อินพุท-เอาท์พุทกับหน่วยความจำ
/M1
(machine
cycle one) มีลักษณะเป็นแอคตีฟที่ลอจิก "0" /M1เป็นส่วนที่จะบอกให้ทราบว่าขณะนี้
ซีพียูกำลังอยู่ในสภาวะเฟทช์ ในขณะที่ซีพียูเฟทช์คำสั่งที่มีออพโค้ดสองไบท์
ส่วนของ /M1 จะสร้างขี้นขณะเฟทช์ในแต่ละไบท์ลักษณะของคำสั่งที่มีออพโค้ด
สองไบท์จะขึ้นต้นด้วย CBH, DDH, EDH, FDH (H ต่อท้ายหมายถึงตัวเลขฐานสิบหก)
นอกจากนี้ /M1 ยังสร้างสัญญาณร่วม กับ/IORQ
เพื่อบอกสถานะการตอบรับการอินเตอร์รัพท์
/MREQ
(memory
request) เป็นลักษณะไตรสเตท ให้ลอจิกแอคตีฟที่ "0"
เป็นสายสัญญาณ ที่บอกให้ทราบ ว่าซีพียูต้องการเขียนหรืออ่านหน่วยความจำตามแอดเดรสที่ปรากฏอยู่ในแอดเดรสบัส
/IOREQ
(input
output request) เป็นเอาท์พุทลักษณะไตรสเตทให้ลอจิกแอคตีฟที่
"0" เป็นสัญญาณที่บอก ให้ทราบว่า ซีพียูต้องการติดต่อ
กับอุปกรณ์อินพุท-เอาท์พุท โดยแอดเดรสบัส 8 บิทล่างจะให้แสดงค่าเบอร์พอร์ทส่วนบัสข้อมูลจะแสดงข้อมูลที่จะมีการส่งถ่าย
ระหว่างซีพียูกับ I/O นอกจากนี้ /IORQ ถ้าเกิดขึ้นพร้อมกับสัญญาณ
/M1 เป็นตัวบอกถึงสถานะที่ซีพียูกำลังตอบสนอง
ผลการอินเตอร์รัพท์ โดยขณะนี้ส่วนของบัสข้อมูลจะมีการส่งผ่านเข้ามาด้วยค่าของอินเตอร์รัพท์เวคเตอร์
/RD
(memory
read) เป็นเอาท์พุทที่ไตรสเตทและแอคตีฟขณะลอจิก "0"
/RD เป็นตัวบอกว่าขณะนี้ ซีพียูต้องการอ่านข้อมูลจากหน่วยความจำหรืออุปกรณ์
I/O
/WR
(memory
write) เป็นขาเอาท์พุทแบบไตรสเตท และแอคตีฟขณะลอจิก
"0" /WR
เป็นสัญญาณบอก
ว่าซีพียูต้องการเขียนข้อมูลโดยจะเขียนข้อมูลในตำแหน่งที่แอดเดรสบัสกำหนดขึ้นอาจเป็นหน่วยความจำหรืออุปกรณ์
I/O ก็ได้
/RFSH
(refesh)
เป็นขาเอาท์พุทแอคตีฟขณะลอจิก "0" /RFSH เป็นสัญญาณที่จะบอกให้ทราบว่าสัญญาณในแอดเดรสบัส
ในส่วน A0 - A6 เป็นแอดเดรสที่จะใช้ในการรีเฟรชหน่วยความจำ
ชนิดไดนามิกส์ ส่วนบิท A0
จะเป็น "0" ส่วนบิท A8 - A15 จะแสดงค่าของรีจีสเตอร์
/HALT
(halt state) เป็นเอาท์พุทที่แอคตีฟด้วยลอจิก
"0" สัญญาณ /HALTจะแสดงเมื่อซีพียูได้กระทำ
คำสั่ง HALT และจะหยุดรอจนกว่าจะมีการอินเตอร์รัพท์หรือรีเซท
ขณะที่อยู่ในช่วง HALT ซีพียูจะ เสมือนกำลังกระทำคำสั่ง
NOP (no
operation) เพื่อให้เกิดไซเคิลในการทำงานเพื่อ
ส่งสัญญาณไปกระทำการรีเฟรชหน่วยความจำชนิดไดนามิกส์
/WAIT
(wait)
เป็นขาอินพุท จะแอคตีฟด้วยลอจิก "0" /WAITเป็นตัวกำหนดแสดงเพื่อบอกซีพียู
ให้ซีพียูหยุดรอ ในกรณีที่อุปกรณ์ อินพุท-เอาท์พุท
หรือหน่วยความจำไม่สามารถรับหรือ ส่งข้อมูลได้ทัน
/WAIT จะเป็นตัวทำให้ซีพียู ซิงค์ได้พอดีกับ
อุปกรณ์อินพุทเอาท์พุทที่ทำ งานด้วยความเร็วช้า
ๆ
/INT
(interrupt
request) เป็นขาอินพุท แอคตีฟด้วยลอจิก "0" /INT เป็นสัญญาณที่สร้างขึ้นมาจาก
อุปกรณ์อินพุทเอาท์พุทเพื่อต้องการที่จะอินเตอร์รัพท์ซีพียู
ซีพียูจะทำการตรวจสอบสัญญาณ นี้ทุก
ๆ ครั้งที่จบการกระทำแต่ละคำสั่งการตอบสนองของตัวการอินเตอร์รัพท์สามารถ
ควบคุมได้ด้วย ซอฟท์แวร์ด้วยการ
เซทค่าอินเตอร์รัพท์ฟลิบฟลอบ (IFF) การตอบสนองอินเตอร์รัพท์จะเกิดได้
ยังต้องให้ /BUSRQ ไม่แอคตีฟ เมื่อซีพียูตอบสนองต่อการ
อินเตอร์รัพท์ ซีพียูจะสร้างสัญญาณตอบด้วยการสร้างสัญญาณ
/IORQ ระหว่างช่วงเวลา /M1
การตอบสนอง ต่อการอินเตอร์รัพท์มีแยกแยะได้
3 แบบ ซึ่งจะอธิบายในหัวข้อการอินเตอร์รัพท์
/NMI
(nonmaskable
interrupt) เป็นขาอินพุทที่จะทริกบอกซีพียูในขณะขอบพัลซ์
ขาลงการอินเตอร์รัพท์ ด้วยวิธีนี้ ซีพียูจะให้ความสำคัญสูงกว่า
/INTกล่าวคือ มันจะตอบสนองและกระทำ
ทันทีด้วย การเริ่มเอ็กซีคิ้ว คำสั่งในตำแหน่ง
0066H
โดยอัตโนมัติ การกระโดดไปกระทำในกรณีนี้
ซีพียูจะเก็บค่าโปรแกรมเคาร์เตอร์ เดิมไว้ในสแตค
เพื่อจะได้กลับไปทำงานเดิม เมื่อเสร็จสิ้น
การอินเตอร์รัพท์ได้
/RESET
(reset)
เป็นขาอินพุทที่แอคตีฟด้วยลอจิก "0" การรีเซทในกรณีนี้จะมีผลดังนี้
1. ค่าของ
PC มีค่าเป็น "0"
2. IFF
จะได้รับการ Disable
3. รีจิสเตอร์
R จะมีค่า 00H
4. จะมีการเซทอินเตอร์รพท์โหมดมาอยู่ที่โหมด
0
ระหว่างการรีเซทสายแอดเดรสบัสและบัสข้อมูลจะได้รับการกระทำให้มีค่าอิมพีแดนสูง
เพื่อแยกออกจากซีพียู ส่วนสายสัญญาณ
ควบคุมจะได้รับการทำให้ เป็นสัญญาณที่ไม่แอคตีฟ
การรีเฟรชจะไม่เกิดขึ้น
/BUSRQ
(bus request)
เป็นขาอินพุทที่แอคตีฟด้วยลอจิก "0" /BUSRQ เป็นสัญญาณที่ส่งบอกกับซีพียู
เพื่อต้องการให้ซีพียูควยคุมบัสกล่าวคือต้องการให้ซีพียูทำให้บัสแอดเดรสและบัสข้อมูลอยู่
ในสถานะอิมพีแดนข์สูง คือต้องการแยกซีพียูออกจากบัสนั้นเอง
/BUSAK
(bus acknowledge)
เป็นขาเอาท์พุท แอคตีฟขณะลอจิก "0" /BUSAK เป็นสัญญาณตอบจากซีพียูว่า
ซีพียูได้แยกตัวเองออกจากแอดเดรสบัสและบัสข้อมูลเรียบร้อยแล้ว
CLK(clock)
สัญญาณนาฬิกาที่จะป้อนเข้าระบบ
Z-80 มีขาอินพุทสำหรับอินเตอร์รัพท์ได้
2 ขา คือ อินเตอร์รัพท์แบบมาสเคเบิ้ล (INT) และแบบนอนมาสเคเบิ้ล
(MNI)สำหรับการอินเตอร์รัพท์แบบมาสเคเบิ้ล สามารถให้
CPU กระโดดข้ามไปทำงานที่ส่วนต่าง
ๆ ของโปรแกรมได้ส่วนการ อินเตอร์รัพท์แบบนอนมาสเตเบิ้ลนั้นแตกต่างกับแบบมาสเคเบิ้ลคือการอินเตอร์รัพท์แบบนี้จะเกิดขึ้นทันทีโดยที่ผู้ใช้ไม่สามารถหยุดยั้งหรือดิสเอเบิ้ลได้ด้วยชอฟท์แวร์
นอนมาสเคเบิ้ลอินเตอร์รัพท์(NON-MASKABLE
INTERRUPT) การอินเตอร์รัพท์จะป้อนเข้าทางขา
NMI ของซีพียูโดยที่ลอจิกของการแอคตีฟจะเกิดขึ้นด้วยลอจิก
"0" เมื่อซีพียูรับสัญญาณนี้แล้ว ซีพียูจะไม่กระทำคำสั่งถัด
ไป โดยจะตอบสนองต่อการอินเตอร์รัพท์โดยการเปลี่ยนข้อมูลให้
PC เป็น 0066H เพื่อให้ภาวะการเฟทช์ครั้งต่อไปเกิดขึ้นที่แอดเดรสนี้
การตอบสนองในกรณีของนอนมาสเคเบิ้ลนี้
ซีพียูถือว่าเป็นส่วนสำคัญที่สุดที่จะต้องกระทำโดยคำสั่งทางซอฟท์แวร์หรือขบวนการอื่นใดไม่สามารถเข้ามาหยุดยั้งการอินเตอร์รัพท์ได้
การอินเตอร์รัพท์ด้วยวิธีนี้จึงมักใช้ในกรณีว่ามีเหตุการณ์สำคัญที่สุด
จากหลักการทั่วไปของการอินเตอร์รัพท์
ค่าเดิมของ PC ที่ซีพียูจะกระทำต่อไปในโปรแกรมหลักจะได้รับการเก็บรักษาไว้ในสแตคและการกลับคืนสู่โปรแกรมหลักเดิมนั้นกระทำได้ด้วยคำสั่ง
RETN (Return from Nonmaskable)
การอินเตอร์รัพท์แบบมาสเคเบิ้ล
(Maskable Interrupt) ในการอินเตอร์รัพท์แบบนี้
ผู้ใช้ต้องอินเตอร์รัพท์ผ่านเข้ามาทางขา INT
ของซีพียู เมื่อซีพียูได้รับสัญญาณนี้แล้วซีพียูจะตรวจสอบสถานะของตัวเองว่าจะตอบสนองต่อการอินเตอร์รัพท์หรือไม่
การที่จะตอบสนองหรือไม่สามารถโปรแกรมได้ด้วยซอฟท์แวร์
ดังนั้นผู้โปรแกรมจึงสามารถกำหนดสภาวะการอินเตอร์รัพท์ให้ได้
รับการตอบสนองตรงส่วนใดของโปรแกรมได้การอินเตอร์รัพท์ด้วยวิธีนี้สามารถแยกแยะการอินเตอร์รัพท์ออกเป็น
3 โหมด ซึ่งการแยกโหมดก็ทำได้ด้วยการใช้ซอฟท์แวร์หรือคำสั่งนั่นเอง
โดยแยกเป็นโหมด 0 (IM0), โหมด 1 (IM1), โหมด 2 (IM2)
การอินเตอร์รัพท์โหมด
0 ในโหมดนี้ผู้ออกแบบซีพียู
Z-80 ได้ออกแบบมาเพื่อให้ Z-80 ทำการตอบสนองต่อสัญญาณอินเตอร์รัพท์เหมือน
8080 ทุกประการ กล่าวคือเมื่อมีการอินเตอร์รัพท์
เกิดขึ้นและโปรแกรมทางซอฟท์แวร์ได้เซทโหมดการรับอินเตอร์รัพท์เป็นโหมด
0 (IM0) และอีนาเบิ้ลการอินเตอร์รัพท์ไว้การทำงานของซีพียูจะหยุดการเฟทช์คำสั่ง
ถัดไป แต่จะตอบรับการอินเตอร์รัพท์ด้วยการส่งสัญญาณตอบรับด้วย
/M1 กับ /IORQ อ่านข้อมูล 1 ไบท์ เข้ามาทางบัสข้อมูล
ข้อมูล 1 ไบท์นี้ได้รับการส่งมาจาก
อุปกรณ์ I/O ที่อินเตอร์รัพท์มา เมื่อซีพียูอ่านข้อมูลไบท์นี้มาซีพียูจะถือว่าเป็นออพโค้ดทันทีและจะตีความหมายในการทำงาน
คำสั่งขนาด 1 ไบท์ที่เหมาะ
ในการใช้ในการอินเตอร์รัพท์ก็คือคำสั่ง
RST เมื่อซีพียูเอ็กซีคิ้วคำสั่ง RSTซีพียูจะเก็บข้อมูลเดิมใน
PC ไว้ที่สแตค แล้วเปลี่ยนค่า PC ใหม่ตามลักษณะของการ
RST นั้น ๆดังนั้นซีพียูจะกระโดดข้ามไปทำงานตามที่ต้องการของการอินเตอร์รัพท์ได้
การตอบสนองต่อการอินเตอร์รัพท์ด้วยการส่งสัญญาณ
/M1 และ /IORQ ทำการเฟทช์ข้อมูลจาก I/O มาเอ็กซีคิ้วนี้อาจทำได้โดยการให้
I/O ส่งคำสั่งอื่นที่ไม่ใช่คำสั่ง
RST (คำสั่งไบท์เดียว) แต่เป็น คำสั่งหลายไบท์
เช่นคำสั่ง CALL
ซึ่งเป็นคำสั่งขนาด 3 ไบท์ โดย
I/O ส่งข้อมูลขณะตอบรับการ อินเตอร์รัพท์(/M1+/IORQ)
ด้วยข้อความ CDH (CALL) เมื่อซีพียูเอ็กซีคิ้วคำสั่งนี้ก็จะทราบว่าเป็นคำสั่ง
CALL ซึ่งยังต้องการข้อมูลเพิ่มอีก 2
ไบท์ ซีพียูจะสร้างแมชีน ไซเคิลต่อไปในการอ่านหน่วยความจำเหมือนกระทำคำสั่ง
CALL จริง ๆในการนี้เราจะต้องใช้วงจรทางฮาร์ดแวร์ประกอบเพื่อให้
I/O ส่งข้อมูลอีก 2 ไบท์ ตามไปให้ได้ซึ่งการอินเตอร์รัพท์ด้วยวิธีนี้อาจกำหนดได้ด้วยเทคนิคที่แตกต่างกันตามการออกแบบของแต่ละบุคคล
บริษัทอินเทลได้ออกแบบไอซีที่ใช้ในการควบคุมการอินเตอร์รัพท์และจัดลำดับความสำคัญในการอินเตอร์รัพท์ขึ้น
เช่น IC เบอร์ 8214 การใช้เวลาในการตอบสนองต่อการอินเตอร์รัพท์ด้วยการ
ส่ง /M1 และ /IORQ นี้จะกระทำเหมือนการกระทำ
ในช่วงเวลาแมชีนไซเคิล /M1 แต่ซีพียูจะใช้เวลายาวนานกว่าแมชีนไซเคิล
/M1โดยปกติ โดยการเพิ่ม Tw ขึ้นก็เพื่อให้เวลาแก่อุปกรณ์
I/Oในการกระทำขบวนการเดซี่เชน (Daisy Chain)
ในการจัดลำดับความสำคัญของการอินเตอร์รัพท์
โดยปกติการเซทให้อยู่ในโหมดนี้กระทำได้ด้วยการสั่งทางซอฟท์แวร์ด้วยคำสั่ง
IM1และการกำหนดให้รับการอินเตอร์รัพท์ได้หรือไม่กระทำได้ด้วยคำสั่ง
EI และ DIและเพื่อให้การทำงานเหมือนอยู่ในโหมดของ
8080 ทุกประการ ดังนั้นหลังจากการรีเซทซีพียู
ซีพียูจะเซทตัวเองให้อยู่ในโหมด 0 นี้โดยอัตโนมัติ
การอินเตอร์รัพท์โหมด
1ในโหมดนี้ผู้โปรแกรมสามารถกำหนดได้ด้วยคำสั่ง
IM1 การอินเตอร์รัพท์ในโหมด
นี้จะกระทำเหมือนกันกับนอนมาสเคเบิ้ลอินเตอร์รัพท์ทุกประการแต่จะแตกต่างกันก็เพียงการรีสตาร์ทมาที่ตำแหน่ง
0038H (กรณีนอนมาสเคเบิ้ลไปกระทำที่ 0066H) และจำนวนคาบเวลาที่ใช้ในโหมด
1 นี้มีมากกว่าในนอนมาสเคเบิ้ลทั้งนี้
เพราะในโหมดนี้ซีพียูต้องเพิ่ม
Tw ขึ้นอีก 2 สเตทการอินเตอร์รัพท์ในโหมดนี้สามารถดิสเอเบิ้ลได้ด้วยซอฟแวร์
การอินเตอร์รัพท์โหมด
2 ในโหมดนี้ทำให้ Z-80
มีขีดความสามารถเกี่ยวกับการอินเตอร์รัพท์สูงขึ้นมาก
การอินเตอร์รัพท์ในโหมดนี้กำหนดได้ด้วยคำสั่ง
IM2 และการจะให้ซีพียูตอบสนองหรือไม่ก็ยังใช้คำสั่งโปรแกรมได้เช่นกันโดยใช้คำสั่ง
EI และ DI การกระโดดไปยังโปรแกรมอื่นในขณะเมื่อซีพียูตอบสนองต่อการอินเตอร์รัพท์
ในกรณีนี้จะไปที่ใดก็ได้ โดยใช้แอดเดรสในการกระโดดนี้ได้ถึง
16 บิท ซึ่งทำให้การอินเตอร์รัพท์ทำได้สะดวกและรวดเร็วขึ้นอีกมาก
กรรมวิธีการตอบสนองต่อการอินเตอร์รัพท์ในกรณีนี้คือ
เมื่อมีสัญญาณ /INT เข้ามาและซีพียูตรวจสอบได้ในตอนสุดท้ายของคำสั่ง
ซีพียูจะตอบสนองด้วยการส่ง /M1 กับ /IORQ
ออกไป สัญญาณ /M1 กับ /IORQ จะเป็นตัวบอกอุปกรณ์ที่
ส่ง /INT มาให้ส่งข้อมูลขนาด
1 ไบท์เข้าทางบัสข้อมูล สำหรับในโหมดนี้ข้อมูลที่ส่งจาก
I/O ขนาด 1 ไบท์ที่เข้าทางบัสข้อมูลนี้ซีพียูถือว่าเป็น
เวคเตอร์ของ การอินเตอร์รัพท์ โดยข้อมูลในบิท D0
จะต้องเป็น "0" ส่วนบิทอื่นจะเป็นอะไรก็ได้ซีพียูจะนำเวคเตอร์นี้ไปเป็นข้อมูลแอดเดรสไบท์ที่มีนัยสำคัญต่ำและข้อมูลจากรีจิสเตอร์
1 ภายในซีพียูเป็นข้อมูลไบท์ที่มีนัยสำคัญสูง
เรียกหาไปยังข้อมูลในหน่วยความจำเพื่ออ่านข้อมูลในหน่วยความจำ
2 ไบท์ติดกันนั้นมาโหลดใส่ PC หรือเป็นการอ้างแอดเดรสให้
PC แบบโดยทางอ้อมนั่นเอง
สำหรับกรณีนี้จะเห็นว่าเราสามารถเซทค่าในรีจิสเตอร์
I ให้เป็นอะไรก็ได้และ I/O จะส่งข้อมูลเวคเตอร์มาประกอบรวมเพื่อบอกถึงค่าตารางในหน่วยความจำที่ต้องการ
ด้วยวิธีการเช่นนี้จะทำให้การกระโดดไปยังโปรแกรมย่อยเกิดขึ้นที่ใดก็ได้
อุปกรณ์ไอซีที่ทำงานร่วมโดยใช้อินเตอร์รัพท์โหมดนี้มีหลายเบอร์ด้วยกัน
เช่น Z-80PIO, Z-80CTC, Z-80SIO ฯลฯซึ่งอุปกรณ์อินเตอร์เฟสเหล่านี้สามารถส่งเวคเตอร์ให้กับซีพียูได้อย่างมีประสิทธิภาพ
การอินเตอร์รัพท์ในโหมดนี้ซีพียูต้องการเวลาถึง
19 สเตท โดยใช้ 7 สเตทใน
การเฟทช์เวคเตอร์
6 สเตทในการเก็บข้อมูล PC เดิมในสเตท และ 6 เป็นการอ่านข้อมูลจากหน่วยความจำมายัง
PC
การอีนาเบิ้ลและดิสเอเบิ้ลอินเตอร์รัพท์
สถานะภาพต่อการตอบสนองอินเตอร์รัพท์
ซีพียูจะทำการตรวจสอบที่ IFF หรือ
อินเตอร์รัพท์ฟลิบฟลอบในกรณีของ Z-80
จะมีฟลิบฟลอบที่แสดงสถานะภาพ ในการอินเตอร์รัพท์อยู่
2 บิท คือ IFF1 และ IFF2 โดยทั้งสองบิทนี้จะได้รับการเกี่ยวข้องด้วยจากการกระทำของซีพียูหรือของผู้โปรแกรมโดยโปรแกรมคำสั่ง
เข้ามาเซทหรือรีเซทฟลิบฟลอบ โดยหลักการ
IFF1ทำหน้าที่เป็นตัวกำหนดการอีนาเบิ้ลหรือดิสเอเบิ้ลการอินเตอร์-
รัพท์ โดยที่ IFF2 จะมีหน้าที่หลักในการเก็บข้อมูลชั่วคราวของ
IFF1 ในขณะที่มีการ รีเซทซีพียูทางขารีเซท
ทั้ง IFF1 และ IFF2 จะได้รับการรีเซทไปด้วย
การแสดงสถานะ "0" ของ IFF1 จะเป็นการดิสเอเบิ้ลการอินเตอร์รัพท์
กล่าวคือ IFF1
= "0" ซีพียูยะไม่รับรู้ต่อการอินเตอร์รัพท์ที่เข้ามาทาง
INT การเซท IFF สามารถกระทำได้ด้วยคำสั่ง
EI โดยสถานะภาพของ IFF1 และ IFF2 ที่จะเปลี่ยนแปลงเนื่องจากการกระทำต่าง
ๆ สรุปได้ดังตารางข้างล่างนี้
จากตารางพอสรุปได้ว่า
การกำหนดอีนาเบิ้ลจะต้องทำการเซทฟลิบฟลอบ
IFF1หรือกล่าวอีกนัยหนึ่ง การยอมให้เกิดการอินเตอร์รัพท์ได้ก็ต่อเมื่อซีพียูตรวจสอบ
IFF1 ว่าอยู่ในสภาวะอีนาเบิ้ลหรือไม่การตรวจสอบสภาวะอีนาเบิ้ลว่าได้รับการอีนาเบิ้ลหรือดิสเอเบิ้ล
ในบางกรณีทำได้โดยการตรวจสอบทางบิทพาริตี้นั่นคือ
การกระทำคำสั่ง LD A, I และ LD A, R จะมีผลให้ค่าของ
IFF2 ไปเก็บยังพาริตี้แฟลก
เมื่อมีการอินเตอร์รัพท์แบบ
NMI ขึ้นจะเกิดสภาวะดิสเอเบิ้ลทันทีที่ IFF1
กล่าวคือมันจะได้ รับการรีเซท
นั่นคือระหว่างการอินเตอร์รัพท์แบบ NMI นี้ การอินเตอร์รัพท์แบบอื่นจะเข้ามาอีกไม่ได้
ซีพียูจะไม่รับรู้ทั้งสิ้นสถานะเดิมก่อนการ
อินเตอร์รัพท์แบบ NMI (สถานะการดิสเอเบิ้ลหรืออีนาเบิ้ล)จะได้รับการเก็บรักษาไว้ที่
IFF2 ซึ่งระหว่างนี้จะได้รับการตรวจสอบได้เช่นกันว่า
ก่อนการเข้าไปสู่โหมด NMI สภาวะการเป็นอย่างไร
และเมื่อกลับเข้าโปรแกรมหลักด้วยคำสั่ง
RETN จะทำให้สถานะเดิมเก็บรักษาไว้ใน IFF1
ใหม่การตอบสนองต่อ /INT ก็จะทำให้
IFF1 และ IFF2 ได้รับการรีเซทเช่นกัน ดังนั้นเมื่อมีการ
INT สัญญาณ /INT ครั้งต่อไปจะไม่สามารถได้รับการตอบ
สนองจนกว่าจะมีคำสั่ง
EI /INT จึงจะได้รับการตอบสนองนั่นเอง
ส่วนการเอ็กซีคิ้วคำสั่ง RETI จะไม่มีผลทำให้
IFF1 และ IFF2 เกิดการเปลี่ยนแปลง
ไดอะแกรมเวลาสำหรับการตอบสนองต่อการอินเตอร์รัพท์ของซีพียู
การสนองต่อการอินเตอร์รัพท์ของซีพียูมีลักษณะสำคัญที่เราจะต้องพิจารณาในแง่ของไดอะแกรมเวลา
เพื่อการเชื่อมต่อกับอุปกรณ์ I/O ในแง่ทางฮาร์ดแวร์จะได้เป็นไปอย่างถูกต้อง
สรุปการตอบสนองจะเกิดตามลำดับดังนี้
1. อุปกรณ์
I/O ส่งสัญญาณอินเตอร์รัพท์มา โดยการทำให้ขา
/INT อยู่ในลอจิก "0"
2. CPU
จะตอบสนองต่อการอินเตอร์รัพท์ด้วยการส่ง
/M1 ลอจิก "0" ก่อนเพื่อให้อุปกรณ์ I/O เตรียมจัดการเกี่ยวกับขบวนการจัดลำดับก่อน
แลัว /IORQจากซีพียูจึงส่งตามมา การให้
/IORQ มาทีหลัง /M1ก็เนื่องจากให้ช่วงเวลาดีเลย์ระหว่างนี้เป็นตัวกำหนด
IEI และ IEO ของการกระทำเดซีเชน เมื่อ /IORQ ออกไปที่
I/O
และถ้า IEI ของอุปกรณ์นั้นเป็นลอจิก
"1" ตัว I/O นั้นก็จะส่งเวคเตอร์เข้ามาทางบัสข้อมูล
และซีพียูจะใช้ /IORQ และ /M1 เป็นพัลซ์สั่งอ่านเข้าทางบัสข้อมูลและการทำเดซีเชน
อุปกรณ์ที่ส่งอินเตอร์รัพท์ได้ จะให้ IEO เป็นลอจิก "0" เพื่อป้อน
เข้า IEI ของตัวอื่นเป็นการบล็อกการส่งเวคเตอร์จาก
I/O ตัวอี่น
3. การเคลียร์อินเตอร์รัพท์
โดยปกติอุปกรณ์I/O จะแอคตีฟในการส่งอินเตอร์รัพท์
ได้ต้องให้ IEI = 1 และ IEO = 0 ดังนั้นเมื่อเสร็จสิ้นการกระทำการอินเตอร์รัพท์
แล้วสถานะของการ I/O จะต้อง เคลียร์ตัวเองได้
นั้นคือเมื่อมีการกระทำคำสั่ง
RETI (ED 4D) ก็จะมีการบอกให้อุปกรณ์
I/O ทราบว่าจบสิ้นการอินเตอร์รัพท์
แล้ว เพื่อทำให้ IEO เป็น "1" เพื่อการอีนาเบิ้ลตัวI/O
ที่มีความสำคัญน้อยกว่า ความสัมพันธ์ของ
/INT, /NMI และ /BUSRQ
ไดอะแกรมเวลาข้างล่างนี้เป็นไดอะแกรมการจัดลำดับการทำงานภายใน
ในการตรววสอบการอินเตอร์รัพท์ทั้งแบบ /INT และ /NMI รวมทั้งขบวนการขอใช้บัส
/BUSRQ โดยมีลักษณะการทำงานที่น่าสนใจดังนี้
1. การตรวจสอบ
/INT และ /NMI ซีพียูจะทำการตรวจสอบทุก
ๆไซเคิลสุดท้ายของสัญญาณนาฬิกาของแต่ละคำสั่ง
2. /BUSRQ
จะได้รับการตรวจสอบทุก ๆ ตอนสุดท้ายของแมชีนไซเคิล
3. เมื่อ
CPU อยู่ในสภาวะ DMA จะไม่ยอมรับรู้การขอ
/INT หรือ /NMI
4. การจัดการตอบสนองจะเป็นไปตามลำดับดังนี้
/BUSRQ /NMI หรือ /INT
หน้าแรก
|