Autore Topic: Apertura Dei Bordi Laterali  (Letto 3627 volte)

Alberto

  • Utente
  • **
  • Post: 589
  • Gioco Preferito: Grand Prix Circuit
Apertura Dei Bordi Laterali
« il: 31 Dicembre 2004, 16:01:06 »
 ...E per completare il discorso sui bordi,questo è un esempio di apertura (parziale) dei bordi destro e sinistro,ottenuto sincronizzando la CPU e il raster con l'uso di una badline (non mi guardate con quella faccia,se qualcuno vuole informazioni su queste parolacce,il modo per inviarmi PM lo sapete  :D ;)  ).
In breve,è possibile aprire i bordi laterali (parzialmente o completamente) usando il registro $d016,che segnala al chip video il ciclo esatto in cui chiuderli o riaprirli.
Un vantaggio evidente dell'apertura dei bordi laterali consiste nel fatto di poter mettere sprite e far scorrere messaggi lungo tutto lo schermo.

La cosa interessante da notare è che aprendo i bordi laterali,rimangono aperti anche le rispettive zone dei bordi superiore e/o inferiore.

Per evitare che una badline possa rovinare il timing della routine (nel caso dell' apertura di più di 5 linee consecutive),basta manipolare ad ogni linea il registro $d011,in modo che il registro di scroll verticale e i tre bit meno significativi del raster non coincidano mai.

Codice: [Seleziona]
; apertura (parziale) dei bordi laterali mediante
; la sincronizzazione con una badline

* = 2049

dummy = $ffff      ;locazione improduttiva (serve a illustrare
                  ;meglio i ritardi)

.byte $0b,$08,$0a,$00,$9e
.text "2059"              ; SYS 2059
.byte $00

lda #0
sta $3fff          ;tinta unita per il fondo nascosto dal bordo
lda #$01
sta $dc0d          ;disattiva gli interrupt del timer A di CIA1
lda #<irq
sta $0314
lda #>irq
sta $0315          ;modifica il vettore di IRQ
lda #$1b
sta $d011          
lda #234
sta $d012          
lda #1
sta $d01a          ;attiva i raster interrupt alla linea 234
rts
                  ;+IRQ
                    
irq                ;38-41
    
    inc dummy  ;44-47
    dec dummy  ;50-53
    inc dummy  ;56-59
    dec dummy  ;62-2
    inc dummy  ;5-11   <-- LINEA 235
    dec dummy      ; ciclo di ritardo fino al ciclo 11-14
                          ; della linea 235
                  ; <-- il 6510 si ferma qui (badline-sincro)
                    
    inc $02        ;59
    ldx #76        ;61
    inc dummy      ;4   <-- LINEA 236
    dec dummy      ;10
    inc dummy      ;16          
    dec dummy      ;22
OPN inc dummy      ;28
    dec dummy      ;34
    inc dummy      ;40
    dec dummy      ;46      
    lda dummy      ;50
    lda #192      ;52
    sta $d016      ;56  <-- apre il bordo :)
SW  inc $d011      ;62  <-- evita le badline per prolungare
                  ;        l'apertura del bordo    
    lda SW        ;3  
    eor #32        ;5
    sta SW        ;9   <-- alterna istruzioni INC/DEC
    ldy #$1b      ;11
    lda #200      ;13
    sta $d016      ;17  <-- tiene aperto il bordo;)
    dex            ;19
    bne OPN        ;22
    
    sty $d011      ; ripristina lo scroll register
    lsr $d019      ; permette altri interrupt
    jmp $ea31