Advertisement
verz

RollCol Z80

Apr 2nd, 2020
1,408
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. _vid .equ 4000h
  2. _MemCol .equ 5800h
  3. .org 8000H
  4.  
  5.  
  6. ;main
  7. _main
  8.  
  9.  
  10. ; ***********************************
  11. ;   FillVideo: riempie lo schermo di pallini
  12. ;
  13. ; un carattere pallino è una sequenza di byte:  0, 60, 126, 126, 126, 126, 60, 0
  14. ; la memoria video viene riempita:
  15. ;   - cancella lo schermo (byte 0)
  16. ;   - nel primo terzo di schermo: 6 linee di byte 60, a partire dalla seconda linea
  17. ;   - nel primo terzo di schermo: 4 linee di byte 126, a partire dalla terza linea
  18. ;   - infine il primo terzo di schermo viene copiato sugli altri due terzi (da 4000-4fff a 4800-57ff)
  19. ;
  20. ;   Non è la via più veloce, è quella più corta
  21.  
  22. ; pallino:
  23. ;       7 6 5 4 3 2 1 0
  24. ; 1)    . . . . . . . . = 0
  25. ; 2)    . . x x x x . . = 60
  26. ; 3)    . x x x x x x . = 126
  27. ; 4)    . x x x x x x . = 126
  28. ; 5)    . x x x x x x . = 126
  29. ; 6)    . x x x x x x . = 126
  30. ; 7)    . . x x x x . . = 60
  31. ; 8)    . . . . . . . . = 0
  32.  
  33. _FillVideo
  34.         ld hl,_vid  ; puntatore a MemVideo
  35.         push hl     ; salva HL (1 byte, è più corto)
  36.         ld a,l      ; azzera A (L=0)                    |
  37.         ld (hl),a   ; mette 0 nella prima cella video   |
  38.         ld de,4001h ; puntatore a seconda cella video   |
  39.         ld bc,6143  ; contatore = size(MemVideo)-1      | ClearScreen
  40.         ldir        ; copia 0 in tutta la MemVideo      |
  41.         ld a,60     ; valore parte corta del pallino                            |
  42.         ld hl,4100h ; puntatore a seconda linea video                           |
  43.         ld (hl),a   ; disegna la seconda linea della prima casella video        |
  44.         ld de,4101h ; puntatore a seconda linea, seconda cella                  | valore 60  
  45.         ld bc,1535  ; contatore = 6x32x8-1 (6 linee, nel primo terzo di video)  | copiato nelle linee da 2 a 7
  46.         ldir        ; esegue la copia                                           |
  47.         ld a,126    ; valore parte lunga del pallino            !      
  48.         ld hl,4200h ; puntatore a terza linea video             |
  49.         ld (hl),a   ; disegna la terza linea della prima cella  |
  50.         ld de,4201h ; puntatore a terza linea, seconda cella    | valore 126
  51.         ld bc, 1023 ; contatore = 4x32x8-1 (4 linee)            | copiato nelle linee da 3 a 6
  52.         ldir        ; esegue la copia                           |
  53.         pop hl      ; recupera HL (1 byte)                                  |
  54.         ;ld hl,4000h; 3 byte                                                |
  55.         ld de,4800h ; puntatore alla prima linea del secondo terzo di video | copia il primo terzo di video
  56.         ld bc,4096  ; 4096 byte = somma dei byte di due terzi di video      | negli altri due terzi
  57.         ldir        ; esegue la copia                                       |
  58.  
  59. ; ***********************************
  60. ;   ColVideo: colora i pallini con la successione di colori
  61. ;
  62. ; Ad ogni ciclo aumenta di uno il codice colore
  63. ; al 31mo carattere aumenta ulteriormente di uno
  64. _ColVideo
  65.     ld hl,_MemCol   ;
  66.     ld a,l          ; il primo colore =0
  67.     ld b,31         ; conta i 32 caratteri dello schermo
  68. _lp inc a           ; incrementa il codice colore  
  69.     dec b           ; decrementa il contatore di colonna    |
  70.     jr nz,_no       ; siamo all'ultima colonna?             | verifica di fine riga
  71.     ld b,31         ; se ultima colonna resetta il contatore    |
  72.     inc a           ; e avanza di un colore                     | a fine riga, resetta il contatore e colore++
  73. _no and 7h          ; solo i primi 3 bit indicano il colore
  74.     ld (hl),a       ; colora la cella video
  75.     inc hl          ; puntatore a prossima cella colore
  76.     ld d,a          ;                                   |
  77.     ld a,h          ; verifica se siamo alla fine       |
  78.     cp 5bh          ;                                   |   verifica condizione di loop
  79.     ld a,d          ;                                   |
  80.     jr nz, _lp      ; se non siamo alla fine, ciclo
  81.  
  82.    
  83. ; ***********************************
  84. ;   RollCol: cicla i colori dei pallini
  85. ;
  86. ; Ad ogni ciclo aumenta di uno il codice colore della cella,
  87. ; all'ottavo colore torna a 0
  88. _RollCol
  89.     ld hl,_MemCol
  90. _lr ld a,(hl)       ; legge il valore dalla cella       |
  91.     inc a           ; lo incrementa                     |
  92.     and 7           ; valori validi 0-7                 |   incrementa il valore della cella
  93.     ld (hl),a       ; riscrive il valore nella cella    |
  94.     inc hl          ; avanza il puntatore
  95.     ld a,h          ; verifica se siamo alla fine   |
  96.     cp 5bh          ;                               |   verifica condizione di loop
  97.     jr nz,_lr       ; se no cicla
  98.     jr z, _RollCol  ; se sì ricomincia
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement