...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.
; 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