Advertisement
verz

RollCol Warp 6502

Apr 2nd, 2020
1,208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; 10 SYS2061
  2.  
  3. *=$0801
  4.  
  5.         BYTE    $0B, $08, $0A, $00, $9E, $32, $30, $36, $31, $00, $00, $00
  6.  
  7. pnt1 = $fb
  8. pnt1L = $fb
  9. pnt1H = $fc
  10. pnt2 = $fd
  11. pnt2L = $fd
  12. pnt2H = $fe
  13. Y1 = $2
  14. Y2 = $52
  15. rowlen = 40
  16. ScrnBase = $0400
  17. ScrnCol  = $d800
  18. ScrnColCent = $d9e0
  19. ScrnColLast = $dbc0
  20. cFC=81
  21.  
  22.  
  23. main
  24. ;        ; ---------------------------------------------
  25. ;        ; ColorScreen
  26.  
  27.         ldx #40         ; contatore di colonna
  28.         lda #$4         ; puntatore $fb/fc a $0400
  29.         sta $fc
  30.         lda #$d8
  31.         sta $fe         ; puntatore $fd/fe a $d800
  32. _pp     ldy #0
  33.         sty $fd
  34.         sty $fb
  35.  
  36. _rp     sta ($fd),y     ; memorizza il colore
  37.         ;pha             ; salva il colore
  38.         lda #cFC        ; codice del pallino
  39.         sta ($fb),y     ; pallino in cella video
  40.         ;pla             ; recupera il colore
  41.         lda ($fd),y
  42.         clc
  43.         adc #1          ; codice colore successivo
  44.         dex             ; colonna precedente
  45.         bne _nxt        ; se non siamo alla prima colonna salta oltre
  46.         ldx #40         ; reset contatore di colonna
  47.         clc
  48.         adc #9          ; codice colore +9 (ogni riga è +9 dal colore dell'ultima colonna della riga precedente)
  49. _nxt    iny             ; prossimi elementi, con gli stessi puntatori
  50.         bne _rp         ; se Y<>0 (cioè se posso usare gli stessi puntatori)
  51.         inc $fc         ; incremento puntatori
  52.         inc $fe
  53.         ldy $fe
  54.         cpy #$dc        ; ho superato la MemCol?
  55.         bne _pp         ; se no cicla
  56.  
  57.  
  58.         jsr RollCol
  59.  
  60. ;        ; ---------------------------------------------
  61. ;        ; RollCol
  62. RollCol
  63.         ldx #250                ; ciclo (all'indietro) sulla MemCol
  64. lpRCol  dec ScrnCol-1,x         ; incremento ogni singolo byte di MemCol
  65.         dec ScrnCol+249,x
  66. ;        inc ScrnCol+499,x
  67. ;        inc ScrnCol+749,x       ; incremento anche 24 byte inutilizzati oltre MemCol
  68.         dex
  69.         bne lpRCol
  70.         jsr CopyQuad3
  71.         lda #250
  72. _rit    cmp $d012
  73.         bne _rit
  74.         jmp RollCol
  75.  
  76.  
  77.  
  78.  
  79.  
  80. ;        ; ---------------------------------------------
  81. ;        ; CopyQuad: crea l'effetto Warp
  82. ;        ;
  83. ;        ; Ricopia il primo quadrante sugli altri 3
  84. ;        ; Copia linea per linea, inclusa la linea centrale
  85. CopyQuad3
  86.         lda #>ScrnCol     ; puntatore alla prima riga di caratteri di schermo
  87.         sta pnt1H
  88.         lda #<ScrnCol
  89.         sta pnt1L
  90.         lda #>ScrnColLast ; puntatore all'ultima riga di caratteri
  91.         sta pnt2H
  92.         lda #<ScrnColLast
  93.         sta pnt2L
  94. _cq3       jsr CopyLine2   ; chiama la routine che copia una linea
  95.            lda #<ScrnColCent
  96.            cmp pnt1L       ; se era la linea centrale
  97.            beq _rts        ; esce
  98.  
  99.            clc
  100.            lda #rowlen     ; aggiorna i puntatori di riga: +40 dall'alto...
  101.            adc pnt1L
  102.            sta pnt1L
  103.            bcc _n
  104.            inc pnt1H
  105.  
  106. _n         sec
  107.            lda pnt2L       ; ...-40 dal basso
  108.            sbc #rowlen
  109.            sta pnt2L
  110.            bcs _cq3
  111.            dec pnt2H
  112.  
  113.            bne _cq3        ; cicla sempre ( =jmp _cq3 )
  114.  
  115. ;        ; ---------------------------------------------
  116. ;        ; Copia una linea negli altri quadranti
  117. CopyLine2
  118.         ldy #rowlen/2       ; il loop di copia parte da centro riga
  119.         sty Y2
  120.         dey
  121. _cl2        lda (pnt1),y    ; legge il primo quadrante
  122.             sta (pnt2),y    ; scrive il terzo quadrante
  123.             sty Y1
  124.             ldy Y2          ; inverte lo spiazzamento rispetto a centro riga
  125.             sta (pnt1),y    ; scrive il secondo quadrante
  126.             sta (pnt2),y    ; scrive il quarto quadrante
  127.             ldy Y1
  128.             inc Y2
  129.             dey
  130.             bpl _cl2
  131. _rts    rts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement