SlideShare a Scribd company logo
1 of 31
Retroprogramming -
Programmare oggi il C64
Giovanni Simotti

                   gsimotti@tiscalinet.it
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
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
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
Esempio “Hello World”




                  Giovanni Simotti     5
              gsimotti@tiscalinet.it
Esempio “Hello World”(continua)




                       Giovanni Simotti     6
                   gsimotti@tiscalinet.it
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
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
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
Istruzioni ASM– Indirizzamento (continua)
Indicizzato indiretto: LDA ($02,X)
Indiretto indicizzato: LDA ($02),Y
Assoluto indiretto: JMP ($F000)
Relativo: BCS $44
  Offset max: -126 +129
  Possiamo scrivere anche BCS Label
Implicito: NOP
                                  Giovanni Simotti     10
                              gsimotti@tiscalinet.it
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
Software
Text editor a
  piacere
DASM
Vice
  (Alt+M per
    eseguire il
    monitor)

                             Giovanni Simotti     12
                         gsimotti@tiscalinet.it
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
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
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
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
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
Modalità carattere (continua)




                      Giovanni Simotti     18
                  gsimotti@tiscalinet.it
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
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
Sprite (continua)




                Giovanni Simotti     21
            gsimotti@tiscalinet.it
Effetti Raster
TV CRT: non tutti i
 pixel sono
 ridisegnati nello
 stesso momento
 (cannone ottico)



                                Giovanni Simotti     22
                            gsimotti@tiscalinet.it
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
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
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
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
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
Altre piattaforme
Basate su 6502
  C64: 6510 @ 1.023/0.985 MHz, sprite
  NES: Ricoh2A03 @ 1.79/1.66 MHz, sprite
  Atari2600: 6507 @ 1.19 Mhz, "raster nightmare"
Basate su Z80
  Gameboy: SharpLR35902 @ 4.19 MHz, sprite
  ZX Spectrum: Z80 @ 3.5 Mhz, niente sprite
                                   Giovanni Simotti     28
                               gsimotti@tiscalinet.it
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
Link utili
http://www.6502.org
http://c64-wiki.com
http://codebase64.org
http://www.commodore.ca/manuals/
http://www.skinfaxi.com/cli/collision.htm


                                  Giovanni Simotti     30
                              gsimotti@tiscalinet.it
Q&A




          Giovanni Simotti     31
      gsimotti@tiscalinet.it

More Related Content

Viewers also liked

Presentazione Focus Junior - Politecnico di Milano
Presentazione Focus Junior - Politecnico di MilanoPresentazione Focus Junior - Politecnico di Milano
Presentazione Focus Junior - Politecnico di MilanoPier Luca Lanzi
 
Racconti di fine anno scolastico
Racconti di fine anno scolasticoRacconti di fine anno scolastico
Racconti di fine anno scolasticoLicia Tabanelli
 
Presentazione tesina
Presentazione tesinaPresentazione tesina
Presentazione tesinachicosstefan
 
Milano Game Makers Iniziative 2014
Milano Game Makers Iniziative 2014Milano Game Makers Iniziative 2014
Milano Game Makers Iniziative 2014Alexio Cassani
 
Linux Day 2013 Messina - Sviluppo di videogiochi in Linux
Linux Day 2013 Messina - Sviluppo di videogiochi in LinuxLinux Day 2013 Messina - Sviluppo di videogiochi in Linux
Linux Day 2013 Messina - Sviluppo di videogiochi in LinuxVittorio Romeo
 
Codemotion 2012 - Con le mani puoi... programmare
Codemotion 2012 - Con le mani puoi... programmareCodemotion 2012 - Con le mani puoi... programmare
Codemotion 2012 - Con le mani puoi... programmarePaolo Aliverti
 
Android programming
Android programmingAndroid programming
Android programmingPi Libri
 
Programmazione android per esseri umani
Programmazione android per esseri umaniProgrammazione android per esseri umani
Programmazione android per esseri umaniRoberto Bettazzoni
 
Creare app senza programmare
Creare app senza programmareCreare app senza programmare
Creare app senza programmareTommaso Tosi
 
Programmare In Visual Basic, prima lezione
Programmare In Visual Basic, prima lezioneProgrammare In Visual Basic, prima lezione
Programmare In Visual Basic, prima lezioneHigh Secondary School
 
Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4Ivan Gualandri
 
Programmare la creatività - Zappacosta
Programmare la creatività -  ZappacostaProgrammare la creatività -  Zappacosta
Programmare la creatività - ZappacostaCodemotion
 
Android App Development, Creare la nostra prima app
Android App Development, Creare la nostra prima appAndroid App Development, Creare la nostra prima app
Android App Development, Creare la nostra prima appNicola Corti
 
Matematica e Fisica nei Videogiochi - ITIS Malignani - Udine
Matematica e Fisica nei Videogiochi - ITIS Malignani - UdineMatematica e Fisica nei Videogiochi - ITIS Malignani - Udine
Matematica e Fisica nei Videogiochi - ITIS Malignani - UdinePier Luca Lanzi
 
Sviluppare app event-driven con RxJava su Android
Sviluppare app event-driven con RxJava su AndroidSviluppare app event-driven con RxJava su Android
Sviluppare app event-driven con RxJava su AndroidBoris D'Amato
 

Viewers also liked (20)

Presentazione Focus Junior - Politecnico di Milano
Presentazione Focus Junior - Politecnico di MilanoPresentazione Focus Junior - Politecnico di Milano
Presentazione Focus Junior - Politecnico di Milano
 
Racconti di fine anno scolastico
Racconti di fine anno scolasticoRacconti di fine anno scolastico
Racconti di fine anno scolastico
 
Presentazione tesina
Presentazione tesinaPresentazione tesina
Presentazione tesina
 
Campus La Camilla -
Campus La Camilla - Campus La Camilla -
Campus La Camilla -
 
Milano Game Makers Iniziative 2014
Milano Game Makers Iniziative 2014Milano Game Makers Iniziative 2014
Milano Game Makers Iniziative 2014
 
A Lezione Di
A Lezione DiA Lezione Di
A Lezione Di
 
Linux Day 2013 Messina - Sviluppo di videogiochi in Linux
Linux Day 2013 Messina - Sviluppo di videogiochi in LinuxLinux Day 2013 Messina - Sviluppo di videogiochi in Linux
Linux Day 2013 Messina - Sviluppo di videogiochi in Linux
 
Codemotion 2012 - Con le mani puoi... programmare
Codemotion 2012 - Con le mani puoi... programmareCodemotion 2012 - Con le mani puoi... programmare
Codemotion 2012 - Con le mani puoi... programmare
 
Android programming
Android programmingAndroid programming
Android programming
 
Programmazione android per esseri umani
Programmazione android per esseri umaniProgrammazione android per esseri umani
Programmazione android per esseri umani
 
Creare app senza programmare
Creare app senza programmareCreare app senza programmare
Creare app senza programmare
 
Programmare In Visual Basic, prima lezione
Programmare In Visual Basic, prima lezioneProgrammare In Visual Basic, prima lezione
Programmare In Visual Basic, prima lezione
 
Presentazione Corso Scratch 2.0
Presentazione Corso Scratch 2.0Presentazione Corso Scratch 2.0
Presentazione Corso Scratch 2.0
 
Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4Introduzione alla programmazione Android - Android@tulug lezione 4
Introduzione alla programmazione Android - Android@tulug lezione 4
 
Programmare la creatività - Zappacosta
Programmare la creatività -  ZappacostaProgrammare la creatività -  Zappacosta
Programmare la creatività - Zappacosta
 
I giochi digitali
I giochi digitaliI giochi digitali
I giochi digitali
 
Android App Development, Creare la nostra prima app
Android App Development, Creare la nostra prima appAndroid App Development, Creare la nostra prima app
Android App Development, Creare la nostra prima app
 
