Emulatore C64 su PIC32

« Older   Newer »
  Share  
view post Posted on 11/11/2019, 12:30
Avatar

Noioso

Group:
Professionisti
Posts:
403

Status:


Come appunto esemplificato qui



ho portato avanti il vecchio emulatore C64 scritto prima per DOS nei primi anni 90 e poi portato a Windows nel '96... e ora gira su un PIC con annesso displayino TFT!


allego anche una foto

Attached Image: c64_pic_tft

c64_pic_tft

 
Top
view post Posted on 11/11/2019, 19:22
Avatar

Noioso

Group:
Professionisti
Posts:
403

Status:


naturalmente posso inviare i sorgenti, se mai a qualcuno interessassero :D
 
Top
view post Posted on 12/11/2019, 11:56
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


È indiscutibilmente interessante avere un "qualcosa" di veramente "programmabile" per l'uso elettronico anche se in questa "brana" spazio temporale l'imbecillità la sta facendo da padrona. Che so, tanto per acquisire dati elaborarli, farne la FFT, o semplicemente generare una forma d'onda di qualche genere, un treno di impulsi, o altro che serva in elettronica. Cose per cui una volta servivano settimane di progettazione, mesi di costruzione e alla fine ti rendevi conto che non ne era valsa la pena. Ora, il C64 con il suo basic "raggrinzito" non è l'ideale per quelle cose. Infatti, all'epoca si usava l'Apple IIe con scheda Z80 e CP/m annesso e per la sperimentazione era una scheggia. L'alternativa (In USA) erano i vari Ampro littleboard, i TRS80, ecc... che mai hanno raggiunto l'Italia dove l'interesse principale erano i "giochini" ovviamente. Ma credo che qualcosa di facilmente programmabile con un "C" addomesticato o anche un Basic pure quello addomesticato, ma anche un nuovo sistema aperto per gli "scenziati" della domenica sia un oggetto del desiderio che ancora non esiste. ;)
 
Web  Top
view post Posted on 12/11/2019, 16:30
Avatar

Noioso

Group:
Professionisti
Posts:
403

Status:


:)
ah no, in teoria (quella vaccata de) arduino... è la versione easy dei microprocessori/microcontrollori come li intendo io. Ma il primo problema è che fu pensato a ivrea :D e il secondo (e il terzo e il 4° ecc) sono la "stupidità" del sistema, dove il più della gente usano librerie scritte più o meno da cani da grosse aziende (molto cinesi, anche se non solo)... e così, di pensato c'è poco. E' un po' il problema che sollevavi tu in altri post.

Poi appunto usano uno pseudo C++ con uno pseudo SO, il che praticamente taglia via il completo controllo dell'hardware (che personalmente è la parte + bella!) e le prestazioni. Non so... non saprei dire quanto un "oggetto fatto e finito bene", come fu l'Apple o il C64, abrebbe senso oggi, almeno per me: preferisco conoscere a fondo hardware e assembler, che poi è quel che feci dopo un po' con il C64 (e poi i PC)
 
Top
view post Posted on 12/11/2019, 23:51
Avatar

Noioso

Group:
Professionisti
Posts:
403

Status:


#define ID_CARRY 0x1
#define ID_OVERFLOW 0x40
#define ID_ZERO 0x2
#define ID_MINUS 0x80
#define ID_INTERRUPT 0x4
#define ID_DECIMAL 0x8
#define ID_BREAK 0x10



v. sotto :)

Edited by Dario Greggio - 14/11/2019, 12:23
 
Top
view post Posted on 13/11/2019, 18:18
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


Si, si possono postare i listati, però sarebbe meglio postare il file ascii che li contiene. Non sarebbero leggibili subito, però non si affosserebbe il forum in una enorme libreria di cose più o meno strane. Quando hai tempo vorrei chiederti il favore di mettere tutto il file ascii e postarlo al posto del testo direttamente visibile così non serve un pomeriggio per arrivare al post successivo. ;)
Comunque, ritornando a noi, il problema viene quando si prende l'oggetto in questione e lo si vuol fare diventare codice. Poi una volta che è codice fare il download sull'hardware. E dopo, se non va come si fa a farci il debug?
Quello che c'era e c'è ancora di bello, perchè in USA ancora in tantissimi lo usano, il CPM gira sulla macchina in via di sviluppo, si compila su di essa, ecc... Il resto lo sai perchè è come il C di Microsoft che gira sotto DOS 6.22 di una volta. Oppure il C+ASM o quello che ti pare. Un buon sistema di sviluppo è molto lontano da quelle cinesate che non vanno mai. Questo è il punto ed il problema... :o:
 
Web  Top
view post Posted on 14/11/2019, 11:53
Avatar

Noioso

Group:
Professionisti
Posts:
403

Status:


era un esperimento per vedere se veniva accettato un post lungo e/o con codice :) ora lo sistemo

Non ho ben capito cosa intendi dire, ma se ti riferisci al "cross-development", per dirla all'inglese :) ... sì, posso essere in parte d'accordo con te: col C64 e poi anche con Windows era comodo fare tutto sulla stessa macchina. Ma naturalmente quando sviluppi per un oggetto limitato hai bisogno di una tastiera, un video... cose che magari sull'oggetto finale non ci sono: perché in alcuni casi (come questo) stai sviluppando un vero computerino, in altri casi magari è soltanto un timer o un crepuscolare o un'interfaccia CAN.

Il problema è appunto "come" sono fatti i tool lato PC. E, come dicevo sopra, negli ultimi anni c'è stata l'esplosione dei software "schifosi" (e mi sento buono...) con interfaccia improvvisata (tipo il tasto invio che non conferma le videate...) e che sprecano GB e GHz per niente. E quindi c'è "l'oggetto programmatore", che di solito funziona ma a volte no... (e men che meno come debugger), per cui ti devi arrangiare.

Rimane un mondo affascinante, per chi ama l'hardware e il software di basso livello, però ecco ;)
 
Top
view post Posted on 14/11/2019, 12:16
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


Io amo l'hardware e anche il software. Ma odio profondamente i prodotti UCAS (Ufficio Complicazioni Affari Semplici) che alla fine non vanno e non si sa perchè.
Capisco che l'evoluzione è necessaria, la semplificazione è sempre gradita, ma non a dispendio della complicazione degli affari semplici.
Circa fine anni 80 avevo un sistema di sviluppo giapponese per Z80 mi pareva fosse IWASAKI... era ottimo e serviva proprio a risolvere quei problemi ai quali ti riferisci. Era un sistema basato su Z80 e CP/m. All'epoca i PC erano rari e costosissimi, poi avevano ancora dei terribili problemi di sistema e niente software adatto allo scopo. Inoltre essendo il sistema basato su Z80 si potevano sviluppare e testare sul processore locale i pezzi di programma. Tramite un ICE (In Circuit Emulator) si innestava il sistema sulla board di test che poteva anche non avere nè video nè tastiera ed in effetti neppure CPU nè RAM nè ROM perchè tutto questo era fornibile dal sistema di sviluppo. Una volta testato tutto il sistema si poteva programmare una EPROM che contenesse il firmware, inserire EPROM, CPU RAM nella scheda in via di sviluppo e tutto avrebbe funzionato come in emulazione. All'epoca era un sistema potentissimo con un debugger degno di nota. Probabilmente anche oggi sarebbe un sistema ottimo se la mania dell'economia non avesse voluto implementare cose inutili e inutilmente complicate con linguaggi incomprensibili al punto che per un umano normalmente dotato l'assembler è di gran lunga più semplice. Si, ho detto "normalmente" dotato, non un subnormale quelli con le bombole e la muta che vanno fino a 50mt... ;)
 
Web  Top
view post Posted on 14/11/2019, 12:25
Avatar

Noioso

Group:
Professionisti
Posts:
403

Status:


sorgenti "core" 6502, sia per C64 che per Amico 2000 ... (chi se lo ricorda??!)

Anche io facevo cose con lo Z80 :) ma ero già in modalità "cross", ossia sviluppavo su PC (avevo trovato un assembler e poi mi scrissi io il mio compliatore C) e poi bruciavo le Eprom con il programmatore fatto da me su bus ISA...
Insomma, le cose funzionavano e senza fronzoli, vero.

Ma è quello che faccio anche ora, solo che appunto ora sono molto di più i fronzoli che le cose utili.

Download attachment
C64_6502_amico.zip ( Number of downloads: 17 )

 
Top
view post Posted on 14/11/2019, 16:22
Avatar

GWFstory

Group:
Administrator
Posts:
359
Location:
da qui...., quo, qua. Siete curiosi di saperlo, vero? No? Beh, tanto non ve l'avrei detto.

Status:


Io lavoro quasi quotidianamente con i PIC e ho anch'io notato che la qualità dei sistemi di sviluppo è proporzionale al loro costo......negli ultimi anni sono diventati infatti molto più economici di una volta e il risultato si vede. <_< :sick:


-Le librerie dei vari compilatori non sempre fanno quello che dovrebbero fare (capita che si dimentichino di settare qualche registro e il tutto non va)

-L'ambiente di sviluppo, come dice Dario, ti costringe a fare determinate manovre per confermare le modifiche alle variabili che stai utilizzando, così se ti trovi a dovere modificare gli elementi di un array devi spostare le mani dal mouse alla tastiera e viceversa per ogni byte da modificare

-Capita poi (purtroppo) che il software sul PC si impalli e non comunichi più con l'emulatore. Talvolta te la cavi scollegando e ricollegando l'emulatore dall'USB, ma altre volte devi cominciare col chiudere il programma, proseguendo poi con lo spegnere il PC, l'emulatore, il circuito su cui stai lavorando, il quadro elettrico generale, la cabina di distribuzione e la centrale elettrica più vicina. Talvolta ti viene pure la voglia di abbattere anche i tralicci dell'alta tensione, non per teppismo o terrorismo, ma per cercare di risolvere il problema. :cry: :wb:

