Ciao ragazzi, dopo il problema relativo al salvataggio nel formato TAP, torno a chiedere gentilmente il vostro aiuto...Dunque, sto facendo delle prove di programmazione in inguaggio assembly e ora vorrei scrivere un programmino di prova che mi permetta di caricare un set di caratteri personalizzati e quindi di scrivere una stringa a schermo.. Voglio che lo sfondo sia nero e che la scritta sia bianca. Sotto trovate allegato il codice che ho scritto (lo compilo con c64asm di Bàlint Thòt). Ora ecco il problema: il programmino sembra funzionare correttamente sotto Vice, mentre se lo provo sotto ccs64 ottengo dei problemi relativi al colore: lo sfondo è nero ma il bordo è bianco, mentre la scritta è nera su uno sfondo bianco... non è proprio l'effetto desiderato... Sicuramente avrò fatto qualche errore nel codice visto che sono alle prime armi ma non riesco ad individuarlo.. potete darmi una mano? Grazie mille. Ciao. Fabrizio.
---------------------------------------------------------------------------------------
Codice. Scusate l'impaginazione...
chdest = $3800 ; destinazione custom chars
chloca = $d018 ; registro selezione locazione chars
banksel = $dd00 ; registro selezione banco VIC
colmem = $0045 ; lsb locazione in memoria colore (46 msb)
back = $caae ; background color
text = $caaf ; text color
joy = $dc01 ; stato joystick
* = $c000
jsr $e544 ; clear screen
lda #$00
sta back ; sfondo nero
lda #$01
sta text ; testo bianco
jsr setch
jsr setcol
jsr write
stop jmp stop
; CARICAMENTO CARATTERI PERSONALIZZATI
; ====================================
setch lda banksel ; seleziono il banco a $0000-$3fff
ora #%00000011
sta banksel
ldx #$00
set lda chars,x ; copia i caratteri a destinazione
sta chdest,x ; chdest = $3800
inx
cpx #$60
bne set
lda chloca ; seleziono locazione a $3800-$3fff
ora #%00001110 ; quindi XXXX111X
sta chloca
rts
; SETTAGGIO MEMORIA COLORE
; ========================
setcol lda #$d8 ; mem. colore inizia a $d800
sta colmem+1
lda #$00
sta colmem
lda back ; background
sta $d020
sta $d021
color lda text ; testo
ldy #$00 ; tutti i caratteri dello schermo bianchi
color_ sta (colmem),y ; fine a $dbe8, vado un pò oltre
dey
bne color_
inc colmem+1 ; se sono arrivato a 00 nuova pagina
lda colmem+1
cmp #$dc
bne color
rts
; MESSAGGIO
; =========
write ldx #$00
write_ lda msg,x
sta $05c5,x
inx
cpx #$0c
bne write_
rts
chars .byte $00, $00, $00, $ff, $00, $00, $00, $00 ;0 (-)
.byte $08, $08, $1c, $1c, $3e, $3e, $7f, $7f ;1 (triangolo)
.byte $7f, $41, $41, $41, $41, $41, $41, $7f ;2 (0)
.byte $04, $04, $04, $04, $04, $04, $04, $04 ;3 (1)
.byte $7f, $01, $01, $7f, $40, $40, $40, $7f ;4 (2)
.byte $7f, $01, $01, $7f, $01, $01, $01, $7f ;5 (3)
.byte $41, $41, $41, $41, $7f, $01, $01, $01 ;6 (4)
.byte $7f, $40, $40, $7f, $01, $01, $01, $7f ;7 (5)
.byte $7f, $40, $40, $7f, $41, $41, $41, $7f ;8 (6)
.byte $7f, $01, $01, $01, $01, $01, $01, $01 ;9 (7)
.byte $7f, $41, $41, $7f, $41, $41, $41, $7f ;10 (
.byte $7f, $41, $41, $7f, $01, $01, $01, $7f ;11 (9)
msg .byte $00, $01, $02, $03, $04, $05, $06, $07, $08, $09, $0a, $0b