Come sviluppare oggi software per i vecchi computer e console a 8 bit. Panoramica del linguaggio assembler e del funzionamento della CPU. Differenze tra Z80 e 6502. L'importanza del timing video. Gli sprite. Dettaglio dell'hardware del C64 e tecniche di programmazione a esso relative.
2. Programmare un computer 8-bit
Poche risorse = nuovo approccio alla
programmazione
codice molto ottimizzato
niente oggetti / database / etc...
Sviluppo molto più comodo rispetto a “ieri”
Cross-development PC/emulatore
ampia documentazione su Internet
Giovanni Simotti 2
gsimotti@tiscalinet.it
3. Struttura basilare di un computer
CPU
esegue il programma in linguaggio macchina e
comanda l'hardware dedicato (periferiche e chip
dedicati)
MEMORIA
contiene il programma e i dati letti/scritti dalla cpu
è organizzata in celle grandi 1 byte
ogni cella risiede in un certo indirizzo di memoria
Giovanni Simotti 3
gsimotti@tiscalinet.it
4. Il linguaggio assembler (ASM)
Rappresentazione “leggibile” del linguaggio
macchina
Corrispondenza 1:1 tra istruzioni assembler e
istruzione in linguaggio macchina
Commenti importantissimi!
La traduzione è eseguita dall'assemblatore
.asm -> assemblatore -> .prg -> emulatore
Giovanni Simotti 4
gsimotti@tiscalinet.it
7. CPU
Program Counter (PC)
Contiene l'indirizzo dell'istruzione in esecuzione
Stack Pointer (SP)
Contiene l'indirizzo della prox scrittura nello stack
Registri
Accumulatore (usato nelle operazioni matematico - logiche)
6502: anche X, Y
Flag di stato
Giovanni Simotti 7
gsimotti@tiscalinet.it
8. Istruzioni ASM - Tipi
Spostamento dati da/per i registri
Calcolo (somma, sottrazione, shift, op. logici)
6502: niente divisione/moltiplicazione (solo lo shift)
Comparazione (scrivono il risultato nei flag)
Salto (condizionato o non)
Salto a subroutine (utile per riusare funzioni)
Giovanni Simotti 8
gsimotti@tiscalinet.it
9. Istruzioni ASM - Indirizzamento
Indica dov'è l'operando, ovvero su cosa deve
operare l'istruzione
Immediato: LDA #$44
Assoluto: LDA $4400
Zero Page: LDA $44 (equivale a: LDA $0044)
Indicizzato assoluto: LDA $4400,X (cicli FOR)
Zero Page: LDA $44,X (equivale a: LDA $0044,x)
Giovanni Simotti 9
gsimotti@tiscalinet.it
11. Istruzioni ASM
Per ogni istruzione, un byte per l'op-code + altri
bytes a seconda dell'indirizzamento
Max 256 op-code possibili
LDA occupa 8 op-code con i vari indirizzamenti
Ogni byte letto = 1 ciclo di clock impiegato
LDA può impiegare da 2 a 6 cicli di clock a seconda
dell'indirizzamento!
Giovanni Simotti 11
gsimotti@tiscalinet.it
12. Software
Text editor a
piacere
DASM
Vice
(Alt+M per
eseguire il
monitor)
Giovanni Simotti 12
gsimotti@tiscalinet.it
13. C64
MOS Technology 6510 (molto simile al 6502)
CPU Clock: 1.023mhz NTSC (60hz), 0.985mhz
PAL (50hz)
Meno di 20000 cicli di clock per frame!
MEMORIA: 64kB RAM
“Sorgente + grafica + sonoro” in (molto meno di)
65536 byte!
Giovanni Simotti 13
gsimotti@tiscalinet.it
14. C64 – Chip Dedicati
“Potente” hardware dedicato
VIC-II (grafica)
SID 6581 (sonoro)
CIA 6526 (I/O e timing)
Accesso "memory mapped"
si accede ai chip dedicati leggendo e scrivendo determinate celle
di memoria
ad esempio: per posizionare a video lo sprite 0 basta scrivere le
coordinate in D000 e D001
"perdo" indirizzi di memoria preziosi
Giovanni Simotti 14
gsimotti@tiscalinet.it
15. VIC-II
320x200 pixel (160x200 in multicolor)
Modalità video bitmap/carattere
Bitmap: schermate statiche (loading, intro, etc...)
Carattere: “mappe” fatte con elementi componibili,
anche con scrolling
Palette 16 colori
8 sprite hardware
Giovanni Simotti 15
gsimotti@tiscalinet.it
16. Modalità carattere
Caratteri monocolor: 8x8 pixel – 2 colori
Caratteri multicolor: 4x8 pixel – 4 colori
I due tipi di caratteri possono coesistere
40 colonne × 25 righe = 1000 caratteri a video
256 caratteri possibili
usati nei giochi per fare gli sfondi
Giovanni Simotti 16
gsimotti@tiscalinet.it
17. Modalità carattere (continua)
Max 4 colori per carattere
Colore di sfondo $D021
Colore all'indirizzo $D022 (solo multicolor)
Colore all'indirizzo $D023 (solo multicolor)
Per ogni carattere: colore agli indirizzi $D800–DBE7
In multicolor posso usare i colori 8-15, in single color i
colori 0-7 della palette
Giovanni Simotti 17
gsimotti@tiscalinet.it
19. Sprite
Sono immagini grafiche sovraimposte alla
schermata video
8 sprite
24x21 pixel (12x21 in multicolor)
Per ogni sprite: 3 byte per linea --> 63 byte
Collisioni hardware
Zoom hardware! (solo 2x)
Giovanni Simotti 19
gsimotti@tiscalinet.it
20. Sprite (continua)
Per spostarli basta scrivere all'indirizzo giusto
($D000-$D010)
4 colori per sprite
Colore trasparente $D021 (è il colore di sfondo)
Colore all'indirizzo $D025 (solo multicolor)
Colore all'indirizzo $D026 (solo multicolor)
Per ogni sprite: colore all'indirizzo $D027–D02F
Giovanni Simotti 20
gsimotti@tiscalinet.it
22. Effetti Raster
TV CRT: non tutti i
pixel sono
ridisegnati nello
stesso momento
(cannone ottico)
Giovanni Simotti 22
gsimotti@tiscalinet.it
23. Effetti Raster (continua)
Sprite multiplexing: 8 sprite, ma posso
riposizionarli dopo che è passato il cannone
ottico
Posso avere metà schermo in modo bitmap e
metà in modo carattere!
Effetto "loading"
Effetto "gioco di guida 3d"
Giovanni Simotti 23
gsimotti@tiscalinet.it
24. Effetti Raster (continua)
8 pixel per cpu clock cycle (63..65 per linea)
CIA 6526: settiamo un raster IRQ per chiamare
una subroutine quando il raster è giunto ad una
certa linea
Attenzione: il refresh cambia tra NTSC e PAL
(60hz / 50hz)
Giovanni Simotti 24
gsimotti@tiscalinet.it
25. Effetti Raster (continua)
Mayhem in Monsterland (1993) Turrican II (1991) Armalyte (1988)
Turbo Out Run (1989) Pitstop II (1984) Trailblazer (1986)
Giovanni Simotti 25
gsimotti@tiscalinet.it
26. SID 6581
"This thing is already 10 times better than
anything out there and 20 times better than it
needs to be." - Commodore head engineer
Caratteristiche:
3 oscillatori indipendenti, con estensione di 8 ottave
4 forme d'onda per ogni oscillatore
ADSR regolabili per ogni oscillatore
3 tre filtri (passa basso, passa alto e passa banda)
Giovanni Simotti 26
gsimotti@tiscalinet.it
27. SID 6581 (continua)
In pratica l'editor musicale (o direttamente il
compositore) salva sia la canzone che il codice
per suonarla
Ad esempio:
Inizializzazione: jsr $1000
A ogni refresh video: jsr $1003
Giovanni Simotti 27
gsimotti@tiscalinet.it
29. Differenze tra Z80 e 6502
Z80: simile all'Intel 8080
Velocità di clock generalmente superiori
Registri: non solo A,X,Y ma
A,B,C,D,E,F,H,L,R,IX,IY
Accesso alla memoria lento
2 cicli di clock anziché 1 come nel 6502
Giovanni Simotti 29
gsimotti@tiscalinet.it