Matematica e Fisica nei Videogiochi - ITIS Malignani - Udine
Matematica e Fisica nei Videogiochi - ITIS Malignani - UdineMatematica e Fisica nei Videogiochi - ITIS Malignani - Udine
Matematica e Fisica nei Videogiochi - ITIS Malignani - Udine
 
Sviluppare app event-driven con RxJava su Android
Sviluppare app event-driven con RxJava su AndroidSviluppare app event-driven con RxJava su Android
Sviluppare app event-driven con RxJava su Android
 
Campus La Camilla - Progetto Scratch
Campus La Camilla - Progetto Scratch Campus La Camilla - Progetto Scratch
Campus La Camilla - Progetto Scratch
 

Similar to Retroprogramming - Programmare oggi il C64, by Giovanni Simotti

Peritore e Pennisi - Garage days - sviluppo Amiga negli anni 90
Peritore e Pennisi - Garage days - sviluppo Amiga negli anni 90Peritore e Pennisi - Garage days - sviluppo Amiga negli anni 90
Peritore e Pennisi - Garage days - sviluppo Amiga negli anni 90Codemotion
 
8 bit e 4 toni di grigio: sviluppare giochi per Gameboy by Giovanni Simotti
8 bit e 4 toni di grigio: sviluppare giochi per Gameboy by Giovanni Simotti8 bit e 4 toni di grigio: sviluppare giochi per Gameboy by Giovanni Simotti
8 bit e 4 toni di grigio: sviluppare giochi per Gameboy by Giovanni SimottiCodemotion
 
Il Personal Computer
Il Personal ComputerIl Personal Computer
Il Personal Computerbity1988
 
Il Personal Computer
Il Personal ComputerIl Personal Computer
Il Personal Computerbity1988
 
Unity: introduzione storica ed analisi di un microprogetto
Unity: introduzione storica ed analisi di un microprogettoUnity: introduzione storica ed analisi di un microprogetto
Unity: introduzione storica ed analisi di un microprogettoDevDay
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaCodemotion
 
Introduzione all’informatica 2011
Introduzione all’informatica 2011Introduzione all’informatica 2011
Introduzione all’informatica 2011donmimi
 
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19Ionela
 
l'evoluzione dell'informatica nei videogiochi: da pong ai moderni AAA
l'evoluzione dell'informatica nei videogiochi: da pong ai moderni AAAl'evoluzione dell'informatica nei videogiochi: da pong ai moderni AAA
l'evoluzione dell'informatica nei videogiochi: da pong ai moderni AAAPier Luca Lanzi
 
Computer history in pillole #1
Computer history in pillole #1Computer history in pillole #1
Computer history in pillole #1Felice Pescatore
 
Architettura dei Calcolatori 12 Storia
Architettura dei Calcolatori 12 StoriaArchitettura dei Calcolatori 12 Storia
Architettura dei Calcolatori 12 StoriaMajong DevJfu
 
Thesis Ardemagni Sangalli Slide It
Thesis Ardemagni Sangalli Slide ItThesis Ardemagni Sangalli Slide It
Thesis Ardemagni Sangalli Slide ItMarco Santambrogio
 
Forza4 PIC microcontroller
Forza4 PIC microcontrollerForza4 PIC microcontroller
Forza4 PIC microcontrollerDavide Mercanti
 
Sistema Binario E Codice Informatico
Sistema Binario E Codice InformaticoSistema Binario E Codice Informatico
Sistema Binario E Codice Informaticovapiegold
 

Similar to Retroprogramming - Programmare oggi il C64, by Giovanni Simotti (20)

Peritore e Pennisi - Garage days - sviluppo Amiga negli anni 90
Peritore e Pennisi - Garage days - sviluppo Amiga negli anni 90Peritore e Pennisi - Garage days - sviluppo Amiga negli anni 90
Peritore e Pennisi - Garage days - sviluppo Amiga negli anni 90
 
