Autore Topic: Video Bank E Start Address  (Letto 1959 volte)

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Video Bank E Start Address
« il: 19 Aprile 2010, 17:27:10 »
 Pensavo di aver capito il meccanismo di selezione del video bank e dell'indirizzo di partenza della memoria video ma mi sono imbattuto in un vicolo cieco...
Con il codice allegato riesco a scrivere ed a visualizzare le modifiche sullo schermo ma non a leggere i valori:

Codice: [Seleziona]
lda #$15  ; Seleziono banco 2 ($8000-$BFFF)
sta $dd00

lda #$E4 ; Video a $3800 + $8000
sta $d018

lda #$01
sta $8000+$3800+10;Mettiamo una A al carattere 10

lda $8000+$3800+10;Leggo la A al carattere 10 (non funziona!)
sta $8000+$3800 ;La scrivo al carattere 0

In pratica riesco ad inserire un valore assoluto in $8000+$3800 ma non riesco a caricare l'accumulatore con il dato presente a tale indirizzo!!

Aiuto...

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
Video Bank E Start Address
« Risposta #1 il: 19 Aprile 2010, 19:00:04 »
 Ciao Antoniomauro,
 prima di tutto un breve estratto da codebase:

Citazione
L'indirizzo di memoria $0001 controlla se determinati banchi di memoria
devono essere associati a RAM, ROM o I/O. Il suo funzionamento é il
seguente:

$0001=$37 (Valore di default)
A000-BFFF Basic Rom
D000-DFFF I/O
E000-FFFF Kernal Rom

$0001=$36
A000-BFFF RAM
D000-DFFF I/O
E000-FFFF Kernal Rom

$0001=$35
A000-BFFF RAM
D000-DFFF I/O
E000-FFFF RAM

$0001=$34
A000-BFFF RAM
D000-DFFF RAM
E000-FFFF RAM

$0001=$33
A000-BFFF RAM
D000-DFFF Character ROM
E000-FFFF RAM

Detto questo, il tuo codice non é in grado di leggere il valore che hai appena scritto proprio perché di default $0001 é uguale a $37 e perciò nella locazione $B80A ($8000+$3000+10) si trova in realtà la BASIC ROM ($A000-$BFFF). Nota bene però che la scrittura nella locazione $B80A finisce comunque in RAM, tant'é che dovrebbe esserti apparsa la "A" dove l'hai scritta: vale infatti come regola generale che nelle zone nelle quali é "montato" un banco ROM é comunque possibile scrivere in RAM.
Alla luce di questo il tuo codice dovrebbe essere modificato nel modo seguente:

Codice: [Seleziona]
; Setto $01 in modo tale da rendere visibile la
; RAM nella zona A000-BFFF
lda #$36
sta $01

lda #$15 ; Seleziono banco 2 ($8000-$BFFF)
sta $dd00
lda #$E4; Video a $3800 + $8000
sta $d018
lda #$01
sta $8000+$3800+10;Mettiamo una A al carattere 10
lda $8000+$3800+10;Leggo la A al carattere 10 (non funziona!)
sta $8000+$3800;La scrivo al carattere 0

; Rimetto in modalità normale altrimenti quanto ritorno
; in BASIC il 64 va in crash perché manca la sua ROM
lda #$37
sta $01

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Video Bank E Start Address
« Risposta #2 il: 20 Aprile 2010, 09:12:39 »
 Immaginavo qualcosa del genere ma non avevo pensato alla rom del basic!
Grazie del prezioso approfondimento!

ps: cos'è "codebase"? Un libro? Un tutorial?

Freshness79

  • Utente
  • **
  • Post: 128
  • Gioco Preferito: Dizzy collection
Video Bank E Start Address
« Risposta #3 il: 21 Aprile 2010, 01:46:24 »
 Hai ragione, davo per scontato che conoscessi codebase, ma visto che sei nuovo é ragionevole tu te lo chieda.
Codebase64 é una raccolta di documenti, articoli e sorgenti riguardanti il commodore 64: a mio avviso é un ottimo punto di partenza per chi si voglia cimentare nella programmazione del biscottone.
La trovi al seguente URL: Codebase64
Buona navigazione, ho visto anche l'altro programma che hai postato, mi sembra che mastichi piuttosto bene il 6502! ;)
 

antoniomauro

  • Utente
  • **
  • Post: 91
  • Gioco Preferito: IK+
Video Bank E Start Address
« Risposta #4 il: 21 Aprile 2010, 09:41:27 »
 Grazie del link!
E' da quando ero bambino che desideravo capire come facessero i giochi del c64 ad essere cosi elaborati rispetto alle schifezze che facevo io in basic!!
Ora a quasi 34 anni ho deciso di colmare questa mia lacuna!!