Příští rok budu učit třísemestrální mikroprocesorovou třídu vysokoškolských studentů EE třetího ročníku. Přihlaste se do třídy, studenti musí mít absolvované kurzy programování a digitálních systémů.

S cílem motivovat studenty k reálné aplikaci konceptů vyučovaných ve třídě zvažuji možnost zadání úkolů studenti, kteří vytvářejí emulátor pro starší systém od nuly, jako skupinový projekt, který bude dokončen do konce semestru (který je, jak bylo zdůrazněno, dlouhý 2 semestry).

Snažím se vybrat dobrý cílový systém pro tento projekt, přičemž hlavním cílem je, aby jeho emulace byla poměrně jednoduchá. Čím méně periferií bude emulováno, tím lépe. Čím méně vtípků a chyb je třeba replikovat, tím lépe. Snažím se studenty seznámit s důležitými koncepty montážního jazyka, kódování instrukcí, adresovacích režimů, registrů CPU, hardwarových registrů mapovaných do paměti atd., A ne nutně triků potřebných k dostatečně rychlému vykreslení spritů k vytvoření zajímavé videohry s polovodičovou technologií, která byla k dispozici v 80. letech za přijatelnou cenu. Chápu, že to bylo v té době nutné; Jen se snažím najít systém, který by tyto triky příliš nezneužíval. V ideálním případě by dotyčný systém neměl vyžadují přesnou emulaci cyklu nebo triky, jako je pronásledování skeneru.

Druhý požadavek se týká výkonu. Studenti jistě nejsou obeznámeni s technikami optimalizace softwaru, takže pokus o emulaci i první Playstation nebo Nintendo 64 pravděpodobně narazí na problémy s výkonem (možná dokonce i SNES a Genesis). V tomto okamžiku je třeba studentům dělat starosti implementace emulátoru správně, ne efektivně. Emulace CPU bude jistě implementována tlumočníkem, nikoli překladačem / rekompilátorem.

Nakonec si nemyslím, že by pro studenty byl emulátor zajímavý, kdyby řekněme právě zobrazené hodnoty registru po provedení programu hračky (i když by to projekt výrazně zjednodušilo). Chtěl bych zvolit systém, pro který byly hry vyrobeny, i když tento systém nebyl vyhrazenou konzolou pro videohry. Mám pocit, že schopnost spouštět hry na emulátoru by byla pro studenty velmi motivující.

Například právě teď se dívám na NES , ale stále je to trochu komplikované, zejména PPU. Existují jednodušší možnosti?

Komentáře

  • Zajímavá otázka. může být důležité přidat prosbu o odpovědi, aby se zabránilo obvyklým bojům o lepší systém / cpu / vdu / atd. a zaměřit se na didaktickou část.
  • V otázce je zjevný rozpor. v jednom bodě se chce autor soustředit na emulaci CPU, v druhém bodě chce mít také obraz a zvuk vydávaný celým emulovaným systémem. I když je požadavek na tento systém pochopitelný, vede ke stejně tvrdé práci na emulace periferních zařízení, zobrazování obrázků a přehrávání zvukových úkolů.
  • Možná užitečný zdroj za předpokladu, že to bude spíše stroj Z80 než 6502: z80.info/decoding.htm o algoritmickém dekódování instrukcí Z80 (s výhradou řady zvláštních případů, ale tam jsou). Vyžadování emulátoru ve skutečnosti spíše než algoritmickým vyhledáváním dekódováním by omezilo schopnost studentů kopírovat a vkládat a bylo by relevantní pro kurz mikroprocesorů?
  • Možná to není to, co hledáte, ale možná namísto psaní emulátoru (který ‚ m za předpokladu, že poběží na jejich PC), mohou být schopni prokázat stejné koncepční znalosti při práci se skutečným hardwarem. Nechte je získat vývojovou desku založenou na ARM Cortex M4, naučte se pracovat s holým kovem.
  • Možná TI-83 …?

Odpověď

Posílám CHIP-8 dopředu.

Tento systém je v podstatě virtuální stroj vyvinutý z nějakého důvodu. Existují hry napsané pro CHIP-8. Má několik operačních kódů, zásobník, několik časovačů a bitmapový displej s nízkým rozlišením, ale je to dost jednoduché na to, že prvních pár emulátory se vejdou do několika kilobajtů na časných 8bitových počítačích.

Existuje více než několik referenčních implementací, které můžete použít.

Existují hry atd., které jsou veřejné doména již jako zde , takže nemusíte poskytovat své vlastní hry.

Komentáře

  • Ayy pro čip 8. Je ‚ snadné najít implementace v mnoha jazycích a architektura je jednoduchá.
  • CHIP-8 je skvělý nápad na úvod do emu díky své jednoduchosti.Když jsem předtím napsal emulátor NES, mohu vám říci, že psaní CPU bylo extrémně časově náročné a zdlouhavé – a 6502 je jednoduchý, pokud jde o CPU. Naproti tomu CHIP-8 má pouze 35 velmi jednoduchých pokynů. Mnoho systémů se navíc spoléhalo na přesné načasování chování mezi CPU a zbytkem hardwaru, zatímco CHIP-8 takový požadavek nemá.
  • Komentáře nejsou určeny pro rozšířenou diskusi; tato konverzace byla přesunuta do chatu .
  • Jsem ‚ zkušený programátor, ale Nikdy jsem nenapsal emulátor. Po této odpovědi jsem si myslel: “ Hej, tento chip8 vypadá dost snadno, ‚ na něm strávím možná pár hodin „. O tři týdny později jsem ‚ stále tady a snažím se přijít na to, proč programy neustále skáčou z paměti. Spousta legrace, také spousta “ co sakra „.
  • Zajímalo by mě, jestli by nějaké byly překážka odebrání vblank wait z rutiny plot-sprite a přidání explicitní instrukce vblank-wait? CDP1802 není ‚ ta démon rychlosti, ale při absenci čekání vblank by téměř jistě dokázal nakreslit více než jednoho sprite na snímek.

Odpověď

Ach. Přesná otázka. Pokusím se dát několik rad, ale místo širší konverzace bych zde považoval odpověď na širší problém. Přesto:


[…] Zadání úkolů studentům vytvořit emulátor pro starší systém

Docela v pohodě.

od nuly,

Pokud to má být opravdu od nuly a v softwaru, nebylo by to opravdu považuji to za úkol vhodný pro nováčky v tak omezeném čase. Pokud neexistuje způsob, jak odstranit požadavky v reálném čase (které jsou pro hry ještě důležitější), byl bych raději opatrný.

Ve skutečnosti protože jde o EE, proč neudělat skutečný hardware? Stále je snadné získat (některé) klasické CPU a související zařízení. V kombinaci s moderním LCD je snaha o hardware docela snadno proveditelná během několika týdnů.

jako skupinový projekt, který bude dokončen do konce roku třída (která je, jak bylo zdůrazněno, 2 semestry dlouhá).

Což může být nejpřísnější podmínkou.

Snažím se pro tento projekt zvolit dobrý cílový systém, jehož hlavním cílem je, aby jeho emulace byla poměrně jednoduchá. Čím méně periferií bude emulováno, tím lépe. méně vtipů a chyb, které je třeba replikovat, tím lépe.

Zní to jako dobrý pokus. A co je důležitější, odstraňuje některé zdánlivě jednoduché systémy (jako singleboarders) ze seznamu, protože se spoléhají na komplexní zacházení se vstupně-výstupními zařízeními (jako je přístup v reálném čase k portům pro zdánlivé nepřetržité řízení segmentů LED).

Chci vystavit studenty důležitým konceptům montáže jazyk, kódování instrukcí, režimy adresování, registry CPU, paměťově mapované hardwarové registry atd.,

Něco, co lze udělat se skutečným hardwarem jako stejně jako emulace, není to?

V ideálním případě by dotyčný systém neměl vyžadovat emulaci s přesností na cyklus nebo triky, jako je pronásledování skeneru.

Spolu s implicitním požadavkem na videovýstup to vyžaduje jednoduchou nezrychlenou bitmapovou logiku.

Druhý požadavek se týká výkonu. Studenti jistě nejsou obeznámeni s technikami optimalizace softwaru, takže pokus o emulaci i první Playstation nebo Nintendo 64 pravděpodobně narazí na problémy s výkonem (možná i SNES a Genesis).

Tady bych se moc nebál, protože skutečný hardware PC je poměrně rychlý. Skutečnými problémy zde nejsou rychlost emulace, ale aspekty v reálném čase – synchronizace různých částí emulace -, které vyžadují velmi pečlivý a doladěný design softwaru. Tady se to nedá očekávat. Docela jste zmínili část „závodění paprskem“.

V tomto okamžiku se studenti musí obávat pouze správné, ne efektivní implementace emulátoru. Emulace CPU bude určitě implementována tlumočníkem, nikoli překladačem / překladačem.