8 bit e 4 toni di grigio: sviluppare giochi per Gameboy by Giovanni Simotti
8 bit e 4 toni di grigio: sviluppare giochi per Gameboy by Giovanni Simotti8 bit e 4 toni di grigio: sviluppare giochi per Gameboy by Giovanni Simotti
8 bit e 4 toni di grigio: sviluppare giochi per Gameboy by Giovanni Simotti
 
Il Personal Computer
Il Personal ComputerIl Personal Computer
Il Personal Computer
 
Il Personal Computer
Il Personal ComputerIl Personal Computer
Il Personal Computer
 
Unity: introduzione storica ed analisi di un microprogetto
Unity: introduzione storica ed analisi di un microprogettoUnity: introduzione storica ed analisi di un microprogetto
Unity: introduzione storica ed analisi di un microprogetto
 
Scheda video word
Scheda video wordScheda video word
Scheda video word
 
Pastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storiaPastore - Commodore 65 - La storia
Pastore - Commodore 65 - La storia
 
3DD 1e Christian B
3DD 1e Christian B3DD 1e Christian B
3DD 1e Christian B
 
Introduzione all’informatica 2011
Introduzione all’informatica 2011Introduzione all’informatica 2011
Introduzione all’informatica 2011
 
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19Dsp  cosa sono i digital signal processor  - seconda parte - 2010-10-19
Dsp cosa sono i digital signal processor - seconda parte - 2010-10-19
 
E1 Memorie
E1 MemorieE1 Memorie
E1 Memorie
 
l'evoluzione dell'informatica nei videogiochi: da pong ai moderni AAA
l'evoluzione dell'informatica nei videogiochi: da pong ai moderni AAAl'evoluzione dell'informatica nei videogiochi: da pong ai moderni AAA
l'evoluzione dell'informatica nei videogiochi: da pong ai moderni AAA
 
Computer history in pillole #1
Computer history in pillole #1Computer history in pillole #1
Computer history in pillole #1
 
Pioneer 1320 il migliore
Pioneer 1320   il migliorePioneer 1320   il migliore
Pioneer 1320 il migliore
 
Architettura dei Calcolatori 12 Storia
Architettura dei Calcolatori 12 StoriaArchitettura dei Calcolatori 12 Storia
Architettura dei Calcolatori 12 Storia
 
Thesis Ardemagni Sangalli Slide It
Thesis Ardemagni Sangalli Slide ItThesis Ardemagni Sangalli Slide It
Thesis Ardemagni Sangalli Slide It
 
3rd 3DDRESD: VGA Core
3rd 3DDRESD: VGA Core3rd 3DDRESD: VGA Core
3rd 3DDRESD: VGA Core
 
Forza4 PIC microcontroller
Forza4 PIC microcontrollerForza4 PIC microcontroller
Forza4 PIC microcontroller
 
Sistema Binario E Codice Informatico
Sistema Binario E Codice InformaticoSistema Binario E Codice Informatico
Sistema Binario E Codice Informatico
 
RAPPRESENTAZIONE dei DATI
RAPPRESENTAZIONE dei DATIRAPPRESENTAZIONE dei DATI
RAPPRESENTAZIONE dei DATI
 

More from Codemotion

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Codemotion
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyCodemotion
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserCodemotion
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Codemotion
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Codemotion
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Codemotion
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 - Codemotion
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Codemotion
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Codemotion
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Codemotion
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Codemotion
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Codemotion
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Codemotion
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Codemotion
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...Codemotion
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Codemotion
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Codemotion
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Codemotion
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Codemotion
 
Mike Kotsur - What can philosophy teach us about programming - Codemotion Ams...
Mike Kotsur - What can philosophy teach us about programming - Codemotion Ams...Mike Kotsur - What can philosophy teach us about programming - Codemotion Ams...
Mike Kotsur - What can philosophy teach us about programming - Codemotion Ams...Codemotion
 

More from Codemotion (20)

Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
Fuzz-testing: A hacker's approach to making your code more secure | Pascal Ze...
 
Pompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending storyPompili - From hero to_zero: The FatalNoise neverending story
Pompili - From hero to_zero: The FatalNoise neverending story
 
Pennisi - Essere Richard Altwasser
Pennisi - Essere Richard AltwasserPennisi - Essere Richard Altwasser
Pennisi - Essere Richard Altwasser
 
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
Michel Schudel - Let's build a blockchain... in 40 minutes! - Codemotion Amst...
 
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
Richard Süselbeck - Building your own ride share app - Codemotion Amsterdam 2019
 
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
Eward Driehuis - What we learned from 20.000 attacks - Codemotion Amsterdam 2019
 
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 - Francesco Baldassarri  - Deliver Data at Scale - Codemotion Amsterdam 2019 -
Francesco Baldassarri - Deliver Data at Scale - Codemotion Amsterdam 2019 -
 
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
Martin Förtsch, Thomas Endres - Stereoscopic Style Transfer AI - Codemotion A...
 
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
Melanie Rieback, Klaus Kursawe - Blockchain Security: Melting the "Silver Bul...
 
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
Angelo van der Sijpt - How well do you know your network stack? - Codemotion ...
 
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
Lars Wolff - Performance Testing for DevOps in the Cloud - Codemotion Amsterd...
 
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
Sascha Wolter - Conversational AI Demystified - Codemotion Amsterdam 2019
 
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
Michele Tonutti - Scaling is caring - Codemotion Amsterdam 2019
 
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
Pat Hermens - From 100 to 1,000+ deployments a day - Codemotion Amsterdam 2019
 
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
James Birnie - Using Many Worlds of Compute Power with Quantum - Codemotion A...
 
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
Don Goodman-Wilson - Chinese food, motor scooters, and open source developmen...
 
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
Pieter Omvlee - The story behind Sketch - Codemotion Amsterdam 2019
 
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
Dave Farley - Taking Back “Software Engineering” - Codemotion Amsterdam 2019
 
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
Joshua Hoffman - Should the CTO be Coding? - Codemotion Amsterdam 2019
 
Mike Kotsur - What can philosophy teach us about programming - Codemotion Ams...
Mike Kotsur - What can philosophy teach us about programming - Codemotion Ams...Mike Kotsur - What can philosophy teach us about programming - Codemotion Ams...
Mike Kotsur - What can philosophy teach us about programming - Codemotion Ams...
 

Retroprogramming - Programmare oggi il C64, by Giovanni Simotti

  • 1. Retroprogramming - Programmare oggi il C64 Giovanni Simotti gsimotti@tiscalinet.it
  • 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
  • 5. Esempio “Hello World” Giovanni Simotti 5 gsimotti@tiscalinet.it
  • 6. Esempio “Hello World”(continua) Giovanni Simotti 6 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
  • 10. Istruzioni ASM– Indirizzamento (continua) Indicizzato indiretto: LDA ($02,X) Indiretto indicizzato: LDA ($02),Y Assoluto indiretto: JMP ($F000) Relativo: BCS $44 Offset max: -126 +129 Possiamo scrivere anche BCS Label Implicito: NOP Giovanni Simotti 10 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
  • 18. Modalità carattere (continua) Giovanni Simotti 18 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
  • 21. Sprite (continua) Giovanni Simotti 21 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
  • 28. Altre piattaforme Basate su 6502 C64: 6510 @ 1.023/0.985 MHz, sprite NES: Ricoh2A03 @ 1.79/1.66 MHz, sprite Atari2600: 6507 @ 1.19 Mhz, "raster nightmare" Basate su Z80 Gameboy: SharpLR35902 @ 4.19 MHz, sprite ZX Spectrum: Z80 @ 3.5 Mhz, niente sprite Giovanni Simotti 28 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
  • 31. Q&A Giovanni Simotti 31 gsimotti@tiscalinet.it