Da notare che per la scrittura a schermo vengono usate due tecniche. La prima, nel clear screen, prevede la scrittura diretta in memoria video (che si trova a partire da $0400 ed ha le dimensioni di 1Kb, 1000 bytes per una dimensione di 40x25 celle); nella soconda viene effettuata una chiamata diretta al KERNAL
Un metodo alternativo per ripulire la memoria video con ACME e' il comando
*=$0400
!fill 1000,$20
---------------------------------------------------------------------------------------------
!cpu 6502
!to "joy.prg",cbm
; per simulare il joystick in C64 Debugger premere CTRL+Y
; nella finestra C64 e premere i tasti freccia
JOY = $DC00
!macro stampa .carattere{
JSR $E50C
lda #.carattere
JSR $FFD2
}
* = $c000
; pulisce lo schermo e lo mette nero con carattere blu
lda #$00
sta $d020
sta $d021
tax
lda #$20
loop
sta $0400,x
sta $0500,x
sta $0600,x
sta $0700,x
dex
bne loop
ldx #$14 ; lo schermo testo di C64 e' 40x25 caratteri
ldy #$0c ; qui siamo piu' o meno al centro
+stampa 65
lda #$0 ; inizializza il valore della locazione 2 a zero
sta $02
start lda $02 ; viene usata la locazione di memoria 2 della pagina zero
; che non e' usata dal sistema operativa
cmp JOY ; in DC00 c'e' la porta del joystick 2
; a seconda della bitmask si capisce se e' stato
; cliccato verso l'alto,basso,destra,sinistra o fire
; bit 0 attivato = alto
; bit 1 attivato = basso
; bit 2 attivato = sinistra
; bit 3 attivato = destra
; bit 4 attivato = fire
; per esempio il valore 17 (10001b) indica che il joystickhelpsys
; e' in alto ed e' premuto il fire
beq start ; loop until the joystick register changes.
lda JOY ; salva lo stato del joystick nella locazione 2
sta $02
lda #000001 ; controlla se e'attivato il primo bit
bit JOY ;
bne cont1 ; se non e' attivato segue
+stampa 32
inx ; altrimenti incrementa X
+stampa 65 ; e sposta il cursore con il KERNAL
cont1 lda #000010 ; continua con gli altri bit
bit JOY ; joystick giu'
bne cont2 ;
+stampa 32
dex ;
+stampa 65 ;
cont2 lda #000100 ; joystick a sinistra
bit JOY ;
bne cont3 ;
+stampa 32
iny ; incrementa il registro Y
+stampa 65
cont3 lda #001000 ; joystick a destra
bit JOY ;
bne cont4 ;
+stampa 32
dey ;
+stampa 65
cont4 lda #010000 ; fire
bit JOY ;
bne start ; esce se e' stato premuto Fire altrimenti torna all'inizio
rts ; back to basic
Nessun commento:
Posta un commento