I pro ty nejprimitivnější je však nutná synchronizace v reálném čase, aby hrát hru. Alespoň synchronizace sledování obrazovky je nutností – přinejmenším pro rychlost přepínání samotné simulace.

Vrozená potřeba her využívat časovací efekty – a synchronizovaná manipulace s obrazovkou na lepší úrovni než u snímků – je něco, díky čemu bude spuštění jakékoli hry v reálném světě na navrhovaném emulátoru výzvou.

Chtěl bych si vybrat systém, pro který byly hry vyrobeny, i když tento systém nebyl speciální herní konzolou. Cítím, že schopnost provozovat hry na emulátoru by byla pro studenty velmi motivující.

Z celého srdce zde souhlasím. Velká část úspěchu experimentálních a učebních systémů Andre LaMothe je založena na nejpřednější schopnosti hrát hry.

Například právě teď se dívám na NES, ale stále je to trochu komplikované, zejména PPU. Existují jednodušší možnosti?

Je to těžké, protože základní požadavky si navzájem odporují. Pouze úspěšné konzoly / počítače získaly velký výběr her, ale ty také mají složitější hardwarovou strukturu umožňující skvělé hry.

Pojďme zkontrolovat některé dobře známé systémy. Chtěl bych je rozdělit do „jednoduché“ a „složité“ systémy podle složitosti jejich video logiky (* 1)

Jednoduché systémy

V první iteraci jsou to všechny systémy bez vyhrazeného VDC / CRTC.

  • Atari VCS – nakonec konečný systém, který se má použít k učení assembleru, práce na extrémní základní úrovni bez meziprostoru a příliš mnoho péče. Současně to „Jmenovec pro výraz„ závodit s paprskem “.

    Vzhledem k tomu, že to může být i nadále systém, který je třeba hledat, protože časově závislé části jsou dobře definované a (ve srovnání s jakýmkoli jiným videem) extrémně jednoduché a snadno emulovatelné – kromě toho, že to není nováček. Také je to velmi dobře zdokumentováno na obecně dostupných zdrojích.

  • Commodore PET – poměrně jednoduchý systém, zvláště od té doby celá video část může být emulována docela abstraktně, přesto musí být VIA alespoň částečně emulovány. Nejdůležitější je, že obsahuje pouze dva zdroje časování (kromě hodin).

    Velkým přínosem pro PET (a následné kroky) je dobrá dokumentace (také díky své jednoduchosti). I když je vybaven CRTC, téměř žádná hra (nebo jiný software) vůbec nevyužila jeho přeprogramování, což umožnilo jednoduchou cestu a neúplnou (abstraktní) emulaci.

    Na zadní straně je pouze poměrně malý počet her a většina z nich je napsána v jazyce BASIC, což může vyžadovat určitý výzkum, aby se zjistilo množství abstrakce vs. detailů v emulaci.

  • Apple II – Opět neuvěřitelně dobře zdokumentovaný systém se spoustou softwaru. Hodně z toho založeno na shromáždění. Přestože je hardware plně zdokumentován a sestavován pouze z TTL, jeho fungování není opravdu jednoduché a protože některé hry se spoléhají na vtípky a počítání smyček pro přesné načasování, emulace může být mnohem komplikovanější, než se na první pohled předpokládá.

    Plusem pro vás může být to, že Apple II byl v Brazílii docela populární (tehdy).

  • TRS-80 – zde také video logika je vytvořen z TTL, ale mnohem jednodušší než na Apple. Podobné další I / O jsou docela jednoduché. Negativní stránkou je opět poměrně malý počet her.

Skuteční starci, ale i některé pozdější systémy lze zatím klasifikovat jako jednoduché:

  • Sinclair Spectrum – I když logika nabízí několik triků, zvonky & píší, jde o přímočarý bitmapový design. Zatím jsou šance na emulaci dobré, až na to, že hry se jako obvykle velmi spoléhaly na načasování, což opět komplikuje emulaci.

    Stejně jako u Apple II, kde v Brazílii existuje spousta klonů .

  • Podobný případ lze učinit i pro rodinu ORIC.

  • Atari ST – z dnešního dne to může být překvapení pohledu, ale Atari ST neobsahoval žádný sofistikovaný video hardware. Pouze 3 grafická rozlišení a 9 bit CLUT pro až 16 souběžných barev. Několik synchronizačních bodů a jeden časovač. Plus modernější CPU a vyhrazený zvukový čip. Zní to jako zápas vytvořený v nebi, pokud, no, pokud už to nebude pro programátory her. Také zde software znamenal celou řadu triků, jak vytvořit úžasné hry (* 2).

Prvním závěrem pro „jednoduché“ systémy je, že i když hardware může být méně složitý, software to dokázal překonat. V důsledku toho může je třeba říci, že méně složité systémy nemusí nutit emulaci méně složitou, protože se nemá emulovat více odlišného hardwaru, ale jednoduchý hardware je třeba sledovat velmi těsně, aby byl spuštěn stávající herní kód.

Složité systémy

Jedná se obecně o všechny systémy se sofistikovaným VDC

  • 9918 a násl. .- Toto není tolik o jediném systému, ale nakonec nejběžnějším používaném VDC (TI jej nazval VDP). I když byl TI koncipován pro TI 99/4, prodal ho každému, kdo měl zájem. Výsledkem byla většina všech systémů (* 3) používajících 9918 nebo některý z jeho následných návrhů (9928/38/58 / …).

    Herní konzoly jako Coleco Vision , Sega SG-1000 až do hlavního systému stejně jako počítače od TI 99/4 nebo Memotech MTX až po celý svět strojů MSX tuto rodinu používal.

    Zní to skvěle, že? Určitě existuje spousta her, které je třeba použít. Dále takový VDP pomáhá zjednodušit emulaci, protože nabízí jasné oddělení mezi CPU a displejem a omezuje, jaké „triky“ může hra použít na to, co nabízí VDP, což je jasně definováno. A opět je to stávající software, který emulaci ztěžuje, protože programátoři samozřejmě opět používali časovací triky k manipulaci s obrazovkou ve správný čas. Zmínil někdo „Racing the Beam“?

  • Commodore VC20, C64, C16 atd. – Totéž platí pro všechny domácí počítače Commodores. I když se liší ve složitosti tím, že mají skřítky nebo ne, nabízejí časovače nebo ne a zvuk nebo ne, základní problém je stejný jako u rodiny 9918: Software využívající určité časové situace k vytváření herních efektů.

  • Systémy 6847 – Tandy CoCo, Matra Alice a podobně mají stejný problém.

Mohl bych pokračovat v herních systémech jako NES nebo MegaDrive, ale tento seznam zde ukončím, protože princip by měl být jasný už teď: Zatímco některé systémy mohou vypadat jako Složitější je emulovat, skutečným problémem není složitost video hardware, ale kdykoli programátor „vylepšuje“ to, co lze udělat chytrým programováním (* 4). Skutečným problémem vašeho projektu tedy není (tolik) hardware (* 5), protože jde o software, zejména triky a nástroje používané ve skutečných existujících hrách .

To je obzvlášť špatné, protože chcete použít (jak jsem to četl) existující hry jako motivaci. Nebude na nich mnoho běhat méně tvrdá emulace v reálném čase.

Snížení této závislosti sníží počet správných her. Jeho snížení na úroveň, která umožní jeho zvládnutí v časově omezeném kurzu, znemožňuje nalezení vhodných her.

Závěr: Hledání správný kompromis je cesta, ale ta, která bude vyžadovat značný výzkum a přitom bude stále omezovat použitelnost.


Nyní je možná možné zaútočit to z trochu jiného úhlu. Zkusme něco:

  • Použití stávajícího starého hardwaru:

    I když je prokázáno, že (* 6) funguje, nabízí nejvyšší kompatibilitu a snadné použití díky otevřeným vývojovým prostředím, může chybět „přitažlivost“ pro studenty EE.

  • Použít stávající systémy vzdělávacích her:

    Systémy jako Andre LaMothe „s XGS jsou skvělými nástroji pro ponoření do podrobného sestavení a programování hardwaru. Jistě, vyžaduje se nějaké pájení (jsou k dispozici připravené verze), jsou to téměř kompletní softwarově definované systémy, zdokumentované a nabízejí obrovskou knihovnu her. Nemluvě o jeho knihách o programování her.

    Velkým bonusem je, že si studenti mohou systém vzít domů a hrát i po ukončení kurzu.

  • Vytvořte si svůj vlastní jednoduchý systém:

    Vezměte klasický procesor (například 6502), nějaké RAM, FLASH a VIA plus FPGA k implementaci velmi základního CRTC a hotovo. Studenti to pájejí, mohou se dozvědět o komponentách a jejich interakcích, včetně použití FPGA (což dnes může být každopádně nutností) a poté spustit svůj software na reálném hardwaru. I při malém počtu by mělo být možné vyrobit takovou desku kolem 50 Euro nebo méně. Stejně jako myšlenka XGS bude „fungovat i po ukončení kurzu – včetně pocitu vlastnictví jako jejich systému.

    Studenti samozřejmě budou muset psát své vlastní hry, ale jednoduché hry lze zvládnout za poměrně krátkou dobu – nemluvě o tom, že navazující kurzy mohou také využívat hry, které psala předchozí třída.

  • Emulace „vlastního“ systému

    Podobně jako dříve, kromě toho, že vše je virtuální. Výhodou je, že je dobře definovaný a uzavírá systém, zejména ten, kde neexistují omezení kvůli méně „dokonalé“ emulaci – emulace je podle definice dokonalá a všechny její zvláštnosti jsou takové, jaké má systém. Nevýhodou je opět softwarová část.

  • Použijte „měkký“ hardware:

    Existuje projekt Neila Franklina, který vytváří řadu zobecněných systémových komponent podobně jako klasické počítače, ale místo vyhrazených čipů používá mikrořadiče. Kombinuje emulaci se skutečným hardwarem. Zatímco komponenty jsou stále vyvíjeny jako emulace, jsou určeny pro provoz v mikrořadiči a mohou být použity podobně jako „skutečné“ čipy. Jeden systém může být nastaven pomocí modulu SoftCPU emulujícího například 6502 s nějakou RAM a ROM, v kombinaci s SoftVGA dodávajícím terminál jako video rozhraní a SoftPS2 emulující klávesnicí a myší. Všechny jsou připojeny přes paralelní nebo sériovou sběrnici (SPI), což umožňuje přidání dalších komponent, které lze prezentovat také do emulace.

    Kromě toho, že jde o emulaci, obsahuje omezené množství hardwaru, který lze provést na prkénku na pájení (pájení však nikdy není časné), ukazuje také zcela typický úkol dnešního inženýrství – nahrazení tradiční logiky mikrokontroléry – v praktickém použití.

    The výsledkem je systém nabízející dojem a pocit skutečného (starého) počítače, který je vytvářen pomocí moderního hardwaru s paralelními emulacemi.

  • Použití konfigurovatelného emulátoru:

    Ne, nejde o MAME nebo podobné, ale o rámec emulátoru napsaný v JavaScriptu, který zpracovává obecné části (včetně načasování), kde vaši studenti přidají své emulace (což byl cíl, že?), aby vytvořili celý systém. Jelikož JS je dodáván ve zdroji, lze upravovat i samotný Framework.

    V závislosti na kvalitě každé emulace to může být použitelné pro cokoli od jednoduchého demonstračního systému až po plnohodnotnou zábavu 80. let počítač.

Takže některé z výše uvedených variant mohou být dobrým začátkem?


* 1 – zaměřím se pouze na video (a CPU), aby to bylo jednoduché. Také samotné video již bude dobře fungovat při vyřazování kompletních systémů. Zvuk přidá další dimenzi a může ji zkomplikovat nad rámec tohoto.

* 2 – Stačí se podívat na xenon. Průkopnický vertikální scroller s několika posunujícími se vrstvami, mnoho animovaných objektů, vše běží super hladce v softwaru. Ve skutečnosti to bylo tak vyladěné, že jeho přenesení do (obvykle) schopnější Amigy (graficky moudré) trvalo nějakou dobu a vyústilo v poněkud menší hru.

* 3 – Systémy navržené nejsou nutné prodané jednotky. Opět platí, že některé herní konzole jsou víc než jen úspěšné, takže může získat i většinu v počtu.

* 4 – Blogové příspěvky hlavního vývojáře Glide64 pro emulátory N64 napsal vícedílnou sérii ( Úvod , P .1 , P.2 , P.3 ) blogpostů o překážky, které musel vylézt, aby část emulace videa fungovala – u všech nejde o složitost emulace hardwaru, ale o všechny způsoby, jak CPU upravila a vyladila výstup vedle video logiky. To je ještě pozoruhodnější vzhledem k tomu, že N64 je již spíše absurdní a uzavřený systém.

* 5 – Ve skutečnosti bych komplexnější video hardware považoval za skvělou lekci pro studenty EE, protože dobře ukazuje, co lze udělat s několika branami místo hromád softwaru – ještě více, protože se chystají později udělat hardware, že?

* 6 – Stefan Höltgen z FU v Berlíně například používá staré herní systémy ve svých třídách seznámit studenty (ne EE) se skutečným hardwarem a reálným programováním a jejich implikací pro každodenní úkoly (a hry).

Komentáře

  • @Tommy No, rád bych se tomu vyhnul, protože neexistuje snadná odpověď. Zde by mohlo být nejdůležitější, že zatímco Z80 je poněkud “ nepředvídatelný „, 68k je něco jiného než jednoduché. Se všemi přídavnými slovy (až do CPU32) může mít jediná instrukce až 11 slov (22 bajtů) a jejich dekódování je vážný nepořádek. Pak znovu vše závisí na způsob, jakým je emulátor vytvořen. Z80 je poměrně přímá 8080 dopředu, snadno emulovatelná, s několika modifikátory, se kterými lze snadno manipulovat. Pro 68k, i jen pro původní, to bude mnohem více práce.
  • “ úkol vhodný pro nováčky v tak omezeném čase. “ Řekl, že se jedná o studenty 3. ročníku, nikoli nováčky, a ‚ již splnili několik předpokladů.
  • @ wizzwizz4 No, bez ohledu na to, jaký je náš osobní názor, JS je zákonným dědicem společnosti BASIC. Vážné a ve všech směrech! Přemýšlej o tom.Spouští se nejen u každého skutečného počítače, ale ‚ je dokonce nainstalován ve výchozím nastavení, a téměř neexistuje způsob, jak se ho zbavit, aniž byste ztratili mnoho funkcí. Ještě víc si pomyslete, kolik špatného a neuvěřitelně pomalého softwaru je napsáno v JS – dokonalý důkaz, že?
  • @Raffzahn It ‚ s úplně jiný Pro jednoho měl BASIC několik nekompatibilních implementátorů … Och! Je nástupcem BASIC!
  • Stále ‚ stále nejsou nováčky, což jsou studenti prvního ročníku. A myslím si, že byste měli OP využít výhody pochybnosti, že by projekt nepřiřadil, pokud studenti nemají ‚ t požadované pozadí.

Odpověď

Zatím existují dobré nápady.

Ale něco, co je třeba zvážit.

Pokud děláte něco jako stroj CP / M, jsou opravdu docela základní a jednoduché, zejména proto, že vše je izolováno nejen BIOSem, ale také povahou IN / OUT rodiny 8080 / Z80.

Nezdá se mi nepříjemné, aby cílem prvního semestru byl stroj CP / M. (Neznám vaše osnovy)

Ale například základní stroj CP / M nepotřebuje přesnost cyklu, nepotřebuje přerušení, nejsložitější věcí, kterou musí udělat, je dotazovat se na klávesnici a zjistit, zda byla stisknuta nějaká klávesa. (Na rozdíl od monitorování keydown a keyup nebo čehokoli jiného.)

Potom v druhém semestru můžete přidat požadavky, jako je propojení s grafickým čipem. Výše uvedená instance SG-1000 by mohla být snadno strojem CP / M v prvním semestru a poté by se mohla snadno transformovat na SG-1000 ve druhém (protože jste dostali část Z80 vše hotové v prvním semestru) .

Nakonec si myslím, že se od vaší třídy zdá být přijatelný program, který mohou studenti spustit a ověřit si svůj procesor. Několik věcí je více vzrušujících než ladění špatného CPU, zejména s jazykem stroje, s nímž možná nebudete obeznámeni. .

Komunita 6502 má testovací programy, které dokážou zkontrolovat, zda procesor správně provádí všechny instrukce, nejsem si jistý, co je k dispozici ostatním CPU.

A pokud je to nějaká útěcha z rozsahu, napsal jsem simulátor i přidružený asembler během 2 týdenních vánočních svátků, pokud vám to pomůže, jak velké jsou skutečné projekty. Základní CPU jsou velmi jednoduché.

Komentáře

  • Na Z80 poskytuje FUSE testy, i když ne všechny jsou obecné nebo nutně správné, pokud jde o přesný cyklus načasování; ‚ jsou také v textovém formátu ad hoc, ale ‚ jsem je přepsal do JSON: github.com/TomHarte/CLK/tree/master/OSBindings/Mac/… – pomocí tests.in.json nastavíte počáteční stavy a zjistíte, jak dlouho byste měli běžet, pak tests.exected.json k ověření výsledků. ‚ Jsou zde také soubory zexall a zexdoc, původně soubory CP / M, ale široce přizpůsobené a velmi pomalé. Předání prvního vyžaduje, aby byla správná spousta nezdokumentovaných věcí, předání druhého není ‚ t.
  • … a jediná věc, kterou ‚ jaké jsme kdy našli u modelu 6809, za předpokladu, že by kdokoli myslel na návrh Vectrex nebo Coco / Dragon, je obsažen v širší testovací sadě arkádových strojů Williams na seanriddle.com/wetsold.html . U 6502 jsem velmi na palubě s testy Klause Dormanna, Wolfganga Lorenza a AllSuiteA, které se zdají být mnohem prominentnější než testy Z80 nebo 6809.
  • @Tommy Co se týče Jsem si ‚ vědom, že každý z testů Fuse ‚ je přesný. Nahlaste prosím chyby, pokud ‚ nejsou 🙂
  • @PhilipKendall viz můj e-mail ze dne 29/5/2017 na fuse-emulator-devel re: DJNZ a zda se offset přečte při konečné iteraci. Závěr Alana Coxe ohledně toho, zda je testované chování FUSE ‚ správné, spočíval v tom, že ‚ s “ otevřené interpretaci “ na základě dostupných zdrojů. Takže jsem si myslel, že “ není nutně správné “ je fér. Pravděpodobně jsem však měl mít jasno: ve vašem týmu jsem našel jen několik odchylek ‚ interpretace důkazů. Omlouvám se za špatnou formu.
  • @Tommy – “ Závěr Alana Coxe ohledně toho, zda je testován FUSE ‚ chování je správné bylo to, že ‚ s “ otevřené interpretaci “ založené na dostupných zdroje “ …i když si hodně vážím toho, co Alan dělá, ‚ je docela snadné ověřit, zda je testované chování stejné jako skutečné CPU Z80 (zejména pro verze CMOS které lze spustit na prkénku s nízkými rychlostmi hodin, aby se velmi snadno nastavily podrobné testy), takže je to určitě případ, kdy když si myslí, že ‚ něco není v pořádku, měl by být velmi snadno to prokázat.

Odpověď

Mohu navrhnout SG-1000 ?

Systém je něco víc než seskupení tří běžných čipů – Z80, TMS9928A pro grafiku a SN76489 pro zvuk, s ovladači jako hloupé skupiny NO (normálně otevřených) přepínačů.

V softwaru nebo hardwaru můžete simulovat nebo emulovat jakoukoli jeho část izolovaně nebo všechny dohromady a vytvořit tak celý systém.

systém používá pro své hry jednoduché ROM bez možnosti přepínání mezi bankami a obvykle Při vytváření efektů se nespoléhejte na žádné triky, jako jsou přerušení obrazovky uprostřed obrazovky nebo počítání cyklů. Pouze jedna mapa dlaždic a několik skřítků nahoře. Navrhuji, aby to bylo mnohem přímočařejší než systém obsahující mnoho interagujících interních komponent a inteligentních kazet, jako je NES.

Měli byste poskytnout své vlastní hry, které budou emulovat, spíše než distribuovat nelicencované materiál chráněný autorskými právy samozřejmě.

Komentáře

  • … a pro záznam je ColecoVision přesně stejnou kolekcí komponent s různými spojovacími prvky logika a velmi mírně komplikovanější joypady. Emulátor SG-1000 lze tedy snadno rozšířit tak, aby podporoval oba.
  • Za zmínku stojí také to, že model 9918 je složitý čip se skřítky, složitými modi a daty, jako to neměl ‚ nechcete používat. Není to ‚ to?

Odpověď

Jednoduchý, přímočarý počítač, jako je ZX Spectrum, zní rozumně – ale už je prostě příliš mnoho dobrých emulátorů, aby to bylo užitečnou volbou. Také si myslím, že 6502 je snadnější emulovat.

Takže možnou možností by mohl být systém Oric-1 nebo Atmos by Tangerine. , který používal nebankovní paměť 6502, žádné vlastní čipy kromě jednoduchého videa a relativně přímou vyrovnávací paměť snímků. Není ani zdaleka tak známé jako Spectrum, přesto je k dispozici software (hry), který přináší některé jednoduché testy kompatibility (myslím, že pro studenty je nesmírně důležitý nějaký „smysl pro úspěch“). Pro Atmos je již k dispozici řada emulátorů (podle mých znalostí tři), ale jejich počet je omezený, což usnadňuje zjištění, zda někdo podváděl a jednoduše zkopíroval kód.

Žádný z Hry Oric byly podle mých znalostí tak sofistikované, že ke spuštění těchto her budete potřebovat 100% cyklicky přesnou emulaci,

Komentáře

  • I ‚ d tvrdí, že architektura Oric odrazuje od rastrových závodů tím, že nemá postranní kanál registrů pro ovládání videa a není nastaven tak, aby závodění mohlo myslitelně zvýšit vaše barevné rozlišení (na rozdíl od Spectra). Pokud by to mělo pouze dvě vyrovnávací paměti HIRES, uvedu to ‚ s větší jistotou. Souhlasili byste s tím?
  • @Tommy ‚ nejsem příliš obeznámen s videoobvody Oric. V každém případě bych uvedl, že Oric měl tak krátkou životnost a tak omezenou uživatelskou základnu, že sofistikované techniky vyladění videa, jaké známe ze ZX Spectrum, nebyly ‚ t vyvinuté (přinejmenším ne během aktivního života počítače) je zde ‚ spousta zajímavých ukázek demozoo.org/platforms/ 49 )
  • Ach, pak ‚ poskytnu lepší úvahy: video čip Oric má modální stav, včetně textového nebo grafického režimu, ale ne exponované registry. Vše se nastavuje pomocí řídicích bajtů ve videostreamu – včetně atributů popředí a pozadí. Lidé si na to obvykle stěžují, protože to znamená, že pokud chcete grafiku bez mezer, ‚ jste omezeni na čtyři barvy na řádek, přičemž dvě z nich jsou bitovým doplňkem ostatních dvou. Některé z moderních her přesto vypadají opravdu dobře – např. Stormlord youtube.com/watch?v=QSDy-BC580M
  • @Tommy Díky sériovým atributům je programování trochu složitější, I ‚ d hádám, ale míra střetu atributů je ještě lepší než na ZX Spectrum, domnívám se.
  • Xenon 1 potřebuje přesný cyklus, jinak se zablokuje, když loď exploduje (odmítnutí odpovědnosti: napsal jsem orický emulátor pro amigu s názvem amoric a narazil na tento problém, ale pouze v této hře)

Odpověď

Na základě vašich kritérií a potřeby zajistit, aby byl projekt pro vaše studenty zajímavý, doporučuji vážně uvažuje o Vectrex Arcade System, který na začátku 80. let prodal Milton Bradley.

zde zadejte popis obrázku

Protože je Vectrex jedinečný spíše při použití vektorového zobrazení než rastrového zobrazení, vyžadují emulaci jakéhokoli komplikovaného grafického hardwaru. Displej je spravován CPU a samotný displej lze snadno emulovat v moderním systému a s dobrým výkonem.

Kromě emulace vektorového displeje CPU ( Motorola 6809) a I / O čip (MOS 6522) nepředstavují příliš muc Je to výzva, protože jde o jednoduché 8bitové části, které jsou velmi dobře zdokumentovány.

Paměťový model je také velmi jednoduchý a bez bankovních schémat, o kterých vím. Ve Vectrexu je společný zvukový čip PSG, ale jeho emulaci lze považovat za „extra kredit“.

Na rozdíl od jiných jednoduchých herních konzolí z počátku 80. let se hry Vectrex držely docela dobře, vzhledem jeho schopnost vykreslit hladkou monochromatickou grafiku včetně 3D drátového modelu. O tom dále svědčí popularita moderního vývoje „home brew“, ve kterém vývojáři pokračují ve vytváření nových her Vectrex.

Jednou z posledních výhod Vectrexu je, že původní systémová ROM je volně distribuovatelná.

Komentáře

  • Až na to, že vectrex také dobře fotí ‚ Racing the Beam ‚ kategorie, ne ‚ to?
  • @Raffzahn, jak tomu rozumím, CPU Vectrex ovládá elektronový paprsek – pravý opak “ závodění s paprskem “ situace, kdy software potřebuje provést přesně načasované změny stavu držte krok s externě načasovaným zobrazením rastrového skenování.
  • @Mark Je to ‚ stejné jako u VCS. I zde je paprsek řízen CPU. Bez CPU, který přistupuje k WSYNC na každém řádku a před dokončením řádku, obrazovka zakolísá. A pokud chápu OP, je to ‚ přesně o tom, že ne znovu vytvořím systém s přísnými časovými požadavky – což je pro Vectrex zásadní.
  • @Raffzahn: CPU ve VCS ovládá svisle, ale neřídí vodorovně. ‚ Není neobvyklé, že hra vydává desítky nebo dokonce stovky řádků skenování bez zásahu WSYNC. Při absenci WSYNC bude paprsek ve stejné horizontální poloze každý 76. cyklus. Ukládání WSYNC je často nejjednodušší způsob, jak počkat, až se paprsek dostane na pravou stranu zobrazené oblasti, ale ‚ je to sotva jediný způsob. Programátor, který byl tak nakloněn, mohl využít složité podrobnosti pohybu a chování sprite k napsání hry, která nikdy nepoužila WSYNC.
  • Hm, lidi, mluvíme zde o emulátoru. Nebude problém s vyblednutím fosforu, zatímco emulovanému CPU trvá příliš dlouho, než nakreslí další snímek. Neexistuje žádný “ paprsek “ a určitě neexistuje důvod, proč by emulátor musel “ závod „, protože displej emulátoru zůstane zcela statický, pokud je to nutné mezi snímky.

Odpovědět

Vytvoření emulátoru od nuly je relativně obrovský úkol, zejména pro nezkušené studenty, a může se ukázat jako problematické. Takže opravdu musíte být opatrní, jakou platformu emulovat a jaké informace sdílet / používat. Pro mě je nejlepší volbou platforma ZX 48K , jak jsem na ní rostl a jsem obeznámen s jejím vnitřním fungováním, takže odpověď bude tím zaujatý … Musíme si ale uvědomit, že v dnešní době to studenti obvykle neviděli / nepoužívali / neznali tak jako my … Co musíte dosáhnout je:

  1. správná emulace CPU isetu

    i když existuje spousta instrukčních sad dokumentů Musíte být opatrní, protože například na Z80 99,99% z nich obsahuje chyby. Měli byste tedy pro ně zvolit nějaký testovaný referenční ostrov, který je nyní jeho správný (nebo alespoň v zásadě funkční).

    Například tady je důl Z80 procházející ZEXAL se 100% úspěšností:

    Platforma Z80 má jednu hlavní výhodu, a to, že pro ni existují rozsáhlí testeři jako ZEXALL Cvičení , které může hodně pomoci ladit emulátor.

    Myslím, že tam jsou i verze pro i8080, ale neznám žádné takové testery pro jiná rodina CPU.

  2. Načasování

    dobře pro základní emulaci je metoda hodinových tiků (nebo škrcení) dostačující, což je dobře známé a používané … nevidím zde žádný problém. V dnešní době mají počítače relativně dobré rozlišení pro načasování (na PC: RDTSC, na Windows PerformanceCounter, …).

    Základní emulátor může ignorovat OBSAH emulované platformy, ale pozor, některé OS / hry / aplikace by mohly pokud nebudou správně emulovány, budou nepoužitelné. To platí nejen pro ukázky. Obvyklé načasování na starých počítačích bylo odvozeno od nějakého přerušení (obvykle obnovování videa) a omezeného počtu cyklů, kdy bylo možné provést před ním. Ale s tvrzením, že počet instrukcí provedených ve stejnou dobu může být velmi odlišný a některé programy by mohly přetéct a poškodit je nebo zamrznout. OBSAH je nejtěžší implementovat pomocí taktických hodin, takže byste se mu měli za každou cenu vyhnout … Na druhou stranu s časováním na úrovni MC je to opravdu snadné a jen pár řádků kódu.

  3. Zvuk

    toto je problém závislý na platformě a měli byste zvolit API použité pro zvukový vstup / výstup správně. Například v systému Windows je jedinou použitelnou možností WAvEIN / WAVEOUT kvůli nízké latenci a snadnému použití. DirectX je nepoužitelný (přinejmenším byl v době, kdy jsem se ho snažil použít pro takový úkol) kvůli VYSOKÝM latencím a nefunguje zpětná volání.

    Použil bych pufrovaný přístup namísto přímého řízení reproduktorů, takže vaše emulace může prasknout čas provedení namísto správného provedení na úrovni MC (což stejně dělám, ale pochybuji, že by to studenti v daném čase dokázali).

  4. Video

    Toto je také závislé na platformě. .. a měli byste použít API, které vaši studenti znají. Dokonce i trasování paprsku je relativně snadné implementovat pomocí jednoduché bitmapy … Na počítačích, jako je ZX, má pořadí Scanline zvláštní význam a může být pro nováčky kodérů velmi rušivé, takže je lepší použít překladové LUT tabulky převádějící mezi adresou a y souřadnicí tam a zpět.

    Většina starších platforem používala obnovovací frekvenci 50 Hz / 60 Hz a relativně malé rozlišení, takže v dnešní době by pro ni počítače i při nedostatečně optimalizované emulaci měly být dostatečně rychlé. Pokud ne Přeskakování rámců je také možnost …

  5. další HW a periferní zařízení

    Absolutní minimum je paměť RAM / ROM a klávesnice. Paměť je obvykle velmi snadná, stačí statické pole a nebo nějaké přepínání stránek … Klávesnici lze emulovat nastavením I / O podle stisknutých kláves. I / O může být také mapována paměť na nějaké pole, stejně jako paměť. Trapping ISR rutina je také možnost, ale díky níž je klávesnice nepoužitelná pro vlastní obsluhu kláves.

    Neobtěžoval bych se s periferními zařízeními FDC, AY atd., Protože emulátor by měl být udržován tak jednoduchý, jak je to možné. Pokud ale máte štěstí, mohou se objevit někteří studenti, kteří budou s tímto projektem mnohem lepší než ostatní. Pro ty, kterým můžete navrhnout implementovat vzrušující funkce jako FDC, DMA, dokonce i skutečný zvuk zvukové karty (pro skutečné pásky nebo zvukové přehrávače), který umožňuje mnoho pěkných funkcí, například:

  6. Soubory

    Chtěl bych použít formáty souborů Z80 / SNA na start. Používání TAP / TZX je hezké, ale od začátku by byl emulátor docela chybný, proto načítání nemusí fungovat správně, takže používání a ladění bude velmi náročné.

  7. ROM

    toto je nejproblematičtější část, protože mnoho ROM platformy není stále zdarma a jejich extrahováním / stažením / použitím emulace můžete riskovat právní problémy.

    Z některých komentářů zde vypadá, že ROMy ZX jsou nyní veřejnou doménou … a existují také komentované ROM pri Díky tomu je mnohem snazší ladit první kroky emulátoru (když ještě nic nefunguje).

    Měli byste však vždy zvážit Emulace a právní záležitosti , zejména pokud budou emulátory umístěny někde na internetu.

Zde některé související QA odkazy:

Odpověď

Hledáte systém, který nebyl příliš emulován? Navrhuji zůstat v 8bitových počítačích (nebo dříve jednoduchých 16/32 bitových), ZX Spectrum 48k je takový relativně jednoduchý systém – velmi dobře zdokumentovaný, bez skřítků, bez zvukového čipu, ne RAM banky, jednoduché I / O, si dokonalá grafika (i když s podivným rozložením), není nutná dokonalá emulace cyklu, dobře známý CPU, snadná manipulace s kazetami (ještě snadnější by to bylo díky ROM trapům). Existuje spousta her, mnoho z nich s tolerantní licencí.

Nevýhoda: existuje enormní množství dostupných emulátorů, mnoho z nich je retro kategorie a mnoho se zdrojovým kódem k dispozici, takže nebezpečí podvádění a kopírování jiného kódu je vysoké.

A samozřejmě by práce na emulátoru dříve neemulovaného systému poskytla další výhodu pocitu úspěchu.

Komentáře

  • Měl jsem stejný instinkt, ale rozšířil bych se tím, že navrhnu, že SNA a Z80 a dostatečně dobře definované formáty snímků, které potřebujete ‚ S emulací pásky se dokonce nemusíte bát. A buďme ‚ s upřímní, TZX je v tomto okamžiku trochu miasma.
  • Věřím, že Spectrum ROM je nyní ve veřejné doméně, což může pomoci (nebo věci zjednodušit)
  • ZX Spectrum je skvělým příkladem jednoduchého hardwaru, ale také jedním z poměrně složitých programování počítání cyklů (Racing the Beam), díky nimž získáte použitelné herní efekty.
  • @ Tommy Ach, nikdy bych nenavrhoval ZX80 / 81 ze stejného důvodu. A i když to není opravdový fanoušek spektra, viděl jsem pro něj nějaký dobrý časově závislý kód. Většina manipulací s obrazovkou prominetu po zobrazení této části, ale před jejím spuštěním jednou. Je to ‚ velmi jednoduchý problém nalezený na mnoha systémech. Žádný velký problém, ale záleží na načasování. Například jednoduchá schémata emulace, která pouze omezují rychlost na úrovni rámce, způsobí kecy na rychlejších hostitelích emulace … a tak dále.
  • @Stormcloud Spectrum ROM není ve veřejné doméně, ačkoli povolení bylo udělen k jeho distribuci pro použití s emulátory. ROMy ZX80 a ZX81 byly vydány pod licencí GPL.

Odpověď

Mohu navrhnout podívat se na nějaké rané arkádové hry? Konkrétně tyto dvě platformy 8080 / Z80:

  • Midway 8080 – vyvinut v roce 1975 a je v moci Space Invaders . Používá 256x224x1 bitovou vyrovnávací paměť černobílého rámečku v RAM.

  • VIC Dual – Sega / Gremlin Platforma navržená v roce 1977 – nejznámější hrou je karneval . Video má pole 32×28 znaků 8×8 (vše v RAM) a může podporovat jednoduchou hru barevná paleta namapovaná na PROM.

Emulace Z80 se velmi snadno emulují, jakmile funguje emulace Z80. Neexistují žádné vtipné triky pro skenování ani divné stavy čekání CPU. Přehrávač ovládací prvky jsou k dispozici prostřednictvím bitmapových I / O portů.

S těmito platformami můžete hrát interaktivně na http://8bitworkshop.com/ (Úplné znění: provozuji tento web a jsem autorem knih, které odkazují na tento web a popisují tyto platformy)

Apple] [je také dobrou volbou pro platformu založenou na 6502, i když je video subsystém komplikovanější než ve dvou arkádových platformách.

Komentáře

  • Na co to ‚ stojí za to, myslím si, že Space Invaders je inspirovaný návrh. Pokud to paměť slouží ‚ je to jen 8080 s 1bpp bitmapovou obrazovkou, některé porty IO pro ovládací prvky, žádný pokus o závodění s rastrem, zvuk, který má pouze formu “ spouštět šum X nyní „, velmi uvolněné požadavky na přesnost a vytváří hru, kterou se stále občas snaží prodat. Je to ‚ pouze problém legality, který by mohl dát pauzu, i když jsem vždy kademický výjimka fuzzy ‚ fuzzy.
  • To ‚ je celkem v pořádku, ‚ je také externí čip, který pomáhá s 8080 ‚ chybí řadicí páka. ‚ Nemělo by dojít k žádnému problému zákonnosti emulujícího hardware (‚ neexistuje BIOS ani jiný kód chráněný autorskými právy) a ‚ je docela snadné napsat vlastní hru, např .: 8bitworkshop.com/v3.2.0/?platform=mw8080bw& file = game2.c

odpověď

PET nebo TRS80 mohou fungovat studna. Jednoduchý hardware s textem na obrazovce, takže je lze emulovat přímým textovým výstupem, který zpočátku přidává kód pro své liché znakové sady a je nepravděpodobné, že by obsahoval hodně ve způsobu přesného počítání cyklu.

Bonusový nápad, pokud jít na PET přidání podpory C64 by dalo grafiku.

Model 6502 je pravděpodobně jednodušší emulovat.

Konečným řešením by mohla být Ohio Scientific Superboard II nebo v jeho britské inkarnaci UK101, protože si nemyslím, že má přeprogramovatelný video hardware.

Komentáře

  • Ano, všechny tři (PET, TRS, Superboard (úplně jsem zapomněl) o tom druhém)) jsou skvělé jednoduché stroje a skvělé pro emulace. Ale také chybí dobrý výběr her připravených k použití. Nemluvě o barvě a podobně, jaké dnes mohou lidé očekávat.

Odpověď

Digitální PDP-8 je velmi jednoduchá architektura, pro kterou lze snadno napsat emulátor. Mezi tyto důvody patří:

  • Pouze 8 základních pokynů
  • K emulaci není k dispozici žádné video rozhraní atd., Pouze I / O terminálu
  • Není třeba přesnost cyklu, samotná řada strojů sama o sobě nezaručovala stejné chování napříč různými implementacemi.
  • Může začít s jednoduchým nastavením (např. stroj 4Kword se spuštěním FOCAL-69) a postupně emulátor více složité (např. stroj s 32Kwordem s rozšířenou aritmetikou, běžící OS / 8 z disku RK05)
  • Mnoho příruček dostupných online
  • Diagnostika MAINDEC a jejich pokyny jsou k dispozici online, což může použít k otestování, že emulace funguje správně

To nemusí pokrýt všechny vaše požadavky, např. I / O mapované v paměti, ale určitě to zahrnuje věci jako dekódování instrukcí a režimy adresování. dokumentace jde přímo na základní hardwarovou úroveň, která by mohla být vhodná pro kurz EE.

Komentáře

  • Zajímavým bodem je, že většina výše zmíněných systémů má buď procesory Z80, nebo 6502, které obě z hlediska podporovaných režimů adresování trochu chybí. Je-li pokrytí režimů adresování důležité, má PDP-8 mnohem lepší výběr z nich.
  • Pro hru “ aspektu otázky se domnívám, že Adventure je stále udržováno / vzkříšeno pro architektury PDP (ale zkontrolujte, že – možná se mýlím).
  • @TobySpeight You máte pravdu, je zachován nebo vzkříšen, ale pro PDP-10 , což je zcela nekompatibilní s PDP-8.

Odpověď

Možnost ZX Spectrum již byla vysvětlena: její silnou stránkou je naprosto zjednodušující hardware IO a skutečnost, že mnoho stávajících her NEVYŽADUJE přesné, cyklické -korektní emulace všech potíží s jedinou výjimkou zvuku (nic blízkého ke korekci zvuku bez cyklicky přesné emulace CPU a korektní převzorkování středního 1bitového zvukového proudu produkovaného CPU).

Jakákoli jiná možnost herního hardwaru, jako je NES, G enesis a všechny podobné stroje na bázi sprite samozřejmě nejsou volbou, protože je potřeba hodně času naučit se složitý hardware, vyvinout způsoby jeho emulace, vyřešit nedostatky emulace atd. Například i „jednoduchý“ Super Mario hra na NES nebude fungovat, pokud nebude bit emulace sprite v PPU správně emulován.

Zbývající možnosti IMHO jsou následující:

  1. IBM PC založené na časném textovém režimu
  2. kterýkoli ze stávajících strojů CP / M
  3. (nezahrnuje žádné „velké“ stroje před érou „mikro“)

klíčový bod zde je zobrazení v textovém režimu, které není tak těžké emulovat a mnohem jednodušší se na hostitelském počítači zobrazuje (i když není třeba zobrazovat pixelovou grafiku, pracovat s okenním systémem / SDL / atd.!).

Je však stále zapotřebí určité vyšetřování, aby bylo možné shromáždit správné programy, se kterými lze pracovat, včetně her. V CP / M existují některé textové hry a stejně by měly být i pro IBM PC.

Komentáře

  • S potenciální výhodou Stroj CP / M je tím, že ‚ musí být alespoň jeden, pro který bude stačit pouze emulace 8080?
  • Pěkné, ale opět existují není pro IBM v textovém režimu spousta her, že?
  • @Raffzahn – musí být pouze jeden .
  • @Jules Hehehe … jo správně. Ale pak ‚ řeknu, že to zvládne minimálně 8080

Odpověď

Systém s nejmenším množstvím vlastních čipů by pravděpodobně byl čistším cílem emulace.

Apple II je jedním z nejjednodušších systémů (bez LSI kromě CPU 6502), pro které bylo napsáno obrovské množství (snadno dostupných) her.

Bylo také vydáno množství (historických) knih a článků o systémové architektuře Apple II a procesoru 6502. Systém tedy byl docela dobře zdokumentován několika (citovatelnými) zdroji.

Emulátory pro Apple II mohou být řádově 10 tis. Řádků kódu C, možná o něco méně, což by se mohlo hodit do vašeho časový rámec kurzu.

Komentáře

  • CPU může být jednoduché, ale emulace periferií (displej atd.) by pravděpodobně stále byla značným úkolem

Odpověď

Za předpokladu, že se jedná o jakýkoli příspěvek, jsou to moje přímé poznámky ke strojům, pro které jsem napsal emulátory, v přibližném chronologickém pořadí při spuštění, doufejme, že nabídneme nějakou barvu formátů souborů atd.:

Atari 2600

Rozlišujícím rysem Atari 2600 je synergie mezi procesorem a grafickým výstupem; hry jsou implementovány funkce v reálném čase, které dodávají grafické komponenty do video výstupu při běhu rastru. Takže si myslím, že je to špatná volba pro uvedený účel – skutečná tvrdá práce při psaní emulátoru 2600 je načasování a souhra mimo mikroprocesor.

Apple II

Relativně jednoduchý hardware, ale velmi jemný, s několika grafickými režimy, a musíte se orientovat na výuku videa NTSC, abyste mohli dekódovat jeho barevný výstup. Emulace disku II je také do značné míry nutností, ale to je samo o sobě úkol, protože nejběžnější formáty souborů očekávají, že poskytnete kodér Apple GCR.

ZX80 / 81

Centrální domýšlivost je pro uvedený účel také pravděpodobně příliš složitá a znovu využívá obnovovací cyklus CPU a podmnožinu načítání instrukcí za účelem skenování videa. Pokud jste se rozhodli tento mechanismus znovu neimplementovat jako originál, skončíte pouze s výchozím textovým režimem ROM.

Commodore Vic-20

