Emulacja 6502 na Arduino

W prehistorycznych latach ‘80 i ’90 ubiegłego wieku zagościły do naszych domów komputery. Legenda głosi, że kto wtedy z nimi zaznał kontaktu, ten już na zawsze pozostanie w ich władaniu. Może dlatego co jakiś czas ludzie włączają sobie ich emulatory i odpalają na nich stare gry.

Ci bardziej wkręceni kupują sobie od nowa stary sprzęt na aukcjach internetowych. Ale my tu o czymś innym.

Zawsze korciło mnie by zrobić emulacje starych komputerów na Arduino. Ewentualnie na kilku połączonych. Nie wymagałem od niej zbyt wiele, byle udawała jakiś prosty komputer jak ZX Spectrum.

6502 to legendarny procesor. W latach ’80 pracował w większości komputerów domowych. Z tych bardziej znanych to Apple 2, Atari XL/XE, Commodore C64. Jak na tamte lata był dość wydajny, ale nie szybki. Jego konstrukcja była tak prosta, że doprowadzała programistów do rwania włosów z głowy.

Osobnik miker00lz z forum Arduino postanowił napisać emulator 6502 na Arduino, by sprawdzić, czy uda mu się uruchomić jakąś prymitywną wersję języka BASIC na ten procesor. Udało mu się to znakomicie. EhBASIC, komunikuje się z nami przez USB i w Monitorze portu szeregowego można pisać program BASIC’a jak za dawnych czasów.
Ze względu na małe zasoby kontrolera, do dyspozycji jest jedynie 767 bajtów pamięci na program.

Zdjęcie pochodzi z forum Arduino

Pomysł został podchwycony i rozwojem emulatora zajęła się dalsza społeczność. janost podłączył do Arduino dodatkową pamięć przez magistralę I2C/TWI, uzyskując większą przestrzeń na program. Wada była taka, że pamięć szeregowa działa wolniej.
Janost wymyślił, że w lokalnej pamięci Arduino zrobi pamięć Cache jak w nowoczesnych procesorach. To taki bufor, by mała szybka pamięć przechowywała najczęściej używane dane wolnej pamięci.
Apetyt rośnie w miarę jedzenia. Kolejnym wyzwaniem było, by Arduino samo wyświetlało obraz konsoli BASIC-a. Problemem było to, że obsługa wyświetlacza spowalniała emulację. Procesor musiał wysyłać dane na ekran, co zajmowało sporo czasu.

Zdjęcie pochodzi z forum Arduino

Janost nie odpuszczał. Przerzucił program do Arduino DUE, które jest wyposażone w szybki procesor ARM M3. Zamiast prostego EhBASIC postanowił wykorzystać ROM z komputerów Commodore.
W międzyczasie oscarv wykorzystał emulator to zrobienia z Arduino starego komputerka edukacyjnego KIM-1. Na nim uruchomił program szachowy.

Tym czasem Janost uzyskał na wyświetlaczu to:


Zdjęcie pochodzi z forum Arduino

To jest ekran startowy języka BASIC z Commodore C64. Litery “A” to wynik prób emulowania klawiatury.

Ostateczny wynik wygląda tak:

Nie jest to pełny emulator C64. Oprócz procesora nie emuluje żadnych innych układów. To co jest na wyświetlaczu, to wyświetlanie pamięci graficznej C64. Jednak satysfakcja z osiągnięcia takiego stanu rzeczy jest ogromna.

Sam autor rozwiązania mówi, że jest niedoskonałe ale działa. Emulator procesora nie jest napisany optymalnie i żadna sprzętowa akceleracja z kontrolera nie była użyta.

Jeśli chcesz, przyłącz się do wątku, popraw to co uważasz za stosowne i zostań jednym z kolejnych bohaterów hackingu Arduino.

Jeśli nie masz jeszcze Arduino, a chciałbyś nauczyć się robić takie rzeczy – zapraszamy na zakupy do Nettigo.

sprae

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.