Go Down

Topic: Arduino e TV (Read 14 times) previous topic - next topic

jumpjack


Quote
Poi ti sfato subito un mito, uno scoglio contro cui mi sono schiantato anch'io. Gli Atmega ad 8 bit NON possono gestire programmi esterni alla propria memoria per cui anche se teoricamente fattibile, l'emulazione di un computer ad 8 bit quale il C64 su un unico uC la vedo cosa molto dura.

Ma io non parlavo di emulazione! Parlavo proprio di "riprodurre" o "ricreare" nativamente un C64 atmel-based!
Emulare un processore a 8 bit tramite un altro processore a 8 bit non mi sembra fattibile, anche se il C64 andava a 1 MHz.
Pero' non mi ricordavo del VIC-II ma solo del SID... :-? Pero' abbiamo già visto che l'atmel puo' creare segnali video autonomamente, quindi non servirebbe, forse. L'audio poi non sarebbe indispensabile, trattandosi di un progetto puramente dimostrativo...
Il vero grosso problema sarebbe riscrivere da zero un OS in assembly, anche se solo di una 30ina di kb!  :-?
Ma fino a quanta RAM arrivano ad avere gli Atmel? O meglio, quanta memoria-programma... come si chiama, "EEPROM interna"?!?  :-?

leo72

Il SID era il chip audio, il VIC-II era il chip grafico (immagine e sprite).

Detto questo, non ho capito cosa vuoi fare, allora. Emulare un sistema (CPU, computer o quel che sia) significa riprodurne le funzioni tramite un differente hardware. Ricreare un C64 usando un Atmega significa in buona sostanza emularne le funzioni, no?
E per simulare un OS devi scrivere anche un emulatore della macchina su cui gira quell'OS, altrimenti come puoi ad esempio dirgli di scrivere la lettera "A" nella prima locazione dello schermo se non hai riprodotto l'hardware del C64?

Cmq, il SO del C64 era composto da diverse parti: c'era il KERNAL, ovvero il SO vero e proprio, poi la mappa caratteri (sempre in ROM), e l'interprete BASIC che fungeva da interfaccia e da linguaggio. Per non parlare di tutte quelle decine di KB di RAM usate per le impostazioni del sistema (pagina 0), i dati degli sprite del VIC-II, i dati audio del SID ecc... (http://sta.c64.org/cbm64mem.html)

Detto questo, dovrai anche ricreare un sistema per gestire l'Input dall'utente e l'output su qualche dispositivo, altrimenti il computer sarebbe inusabile. Quindi devi scrivere tutte le routine per gestire una tastiera e mandare l'output su qualcosa: un LCD o una TV che dir si voglia.

Insomma, NON è assolutamente un progetto facile. Ed usare un solo Atmega mi pare quasi impossibile. Considera che l'Atmega328 dell'Arduino ha solo 32 KB di Flash RAM (quella dove è possibile inserire il codice da eseguire): l'Eeprom interna è usabile solo come memoria non volatile ma non come memoria per il codice; l'SRAM interna viene usata dall'Atmega come spazio per le variabili del programma.

jumpjack

Quote
Il SID era il chip audio, il VIC-II era il chip grafico (immagine e sprite).

Detto questo, non ho capito cosa vuoi fare, allora. Emulare un sistema (CPU, computer o quel che sia) significa riprodurne le funzioni tramite un differente hardware. Ricreare un C64 usando un Atmega significa in buona sostanza emularne le funzioni, no?

Per me un emulatore è una "cosa SW", un programma che fa finta di essere un computer.

Quote
E per simulare un OS devi scrivere anche un emulatore della macchina su cui gira quell'OS, altrimenti come puoi ad esempio dirgli di scrivere la lettera "A" nella prima locazione dello schermo se non hai riprodotto l'hardware del C64?

Allora diciamo che più precisamente mi chiedevo se sarebbe tenicamente possibile fare il porting del S.O. del C64 da 6502 ad Atmel.

Quote

Cmq, il SO del C64 era composto da diverse parti: c'era il KERNAL, ovvero il SO vero e proprio, poi la mappa caratteri (sempre in ROM), e l'interprete BASIC che fungeva da interfaccia e da linguaggio. Per non parlare di tutte quelle decine di KB di RAM usate per le impostazioni del sistema (pagina 0), i dati degli sprite del VIC-II, i dati audio del SID ecc... (http://sta.c64.org/cbm64mem.html)

Detto questo, dovrai anche ricreare un sistema per gestire l'Input dall'utente e l'output su qualche dispositivo, altrimenti il computer sarebbe inusabile. Quindi devi scrivere tutte le routine per gestire una tastiera e mandare l'output su qualcosa: un LCD o una TV che dir si voglia.

Insomma, NON è assolutamente un progetto facile. Ed usare un solo Atmega mi pare quasi impossibile. Considera che l'Atmega328 dell'Arduino ha solo 32 KB di Flash RAM (quella dove è possibile inserire il codice da eseguire): l'Eeprom interna è usabile solo come memoria non volatile ma non come memoria per il codice; l'SRAM interna viene usata dall'Atmega come spazio per le variabili del programma.

Si', s', tutto l'ambaradam; se ho capito bene ci sono Atmel anche da 128 KB, quindi mi chiedevo, appunto, se sarebbe possibile il porting.
Ma solo per curiosità, non credo che sarei in grado di farlo io. A casa ho un libro col disassemblato commentato di tutta la ROM del C64, e una volta mi misi ad esaminare come funziona punto per punto, fino a scoprire la routine che andava ad accendere uno per uno i pixel sullo schermo per stampare i caratteri!   ;)

Ma, sempre per capire, sulla Arduino si puo' montare un qualunque Atmel compatibile a livello di piedini?

Cioe', questo potrebbe diventare un commodore sessantaduino?  ;D
http://www.atmel.com/dyn/products/product_card.asp?PN=ATmega64A

garinus

il mega!! ti basta la rom 128k :P

auguri però a riscriverti tutto....

leo72

Appunto: il problema non è tanto il "farci stare tutto", il problema è proprio il "riscrivere tutto".

Un conto è scriversi un mini SO per far fare ad un 6502 qualche sciocchezza, un conto è scrivere un emulatore di un computer. Fattibile ma a costo di mesi di lavoro. Ed il gioco, alla fine, non vale la candela: tanto vale realizzare un clone, spendi meno e ci metti meno tempo.

Go Up