Alla fine decidi di cambiare lavoro e vai a coltivare ortaggi, che almeno non hanno bisogno di emulatori, di driver o altri tipi di software da installare (al massimo usi il letame, il cui odore ti ricorda la m...a di sistemi di sviluppo che hai usato fino a poco prima e questo t'impedisce di staccarti completamente dal passato).

All'epoca anch'io mi feci in casa qualche "sistema di sviluppo". Quando lavorai su schede basate su Z80 o uPD78C10 (un'evoluzione dello Z80) iniziai col crearmi una memoria che in realtà era un misto fra una EPROM, una NVRAM e una EEPROM, nel senso che era una RAM batterizzata (anzi "supercondensatorata", visto che aveva un super-capacitor) con la piedinatura di una EEPROM di pari capacità, che alla fine si comportava come una EEPROM parallela :wacko: .
Mi ero fatto una sorta di programmatore da collegare alla porta parallela del PC (da qui si capisce che il tutto non è poi così recente).
Tramite 2 contatori CD4040 controllati da 2 pin della parallela (uno come clock e l'altro come reset), venivano scansionati gli indirizzi, mentre nei pin D0-D7 della porta venivano spediti fuori i dati da programmare.

Al termine della programmazione un interruttore sul pin WE inibiva la scrittura, "EPROMizzando" la RAM e rendendola pronta ad essere montata sulla scheda di prova.
Il discorso funzionava, ma ovviamente non aveva il debug, che realizzavi passo dopo passo quando aggiungevi le routine dei display, della tastiera, della porta seriale, ecc.
Tramite le perifieriche riuscivi a capire cosa stava facendo il microprocessore, visualizzando le variabili ed inserendo dati dalla tastiera.
Il software del programmatore era realizzato in Quick-Basic, che, rispetto ai sistemi di sviluppo moderni, aveva il vantaggio di potere controllare le periferiche con instruzioni di I/O vere e proprie, senza affidarti a driver software che funzionano nel 90-95% dei casi, ma che se fai parte del restante 5-10% resti a bocca asciutta, perchè ai comuni mortali è impossibile risolvere il problema.

L'evoluzione fu poi il sistema di avanzamento passo-passo, che permetteva d'eseguire o d'inserire un'istruziione per volta vedendo poi il risultato.
Il grosso passo avanti fu quando dall'azienda in cui lavoravo presi in prestito uno dei 2 emulatori di EEPROM che avevamo, emulatore che, collegato al PC, permetteva di avere una EPROM modificabile dal computer senza spostare RAM o altri accrocchi come facevo prima.
Ovviamente il debug passo-passo non c'era (oppure c'era come lo avevo fatto io in precedenza), ma si riusciva a scaricare velocemente il software da PC a scheda e in più si poteva pure emulare la RAM presente sulla scheda stessa, cosa che risultava abbastanza comoda per vedere i dati.

Col tempo mi concentrai sempre di più sui PIC, visto che li usavo anche al lavoro, e abbandonai i vari Z80, uPD78C10, gli 80C51 (che usavo anch'essi al lavoro, ma che erano lenti e avevano un assembler con dei grossi limiti, pur essendo molto usati perchè fra i primi nati).
Per un breve periodo sviluppai qualche progetto con gli ST6 di STM, del quale avevo un starter-kit, ma che mi piacevano poco perchè avevano dei limiti sia hardware che di assembler.

Poi aprii l'azienda e comprai degli emulatori di PIC realizzati in Italia (da un'azienda di Pordenone), che erano decisamente migliori (come semplicità d'uso e come ambiente di sviluppo) e anche più economici di quelli prodotti dalla stessa Microchip.

Col tempo questi emulatori divennero obsoleti e se ti capitava di bruciare un pin non potevi più ripararli (a me capitò), così mi buttai sull'ICE2000 di Microchip, che costava un botto ma era decisamente buono, facile da usare, con pochi problemi di connessione col PC e che emulava il chip in modo perfetto, sostituendosi a quello montato sulla scheda.
Con gli anni anch'esso divenne obsoleto, perchè Microchip decise di percorrere la strada che percorre ancora adesso, ovvero d'integrare dentro i chip alcuni registri per il debug e di scaricare dentro la memoria, insieme al programma da emulare, anche uno di debug che, tramite 2 pin, s'interfaccia all'emulatore e al PC.
Il fatto che i PIC siano ora dotati tutti di memoria Flash li rendono riprogrammabili "al volo" e così ogni volta che si clicca su "RUN" in modalità debug il software scritto sul PC viene scaricato dentro al PIC ed eseguito.

Il discorso è a costo basso, ma ha anche dei grossi limiti: oltre ai già citati "impallamenti" del debugger c'è un limitato numero di break-point disponibili (1 o 3 nei chip che uso di solito io), quindi durante l'emulaizone stai sempre a spostare il break-point da lì a là.

Conclusione: una volta era più difficile sviluppare le cose perchè c'era molta meno "pappa-pronta", ma si aveva molto più controllo su ciò che si faceva e anche gli strumenti a disposizione erano generalmente più affidabili (anche se più costosi).

Un'ultima nota:

Dario, ho guardato quello che hai fatto e mi è piaciuto molto. Non ho analizzato il listato, ma l'emulatore di C64 mi ha fatto tornare ai vecchi tempi (eh, sì, sono un nostalgico).

Edited by Robo67 - 14/11/2019, 17:27
 
Top
view post Posted on 14/11/2019, 18:04
Avatar

Noioso

Group:
Professionisti
Posts:
403

Status:


Comincio dal fondo :) sì, ovviamente c'è un buon sapore di nostalgia nel guardare quell'emulatore, però è anche un bell'esperimento! Specie a pensare che gira su PIC e anche su Windows... Ne avevo fatto anche uno per Z80, mai usato/finito davvero, ed è curioso come per quanto sia una CPU vecchia... sia già molto più sofisticata del 6502.

Carina la cosa della super-memoria! Una bella idea, già. Qualcosa su parallela l'avevo fatta pure io, poi il programmatore di EEprom mi venne meglio su bus ISA, anche solo per studiarlo (e per avere i 5V...)
Con i contatori "brutali" sognavo sempre di fare una scheda video... magari una CGA o simili, con delle RAM e 7490 ecc. Poi non ho avuto occasione, in compenso ne ho realizzate varie versioni con i PIC (di una c'è anche il video).
Il Quickbasic era MOLTO buono per questi lavori! Scrivevi nell'I/O... era rapido... Arrivò Windows e la 2.x in modalità "compatibile" ti faceva ancora scrivere nelle porte, poi dopo non più e, come dici tu, iniziarono i casini.
I driver appunto spesso vanno e spesso no. Il realtime è finito a farsi friggere (il REAL-ICE immagino fosse molto bello, ma non ho avuto modo di usarlo, prezzo a parte).
Anche io iniziai con i ST, poi siam passati a Microchip e ok, ho fatto due cosine con KEIL e ARM, ma poco. Ovviamente oltre a 6502-Z80 e un po' di 68000 e 8086!



Alla fine: emulare... studiare il funzionamento... analizzarlo a fondo... Mi viene da pensare a quanto devono sentirsi fighi quelli che studiano/editano il DNA...!!
 
Top
view post Posted on 15/11/2019, 19:49
Avatar

Noioso

Group:
Professionisti
Posts:
403

Status:


mmm ancora un piccolo bug nei flag di BREAK e interrupt disable...
 
Top
11 replies since 11/11/2019, 12:30   138 views
  Share