Toto je prostý bitmapový stroj s jednoduchým procesorem v 6502 a slušným množstvím her, z nichž některé byly dodávány na kazetě, což vás zbavuje nutnosti emulovat páskovou nebo diskovou jednotku. Jedinou maskou je jeho 6522; jedná se o kombinovaný časovač / posunovací / vstupní / výstupní čipy s celou řadou zvláštností. Ale čistou výhodou Vic-20 je, že se spustí až na výzvu BASIC bez fungování 6522s a BASIC sám bude fungovat pouze s časovači implementovaných 6522 , a to i nepřesně.

Jeho krátká doba vedoucí pozice na trhu před příchodem C64 také omezuje počet titulů, které pokročilé využití hardwaru využívají – existují současné příklady rastrových závodů, jako jsou tituly Imagic , ale jsou v menšině.

Formáty souborů, ve kterých jsou data uchována, jsou nepořádek , ale omezit se na podporu kazet a dávat pozor, abyste používali pouze ty tituly, které byly dodány na kazetě, by mělo tomuto problému zabránit.

ZX Spectrum

Zahrnuto jinde; Myslím, že dobrá volba. Zvláště pokud se držíte formátů souborů snímků.

Oric 1 / Atmos

Pokryté jinde; slušná volba, ale je tu další z těch otravných 6522. Většina her je k dispozici na pásku, to všechno budete muset podporovat.

Acorn Electron

Bitmapped, 6502 plus relativně jednoduchá externí logika, ale šest různých grafických režimů a načasování by bylo obtížné – náklady na každý cyklus jsou funkcí oblasti, ke které se přistupuje (ROM versus RAM), grafického režimu (40-sloupcový versus 80-sloupcový režimy) a případně aktuální stav grafického výstupu (80sloupcové režimy blokují přístup RAM během oblasti obrazových bodů; 40sloupcové režimy nejsou). Můžete jej ale modelovat jako 1MHz stroj pro většinu her a většinou se zbavit verze grafického výstupu zaměřená na řádky.

Na ROM je k dispozici tenký počet her, ale naštěstí páskový hardware většinou umožní velmi nízkou emulaci: je to podobné, které vyvolává přerušit po obdržení bajtu, jen dva tituly, které mě napadnou dělat hlubší introspekci.

Amstrad CPC

Pravděpodobně jeden vyhnout se pro uvedený účel – má 6845 CRTC, což umožňuje velmi konfigurovatelný grafický výstup, a proto spoustu titulů, které závodí s rastrem. Využití disku bylo také poměrně všudypřítomné, ale jeho řadič disku 8272 je ve srovnání s WD1770 zcela novou úrovní bolestí hlavy, kterou často uvidíte jinde.

MSX a / nebo ColecoVision / SG1000

Různé zvukové čipy, stejný procesor a video.Vlastně si myslím, že můžete dost daleko ignorovat načasování souhry, protože video čip udržuje svou vlastní RAM na délku paže. Ale jsou to dlaždice a skřítci a čtyři různé grafické režimy, což je pravděpodobně příliš podstatný úkol pro kurz mikroprocesoru.

Hlavní systém

Technicky vylepšený SG1000, což je vše, co stroj dělá, plus další grafický režim, ale další grafický režim je mnohem lepší než ostatní, že pouze jeden titul používá cokoli jiný. Ve skutečnosti to tedy poněkud zjednodušuje věci, pokud jste šťastní ve sféře převážně ignorování načasování.

Stále ale mluvíte o faktorování priorit sprite, kontrole kolizí po pixelech atd. Pravděpodobně příliš mnoho .

Poznámka pod čarou: podvádění s přístupem na pásku

U řady výše zmíněných domácích počítačů můžete vlastně přeskočit emulaci pásky pro cokoli, co je zakódováno ve výchozím formátu ROM, pouhým vložením vhodnou past do systémové ROM a zařazování ze zdrojového souboru. Mnoho, ale ne všechny tituly spoléhají zcela na vestavěnou ROM pro vstupy a výstupy pásky, takže lze načíst mnoho titulů bez skutečného pokusu o hardware.

V každém případě se jedná o bodge-job hack, ale to „udělám, pokud pro vás tato stránka emulace není důležitá – raději ji prostě odstraníte z rovnice a ignorujete, co nefunguje.

Konkrétně:

Vic-20:

  • pokud se počítadlo programu dostane na 0xf7b2, zkopírujte další záhlaví pásky na místo označené b3: b2, vynulovat 0x90 a 0x93 a pokračovat od 0xf7b5 (jak se vyhnete JSR);
  • trap 0xf90b, zkontrolujte X = 0xe, pokud ano, pak získat další tělo dat pásky a zapisovat do emulované paměti z c2: c1, ale ne dále než af: ae bez ohledu na velikost těla, pak nastavit bit 6 na 0x90, vymazat příznaky přenosu a přerušení a pokračovat od 0xfccf.

Oric:

U ROM 1.0 pasti PC na adrese 0xe630. U verze 1.1 sledujte adresu 0xe6c9.

Po zachycení načtěte A další bajt z pásky a nastavte nulový příznak podle jeho hodnoty.

Poté RTS.

Na původní ROM je také příznak 0x67 nebo 0x24d, který rozlišuje mezi rychlým a pomalým kódováním pásky na stroji, ale obvyklý formát souboru pásky má pouze dekódované bajty, takže pro rychlý a špinavá emulace s tím si nedělejte starosti.

Electron:

Nainstalovat NOP na 0xf4e5, 0xf6de, 0xf6fa a 0xfa51 k deaktivaci páskových větví. OS se nyní pokusí načíst pásková data, jako by to byla na sériové ROM.

Cat the PC at 0xf0a8 and check that the X registr se rovná 14 a hodnota na adrese 0x247 je nula. Pak budete vědět, že ROM se pokouší načíst další bajt z pásky.

Vložte další bajt do Y, nastavte A na 0 a RTS.

Primární formát souboru pásky vám většinou umožňuje zařazovat bajty přímo ze souboru (po nějakém triviálním chun navi a přes ZLib nebo jiný dekompresor GZ, i když stačí předem rozbalit).

ZX Spectrum:

(Toto je přepsáno z velmi starých poznámek; to by stálo za to potvrdit proti demontáži ROM)

Trapujte počítač, který dosáhne 0x056c v 48kb ROM. Chyťte další blok z pásky (pokud použijete soubor TAP, dostanete jej přímo; hádám, že byste se neměli snažit podporovat TZX v tomto druhu projektu).

Pokud jeho délka je menší než hodnota v DE, resetuje přenos a návrat.

Porovnejte první bajt bloku s hodnotou B. Pokud se neshodují, resetujte přenos a návrat.

Jinak zařadíte první DE bajty, na které jste se dostali na adresu, na kterou ukazuje IX, a nastavíte dolní bit C a nastavíte carry.

Pak buď přímo proveďte RET, nebo prostě přeskočte PC dopředu na 0x05e2, což je RET, který normálně ukončí načítání pásky.

128kb stroje přecházejí do 48kb ROM pro načítání pásky, takže stejný hack platí s výhradou kontroly toho, co je na stránce.

Komentáře

  • Pěkný zápis. Souhlasím se vším, co bylo řečeno – možná se dvěma malými doplňky pro Apple II. I když je pravda, že grafický hardware potřebuje trochu přemýšlet, jeho jemnost lze v emulaci zcela ignorovat, stejně jako ekvivalence určitých bitových vzorů musí být přeložena do barvy – pokud vůbec, jako A2, kde poměrně často běží s monochromatickou obrazovkou, s níž by ji bylo možné emulovat jako prostý bitmapu bez dalších podrobností. Zadruhé, pokud jsou Gemy, která se mají hrát, založeny na ProDOS, není nutná žádná podrobná emulace Disk II, protože funguje s odlišným hardwarem.
  • @Raffzahn, jaká by byla nejjednodušší forma vyhledávací tabulky barevný výstup?Uvažuji zpět z NTSC a zacházím se vším, co je rozložitelné na dvojnásobné vysoké rozlišení, si dokážu představit tabulku indexovanou tříbitovým čítačem představujícím fázi plus pětibitový posuvný registr video výstupu, aby získal polovinu barevného cyklu se středovým bodem. Takže tabulka se 256 položkami. Ale to je

velmi naivní uvažování; daří se lidem lépe?

  • @ Tommy: Jednoduchým přístupem je jednoduše použít opakující se čtyřbarevnou sekvenci (myslím (červená, tmavě žlutá, zelená, modrá) pro pixely s dvojitým vysokým rozlišením a rozmazání obrazovku trochu. To nakonec na věcech zanechá okraje barev, ale skutečné monitory to obvykle dělaly. Protože Apple]

    Odpověď

    Udělal jsem dva a trochu od nulové emulace pro Mac pomocí Swift. Toto jsou moje osobní pozorování na základě mých zkušeností.

    Žádná z mých emulací není úplně přesná, což vede k několika problémům.

    Commodore PET

    Toto byla první emulace, kterou jsem napsal. Potřebujete minimálně emulaci 6502, emulaci PIA, emulaci VIA a emulaci videa.

    6502 je opravdu jednoduchý a na začátek vynikající procesor. Je také docela dobře zdokumentováno. Web Visual6502 byl neocenitelný pro vypracování přesného chování instrukcí, kde byla dokumentace nejednoznačná. Kromě toho jsem napsal emulaci mírně pozdějšího procesoru (zapomněl jsem, který z nich), který vyplňoval některé mezery v sadě instrukcí. Díky tomu bylo psaní testovacího kódu 6502 mnohem jednodušší (dokonce i PHX a PHY některé věci zjednodušit. na druhou stranu, jakýkoli software, který používal „nezdokumentované pokyny“ původní 6502, se při mé emulaci rozbije.

    PIA a VIA jsou emulace relativně jednoduchých IO čipů. Ovladač videa může být stejně jednoduchý jako čtení obrazovky RAM, překlad do ASCII nebo blízká aproximace a vykreslení výsledného textu do okna. Nakonec jsem vytvořil sadu bitmap, které byly přesnými kopiemi znakové sady PET.

    Můj hlavní zdroj pro PET bylo „Programování PET / CBM“ od Raeta Westa. Mám originální kopii, ale existují PDF ver online. Důležitá je také dostupnost ZÁKLADNÍCH a KERNÁLNÍCH ROMŮ.Nechcete přepisovat operační systém.

    Emulace páskové jednotky byla PITA. Verze mého softwaru byla méně spolehlivá než ta skutečná, o čemž majitelé PET vědí, že něco říká. Hlavní Problém, myslel jsem si, spočívá v tom, že se spoléhá na časovací impulsy s přesným cyklem, a přestože můj emulátor počítá hodinové impulsy, nevyvolával nutně přerušení časovače přesně ve správný čas. emulace duálních diskových jednotek. To vyžadovalo také robustní emulaci IEEE 488, ale emulace diskové jednotky byla docela snadná. Není to emulace hardwaru, pouze bere příkazy odeslané PET a provádí je pomocí plochých souborů na pevném disku počítače Mac.

    Nakonec jsem napsal nějaký kód, který by zastavil emulátor, přímo vložte programový soubor do paměti a poté znovu spusťte emulátor. Ukázalo se, že je to mnohem pohodlnější než emulovat disky nebo pásky, takže jsem na nich přestal pracovat.

    Můj emulátor funguje dostatečně dobře s většinou kódu PET. Bohužel nastal problém s PET Space Invaders – pravděpodobně způsobený kódem klávesnice – takže nerozpoznává stisknutí kláves správně. Také jsem se nepokusil řešit generování zvuku.

    Sinclair ZX Spectrum

    V některých ohledech je to ještě jednodušší než u PET. Musíte napsat emulátor Z80, který je složitější než 6502, ale existuje testovací sada CPM, kterou můžete použít k ověření mnoha svých funkcí, stačí emulovat podprogram výstupu znaků CPM, aby to fungovalo.

    Jediné další čipy, které potřebujete emulovat, jsou ULA a nemusíte toho moc dělat, pokud jste připraveni vzdát se páskové jednotky. Také generátor videa, který je trochu divný ve způsobu, jakým adresuje RAM obrazovky.

    Na Spectru je opravdu hezké to, že obrazovka je vždy v bitmapovém režimu a OS vytváří znaky přímo psaní vzorů pro zápis pixelů. Nemusíte si dělat starosti se znakovou sadou, protože je magicky přítomná, když spouštíte emulátor s načtenými Spectrum ROM.

    Dostal jsem Spectrum do bodu, kdy jsem mohl načíst a spustit Manic Miner a bylo to hratelné, i když bez zvuku. Práce od začátku do konce trvala asi tři měsíce, možná osm hodin týdně.

    Commodore 64

    Toto je nedokončená práce. Je zřejmé, že už jsem měl 6502, který jsem upravil tak, aby mi poskytl IO port 6510. Zatím to dělá banka Při správném přepínání jsou implementovány některé funkce CIA a je emulována dostatečná funkčnost VIC II, aby mi poskytl ekvivalent PET, tj. funguje normální textový režim. Funguje také paměť okrajů a barev znaků.

    mít složitější grafické režimy pro emulaci a skřítky a měl bych být schopen něco udělat se zvukem, protože to je samostatný čip, nejsem závislý na přesném načasování CPU.

    TL; DR

    Nejjednodušší emulace, kromě CPU, byla spektrum. Pravděpodobně s tím začnu, i když starý počítač založený na CP / M 8080 může být ještě jednodušší, pokud se chopíte CP / M.

    Další pozorování

    Pravděpodobně budete potřebovat pro svou cílovou platformu dobrého cross assemblera. Získá to velmi zdlouhavé ruční sestavování kódu pro testy jednotek.

    Také bude užitečný demontážní program. Nemusel jsem demontovat ZÁKLADNÍ ROMy Commodore, protože demontáže jsou volně dostupné na internetu. Ale když jsem se pokoušel přimět Space Invaders k práci, zpočátku to nefungovalo a disassembler byl neocenitelný pro řešení problémů.

    Z tohoto důvodu je sada cc65 silným důvodem pro začátek stroje založeného na 6502. Má dobrého asemblera a vynikajícího disasemblera. Situace Z80 nebyla tak dobrá, ale nakonec jsem našel rozumného asemblera zvaného z80asm. Myslím, že jsem to musel zkompilovat ze zdroje.

    Také budete potřebovat dobrou spolehlivou dokumentaci. Dokumentace 6502 je online znovu prakticky bezkonkurenční. Dokumenty jsou pro Spectrum méně připravené, ale je to tak jednoduché, že se můžete dostat pryč s docela chatrnou emulací ULA.

    Odpověď

    Spolu se všemi dalšími skvělými návrhy, jako jako alternativu k Z-80 a CP / M můžete zvážit generický Motorola 6809 systém pro spuštění FLEX nebo případně OS-9 , oba inspirované Unixem. Jako systém založený na rozhraní příkazového řádku není třeba získávat přesné načasování.

    Také pokud vytváříte simulátor, je to spíše jako stavět hardware; portování operačního systému bylo skutečný úkol – který jsem udělal v 80. letech – na rozdíl od úkolu klonovat něco pro vzdělávání.“Spustí operační systém a spustí programy?“ je velmi realistický cíl.

    Jelikož běží na přenosném operačním systému, který běží na hardwaru mnoha různých výrobců, znamená to, že studenti nemají jen jeden způsob, jak to udělat. Student A může stavět zobrazení bitové mapy; Student B může vytvořit UART a mít sériové rozhraní. Někteří se mohou pokusit o správné fungování každého cyklu; Někteří se mohou pokusit jen o to, aby byla každá operace správná. Proto místo toho, abyste se jednoduše snažili něco kopírovat, aniž byste nutně rozuměli originálu konstrukčních omezení se studenti zabývají správnou inženýrskou otázkou: jaký je dobrý způsob, jak toho dosáhnout?

    CPU

    • Model 6809 byl v té době jedinečný v tom, že bylo možné psát zcela nezávislý na poloze kód, který by běžel stejně všude, kde byl v paměti.
    • Sada instrukcí byla téměř úplně ortogonální
    • Jako 8bitový procesor se 16bitovou adresovou sběrnicí je to docela jednoduché
    • Mechanismus výjimek a efektivní – manipulace s adresami se velmi podobá moderním procesorům
    • Jako design společnosti Motorola měla spíše IO namapované v paměti než speciální instrukce IO
    • Jednodušší než Z-80 (mnohem méně instrukcí ) nebo 6502 (méně zvláštních případů)
    • Materiál prostřednictvím https://en.wikipedia.org/wiki/Motorola_6809

    FLEX byl navržen jako systém inspirovaný Unixem pro 8bitové procesory

    • Byl speciálně navržen pro přenositelnost a jeho spuštění vyžadovalo implementaci velmi malého počtu systémových volání – myslím, že jen čtení / zápis znaků, čtení / zápis z disketového bloku a nějaký boot (čtení sektoru a skok k tomu).
    • Hardwarově-agnostický pro tyto základní funkce, díky čemuž je simulace mnohem jednodušší
    • Je vzrušující napsat jen několik funkcí a spustit celý operační systém
    • Žádná grafika, která by vás trápila (což je podle vašeho názoru pozitivní nebo negativní)
    • Hodně dostupný materiál, f ind přes https://en.wikipedia.org/wiki/FLEX_(operating_system)

    OS-9 podobný záměr

    • Více unixový než FLEX, o něco těžší port, pokud si pamatuji
    • Později přeneseno na 68 000
    • Hodně dostupného materiálu, najít pomocí https://en.wikipedia.org/wiki/OS-9

  • Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *