· kaynak Hacker News – Front Page (hnrss.org)
MartyPC, döngü hassasiyetli IBM PC ve XT emülasyonunu masaüstüne ve tarayıcıya getiriyor
IBM PC, XT, PCjr ve Tandy 1000'in açık kaynaklı Rust emülatörü Hacker News'in ana sayfasına çıktı; 8088 çekirdeği gerçek donanıma karşı doğrulandı ve tarayıcıda çalışıyor.
Erken dönem IBM PC'leri ve uyumlu makineleri döngü düzeyinde sadakatle yeniden yaratan açık kaynaklı bir emülatör olan MartyPC, Hacker News'in ana sayfasında ortaya çıktı. Proje Rust ile yazıldı, Windows, Linux ve macOS için sunuluyor ve doğrudan bir web tarayıcısında çalışan bir build içeriyor.
Projenin GitHub deposuna göre MartyPC, IBM PC (Model 5150), XT (Model 5160), jenerik bir Turbo XT klonu, IBM PCjr ve Tandy 1000'i emüle ediyor. Geliştirme, Rust öğrenmek için bir hobi çalışması olarak Nisan 2022'de başladı ve belirtilen hedef nostaljik oyun oynamak değil, retro PC geliştirme: emülatör, Intel 8088'e kod yazan programcıların komut yürütmesini tek tek döngülere kadar gözlemleyip ölçebilmesi için debugging ve logging özellikleri içeriyor.
8088 çekirdeği nasıl doğrulandı
Döngü hassasiyeti üzerindeki çalışmalar Kasım 2022'de başladı ve doğrulama yaklaşımı dikkat çekici. Yazar, fiziksel bir 8088'i bir Arduino MEGA mikrodenetleyicisine bağladı; böylece bir komut emülatörde ve gerçek çipte aynı anda yürütülebiliyor ve sonuçlar döngü döngü karşılaştırılabiliyor. Haziran 2024'te test paketine yapılan güncelleme, CPU'nun prefetch kuyruğunu da kapsamaya aldı ve bu, düzeltilen ek zamanlama hatalarını ortaya çıkardı. Depoya göre MartyPC artık 8088 V2 Test Suite'i %99,9997 döngü hassasiyetiyle geçiyor.
Çevre birimi emülasyonu da benzer donanım araştırmalarından geçti: 8253 timer bir Arduino ile incelendi, DMA zamanlamaları bir osiloskopla ölçüldü ve bir logic analyzer ile bir bus sniffer kuruldu. Sonuçlar uygulamada kendini gösteriyor. Nisan 2023'te MartyPC, demoscene yapıtı 8088 MPH'yi çalıştıracak kadar hassas hale geldi ve Mayıs 2023'te Area 5150 demosundaki her efekti yeniden üreten ilk PC emülatörü oldu — her iki yapıt da daha az hassas emülatörleri ters yüz eden zamanlama hilelerine dayanıyor.
Emüle edilen donanımın genişliği
CPU seçenekleri arasında asenkron bus arayüz birimi, komut kuyruğu ve prefetch mantığı dahil döngü hassasiyetli bir Intel 8088 uygulaması ile tüm native-mode komutlarını uygulayan ama henüz döngü hassasiyetine ulaşmamış ön aşamadaki bir NEC V20 var.
Video desteği; Motorola MC6845 CRTC denetleyicisi üzerine kurulu CGA, MDA, Hercules, EGA ve Mode 13h ile Mode X'in zaten çalıştığı sürümdeki bir VGA uygulamasını kapsıyor. CGA composite çıkışı, DOSBox ve 86Box'un da dayandığı reenigne'nin dönüşüm kodunu kullanıyor. Ses tarafında timer emülasyonu üzerinden sürülen PC speaker, nuked-opl3 çekirdeğiyle Adlib OPL2 sentezi, Tandy 1000 ve PCjr tarafından kullanılan SN76489 çipi ve Disney Sound Source paralel DAC bulunuyor.
Depolama, yazarın fluxfox disk image kütüphanesi üzerine kurulu bir µPD765 floppy denetleyicisiyle yönetiliyor; bu kütüphane birçok PC disk image formatını destekliyor ve uygun bir image verildiğinde bazı kopya korumalı yapıtları çalıştırabiliyor. Bunun yanında emüle edilmiş Xebec ve XT-IDE sabit disk denetleyicileri ile PCjr cartridge ROM'ları da var. Emülatör ayrıca EMS bellek kartlarını, seri fare, ışık kalemi ve aynı pencerede bir CGA kartını ikincil bir Hercules ekranıyla eşleştirme gibi çift monitör kurulumlarını destekliyor.
Yeni başlayanlar değil, geliştiriciler hedefleniyor
Depo sınırlamaları hakkında açık sözlü: DMA transferleri şu anda tamamen emüle edilmek yerine simüle ediliyor, paralel port ilkel düzeyde ve bazı gelişmiş interrupt controller özellikleri hâlâ eksik. Kurulum, kullanıcı dostu bir grafik arayüz yerine yapılandırma dosyalarının düzenlenmesine dayanıyor; yani proje kendini bu iş akışına alışkın kişiler için bir araç olarak konumlandırıyor.
En son sürüm 0.4.1; 0.5.0 geliştirme aşamasında. Build'ler hem düzenli release'ler olarak hem de GitHub Actions çalıştırmalarının otomatik artifact'leri olarak yayımlanıyor ve en yeni kodu isteyen kullanıcılar projenin wiki'sini kullanarak kaynaktan derleyebilir. Tarayıcı sürümü, hiçbir şey kurmadan hızlıca bakmak isteyenler için eşiği düşürüyor.
Neden önemli
Döngü hassasiyetli emülasyon, tam donanım zamanlamasına bağlı yazılımların — 8088 MPH gibi demolar, kopya korumalı oyunlar, zamana duyarlı uygulamalar — fiziksel makineler arızalandıkça çalışmaya devam etmesini sağlayan şeydir. MartyPC bu sadakati geliştirici araçlarıyla birleştirerek hem koruma hem de 8088 dönemi yazılımı yazan veya tersine mühendislik yapan herkes için kullanışlı hale getiriyor. Rust kod tabanı ve tarayıcı içi build'i, hassasiyet odaklı bir projeyi alışılmadık derecede erişilebilir kılıyor ve Arduino destekli doğrulama yöntemi, emülatörlerin gerçek donanıma karşı nasıl sınanabileceğine dair bir model oluşturuyor.
- #emulation
- #rust
- #retro-computing
- #open-source
- #ibm-pc