Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- _vid .equ 4000h
- _MemCol .equ 5800h
- .org 8000H
- ;main
- _main
- ; ***********************************
- ; FillVideo: riempie lo schermo di pallini
- ;
- ; un carattere pallino è una sequenza di byte: 0, 60, 126, 126, 126, 126, 60, 0
- ; la memoria video viene riempita:
- ; - cancella lo schermo (byte 0)
- ; - nel primo terzo di schermo: 6 linee di byte 60, a partire dalla seconda linea
- ; - nel primo terzo di schermo: 4 linee di byte 126, a partire dalla terza linea
- ; - infine il primo terzo di schermo viene copiato sugli altri due terzi (da 4000-4fff a 4800-57ff)
- ;
- ; Non è la via più veloce, è quella più corta
- ; pallino:
- ; 7 6 5 4 3 2 1 0
- ; 1) . . . . . . . . = 0
- ; 2) . . x x x x . . = 60
- ; 3) . x x x x x x . = 126
- ; 4) . x x x x x x . = 126
- ; 5) . x x x x x x . = 126
- ; 6) . x x x x x x . = 126
- ; 7) . . x x x x . . = 60
- ; 8) . . . . . . . . = 0
- _FillVideo
- ld hl,_vid ; puntatore a MemVideo
- push hl ; salva HL (1 byte, è più corto)
- ld a,l ; azzera A (L=0) |
- ld (hl),a ; mette 0 nella prima cella video |
- ld de,4001h ; puntatore a seconda cella video |
- ld bc,6143 ; contatore = size(MemVideo)-1 | ClearScreen
- ldir ; copia 0 in tutta la MemVideo |
- ld a,60 ; valore parte corta del pallino |
- ld hl,4100h ; puntatore a seconda linea video |
- ld (hl),a ; disegna la seconda linea della prima casella video |
- ld de,4101h ; puntatore a seconda linea, seconda cella | valore 60
- ld bc,1535 ; contatore = 6x32x8-1 (6 linee, nel primo terzo di video) | copiato nelle linee da 2 a 7
- ldir ; esegue la copia |
- ld a,126 ; valore parte lunga del pallino !
- ld hl,4200h ; puntatore a terza linea video |
- ld (hl),a ; disegna la terza linea della prima cella |
- ld de,4201h ; puntatore a terza linea, seconda cella | valore 126
- ld bc, 1023 ; contatore = 4x32x8-1 (4 linee) | copiato nelle linee da 3 a 6
- ldir ; esegue la copia |
- pop hl ; recupera HL (1 byte) |
- ;ld hl,4000h; 3 byte |
- ld de,4800h ; puntatore alla prima linea del secondo terzo di video | copia il primo terzo di video
- ld bc,4096 ; 4096 byte = somma dei byte di due terzi di video | negli altri due terzi
- ldir ; esegue la copia |
- ; ***********************************
- ; ColVideo: colora i pallini con la successione di colori
- ;
- ; Ad ogni ciclo aumenta di uno il codice colore
- ; al 31mo carattere aumenta ulteriormente di uno
- _ColVideo
- ld hl,_MemCol ;
- ld a,l ; il primo colore =0
- ld b,31 ; conta i 32 caratteri dello schermo
- _lp inc a ; incrementa il codice colore
- dec b ; decrementa il contatore di colonna |
- jr nz,_no ; siamo all'ultima colonna? | verifica di fine riga
- ld b,31 ; se ultima colonna resetta il contatore |
- inc a ; e avanza di un colore | a fine riga, resetta il contatore e colore++
- _no and 7h ; solo i primi 3 bit indicano il colore
- ld (hl),a ; colora la cella video
- inc hl ; puntatore a prossima cella colore
- ld d,a ; |
- ld a,h ; verifica se siamo alla fine |
- cp 5bh ; | verifica condizione di loop
- ld a,d ; |
- jr nz, _lp ; se non siamo alla fine, ciclo
- ; ***********************************
- ; RollCol: cicla i colori dei pallini
- ;
- ; Ad ogni ciclo aumenta di uno il codice colore della cella,
- ; all'ottavo colore torna a 0
- _RollCol
- ld hl,_MemCol
- _lr ld a,(hl) ; legge il valore dalla cella |
- inc a ; lo incrementa |
- and 7 ; valori validi 0-7 | incrementa il valore della cella
- ld (hl),a ; riscrive il valore nella cella |
- inc hl ; avanza il puntatore
- ld a,h ; verifica se siamo alla fine |
- cp 5bh ; | verifica condizione di loop
- jr nz,_lr ; se no cicla
- jr z, _RollCol ; se sì ricomincia
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement