
R800 คือหน่วยประมวลผลกลางที่ใช้ในคอมพิวเตอร์MSX Turbo-R ที่บ้าน R800ออกแบบโดยASCII Corporationของญี่ปุ่นและผลิตโดยMitsui & Coเป้าหมายคือ CPU ไบนารีที่ทันสมัยและทำงานแบบ pipelineที่สามารถใช้งานร่วมกับ Z80 และซอฟต์แวร์ MSX ได้ ขณะเดียวกันก็ยังคงความเข้ากันได้ กับ ฮาร์ดแวร์ MSX Z80 รุ่นเก่า
ความเข้ากันได้
ในระหว่างการพัฒนา MSX Turbo R บริษัท ASCII Corporation ได้พิจารณาโปรเซสเซอร์หลายตัว ทั้งที่ใช้งานร่วมกันได้และใช้งานร่วมกันไม่ได้กับ Z80 ในขณะนั้น Kazuya Kishioka (岸岡和也)ซึ่งเป็นพนักงานของบริษัท กำลังวิจัยและพัฒนาASICซึ่งเป็นรุ่นความเร็วสูงของ Z80 และปรับแต่งส่วนใหญ่ให้เหมาะกับสถาปัตยกรรม MSX
เพื่อให้ซอฟต์แวร์สามารถทำงานร่วมกับซอฟต์แวร์ MSX รุ่นเก่าได้ R800 จึงใช้ชุดคำสั่งเดียวกันกับ Z80โดยมีเพียงส่วนเสริมเล็กๆ น้อยๆ แต่มีประโยชน์ เช่น คำสั่งคูณ 8x8 บิต และ 16x16 บิต ที่เรียกว่า MULUB ( 8 บิต ) และ MULUW ( 16 บิต ) นอกจากนี้ คำสั่ง Z80 ที่ไม่ได้บันทึกไว้หลายคำสั่งก็ได้รับการประกาศอย่างเป็นทางการแล้ว รวมถึงโอปโค้ด ทั้งหมด สำหรับคำสั่งที่เกี่ยวข้องกับ IX และ IY ในรูปแบบรีจิสเตอร์ 8 บิต (IXH, IXL, IYH, IYL)
เนื่องจาก R800 ไม่ได้พัฒนาต่อยอดจาก Z80 โดยตรง แต่มาจาก ตระกูล Z800จึงขาดคุณสมบัติอื่นๆ ของ Z80 ที่ไม่ได้บันทึกไว้ เช่น แฟล็กที่ไม่ได้บันทึกไว้ซึ่งแสดงด้วยบิต 3 และ 5 ของรีจิสเตอร์ F ไม่ได้เก็บค่าเดียวกันกับใน Z80 (ทำให้ไม่ผ่านการทดสอบ ZEXALL) และโอปโค้ดที่ไม่ได้บันทึกไว้ซึ่งมักเรียกว่า SLL ก็เป็นเพียงนามแฝงของคำสั่ง SLA
การเปลี่ยนแปลงฮาร์ดแวร์
เนื่องจากเป็นการออกแบบที่ใหม่กว่ามาก การใช้งาน R800 จึงค่อนข้างแตกต่างจาก Z80 รุ่นเก่า การเปลี่ยนแปลงนั้นคล้ายกับ โปรเซสเซอร์ที่รองรับ Z80 ในรุ่น Z800 , Z280 , Z380และeZ80 Z80 ดั้งเดิมใช้ฮาร์ดแวร์ ALU 4 บิตที่ไม่ธรรมดาภายในซึ่งเป็นโซลูชันที่สามารถแข่งขันกับ CPU ที่คล้ายคลึงกันโดยใช้ตรรกะ ALU 8 บิตแบบฮาร์ดไวร์เต็มรูปแบบ (เช่นรุ่นก่อนทันทีอย่างIntel 8080 ALU 16 บิตเต็มรูปแบบมาใช้เพื่อให้ทันกับการดำเนินการแบบไปป์ไลน์มากขึ้น คำสั่งเช่น ADD HL,BC ที่ใช้เวลา 11 รอบสัญญาณนาฬิกาบน Z80 ในบางสถานการณ์สามารถดำเนินการได้ภายในเวลาเพียงหนึ่งรอบบัส (1-2 สัญญาณนาฬิกา) บน R800 เนื่องจากระดับของการทำงานแบบไปป์ไลน์ที่เป็นไปได้โดย ALU ความกว้างเต็มนี้ความเร็วสัญญาณนาฬิกา CPU สูงสุดที่ใช้ใน MSX รุ่นใหม่นี้คือ 14.32 MHzซึ่งเร็วกว่าความเร็วสัญญาณนาฬิกาเดิม 3.57 MHz ที่ใช้ใน MSX รุ่นเก่าถึงสี่เท่า ขณะที่สัญญาณนาฬิกาบัสเพิ่มขึ้นเป็น 7.16 MHz บัสข้อมูลยังคงเป็น 8 บิต เพื่อรักษาความเข้ากันได้กับฮาร์ดแวร์รุ่นเก่า
การดึงข้อมูลโอปโค้ด
มีการเปลี่ยนแปลงเพิ่มเติมเกี่ยวกับวิธีที่ CPU ดึงข้อมูลโอปโค้ด Z80 ดั้งเดิมใช้สองรอบในการดึงคำสั่งง่ายๆ เช่น OR A และอีกสองรอบสำหรับการรีเฟรช มีการกำหนดสถานะรอเพิ่มเติมบนสถาปัตยกรรม MSX การตรวจสอบกลไกการดึงข้อมูลในสภาพแวดล้อม MSX ทั่วไปจะช่วยอธิบาย R800 ได้:
- Z80 รอบที่ 1: ตั้งค่าที่อยู่ 8 บิตที่สูงกว่า
- Z80 รอบที่ 2: ตั้งค่าที่อยู่ 8 บิตล่าง
- Z80 รอบที่ 3: สถานะการรอ
- Z80 รอบที่ 4: รีเฟรช ตอนที่ 1
- Z80 รอบที่ 5: รีเฟรช ตอนที่ 2
เนื่องจากการใช้งาน MSX ส่วนใหญ่ใช้RAMที่อยู่ในบล็อกขนาด 256×256 ไบต์ จึงจำเป็นต้องใช้สองรอบในการกำหนดแอดเดรสสำหรับการดึงข้อมูล R800 หลีกเลี่ยงปัญหานี้โดยการจดจำสถานะล่าสุดที่ทราบของบิต 8 บิตที่สูงกว่า หากคำสั่งถัดไปอยู่ในขอบเขต 256 ไบต์เดียวกัน บิต 8 บิตที่สูงกว่าจะไม่ถูกตั้งค่าและจะมีการบันทึกรอบการทำงานไว้ อย่างไรก็ตาม ใน Z80 รอบการรีเฟรชจะทำลายข้อมูลบนบิตที่สูงกว่า ดังนั้นจึงจำเป็นต้องมีวิธีแก้ปัญหา
วิธีแก้ปัญหาที่ใช้ใน R800 คือการรีเฟรช RAM ทั้งบล็อก แทนที่จะรีเฟรช RAM หนึ่งแถวในแต่ละคำสั่งที่ออก ทุกๆ 30 μs CPU จะหยุดทำงานเป็นเวลา 4 μs ซึ่งครั้งนี้ใช้เพื่อรีเฟรช RAM หนึ่งบล็อก เนื่องจากไม่มีการรีเฟรชระหว่างคำสั่งดึงข้อมูล และสถานะการรอจะถูกลบออกเนื่องจากชิป RAM ที่เร็วกว่า จึงสามารถออกคำสั่งง่ายๆ ได้โดยใช้เพียงรอบเดียว รอบนี้จะเป็นรอบที่ 2 ในตัวอย่าง Z80 ข้างต้น ส่วนรอบที่ 1 จะกลายเป็นตัวเลือก และจะออกเฉพาะเมื่อโปรแกรมข้ามขอบเขต 256 ไบต์เท่านั้น
ฮาร์ดแวร์ภายนอก
ทั้งหมดนี้ใช้ได้กับ RAM ความเร็วสูงที่ใช้ใน MSX Turbo-R เท่านั้น ฮาร์ดแวร์ภายนอกที่เชื่อมต่อผ่านช่องเสียบการ์ดจอจะใช้ไทม์มิ่งคล้ายกับ Z80 แม้แต่ROM ภายใน ของ Turbo-R ก็ยังเร็วไม่พอสำหรับรูปแบบการดึงข้อมูลนี้ ดังนั้นชิปเพิ่มเติมบน Turbo-R จึงสามารถสะท้อนเนื้อหาของ ROM ลงใน RAM เพื่อให้ทำงานได้เร็วขึ้น