Anul viitor urmează să predau o clasă de microprocesoare de 2 semestre studenților EE din anul III. Înscrieți-vă la clasă, elevii trebuie să fi terminat cursurile de programare și sisteme digitale.
Pentru a motiva elevii cu o aplicație reală a conceptelor predate în clasă, iau în calcul posibilitatea de a efectua sarcini studenții care au creat de la zero un emulator pentru un sistem mai vechi, ca un proiect de grup care urmează să fie finalizat până la sfârșitul clasei (care este, după cum sa subliniat, lung de 2 semestre).
Încerc să alegeți un sistem țintă bun pentru acest proiect, scopul principal fiind acela de a fi destul de simplu de imitat. Cu cât sunt mai puține periferice de imitat, cu atât mai bine. Cu cât sunt mai puține ciudățenii și erorile care trebuie reproduse, cu atât mai bine. Încerc să expun studenții la conceptele importante de limbaj de asamblare, codificare a instrucțiunilor, moduri de adresare, registre CPU, registre hardware cartografiate în memorie etc. cu tehnologia semiconductorilor care era disponibilă în anii 1980 la un cost acceptabil. Înțeleg că acest lucru era necesar în acel moment; încerc doar să găsesc un sistem care să nu abuzeze prea mult de aceste trucuri. În mod ideal, sistemul în cauză nu ar trebui necesită o emulare precisă a ciclului sau trucuri precum urmărirea liniei de scanare.
O a doua cerință se referă la performanță. Cu siguranță, studenții nu sunt familiarizați cu tehnicile de optimizare a software-ului, așa că încercarea de a imita chiar și prima Playstation sau Nintendo 64 va avea probabil probleme de performanță (poate chiar SNES și Genesis). În acest moment, studenții trebuie doar să fie îngrijorați de implementarea emulatorului corect, nu eficient. Emularea CPU va fi cu siguranță implementată de un interpret, nu de un traducător / recompilator.
În cele din urmă, nu cred că elevii ar găsi emulatorul interesant dacă, să zicem, tocmai s-au afișat valorile registrului după executarea unui program de jucărie (deși acest lucru ar face proiectul mult mai simplu). Mi-ar plăcea să aleg un sistem pentru care s-au făcut jocuri, chiar dacă sistemul respectiv nu era o consolă de jocuri video dedicată. Simt că posibilitatea de a rula jocuri pe emulator ar fi foarte motivațională pentru studenți.
De exemplu, acum mă uit la NES , dar se simte totuși puțin complicat, mai ales PPU. Există opțiuni mai simple?
Comentarii
- Întrebare interesantă. ar putea fi important să adăugați o pledoarie pentru răspunsuri pentru a rămâne departe de luptele obișnuite despre sistemul mai bun / cpu / vdu / etc. și să vă concentrați asupra părții didactice.
- Există o contradicție aparentă în întrebare. un punct, autorul dorește să se concentreze pe emularea procesorului, din celălalt punct, dorește să aibă și imagini și sunet emise de întregul sistem emulat. În timp ce cererea pentru acesta din urmă este de înțeles, aceasta duce la munca la fel de grea pe emularea perifericelor, afișarea de imagini și redarea sarcinilor de sunet.
- Resursă posibil utilă, presupunând că ajunge să fie o mașină Z80 mai degrabă decât o 6502: z80.info/decoding.htm despre decodarea algoritmică a instrucțiunilor Z80 (sub rezerva unui număr de cazuri speciale, dar există). Solicitarea unui emulator decodează algoritmic mai degrabă decât prin căutare ar restrânge capacitatea studenților de a copia și lipi, precum și de a fi relevantă pentru un curs de microprocesoare?
- Este posibil să nu fie ceea ce căutați, dar poate mai degrabă decât să scrie un emulator (pe care ‘ îl presupun că vor rula pe computerul lor), ar putea să demonstreze aceleași cunoștințe conceptuale lucrând cu hardware-ul real. Puneți-i să primească o placă de dezvoltare bazată pe ARM Cortex M4, să învețe să lucreze cu metalul gol.
- poate TI-83 …?
Răspuns
Vreau să transmit CHIP-8 .
Acest sistem este în esență, o mașină virtuală dezvoltată dintr-un anumit motiv. Există jocuri scrise pentru CHIP-8. Are câteva opcodes, un stack, câteva temporizatoare și un afișaj bitmap cu rezoluție mică, dar este suficient de simplu încât primele câteva emulatoarele se încadrează în câțiva kiloocteți pe computerele timpurii pe 8 biți.
Există mai multe implementări de referință pe care le-ați putea folosi.
Există jocuri și așa mai departe care sunt în public domeniu deja, cum ar fi aici , astfel încât să nu aveți nevoie de propriile dvs. jocuri.
Comentarii
- Ayy for Chip 8. Este ‘ ușor de găsit implementări în multe limbi, iar arhitectura este simplă.
- CHIP-8 este un instrument excelent idee pentru o introducere în emu datorită simplității sale.După ce am mai scris un emulator NES, vă pot spune că scrierea procesorului a fost extrem de consumatoare de timp și de obositoare – iar 6502 este simplu în ceea ce privește procesorul. În schimb, CHIP-8 are doar 35 de instrucțiuni foarte simple. În plus, multe sisteme s-au bazat pe comportamente precise de sincronizare între CPU și restul hardware-ului, în timp ce CHIP-8 nu are o astfel de cerință.
- Comentariile nu sunt pentru discuții extinse; această conversație a fost mutată în chat .
- Eu ‘ sunt un programator cu experiență, dar Nu am scris niciodată un emulator. După acest răspuns m-am gândit: ” Hei, acest chip8 arată destul de ușor, ‘ voi petrece câteva ore pe el „. Trei săptămâni mai târziu, încă ‘ sunt încă aici încercând să dau seama de ce programele continuă să sară din spațiul de memorie. Multă distracție, de asemenea, o mulțime de ” ce naiba „.
- Mă întreb dacă ar fi existat vreunul impediment pentru eliminarea așteptării vblank din rutina de complot-sprite și adăugarea unei instrucțiuni explicite vblank-wait? CDP1802 nu este ‘ un demon de viteză, dar aproape sigur ar putea desena mai mult de un sprite pe cadru în absența așteptării vblank.
Răspuns
Oh. Frumoasă întrebare. Voi încerca să vă dau câteva sugestii, dar aș considera că problema cu care se poate răspândi în general ar trebui să răspundă aici în locul unei conversații mai semnificative. Cu toate acestea:
[…] sarcina studenților cu crearea unui emulator pentru un sistem mai vechi
Destul de cool.
de la zero,
Dacă se presupune că acest lucru este într-adevăr de la zero și în software, nu ar fi cu adevărat consideră că este o sarcină potrivită pentru boboci într-un timp atât de limitat. Dacă nu există o modalitate de a elimina cerințele în timp real (care sunt și mai relevante pentru jocuri), aș prefera să fiu atent.
De fapt, întrucât este vorba despre EE, de ce să nu facem hardware-ul real? Este încă ușor să obțineți (unele) CPU clasice și dispozitive conexe. Combinat cu un LCD modern, efortul hardware este destul de realizabil în câteva săptămâni în detaliu.
ca proiect de grup care urmează să fie finalizat până la sfârșitul anului clasa (care, după cum s-a subliniat, are o lungime de 2 semestre).
Care ar putea fi condiția cea mai strânsă.
Încerc să aleg un sistem țintă bun pentru acest proiect, scopul principal fiind acela de a fi destul de simplu de imitat. Cu cât sunt mai puține periferice de imitat, cu atât mai bine. mai puține ciudățenii și erori care trebuie reproduse, cu atât mai bine.
Sună ca o încercare bună. Și mai important, elimină unele sisteme aparent simple (cum ar fi singleboarderi) din listă, deoarece se bazează pe gestionarea complexă a dispozitivelor I / O (cum ar fi accesul în timp real la porturi pentru a conduce segmente LED într-un mod aparent continuu).
Încerc să expun studenții la conceptele importante de asemb limbajul, codificarea instrucțiunilor, modurile de adresare, registrele CPU, registrele hardware mapate etc. etc.
Ceva care se poate face cu un hardware real ca la fel ca o emulare, nu-i așa?
În mod ideal, sistemul în cauză nu ar trebui să necesite o emulație precisă a ciclului sau trucuri precum urmărirea liniei de scanare.
Împreună cu cerința implicită pentru o ieșire video, aceasta necesită o logică simplă de bitmap neaccelerată.
O a doua cerință se referă la performanță. Cu siguranță, studenții nu sunt familiarizați cu tehnicile de optimizare a software-ului, așa că încercarea de a imita chiar și prima Playstation sau Nintendo 64 va avea probabil probleme de performanță (poate chiar SNES și Genesis).
Nu m-aș teme prea mult aici, deoarece hardware-ul real al computerului este destul de rapid. Problemele reale aici nu sunt viteza de emulare, ci aspecte în timp real – sincronizarea diferitelor părți de emulare – care necesită un design software foarte atent și reglat fin. Nu este de așteptat aici. Destul de partea „racing the beam” pe care ați menționat-o.
În acest moment, studenții trebuie să fie îngrijorați doar de implementarea corectă a emulatorului, nu eficient. Emularea CPU va fi cu siguranță implementată de un interpret, nu de un traducător / recompilator.
Totuși, chiar și pentru cele mai primitive, sincronizarea în timp real este necesară pentru joacă un joc. Cel puțin o sincronizare a urmăririi ecranului este o necesitate – nu cel puțin pentru a comuta viteza simulării în sine.
Nevoia inerentă a jocurilor de a utiliza efecte de sincronizare – și manipularea sincronizată a ecranului la un nivel mai fin decât cadrele – este ceva care va face din rularea oricărui joc din lumea reală pe emulatorul propus o provocare.
Aș dori să aleg un sistem pentru care s-au făcut jocuri, chiar dacă sistemul respectiv nu era o consolă de jocuri video dedicată. Simt că posibilitatea de a rula jocuri pe emulator ar fi foarte motivațională pentru studenți.
Sunt de acord din toată inima aici. O mare parte din succesul experimentelor și sistemelor de învățare ale lui Andre LaMothe se bazează pe cea mai importantă abilitate de a face jocuri.
De exemplu, acum mă uit la NES, dar se simte totuși puțin complicat, în special PPU. Există opțiuni mai simple?
Devine greu, deoarece cerințele de bază se contrazic reciproc. Numai consolele / computerele de succes au obținut o selecție largă de jocuri, dar acestea sunt, de asemenea, având o structură hardware mai complexă care permite jocuri grozave.
Să verificăm câteva sisteme bine cunoscute. Aș dori să le separăm în sisteme „simple” și „complexe” de-a lungul complexității logicii lor video (* 1)
Sisteme simple
În prima iterație toate acestea sunt sisteme fără un VDC / CRTC dedicat.
-
Atari VCS – în cele din urmă sistemul suprem care va fi folosit pentru a învăța asamblorul, pentru a lucra la un nivel de bază extrem, fără intermediar și nu prea mult de care să ai grijă. „Este omonimul pentru termenul„ curse cu fasciculul ”.
Acestea fiind spuse, ar putea fi totuși un sistem de căutat, deoarece părțile dependente de sincronizare sunt bine definite și (comparativ cu orice alt videoclip) extrem de simplu și ușor de imitat – cu excepția faptului că nu sunt lucruri de boboc. De asemenea, este extrem de bine documentat în sursele generale disponibile.
-
Commodore PET – Un sistem destul de simplu, mai ales că întreaga parte video poate fi emulată destul de abstractă, totuși VIA trebuie să fie, cel puțin parțial, imitate. Cel mai important conține doar două surse de sincronizare (lângă ceas).
Un mare plus pentru PET (și urmări) este documentarea bună (datorită și simplității sale). De asemenea, deși are un CRTC, aproape niciun joc (sau alt software) nu a folosit deloc reprogramarea acestuia, făcând posibil un mod simplu și o emulare incompletă (abstractă).
Pe partea din spate, există doar un număr destul de mic de jocuri și cele mai multe dintre ele sunt scrise în BASIC, ceea ce poate necesita unele cercetări pentru a găsi cantitatea de abstractizare față de detaliu în emulare.
-
Apple II – Din nou, un sistem incredibil de bine documentat, cu o mulțime de software. O mare parte din aceasta se bazează pe asamblare. Deși hardware-ul este complet documentat și construit doar din TTL, funcționarea sa nu este foarte simplă și, deoarece unele jocuri se bazează în mare măsură pe ciudățenii și numărarea buclelor pentru sincronizarea exactă, emularea se poate complica mult mai mult decât se presupune la prima vedere.
Un plus pentru dvs. ar putea fi faptul că Apple II era destul de popular în Brazilia (pe vremea aceea).
-
TRS-80 – Și aici logica video este construit din TTL, dar mult mai simplu decât pe Apple. Alte I / O similare sunt destul de simple. Din punct de vedere negativ este din nou un număr destul de mic de jocuri.
Până în prezent, anticii reali, dar și unele sisteme ulterioare pot fi clasificate ca simple:
-
Sinclair Spectrum – În timp ce logica oferă câteva trucuri, clopotele & fluierează, este un design direct de tip bitmap. Până în prezent, șansele sunt bune pentru o emulare, cu excepția faptului că, ca de obicei, jocurile s-au bazat foarte mult pe sincronizare, ceea ce complică din nou emularea.
La fel ca și cu Apple II, acolo unde există destul de multe clone în Brazilia .
-
Un caz similar poate fi făcut pentru familia ORIC
-
Atari ST – Poate fi o surpriză din ziua de azi de vedere, dar Atari ST nu a prezentat niciun hardware video sofisticat. Doar 3 rezoluții grafice și un CLUT de 9 biți pentru până la 16 culori simultane. Câteva puncte de sincronizare și un singur temporizator. În plus, un procesor mai modern și un cip de sunet dedicat. Sună ca un meci făcut în rai, dacă, bine, dacă nu ar fi din nou pentru programatorii de jocuri. Și aici, software-ul a implicat o mulțime de trucuri pentru a crea jocuri minunate (* 2).
O primă concluzie pentru sistemele „simple” este că, deși hardware-ul poate fi mai puțin complex, software-ul a făcut o lungime mare pentru a depăși acest lucru. În consecință, poate Se spune că sistemele mai puțin complexe nu fac necesară o emulare mai puțin complexă, întrucât nu trebuie emulat un hardware mai diferit, dar hardware-ul simplu trebuie urmat foarte atent pentru a face codul jocului să ruleze.
Sisteme complexe
Acestea sunt, în general, toate sistemele cu un VDC sofisticat
-
9918 ff .- Acest lucru nu este atât de mult despre un singur sistem, dar în cele din urmă cel mai frecvent utilizat VDC (TI îl numea VDP). În timp ce a fost conceput pentru TI 99/4, TI l-a vândut oricui era interesat. a tuturor sistemelor (* 3) care utilizează un 9918 sau unul dintre modelele sale de urmărire (9928/38/58 / …).
Console de jocuri precum Coleco Vision , Sega SG-1000 până la Master System precum și calculatoare de la TI 99/4 sau Memotech MTX până la întreaga lume a mașinilor MSX a folosit această familie.
Sună grozav, nu-i așa? Ei bine, cu siguranță există o mulțime de jocuri de folosit. Mai mult, un astfel de VDP ajută la simplificarea emulației, deoarece oferă o separare clară între CPU și afișaj și limitează ce „trucuri” poate folosi un joc la ceea ce oferă VDP, care la rândul său este clar definit. Și din nou, este software-ul existent care face emularea dificilă, deoarece, din nou, desigur, programatorii au folosit trucuri de sincronizare pentru a manipula ecranul la momentul potrivit. A menționat cineva „Racing the Beam”?
-
Commodore VC20, C64, C16 etc. – Același lucru este valabil pentru toate computerele de acasă Commodores. Deși diferă în complexitate prin faptul că au sprite sau nu, oferind temporizatoare sau nu și sunet sau nu, elementele de bază problema este aceeași ca și în familia 9918: Software-ul care utilizează anumite situații de sincronizare pentru a crea efecte de joc.
-
6847 Sisteme – Tandy CoCo, Matra Alice și deopotrivă prezintă aceeași problemă.
Aș putea continua cu sisteme de jocuri precum NES sau MegaDrive, dar voi încheia lista respectivă aici, deoarece principiul ar trebui să fie clar până acum: Deși unele sisteme pot suna ca mai complex de imitat, problema reală nu este complexitatea hardware-ului video, ci ori de câte ori un programator „îmbunătățește” ceea ce se poate face prin programare inteligentă (* 4). Deci problema reală pentru proiectul dvs. nu este „atât de mult hardware-ul (* 5), deoarece este software-ul, în special trucurile și instrumentele utilizate în jocurile reale existente .
Acest lucru este deosebit de rău, deoarece doriți să folosiți (așa cum l-am citit) jocurile existente ca motivație. Nu vor fi mulți care rulează pe o emulare în timp real mai puțin dificilă.
Reducerea acestei dependențe va reduce numărul de jocuri care rulează corect. Reducerea la un nivel care să permită tratarea acestuia într-un curs limitat de timp va face aproape imposibilă găsirea jocurilor potrivite.
Concluzie: Găsirea compromisul corect este o modalitate, dar care va face cercetări considerabile, limitând în același timp utilizabilitatea.
Acum, poate că este posibil să ataci aceasta dintr-un unghi ușor diferit. Să încercăm câteva:
-
Utilizarea hardware-ului vechi existent:
Deși acest lucru este dovedit (* 6) că funcționează, oferă cea mai mare compatibilitate și ușurință în utilizare datorită mediilor de dezvoltare deschise, este posibil să lipsească apelul „build” pentru studenții EE.
-
Utilizați sistemele de jocuri educaționale existente:
Sisteme precum Andre LaMothe „s XGS sunt instrumente excelente pentru a vă scufunda în construcția și programarea hardware detaliată. Sigur, sunt necesare unele lipiri (există o versiune pregătită disponibilă), acestea sunt sisteme aproape complete definite de software, documentate pe tot parcursul și oferă o imensă bibliotecă de jocuri. Ca să nu mai vorbim de cărțile sale despre programarea jocurilor.
Un bonus extraordinar este că studenții pot lua sistemul acasă și se pot juca chiar și după terminarea cursului.
-
Construiți-vă propriul sistem simplu:
Luați un CPU clasic (6502 de exemplu), unele RAM, FLASH și un VIA plus un FPGA pentru a implementa un CRTC foarte de bază și gata. Studenții îl vor lipi, pot afla despre componente și interacțiunea lor, inclusiv utilizarea FPGA (care ar putea fi oricum o necesitate astăzi) și apoi își vor rula software-ul pe hardware-ul real. Chiar și cu un număr mic, ar trebui să fie posibil să se producă o astfel de placă în jur de 50 Euro sau mai puțin. La fel ca ideea XGS, va funcționa după terminarea cursului – inclusiv sentimentul de proprietate ca fiind sistemul lor .
Desigur, studenții vor trebui să își scrie propriile jocuri, dar jocurile simple se pot face într-un timp destul de scurt – ca să nu mai vorbim de faptul că cursurile de urmărire pot folosi la fel de bine jocurile pe care clasa anterioară le-a scris.
-
Faceți o emulare a sistemului „propriului dvs.”
La fel ca înainte, cu excepția faptului că totul este virtual. A avut avantajul de a fi un puț a definit și închide sistemul, în special unul în care nu există limitări datorate unei emulații mai puțin „perfecte” – Emularea este perfectă prin definiție și toate ciudățeniile sale sunt cele pe care le are sistemul. Dezavantajul este din nou partea software.
-
Utilizați hardware „soft”:
Există un proiect al lui Neil Franklin care creează o serie de componente de sistem generalizate la fel ca computerele clasice, dar folosind microcontrolere în loc de cipuri dedicate. Combină emularea cu hardware-ul real. În timp ce componentele sunt încă dezvoltate ca emulare, acestea sunt menite să ruleze într-un microcontroler și să fie utilizate la fel ca jetoanele „reale”. Un sistem ar putea fi configurat utilizând un modul SoftCPU care emulează, de exemplu, un 6502 cu memorie RAM și ROM, combinat cu un SoftVGA care furnizează un terminal precum interfața video și o tastatură și mouse emulând SoftPS2. Toate sunt conectate printr-o magistrală paralelă sau serială (SPI) permițând adăugarea altor componente care pot fi prezentate și la emulare.
Pe lângă faptul că este vorba despre emulare, acesta prezintă o cantitate limitată de hardware care poate fi realizat pe un panou (totuși, nu este niciodată devreme să începeți să lipiți), arată, de asemenea, o sarcină destul de tipică a ingineriei de azi – înlocuirea logicii tradiționale cu microcontrolere – în uz practic.
rezultatul este un sistem care oferă atingerea unui computer real (vechi) în timp ce este construit cu hardware modern care rulează emulații paralele.
-
Utilizarea unui emulator configurabil:
Nu, nu este vorba despre MAME sau deopotrivă, ci despre un cadru de emulator scris în JavaScript, care gestionează părțile generice (inclusiv calendarul), în care elevii dvs. își vor adăuga emulațiile (care a fost un obiectiv, nu-i așa?) pentru a forma un întreg sistem. Deoarece JS este livrat în sursă, chiar și cadrul în sine poate fi modificat.
În funcție de calitatea fiecărei emulații, aceasta poate fi utilizabilă pentru orice, de la un sistem demonstrativ simplu până la o recreere completă a anilor 1980 computer.
Deci, poate că unele dintre variantele de mai sus ar putea fi un început bun?
* 1 – Mă voi concentra doar pe videoclip (și CPU) pentru a-l simplifica. De asemenea, singurul videoclip va funcționa deja bine pentru a elimina sistemele complete. Sunetul va adăuga o altă dimensiune și s-ar putea complica mult dincolo de sfera acestei acțiuni.
* 2 – Aruncați o privire la Xenon. Un scroller revoluționar vertical, cu mai multe straturi schimbătoare, multe obiecte animate, toate rulând foarte netede în software. De fapt, a fost reglat atât de bine, încât portarea acestuia la Amiga (de obicei) mai capabilă (în ceea ce privește grafica) a durat destul de mult timp și a dus la un joc oarecum mai mic.
* 3 – Sisteme concepute nu sunt necesare Unități vândute. Din nou, unele console de jocuri au avut mai mult decât doar succes, deci poate chiar să obțină majoritatea în număr.
* 4 – Blogposturile dezvoltatorului principal al pluginul de redare Glide64 pentru emulatoarele N64 a scris o serie cu mai multe părți ( Introducere , P .1 , P.2 , P.3 ) de postări de blog despre obstacolele pe care a trebuit să le urce pentru a face ca partea de emulare video să funcționeze – toate acestea nu sunt legate de complexitatea emulării hardware-ului, ci de toate modurile cu care CPU a modificat și ajustat ieșirea lângă logica video. Acest lucru este și mai remarcabil, având în vedere că N64 este deja un sistem destul de absract și închis.
* 5 – De fapt, aș considera hardware-ul video mai complex ca o lecție excelentă pentru studenții EE, deoarece arată bine ce se poate face cu câteva porți în loc de grămezi de software – cu atât mai mult cu cât sunt pe cale să facă hardware mai târziu, nu-i așa?
* 6 – Stefan Höltgen de la FU Berlin de exemplu folosește vechiul sisteme de jocuri din clasele sale pentru a introduce elevii (non-EE) în hardware-ul real și programare reală și implicația lor pentru sarcinile zilnice (și jocuri).
Comentarii
- @Tommy Ei bine, mi-ar plăcea să evit acest lucru, deoarece nu există un răspuns ușor. Cel mai important aici ar putea fi, în timp ce Z80 este oarecum ” ciudat „, 68k este orice, în afară de simplu. Cu toate cuvintele de extensie (până la CPU32), o singură instrucțiune poate avea până la 11 cuvinte (22 octeți), iar decodarea lor este o mizerie serioasă. Din nou, totul depinde de modul în care este alcătuit emulatorul. Z80 este un 8080 destul de drept, ușor de imitat, cu câteva modificări, care pot fi ușor manipulate. Pentru cei 68k, chiar și numai pentru cei originali, va fi mult mai eficient.
- ” sarcină potrivită pentru boboci într-un timp atât de limitat. ” El a spus că aceștia sunt studenți din anul III, nu boboci, și că ‘ au îndeplinit deja câteva condiții prealabile.
- @ wizzwizz4 Ei bine, indiferent care este opinia noastră personală, JS este moștenitorul legal al BASIC. Serios și în toate privințele! Gandeste-te la asta.Nu numai că rulează n lângă fiecare computer real, ci ‘ este chiar instalat în mod implicit și nu există aproape niciun mod de a scăpa de el fără a pierde multe funcționalități. Și mai mult, gândiți-vă cât de mult este scris software-ul rău și incredibil în JS – dovada perfectă, nu este ‘ nu?
- @Raffzahn It ‘ s complet diferit Pentru unul, BASIC avea mai multe implementări incompatibile … Ohhh! Este succesorul BASIC!
- Ei ‘ încă nu sunt boboci, care sunt studenți din anul I. Și cred că ar trebui să oferiți OP avantajul îndoielii că el nu ‘ ar atribui proiectul dacă studenții nu ‘ nu au fundalul necesar.
Răspuns
Există câteva idei bune până acum.
Dar ceva de luat în considerare.
Dacă faceți ceva de genul unei mașini CP / M, acestea sunt „foarte simple și simple, mai ales că totul este izolat nu doar de BIOS, ci și de natura IN / OUT din familia 8080 / Z80.
Nu mi se pare nepotrivit ca obiectivul primului semestru să fie o mașină CP / M (nu îți cunosc programa)
Dar, de exemplu, o mașină CP / M de bază nu are nevoie de precizie de ciclu, nu are nevoie de întreruperi, cel mai complicat lucru pe care trebuie să-l facă este să interogăm tastatura pentru a vedea dacă a fost apăsată o tastă. (Spre deosebire de monitorizarea tastării și tastării sau orice altceva.)
Apoi, în al doilea semestru, puteți adăuga cerințe, cum ar fi interfața cu un cip grafic. Instanța de mai sus a SG-1000 ar putea fi cu ușurință o mașină CP / M în primul semestru, și apoi ușor transformată în SG-1000 în al doilea (deoarece ați terminat partea Z80 în primul semestru) .
În sfârșit, cred că este de cuviință ca clasa dvs. să aibă un program de acceptare pe care elevii să îl poată rula pentru a-și verifica procesorul. Puține lucruri sunt mai interesante decât depanarea unui procesor defect, mai ales cu limbajul mașinii cu care este posibil să nu fiți familiarizați .
Comunitatea 6502 are programe de testare care pot verifica dacă un procesor execută corect toate instrucțiunile, nu sunt sigur ce sunt disponibile pentru celelalte procesoare.
Și dacă este o mângâiere pentru scop, am scris atât un simulator, cât și un asamblator asociat, într-o vacanță de Crăciun de 2 săptămâni, dacă asta vă oferă ajutor cu privire la cât de mari sunt proiectele reale. CPU-urile de bază sunt destul de simple.
Comentarii
- Pe Z80, FUSE oferă teste, deși nu toate sunt generice sau neapărat corecte în ceea ce privește ciclul exact sincronizare; ‘ sunt, de asemenea, într-un format de text ad hoc, dar eu ‘ le-am transcris în JSON: github.com/TomHarte/CLK/tree/master/OSBindings/Mac/… – utilizați tests.in.json pentru a seta stările inițiale și pentru a afla cum mult timp ar trebui să candidați, apoi tests.expected.json pentru a verifica rezultatele. Există și ‘ și zexall și zexdoc, inițial fișiere CP / M, dar adaptate pe scară largă și foarte lente. Trecerea primului necesită o grămadă de lucruri nedocumentate pentru a fi corectă, trecerea acestuia din urmă nu ‘ t.
- … și singurul lucru pe care ‘ găsit vreodată pentru modelul 6809, presupunând că cineva se gândea să sugereze un Vectrex sau Coco / Dragon, se află într-o suită mai largă de testare a mașinilor arcade Williams la . Pentru 6502, sunt foarte mult la bord cu testele lui Klaus Dormann, Wolfgang Lorenz și AllSuiteA, toate acestea par a fi mult mai proeminente decât testele Z80 sau 6809.
- @Tommy În măsura în care ‘ sunt conștient, fiecare dintre testele Fuse ‘ sunt corecte. Vă rugăm să înregistrați erori dacă ‘ nu sunt 🙂
- @PhilipKendall vedeți e-mailul meu din 29/5/2017 pentru fuse-emulator-devel re: DJNZ și dacă offsetul este citit pe o iterație finală. Concluzia lui Alan Cox asupra faptului dacă comportamentul testat de FUSE ‘ este corectă a fost că ‘ s ” deschis interpretării ” pe baza surselor disponibile. Așa că am crezut că ” nu neapărat corect ” este corect. Probabil că ar fi trebuit să fiu clar: am găsit doar o mână de abateri în interpretarea echipei tale ‘ a mea și a mea. Scuze pentru o formă slabă în acest sens.
- @Tommy – ” Concluzie de la Alan Cox cu privire la testarea FUSE ‘ comportamentul corect a fost că ‘ s ” deschis interpretării ” pe baza informațiilor disponibile surse ” …deși am mult respect pentru mult din ceea ce face Alan, este ‘ destul de ușor să verific dacă comportamentul testat este același cu un procesor Z80 real (în special pentru versiunile CMOS care poate fi rulat pe panou cu viteze de ceas reduse pentru a seta teste detaliate foarte simplu), deci acesta este cu siguranță un caz în care, dacă el crede că ‘ este ceva în neregulă, el ar trebui să fie capabil să o demonstreze foarte ușor.
Răspuns
Pot sugera SG-1000 ?
Sistemul este puțin mai mult decât o grupare de trei cipuri de pe raft – Z80, TMS9928A pentru grafică și SN76489 pentru sunet, cu controlere ca grupuri stupide de comutatoare NO (în mod normal deschise).
În software sau hardware puteți simula sau emula orice parte a acestui lucru izolat sau toate împreună pentru a produce sistemul complet.
sistemul utilizează ROM-uri simple care nu sunt schimbate în bancă pentru jocurile sale și acestea sunt utilizate în general Nu vă bazați pe orice trucuri, cum ar fi întreruperile ecranului mediu sau numărarea ciclului pentru a produce efectele lor. Doar o singură hartă de plăci și un număr de sprite deasupra. Vă sugerăm că acest lucru este mult mai simplu decât un sistem care conține multe componente interne care interacționează și cartușe inteligente, cum ar fi NES.
Ar trebui să vă furnizați propriile jocuri proprii pentru a le emula, în loc să le distribuiți fără licență material protejat prin drepturi de autor, desigur.
Comentarii
- … și, pentru înregistrare, ColecoVision este exact aceeași colecție de componente, cu conexiuni diferite logică și joypad-uri foarte puțin mai complicate. Așadar, un emulator SG-1000 este de obicei ușor de extins pentru a accepta ambele.
- De asemenea, este de remarcat faptul că 9918 este un cip complex, cu sprite, modificări complexe și date, așa cum nu a făcut ‘ nu vreau să folosesc. ‘ Nu-i așa?
Răspuns
Un simplu, un computer simplu precum ZX Spectrum pare rezonabil – Dar există pur și simplu prea multe emulatoare bune pentru a face din aceasta o opțiune utilă. De asemenea, cred că 6502 este mai ușor de imitat.
Deci, o posibilă opțiune ar putea fi Oric-1 sau sistemele Atmos by Tangerine , care a folosit o memorie 6502, nebancată, fără cipuri personalizate, cu excepția videoclipurilor simple, și un buffer de cadre relativ simplu. De asemenea, de departe nu este la fel de cunoscut ca Spectrum, totuși, există software (jocuri) disponibile pentru a aduce împreună niște teste simple de compatibilitate (cred că un anumit „sentiment de realizare” este extrem de important pentru studenți). Există un număr de emulatoare disponibile deja pentru Atmos (trei, din câte știu eu), dar numărul lor este limitat, ceea ce face ușor să aflăm dacă cineva a înșelat și pur și simplu a copiat cod.
Niciunul dintre Jocurile Oric erau atât de sofisticate, încât știu că ai avea nevoie de o emulație 100% exactă pentru cicluri pentru a rula jocurile,
Comentarii
- I ‘ d susține că arhitectura Oric descurajează cursele raster neavând un canal lateral de registre de control video și nu fiind configurate astfel încât cursele să poată crește rezoluția culorilor (în contrast cu Spectrum). Dacă ar avea doar două tampoane HIRES, totuși, eu ‘ ar afirma că mai încrezător. Sunteți de acord cu asta?
- @Tommy Nu ‘ nu sunt prea familiarizat cu circuitele video Oric. Ceea ce aș spune în orice caz este că Oric a avut o viață atât de scurtă și o bază de utilizatori atât de limitată, încât tehnicile sofisticate de ajustare a videoclipului, așa cum știm din ZX Spectrum, nu au fost ‘ t dezvoltat (cel puțin nu în timpul activității computerului, există ‘ un număr de demonstrații interesante aici demozoo.org/platforms/ 49 )
- Oh, atunci voi ‘ voi oferi un raționament mai bun: cipul video Oric are stare modală, inclusiv modul text sau grafic, dar nu registre expuse. Totul este setat de octeți de control în fluxul video – inclusiv atributele din prim-plan și fundal. Oamenii au tendința de a se plânge de acest lucru, deoarece înseamnă că, dacă doriți o grafică fără goluri, ‘ sunteți limitat la patru culori pe linie, două dintre ele fiind complementele bit-bit ale celorlalte două. Unele dintre jocurile moderne arată totuși foarte bine – de ex. Stormlord youtube.com/watch?v=QSDy-BC580M
- @Tommy Atributele seriale fac programarea un pic mai complicată, eu ‘ bănuiți, dar cantitatea de ciocnire a atributelor este chiar mai bună decât pe ZX Spectrum, cred.
- Xenonul 1 are nevoie de ciclul exact, altfel se blochează când nava explodează (declinare de responsabilitate: Am scris un emulator oric pentru amiga numit amoric și am dat peste această problemă, dar numai în acest joc)
Răspuns
Pe baza criteriilor dvs. și a necesității de a păstra proiectul interesant pentru elevii dvs., aș recomanda luând în considerare serios Vectrex Arcade System, care a fost vândut de Milton Bradley la începutul anilor 1980.
Deoarece Vectrex este unic în utilizarea unui afișaj vector, mai degrabă decât a unui afișaj raster, acesta nu necesită orice hardware video complicat pentru a fi imitat. Afișajul este gestionat de CPU, iar afișajul în sine este simplu de imitat pe un sistem modern și cu performanțe bune.
Pe lângă emularea afișajului vector, CPU ( Motorola 6809) și cipul I / O (MOS 6522) nu reprezintă prea mult h de o provocare, deoarece acestea sunt părți simple pe 8 biți, care sunt foarte bine documentate.
Modelul de memorie este, de asemenea, foarte simplu, fără scheme bancare de care știu. Există un cip de sunet PSG comun în Vectrex, dar emularea acestuia ar putea fi considerată drept „credit suplimentar”.
Spre deosebire de alte console simple de jocuri de la începutul anilor 1980, jocurile Vectrex au rezistat destul de bine, având în vedere capacitatea sa de a reda o grafică monocromă netedă, inclusiv un cadru de sârmă 3D. Acest lucru este dovedit și mai mult de popularitatea dezvoltării moderne de „preparare casnică”, în care dezvoltatorii continuă să creeze noi jocuri Vectrex.
Un avantaj final pentru Vectrex este că ROM-ul original al sistemului este distribuibil în mod liber.
Comentarii
- Cu excepția faptului că vectrex este, de asemenea, bun pentru ‘ Racing the Beam ‘ categorie, nu ‘ nu-i așa?
- @Raffzahn, așa cum am înțeles, CPU Vectrex controlează fasciculul de electroni – exact opusul unei ” cursă a fasciculului ” situație în care software-ul trebuie să facă schimbări de stare cu timp precis în țineți pasul cu un afișaj de scanare raster temporizat extern.
- @Mark It ‘ este același lucru cu VCS. Și aici fasciculul este controlat de CPU. Fără ca procesorul să acceseze WSYNC fiecare linie și înainte ca linia să fie terminată, ecranul se va șovăi. Și, în măsura în care înțeleg PO, ‘ este exact despre nu recreația unui sistem cu cerințe stricte de sincronizare – care sunt esențiale pentru Vectrex.
- @Raffzahn: CPU-ul din VCS controlează verticala, dar nu controlează orizontală. ‘ nu este neobișnuit ca un joc să scoată zeci sau chiar sute de linii de scanare fără un WSYNC intervenit. În absența unui WSYNC, fasciculul va fi la aceeași poziție orizontală la fiecare 76 de ciclu. Stocarea WSYNC este adesea cea mai ușoară modalitate de a aștepta ca fasciculul să ajungă pe partea dreaptă a regiunii afișate, dar ‘ nu este singura cale. Un programator care era atât de înclinat ar putea exploata detaliile complicate ale mișcării spritei și comportamentelor pentru a scrie un joc care nu a folosit deloc WSYNC.
- Um, oameni buni, vorbim despre un emulator aici. Nu va exista o problemă cu decolorarea fosforilor, în timp ce procesorul emulat durează prea mult pentru a desena următorul cadru. Nu există ” fascicul ” și cu siguranță nu există niciun motiv pentru care emulatorul ar trebui să ” cursă ” deoarece afișajul emulatorului va rămâne destul de static atâta timp cât este necesar între cadre.
Răspuns
Crearea unui emulator de la zero este o sarcină relativ imensă, în special pentru studenții fără experiență și s-ar putea dovedi problematică. Deci, trebuie să fiți cu adevărat atenți la ce platformă să emulați și ce informații să partajați / utilizați. Pentru mine, cea mai bună alegere este o platformă ZX 48K pe măsură ce cresceam pe ea și sunt familiarizat cu funcționarea sa interioară, astfel încât răspunsul va fi părtinitor de asta … Dar trebuie să ținem cont de faptul că, în zilele noastre, studenții nu au văzut / folosit / știut la fel de mult ca noi … Ceea ce trebuie să obțineți este:
-
emulare corectă a procesorului iset
chiar dacă există o mulțime de documente de seturi de instrucțiuni acolo Trebuie să fii atent, de exemplu, pe Z80, 99,99% dintre aceștia conțin greșeli. Deci, ar trebui să alegeți o serie de referințe testate pentru ei, acum este corectă (sau cel puțin funcțională).
De exemplu, aici este al meu Z80 care trece ZEXAL cu succes 100%:
Platforma Z80 are un avantaj major și anume există testere extinse pentru aceasta, cum ar fi ZEXALL Exerciser care vă poate ajuta să depanați mult emulatorul.
Cred că există și versiuni pentru
i8080
, dar nu știu astfel de testere pentru familie de CPU diferită. -
Timing
Ei bine, pentru emularea de bază este suficientă metoda ticurilor de ceas (sau limitarea), care este bine cunoscută și folosită … Nu văd nicio problemă aici. În prezent, computerele au o rezoluție relativ bună pentru sincronizare (pe PC: RDTSC, pe Windows PerformanceCounter, …).
Emulatorul de bază poate ignora CONTENȚIA platformei emulate, dar ai grijă ca unele sisteme de operare / jocuri / aplicații să să fie inutilizabil dacă nu este emulat corespunzător. Acest lucru nu este valabil doar pentru demonstrații. Momentul obișnuit pe computerele vechi a fost derivat dintr-o anumită întrerupere (de obicei reîmprospătare video) și un număr limitat de cicluri unde a putut fi executat înainte de acesta. Dar, cu certuri, numărul instrucțiunilor executate în același timp poate fi foarte diferit și unele programe ar putea să se revărseze și să le deterioreze sau să se blocheze. CONTENȚIA este cel mai greu de implementat cu ticurile ceasului, așa că ar trebui să o evitați cu orice preț … Pe de altă parte, cu temporizările la nivel MC este foarte ușor și doar câteva linii de cod.
-
Sunet
Aceasta este o problemă dependentă de platformă și ar trebui să alegeți API-ul utilizat pentru intrare / ieșire sunet corect. De exemplu, pe Windows, singura opțiune utilizabilă este WAvEIN / WAVEOUT datorită latenței reduse și a utilizării ușoare. DirectX este inutilizabil (cel puțin în momentul în care încercam să-l folosesc pentru o astfel de sarcină) din cauza latențelor HIGH și nu funcționează apeluri de apel.
Aș folosi o abordare tamponată în loc de conducere directă a difuzoarelor, astfel încât emularea dvs. să poată exploda. timpul de execuție în loc de execuție corectă la nivel MC (lucru pe care îl fac oricum, dar mă îndoiesc că elevii ar putea să o facă în timp).
-
Video
Acesta depinde și de platformă. .. și ar trebui să utilizați API cu care studenții dvs. sunt familiarizați. Chiar și urmărirea fasciculului este relativ ușor de implementat cu o hartă de biți simplă … Pe computere precum ZX, ordinea Scanline are o semnificație specială și poate fi foarte distractivă pentru programatorii newbie, deci este mai bine să folosiți tabele LUT de traducere care convertesc între adresă și coordonatele y înainte și înapoi.
Majoritatea platformelor mai vechi foloseau o rată de reîmprospătare de 50Hz / 60Hz și o rezoluție relativ mică, astfel încât în zilele noastre computerele, chiar și cu o emulație nu bine optimizată, ar trebui să fie în continuare suficient de rapide pentru aceasta. Dacă nu Omiteți cadrele este și o opțiune …
-
alte HW și periferice
Minimul absolut este memoria RAM / ROM și tastatura. Memoria este de obicei foarte ușoară doar o matrice statică și / sau unele lucruri de comutare a paginii … Tastatura poate fi emulată prin setarea I / O în funcție de tastele apăsate. I / O poate fi, de asemenea, memorie mapată la o anumită matrice la fel ca memoria. Răspândirea rutinei ISR este, de asemenea, o opțiune, dar care face tastatura inutilizabilă pentru handlerele de taste personalizate.
Nu m-aș deranja cu perifericele FDC, AY etc., deoarece emulatorul ar trebui să fie păstrat cât mai simplu posibil. Dar dacă aveți noroc, ar putea exista unii studenți care vor fi cu mult înaintea celorlalți cu acest proiect. Pentru cei pe care i-ați putea sugera să implementați caracteristici interesante, cum ar fi FDC, DMA, chiar și sunetul real al plăcilor de sunet (pentru casete reale sau orice playere audio) care permite funcții mult mai frumoase, de exemplu, a se vedea:
-
Fișiere
Aș alege formatele de fișiere Z80 / SNA la Începeți. Utilizarea TAP / TZX este plăcută, dar de la început emulatorul ar fi destul de buggy, prin urmare rutinele de încărcare s-ar putea să nu funcționeze corect, folosind și depanând foarte greu.
-
ROM
aceasta este cea mai problematică parte, deoarece multe platforme ROM încă nu sunt gratuite și prin extragerea / descărcarea / utilizarea acestora pentru emulare s-ar putea risca probleme legale.
Din unele comentarii aici se pare că ROM-urile ZX sunt domeniu public acum … și există și pri ROM comentate Nu există, ceea ce face mult mai ușor depanarea primilor pași ai emulatorului (când încă nu funcționează nimic).
Dar ar trebui să luați întotdeauna în considerare Emulare și lucruri legale , mai ales dacă emulatoarele vor fi plasate undeva pe internet
Aici câteva link-uri ale mele de QA:
- Cum se obțin CPU și alte specificații hardware pentru dezvoltarea emulatorului
- Scrierea unui Z80 grafic emulator în C sau C ++ Vă recomand cu tărie să citiți acesta (mai ales pentru studenții dvs.) le va economisi mult timp și nervi
- Care este implementarea corectă pentru emularea hardware?
Răspuns
Căutați un Sistem care nu a fost prea mult imitat? Vă sugerez să rămâneți în computerele de 8 biți (sau cele simple de 16/32 biți), ZX Spectrum 48k este un sistem atât de simplu – foarte bine documentat, fără sprite, fără cip audio, nu Bănci RAM, I / O simple, si grafică simplă (deși cu un aspect ciudat), nu este necesară o emulare perfectă a ciclului, procesor bine cunoscut, manipulare ușoară a casetei (ar putea fi ușurată și mai mult prin capcanele ROM). Există tone de jocuri, multe dintre ele cu licență permisivă.
Dezavantajul: există o cantitate enormă de emulatori disponibili, mulți înșiși categoria retro și mulți cu cod sursă disponibil, deci pericolul de a înșela și de a copia alt cod este mare.
Și, desigur, lucrul la un emulator al unui sistem care nu a fost emulat anterior ar oferi un avantaj suplimentar al sentimentului de realizare.
Comentarii
- Am avut același instinct, dar aș extinde sugerând că SNA și Z80 și formate de instantanee suficient de bine definite de care aveți nevoie nici măcar nu vă faceți griji cu privire la emularea benzii. Și, ‘ să fim sinceri, TZX este un pic miasmatic în acest moment.
- Cred că Spectrum ROM este acum în domeniul public, care poate ajuta (sau face lucrurile prea ușoare)
- ZX Spectrum este un exemplu excelent de hardware simplu, dar și unul de programare destul de complexă de numărare a ciclului (Racing the Beam) pentru a obține efecte de joc usor.
- @Tommy Oh, nu aș sugera niciodată ZX80 / 81 din același motiv. Și, deși nu este un adevărat buff al spectrului, am văzut un cod bun care depinde de sincronizare. Cele mai multe manipulări ale ecranului prominet după ce acea parte a fost afișată, dar înainte de a rula o dată. ‘ este o problemă foarte simplă găsită pe o mulțime de sisteme. Nu este o problemă mare, dar este dependentă de sincronizare. De exemplu, schemele simple de emulare care doar accelerează viteza la un nivel de cadru vor produce crap pe gazde de emulare mai rapide … și așa mai departe.
- @Stormcloud Spectrum ROM nu este în domeniul public, deși permisiunea a fost acordat să-l distribuie pentru utilizare cu emulatoare. ROM-urile ZX80 și ZX81 au fost lansate sub GPL.
Răspuns
Vă sugerez să aruncați o privire la câteva jocuri arcade timpurii? Mai exact, aceste două platforme 8080 / Z80:
-
Midway 8080 – Dezvoltat în 1975 și puteri Space Invaders . Utilizează un buffer de cadru alb-negru de 256x224x1 biți în RAM.
-
VIC Dual – Sega / Gremlin Platforma proiectată în 1977 – cel mai cunoscut joc este Carnival . Videoclipul este un tablou de 32×28 de 8×8 caractere (toate în memorie RAM) și poate accepta o versiune simplă paletă de culori, mapată la o PROM.
Acestea sunt foarte simple de imitat după ce funcționează emularea Z80. Nu există trucuri amuzante de scanare sau stări ciudate de așteptare a procesorului. Player controalele sunt disponibile prin porturi I / O bitmap.
Puteți juca cu aceste platforme interactiv pe http://8bitworkshop.com/ (Dezvăluire completă: conduc acest site și sunt autorul cărților conectate pe site care descriu aceste platforme)
Apple] [este, de asemenea, o alegere bună pentru o platformă bazată pe 6502, deși subsistemul video este mai complicat decât în cele două platforme arcade.
Comentarii
- Pentru ce , cred că Space Invaders este o sugestie inspirată. Dacă memoria o servește ‘ este doar un 8080 cu un ecran bitmapped de 1bpp, un anumit port IO pentru controale, nicio încercare de cursă a rasterului, sunet care este doar de forma ” declanșează zgomotul X acum „, cerințe de precizie foarte relaxate și produce un joc pe care încă încearcă să îl vândă ocazional acum. ‘ este doar problema legalității care ar putea face pauză, deși eu ‘ sunt întotdeauna neclar în ceea ce privește excepțiile academice.
- Este ‘ destul de corect, există și ‘ un cip extern care ajută la 8080 ‘ lipsa unui schimbător de butoaie. ‘ nu ar trebui să existe nicio problemă de legalitate care să emuleze hardware-ul (nu există ‘ fără BIOS sau alt cod protejat prin drepturi de autor) și este destul de ușor să îți scrii propriul joc, de exemplu: 8bitworkshop.com/v3.2.0/?platform=mw8080bw& file = game2.c
Răspuns
PET sau TRS80 ar putea funcționa bine. Hardware simplu, cu text pe ecran, astfel încât acestea să poată fi emulate cu text direct, adăugând inițial cod pentru seturile lor de caractere ciudate mai târziu și este puțin probabil să conțină mult în ceea ce privește codul exact de numărare a codului.
Ideea bonus după ce alegeți un PET, adăugând suport C64 ar da grafică.
6502 este probabil mai simplu de emulat.
Gândul final ar putea fi Ohio Scientific Superboard II sau în încarnarea sa din Marea Britanie UK101 deoarece nu cred că are hardware video reprogramabil.
Comentarii
- Da, toate trei (PET, TRS, Superboard (am uitat total despre cea ulterioară)) sunt mașini simple și excelente pentru emulații. Dar lipsesc și o selecție bună de jocuri gata de utilizare. Ca să nu mai vorbim de culoare și oamenii se pot aștepta astăzi.
Răspuns
Digital PDP-8 este un arhitectură simplă pentru care poate fi ușor de scris un emulator. Câteva motive pentru acest lucru includ:
- Doar 8 instrucțiuni de bază
- Fără interfață video etc. de emulat, doar I / O terminal
- Nu este nevoie de precizia ciclului, seria reală de mașini în sine nu a garantat același comportament în cadrul diferitelor implementări
- Poate începe cu o configurare simplă (de exemplu, o mașină 4Kword care rulează FOCAL-69) și, treptat, face emulatorul mai mult complex (de exemplu, o mașină de 32Kword cu aritmetică extinsă, care rulează OS / 8 de pe un disc RK05)
- O mulțime de manuale disponibile online
- Diagnosticul MAINDEC și instrucțiunile lor sunt disponibile online, care pot fi folosit pentru a testa dacă emularea funcționează corect.
Este posibil să nu acopere toate cerințele dvs., de exemplu I / O mapate în memorie, dar cu siguranță include lucruri precum decodarea instrucțiunilor și modurile de adresare. din documentație merge până la nivelul hardware de bază, care ar putea fi adecvat pentru un curs EE.
Comentarii
- Un punct interesant este că majoritatea sistemelor menționate mai sus au fie procesoare Z80, fie 6502, ambele lipsesc oarecum în ceea ce privește modurile de adresare acceptate. Dacă acoperirea modurilor de adresare este importantă, PDP-8 are o selecție mult mai bună de demonstrat.
- Pentru jocul ” al întrebării, cred că Adventure este încă menținut / reînviat pentru arhitecturile PDP (dar verificați că – s-ar putea să mă înșel).
- @TobySpeight You este corect, este menținut sau înviat, dar pentru PDP-10 , care este total incompatibil cu PDP-8.
Răspuns
Opțiunea ZX Spectrum a fost deja spusă: forța sa este hardware-ul IO complet simplist și faptul că multe jocuri existente NU necesită cicluri precise, -emularea corectă a tuturor ciudățenilor, cu singura excepție a sunetului (nu există nimic aproape de corectarea sunetului fără emularea exactă a procesorului în ciclu și eșantionarea corectă a fluxului de sunet intermediar de 1 biți produs de procesor).
Orice altă opțiune de hardware pentru jocuri, cum ar fi NES, G enesis și toate mașinile similare bazate pe sprite nu este o opțiune, evident, deoarece o mulțime de timp este necesar pentru a învăța hardware-ul complex, a dezvolta modalități de a-l emula, a rezolva deficiențele emulației etc. De exemplu, chiar și „simplu” Super Mario jocul pe NES nu va funcționa, cu excepția cazului în care bitul de coliziune sprite din PPU este corect emulat.
Opțiunile rămase IMHO sunt următoarele:
- timpuriu IBM PC bazat pe modul text
- oricare dintre mașinile CP / M existente
- (fără a include mașini „mari” înainte de era „micro”)
Punctul cheie aici este afișarea în modul text, care nu este atât de greu de emulat și mult mai simplu de afișat pe mașina gazdă (chiar și nu este nevoie să afișați grafică pixelată, să lucrați cu sistemul de ferestre / SDL / etc.!).
Cu toate acestea, sunt necesare încă unele investigații pentru a colecta programe adecvate pentru a lucra, inclusiv jocuri. Există unele jocuri în modul text în CP / M și ar trebui să fie și unele pentru IBM PC.
Comentarii
- Cu un potențial avantaj al unui Mașina CP / M este că există ‘ care trebuie să fie cel puțin una pentru care o va face o simplă emulare 8080?
- Frumos, dar din nou, există nu sunt multe jocuri pentru IBM în modul text, există?
- @Raffzahn – trebuie să existe doar unul .
- @Jules Hehehe … da, bine. Dar apoi ‘ spun că un minim 8080 va face trucul
Răspunde
Un sistem cu cea mai mică cantitate de cipuri personalizate ar fi probabil o țintă mai curată de emulat.
Un Apple II este unul dintre cele mai simple sisteme (fără LSI, cu excepția procesorului 6502) pentru care au fost scrise cantități mari de jocuri (ușor accesibile).
Au existat, de asemenea, tone de cărți și articole (de epocă) publicate despre arhitectura de sistem a Apple II și a procesorului 6502. Astfel, sistemul a fost destul de bine documentat de mai multe surse (citabile).
Emulatoarele pentru un Apple II pot fi de ordinul a 10K linii de cod C, posibil puțin mai puțin, care s-ar putea încadra în intervalul de timp al cursului.
Comentarii
- Procesorul ar putea fi simplu, dar emularea perifericelor (afișaj etc.) ar fi probabil încă o sarcină considerabilă
Răspuns
Presupunând că este o contribuție, acestea sunt notele mele directe despre mașinile pentru care am scris emulatori, în ordine cronologică de lansare aproximativă, sperăm să oferim o anumită culoare pe formatele de fișiere, etc:
Atari 2600
Caracteristica distinctivă a Atari 2600 este sinergia dintre procesor și ieșirea grafică; jocuri sunt implementate o funcție în timp real care furnizează componente grafice la ieșirea video pe măsură ce rasterul rulează. Deci, cred că aceasta este o alegere proastă pentru scopul menționat – munca reală grea a scrierii unui emulator 2600 este sincronizarea și interacțiunea în afara microprocesorului.
Apple II
Hardware relativ simplu, dar foarte nuanțat, cu mai multe moduri grafice, și trebuie să vă îndreptați spre predarea videoclipurilor NTSC pentru a putea decodează-i ieșirea de culoare. Emularea discului II este, de asemenea, destul de necesară, dar „este o căutare în sine, deoarece cele mai frecvente formate de fișiere se așteaptă să furnizați un codificator Apple GCR.
ZX80 / 81
De asemenea, probabil prea complicat pentru scopul menționat, concepția centrală redistribuie ciclul de reîmprospătare al procesorului și un subset de instrucțiuni preluate pentru a scana video. Dacă ați ales să nu reimplementați acel mecanism ca cel original, ați ajunge doar cu modul text implicit ROM.
Commodore Vic-20
Aceasta este o mașină simplă bitmap cu un procesor simplu în 6502 și o cantitate decentă de jocuri, dintre care unele au fost furnizate pe cartuș, absolvindu-vă de necesitatea de a emula o unitate de bandă sau disc. Singura muscă din unguent este 6522-urile sale; acestea sunt timer combinat / cipuri de schimbare / intrare / ieșire cu o grămadă întreagă de ciudățenii. Dar un avantaj îngrijit al Vic-20 este că va porni până la promptul BASIC fără să funcționeze 6522s, iar BASIC în sine va funcționa doar cu temporizatoarele din 6522 implementate , chiar și inexact.
Timpul său scurt de lider de piață înainte de sosirea C64 limitează, de asemenea, numărul de titluri care utilizează în mod avansat hardware-ul – există exemple contemporane de curse raster, cum ar fi titlurile Imagic , dar sunt în minoritate.
Formatele de fișiere în care sunt păstrate datele sunt o mizerie , dar limitându-vă la suportul cartușului și având grijă să utilizați doar acele titluri furnizate pe cartuș, ar trebui să eliminați această problemă.
ZX Spectrum
Acoperit în altă parte; Cred că este o alegere bună. Mai ales dacă rămâneți la formatele de fișiere instantanee.
Oric 1 / Atmos
Acoperit în altă parte; o alegere decentă, dar există un alt 6522 înțelept acolo. Majoritatea jocurilor sunt disponibile pe bandă, va trebui să acceptați toate acestea.
Acorn Electron
Bitmapped, o 6502 plus o logică externă relativ simplă, dar șase moduri grafice diferite și sincronizarea ar fi o problemă – costul fiecărui ciclu este o funcție a zonei accesate (ROM versus RAM), modul grafic (40 coloane versus 80 coloane moduri) și, eventual, starea de ieșire grafică curentă (modurile cu 80 de coloane blochează accesul RAM în timpul regiunii pixelilor; modurile cu 40 de coloane nu sunt). Dar o puteți modela doar ca o mașină de 1Mhz pentru majoritatea jocurilor, o versiune centrată pe linie a ieșirii grafice.
Există un număr subțire de jocuri disponibile pe ROM, dar din fericire hardware-ul de bandă va permite în mare parte o emulare de calitate foarte scăzută: este de genul care ridică o întrerupeți la primirea octetului, cu doar două titluri pe care mă gândesc să le fac o introspecție mai profundă decât aceea.
CPC Amstrad
Probabil unul de evitat în scopul declarat – are un CRTC 6845, ceea ce face ca ieșirea grafică să fie foarte configurabilă și, prin urmare, o mulțime de titluri care concurează cu rasterul. Utilizarea discului a fost, de asemenea, destul de omniprezentă, dar controlerul său de disc 8272 reprezintă un nivel suplimentar de dureri de cap în comparație cu WD1770 pe care îl veți vedea adesea în altă parte.
MSX și / sau ColecoVision / SG1000
Cipuri de sunet diferite, același procesor și videoclip.De fapt, cred că puteți ajunge destul de departe ignorând interacțiunea de sincronizare, deoarece cipul video își păstrează propria memorie RAM la lungimea brațului. Dar este o placă și sprite și patru moduri grafice diferite, pentru o întreprindere probabil prea substanțială pentru un curs de microprocesare.
Master System
Din punct de vedere tehnic, un SG1000 îmbunătățit, fiind tot ceea ce face mașina, plus un mod grafic suplimentar, dar modul grafic suplimentar este mult mai bun decât celelalte încât doar un singur titlu folosește ceva altceva. Deci, simplifică într-o oarecare măsură lucrurile dacă „sunteți fericiți în domeniul ignorării în principal a timpului.
Dar tot vorbiți despre luarea în considerare a priorităților sprite, verificarea coliziunilor per pixel, etc. Probabil prea mult .
Notă de subsol: înșelăciune cu acces la bandă
Pentru o grămadă de computere de acasă menționate mai sus, puteți sări peste emularea benzii pentru orice lucru care este codat în formatul ROM implicit, doar inserând o capcană adecvată în ROM-ul sistemului și spooling din fișierul sursă. Multe, dar nu toate, titlurile se bazează în totalitate pe ROM-ul încorporat pentru IO pe bandă, astfel încât să poată încărca multe titluri fără nicio încercare reală de hardware.
În fiecare caz, este un „hack bodge-job, dar o va face dacă acea parte a emulației nu este importantă pentru dvs. – ar trebui să o eliminați din ecuație și să ignorați ce nu funcționează.
Mai exact:
Vic-20:
- dacă contorul de program ajunge la 0xf7b2, copiați următorul antet de bandă la locația indicată de b3: b2, zero 0x90 și 0x93 și continuați de la 0xf7b5 (deoarece evitați JSR);
- trap 0xf90b, verificați dacă X = 0xe, dacă da, atunci obțineți următorul corp de date de bandă și scrieți în memoria emulată din c2: c1, dar nu mai departe de af: ae indiferent de dimensiunea corpului, apoi setați bitul 6 la 0x90, ștergeți semnalizatorii de transport și întrerupere și continuați de la 0xfccf.
Oric:
Pentru ROM 1.0, capturați computerul la adresa 0xe630. Pentru 1.1, urmăriți adresa 0xe6c9.
La prinderea acestuia, încărcați A cu următorul octet din bandă și setați steagul zero în funcție de valoarea sa.
Apoi RTS.
Există, de asemenea, un steag la 0x67 pe ROM-ul original sau 0x24d care discernă între codurile de bandă rapide și lente ale mașinii, dar formatul obișnuit de fișier de bandă are doar octeții decodificați, deci pentru o emularea murdară nu vă faceți griji.
Electron:
Instalați NOP-uri la 0xf4e5, 0xf6de, 0xf6fa și 0xfa51 pentru a dezactiva ramurile de bandă. Sistemul de operare va încerca acum să încarce datele de bandă ca și cum ar fi pe un ROM serial.
Cat PC-ul la 0xf0a8 și verificați dacă X registrul este egal cu 14 și valoarea la adresa 0x247 este zero. Apoi veți ști că ROM-ul încearcă să preia următorul octet de pe bandă.
Puneți următorul octet în Y, setați A la 0 și RTS.
Formatul fișierului bandă principală vă permite în principal să spulați octeți direct din fișier (după niște navă trivială gation, și prin ZLib sau alt decompresor GZ, deși ați putea zgâri în avans).
ZX Spectrum:
(Aceasta este transcrisă din note foarte vechi; s-ar putea să merite confirmarea împotriva unei dezasamblări a ROM-ului)
Trap PC-ul ajungând la 0x056c în ROM-ul de 48kb. Prindeți următorul bloc de pe bandă (dacă utilizați un fișier TAP, vi se va da direct; aș spune că nu ar trebui să vă deranjați să încercați să sprijiniți TZX în acest tip de proiect).
Dacă lungimea sa este mai mică decât valoarea în DE, resetare transport și returnare.
Comparați primul octet al blocului cu valoarea lui B. Dacă nu se potrivesc, resetați reportarea și returnarea.
În caz contrar, treceți primii DE octeți pe care ați ajuns la adresa indicată de IX și setați bitul scăzut al C și setați carry.
Apoi, fie efectuați direct un RET, fie săriți PC-ul înainte la 0x05e2, care este RET-ul care termină în mod normal încărcarea benzii.
Mașinile de 128 kb intră în ROM-ul de 48 kb pentru încărcarea benzii, astfel încât același hack se aplică sub rezerva verificării a ceea ce este paginat.
Comentarii
- Scriere frumoasă. Sunt de acord cu tot ce s-a spus – poate cu două mici suplimente pentru Apple II. Deși este adevărat că hardware-ul video are nevoie de ceva gândire, finețea sa poate fi complet ignorată în emulare, ca doar echivalența anumitor tipare de biți trebuie tradusă în culoare – dacă este deloc, ca A2, unde destul de des rulează cu ecran monocrom, cu care ar putea fi emulat ca bitmap simplu, fără alte detalii. În al doilea rând, atâta timp cât Geme-urile care vor fi redate sunt bazate pe ProDOS, nu este necesară o emulare detaliată a discului II, deoarece acesta funcționează cu hardware diferit.
- @Raffzahn care ar fi cea mai simplă formă de tabel de căutare pentru ieșirea culorii să fie?Revenind la NTSC și tratând totul ca descompozibil la rezoluție mare dublă, îmi pot imagina un tabel indexat de un contor de trei biți reprezentând faza plus un registru de schimbare de cinci biți a ieșirii video pentru a obține jumătate de ciclu de culoare cu un punct central. Deci un tabel cu 256 de intrări. Dar acel ‘ raționament foarte naiv; oamenii s-au descurcat mai bine?
- @Tommy: o abordare simplă este de a folosi pur și simplu o secvență repetată de patru culori (cred că (roșu, galben închis, verde, albastru) pentru pixeli de înaltă rezoluție și neclar ecranul un pic. Asta va sfârși prin a lăsa franjuri de culoare pe lucruri, dar monitoarele reale au avut tendința de a face asta oricum. Deoarece Apple]
Răspuns
Am făcut două și câteva emulații de la zero pentru Mac folosind Swift. Acestea sunt observațiile mele personale pe baza experienței mele.
Niciuna dintre emulațiile mele nu este complet precisă, ceea ce duce la câteva probleme.
Commodore PET
Aceasta a fost prima emulație pe care am scris-o. Aveți nevoie, cel puțin, de o emulație 6502, de o emulare PIA, de o emulație VIA și de o emulație video.
6502 este foarte simplu și un procesor excelent pentru început. De asemenea, este destul de bine documentat. Site-ul Visual6502 a fost de neprețuit pentru a stabili comportamentul exact al instrucțiunilor în care documentația era ambiguă. Ca o parte, am scris o emulație a unui procesor puțin mai târziu (uit care) care a completat unele dintre golurile din setul de instrucțiuni. Acest lucru a făcut scrierea codului de test 6502 mult mai ușoară (chiar și doar
PHX
șiPHY
simplifică unele lucruri. Pe pe de altă parte, orice software care a folosit „instrucțiunile nedocumentate” ale originalului 6502 se va întrerupe pe emularea mea.PIA și VIA sunt cipuri IO relativ simple de imitat. Driverul video poate fi la fel de simplu ca citind memoria RAM a ecranului, traducând în ASCII sau o aproximare apropiată și desenând textul rezultat într-o fereastră. În cele din urmă, am creat un set de hărți de biți care erau copii exacte ale setului de caractere PET.
Resursa mea principală pentru PET a fost „Programarea PET / CBM” de Raeto West. Am o copie originală, dar există PDF ver siuni on-line. De asemenea, importantă este disponibilitatea ROM-urilor BASIC și KERNAL.Nu doriți să rescrieți sistemul de operare.
Emularea unității de bandă a fost un PITA. Versiunea mea de software a fost mai puțin fiabilă decât cea reală, despre care proprietarii de PET vor ști că chiar spun ceva. problema, credeam, este că se bazează pe impulsuri de sincronizare precise ale ciclului și, deși emulatorul meu numără impulsurile de ceas, nu a invocat neapărat întreruperea temporizatorului exact la momentul potrivit.
Am avut mai mult succes scriind o emulare a unităților de disc duale. Aceasta a necesitat și o emulare IEEE 488 robustă, dar emularea unității de disc a fost destul de ușoară. Nu este o emulare hardware, ci doar ia comenzile trimise de PET și le execută folosind fișiere plate pe hard disk-ul Mac-ului.
În final, am scris un cod care să oprească emulator, injectați direct un fișier de program în memorie și apoi porniți din nou emulatorul. Acest lucru s-a dovedit a fi mult mai convenabil decât emularea de discuri sau benzi, încât am renunțat să mai lucrez la ele.
Emulatorul meu funcționează suficient de bine cu majoritatea codului PET. Din păcate, există o problemă cu PET Space Invaders – cauzată probabil de codul tastaturii – deci nu recunoaște apăsarea corectă a tastelor. De asemenea, nu am încercat să abordez generarea sunetului.
Sinclair ZX Spectrum
În unele privințe, acest lucru este chiar mai ușor decât PET. Trebuie să scrieți un emulator Z80 care este mai complex decât 6502, dar există o suită de testare CPM pe care o puteți utiliza pentru verificarea multor funcționalități, trebuie doar să emulați subrutina de ieșire a caracterelor CPM pentru a o face funcțională.
Singurele alte cipuri pe care trebuie să le emulați sunt ULA și nu trebuie să faceți mult din asta dacă sunteți pregătit să renunțați la o unitate de bandă. De asemenea, generatorul video, care este un pic ciudat în modul în care se adresează ecranului RAM.
Lucrul foarte frumos al spectrului este că ecranul este întotdeauna în modul bitmap și sistemul de operare creează caractere direct scrierea modelelor de pixeli de scriere. Nu trebuie să vă faceți griji cu privire la un set de caractere, deoarece este magic atunci când porniți emulatorul cu ROM-urile Spectrum încărcate.
Am primit Spectrum până la punctul în care aș putea încărca și rula Manic Miner și a putut fi redat, deși fără sunet. A durat aproximativ trei luni lucrând poate opt ore pe săptămână de la început până la sfârșit.
Commodore 64
Aceasta este o lucrare în desfășurare. Evident, am avut deja un 6502, pe care l-am modificat pentru a-mi oferi portul IO al 6510. Până în prezent, face asta cu banca comutând corect, unele dintre funcționalitățile CIA sunt implementate și se emulează suficientă funcționalitate VIC II pentru a-mi oferi un echivalent PET, adică modul text normal funcționează. De asemenea, marginea și memoria de culoare a caracterelor funcționează.
Încă Am moduri grafice mai complicate de imitat și sprite și ar trebui să pot face ceva cu sunetul, deoarece acesta este un cip separat, nu mă bazez pe sincronizarea precisă a procesorului.
TL; DR
Cea mai ușoară emulare, în afară de CPU, a fost Spectrul. Aș începe probabil cu asta, deși un computer vechi bazat pe CP / M 8080 ar putea fi chiar mai ușor dacă puteți obține CP / M.
Observații suplimentare
Probabil că veți avea nevoie de un bun ansamblu încrucișat pentru platforma dvs. țintă. Devine cod de asamblare manuală foarte obositor pentru testele unitare.
De asemenea, un dezasamblator va fi util. Nu a trebuit să demontez ROM-urile Commodore BASIC deoarece dezasamblările sunt disponibile gratuit pe internet. Dar când încercam să fac Space Invaders să funcționeze, nu a funcționat la început și dezasamblatorul a fost de neprețuit pentru depanarea problemelor.
Din acest motiv, suita cc65 este un argument puternic pentru pornirea cu o mașină bazată pe 6502. Are un asamblator bun și un dezasamblator excelent inclus. Situația Z80 nu a fost atât de bună, dar am găsit un asamblor rezonabil la final numit z80asm. Cred că totuși a trebuit să o compilez din sursă.
De asemenea, veți avea nevoie de o documentație solidă bună. Din nou, documentația 6502 este online este practic fără egal. Documentele sunt mai puțin disponibile pentru Spectrum, dar este atât de simplu, puteți scăpa de o emulație ULA destul de scăzută.
Răspunde
Împreună cu toate celelalte sugestii fine, ca o alternativă la Z-80 și CP / M, ați putea lua în considerare un sistem generic Motorola 6809 pentru a rula FLEX sau posibil OS-9 , ambele inspirate de Unix. Ca sistem bazat pe CLI, nu este nevoie să obțineți o sincronizare exactă.
De asemenea, dacă construiți simulatorul, este mai degrabă ca și cum ați construi hardware; portarea sistemului de operare a fost task real – ceea ce am făcut în anii 1980 – spre deosebire de o sarcină clonare-ceva-pentru-educație.”Pornește sistemul de operare și rulează programele?” este o țintă foarte realistă.
Întrucât rulează un sistem de operare portabil care rulează pe hardware-ul multor producători diferiți, înseamnă că studenții nu au un singur mod de ao face. Studentul A ar putea construi un afișaj pe hărți de biți; Studentul B ar putea crea un UART și să aibă o interfață serială. Unii ar putea încerca să obțină corect fiecare ciclu; unii ar putea încerca doar să obțină fiecare operație corectă. constrângeri de proiectare, elevii sunt implicați într-o întrebare de inginerie adecvată: care este o modalitate bună de a face acest lucru?
CPU
- 6809 era unic la acea vreme, deoarece era posibil să scrieți cod complet independent de poziție, care să ruleze identic oriunde era în memorie.
- Setul de instrucțiuni era aproape în întregime ortogonal
- Ca procesor de 8 biți cu magistrală de adrese de 16 biți, este destul de simplu
- Mecanismul de excepție și eficient -manipularea adresei seamănă foarte mult cu procesoarele moderne
- Ca design Motorola, avea IO mapat în memorie, mai degrabă decât instrucțiuni IO speciale
- Mai ușor de făcut decât Z-80 (multe instrucțiuni mai puține ) sau 6502 (mai puține cazuri speciale)
- Material prin https://en.wikipedia.org/wiki/Motorola_6809
FLEX a fost conceput ca un sistem inspirat de Unix pentru procesoare pe 8 biți
- A fost conceput special pentru portabilitate și pentru a-l porni a necesitat foarte puține apeluri de sistem pentru a fi implementate – cred că doar citirea / scrierea caracterelor, citirea / scrierea blocului floppy și un fel de boot (sectorul de citire și salt
- Hardware-agnostic pentru aceste funcții de bază, ceea ce face simularea mult mai ușoară
- Este exaltant să scrii doar câteva funcții și să pornești un întreg sistem de operare
- Nicio grafică de care să te îngrijorezi (care este pozitivă sau negativă în funcție de vizualizarea ta)
- Mult material disponibil, f ind via https://en.wikipedia.org/wiki/FLEX_(operating_system)
OS-9 similar ca intenție
- Mai mult ca Unix decât FLEX, ușor mai greu de portat, din câte îmi amintesc
- Portat ulterior la 68000
- Mult material disponibil, găsiți prin https://en.wikipedia.org/wiki/OS-9