โครงสร้างของ 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 จะได้รับการ Disable3. รีจิสเตอร์ R จะมีค่า 00H4. จะมีการเซทอินเตอร์รพท์โหมดมาอยู่ที่โหมด 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 หรือ /NMI4. การจัดการตอบสนองจะเป็นไปตามลำดับดังนี้ /BUSRQ /NMI หรือ /INT
|
สุดยอดจริงๆเลย เว็บนี้ มีสาระความรู้มากมายเลยนะเนี่ย
ตอบลบ