W przyszłym roku zamierzam poprowadzić 2-semestralne zajęcia z mikroprocesorów dla studentów trzeciego roku studiów licencjackich. zapisać się na zajęcia, uczniowie muszą mieć ukończone zajęcia z programowania i systemów cyfrowych.

Aby zmotywować uczniów poprzez rzeczywiste zastosowanie koncepcji nauczanych na zajęciach, rozważam możliwość zadania studenci z utworzeniem emulatora dla starszego systemu od podstaw, jako projekt grupowy do ukończenia do końca zajęć (które, jak zaznaczono, trwają 2 semestry).

Próbuję aby wybrać dobry system docelowy dla tego projektu, przy czym głównym celem jest to, aby jego emulacja była dość prosta. Im mniej urządzeń peryferyjnych do emulacji, tym lepiej. Im mniej dziwactw i błędów, które trzeba powielić, tym lepiej. Chcę pokazać uczniom ważne pojęcia języka asemblera, kodowania instrukcji, trybów adresowania, rejestrów procesora, rejestrów sprzętowych mapowanych w pamięci itp., I niekoniecznie sztuczek wymaganych do renderowania duszków wystarczająco szybko, aby stworzyć interesującą grę wideo z technologią półprzewodników, która była dostępna w latach 80. po akceptowalnych kosztach. Rozumiem, że było to konieczne w tamtym czasie; po prostu próbuję znaleźć system, który nie nadużywałby zbytnio tych sztuczek. Idealnie, dany system nie powinien wymagają emulacji z dokładnością do cyklu lub sztuczek, takich jak gonienie za linią skanowania.

Drugi wymóg dotyczy wydajności. Studenci z pewnością nie są zaznajomieni z technikami optymalizacji oprogramowania, więc próba emulacji nawet pierwszej Playstation lub Nintendo 64 prawdopodobnie napotka problemy z wydajnością (być może nawet SNES i Genesis). W tym momencie studenci muszą się tylko martwić implementacja emulatora poprawnie, a nie wydajnie. Emulacja procesora z pewnością zostanie zaimplementowana przez interpreter, a nie przez tłumacza / rekompilatora.

Wreszcie, nie sądzę, by uczniowie uznali emulator za interesujący, gdyby, powiedzmy, właśnie wyświetlały wartości rejestrów po wykonaniu programu zabawkowego (chociaż znacznie uprościłoby to projekt). Chciałbym wybrać system, dla którego stworzono gry, nawet jeśli ten system nie był dedykowaną konsolą do gier wideo. Uważam, że możliwość uruchamiania gier na emulatorze byłaby bardzo motywująca dla uczniów.

Na przykład teraz patrzę na NES , ale nadal wydaje się to trochę skomplikowane, zwłaszcza PPU. Czy są prostsze opcje?

Komentarze

  • Ciekawe pytanie. może być ważne, aby dodać prośbę o odpowiedzi, aby trzymać się z dala od zwykłych walk o lepszy system / cpu / vdu / itp. i skupić się na części dydaktycznej.
  • W pytaniu jest widoczna sprzeczność. z jednej strony autor chce skoncentrować się na emulacji procesora, z drugiej strony chce, aby cały emulowany system wyświetlał również obraz i dźwięk. Żądanie tego drugiego jest zrozumiałe, ale prowadzi do równie ciężkiej pracy nad emulowanie urządzeń peryferyjnych, wyświetlanie obrazów i odtwarzanie zadań dźwiękowych.
  • Prawdopodobnie pomocny zasób, jeśli będzie to maszyna Z80, a nie 6502: z80.info/decoding.htm o algorytmicznym dekodowaniu instrukcji Z80 (z zastrzeżeniem kilku specjalnych przypadków, ale tak jest). Wymaganie, aby emulator faktycznie dekodował algorytmicznie, a nie przez wyszukiwanie, ograniczyłby możliwość kopiowania i wklejania przez uczniów, a także byłby odpowiedni dla kursu dotyczącego mikroprocesorów?
  • To może nie być to, czego szukasz, ale być może zamiast pisać emulator (który, ' m zakładając, że będą działać na ich komputerze), mogliby wykazać tę samą wiedzę koncepcyjną, pracując z rzeczywistym sprzętem. Niech zdobędą płytę deweloperską opartą na ARM Cortex M4 i nauczą się pracować z gołym metalem.
  • może TI-83 …?

Odpowiedź

Przesuwam CHIP-8 do przodu.

Ten system jest zasadniczo jest to maszyna wirtualna opracowana z jakiegoś powodu. Istnieją gry napisane dla CHIP-8. Ma kilka kodów operacyjnych, stos, kilka timerów i wyświetlacz bitmapowy o niskiej rozdzielczości, ale jest na tyle prosty, że kilka pierwszych emulatory mieszczą się w kilku kilobajtach na wczesnych komputerach 8-bitowych.

Jest więcej niż kilka implementacji referencyjnych, których możesz użyć.

Istnieją gry i tak dalej, które są dostępne publicznie domena, na przykład tutaj , więc nie musisz udostępniać własnych gier.

Komentarze

  • Tak dla Chip 8. Jest ' łatwo znaleźć implementacje w wielu językach, a architektura jest prosta.
  • CHIP-8 to świetny pomysł na wprowadzenie do emu ze względu na swoją prostotę.Po wcześniejszym napisaniu emulatora NES mogę powiedzieć, że pisanie procesora było niezwykle czasochłonne i żmudne – a 6502 jest proste, jeśli chodzi o procesory. Natomiast CHIP-8 ma tylko 35 bardzo prostych instrukcji. Ponadto wiele systemów polegało na precyzyjnych zachowaniach czasowych między procesorem a resztą sprzętu, podczas gdy CHIP-8 nie ma takich wymagań.
  • Komentarze nie są przedmiotem rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
  • Jestem ' jestem doświadczonym programistą, ale Nigdy nie napisałem emulatora. Po tej odpowiedzi pomyślałem: ” Hej, ten chip8 wygląda dość łatwo, ' spędzę na nim może kilka godzin „. Trzy tygodnie później ' wciąż tu jestem, próbując dowiedzieć się, dlaczego programy wciąż wyskakują z pamięci. Dużo zabawy, a także mnóstwo ” co do diabła „.
  • Zastanawiam się, czy byłoby coś takiego przeszkoda w usunięciu vblank wait z procedury plot-sprite i dodaniu jawnej instrukcji vblank-wait? CDP1802 nie jest ' demonem szybkości, ale prawie na pewno mógłby narysować więcej niż jednego spritea na klatkę w przypadku braku vblank wait.

Odpowiedź

Och. Dobre pytanie. Spróbuję udzielić kilku wskazówek, ale uważam, że kwestia jest zbyt szeroka, aby znaleźć tutaj odpowiedź, zamiast bardziej znaczącej rozmowy. Niemniej:


[…] zlecenie uczniom stworzenia emulatora dla starszego systemu

Całkiem fajnie.

od zera,

Gdyby to miało powstać od zera i w oprogramowaniu, tak naprawdę nie uważam, że jest to zadanie odpowiednie dla pierwszaków w tak ograniczonym czasie. O ile nie ma sposobu, aby wyeliminować wymagania czasu rzeczywistego (które są jeszcze bardziej istotne w grach), wolałbym być ostrożny.

W rzeczywistości skoro chodzi o EE, dlaczego nie zrobić prawdziwego sprzętu? Nadal łatwo jest zdobyć (niektóre) klasyczne procesory i powiązane urządzenia. W połączeniu z nowoczesnym wyświetlaczem LCD wysiłek sprzętowy jest całkiem wykonalny w ciągu kilku tygodni z bardzo szczegółowymi szczegółami.

jako projekt grupowy do ukończenia do końca zajęcia (które, jak wskazano, trwają 2 semestry).

Co może być najtrudniejszym warunkiem.

Próbuję wybrać dobry system docelowy dla tego projektu, a głównym celem jest to, aby emulowanie było dość proste. Im mniej urządzeń peryferyjnych do emulacji, tym lepiej. mniej dziwactw i błędów, które trzeba powielić, tym lepiej.

Brzmi jak dobra próba. A co ważniejsze, usuwa niektóre pozornie proste systemy (takie jak singleboarders) z listy, ponieważ polegają na złożonej obsłudze urządzeń we / wy (np. dostępie w czasie rzeczywistym do portów w celu sterowania segmentami LED w pozornie ciągły sposób).

Chcę pokazać uczniom ważne pojęcia związane z montażem język ly, kodowanie instrukcji, tryby adresowania, rejestry procesora, rejestry sprzętowe mapowane w pamięci itp.

Coś, co można zrobić na prawdziwym sprzęcie jak emulacja, prawda?

W idealnym przypadku system, o którym mowa, nie powinien wymagać emulacji z dokładnością do cyklu ani sztuczek, takich jak podążanie za linią skanowania.

Wraz z domniemanym wymaganiem dotyczącym wyjścia wideo wymaga to prostej logiki bitmapowej bez przyspieszania.

Drugi wymóg dotyczy wydajności. Studenci z pewnością nie są zaznajomieni z technikami optymalizacji oprogramowania, więc próba emulacji nawet pierwszej Playstation lub Nintendo 64 prawdopodobnie napotka problemy z wydajnością (być może nawet SNES i Genesis).

Nie obawiałbym się tutaj zbytnio, ponieważ rzeczywisty sprzęt PC jest dość szybki. Prawdziwym problemem nie jest tutaj szybkość emulacji, ale aspekty czasu rzeczywistego – synchronizacja różnych części emulacji – które wymagają bardzo starannego i dopracowanego projektu oprogramowania. Nie należy się tego spodziewać. Całkiem ta część dotycząca „ścigania się z belką”, o której wspomniałeś.

W tym momencie uczniowie muszą się tylko martwić o poprawne zaimplementowanie emulatora, a nie wydajne. Emulacja procesora z pewnością zostanie zaimplementowana przez interpreter, a nie translator / rekompilator.

Mimo to, nawet w przypadku najbardziej prymitywnych, synchronizacja w czasie rzeczywistym jest konieczna do grać w grę. Przynajmniej synchronizacja odtwarzania ekranu jest koniecznością – nie przynajmniej po to, aby przyspieszyć przełączanie samej symulacji.

Nieodłączna potrzeba gier, aby używać efektów czasowych – i zsynchronizowanej manipulacji ekranem na poziomie lepszym niż klatki – to coś, co sprawi, że uruchomienie dowolnej gry w świecie rzeczywistym na proponowanym emulatorze będzie wyzwaniem.

Chciałbym wybrać system, dla którego stworzono gry, nawet jeśli nie był to dedykowana konsola do gier wideo. Uważam, że uruchamianie gier na emulatorze byłoby bardzo motywujące dla uczniów.

Całkowicie się z tym zgadzam. Znaczna część sukcesu eksperymentu i systemów uczenia się Andre LaMothe „opiera się na doskonałej umiejętności robienia gier.

Na przykład teraz patrzę na NES, ale nadal wydaje mi się to trochę skomplikowane, zwłaszcza PPU. Czy są prostsze opcje?

Jest to trudne, ponieważ podstawowe wymagania są ze sobą sprzeczne. Tylko konsole / komputery, które odniosły sukces, miały duży wybór gier, ale są to również takie, które mają bardziej złożoną strukturę sprzętową, umożliwiającą świetne gry.

Sprawdźmy kilka dobrze znanych systemów. Chciałbym je oddzielić w „proste” i „złożone” systemy wraz ze złożonością ich logiki wideo (* 1)

Proste systemy

W pierwszej iteracji są to wszystkie systemy bez dedykowanego VDC / CRTC.

  • Atari VCS – ostatecznie ostateczny system do nauki asemblera, działa na ekstremalnie podstawowym poziomie, bez pośrednictwa i nie ma zbyt wiele rzeczy, którymi trzeba się zajmować. „jest imiennikiem terminu„ wyścigi belki ”.

    Mimo wszystko może to być system, którego należy szukać, ponieważ części zależne od czasu są dobrze zdefiniowane i (w porównaniu z jakimkolwiek innym filmem) ekstremalnie proste i łatwe do naśladowania – z wyjątkiem tego, że nie są to rzeczy dla początkujących. Jest również bardzo dobrze udokumentowane w ogólnie dostępnych źródłach.

  • Commodore PET – raczej prosty system, zwłaszcza od kiedy cała część wideo może być emulowana dość abstrakcyjnie, jednak VIA trzeba, przynajmniej częściowo, emulować. Najważniejsze, że zawiera tylko dwa źródła czasu (poza zegarem).

    Ogromnym plusem PET (i uzupełnień) jest dobra dokumentacja (również ze względu na jej prostotę). Ponadto, chociaż zawiera CRTC, prawie żadna gra (ani inne oprogramowanie) nie wykorzystywała w ogóle jej przeprogramowywania, co umożliwia prostą i niekompletną (abstrakcyjną) emulację.

    Z drugiej strony jest tylko niewielka liczba gier, a większość z nich jest napisana w języku BASIC, co może wymagać pewnych badań, aby znaleźć ilość abstrakcji i szczegółów w emulacji.

  • Apple II – Ponownie, niesamowicie dobrze udokumentowany system z dużą ilością oprogramowania. Większość z tego oparta na Zgromadzeniu. Chociaż sprzęt jest w pełni udokumentowany i zbudowany tylko z TTL, jego działanie nie jest naprawdę proste, a ponieważ niektóre gry w dużym stopniu opierają się na dziwactwach i pętlach liczenia w celu dokładnego pomiaru czasu, emulacja może stać się znacznie bardziej skomplikowana niż zakładana na pierwszy rzut oka.

    Plusem dla Ciebie może być fakt, że Apple II był dość popularny w Brazylii (już wtedy).

  • TRS-80 – Tutaj również logika wideo jest zbudowany z TTL, ale o wiele prostszy niż w Apple. Podobne inne wejścia / wyjścia są dość proste. Negatywną stroną jest znowu raczej niewielka liczba gier.

Jak dotąd prawdziwych starożytnych, ale także niektóre późniejsze systemy można sklasyfikować jako proste:

  • Sinclair Spectrum – chociaż logika oferuje kilka sztuczek, dzwonki & gwizdają, jest to prosty, podzielony na kafelki projekt bitmapy. Jak dotąd szanse na emulację są dobre, z wyjątkiem tego, że jak zwykle gry polegały w dużym stopniu na synchronizacji, co znowu komplikuje emulację.

    Podobnie jak w przypadku Apple II, w Brazylii było sporo klonów. .

  • Podobny przypadek można zrobić dla rodziny ORIC

  • Atari ST – To może być niespodzianka z dzisiejszego punktu widzenia widzenia, ale Atari ST nie posiadał żadnego zaawansowanego sprzętu wideo. Tylko 3 rozdzielczości grafiki i 9-bitowy CLUT dla maksymalnie 16 jednoczesnych kolorów. Kilka punktów synchronizacji i jeden zegar. Do tego bardziej nowoczesny procesor i dedykowany układ dźwiękowy. Brzmi jak mecz z nieba, jeśli, no cóż, gdyby nie to znowu dla programistów gier. Również tutaj oprogramowanie wymagało całej masy sztuczek do tworzenia niesamowitych gier (* 2).

Pierwszym wnioskiem dotyczącym „prostych” systemów jest to, że chociaż sprzęt może być mniej złożony, oprogramowanie bardzo się starało przezwyciężyć ten problem. W konsekwencji może Można powiedzieć, że mniej skomplikowane systemy nie są konieczne, aby emulacja była mniej skomplikowana, ponieważ nie trzeba emulować większej liczby różnych urządzeń, ale prosty sprzęt musi być dostosowany bardzo blisko czasu, aby uruchomić istniejący kod gry.

Złożone systemy

Są to ogólnie wszystkie systemy z wyrafinowanym VDC

  • 9918 ff .- Nie chodzi o pojedynczy system, ale ostatecznie najczęściej używany VDC (TI nazwał go VDP). Chociaż został zaprojektowany dla TI 99/4, TI sprzedał go każdemu, kto był zainteresowany. W rezultacie większość wszystkich systemów (* 3) przy użyciu 9918 lub jednego z jego kolejnych projektów (9928/38/58 / …).

    Konsole do gier, takie jak Coleco Vision , Sega SG-1000 aż do systemu głównego a także komputery z TI 99/4 lub Memotech MTX aż do cały świat MSX korzystał z tej rodziny.

    Brzmi świetnie, prawda? Cóż, na pewno jest wiele gier do wykorzystania. Ponadto taki VDP pomaga uprościć emulację, ponieważ zapewnia wyraźne oddzielenie procesora od wyświetlacza i ogranicza „sztuczki”, których może użyć gra, do tego, co oferuje VDP, co z kolei jest jasno zdefiniowane. I znowu, to istniejące oprogramowanie utrudnia emulację, ponieważ, oczywiście, programiści używali sztuczek czasowych, aby manipulować ekranem we właściwym czasie. Czy ktoś wspomniał o „Racing the Beam”?

  • Commodore VC20, C64, C16 itd. – To samo dotyczy wszystkich domowych komputerów Commodores. Chociaż różnią się one złożonością, mają lub nie sprite, oferują timery lub nie i dźwięk lub nie, podstawowe problem jest taki sam jak w rodzinie 9918: oprogramowanie wykorzystujące określone sytuacje czasowe do tworzenia efektów w grze.

  • 6847 Systemy – Tandy CoCo, Matra Alice i inni mają ten sam problem.

Mógłbym kontynuować z systemami gier, takimi jak NES lub MegaDrive, ale zakończę tę listę tutaj, ponieważ zasada powinna być już jasna: chociaż niektóre systemy mogą wydawać się bardziej skomplikowane do emulacji, prawdziwym problemem nie jest złożoność sprzętu wideo, ale ilekroć programista „ulepsza” to, co można zrobić dzięki sprytnemu programowaniu (* 4). Tak więc prawdziwym problemem dla twojego projektu nie jest (tak bardzo) sprzęt (* 5), ale oprogramowanie, , zwłaszcza triki i narzędzia używane w istniejących grach .

To jest szczególnie złe, ponieważ chcesz wykorzystać (jak to czytam) istniejące gry jako motywację. Nie będzie wielu uruchomionych na mniej trudna emulacja czasu rzeczywistego.

Zmniejszenie tej zależności zmniejszy liczbę gier, które działają poprawnie. Zredukowanie go do poziomu, który pozwala na obsłużenie go w ramach kursu ograniczonego czasowo, sprawi, że znalezienie odpowiednich gier będzie prawie niemożliwe.

Wniosek: Znalezienie właściwy kompromis to sposób, który wymaga znacznych badań, a jednocześnie ogranicza użyteczność.


Teraz może być możliwe zaatakowanie to z nieco innego punktu widzenia. Spróbujmy:

  • Wykorzystanie istniejącego starego sprzętu:

    Chociaż zostało to udowodnione (* 6), że działa, oferuje najwyższą kompatybilność i łatwość użycia dzięki otwartym środowiskom programistycznym, może brakować odwołania do „budowania” dla studentów EE.

  • Wykorzystaj istniejące systemy gier edukacyjnych:

    Systemy takie jak Andre LaMothe „s XGS to świetne narzędzia do szczegółowego tworzenia i programowania sprzętu. Oczywiście, wymagane jest trochę lutowania (dostępne są gotowe kompilacje), są to prawie kompletne systemy zdefiniowane programowo, w całości udokumentowane i oferują ogromną bibliotekę gier. Nie wspominając o jego książkach o programowaniu gier.

    Świetnym bonusem jest to, że uczniowie mogą zabrać system do domu i grać nawet po zakończeniu kursu.

  • Zbuduj swój własny prosty system:

    Weź klasyczny procesor (na przykład 6502), trochę pamięci RAM, FLASH i VIA oraz FPGA, aby zaimplementować bardzo podstawowy CRTC i gotowe. Studenci przylutują go, mogą dowiedzieć się o komponentach i ich interakcji, w tym o wykorzystaniu FPGA (co i tak może być dziś koniecznością), a następnie uruchomić swoje oprogramowanie na prawdziwym sprzęcie. Nawet przy małych ilościach powinno być możliwe wyprodukowanie takiej płyty za około 50 euro lub mniej. Podobnie jak w przypadku pomysłu XGS, będzie on działał po zakończeniu kursu – w tym poczucie własności jako ich system.

    Oczywiście uczniowie będą musieli napisać własne gry, ale proste gry można zrobić w dość krótkim czasie – nie wspominając o tym, że kursy uzupełniające mogą równie dobrze wykorzystywać gry napisane przez poprzednią klasę.

  • Wykonaj emulację „własnego” systemu

    Podobnie jak wcześniej, z wyjątkiem tego, że wszystko jest wirtualne. Ma tę zaletę, że jest dobrze definiuje i zamyka system, zwłaszcza taki, w którym nie ma ograniczeń z powodu mniej „doskonałej” emulacji – Emulacja jest z definicji idealna i wszystkie jej dziwactwa są tym, co posiada system. Wadą jest znowu część Oprogramowanie.

  • Użyj „miękkiego” sprzętu:

    Istnieje projekt Neila Franklina, w ramach którego powstało wiele uogólnionych elementów systemu, podobnie jak w klasycznych komputerach, ale przy użyciu mikrokontrolerów zamiast dedykowanych układów. Łączy emulację z prawdziwym sprzętem. Chociaż komponenty są nadal rozwijane jako emulacje, mają one działać w mikrokontrolerze i być używane podobnie jak „prawdziwe” chipy. Jeden system może być skonfigurowany przy użyciu modułu SoftCPU emulującego na przykład 6502 z pamięcią RAM i ROM, w połączeniu z SoftVGA dostarczającym terminal, taki jak interfejs wideo i emulującą klawiaturę i mysz SoftPS2. Wszystkie są połączone przez magistralę równoległą lub szeregową (SPI), co pozwala na dodanie innych komponentów, które mogą być również zaprezentowane podczas emulacji.

    Oprócz emulacji, zawiera ograniczoną ilość sprzętu, który można to zrobić na płytce stykowej (mimo to nigdy nie jest za wcześnie na rozpoczęcie lutowania), pokazuje również dość typowe zadanie dzisiejszej inżynierii – zastąpienie tradycyjnej logiki mikrokontrolerami – w praktycznym zastosowaniu.

    Rezultatem jest system oferujący dotyk i wrażenia prawdziwego (starego) komputera, podczas gdy jest budowany z nowoczesnym sprzętem z równoległymi emulacjami.

  • Użycie konfigurowalnego emulatora:

    Nie, nie chodzi o MAME ani podobne, ale o strukturę emulatora napisaną w JavaScript, która obsługuje części ogólne (w tym czas), w którym twoi uczniowie będą dodawać swoje emulacje (co było celem, prawda?), aby utworzyć cały system. Ponieważ JS jest dostarczany w postaci źródłowej, nawet sam framework może być modyfikowany.

    W zależności od jakości każdej emulacji, może to być użyteczne do wszystkiego, od prostego systemu demonstracyjnego po pełne odtworzenie lat 80. komputer.

Więc może niektóre z powyższych odmian mogą być dobrym początkiem?


* 1 – skupię się tylko na wideo (i procesor), aby było to proste. Również samo wideo będzie już dobrze działać, aby wyeliminować całe systemy. Dźwięk doda inny wymiar i może go skomplikować, wykraczając poza ten zakres.

* 2 – Wystarczy spojrzeć na ksenon. Przełomowy pionowy scroller z wieloma przesuwającymi się warstwami wielu animowanych obiektów, wszystkie działają bardzo płynnie w oprogramowaniu. W rzeczywistości był tak dopracowany, że przeniesienie go na (zwykle) bardziej wydajną Amigę (jeśli chodzi o grafikę) zajęło trochę czasu i zaowocowało nieco mniejszą grą.

* 3 – Systemy zaprojektowane niepotrzebnie sprzedanych jednostek. Z drugiej strony niektóre konsole do gier odniosły sukces, więc może nawet zdobyć większość w liczbach.

* 4 – posty na blogu głównego twórcy Glide64 dla emulatorów N64 napisała serię wieloczęściową ( Intro , P .1 , P.2 , P.3 ) postów na blogu na temat przeszkody, które musiał pokonać, aby część emulacji wideo działała – wszystkie nie dotyczyły złożoności emulacji sprzętu, ale wszystkich właściwych sposobów, w jakie procesor modyfikował i dostosowywał dane wyjściowe obok logiki wideo. Jest to jeszcze bardziej niezwykłe, biorąc pod uwagę, że N64 jest już dość absurdalnym i zamkniętym systemem.

* 5 – W rzeczywistości bardziej złożony sprzęt wideo uznałbym za świetną lekcję dla studentów EE, ponieważ dobrze pokazuje, co można zrobić za pomocą kilku bramek zamiast stosów oprogramowania – tym bardziej, że później będą robić sprzęt, prawda?

* 6 – Na przykład Stefan Höltgen z FU Berlin używa starego systemy gier na swoich zajęciach w celu wprowadzenia uczniów (spoza EE) do rzeczywistego sprzętu i prawdziwego programowania oraz ich wpływu na codzienne zadania (i gry).

Komentarze

  • @Tommy Cóż, chciałbym tego uniknąć, ponieważ nie ma prostej odpowiedzi. Najważniejsze może być to, że podczas gdy Z80 jest nieco ” dziwaczny „, 68k nie jest proste. Przy wszystkich słowach rozszerzających (do CPU32) pojedyncza instrukcja może mieć do 11 słów (22 bajty) i dekodowanie ich to poważny bałagan. Z drugiej strony wszystko zależy od sposób wykonania emulatora. Z80 jest raczej prostym 8080, łatwym do naśladowania, z kilkoma modyfikatorami, które można łatwo obsługiwać. W przypadku 68k, nawet tylko oryginalnego, będzie to znacznie więcej pracy.
  • ” zadanie odpowiednie dla studentów pierwszego roku w tak ograniczonym czasie. ” Powiedział, że są to studenci trzeciego roku, a nie pierwsi, a oni ' spełnili już kilka wymagań wstępnych.
  • @ wizzwizz4 Cóż, bez względu na to, jakie są nasze osobiste opinie, JS jest prawnym spadkobiercą BASIC. Poważnie i pod każdym względem! Po prostu o tym pomyśl.Nie tylko działa n obok każdego rzeczywistego komputera, ale ' jest nawet domyślnie instalowany i nie ma prawie żadnego sposobu na pozbycie się go bez utraty dużej funkcjonalności. Co więcej, pomyśl tylko, ile złego i niesamowicie wolnego oprogramowania jest napisane w JS – doskonały dowód, czyż nie ' tak?
  • @Raffzahn It ' jest zupełnie inny Po pierwsze, BASIC miał kilka niekompatybilnych implemenów … Ohhh! Jest następcą języka BASIC!
  • Oni ' nadal nie są studentami pierwszego roku, którzy są studentami pierwszego roku. Myślę, że powinieneś dać OP korzyść w postaci wątpliwości, że nie ' nie przydzieli projektu, jeśli uczniowie nie ' nie będą mieli wymagane tło.

Odpowiedź

Jak dotąd jest kilka dobrych pomysłów.

Ale coś do rozważenia.

Jeśli robisz coś takiego jak maszyna CP / M, są one naprawdę dość proste i proste, zwłaszcza że wszystko jest izolowane nie tylko przez BIOS, ale także przez naturę WE / WY rodziny 8080 / Z80.

Nie wydaje mi się nic dziwnego, aby maszyna CP / M była celem pierwszego semestru. (Nie znam twojego programu nauczania)

Ale na przykład podstawowa maszyna CP / M nie potrzebuje dokładności cyklu, nie potrzebuje przerwań, najbardziej skomplikowaną rzeczą, jaką musi zrobić, jest odpytanie klawiatury, aby zobaczyć, czy klawisz został naciśnięty. (W przeciwieństwie do monitorowania keydown i keyup lub czegokolwiek innego).

Następnie, w drugim semestrze, możesz dodać wymagania, takie jak interfejs do układu graficznego. Powyższy przykład SG-1000 może z łatwością być maszyną CP / M w pierwszym semestrze, a następnie łatwo przekształcić go w SG-1000 w drugim (ponieważ wykonałeś całą część Z80 w pierwszym semestrze) .

Na koniec, myślę, że wasza klasa wypada mieć program akceptacji, który uczniowie mogą uruchomić w celu sprawdzenia swojego procesora. Niewiele rzeczy jest bardziej ekscytujących niż debugowanie złego procesora, szczególnie w przypadku języka maszynowego, którego być może nie znasz .

Społeczność 6502 ma programy testowe, które mogą sprawdzić, czy procesor wykonuje wszystkie instrukcje poprawnie, nie jestem pewien, co jest dostępne dla innych procesorów.

A jeśli to jest jakaś pociecha, jeśli chodzi o zakres, napisałem zarówno symulator, jak i związany z nim asembler przez ponad 2 tygodnie świąt Bożego Narodzenia, jeśli to pomoże ci określić, jak duże są rzeczywiste projekty. Podstawowe procesory są dość proste.

Komentarze

  • W Z80 FUSE zapewnia testy, chociaż nie wszystkie z nich są ogólne lub koniecznie poprawne co do dokładnego cyklu wyczucie czasu; ' są również w formacie tekstowym ad hoc, ale ' przepisałem je na JSON: github.com/TomHarte/CLK/tree/master/OSBindings/Mac/… – użyj tests.in.json, aby ustawić stany początkowe i dowiedz się, jak powinien trwać długo, a następnie tests.expected.json, aby zweryfikować wyniki. Istnieją również ' zexall i zexdoc, pierwotnie pliki CP / M, ale szeroko przystosowane i bardzo wolne. Przejście tego pierwszego wymaga kilku nieudokumentowanych rzeczy, aby było poprawne, przekazanie drugiego nie wymaga ' t.
  • … a jedyne, co robię, to , jakie kiedykolwiek znalazłem dla 6809, zakładając, że ktoś pomyślałby o zasugerowaniu Vectrex lub Coco / Dragon, jest zawarte w szerszym zestawie testów automatów do gier Williamsa pod adresem seanriddle.com/wetsold.html . Jeśli chodzi o 6502, jestem bardzo zaangażowany w testy Klausa Dormanna, Wolfganga Lorenza i AllSuiteA, z których wszystkie wydają się być znacznie bardziej widoczne niż testy Z80 lub 6809.
  • @Tommy Tak daleko, jak Mam ' świadomość, każdy z testów Fuse ' jest dokładny w cyklu. Proszę zgłaszać błędy, jeśli ' nie są 🙂
  • @PhilipKendall, zobacz mój e-mail z dnia 29.05.2017 do fuse-emulator-devel re: DJNZ i czy offset jest odczytywany w ostatniej iteracji. Wniosek Alana Coxa dotyczący tego, czy testowane zachowanie FUSE ' jest poprawne, był taki, że ' s ” otwarte na interpretację ” na podstawie dostępnych źródeł. Dlatego pomyślałem, że ” niekoniecznie poprawne ” było uczciwe. Powinienem był być jednak jasny: znalazłem tylko kilka odchyleń w ' interpretacji dowodów w Twoim zespole i mojej własnej. Przepraszamy za kiepską formę.
  • @Tommy – ” Wniosek od Alana Coxa dotyczący tego, czy przetestowano FUSE ' zachowanie było prawidłowe, było to ' s ” otwarte na interpretację ” na podstawie dostępnych źródła ” …chociaż szanuję wiele z tego, co robi Alan, ' łatwo jest zweryfikować, czy testowane zachowanie jest takie samo, jak rzeczywisty procesor Z80 (szczególnie dla wersji CMOS które można uruchomić na płytce prototypowej z niskimi częstotliwościami taktowania w celu bardzo prostego skonfigurowania szczegółowych testów), więc jest to zdecydowanie przypadek, w którym jeśli uważa, że ' coś jest nie tak, powinien być w bardzo łatwy sposób.

Odpowiedź

Czy mogę zasugerować SG-1000 ?

System to niewiele więcej niż zgrupowanie trzech gotowych chipów – Z80, TMS9928A do grafiki i SN76489 do dźwięku, z kontrolerami jako głupie grupy NIE (normalnie otwartych) przełączników.

W oprogramowaniu lub sprzęcie można symulować lub emulować dowolną część tego oddzielnie lub wszystkie razem, aby stworzyć kompletny system.

system używa do swoich gier prostych pamięci ROM, które nie są przełączane przez banki, i to zazwyczaj Nie polegaj na żadnych sztuczkach, takich jak przerwania na środku ekranu lub liczenie cykli, aby wywołać efekty. Tylko jedna mapa kafelkowa i kilka spriteów na górze. Sugeruję, że jest to o wiele prostsze niż system zawierający wiele współdziałających komponentów wewnętrznych i inteligentnych wkładów, takich jak NES.

Powinieneś zapewnić swoje własne gry do emulacji, a nie rozpowszechniania nielicencjonowanych oczywiście materiał chroniony prawem autorskim.

Komentarze

  • … i dla przypomnienia, ColecoVision to dokładnie ta sama kolekcja komponentów, z różnymi połączeniami logika i nieco bardziej skomplikowane joypady. Tak więc emulator SG-1000 można zwykle łatwo rozszerzyć, aby obsługiwał oba te elementy.
  • Warto również zauważyć, że 9918 to złożony układ ze spriteami, złożonymi modyfikacjami i danymi, tak jak nie ' t chcesz używać. Czy nie ' Tak?

Odpowiedź

Prosta, prosty komputer, taki jak ZX Spectrum, brzmi rozsądnie – ale jest po prostu zbyt wiele dobrych emulatorów, aby uczynić tę przydatną opcję. Myślę też, że 6502 jest łatwiejszy do naśladowania.

Możliwą opcją może być Oric-1 lub Atmos firmy Tangerine , który używał pamięci niebankowej 6502, żadnych niestandardowych układów oprócz prostego wideo i stosunkowo prostego bufora klatek. Nie jest też tak dobrze znany jak Spectrum, jednak dostępne jest oprogramowanie (gry), które zawiera kilka prostych testów zgodności (myślę, że pewne „poczucie osiągnięcia” jest niezwykle ważne dla uczniów). Dostępnych jest już kilka emulatorów dla Atmos (według mojej wiedzy trzy), ale ich liczba jest ograniczona, co ułatwia stwierdzenie, czy ktoś oszukał i po prostu skopiował kod.

Żaden z Według mojej wiedzy gry Oric były tak wyrafinowane, że aby je uruchomić, potrzebna byłaby emulacja 100% dokładnego cyklu,

Komentarze

  • I ' d argumentuj, że architektura Oric zniechęca do wyścigów rastrowych, ponieważ nie ma bocznego kanału rejestrów sterowania wideo i nie jest skonfigurowana tak, aby wyścigi mogły zwiększyć rozdzielczość kolorów (w przeciwieństwie do Spectrum). Gdyby jednak miał tylko dwa bufory HIRES, ' d stwierdzam to z większą pewnością. Zgodzisz się z tym?
  • @Tommy I ' Nie jestem zbyt zaznajomiony z obwodami wideo Orica. W każdym razie chciałbym stwierdzić, że Oric miał tak krótki czas życia i tak ograniczoną bazę użytkowników, że wyrafinowane techniki poprawiania wideo, które znamy z ZX Spectrum, były ' t opracowane (przynajmniej nie podczas aktywnego życia komputera, istnieje ' wiele interesujących demonstracji tutaj demozoo.org/platforms/ 49 )
  • Och, w takim razie ' przedstawię lepsze uzasadnienie: układ wideo Oric ma stan modalny, w tym tryb tekstowy lub graficzny, ale nie ujawnione rejestry. Wszystko jest ustawiane przez bajty sterujące w strumieniu wideo – w tym atrybuty pierwszego planu i tła. Ludzie zwykle narzekają na to, ponieważ oznacza to, że jeśli chcesz uzyskać grafikę bez przerw, ' jesteś ograniczony do czterech kolorów na linię, z których dwa stanowią bitowe uzupełnienie pozostałych dwóch. Jednak niektóre współczesne gry nadal wyglądają naprawdę dobrze – np. Stormlord youtube.com/watch?v=QSDy-BC580M
  • @Tommy Atrybuty szeregowe sprawiają, że programowanie jest nieco trudniejsze, ja ' d zgaduję, ale sądzę, że ilość kolizji atrybutów jest nawet lepsza niż na ZX Spectrum.
  • Xenon 1 wymaga dokładnego cyklu, w przeciwnym razie blokuje się, gdy statek eksploduje (zastrzeżenie: napisałem emulator oric dla amigi o nazwie amoric i natknąłem się na ten problem, ale tylko w tej grze)

Odpowiedź

Na podstawie Twoich kryteriów i potrzeby, aby projekt był interesujący dla uczniów, polecam poważnie biorąc pod uwagę Vectrex Arcade System, który był sprzedawany przez Miltona Bradleya we wczesnych latach 80-tych.

wprowadź tutaj opis obrazu

Ponieważ Vectrex jest wyjątkowy pod względem korzystania z wyświetlania wektorowego, a nie rastrowego, nie wymagają emulacji dowolnego skomplikowanego sprzętu wideo. Wyświetlacz jest zarządzany przez procesor, a sam wyświetlacz jest łatwy do emulacji w nowoczesnym systemie i zapewnia dobrą wydajność.

Oprócz emulacji wyświetlania wektorowego, procesor ( Motorola 6809) i układ I / O (MOS 6522) nie reprezentują zbyt wiele To wyzwanie, ponieważ są to proste 8-bitowe części, które są bardzo dobrze udokumentowane.

Model pamięci jest również bardzo prosty, bez schematów bankowych, o których jestem świadomy. Vectrex posiada wspólny układ dźwiękowy PSG, ale emulowanie go można uznać za „dodatkowy kredyt”.

W przeciwieństwie do innych prostych konsol do gier z wczesnych lat osiemdziesiątych, gry Vectrex radziły sobie dość dobrze, biorąc pod uwagę jego zdolność do renderowania gładkiej grafiki monochromatycznej, w tym trójwymiarowej siatki drucianej. Dowodzi tego jeszcze popularność nowoczesnego rozwoju „domowego naparu”, w ramach którego programiści nadal tworzą nowe gry Vectrex.

Ostatnią zaletą Vectrex jest to, że oryginalna systemowa pamięć ROM jest swobodnie dystrybuowana.

Komentarze

  • Z wyjątkiem tego, że vectrex dobrze radzi sobie również z ' Wyścigi z wiązką ' kategoria, czy nie ' t it?
  • @Raffzahn, jak rozumiem, procesor Vectrex kontroluje wiązka elektronów – dokładnie odwrotnie niż ” ściganie się wiązką ” sytuacja, w której oprogramowanie musi dokonać precyzyjnych zmian stanu w nadążać za wyświetlaniem skanowania rastrowego z zewnętrznym czasem.
  • @Mark It ' jest to samo z VCS. Tutaj również wiązka jest kontrolowana przez procesor. Bez CPU uzyskującego dostęp do WSYNC każdej linii i zanim linia zostanie ukończona, ekran się załamie. O ile rozumiem OP, ' dotyczy dokładnie nie odtwarzania systemu ze ścisłymi wymaganiami czasowymi – które są niezbędne dla Vectrex.
  • @Raffzahn: CPU w VCS kontroluje pion, ale nie kontroluje poziomu. ' nie jest niczym niezwykłym, gdy gra wyświetla dziesiątki, a nawet setki linii skanowania bez interwencji WSYNC. W przypadku braku WSYNC, wiązka będzie w tym samym położeniu poziomym co 76 cykl. Przechowywanie WSYNC jest często najłatwiejszym sposobem czekania, aż wiązka dotrze do prawej strony wyświetlanego regionu, ale nie jest to jedyny sposób '. Programista, który był tak skłonny, mógłby wykorzystać zawiłe szczegóły ruchu i zachowania duszków, aby napisać grę, która w ogóle nie korzystała z WSYNC.
  • Hm, ludzie, mówimy tutaj o emulatorze. Nie będzie problemu z blaknięciem luminoforów, podczas gdy emulowany procesor zbyt długo rysuje następną klatkę. Nie ma ” belki ” i z pewnością nie ma powodu, dla którego emulator musiałby ” wyścig „, ponieważ wyświetlacz emulatora pozostanie dość statyczny tak długo, jak to konieczne, między klatkami.

Odpowiedź

Tworzenie emulatora od zera to stosunkowo duże zadanie, szczególnie dla niedoświadczonych uczniów, i może okazać się problematyczne. Więc naprawdę musisz uważać na to, jaką platformę emulować i jakie informacje udostępniać / wykorzystywać. Dla mnie najlepszym wyborem jest platforma ZX 48K , ponieważ na niej dorastałem i znam jej wewnętrzne działanie, więc odpowiedź będzie z tego powodu stronniczy … Ale musimy pamiętać, że w dzisiejszych czasach uczniowie zwykle nie widzieli / nie używali / nie wiedzieli tego tak bardzo jak my … Musisz osiągnąć:

  1. poprawna emulacja systemu procesora

    , nawet jeśli istnieje mnóstwo zestawów instrukcji Trzeba uważać, bo na przykład na Z80 99,99% z nich zawiera błędy. Więc powinieneś wybrać dla nich jakiś przetestowany zestaw odniesienia, teraz jest on poprawny (lub przynajmniej w zasadzie funkcjonalny).

    Na przykład tutaj jest mój Z80, który przeszedł ZEXAL ze 100% sukcesem:

    Platforma Z80 ma jedną główną zaletę, a mianowicie istnieją dla niej rozbudowane testery, takie jak ZEXALL Exerciser , który może bardzo pomóc w debugowaniu emulatora.

    Myślę, że są tam również wersje dla i8080, ale nie znam żadnego takiego testera dla inna rodzina procesorów.

  2. Taktowanie

    cóż, do podstawowej emulacji wystarczy metoda tików zegara (lub dławienia), która jest dobrze znana i używana … Nie widzę tutaj problemu. Obecnie komputery mają stosunkowo dobrą rozdzielczość do synchronizacji (na PC: RDTSC, w Windows PerformanceCounter, …).

    Podstawowy emulator może ignorować ZAWARTOŚĆ emulowanej platformy, ale uważaj, że niektóre systemy / gry / aplikacje mogą być bezużyteczne, jeśli nie są prawidłowo emulowane. Dotyczy to nie tylko wersji demonstracyjnych. Zwykłe taktowanie na starych komputerach pochodziło z jakiegoś przerwania (zwykle odświeżania wideo) i ograniczonej liczby cykli, w których można było wykonać przed nim. Jednak biorąc pod uwagę, że liczba instrukcji wykonywanych w tym samym czasie może być bardzo różna, niektóre programy mogą się przepełniać i uszkodzić je samodzielnie lub zawiesić. CONTENTION jest najtrudniejszą rzeczą do zaimplementowania z taktami zegarowymi, więc powinieneś go unikać za wszelką cenę … Z drugiej strony, w przypadku taktowania na poziomie MC jest to naprawdę łatwe i tylko kilka linii kodu.

  3. Dźwięk

    jest to problem zależny od platformy i powinieneś wybrać interfejs API używany do prawidłowe wejście / wyjście dźwięku. Na przykład w systemie Windows jedyną dostępną opcją jest WAvEIN / WAVEOUT ze względu na małe opóźnienie i łatwość użycia. DirectX jest bezużyteczny (przynajmniej w czasie, gdy próbowałem go używać do takiego zadania) z powodu DUŻYCH opóźnień i niedziałających wywołań zwrotnych.

    Użyłem buforowanego podejścia zamiast bezpośredniego sterowania głośnikiem, więc twoja emulacja może pękać czas wykonania zamiast prawidłowego wykonania na poziomie MC (co i tak robię, ale wątpię, by uczniowie byli w stanie to zrobić w danym momencie).

  4. Wideo

    To także zależy od platformy. .. i powinieneś używać API, które są znane Twoim studentom. Nawet śledzenie wiązki jest stosunkowo łatwe do zaimplementowania za pomocą prostej mapy bitowej … Na komputerach takich jak ZX kolejność Scanline ma specjalne znaczenie i może być bardzo rozpraszająca dla początkujących programistów, dlatego lepiej jest używać tabel translacji LUT konwertujących między adresem i współrzędną y wstecz i dalej.

    Większość starszych platform korzystała z częstotliwości odświeżania 50 Hz / 60 Hz i stosunkowo małej rozdzielczości, więc obecnie komputery, nawet z niezbyt dobrze zoptymalizowaną emulacją, powinny nadal być wystarczająco szybkie. Jeśli nie, pomijanie klatek też jest opcją …

  5. inny sprzęt i urządzenia peryferyjne

    Bezwzględne minimum to pamięć RAM / ROM i klawiatura. Pamięć jest zwykle bardzo łatwa, wystarczy statyczna tablica i / lub przełączanie stron … Klawiaturę można emulować, ustawiając I / O zgodnie z naciśniętymi klawiszami. We / wy może być również mapowane w pamięci do jakiejś tablicy, tak jak pamięć. Trapping rutyna ISR jest również opcją, ale to sprawia, że klawiatura nie nadaje się do obsługi niestandardowych klawiszy.

    Nie zawracałbym sobie głowy urządzeniami peryferyjnymi FDC, AY itp., Ponieważ emulator powinien być tak prosty, jak to tylko możliwe. Ale jeśli masz szczęście, niektórzy uczniowie mogą wyprzedzić innych w tym projekcie. Tym, którzy mogą zasugerować wprowadzenie ekscytujących funkcji, takich jak FDC, DMA, a nawet prawdziwy dźwięk karty dźwiękowej (dla prawdziwych taśm lub dowolnych odtwarzaczy audio), które włącza wiele fajnych funkcji, na przykład patrz:

  6. Pliki

    Wybrałbym formaty plików Z80 / SNA pod adresem Użycie TAP / TZX jest przyjemne, ale od samego początku emulator byłby dość błędny, dlatego procedury ładowania mogą nie działać prawidłowo, co utrudnia używanie i debugowanie.

  7. ROM

    Jest to najbardziej problematyczna część, ponieważ wiele ROM-ów platform wciąż nie jest wolnych i przez wyodrębnianie / pobieranie / używanie ich do emulacji możesz zaryzykować kwestie prawne.

    Z niektórych komentarzy wygląda na to, że ROMy ZX są teraz własnością publiczną … i są też ROM z komentarzami pri nts, co znacznie ułatwia debugowanie pierwszych kroków emulatora (gdy nic jeszcze nie działa).

    Ale zawsze powinieneś rozważyć Emulację i kwestie prawne , zwłaszcza jeśli emulatory zostaną umieszczone gdzieś w internecie

Oto kilka moich powiązanych linków do kontroli jakości:

Odpowiedź

Czy szukasz system, który nie był zbytnio emulowany? Proponuję pozostać w obrębie komputerów 8-bitowych (lub wczesnych prostych 16/32 bitowych), ZX Spectrum 48k to taki stosunkowo prosty system – bardzo dobrze udokumentowany, bez spriteów, bez układu audio, nie Banki RAM, proste I / O, si mple grafika (choć z dziwnym układem), nie jest wymagana doskonała emulacja cyklu, dobrze znany procesor, łatwa obsługa kasety (może być jeszcze łatwiejsza dzięki pułapkom ROM). Jest tony gier, wiele z nich ma licencje liberalne.

Wada: jest ogromna liczba dostępnych emulatorów, wiele z nich należy do kategorii retro, a wiele z kodem źródłowym dostępne, więc niebezpieczeństwo oszukania i skopiowania innego kodu jest wysokie.

I oczywiście praca na emulatorze wcześniej nieemulowanego systemu zapewniłaby dodatkową korzyść w postaci poczucia spełnienia.

Komentarze

  • Miałem ten sam instynkt, ale sugerowałbym, że SNA i Z80 oraz wystarczająco dobrze zdefiniowane formaty migawek, których potrzebujesz, ' nie martw się nawet o emulację taśmy. I niech ' bądźmy szczerzy, TZX jest w tym momencie trochę miazmą.
  • Myślę, że pamięć ROM Spectrum jest teraz w domenie publicznej, co może pomóc (lub uczynić wszystko zbyt prostym)
  • ZX Spectrum jest świetnym przykładem prostego sprzętu, ale także dość złożonego programowania zliczania cykli (Racing the Beam), aby uzyskać użyteczne efekty w grze.
  • @Tommy Och, nigdy nie sugerowałbym ZX80 / 81 z tego samego powodu. I chociaż nie jest to prawdziwy fan Spectrum, widziałem dobry kod zależny od czasu. Większość manipulacji na ekranie prominet po wyświetleniu tej części, ale przed jej uruchomieniem. Jest to ' bardzo prosty problem występujący w wielu systemach. Nie jest to duży problem, ale zależy od czasu. Na przykład proste schematy emulacji, które tylko zmniejszają prędkość na poziomie klatki, spowodują bzdury na szybszych hostach emulacji … i tak dalej.
  • @Stormcloud Pamięć ROM Spectrum nie jest w domenie publicznej, chociaż pozwolenie zostało przyznano do dystrybucji go do użytku z emulatorami. ROMy ZX80 i ZX81 zostały wydane na licencji GPL.

Odpowiedź

Czy mogę zasugerować przyjrzenie się niektóre wczesne gry zręcznościowe? W szczególności te dwie platformy 8080 / Z80:

  • Midway 8080 – opracowana w 1975 roku i posiadająca Space Invaders . Używa 256x224x1 bitowego czarno-białego bufora ramki w pamięci RAM.

  • VIC Dual – Sega / Gremlin „Platforma zaprojektowana w 1977 roku – najbardziej znana gra to Carnival . Film jest tablicą 32×28 znaków 8×8 (wszystko w pamięci RAM) i może obsługiwać prosty paleta kolorów, odwzorowana na PROM.

Są bardzo proste do emulacji po uruchomieniu emulacji Z80. Nie ma zabawnych sztuczek linii skanowania ani dziwnych stanów oczekiwania procesora. Gracz elementy sterujące są dostępne za pośrednictwem bitmapowych portów I / O.

Możesz grać na tych platformach interaktywnie na http://8bitworkshop.com/ (Pełne ujawnienie: prowadzę tę witrynę i jestem autorem książek, do których łącza znajdują się w witrynie, które opisują te platformy)

Apple] [jest również dobrym wyborem dla platformy opartej na 6502 chociaż podsystem wideo jest bardziej skomplikowany niż na dwóch platformach zręcznościowych.

Komentarze

  • Po co to ', myślę, że Space Invaders to natchniona sugestia. Jeśli pamięć to obsługuje ' to po prostu 8080 z ekranem bitmapowym 1bpp, trochę portów we / wy dla elementów sterujących, brak próby wyścigu rastra, dźwięk w formie ” wyzwalaj szum X teraz „, bardzo łagodne wymagania dotyczące dokładności, i tworzy grę, którą nadal czasami próbują sprzedać. To ' tylko kwestia legalności, która może spowodować przerwę, chociaż ja ' jestem zawsze niejasny w akademickich wyjątkach.
  • To ' ma rację, ' jest także zewnętrznym chipem, który pomaga w 8080 ' brak dźwigni zmiany biegów. Nie powinno być ' problemów z legalnością emulacji sprzętu (nie ' nie ma chronionego prawem autorskim BIOSu ani innego kodu) i ' jest całkiem łatwe do napisania własnej gry, np .: 8bitworkshop.com/v3.2.0/?platform=mw8080bw& file = game2.c

Answer

PET lub TRS80 mogą działać dobrze. Prosty sprzęt z tekstem na ekranie, dzięki czemu można je emulować za pomocą prostego tekstu, początkowo dodając kod dla ich nieparzystych zestawów znaków później i jest mało prawdopodobne, aby zawierał wiele na drodze dokładnego kodu liczącego cykle.

Dodatkowy pomysł po idź na PET, dodając obsługę C64, dałoby to grafikę.

6502 jest prawdopodobnie prostszy do naśladowania.

Ostatnią myślą może być Ohio Scientific Superboard II lub jego brytyjskie wcielenie UK101, ponieważ nie wydaje mi się, że ma przeprogramowalny sprzęt wideo.

Komentarze

  • Tak, wszystkie trzy (PET, TRS, Superboard (zupełnie zapomniałem o tym ostatnim)) są świetnymi prostymi maszynami i świetnie nadają się do emulacji. Ale brakuje też dobrego wyboru gotowych do użycia gier. Nie wspominając już o kolorach i tym podobnych, eople mogą się dziś spodziewać.

Odpowiedź

Digital PDP-8 to bardzo prosta architektura, dla której można łatwo napisać emulator. Oto kilka powodów:

  • Tylko 8 podstawowych instrukcji
  • Brak interfejsu wideo itp. Do emulacji, tylko we / wy terminala
  • Nie ma potrzeby dokładność cyklu, sama seria maszyn nie gwarantuje tego samego zachowania w różnych implementacjach.
  • Można rozpocząć od prostej konfiguracji (np. maszyna 4Kword z FOCAL-69) i stopniowo zwiększać emulator złożone (np. maszyna 32Kword z rozszerzoną arytmetyką, działająca z systemem OS / 8 z dysku RK05)
  • Wiele podręczników dostępnych online
  • Diagnostyka MAINDEC i ich instrukcje są dostępne online, które mogą być używane do testowania, czy emulacja działa poprawnie.

Może to nie pokrywać wszystkich wymagań, np. we / wy mapowanych w pamięci, ale z pewnością obejmuje takie rzeczy, jak dekodowanie instrukcji i tryby adresowania. dokumentacji sprowadza się do podstawowego poziomu sprzętu, który może być odpowiedni dla kursu EE.

Komentarze

  • Ciekawostką jest to, że większość wspomnianych powyżej systemów ma albo procesory Z80, albo 6502, którym brakuje nieco pod względem obsługiwanych trybów adresowania. Jeśli ważne jest pokrycie trybów adresowania, PDP-8 ma znacznie lepszy wybór do zademonstrowania.
  • Dla ” gry ” aspekt pytania, uważam, że Adventure jest nadal utrzymywana / wskrzeszana dla architektur PDP (ale sprawdź to – mogę się mylić).
  • @TobySpeight You ' w porządku, jest utrzymywany lub wskrzeszany, ale dla PDP-10 , który jest całkowicie niezgodny z PDP-8.

Odpowiedź

O opcji ZX Spectrum już powiedziano: jej siłą jest całkowicie uproszczony sprzęt we / wy oraz fakt, że wiele istniejących gier NIE wymaga precyzyjnego cyklu – poprawna emulacja wszystkich dziwactw z jedynym wyjątkiem dźwięku (nie ma niczego zbliżonego do poprawnego dźwięku bez emulacji procesora z dokładnością do cyklu i poprawnego downsamplingu pośredniego 1-bitowego strumienia dźwięku wytwarzanego przez procesor).

Wszelkie inne opcje sprzętu do gier, takie jak NES, G. Enesis i wszystkie podobne maszyny oparte na spriteach nie wchodzą w grę, oczywiście, ponieważ dużo czasu potrzeba, aby nauczyć się złożonego sprzętu, opracować sposoby na jego emulację, obejść niedociągnięcia w emulacji itp. Na przykład, nawet „proste” Super Mario gra na NES nie będzie działać, jeśli bit kolizji spriteów w PPU nie będzie poprawnie emulowany.

Pozostałe opcje IMHO to:

  1. wczesny IBM PC oparty na trybie tekstowym
  2. dowolna z istniejących maszyn CP / M
  3. (bez „dużych” maszyn sprzed ery „mikro”)

Kluczowy punkt tutaj jest wyświetlacz w trybie tekstowym, który nie jest tak trudny do emulacji i znacznie prostszy do pokazania na maszynie hosta (nawet bez potrzeby wyświetlania pikselowanej grafiki, praca z systemem okienkowym / SDL / itp.!).

Jednak nadal potrzebne są pewne badania, aby zebrać odpowiednie programy do pracy, w tym gry. W CP / M jest kilka gier tekstowych i równie powinno być kilka na IBM PC.

Komentarze

  • Z potencjalną zaletą Maszyna CP / M, która jest ' musi być przynajmniej taka, dla której wystarczy emulacja 8080?
  • Dobrze, ale z drugiej strony są nie ma wielu gier dla IBM w trybie tekstowym, czy jest?
  • @Raffzahn – musi być tylko jeden .
  • @Jules Hehehe … tak, racja. Ale wtedy ' d powiedziałbym, że minimum 8080 wystarczy

Odpowiedź

System z najmniejszą ilością niestandardowych chipów byłby prawdopodobnie czystszym celem do emulacji.

Apple II jest jednym z najprostszych systemów (bez LSI z wyjątkiem procesora 6502), dla których napisano ogromną liczbę (łatwo dostępnych) gier.

Opublikowano również mnóstwo (starych) książek i artykułów na temat architektury systemowej Apple II i procesora 6502. Tak więc system został dość dobrze udokumentowany przez wiele źródeł (z możliwością cytowania).

Emulatory dla Apple II mogą być rzędu 10 tys. Wierszy kodu w języku C, prawdopodobnie nieco mniej, co może pasować do ramy czasowe kursu.

Komentarze

  • Procesor może być prosty, ale emulacja urządzeń peryferyjnych (wyświetlacza itp.) prawdopodobnie nadal byłaby poważnym zadaniem

Odpowiedź

Zakładając, że to jakiś wkład, to są moje bezpośrednie notatki na temat maszyn, dla których napisałem emulatory, w przybliżonym porządku chronologicznym uruchamiania, mam nadzieję, że zaoferuje trochę koloru w formatach plików itp.:

Atari 2600

Cechą wyróżniającą Atari 2600 jest synergia między procesorem a wyjściem graficznym; gry mają zaimplementowaną funkcję czasu rzeczywistego, która dostarcza komponenty graficzne do wyjścia wideo w trakcie pracy rastra. Myślę więc, że jest to zły wybór do określonego celu – prawdziwa ciężka praca nad napisaniem emulatora 2600 taktowanie i współdziałanie poza mikroprocesorem.

Apple II

Względnie prosty sprzęt, ale bardzo zniuansowany, z wieloma trybami graficznymi i musisz skupić się na nauczaniu wideo NTSC, aby móc dekodować wyjście koloru. Emulacja dysku II jest również prawie koniecznością, ale jest to samo w sobie zadanie, ponieważ większość popularnych formatów plików wymaga, abyś udostępnił koder Apple GCR.

ZX80 / 81

Również prawdopodobnie zbyt skomplikowane w podanym celu, głównym pomysłem jest zmiana przeznaczenia cyklu odświeżania procesora i podzbioru pobierania instrukcji w celu skanowania wideo. Jeśli zdecydujesz się nie zaimplementować ponownie tego mechanizmu, tak jak w oryginale, otrzymasz tylko domyślny tryb tekstowy ROM.

Commodore Vic-20

To jest zwykła maszyna bitmapowa z prostym procesorem w 6502 i przyzwoitą ilością gier, z których część została dostarczona na kartridżach, zwalniając Cię z konieczności emulacji napędu taśmowego lub dyskowego. Jedyną muchą w maści są 6522; układy zmiany biegów / wejścia / wyjścia z całą masą dziwactw. Ale fajną zaletą Vic-20 jest to, że uruchomi się aż do zachęty BASIC bez działających 6522s, a sam BASIC będzie działał tylko z zaimplementowanymi zegarami 6522 , nawet niedokładnie.

Krótki czas, kiedy był liderem rynku przed pojawieniem się C64, ogranicza również liczbę tytułów, które wykorzystują zaawansowany sprzęt – istnieją współczesne przykłady wyścigów rastrowych, takie jak tytuły Imagic , ale są w mniejszości.

Formaty plików, w których przechowywane są dane, to bałagan , ale ograniczenie się do obsługi kartridży i uważne używanie tylko tych tytułów, które zostały dostarczone na kartridżu powinno rozwiązać ten problem.

ZX Spectrum

Opisano gdzie indziej; Myślę, że to dobry wybór. Zwłaszcza jeśli trzymasz się formatów plików migawek.

Oric 1 / Atmos

Opisano gdzie indziej; przyzwoity wybór, ale jest tam jeszcze jeden z tych nieznośnych 6522. Większość gier jest dostępnych na taśmie, musisz to wszystko obsługiwać.

Acorn Electron

Bitmapowe, 6502 plus stosunkowo prosta zewnętrzna logika, ale sześć różnych trybów graficznych i taktowania byłoby kłopotliwe – koszt każdego cyklu jest funkcją dostępnego obszaru (ROM versus RAM), trybu graficznego (40-kolumn w porównaniu do 80-kolumn tryby) i prawdopodobnie aktualny stan wyjścia grafiki (80-kolumnowe tryby blokują dostęp do pamięci RAM w obszarze pikseli; 40-kolumnowe tryby nie). Ale możesz po prostu modelować go jako maszynę 1MHz dla większości gier i przeważnie uciec wersja wyjścia graficznego zorientowana na linię.

Istnieje niewielka liczba gier dostępnych w pamięci ROM, ale na szczęście sprzęt taśmowy w większości zezwala na emulację bardzo niskiej jakości: jest to podobny sposób, który podnosi przerywać po otrzymaniu bajtu, mając tylko dwa tytuły, o których myślę, aby przeprowadzić głębszą introspekcję.

Amstrad CPC

Prawdopodobnie jeden aby tego uniknąć w określonym celu – ma 6845 CRTC, co zapewnia bardzo konfigurowalne wyjście graficzne, a tym samym wiele tytułów, które ścigają się w rastrze. Użycie dysku również było dość powszechne, ale jego kontroler dysku 8272 to cały dodatkowy poziom bólu głowy w porównaniu z WD1770, który często widzisz gdzie indziej.

MSX i / lub ColecoVision / SG1000

Różne układy dźwiękowe, ten sam procesor i wideo.Właściwie myślę, że można całkiem daleko zignorować współdziałanie taktowania, ponieważ układ wideo utrzymuje własną pamięć RAM na wyciągnięcie ręki. Ale to kafelki i spritey oraz cztery różne tryby graficzne, prawdopodobnie zbyt duże przedsięwzięcie jak na kurs mikroprocesorowy.

Główny system

Technicznie ulepszony SG1000, będący wszystkim, co robi maszyna plus dodatkowy tryb graficzny, ale dodatkowy tryb graficzny jest o wiele lepszy niż inne, że tylko jeden tytuł używa wszystkiego jeszcze. Więc właściwie to trochę upraszcza sprawę, jeśli jesteś zadowolony w sferze przeważnie ignorowania timingu.

Ale nadal mówisz o braniu pod uwagę priorytetów spriteów, sprawdzaniu kolizji na piksel itp. Prawdopodobnie za dużo .

Przypis: oszukiwanie z dostępem do taśmy

W przypadku kilku komputerów domowych wspomnianych powyżej, możesz pominąć emulację taśmy dla wszystkiego, co jest zakodowane w domyślnym formacie ROM, po prostu wstawiając odpowiednią pułapkę w systemowej pamięci ROM i buforowanie z pliku źródłowego. Wiele tytułów, ale nie wszystkie, opiera się całkowicie na wbudowanej pamięci ROM dla taśm IO, dzięki czemu można załadować wiele tytułów bez prawdziwej próby sprzętu.

W każdym przypadku jest to hack, ale zrobię to, jeśli ta strona emulacji nie jest dla ciebie ważna – wolisz po prostu usunąć ją z równania i zignorować to, co nie działa.

Konkretnie:

Vic-20:

  • jeśli licznik programu osiągnie wartość 0xf7b2, skopiuj następny nagłówek taśmy do lokalizacji wskazanej przez b3: b2, wyzeruj 0x90 i 0x93 i kontynuuj od 0xf7b5 (unikając JSR);
  • pułapka 0xf90b, sprawdź X = 0xe, jeśli tak, to pobierz następną treść danych taśmy i zapisz do emulowanej pamięci z c2: c1, ale nie dalej niż af: ae niezależnie od rozmiaru treści, następnie ustaw bit 6 na 0x90, wyczyść flagi przenoszenia i przerwania i kontynuuj od 0xfccf.

Oric:

W przypadku ROM 1.0 pułapka komputera pod adresem 0xe630. W przypadku wersji 1.1, wypatruj adresu 0xe6c9.

Po złapaniu tego, załaduj A z kolejnym bajtem z taśmy i ustaw flagę zerową zgodnie z jego wartością.

Następnie RTS.

Istnieje również flaga 0x67 na oryginalnej pamięci ROM lub 0x24d, która rozróżnia szybkie i wolne kodowanie taśmy maszyny, ale zwykły format pliku taśmowego ma tylko zdekodowane bajty, więc dla szybkiego i szybkiego brudna emulacja nie martw się o to.

Electron:

Zainstaluj NOPy w 0xf4e5, 0xf6de, 0xf6fa i 0xfa51, aby wyłączyć rozgałęzienia taśmy. System operacyjny będzie teraz próbował załadować dane z taśmy tak, jakby znajdowały się w szeregowej pamięci ROM.

Połącz komputer z adresem 0xf0a8 i sprawdź, czy X register jest równe 14, a wartość pod adresem 0x247 wynosi zero. Wtedy będziesz wiedział, że ROM próbuje pobrać następny bajt z taśmy.

Umieść następny bajt w Y, ustaw A na 0 i RTS.

Podstawowy format pliku taśmowego w większości przypadków pozwala na buforowanie bajtów bezpośrednio z pliku (po kilku trywialnych elementach nawigacyjnych gation i przez ZLib lub inny dekompresor GZ, chociaż można było wcześniej zgrać z pistoletem).

ZX Spectrum:

(Ten jest przepisywany z bardzo starych notatek; może warto to potwierdzić przed demontażem ROM)

Uwięź komputer PC osiągający 0x056c w 48kb ROM. Chwyć następny blok z taśmy (jeśli używasz pliku TAP, otrzymasz go bezpośrednio; uważam, że nie powinieneś próbować obsługiwać TZX w tego rodzaju projektach).

Jeśli jego długość jest mniejsza niż wartość w DE, zresetuj przeniesienie i powrót.

Porównaj pierwszy bajt bloku z wartością B. Jeśli nie pasują, zresetuj przeniesienie i powrót.

W przeciwnym razie buforuj pierwsze bajty DE, które dostałeś, pod adres wskazany przez IX i ustaw niski bit C i ustaw przeniesienie.

Następnie albo bezpośrednio wykonaj RET, albo po prostu pomiń komputer naprzód do 0x05e2, który jest RET, który normalnie kończy ładowanie taśmy.

Maszyny 128kb przechodzą do 48kb ROM w celu załadowania taśmy, więc ten sam hack dotyczy sprawdzenia, co jest na stronie.

Komentarze

  • Niezłe podsumowanie. Zgadzam się ze wszystkim, co zostało powiedziane – może z dwoma małymi dodatkami do Apple II. Prawdą jest, że sprzęt wideo wymaga trochę przemyślenia, jego finezję można całkowicie zignorować w naśladowaniu, tak jak tylko równoważność pewnych wzorów bitowych musi zostać przetłumaczona na kolor – jeśli w ogóle, jak A2, gdzie dość często jest uruchamiany z monochromatycznym ekranem, z którym można go emulować jako zwykłą mapę bitową bez dalszych szczegółów. Po drugie, tak długo, jak odtwarzane Gemes są oparte na ProDOS, nie jest potrzebna szczegółowa emulacja dysku II, ponieważ działa to z różnymi urządzeniami.
  • @Raffzahn Jaka byłaby najprostsza forma tabeli przeglądowej kolor wyjściowy być?Wracając z NTSC i traktując wszystko jako rozkładalne do podwójnej wysokiej rozdzielczości, mogę sobie wyobrazić tabelę indeksowaną przez trzy-bitowy licznik reprezentujący fazę plus pięciobitowy rejestr przesuwny wyjścia wideo, aby uzyskać pół cyklu kolorów z punktem środkowym. Czyli tabela z 256 wpisami. Ale to ' to bardzo naiwne rozumowanie; czy ludzie radzili sobie lepiej?
  • @Tommy: Prostym podejściem jest po prostu użycie powtarzającej się sekwencji czterech kolorów (myślę, że (czerwony, ciemnożółty, zielony, niebieski) dla podwójnych pikseli o wysokiej rozdzielczości i rozmycia trochę ekranu. W efekcie na niektórych przedmiotach pozostaną kolorowe prążki, ale prawdziwe monitory i tak to robią. Ponieważ Apple] [wideo nie spełnia specyfikacji, ' s nie jeden ” prawy ” sposób, aby go wyświetlić, a prawdziwe monitory będą wyświetlać rzeczy nieco inaczej.

Odpowiedź

Myślę, że używanie gier graficznych jako celu może zbytnio rozciągać uczniów. Uruchamianie gry wymaga generalnie dobrej emulacji nie tylko większość funkcji procesora, ale także dużo sprzętu, nie tylko obwody wideo (które są często dość złożone iw wielu przypadkach powodują wiele problemów z synchronizacją). Jeśli coś nie działa prawidłowo, wyniki są prawdopodobnie będzie bardzo dis mianowanie. Sugerowałbym rozpoczęcie od łatwiejszego celu.

Chciałbym mieć system, który ma interfejs w trybie tekstowym zamiast graficznego, ponieważ takie interfejsy są zwykle dużo prostsze i mogą nie mieć szczególnych wymagań czasowych które muszą być spełnione (tj. często działają one całkowicie równolegle z dostępem procesora do pamięci bez jakiegokolwiek wpływu na procesor). Poleciłbym również system, który ma zintegrowany program monitorujący na poziomie maszyny, ponieważ pomoże to w debugowaniu programów działa na maszynie bez konieczności implementowania debuggera na poziomie emulacji.

Sugestią opartą na moim obecnym osobistym projekcie badawczym jest komputer Nascom 2. Jest to stosunkowo prosta maszyna oparta na Z80 ze sprzętem obsługującym tryb tekstowy, nie współdziała z procesorem (jeśli istnieje rywalizacja, jest rozstrzygnięta na korzyść procesora, co oznacza, że teoretycznie garść pikseli w każdej klatce może nie być wyświetlana, jeśli dostęp do ekranu jest wykonywany w tym samym czasie, co odświeżanie występujące, ale th jest mało prawdopodobne, aby był szczególnie zauważalny lub nawet częsty, więc daje użyteczny wynik przy bardzo prostym sprzęcie). Dlatego precyzyjne ustawienie czasu nie powinno być szczególnie trudne lub ważne dla tej maszyny. Sprzęt maszyny jest prosty i dobrze udokumentowany. Zintegrowane urządzenia peryferyjne to UART (który może być używany do zdalnego terminala / drukarki lub do ładowania i zapisywania kasety … co oznacza, że nie ma potrzeby emulacji obsługi kasety na poziomie audio, oszczędzając w ten sposób dużo czasu implementacji) i równoległy moduł IO. Dostępne narzędzia zachęcają również do eksperymentowania z językiem asemblerowym, co, jak sądzę, jest pożądanym celem twojego kursu.

Jedną interesującą rzeczą w tej maszynie jest to, że istnieje luka w dostępnych opcjach emulacji: najbardziej znana strona internetowa o maszynie zażądała emulatora opartego na javascript, który może osadzić na stronie, ale jak dotąd nikt go nie udostępnił.

Odpowiedź

Zrobiłem dwie i trochę od zera emulacje dla Maca przy użyciu Swift. To są moje osobiste obserwacje oparte na moim doświadczeniu.

Żadna z moich emulacji nie jest w pełni zgodna z cyklem, co prowadzi do kilku problemów.

Commodore PET

To była pierwsza emulacja, którą napisałem. Potrzebujesz co najmniej emulacji 6502, emulacji PIA, emulacji VIA i emulacji wideo.

6502 jest naprawdę prostym i doskonałym na początek doskonałym procesorem. Jest to również całkiem dobrze udokumentowane. Witryna Visual6502 była nieoceniona przy opracowywaniu dokładnego zachowania instrukcji, w których dokumentacja była niejednoznaczna. Na marginesie napisałem emulację nieco późniejszego procesora (zapomniałem który), który wypełnił niektóre z luki w zestawie instrukcji. Dzięki temu pisanie kodu testowego 6502 było dużo prostsze (nawet PHX i PHY upraszczają niektóre rzeczy. z drugiej strony każde oprogramowanie, które korzystało z „nieudokumentowanych instrukcji” oryginalnego 6502, zepsuje się podczas mojej emulacji.

PIA i VIA są stosunkowo prostymi układami IO do emulacji. Sterownik wideo może być tak prosty, jak czytanie pamięci RAM ekranu, tłumaczenie na ASCII lub bliskie przybliżenie i rysowanie wynikowego tekstu w oknie. W końcu stworzyłem zestaw bitmap, które były dokładnymi kopiami zestawu znaków PET.

Moje główne źródło informacji PET był „Programming the PET / CBM” Raeto West. Mam oryginalną kopię, ale jest wersja PDF Sions on-line. Ważna jest również dostępność BASIC i KERNAL ROMS.Nie chcesz przepisywać systemu operacyjnego.

Emulowanie napędu taśmowego to PITA. Moja wersja oprogramowania była mniej niezawodna niż wersja rzeczywista, o czym właściciele PET będą wiedzieć, że naprawdę coś mówi. Pomyślałem, że problem polega na tym, że opiera się on na impulsach taktowania zgodnych z cyklem i chociaż mój emulator liczy impulsy zegara, niekoniecznie wywoływał przerwanie timera we właściwym czasie.

Miałem więcej sukcesów podczas pisania emulacja dwóch dysków. Wymagało to również solidnej emulacji IEEE 488, ale emulacja dysku była dość łatwa. To nie jest emulacja sprzętowa, po prostu pobiera polecenia wysyłane przez PET i wykonuje je przy użyciu płaskich plików na dysku twardym komputera Mac.

Na koniec napisałem kod, który zatrzymałby emulator, bezpośrednio wstrzyknij plik programu do pamięci, a następnie ponownie uruchom emulator. Okazało się to o wiele wygodniejsze niż emulowanie dysków lub taśm, że przestałem na nich pracować.

Mój emulator działa wystarczająco dobrze z większością kodu PET. Niestety, występuje problem z PET Space Invaders – prawdopodobnie spowodowany kodem klawiatury – więc nie rozpoznaje on poprawnie naciśnięć klawiszy. Nie próbowałem też zajmować się generowaniem dźwięku.

Sinclair ZX Spectrum

Pod pewnymi względami jest to nawet łatwiejsze niż PET. Musisz napisać emulator Z80, który jest bardziej złożony niż 6502, ale istnieje zestaw testów CPM, którego możesz użyć do weryfikacji wielu jego funkcjonalności, wystarczy emulować podprogram wyjściowy znaków CPM, aby działał.

Jedyne inne chipy, które musisz emulować, to ULA i nie musisz tego robić zbyt wiele, jeśli chcesz zrezygnować z napędu taśmowego. Ponadto generator wideo, który jest nieco dziwny w sposobie adresowania pamięci RAM ekranu.

Naprawdę fajną rzeczą w Spectrum jest to, że ekran jest zawsze w trybie bitmapy, a system operacyjny tworzy znaki bezpośrednio zapisywanie wzorców pikseli zapisu. Nie musisz się martwić o zestaw znaków, ponieważ jest on magicznie tam, kiedy uruchamiasz emulator z załadowanymi ROMami Spectrum.

Spectrum doprowadziłem do punktu, w którym mogłem załadować i uruchomić Manic Miner i można go było odtwarzać, choć bez dźwięku. Od początku do końca pracowałem około trzech miesięcy, około ośmiu godzin tygodniowo.

Commodore 64

To jest praca w toku. Oczywiście miałem już 6502, który zmodyfikowałem, aby dać mi port IO 6510. Jak dotąd bank przełączanie poprawnie, część funkcji CIA jest zaimplementowana i emulowana jest wystarczająca funkcjonalność VIC II, aby dać mi odpowiednik PET, tj. działa normalny tryb tekstowy. Działa również ramka i pamięć kolorów znaków. mam bardziej skomplikowane tryby graficzne do emulacji i spriteów i powinienem być w stanie zrobić coś z dźwiękiem, ponieważ jest to oddzielny układ, nie polegam na dokładnym taktowaniu procesora.

TL; DR

Najłatwiejsza emulacja, poza procesorem, była Spectrum. Prawdopodobnie zacznę od tego, chociaż stary komputer oparty na CP / M 8080 może być jeszcze łatwiejszy, jeśli zdobędziesz CP / M.

Dalsze obserwacje

Prawdopodobnie będziesz potrzebować dobrego cross-assemblera dla swojej platformy docelowej. To robi bardzo żmudne ręczne tworzenie kodu do testów jednostkowych.

Również deasembler będzie przydatny. Nie musiałem rozbierać ROMów Commodore BASIC, ponieważ demontaże są swobodnie dostępne w Internecie. Ale kiedy próbowałem zmusić Space Invaders do pracy, na początku nie działało, a deasembler był nieoceniony przy rozwiązywaniu problemów.

Z tego powodu pakiet cc65 jest dobrym argumentem za rozpoczęcie od maszyny opartej na 6502. Zawiera dobry asembler i świetny deasembler. Sytuacja Z80 nie była zbyt dobra, ale ostatecznie znalazłem rozsądnego asemblera o nazwie z80asm. Myślę, że musiałem jednak skompilować go ze źródeł.

Będziesz także potrzebować dobrej, solidnej dokumentacji. Ponownie, dokumentacja 6502 jest praktycznie niezrównana. Dokumenty są mniej dostępne dla Spectrum, ale tak jest tak proste, że możesz ujść na sucho z dość tandetną emulacją ULA.

Odpowiedź

Wraz ze wszystkimi innymi dobrymi sugestiami, jak alternatywą dla Z-80 i CP / M, możesz rozważyć ogólny system Motorola 6809 do uruchomienia FLEX lub prawdopodobnie OS-9 , oba inspirowane Uniksem. Jako system oparty na CLI nie ma potrzeby, aby uzyskać dokładny czas.

Ponadto, jeśli „przebudowujesz symulator, przypomina to budowanie sprzętu; przenoszenie systemu operacyjnego było prawdziwe zadanie – które zrobiłem w latach 80-tych – w przeciwieństwie do zadania klonowania czegoś dla edukacji.„Czy uruchamia system operacyjny i uruchamia programy?” jest bardzo realistycznym celem.

Ponieważ działa na przenośnym systemie operacyjnym, który działa na sprzęcie wielu różnych producentów, oznacza to, że uczniowie nie mają na to tylko jednego sposobu. Student A może zbudować wyświetlanie mapy bitowej; Uczeń B może stworzyć UART i mieć interfejs szeregowy. Niektórzy mogą próbować naprawić każdy cykl; niektórzy mogą próbować po prostu poprawić każdą operację. Dlatego zamiast po prostu próbować skopiować coś bez koniecznego zrozumienia oryginału ograniczenia projektowe, uczniowie są zaangażowani w odpowiednie pytanie techniczne: jak to zrobić?

CPU

  • 6809 był wyjątkowy w tamtym czasie, ponieważ można było napisać kod całkowicie niezależny od pozycji, który działałby identycznie, gdziekolwiek byłby w pamięci.
  • Zestaw instrukcji był prawie całkowicie ortogonalny
  • Jako 8-bitowy procesor z 16-bitową magistralą adresową jest całkiem prosty
  • Mechanizm wyjątków i efektywny Manipulacja adresami jest bardzo podobna do nowoczesnych procesorów
  • Jako projekt Motoroli miał on mapowane na pamięć operacje we / wy zamiast specjalnych instrukcji we / wy.
  • Łatwiejsze do wykonania niż Z-80 (znacznie mniej instrukcji ) lub 6502 (mniej przypadków specjalnych)
  • Materiał za pośrednictwem https://en.wikipedia.org/wiki/Motorola_6809

FLEX został zaprojektowany jako system inspirowany Uniksem dla 8-bitowych procesorów

  • Został specjalnie zaprojektowany z myślą o przenośności, a aby go uruchomić, zaimplementowano bardzo niewiele wywołań systemowych – myślę, że wystarczy odczyt / zapis znaków, odczyt / zapis bloku dyskietek i jakiś rodzaj rozruchu (odczyt sektora i skok do niego).
  • Te podstawowe funkcje są niezależne od sprzętu, co znacznie ułatwia symulację.
  • Emocjonujące jest napisanie zaledwie kilku funkcji i uruchomienie całego systemu operacyjnego
  • Brak grafiki, o którą można się martwić (co jest pozytywne lub negatywne w zależności od twojego poglądu)
  • Wiele dostępnych materiałów, np. ind via https://en.wikipedia.org/wiki/FLEX_(operating_system)

OS-9 podobny w zamiarze

  • Bardziej Unix-like niż FLEX, nieco trudniejszy do przeniesienia, o ile pamiętam
  • Później przeniesiono do 68000
  • Wiele dostępnych materiałów można znaleźć w https://en.wikipedia.org/wiki/OS-9

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *