Lanno prossimo insegnerò un corso di microprocessori di 2 semestri a studenti universitari del terzo anno di EE. Al fine di iscriversi al corso, gli studenti devono aver completato le lezioni di programmazione e sistemi digitali.

Per motivare gli studenti con unapplicazione nel mondo reale dei concetti insegnati in classe, sto valutando la possibilità di svolgere un compito gli studenti con la creazione da zero di un emulatore per un vecchio sistema, come progetto di gruppo da completare fino alla fine del corso (che è, come sottolineato, lungo 2 semestri).

Sto provando scegliere un buon sistema di destinazione per questo progetto, con lobiettivo principale che dovrebbe essere abbastanza semplice da emulare. Meno periferiche da emulare, meglio è. Meno stranezze e bug che devono essere replicati, meglio è. Sto cercando di esporre gli studenti ai concetti importanti di linguaggio assembly, codifica delle istruzioni, modalità di indirizzamento, registri CPU, registri hardware mappati in memoria, ecc. E non necessariamente i trucchi necessari per rendere gli sprite abbastanza velocemente da realizzare un videogioco interessante con la tecnologia dei semiconduttori che era disponibile negli anni 80 a un costo accettabile. Capisco che fosse necessario in quel momento; Sto solo cercando di trovare un sistema che non abusasse troppo di questi trucchi. Idealmente il sistema in questione non dovrebbe “t richiedono unemulazione precisa al ciclo o trucchi come inseguire la linea di scansione.

Un secondo requisito riguarda le prestazioni. Gli studenti di certo non hanno familiarità con le tecniche di ottimizzazione del software, quindi provare a emulare anche la prima Playstation o il Nintendo 64 probabilmente incorrerà in problemi di prestazioni (forse anche SNES e Genesis). A questo punto gli studenti devono solo preoccuparsi implementare lemulatore correttamente, non in modo efficiente. Lemulazione della CPU sarà certamente implementata da un interprete, non da un traduttore / ricompilatore.

Infine, non credo che gli studenti troverebbero interessante lemulatore se, diciamo, mostrava appena i valori dei registri dopo lesecuzione di un programma giocattolo (sebbene ciò renderebbe il progetto molto più semplice). Vorrei scegliere un sistema per il quale sono stati creati i giochi, anche se detto sistema non era una console per videogiochi dedicata. Penso che essere in grado di eseguire giochi sullemulatore sarebbe molto motivante per gli studenti.

Ad esempio, in questo momento sto guardando il NES , ma sembra ancora un po complicato, specialmente la PPU. Esistono opzioni più semplici?

Commenti

  • Domanda interessante. Potrebbe essere importante aggiungere una richiesta di risposte per evitare i soliti litigi sul sistema migliore / cpu / vdu / ecc. e concentrarsi sulla parte didattica.
  • Cè unapparente contraddizione nella domanda. da un punto lautore vuole concentrarsi sullemulazione della CPU, dallaltro vuole che anche le immagini e il suono vengano emessi dallintero sistema emulato. Mentre la richiesta di questultimo è comprensibile, porta allaltrettanto duro lavoro su emulare le periferiche, mostrare immagini e riprodurre attività audio.
  • Possibilmente risorsa utile supponendo che finisca per essere una macchina Z80 anziché un 6502: z80.info/decoding.htm sulla decodifica algoritmica delle istruzioni Z80 (soggetto a un sacco di casi speciali, ma è così). Richiedere che un emulatore decodifichi effettivamente algoritmicamente anziché tramite ricerca limiterebbe la capacità degli studenti di copiare e incollare, oltre ad essere rilevante per un corso di microprocessori?
  • Potrebbe non essere quello che stai cercando, ma forse piuttosto che scrivere un emulatore (che io ‘ presumo che funzionerà sul loro PC), potrebbero essere in grado di dimostrare la stessa conoscenza concettuale lavorando con lhardware reale. Chiedi loro di procurarti una scheda di sviluppo basata su ARM Cortex M4, imparare a lavorare con il bare metal.
  • forse TI-83 …?

Risposta

Sto inserendo CHIP-8 in avanti.

Questo sistema è essenzialmente una macchina virtuale sviluppata per qualche motivo. Ci sono giochi scritti per il CHIP-8. Ha alcuni codici operativi, uno stack, un paio di timer e un display bitmap a bassa risoluzione, ma è abbastanza semplice che i primi emulatori rientrano in pochi kilobyte sui primi computer a 8 bit.

Ci sono più di poche implementazioni di riferimento che potresti usare.

Ci sono giochi e così via che sono pubblici dominio già, ad esempio qui in modo da non “t fornire i propri giochi.

Commenti

  • Ayy for Chip 8. È ‘ facile da trovare implementazioni in molte lingue e larchitettura è semplice.
  • CHIP-8 è un ottimo idea per unintroduzione a emu lazione per la sua semplicità.Avendo già scritto un emulatore NES, posso dirti che scrivere la CPU è stato estremamente lungo e noioso – e il 6502 è semplice per quanto riguarda le CPU. Al contrario, CHIP-8 ha solo 35 istruzioni molto semplici. Inoltre, molti sistemi facevano affidamento su precisi comportamenti temporali tra la CPU e il resto dellhardware, mentre CHIP-8 non ha tale requisito.
  • I commenti non sono per discussioni estese; questa conversazione è stata spostata nella chat .
  • Sono ‘ un programmatore esperto, ma Non ho mai scritto un emulatore. Dopo questa risposta ho pensato: ” Ehi, questo chip8 sembra abbastanza facile, ‘ ci passerò forse qualche ora “. Tre settimane dopo ‘ sono ancora qui a cercare di capire perché i programmi continuano a saltare fuori dallo spazio di memoria. Molto divertente, anche molto ” che diavolo “.
  • Mi chiedo se ce ne sarebbe stato impedimento alla rimozione dellattesa vblank dalla routine plot-sprite e allaggiunta di unistruzione vblank-wait esplicita? Il CDP1802 non è ‘ un demone della velocità, ma quasi certamente potrebbe disegnare più di uno sprite per fotogramma in assenza dellattesa vblank.

Risposta

Oh. Bella domanda. Cercherò di dare alcuni suggerimenti, ma considererei il problema più ampio per trovare una risposta qui invece di una conversazione più significativa. Tuttavia:


[…] incaricare gli studenti di creare un emulatore per un vecchio sistema

Molto interessante.

da zero,

Se questo dovrebbe essere davvero da zero e nel software, non lo sarebbe davvero consideralo un compito adatto alle matricole in un tempo così limitato. A meno che non ci sia un modo per eliminare i requisiti in tempo reale (che sono ancora più rilevanti per i giochi), preferirei stare attento.

In effetti, Dato che si tratta di EE, perché non fare hardware reale? È ancora facile ottenere (alcune) CPU classiche e dispositivi correlati. Combinato con un LCD moderno, lo sforzo hardware è abbastanza fattibile in poche settimane in grande dettaglio.

come progetto di gruppo da completare fino alla fine del la classe (che, come sottolineato, dura 2 semestri).

Quale potrebbe essere la condizione più rigida.

Sto cercando di scegliere un buon sistema di destinazione per questo progetto, con lobiettivo principale che dovrebbe essere abbastanza semplice da emulare. Meno periferiche da emulare, meglio è. meno stranezze e bug che devono essere replicati, meglio è.

Sembra un buon tentativo. E ancora più importante rimuove alcuni sistemi apparentemente semplici (come singleboarder) dallelenco, poiché si basano su una gestione complessa dei dispositivi I / O (come laccesso in tempo reale alle porte per guidare i segmenti LED in modo apparentemente continuo).

Sto cercando di esporre gli studenti ai concetti importanti di assemb linguaggio, codifica delle istruzioni, modalità di indirizzamento, registri della CPU, registri hardware mappati in memoria, ecc.

Qualcosa che può essere fatto con un hardware reale come così come unemulazione, non è vero?

Idealmente il sistema in questione non dovrebbe richiedere unemulazione accurata al ciclo o trucchi come inseguire la linea di scansione.

Insieme al requisito implicito di unuscita video, ciò richiede una semplice logica bitmap non accelerata.

Un secondo requisito riguarda le prestazioni. Gli studenti di certo non hanno familiarità con le tecniche di ottimizzazione del software, quindi provare a emulare anche la prima Playstation o il Nintendo 64 probabilmente incorrerà in problemi di prestazioni (forse anche SNES e Genesis).

Non temerei molto qui, dato che lhardware del PC è abbastanza veloce. I veri problemi qui non sono la velocità di emulazione, ma gli aspetti in tempo reale – sincronizzare le varie parti dellemulazione – che richiedono una progettazione software molto attenta e messa a punto. Non cera da aspettarselo qui. Piuttosto la parte “correre il raggio” che hai menzionato.

A questo punto gli studenti devono solo preoccuparsi di implementare lemulatore correttamente, non in modo efficiente. Lemulazione della CPU sarà certamente implementata da un interprete, non da un traduttore / ricompilatore.

Tuttavia, anche per i più primitivi, la sincronizzazione in tempo reale è necessaria per giocare un gioco. Almeno una sincronizzazione del ritracciamento dello schermo è un must, non almeno per accelerare la simulazione stessa.

La necessità intrinseca dei giochi di utilizzare effetti di temporizzazione – e la manipolazione sincronizzata dello schermo a un livello più fine rispetto ai frame – è qualcosa che renderà una sfida lesecuzione di qualsiasi gioco del mondo reale sullemulatore proposto.

Vorrei “scegliere un sistema per il quale sono stati creati i giochi, anche se detto sistema non era una console per videogiochi dedicata. Penso che essere in grado di eseguire giochi sullemulatore sarebbe molto motivante per gli studenti.

Sono assolutamente daccordo qui. Gran parte del successo dellesperimento e dei sistemi di apprendimento di Andre LaMothe “si basa sulla capacità principale di fare giochi.

Per esempio, in questo momento sto guardando il NES, ma sembra ancora un po complicato, specialmente il PPU. Esistono opzioni più semplici?

Diventa difficile poiché i requisiti di base sono in contraddizione tra loro. Solo le console / i computer di successo hanno una vasta selezione di giochi, ma anche questi hanno una struttura hardware più complessa che consente grandi giochi.

Controlliamo alcuni sistemi ben noti. Vorrei separarli in sistemi “semplici” e “complessi” lungo la complessità della loro logica video (* 1)

Sistemi semplici

Nella prima iterazione questi sono tutti sistemi senza un VDC / CRTC dedicato.

  • Atari VCS – alla fine il sistema definitivo da utilizzare per imparare lassemblatore, lavorare a un livello di base estremo senza interruzioni e non molto di cui occuparsi. “è lomonimo per il termine” racing the beam “.

    Detto questo, potrebbe ancora essere un sistema da cercare, poiché le parti dipendenti dal tempo sono ben definite e (rispetto a qualsiasi altro video) estremamente semplice e facile da emulare – tranne per il fatto che non è roba da matricole. Inoltre, è estremamente ben documentato su fonti disponibili generali.

  • Commodore PET – Un sistema piuttosto semplice, specialmente da quando lintera parte video può essere emulata in modo abbastanza astratto, tuttavia le VIA devono essere, almeno in parte, emulate. La cosa più importante contiene solo due sorgenti di temporizzazione (oltre allorologio).

    Un grande vantaggio per il PET (e i follow-up) è la buona documentazione (anche per la sua semplicità). Inoltre, sebbene sia dotato di un CRTC, quasi nessun gioco (o altro software) ha fatto uso di riprogrammarlo, rendendo possibile unemulazione semplice e incompleta (astratta).

    Sul retro, cè solo un numero piuttosto limitato di giochi e la maggior parte di essi sono scritti in BASIC, il che potrebbe richiedere alcune ricerche per trovare la quantità di astrazione rispetto ai dettagli nellemulazione.

  • Apple II – Ancora una volta, un sistema incredibile e ben documentato con molto software. In gran parte basato sullassemblea. Sebbene lhardware sia completamente documentato e costruito solo da TTL, il suo funzionamento non è molto semplice e poiché alcuni giochi si basano molto su stranezze e conteggio dei loop per un tempismo esatto, lemulazione potrebbe diventare molto più complicata di quanto si presume a prima vista. p>

    Un vantaggio per te potrebbe essere che lApple II era abbastanza popolare in Brasile (ben allora).

  • TRS-80 – Anche qui la logica del video è costruito da TTL ma molto più semplice che su Apple. Un altro I / O simile è abbastanza semplice. Il lato negativo è ancora una volta un numero piuttosto ridotto di giochi.

Finora i veri antichi, ma anche alcuni sistemi successivi possono essere classificati come semplici:

  • Spettro Sinclair – Anche se la logica offre alcuni trucchi, campane & fischia, è un design bitmap piastrellato in modo semplice. Finora, ci sono buone possibilità per unemulazione, tranne, come al solito, i giochi facevano molto affidamento sul tempismo, qualcosa che complica di nuovo lemulazione.

    Così come con lApple II, cerano parecchi cloni in Brasile .

  • Un caso simile può essere fatto per la famiglia ORIC

  • Atari ST – Potrebbe essere una sorpresa dal punto di oggi di vista, ma lAtari ST non disponeva di alcun hardware video sofisticato. Solo 3 risoluzioni grafiche e un CLUT a 9 bit per un massimo di 16 colori simultanei. Pochi punti di sincronizzazione e un unico timer. Inoltre una CPU più moderna e un chip audio dedicato. Sembra una partita fatta in paradiso, se, beh, se non fosse di nuovo per i programmatori di giochi. Anche qui, il software implicava unintera pletora di trucchi per creare giochi fantastici (* 2).

Una prima conclusione per i sistemi “semplici” è che mentre lhardware può essere meno complesso, il software ha fatto molto per superarlo. Di conseguenza potrebbe Va detto che i sistemi meno complessi non rendono necessaria unemulazione meno complessa, in quanto non è necessario emulare hardware più diverso, ma lhardware semplice deve essere seguito molto attentamente per far funzionare il codice del gioco esistente.

Sistemi complessi

Questi sono in generale tutti i sistemi con un VDC sofisticato

  • 9918 ff .- Non si tratta tanto di un singolo sistema, ma alla fine del VDC utilizzato più comunemente (TI lo chiamava VDP). Sebbene concepito per TI 99/4, TI lo vendette a chiunque fosse interessato. Ne risultò la maggioranza di tutti i sistemi (* 3) utilizzando un 9918 o uno dei suoi progetti successivi (9928/38/58 / …).

    Console da gioco come Coleco Vision , Sega SG-1000 fino al sistema principale oltre ai computer da TI 99/4 o Memotech MTX fino al lintero mondo delle macchine MSX utilizzava questa famiglia.

    Suona alla grande, non è vero? Beh, sicuramente ci sono molti giochi da usare. Inoltre, un tale VDP aiuta a semplificare lemulazione in quanto offre una netta separazione tra CPU e display e limita i “trucchi” che un gioco può utilizzare a ciò che offre il VDP, che a sua volta è chiaramente definito. E ancora, è il software esistente che rende difficile lemulazione, dato che, ancora una volta, i programmatori usavano trucchi di tempismo per manipolare lo schermo al momento giusto. Qualcuno ha menzionato “Racing the Beam”?

  • Commodore VC20, C64, C16, ecc. – Lo stesso vale per tutti i computer domestici Commodores. Anche se differiscono in complessità per avere sprite o meno, offrire timer o meno e suono o meno, la base Il problema è lo stesso della famiglia 9918: il software utilizza determinate situazioni temporali per creare effetti di gioco.

  • Sistemi 6847 – Tandy CoCo, Matra Alice e simili presentano lo stesso problema.

Potrei andare avanti con sistemi di gioco come NES o MegaDrive, ma finisco qui lelenco, poiché il principio dovrebbe essere chiaro ormai: mentre alcuni sistemi potrebbero sembrare più complesso da emulare, il vero problema non è la complessità dellhardware video, ma ogni volta che un programmatore “migliora” ciò che può essere fatto con una programmazione intelligente (* 4). Quindi il vero problema per il tuo progetto non è (così tanto) lhardware (* 5), poiché è il software, specialmente i trucchi e gli strumenti usati nei giochi esistenti .

Questo è particolarmente negativo, perché vuoi utilizzare (come lho letto) giochi esistenti come motivazione. Non ce ne saranno molti in esecuzione unemulazione in tempo reale meno difficile.

La riduzione di questa dipendenza ridurrà il numero di giochi che funzionano correttamente. Ridurlo a un livello che ne consenta la gestione in un percorso limitato dal tempo renderà quasi impossibile trovare giochi adatti.

Conclusione: Trovare il il giusto compromesso è un modo, ma che richiederà una considerevole ricerca pur limitando lusabilità.


Ora, forse è possibile attaccare questo da unangolazione leggermente diversa. Proviamo alcuni:

  • Uso del vecchio hardware esistente:

    Anche se si è dimostrato (* 6) di funzionare, offre la massima compatibilità e facilità duso grazie agli ambienti di sviluppo aperti, potrebbe non essere attraente “build” per gli studenti di EE.

  • Utilizza sistemi di giochi educativi esistenti:

    Sistemi come Andre LaMothe “s XGS sono ottimi strumenti per immergersi nella costruzione e programmazione hardware dettagliate. Certo, sono necessarie alcune saldature (sono disponibili build pronte), sono sistemi definiti dal software quasi completi, documentati e offrono una vasta libreria di giochi. Per non parlare dei suoi libri sulla programmazione dei giochi.

    Un grande vantaggio è che gli studenti possono essere in grado di portare a casa il sistema e giocare anche dopo la fine del corso.

  • Crea il tuo sistema semplice:

    Prendi una CPU classica (6502 per esempio), un po di RAM, FLASH e un VIA più un FPGA per implementare un CRTC molto semplice e fatto. Gli studenti lo salderanno, potranno conoscere i componenti e la loro interazione, incluso lutilizzo di FPGA (che potrebbe essere comunque un must oggi) e quindi eseguire il loro software su hardware reale. Anche con piccoli numeri dovrebbe essere possibile produrre una tavola del genere intorno ai 50 Euro o meno. Come lidea di XGS, funzionerà al termine del corso, inclusa la sensazione di proprietà come il loro sistema.

    Ovviamente gli studenti dovranno scrivere i propri giochi, ma giochi semplici possono essere svolti in un tempo piuttosto breve, senza contare che i corsi di follow-up possono anche utilizzare giochi scritti dalla classe precedente.

  • Esegui unemulazione del “tuo” sistema

    Molto simile a prima, tranne che tutto è virtuale. Ha il vantaggio di essere un pozzo definito e chiude il sistema, soprattutto quello in cui non ci sono limitazioni dovute a unemulazione meno “perfetta” – lEmulazione è perfetta per definizione e tutte le sue peculiarità sono quelle del sistema, lo svantaggio è ancora la parte Software.

  • Usa hardware “soft”:

    Cè un progetto di Neil Franklin che crea una serie di componenti di sistema generalizzati molto simili ai computer classici, ma usando microcontrollori invece di chip dedicati. Combina lemulazione con lhardware reale. Sebbene i componenti siano ancora sviluppati come emulazione, questi sono pensati per funzionare in un microcontrollore ed essere utilizzati in modo molto simile ai chip “reali”. Un sistema potrebbe essere configurato utilizzando un modulo SoftCPU che emula, ad esempio, un 6502 con un po di RAM e ROM, combinato con un SoftVGA che fornisce un terminale come uninterfaccia video e una tastiera e un mouse che emulano SoftPS2. Tutti sono collegati tramite un bus parallelo o seriale (SPI) che consente laggiunta di altri componenti che possono essere presentati anche allemulazione.

    Oltre ad essere tutto sullemulazione, presenta una quantità limitata di hardware che può essere fatto su una breadboard (tuttavia, non è mai troppo presto per iniziare a saldare), mostra anche un compito abbastanza tipico dellingegneria odierna – sostituire la logica tradizionale con microcontrollori – nelluso pratico.

    Il risultato è un sistema che offre il tocco e la sensazione di un vero (vecchio) computer pur essendo costruito con hardware moderno che esegue emulazioni parallele.

  • Uso di un emulatore configurabile:

    No, non si tratta di MAME o simili, ma di un framework di emulatore scritto in JavaScript, che gestisce le parti generiche (compreso il tempismo), dove i tuoi studenti aggiungeranno le loro emulazioni (che era un obiettivo, no?) per formare un intero sistema. Poiché JS è fornito in sorgente, anche il Framework stesso può essere modificato.

    A seconda della qualità di ogni emulazione, questo può essere utilizzabile per qualsiasi cosa, da un semplice sistema di dimostrazione fino a una riproduzione figurata completa di un 1980 computer.

Quindi, forse alcune delle varianti di cui sopra potrebbero essere un buon inizio?


* 1 – Mi concentrerò solo sul video (e CPU) per mantenerlo semplice. Anche il solo video funzionerà già bene per estirpare i sistemi completi. Il suono aggiungerà unaltra dimensione e potrebbe complicarlo ben oltre lo scopo di questo.

* 2 – Dai unocchiata a Xenon. Uno scroller verticale rivoluzionario con più livelli mobili e molti oggetti animati, tutti perfettamente fluidi nel software. In effetti, era così ottimizzato che il porting su Amiga (di solito) più capace (dal punto di vista grafico) ha richiesto un po di tempo e ha portato a un gioco un po meno.

* 3 – Sistemi progettati non necessari unità vendute. Poi di nuovo, alcune console di gioco hanno avuto più che un semplice successo, quindi potrebbero persino ottenere la maggioranza in numeri.

* 4 – I post sul blog dello sviluppatore principale del Glide64 per emulatori N64 ha scritto una serie composta da più parti ( Intro , P .1 , P.2 , P.3 ) di post di blog su gli ostacoli che ha dovuto superare per far funzionare la parte di emulazione video – tutti non riguardanti la complessità dellemulazione dellhardware, ma tutti i modi in cui la CPU ha modificato e ottimizzato loutput accanto a la logica del video. Ciò è ancora più notevole considerando che lN64 è già un sistema piuttosto assente e chiuso.

* 5 – In effetti, considererei lhardware video più complesso come una grande lezione per gli studenti di EE, poiché mostra bene cosa può essere fatto con poche porte invece che con pile di software – ancora di più visto che in seguito faranno lhardware, non è vero?

* 6 – Stefan Höltgen della FU Berlin ad esempio usa vecchi sistemi di gioco nelle sue classi per introdurre gli studenti (non EE) allhardware reale e alla programmazione reale e alle loro implicazioni per le attività quotidiane (e i giochi).

Commenti

  • @Tommy Beh, mi piacerebbe evitare questo, in quanto non esiste una risposta facile. La cosa più importante qui potrebbe essere che, mentre lo Z80 è un po ” bizzarro “, il 68k è tuttaltro che semplice. Con tutte le parole di estensione (fino a CPU32), una singola istruzione può avere fino a 11 parole (22 byte) e decodificarle è un gran casino. Poi di nuovo, tutto dipende da il modo in cui è composto lemulatore. Lo Z80 è un 8080 anteriore piuttosto semplice, facile da emulare, con alcuni modificatori, che possono essere facilmente gestiti. Per il 68k, anche solo quello originale, sarà molto più lavoro.
  • ” compito adatto alle matricole in un tempo così limitato. ” Ha detto che questi sono studenti del terzo anno, non matricole, e che ‘ hanno già completato diversi prerequisiti.
  • @ wizzwizz4 Bene, non importa quale sia la nostra opinione personale, JS è lerede legale di BASIC. Serio e in ogni modo! Basta pensarci.Non solo viene eseguito accanto a tutti i computer reali, ‘ è persino installato di default e non cè quasi modo di sbarazzarsene senza perdere molte funzionalità. Ancora di più, pensa a quanto software lento e pessimo è scritto in JS: la prova perfetta, non è ‘ vero?
  • @Raffzahn It ‘ è completamente diverso Per prima cosa, il BASIC aveva diversi implementatori incompatibili … Ohhh! è il successore di BASIC!
  • Loro ‘ non sono ancora matricole, che sono studenti del primo anno. E penso che dovresti dare al PO il beneficio del dubbio che non ‘ assegnerebbe il progetto se gli studenti non ‘ non hanno lo sfondo richiesto.

Risposta

Finora ci sono alcune buone idee.

Ma qualcosa da considerare.

Se fai qualcosa come una macchina CP / M, sono davvero abbastanza basilari e semplici, soprattutto perché tutto è isolato non solo dal BIOS, ma anche dalla natura IN / OUT della famiglia 8080 / Z80.

Non mi sembra spiacevole avere una macchina CP / M come obiettivo del primo semestre. (Non conosco il tuo programma)

Ma, ad esempio, una macchina CP / M di base non ha bisogno di precisione del ciclo, non necessita di interruzioni, la cosa più complicata che deve fare è interrogare la tastiera per vedere se è stato premuto un tasto. (In contrasto con il monitoraggio di keydown e keyup o qualsiasi altra cosa.)

Quindi, nel secondo semestre, è possibile aggiungere i requisiti come linterfacciamento a un chip grafico. Listanza sopra dellSG-1000 potrebbe essere facilmente una macchina CP / M nel primo semestre, e poi trasformata prontamente nellSG-1000 nel secondo (dato che hai fatto la parte Z80 nel primo semestre) .

Infine, penso che sia opportuno che la tua classe abbia un programma di accettazione che gli studenti possano eseguire per verificare la propria CPU. Poche cose più eccitanti del debug di una CPU difettosa, specialmente con un linguaggio macchina che potresti non conoscere .

La comunità del 6502 ha programmi di test che possono verificare che una CPU esegua correttamente tutte le istruzioni, non sono sicuro di cosa sia disponibile per le altre CPU.

E se è una consolazione per lambito, ho scritto sia un simulatore che un assemblatore associato durante le vacanze di Natale di 2 settimane, se questo ti dà aiuto su quanto sono grandi i progetti reali. Le CPU di base sono piuttosto semplici.

Commenti

  • Sullo Z80, FUSE fornisce dei test sebbene non tutti siano generici o necessariamente corretti per quanto riguarda il ciclo esatto tempistica; anche loro ‘ sono in un formato di testo ad hoc ma ‘ li ho trascritti in JSON: github.com/TomHarte/CLK/tree/master/OSBindings/Mac/… : utilizza tests.in.json per impostare gli stati iniziali e scopri come a lungo dovresti correre, quindi tests.expected.json per verificare i risultati. Ci sono ‘ anche zexall e zexdoc, originariamente file CP / M ma ampiamente adattati e molto lenti. Passare il primo richiede un mucchio di cose non documentate per essere corretto, passare il secondo non ‘ t.
  • … e lunica cosa che io ‘ ho mai trovato per il 6809, supponendo che qualcuno stesse pensando di suggerire un Vectrex o Coco / Dragon, è contenuto in una più ampia suite di test della macchina arcade Williams a seanriddle.com/wetsold.html . Per il 6502 sono molto daccordo con i test di Klaus Dormann, Wolfgang Lorenz e AllSuiteA, che sembrano tutti molto più importanti dei test Z80 o 6809.
  • @Tommy Per quanto riguarda ‘ so che tutti i test di Fuse ‘ sono accurati in base al ciclo. Si prega di segnalare bug se ‘ non è 🙂
  • @PhilipKendall guarda la mia email del 29/5/2017 a fuse-emulator-devel re: DJNZ e se loffset viene letto in uniterazione finale. La conclusione di Alan Cox sulla correttezza del comportamento testato di FUSE ‘ è che ‘ s ” aperto allinterpretazione ” in base alle fonti disponibili. Quindi ho pensato che ” non necessariamente corretto ” fosse giusto. Probabilmente avrei dovuto essere chiaro però: ho trovato solo una manciata di deviazioni nellinterpretazione delle prove del tuo team ‘ e nella mia. Ci scusiamo per la scarsa qualità.
  • @Tommy – ” Conclusione di Alan Cox sul fatto che FUSE ‘ sia testato il comportamento è corretto era che ‘ s ” aperto allinterpretazione ” in base alla disponibilità sorgenti ” …anche se ho molto rispetto per molto di ciò che fa Alan, è ‘ abbastanza facile verificare se il comportamento testato è lo stesso di una CPU Z80 effettiva (in particolare per le versioni CMOS che può essere eseguito su breadboard con basse velocità di clock per impostare test dettagliati in modo molto semplice), quindi questo è sicuramente un caso in cui se pensa che ‘ cè qualcosa di sbagliato dovrebbe essere in grado di dimostrarlo molto facilmente.

Risposta

Posso suggerire SG-1000 ?

Il sistema è poco più di un raggruppamento di tre chip standard: lo Z80, il TMS9928A per la grafica e lSN76489 per il suono, con i controller come gruppi stupidi di interruttori NO (normalmente aperti).

Nel software o nellhardware è possibile simulare o emulare qualsiasi parte di questo in isolamento o tutti insieme per produrre il sistema completo.

il sistema utilizza semplici ROM non bankwitch per i suoi giochi, e di solito sono tutte Non fare affidamento su trucchi come le interruzioni a metà schermo o il conteggio dei cicli per produrre i loro effetti. Solo una mappa a tessera singola e un numero di sprite in cima. Suggerisco che questo sia molto più semplice di un sistema contenente molti componenti interni interagenti e cartucce intelligenti come il NES.

Dovresti fornire i tuoi propri giochi da emulare piuttosto che distribuire senza licenza materiale protetto da copyright ovviamente.

Commenti

  • … e, per la cronaca, ColecoVision è la stessa identica raccolta di componenti, con collegamenti diversi logica e joypad leggermente più complicati. Quindi un emulatore SG-1000 è solitamente facile da estendere per supportare entrambi.
  • È anche degno di nota il fatto che il 9918 è un chip complesso, con sprite, modi e dati complessi, come ha fatto ‘ t voglio usare. Non è ‘ vero?

Risposta

Un semplice, un computer semplice come lo ZX Spectrum sembra ragionevole, ma ci sono già troppi buoni emulatori in giro per renderlo unopzione utile. Penso anche che il 6502 sia più facile da emulare.

Quindi, una possibile opzione potrebbe essere Oric-1 o Atmos dei sistemi Tangerine , che utilizzava una memoria 6502, non banked, nessun chip personalizzato tranne il video semplice e un frame buffer relativamente semplice. Inoltre, non è di gran lunga noto come Spectrum, tuttavia, è disponibile del software (giochi) per portare con sé alcuni semplici test di compatibilità (penso che un po di “senso di realizzazione” sia estremamente importante per gli studenti). Ci sono un certo numero di emulatori già disponibili per Atmos (tre, per quanto ne so), ma il loro numero è limitato, il che rende facile scoprire se qualcuno ha barato e ha semplicemente copiato il codice.

Nessuno dei Per quanto ne so, i giochi Oric erano così sofisticati che avresti bisogno di unemulazione esatta del ciclo al 100% per eseguire i giochi,

Commenti

  • I ‘ d sostiene che larchitettura Oric scoraggia le corse raster non avendo un canale laterale di registri di controllo video e non essendo impostato in modo che le corse possano plausibilmente aumentare la risoluzione del colore (in contrasto con uno spettro). Tuttavia, se avesse solo due buffer HIRES, ‘ lo dichiaro con maggiore sicurezza. Sei daccordo?
  • @Tommy Non ‘ non ho molta familiarità con i circuiti video di Oric. Quello che vorrei dire in ogni caso è che loric ha avuto una vita così breve e una base di utenti così limitata che le tecniche sofisticate per modificare il video come sappiamo dallo ZX Spectrum erano ‘ t sviluppato (almeno non durante la vita attiva del computer, ci ‘ un numero di demo interessanti qui demozoo.org/platforms/ 49 )
  • Oh, allora ‘ fornirò un ragionamento migliore: il chip video Oric ha uno stato modale, inclusa la modalità testo o grafica, ma no registri esposti. Tutto è impostato dai byte di controllo allinterno del flusso video, inclusi gli attributi di primo piano e di sfondo. Le persone tendono a lamentarsi di questo perché significa che se vuoi una grafica senza pause, ‘ sei limitato a quattro colori per riga, due dei quali sono i complementi bit per bit degli altri due. Alcuni dei giochi moderni sembrano ancora davvero buoni, ad es. Stormlord youtube.com/watch?v=QSDy-BC580M
  • @Tommy Gli attributi seriali rendono la programmazione un po più complicata, io ‘ immagino, ma la quantità di conflitto di attributi è persino migliore rispetto a ZX Spectrum, credo.
  • Xenon 1 ha bisogno di un ciclo esatto, oppure si blocca quando la nave esplode (disclaimer: ho scritto un emulatore oric per lamiga chiamato amoric e sono incappato in questo problema, ma solo su questo stesso gioco)

Risposta

In base ai tuoi criteri e alla necessità di mantenere il progetto interessante per i tuoi studenti, io “consiglio considerando seriamente il Vectrex Arcade System, venduto da Milton Bradley allinizio degli anni 80.

inserisci qui la descrizione dellimmagine

Poiché Vectrex è unico nellutilizzo di una visualizzazione vettoriale, piuttosto che una visualizzazione raster, non lo fa richiedono lemulazione di qualsiasi hardware video complicato. Il display è gestito dalla CPU e il display stesso è semplice da emulare su un sistema moderno e con buone prestazioni.

Oltre ad emulare il display vettoriale, la CPU ( Motorola 6809) e il chip I / O (MOS 6522) non rappresentano troppo muc sono una sfida in quanto sono semplici parti a 8 bit che sono molto ben documentate.

Il modello di memoria è anche molto semplice senza schemi bancari di cui sono a conoscenza. Cè un chip audio PSG comune nel Vectrex, ma emularlo potrebbe essere considerato come “credito extra”.

A differenza di altre semplici console di gioco dei primi anni 80, i giochi Vectrex hanno retto piuttosto bene, dato la sua capacità di eseguire il rendering di grafica monocromatica uniforme, incluso wireframe 3D. Ciò è ulteriormente evidenziato dalla popolarità del moderno sviluppo “home brew”, in cui gli sviluppatori continuano a creare nuovi giochi Vectrex.

Un vantaggio finale per il Vectrex è che la ROM di sistema originale è liberamente distribuibile.

Commenti

  • Tranne che il vectrex gestisce bene anche ‘ Racing the Beam ‘ categoria, ‘ non è vero?
  • @Raffzahn, a quanto ho capito, la CPU Vectrex controlla il fascio di elettroni – esattamente lopposto di una ” corsa con il fascio ” situazione in cui il software deve apportare modifiche di stato con tieniti al passo con una visualizzazione della scansione raster temporizzata esternamente.
  • @Mark It ‘ è lo stesso con VCS. Anche qui il fascio è controllato dalla CPU. Senza la CPU che accede a WSYNC ogni riga e prima che la riga sia terminata, lo schermo vacillerà. E per quanto ho capito lOP, ‘ si tratta esattamente di non ricreare un sistema con requisiti di temporizzazione rigorosi, che sono essenziali per Vectrex.
  • @Raffzahn: La CPU nel VCS controlla la verticale, ma non controlla lorizzontale. ‘ non è insolito che un gioco produca dozzine o addirittura centinaia di linee di scansione senza un WSYNC intermedio. In assenza di WSYNC, il raggio sarà nella stessa posizione orizzontale ogni 76 ° ciclo. La memorizzazione di WSYNC è spesso il modo più semplice per aspettare che il raggio raggiunga il lato destro dellarea visualizzata, ma ‘ non è certo lunico modo. Un programmatore così incline potrebbe sfruttare gli intricati dettagli del movimento e dei comportamenti dello sprite per scrivere un gioco che non ha mai usato WSYNC.
  • Ehm, gente, qui stiamo parlando di un emulatore. Non ci saranno problemi con i fosfori che svaniscono mentre la CPU emulata impiega troppo tempo per disegnare il fotogramma successivo. Non esiste un ” fascio ” e non cè certamente alcun motivo per cui lemulatore debba ” race ” poiché la visualizzazione dellemulatore rimarrà piuttosto statica per tutto il tempo necessario tra i frame.

Risposta

Creare un emulatore da zero è un compito relativamente impegnativo, specialmente per studenti inesperti e potrebbe rivelarsi problematico. Quindi devi davvero stare attento a quale piattaforma emulare e quali informazioni condividere / utilizzare. Per me la scelta migliore è una piattaforma ZX 48K mentre crescevo su di essa e ho familiarità con il suo funzionamento interno, quindi la risposta sarà influenzato da questo … Ma dobbiamo tenere presente che oggigiorno gli studenti di solito non lo vedono / lo usano / lo sanno tanto quanto noi … Quello che devi ottenere è:

  1. emulazione CPU iset corretta

    anche se ci sono tonnellate di documenti di set di istruzioni là fuori Bisogna stare attenti perché ad esempio su Z80 il 99,99% di essi contiene errori. Quindi dovresti scegliere un riferimento testato per loro ora è corretto (o almeno fondamentalmente funzionale).

    Ad esempio, ecco il mio Z80 iset che passa ZEXAL con successo al 100%:

    La piattaforma Z80 ha un vantaggio importante, ovvero ci sono molti tester per essa come ZEXALL Esercitatore che può aiutare molto a eseguire il debug dellemulatore.

    Penso che ci fossero anche versioni per i8080 ma non conosco nessuno di questi tester per diversa famiglia di CPU.

  2. Tempistica

    bene per lemulazione di base è sufficiente il metodo dei tic di clock (o throttling) che è ben noto e utilizzato … Non vedo alcun problema qui. Al giorno doggi i computer hanno una risoluzione relativamente buona per i tempi (su PC: RDTSC, su Windows PerformanceCounter, …).

    Lemulatore di base può ignorare il CONTENUTO della piattaforma emulata ma attenzione che alcuni sistemi operativi / giochi / app potrebbero essere reso inutilizzabile se non emulato correttamente. Questo non vale solo per le demo. La tempistica abituale sui vecchi computer era derivata da alcuni interrupt (di solito laggiornamento del video) e da un numero limitato di cicli in cui era possibile eseguirli prima. Ma con la contesa il numero di istruzioni eseguite per lo stesso tempo può essere molto diverso e alcuni programmi potrebbero traboccare e danneggiarsi o bloccarsi. Il CONTENUTO è la cosa più difficile da implementare con i tic dellorologio, quindi dovresti evitarlo a tutti i costi … Daltra parte con i tempi di livello MC è davvero facile e solo poche righe di codice.

  3. Suono

    questo è un problema dipendente dalla piattaforma e dovresti scegliere lAPI utilizzata per ingresso / uscita audio correttamente. Ad esempio su Windows lunica opzione utilizzabile è WAvEIN / WAVEOUT a causa della bassa latenza e del facile utilizzo. DirectX è inutilizzabile (almeno al momento stavo cercando di usarlo per questo compito) a causa di latenze ELEVATE e callback non funzionanti.

    Avrei usato un approccio bufferizzato invece della guida diretta dellaltoparlante in modo che la tua emulazione possa esplodere il tempo di esecuzione invece di esecuzione corretta a livello MC (cosa che faccio comunque ma dubito che gli studenti sarebbero in grado di farlo nel tempo a disposizione).

  4. Video

    Anche questo dipende dalla piattaforma. .. e dovresti usare lAPI con cui i tuoi studenti hanno familiarità. Anche il beam tracing è relativamente facile da implementare con semplici bitmap … Su computer come ZX lordine Scanline ha un significato speciale e può essere molto fastidioso per i programmatori principianti, quindi è meglio usare tabelle LUT di traduzione che convertono tra indirizzo e coordinate y avanti e indietro.

    La maggior parte delle piattaforme più vecchie utilizzava una frequenza di aggiornamento di 50Hz / 60Hz e una risoluzione relativamente piccola, quindi oggigiorno i computer, anche con unemulazione non ben ottimizzata, dovrebbero comunque essere abbastanza veloci per farlo. Se non è possibile anche saltare i frame …

  5. altro HW e periferiche

    Il minimo assoluto è la memoria RAM / ROM e la tastiera. La memoria di solito è molto semplice solo array statici e / o alcune cose di cambio di pagina … La tastiera può essere emulata impostando I / O in base ai tasti premuti. LI / O può anche essere mappato in memoria su un array proprio come la memoria. Anche la routine di intercettazione dellISR è unopzione, ma rende la tastiera inutilizzabile per i gestori di chiavi personalizzate.

    Non mi preoccuperei delle periferiche FDC, AY, ecc. Poiché lemulatore dovrebbe essere mantenuto il più semplice possibile. Ma se sei fortunato, potrebbero esserci alcuni studenti che saranno molto più avanti degli altri con questo progetto. Per coloro che potresti suggerire di implementare funzioni interessanti come FDC, DMA, persino il suono della vera scheda audio (per nastri reali o lettori audio) che abilita molte funzioni interessanti, ad esempio, vedi:

  6. File

    Preferirei i formati di file Z80 / SNA a iniziare. Usare TAP / TZX è bello, ma dallinizio lemulatore sarebbe piuttosto difettoso, quindi le routine di caricamento potrebbero non funzionare correttamente rendendo lutilizzo e il debug molto difficili.

  7. ROM

    questa è la parte più problematica poiché molte ROM della piattaforma non sono ancora gratuite e estraendole / scaricandole / utilizzandole per emulazione potresti rischiare problemi legali.

    Da alcuni commenti qui sembra che le ROM ZX siano di pubblico dominio ora … e ci sono anche ROM commentate pri nts là fuori rendendo molto più facile il debug dei primi passi dellemulatore (quando ancora non funziona).

    Ma dovresti sempre considerare Emulazione e cose legali , specialmente se gli emulatori saranno collocati da qualche parte su Internet

Ecco alcuni miei link QA correlati:

Risposta

Stai cercando un sistema che non è stato emulato molto? Suggerisco di rimanere nei computer a 8 bit (o primi semplici a 16/32 bit), ZX Spectrum 48k è un sistema relativamente semplice – molto ben documentato, niente sprite, niente chip audio, no Banchi RAM, I / O semplice, si mple grafica (anche se con un layout strano), nessuna emulazione perfetta del ciclo richiesta, CPU ben nota, facile gestione delle cassette (potrebbe essere reso ancora più facile dalle trap ROM). Esistono tonnellate di giochi, molti dei quali con licenze permissive.

Lo svantaggio: cè unenorme quantità di emulatori disponibili, molti a loro volta della categoria retrò e molti con codice sorgente disponibile, quindi il pericolo di imbrogliare e copiare altro codice è alto.

E, naturalmente, lavorare su un emulatore di un sistema precedentemente non emulato fornirebbe un ulteriore vantaggio della sensazione di realizzazione.

Commenti

  • Ho avuto lo stesso istinto, ma mi estenderei suggerendo che SNA e Z80 e formati di snapshot sufficientemente definiti di cui hai bisogno ‘ Non preoccuparti nemmeno dellemulazione del nastro. E, siate onesti ‘, TZX è un po un miasma a questo punto.
  • Credo che Spectrum ROM sia ora di dominio pubblico, il che può aiutare (o rendere le cose troppo facili)
  • ZX Spectrum è un ottimo esempio di hardware semplice, ma anche di programmazione piuttosto complessa, conteggio dei cicli (Racing the Beam) per ottenere effetti di gioco utilizzabili.
  • @Tommy Oh, non suggerirei mai lo ZX80 / 81 per lo stesso motivo. E sebbene non sia un vero buff Spectrum, ho visto un buon codice dipendente dal tempismo. La maggior parte delle manipolazioni dello schermo in primo piano dopo che quella parte è stata visualizzata, ma prima che venga eseguita una volta. È ‘ un problema molto semplice riscontrato in molti sistemi. Nessun grosso problema, ma dipende dal tempo. Ad esempio semplici schemi di emulazione che limitano la velocità a livello di frame produrranno schifezze su host di emulazione più veloci … e così via.
  • @Stormcloud The Spectrum ROM non è di dominio pubblico, sebbene il permesso sia stato concesso per distribuirlo per luso con emulatori. Le ROM ZX80 e ZX81 sono state rilasciate sotto GPL.

Risposta

Posso suggerire di dare unocchiata a alcuni dei primi giochi arcade? In particolare queste due piattaforme 8080 / Z80:

  • Midway 8080 – Sviluppata nel 1975 e alimentata da Space Invaders . Utilizza un frame buffer in bianco e nero a 256x224x1 bit nella RAM.

  • VIC Dual – Sega / Gremlin “s piattaforma progettata nel 1977 – il gioco più conosciuto è Carnival . Il video è un array di 32 x 28 caratteri 8 x 8 (tutti in RAM) e può supportare un semplice tavolozza dei colori, mappata su una PROM.

Questi sono molto semplici da emulare una volta che lemulazione Z80 funziona. Non ci sono trucchi di scanline divertenti o strani stati di attesa della CPU. i controlli sono disponibili tramite le porte I / O bitmap.

Puoi giocare con queste piattaforme in modo interattivo su http://8bitworkshop.com/ (Informativa completa: gestisco questo sito e sono lautore dei libri collegati al sito che descrivono queste piattaforme)

LApple] [è anche una buona scelta per una piattaforma basata su 6502, sebbene il sottosistema video sia più complicato rispetto alle due piattaforme arcade.

Commenti

  • Per cosa ‘ s valore, penso che Space Invaders sia un suggerimento ispirato. Se la memoria lo serve ‘ è solo un 8080 con uno schermo bitmap da 1 bpp, qualche porta IO per i controlli, nessun tentativo di competere con il raster, audio che è solo nella forma ” attiva il rumore X ora “, requisiti di precisione molto rilassati e produce un gioco che ancora di tanto in tanto cercano di vendere ora. È ‘ solo la questione della legalità che potrebbe far riflettere, sebbene ‘ sia sempre confuso sulle eccezioni accademiche.
  • Questo ‘ è abbastanza corretto, cè anche ‘ un chip esterno che aiuta con l8080 ‘ mancanza di un cambio a barilotto. ‘ non dovrebbe esserci alcun problema di legalità che emula lhardware (non ‘ BIOS o altro codice protetto da copyright) e ‘ è abbastanza facile scrivere il tuo gioco, ad esempio: 8bitworkshop.com/v3.2.0/?platform=mw8080bw& file = game2.c

Risposta

PET o TRS80 potrebbero funzionare bene. Hardware semplice con testo sullo schermo in modo che possano essere emulati con testo semplice, aggiungendo inizialmente il codice per i loro set di caratteri dispari in un secondo momento ed è improbabile che contengano molto in termini di codice di conteggio ciclo esatto.

Idea bonus dopo se tu optare per un PET aggiungendo il supporto C64 darebbe una grafica.

Il 6502 è probabilmente più semplice da emulare.

Lultimo pensiero potrebbe essere lOhio Scientific Superboard II o nella sua incarnazione nel Regno Unito il UK101 perché non penso che abbia hardware video riprogrammabile.

Commenti

  • Sì, tutti e tre (PET, TRS, Superboard (ho completamente dimenticato riguardo a quella successiva)) sono macchine semplici e ottime per le emulazioni. Ma manca anche una buona selezione di giochi pronti alluso. Per non parlare del colore e dello stesso tipo che le persone possono aspettarsi oggi.

Risposta

Il PDP-8 digitale è molto architettura semplice per la quale può essere facile scrivere un emulatore. Alcuni motivi includono:

  • Solo 8 istruzioni di base
  • Nessuna interfaccia video ecc. Da emulare, solo I / O del terminale
  • Non cè bisogno di precisione del ciclo, le serie effettive di macchine stesse non garantivano lo stesso comportamento nelle diverse implementazioni
  • Può iniziare con una semplice configurazione (ad esempio una macchina 4Kword che esegue FOCAL-69) e gradualmente rendere lemulatore più complesso (es. una macchina da 32 parole con aritmetica estesa, che esegue OS / 8 da un disco RK05)
  • Molti manuali disponibili online
  • La diagnostica MAINDEC e le relative istruzioni sono disponibili online, che può essere utilizzato per verificare che lemulazione funzioni correttamente

Questo potrebbe non coprire tutti i tuoi requisiti, ad esempio I / O mappato in memoria, ma certamente include cose come la decodifica delle istruzioni e le modalità di indirizzamento. della documentazione arriva fino al livello hardware di base che potrebbe essere appropriato per un corso EE.

Commenti

  • Un punto interessante è che la maggior parte dei sistemi menzionati sopra ha CPU Z80 o 6502, entrambe in qualche modo carenti in termini di modalità di indirizzamento supportate. Se la copertura delle modalità di indirizzamento è importante, il PDP-8 ne ha una selezione molto migliore da dimostrare.
  • Per il ” gioco ” aspetto della domanda, credo che Adventure sia ancora mantenuto / resuscitato per le architetture PDP (ma controlla che – potrei sbagliarmi).
  • @TobySpeight You ‘ hai ragione, viene mantenuto o resuscitato, ma per il PDP-10 , che è totalmente incompatibile con il PDP-8.

Risposta

Lopzione ZX Spectrum è già stata spiegata: la sua forza è lhardware IO assolutamente semplicistico e il fatto che molti giochi esistenti NON richiedono cicli precisi -corretta emulazione di tutte le stranezze con la sola eccezione del suono (niente di simile al suono corretto senza emulazione esatta del ciclo della CPU e corretto downsampling del flusso audio intermedio a 1 bit prodotto dalla CPU).

Qualsiasi altra opzione di hardware di gioco come NES, G enesis e tutte le macchine simili basate su sprite non sono unopzione, ovviamente, poiché è necessario molto tempo per imparare lhardware complesso, sviluppare modi per emularlo, aggirare le carenze nellemulazione ecc. Ad esempio, anche il “semplice” Super Mario Il gioco su NES non funzionerà a meno che il bit di collisione sprite in PPU non sia emulato correttamente.

Le opzioni rimanenti IMHO sono le seguenti:

  1. PC IBM basato sulla modalità testo iniziale
  2. una qualsiasi delle macchine CP / M esistenti
  3. (escluse le macchine “grandi” prima dellera “micro”)

Il punto chiave ecco la visualizzazione in modalità testo, che non è così difficile da emulare e molto più semplice da mostrare sulla macchina host (anche senza bisogno di visualizzare la grafica pixelata, lavorare con il sistema a finestre / SDL / ecc.!).

Tuttavia, sono ancora necessarie alcune indagini per raccogliere programmi adeguati con cui lavorare, compresi i giochi. Ci sono alcuni giochi in modalità testo in CP / M, e ugualmente dovrebbero essercene alcuni per IBM PC.

Commenti

  • Con un potenziale vantaggio di un La macchina CP / M è che ‘ è destinata ad essere almeno una per la quale andrà bene una semplice emulazione 8080?
  • Bello, ma poi di nuovo, ci sono non raly molti giochi per lIBM in modalità testo, vero?
  • @Raffzahn – ce ne deve essere solo uno .
  • @Jules Hehehe … sì, giusto. Ma poi ‘ direi che un minimo di 8080 andrà bene

Answer

Un sistema con il minor numero di chip personalizzati sarebbe probabilmente un obiettivo più pulito da emulare.

Un Apple II è uno dei sistemi più semplici (nessun LSI eccetto la CPU 6502) per il quale sono state scritte grandi quantità di giochi (facilmente disponibili).

Ci sono stati anche tonnellate di libri e articoli (vintage) pubblicati sullarchitettura di sistema dellApple II e della CPU 6502. Pertanto il sistema è stato documentato abbastanza bene da più fonti (citabili).

Gli emulatori per un Apple II possono essere dellordine di 10.000 righe di codice C, forse leggermente meno, che potrebbero rientrare nel tuo tempo del corso.

Commenti

  • La CPU potrebbe essere semplice, ma emulare periferiche (display, ecc.) sarebbe probabilmente ancora un compito considerevole

Risposta

Supponendo che sia un contributo, queste sono le mie note dirette sulle macchine per le quali ho scritto emulatori, in ordine cronologico di lancio approssimativo, si spera di offrire un po di colore sui formati di file, ecc:

Atari 2600

La caratteristica distintiva dellAtari 2600 è la sinergia tra processore e output grafico; giochi sono implementate una funzione in tempo reale che fornisce componenti grafici alloutput video durante lesecuzione del raster. Quindi penso che questa sia una cattiva scelta per lo scopo dichiarato: il vero duro lavoro di scrivere un emulatore 2600 è i tempi e linterazione al di fuori del microprocessore.

Apple II

Hardware relativamente semplice, ma molto sfumato, con più modalità grafiche, e devi essere allavanguardia nellinsegnamento del video NTSC per essere in grado di decodifica il suo output a colori. Anche lemulazione del Disco II è praticamente un must, ma “è un po una ricerca in sé poiché i formati di file più comuni si aspettano che tu fornisca un codificatore GCR Apple.

ZX80 / 81

Anche probabilmente eccessivamente complicato per lo scopo dichiarato, lidea centrale è riproporre il ciclo di aggiornamento della CPU e un sottoinsieme di recuperi di istruzioni per eseguire la scansione del video. Se scegli di non reimplementare quel meccanismo come loriginale, ti ritroverai con solo la modalità di testo predefinita della ROM.

Commodore Vic-20

Questa è una semplice macchina bitmap con un semplice processore nel 6502 e una discreta quantità di giochi, alcuni dei quali forniti su cartuccia, assolvendoti dalla necessità di emulare un nastro o ununità disco. Lunico neo sono i suoi 6522; si tratta di una combinazione timer / chip shifter / input / output con un sacco di stranezze. Ma un netto vantaggio del Vic-20 è che si avvierà fino al prompt BASIC senza funzionare 6522s, e BASIC stesso funzionerà solo con i timer del 6522 implementati , anche in modo inesatto.

Il suo breve periodo come leader di mercato prima dellarrivo del C64 limita anche il numero di titoli che fanno un uso avanzato dellhardware: ci sono esempi contemporanei di corse raster come i titoli Imagic , ma sono in minoranza.

I formati di file in cui vengono conservati i dati sono un disastro , ma limitandoti al supporto delle cartucce e facendo attenzione a utilizzare solo i titoli forniti sulla cartuccia, dovresti ovviare a questo problema.

ZX Spectrum

Coperto altrove; Penso che sia una buona scelta. Soprattutto se ti attieni ai formati di file snapshot.

Oric 1 / Atmos

Coperto altrove; una scelta decente, ma cè un altro di quei fastidiosi 6522. La maggior parte dei giochi è disponibile su nastro, dovrai supportare tutto ciò.

Acorn Electron

Bitmap, un 6502 più una logica esterna relativamente semplice, ma sei diverse modalità grafiche e tempi sarebbero una seccatura: il costo di ogni ciclo è una funzione dellarea a cui si accede (ROM contro RAM), la modalità grafica (40 colonne contro 80 colonne modalità) e possibilmente lattuale stato delloutput grafico (le modalità a 80 colonne bloccano gli accessi alla RAM durante la regione dei pixel; le modalità a 40 colonne non lo sono). Ma puoi semplicemente modellarlo come una macchina da 1 Mhz per la maggior parte dei giochi e per lo più farla franca una versione delloutput grafico incentrata sulla linea.

Ci sono un numero esiguo di giochi disponibili sulla ROM, ma fortunatamente lhardware del nastro permetterà principalmente unemulazione di qualità molto bassa: è del genere che solleva un interruzione alla ricezione di byte, con solo due titoli che posso pensare di fare unintrospezione più profonda di quella.

Amstrad CPC

Probabilmente uno da evitare per lo scopo dichiarato – ha un CRTC 6845, che rende loutput grafico molto configurabile e quindi molti titoli che gareggiano con il raster. Anche lutilizzo del disco era abbastanza pervasivo, ma il suo controller del disco 8272 è un ulteriore livello di grattacapi rispetto al WD1770 che vedrai spesso altrove.

MSX e / o ColecoVision / SG1000

Diversi chip audio, stessa CPU e video.In realtà penso che si possa andare abbastanza lontano ignorando linterazione temporale perché il chip video mantiene la propria RAM alla distanza di un braccio. Ma è piastrelle e sprite, e quattro diverse modalità grafiche, probabilmente per unimpresa troppo sostanziale per un corso di microprocessing.

Sistema master

Tecnicamente un SG1000 migliorato, essendo tutto ciò che la macchina fa più una modalità grafica extra, ma la modalità grafica extra è talmente migliore delle altre che solo un titolo usa qualsiasi cosa altro. Quindi in realtà semplifica in qualche modo le cose se “sei felice nel regno di ignorare principalmente il tempismo.

Ma stai ancora parlando di fattorizzare le priorità degli sprite, controllare le collisioni per pixel, ecc. Probabilmente troppo .

Nota a piè di pagina: barare con laccesso al nastro

Per un gruppo di computer domestici menzionati sopra, puoi effettivamente saltare lemulazione del nastro per tutto ciò che è codificato nel formato ROM predefinito semplicemente inserendo un trap appropriato nella ROM di sistema e lo spooling dal file di origine. Molti, ma non tutti, i titoli si basano interamente sulla ROM incorporata per lIO su nastro in modo che possano caricare molti titoli senza un vero tentativo di hardware.

In ogni caso è un trucco bodge, ma lo farà se quel lato dellemulazione non è importante per te – preferisci semplicemente rimuoverlo dallequazione e ignorare ciò che non funziona.

Nello specifico:

Vic-20:

  • se il contatore del programma arriva a 0xf7b2, copia il successivo intestazione del nastro nella posizione indicata da b3: b2, azzera 0x90 e 0x93 e continua da 0xf7b5 (poiché eviti un JSR);
  • trap 0xf90b, controlla X = 0xe, se è così allora ottenere il corpo dati del nastro successivo e scrivere nella memoria emulata da c2: c1 ma non oltre af: ae indipendentemente dalle dimensioni del corpo, quindi impostare il bit 6 su 0x90, cancellare i flag di trasporto e interruzione e continuare da 0xfccf.

Oric:

Per ROM 1.0, intercetta il PC allindirizzo 0xe630. Per 1.1, controlla lindirizzo 0xe6c9.

Dopo averlo rilevato, carica A con il byte successivo dal nastro e imposta il flag zero in base al suo valore.

Quindi RTS.

Cè anche un flag a 0x67 sulla ROM originale, o 0x24d che distingue tra le codifiche del nastro veloci e lente della macchina, ma il solito formato di file su nastro ha solo i byte decodificati, quindi per una rapida e emulazione sporca non ti preoccupare.

Electron:

Installa NOP su 0xf4e5, 0xf6de, 0xf6fa e 0xfa51 per disabilitare i rami del nastro. Il sistema operativo ora proverà a caricare i dati del nastro come se fossero su una ROM seriale.

Collega il PC a 0xf0a8 e controlla che X register è uguale a 14 e il valore allindirizzo 0x247 è zero. Allora saprai che la ROM sta cercando di prelevare il byte successivo dal nastro.

Metti il byte successivo in Y, imposta A a 0 e RTS.

Il formato di file nastro primario consente principalmente di eseguire lo spooling dei byte direttamente dal file (dopo qualche banale chunk navi gation e tramite ZLib o un altro decompressore GZ, anche se potresti semplicemente sparare in anticipo).

ZX Spectrum:

(Questo è trascritto da note molto vecchie; potrebbe valere la pena confermare contro uno smontaggio della ROM)

Intrappola il PC che raggiunge 0x056c nella ROM a 48kb. Prendi il blocco successivo dal nastro (se usi un file TAP, ti verrà dato direttamente; direi che non dovresti preoccuparti di provare a supportare TZX in questo tipo di progetto).

Se la sua lunghezza è inferiore al valore in DE, resetta carry e return.

Confronta il primo byte del blocco con il valore di B. Se non corrispondono, resetta carry e return.

Altrimenti spool i primi DE byte che hai ottenuto allindirizzo indicato da IX e imposta il bit basso di C e imposta carry.

Quindi esegui direttamente un RET oppure salta il PC avanti a 0x05e2, che è il RET che normalmente termina il caricamento del nastro.

Le macchine da 128kb seguono la ROM da 48kb per il caricamento del nastro, quindi lo stesso trucco si applica soggetto al controllo di ciò che è impaginato.

Commenti

  • Bella recensione. Sono daccordo con tutto ciò che è stato detto, forse con due piccoli componenti aggiuntivi per lApple II. Anche se è vero che lhardware video ha bisogno di un bel po di riflessione, la sua finezza può essere completamente ignorata in emulazione, come solo il lequivalenza di certi modelli di bit deve essere tradotta in colore – se non del tutto, come A2 dove molto spesso viene eseguito con uno schermo monocromatico, con il quale potrebbe essere emulato come semplice bitmap senza ulteriori dettagli. In secondo luogo, fintanto che le Gemme da riprodurre sono basate su ProDOS, non è necessaria alcuna emulazione dettagliata di Disk II, in quanto tale funziona con hardware molto diverso.
  • @Raffzahn quale sarebbe la forma più semplice di una tabella di ricerca per uscita a colori essere?Ragionando da NTSC e trattando tutto come scomponibile per raddoppiare lalta risoluzione, posso immaginare una tabella indicizzata da un contatore a tre bit che rappresenta la fase più un registro a scorrimento a cinque bit delloutput video per ottenere mezzo ciclo di colore con un punto centrale. Quindi una tabella di 256 voci. Ma questo ‘ è un ragionamento molto ingenuo; le persone hanno fatto meglio?
  • @Tommy: un approccio semplice è usare semplicemente una sequenza ripetuta di quattro colori (penso (rosso, giallo scuro, verde, blu) per pixel ad alta risoluzione doppia e sfocatura lo schermo un po . Finirà per lasciare margini di colore sulle cose, ma i monitor reali tendevano a farlo comunque. Dato che il video di Apple] [non è conforme alle specifiche, ‘ no un ” giusto ” modo per visualizzarlo e i monitor reali tenderanno a visualizzare le cose in modo leggermente diverso.

Risposta

Penso che luso di giochi grafici come obiettivo stia forse spingendo troppo i tuoi studenti. Eseguire un gioco generalmente richiede una buona emulazione non solo del la maggior parte delle funzioni del processore ma anche molto hardware, non ultimi i circuiti video (che sono spesso piuttosto complessi e in molti casi introducono molti problemi di temporizzazione). Se qualcosa non funziona bene, i risultati sono probabilmente sarà molto dis nomina. Suggerirei di iniziare con un obiettivo più semplice.

Mirerei a un sistema che abbia uninterfaccia in modalità testo, piuttosto che grafica, perché tali interfacce sono solitamente molto più semplici e potrebbero non avere particolari requisiti temporali che devono essere soddisfatte (cioè spesso funzionano interamente in parallelo allaccesso del processore alla memoria senza influenzare affatto il processore). Consiglierei anche un sistema che abbia un programma di monitoraggio a livello macchina integrato, perché questo aiuterà il debug dei programmi in esecuzione sulla macchina senza la necessità di implementare un debugger a livello di emulazione.

Un suggerimento basato sul mio attuale progetto di ricerca personale è il computer Nascom 2. Questa è una macchina basata su Z80 relativamente semplice con hardware in modalità testo che non interagisce con la CPU (se cè una contesa, viene risolta a favore della CPU, il che significa che teoricamente una manciata di pixel in ogni fotogramma potrebbe non essere mostrata se si accede allo schermo contemporaneamente allaggiornamento in corso, ma th è improbabile che sia particolarmente evidente o addirittura frequente, quindi dà un risultato utilizzabile con hardware molto semplice). È quindi improbabile che un tempismo preciso sia particolarmente difficile o importante per questa macchina. Lhardware della macchina è semplice e ben documentato. Le periferiche integrate sono un UART (che può essere utilizzato per un terminale / stampante remoto o per il caricamento e il salvataggio di cassette … il che significa che non è necessario emulare effettivamente la gestione delle cassette a livello audio, risparmiando così una buona quantità di tempo di implementazione) e un modulo I / O parallelo. Gli strumenti disponibili incoraggiano anche la sperimentazione in linguaggio assembly, che immagino sia un obiettivo desiderabile per il tuo corso.

Una cosa interessante di questa macchina è che cè una lacuna nelle opzioni di emulazione disponibili: il la pagina web più nota sulla macchina ha richiesto un emulatore basato su javascript da poter incorporare nella pagina, ma finora nessuno ne ha fornito uno.

Risposta

Ho eseguito due emulazioni un po da zero per Mac utilizzando Swift. Queste sono le mie osservazioni personali basate sulla mia esperienza.

Nessuna delle mie emulazioni è completamente accurata per il ciclo, il che porta ad alcuni problemi.

Commodore PET

Questa è stata la prima emulazione che ho scritto. Hai bisogno, come minimo, di unemulazione 6502, unemulazione PIA, unemulazione VIA e unemulazione video.

Il 6502 è davvero semplice e un eccellente processore con cui iniziare. È anche abbastanza ben documentato. Il sito Visual6502 è stato prezioso per elaborare il comportamento esatto delle istruzioni in cui la documentazione era ambigua. Per inciso, ho scritto unemulazione di un processore leggermente successivo (non ricordo quale) che ha riempito alcuni di le lacune nel set di istruzioni. Ciò ha reso la scrittura del codice di prova 6502 molto più semplice (anche solo PHX e PHY hanno semplificato alcune cose. daltra parte, qualsiasi software che utilizzava le “istruzioni non documentate” delloriginale 6502 si interromperà con la mia emulazione.

PIA e VIA sono chip IO relativamente semplici da emulare. Il driver video può essere semplice come leggendo la RAM dello schermo, traducendo in ASCII o una buona approssimazione e disegnando il testo risultante in una finestra. Alla fine, ho creato una serie di bitmap che erano copie accurate del set di caratteri PET.

La mia risorsa principale per il PET era “Programming the PET / CBM” di Raeto West. Ho una copia originale, ma ci sono PDF ver sioni in linea. Inoltre, importante è la disponibilità delle ROM BASIC e KERNAL.Non vuoi riscrivere il sistema operativo.

Lemulazione dellunità a nastro era una PITA. La mia versione del software era meno affidabile di quella reale, che i proprietari di PET sapranno che sta davvero dicendo qualcosa. Il problema, ho pensato, è che si basa su impulsi di temporizzazione precisi del ciclo e, sebbene il mio emulatore conti gli impulsi di clock, non ha necessariamente richiamato linterruzione del timer esattamente al momento giusto.

Ho avuto più successo nella scrittura unemulazione delle unità a doppio disco. Ciò richiedeva anche una robusta emulazione IEEE 488, ma lemulazione del disco rigido era abbastanza semplice. Non è unemulazione hardware, prende solo i comandi inviati dal PET e li esegue utilizzando file flat sullhard disk del Mac.

Alla fine, ho scritto del codice che fermasse il emulatore, inserire direttamente un file di programma in memoria e quindi riavviare lemulatore. Questo si è rivelato molto più comodo dellemulazione di dischi o nastri che ho smesso di lavorarci.

Il mio emulatore funziona abbastanza bene con la maggior parte del codice PET. Sfortunatamente, cè un problema con PET Space Invaders, probabilmente causato dal codice della tastiera, quindi non riconosce correttamente la pressione dei tasti. Inoltre, non ho cercato di affrontare la generazione del suono.

Sinclair ZX Spectrum

Per certi versi, questo è ancora più semplice del PET. È necessario scrivere un emulatore Z80 che è più complesso del 6502 ma esiste una suite di test CPM che è possibile utilizzare per verificare molte delle sue funzionalità, è sufficiente emulare la subroutine di output dei caratteri di CPM per renderlo utilizzabile.

Gli unici altri chip che devi emulare sono ULA e non hai bisogno di fare molto di questo se sei pronto a rinunciare a un drive a nastro. Inoltre, il generatore video, che è un po strano nel modo in cui indirizza la RAM dello schermo.

La cosa veramente bella di Spectrum è che lo schermo è sempre in modalità bitmap e il sistema operativo crea i caratteri direttamente scrivere i modelli di pixel di scrittura. Non devi preoccuparti di un set di caratteri perché è magicamente lì quando avvii lemulatore con le ROM di Spectrum caricate.

Ho ottenuto lo spettro al punto da poter caricare ed eseguire Manic Miner ed era riproducibile, anche se senza audio. Ci sono voluti circa tre mesi di lavoro, forse otto ore a settimana, dallinizio alla fine.

Commodore 64

Questo è un work in progress. Ovviamente, avevo già un 6502, che ho modificato per darmi la porta IO del 6510. Finora fa il bank commutando correttamente, alcune delle funzionalità CIA sono implementate ed è emulata abbastanza funzionalità VIC II per darmi un equivalente PET, cioè la modalità di testo normale funziona. Anche la memoria del colore del bordo e dei caratteri funzionano.

ho le modalità grafiche più complicate da emulare e sprite e dovrei essere in grado di fare qualcosa con il suono perché si tratta di un chip separato, non faccio affidamento sul timing accurato della CPU.

TL; DR

Lemulazione più semplice, a parte la CPU era lo spettro. Probabilmente avrei iniziato con quello, anche se un vecchio computer basato su CP / M 8080 potrebbe essere ancora più semplice se riesci a procurarti CP / M.

Ulteriori osservazioni

Probabilmente avrai bisogno di un buon cross assembler per la tua piattaforma di destinazione. Diventa molto noioso assemblare a mano il codice per gli unit test.

Inoltre, sarà utile un disassemblatore. Non ho dovuto smontare le ROM BASIC del Commodore perché i disassemblaggi sono disponibili gratuitamente su Internet. Ma quando stavo cercando di far funzionare Space Invaders, allinizio non funzionava e il disassemblatore era prezioso per la risoluzione dei problemi.

Per questo motivo, la suite cc65 è un buon motivo per iniziare con una macchina basata su 6502. Ha un buon assemblatore e un eccellente disassemblatore incluso. La situazione dello Z80 non era così buona, ma alla fine ho trovato un assemblatore ragionevole chiamato z80asm. Penso di aver dovuto compilarlo dai sorgenti.

Inoltre, avrai bisogno di una buona documentazione solida. Anche in questo caso la documentazione del 6502 è in linea praticamente senza precedenti. I documenti sono meno disponibili per lo Spectrum, ma è così semplice, puoi farla franca con unemulazione ULA piuttosto scadente.

Rispondi

Insieme a tutti gli altri ottimi suggerimenti, come in alternativa a Z-80 e CP / M, potresti prendere in considerazione un sistema Motorola 6809 generico da eseguire FLEX o eventualmente OS-9 , entrambi ispirati a Unix. Essendo un sistema basato su CLI, non è necessario ottenere tempi precisi.

Inoltre, se stai costruendo il simulatore, è un po come costruire lhardware; il porting del sistema operativo era un compito reale – che ho svolto negli anni 80 – al contrario di un compito clonare qualcosa per listruzione.”Avvia il sistema operativo ed esegue i programmi?” è un obiettivo molto realistico.

Poiché utilizza un sistema operativo portatile che gira su hardware di molti produttori diversi, significa che gli studenti non hanno un solo modo per farlo. Lo studente A potrebbe creare una visualizzazione a mappa di bit; lo studente B potrebbe creare un UART e avere uninterfaccia seriale. Alcuni potrebbero provare a ottenere ogni ciclo corretto; alcuni potrebbero provare solo a ottenere ogni operazione corretta. Pertanto, invece di provare semplicemente a copiare qualcosa senza necessariamente comprendere loriginale vincoli di progettazione, gli studenti sono impegnati in una corretta domanda di ingegneria: qual è un buon modo per farlo?

CPU

  • Il 6809 era unico allepoca in quanto era possibile scrivere codice completamente indipendente dalla posizione, che sarebbe stato eseguito in modo identico ovunque fosse in memoria.
  • Il set di istruzioni era quasi interamente ortogonale
  • Essendo una CPU a 8 bit con bus di indirizzi a 16 bit, è abbastanza semplice
  • Il meccanismo delle eccezioni ed efficace -la manipolazione degli indirizzi è molto simile ai processori moderni
  • Essendo un progetto Motorola, aveva IO mappato in memoria piuttosto che istruzioni IO speciali
  • Più facile da fare rispetto allo Z-80 (molte meno istruzioni ) o 6502 (meno casi speciali)
  • Materiale tramite https://en.wikipedia.org/wiki/Motorola_6809

FLEX è stato progettato come un sistema ispirato a Unix per CPU a 8 bit

  • È stato progettato specificamente per la portabilità e per avviarlo richiedeva pochissime chiamate di sistema per essere implementato – penso solo lettura / scrittura di caratteri, lettura / scrittura di blocchi floppy e una sorta di avvio (settore di lettura e salto ad esso).
  • Indipendente dallhardware per queste funzioni di base, il che rende la simulazione molto più semplice
  • È esilarante scrivere solo poche funzioni e avviare un intero sistema operativo
  • Nessuna grafica di cui preoccuparsi (che è positiva o negativa a seconda della tua visione)
  • Molto materiale disponibile, f ind tramite https://en.wikipedia.org/wiki/FLEX_(operating_system)

OS-9 simile nellintento

  • Più simile a Unix di FLEX, leggermente più difficile da portare, per quanto ricordo
  • Portato successivamente a 68000
  • Molto materiale disponibile, trovalo tramite https://en.wikipedia.org/wiki/OS-9

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *