LD A,Y1 calcola l'indirizzo della LD C,A colonna 0 nella riga Y1. AND 0C0H RRCA RRCA RRCA ADD A,40H LD H,A LD A,C AND 7 ADD A,H LD H,A LD A,C ADD A,A moltiplica per 4. ADD A,A AND 0E0H LD L,A LD A,Y2 controlla se Y1 e Y2 sono CP 0C0H compatibili. RET NC SUB C RET C EX AF,AF' LD C,X1 calcola l'indirizzo (X1,X1) LD A,L OR C LD L,A LD A,X2 CP 20H controlla se X1 e X2 sono RET NC compatibili. SUB C RET C INC A X2-X1+1=larghezza del LD C,A rettangolo. Salvalo in BC. LD B,0 PUSH BC PUSH HL LD DE,5BE0H muovi la prima riga del LDIR rettangolo nel buffer della stampante. POP HL POP BC EXX EX AF,AF' se la finestra e' alta un AND A solo pixel non c'e' piu' JR Z,NOSCROLL niente da scrollare. LD B,A B contiene il numero di NXTROW: righe rimaste da scrol- EXX lare. LD A,H calcola la colonna X1 INC A della prossima riga. LD D,A LD E,L AND 7 JR NZ,OUT LD A,E ADD A,20 LD E,A JR C,OUT LD A,D SUB 8 LD D,A OUT: EX DE,HL PUSH HL sposta questa riga su' di PUSH BC un pixel con una istru- LDIR zione di copia a blocchi. POP BC POP HL EXX ripeti finche' tutte le co- DJNZ NXTROW lonne sono scrollate. NOSCROLL: EXX LD A,(5B41H) vedi se fillare, rollare o CP 1 lasciare l'ultima riga. RET C se e' l'ultima, ritorna. JR NZ,FILL altrimenti filla. LD DE,5BE0H copia la riga salvata nel EX DE,HL buffer della stampante LDIR nell' ultima riga. RET FILL: filla l'ultima riga con LD A,(5B42H) il byte di fill. LD B,C NXTFILL: LD (HL),A INC HL DJNZ NXTFILL RET ritorna al Basic. END