จำลองเสมือน 6502 บน 6502 ด้วย 6o6
(oldvcr.blogspot.com)แนะนำ 6o6 ที่จำลองเสมือน CPU 6502 ด้วย CPU 6502 (และการออก The Incredible KIMplement 1.0)
- ผู้เขียนได้ออกเวอร์ชัน 1.0 อย่างเป็นทางการของ "The Incredible KIMplement" ซึ่งเป็นหนึ่งในโปรเจ็กต์ในฝันที่ทำแบบเป็นระยะมาตลอด 20 ปี
- The Incredible KIMplement เป็นโปรแกรมที่อีมูเลตคอมพิวเตอร์ซิงเกิลบอร์ด MOS/Commodore KIM-1 ที่ใช้ 6502 ทำงานที่ 1MHz และมีหน่วยความจำ 1KB
- ทำงานบน Commodore 64 และมีฟังก์ชันรองรับ TTY ของ KIM-1 พร้อม RAM ขยาย 16KB
- ที่สำคัญกว่านั้นคือได้สร้าง 6o6 (6502-on-6502) ซึ่งเป็น CPU NMOS 6502 แบบจำลองเสมือนเต็มรูปแบบบน CPU 6502
- ควบคุมการรันโค้ดของ guest ได้อย่างสมบูรณ์ และทำให้นามธรรมของการเข้าถึงหน่วยความจำ จึงสามารถรันบนหน่วยความจำเสมือนได้
- ไม่เพียงผ่านการทดสอบฟังก์ชันเท่านั้น แต่ยังสามารถจำลองเสมือนตัวเองซ้ำหลายชั้นได้ด้วย
แรงจูงใจและการออกแบบของการจำลองเสมือน 6502
- ตอนเด็กเคยอยากสร้าง "ระบบปฏิบัติการขั้นสุดยอด" แต่ส่วนใหญ่จบลงแค่ในระดับเดโมพื้นฐาน
- เมื่อได้รู้จักระบบหลายผู้ใช้ ก็ได้ตระหนักว่าผู้ใช้สามารถรันโค้ดที่มีปัญหาได้
- ระบบที่มีประสิทธิภาพต้องสามารถป้องกันหรือรับมือกับปัญหาที่เกิดจากโค้ดได้
- ด้วยข้อจำกัดของ CPU 6502 จึงยากที่จะแก้ปัญหานี้ได้อย่างสมบูรณ์ด้วยฮาร์ดแวร์เพียงอย่างเดียว
- จึงเลือกแก้ด้วยซอฟต์แวร์
- เครื่องเสมือน 6o6 (VM) รันโค้ด guest และทำให้นามธรรมของการเข้าถึงหน่วยความจำทั้งหมด
- Harness ทำหน้าที่เป็นอินเทอร์เฟซของ VM กับหน่วยความจำและฮาร์ดแวร์ของ guest
- เคอร์เนลทำหน้าที่รัน VM และจัดการสถานการณ์ยกเว้น
- ทำให้การทำงานของ ALU ดำเนินการโดยตรงบน CPU 6502 ฝั่ง host เพื่อให้ได้ทั้งความถูกต้องและประสิทธิภาพ
- ปรับแต่งประสิทธิภาพด้วยการเข้าถึงหน่วยความจำแบบอินไลน์, Instruction Fusion เป็นต้น
การตรวจสอบและทดสอบ 6o6
- ใช้ชุดทดสอบฟังก์ชันของ Klaus Dormann เพื่อตรวจสอบความถูกต้อง
- ใช้อีมูเลเตอร์ lib6502 เพื่อวัดประสิทธิภาพ
- ด้วยการใช้การเข้าถึงหน่วยความจำแบบอินไลน์และ Instruction Fusion ทำให้ลดจำนวนการรันคำสั่งลงได้ 36.5%
- มีเดโม 4 โปรแกรมที่ทำงานบน Commodore 64 และ Apple IIe
- Hello World
- จำลองเสมือนตัวเองซ้ำหลายชั้น
- สลับระหว่าง 2 task ที่เป็นอิสระต่อกัน
- อีมูเลตพื้นที่แอดเดรส 64KB โดยใช้คาร์ทริดจ์ geoRAM
แนวทางการใช้งานที่เป็นไปได้ของ 6o6 และไอเดียสำหรับการปรับปรุงเพิ่มเติม
- การพัฒนาระบบปฏิบัติการแบบกำหนดเอง
- สภาพแวดล้อมสำหรับรันโค้ดที่ดาวน์โหลดมาอย่างปลอดภัย
- เช่น การรันโค้ดแบบไดนามิกใน Gopher client
- รองรับการจำลองเสมือนบนระบบ NMOS 6502 ด้วยฮาร์ดแวร์ขั้นต่ำ
- รีแฟกเตอร์เพื่อให้ทำงานจาก ROM ได้
- อีมูเลตคำสั่งของ CMOS 65C02
- การปรับแต่งโค้ดเพิ่มเติม
ความเห็นของ GN⁺
-
6o6 ดูเป็นโซลูชันการจำลองเสมือนด้วยซอฟต์แวร์ที่ยอดเยี่ยม โดยเฉพาะน่าจะมีประโยชน์มากกับระบบ 6502 ที่มีทรัพยากรฮาร์ดแวร์จำกัด
-
โครงสร้างแบบแยกส่วนของ Harness และเคอร์เนลน่าประทับใจ น่าจะช่วยให้รองรับฮาร์ดแวร์ที่หลากหลายและเพิ่มความยืดหยุ่นได้
-
เทคนิคที่นำมาใช้เพื่อปรับแต่งประสิทธิภาพของอีมูเลเตอร์ (การเข้าถึงหน่วยความจำแบบอินไลน์, Instruction Fusion เป็นต้น) น่าสนใจ และน่าจะเป็นไอเดียที่นำไปใช้กับโปรเจ็กต์อีมูเลเตอร์อื่นได้เช่นกัน
-
การสาธิตการทำงานบนฮาร์ดแวร์จริง (Commodore 64, Apple II) และบนคาร์ทริดจ์ขยายอย่าง geoRAM ก็น่าประทับใจ แสดงให้เห็นทั้งความเข้ากันได้ของซอฟต์แวร์และความสามารถในการนำไปใช้จริงได้ดี
-
เนื่องจากเป็นโปรเจ็กต์ที่มีความสมบูรณ์สูง จึงดูเหมือนว่าน่าจะสร้างประโยชน์ให้ชุมชนที่เกี่ยวข้องได้ผ่านการเปิดเผยซอร์สโค้ด และน่าติดตามการปรับปรุงกับกรณีการใช้งานในอนาคต
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
สรุป: