Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; 10 SYS2061
- *=$0801
- BYTE $0B, $08, $0A, $00, $9E, $32, $30, $36, $31, $00, $00, $00
- pnt1 = $fb
- pnt1L = $fb
- pnt1H = $fc
- pnt2 = $fd
- pnt2L = $fd
- pnt2H = $fe
- Y1 = $2
- Y2 = $52
- rowlen = 40
- ScrnBase = $0400
- ScrnCol = $d800
- ScrnColCent = $d9e0
- ScrnColLast = $dbc0
- cFC=81
- main
- ; ; ---------------------------------------------
- ; ; ColorScreen
- ldx #40 ; contatore di colonna
- lda #$4 ; puntatore $fb/fc a $0400
- sta $fc
- lda #$d8
- sta $fe ; puntatore $fd/fe a $d800
- _pp ldy #0
- sty $fd
- sty $fb
- _rp sta ($fd),y ; memorizza il colore
- ;pha ; salva il colore
- lda #cFC ; codice del pallino
- sta ($fb),y ; pallino in cella video
- ;pla ; recupera il colore
- lda ($fd),y
- clc
- adc #1 ; codice colore successivo
- dex ; colonna precedente
- bne _nxt ; se non siamo alla prima colonna salta oltre
- ldx #40 ; reset contatore di colonna
- clc
- adc #9 ; codice colore +9 (ogni riga è +9 dal colore dell'ultima colonna della riga precedente)
- _nxt iny ; prossimi elementi, con gli stessi puntatori
- bne _rp ; se Y<>0 (cioè se posso usare gli stessi puntatori)
- inc $fc ; incremento puntatori
- inc $fe
- ldy $fe
- cpy #$dc ; ho superato la MemCol?
- bne _pp ; se no cicla
- jsr RollCol
- ; ; ---------------------------------------------
- ; ; RollCol
- RollCol
- ldx #250 ; ciclo (all'indietro) sulla MemCol
- lpRCol dec ScrnCol-1,x ; incremento ogni singolo byte di MemCol
- dec ScrnCol+249,x
- ; inc ScrnCol+499,x
- ; inc ScrnCol+749,x ; incremento anche 24 byte inutilizzati oltre MemCol
- dex
- bne lpRCol
- jsr CopyQuad3
- lda #250
- _rit cmp $d012
- bne _rit
- jmp RollCol
- ; ; ---------------------------------------------
- ; ; CopyQuad: crea l'effetto Warp
- ; ;
- ; ; Ricopia il primo quadrante sugli altri 3
- ; ; Copia linea per linea, inclusa la linea centrale
- CopyQuad3
- lda #>ScrnCol ; puntatore alla prima riga di caratteri di schermo
- sta pnt1H
- lda #<ScrnCol
- sta pnt1L
- lda #>ScrnColLast ; puntatore all'ultima riga di caratteri
- sta pnt2H
- lda #<ScrnColLast
- sta pnt2L
- _cq3 jsr CopyLine2 ; chiama la routine che copia una linea
- lda #<ScrnColCent
- cmp pnt1L ; se era la linea centrale
- beq _rts ; esce
- clc
- lda #rowlen ; aggiorna i puntatori di riga: +40 dall'alto...
- adc pnt1L
- sta pnt1L
- bcc _n
- inc pnt1H
- _n sec
- lda pnt2L ; ...-40 dal basso
- sbc #rowlen
- sta pnt2L
- bcs _cq3
- dec pnt2H
- bne _cq3 ; cicla sempre ( =jmp _cq3 )
- ; ; ---------------------------------------------
- ; ; Copia una linea negli altri quadranti
- CopyLine2
- ldy #rowlen/2 ; il loop di copia parte da centro riga
- sty Y2
- dey
- _cl2 lda (pnt1),y ; legge il primo quadrante
- sta (pnt2),y ; scrive il terzo quadrante
- sty Y1
- ldy Y2 ; inverte lo spiazzamento rispetto a centro riga
- sta (pnt1),y ; scrive il secondo quadrante
- sta (pnt2),y ; scrive il quarto quadrante
- ldy Y1
- inc Y2
- dey
- bpl _cl2
- _rts rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement