Autore Topic: Custom Chars E Colori  (Letto 2916 volte)

Fabrizio

  • Neo-iscritto
  • *
  • Post: 35
Custom Chars E Colori
« il: 31 Agosto 2005, 11:04:01 »
 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.  :confused:

---------------------------------------------------------------------------------------

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  (8)
      .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
 

iAN CooG

  • Utente
  • **
  • Post: 1774
    • http://iancoog.altervista.org
  • Gioco Preferito: Turbo Assembler, ActionReplay Monitor, DiskDemon
Custom Chars E Colori
« Risposta #1 il: 31 Agosto 2005, 13:23:52 »
 Il codice e' praticamente perfetto, hai solo fatto l'errore (piu' che comprensibile) di assumere che la memoria del C64 sia completamente azzerata al momento dell'accensione.
Tu copi una decina di caratteri a $3800 ma lasci il resto del 2 Kb al loro destino, qualunque cosa ci si trovi da $3860 a $3fff sara' la definizione per gli altri caratteri.
La JSR $e544 pulisce lo schermo riempiendolo di charatteri spazio ($20)
Prova a vedere cosa c'e' a $3800+($20*8)==$3900.

E non solo, sei incappato in uno dei tanti errori di implementazione di CCS.
Vice (cosi' come il c64) riempie la memoria con un pattern di 64 byte $00 e 64 byte $ff, ripetutamente. CCS sembra fare il contrario, prima i $ff poi i $00. Cosi' facendo a $3900 ci sono dei $ff anziche' zeri :)

Sia in Vice che CCS il pattern di riempimeto puo' essere forzato a solo zeri,
Vice: Settings/RAM settings/metti a 0 tutti e 3 i valori
CCS:alt-o/reset memory pattern=zeroes

Ma io per non sbagliare, metterei una bella pulizia del banco $3800-$3fff prima di settare i caratteri che ti servono.
Codice: [Seleziona]
   lda #$00
    tax
    ldy #$08
set2
    sta chdest,x
    inx
    bne set2
    inc set2+2
    dey
    bne set2

    ldx #$00
set
    lda chars,x; copia i caratteri a destinazione
    etcetc
-=[]=--- iAN CooG/HVSC^C64Intros ---=[]=-
- http://hvsc.c64.org - http://intros.c64.org -

Fabrizio

  • Neo-iscritto
  • *
  • Post: 35
Custom Chars E Colori
« Risposta #2 il: 31 Agosto 2005, 16:03:22 »
 Grazie mille, problema risolto e altre cose imparate!!!  :D

Codice: [Seleziona]
inc set2+2Bello questo passaggio, arguto, non ci avrei pensato a farlo così...  :o


Ciao! Fabrizio.