; ; ; ;PROGRAMM DRAW ; XBIOS equ 0fc5ah SCR_RUN equ 000e9h .phase 0f162h setpnt equ 0f0dch ;]BERNAHME DER WERTE VON BASIC ; ; DRAW(zeile%,spalte%,modus%) ; ; zeile% = 0..255 ; spalte% = 0..719 ; modus% = 0 (L|schen), 1 (Setzen), 2 (Tauschen) ; ld a,(hl) ex de,hl ld e,(hl) inc hl ld d,(hl) ld h,b ld l,c ld c,(hl) ld b,a ld a,(zeile2) ld hl,(spalt2) ;EINSPRUNGADRESSE F]R ANDERE ASSEMBLERPROGRAMME ;A: ZEILE 2. B: ZEILE 1. C: MODUS. DE: SPALTE 1. HL: SPALTE 2 ld (zeile2),a ld (zeile1),bc ld (spalt1),de ld (spalt2),hl ;ZEILENDIFFERENZ BILDEN sub b ld b,1 jr nz,plumi dec b plumi: jr nc,sgn dec b dec b cpl inc a sgn: ld c,a ;C: ABSOLUTWERT DER ZEILENDIFFERENZ ld a,b ld (zsgn),a ;SIGNUMWERT DER ZEILENDIFFERENZ ABSPEICHERN xor a ld b,a ;BC: ABSOLUTWERT DER ZEILENDIFFERENZ ;SPALTENDIFFERENZ BILDEN sbc hl,de ld de,1 jr nz,plumi1 dec de plumi1: jr nc,sgn1 dec de dec de ld a,h cpl ld h,a ld a,l cpl ld l,a inc hl sgn1: ld (ssgn),de ;SIGNUMWERT DER SPALTENDIFFERENZ ABSPEICHERN push hl pop de ;DE: ABSOLUTWERT DER SPALTENDIFFERENZ push hl xor a sbc hl,bc ld a,h ld (flag),a rla pop hl jr nc,spamax push de push bc push bc pop hl pop de pop bc spamax: ld (zaehler),hl srl h rr l ;HL: INT(M/2) ld (summe),hl ld (zeidi),bc ld (spaldi),de ;UMSCHALTEN AUF BANK 0 ld bc,routin call XBIOS dw SCR_RUN ret routin: loop: ld bc,(zeile1) ld de,(spalt1) call setpnt ld a,(flag) rla jr c,zeinor ld hl,(spalt1) ld bc,(ssgn) add hl,bc ld (spalt1),hl jr con zeinor: ld bc,(zeile1) ld a,(zsgn) add a,b ld (zeil1),a con: ld hl,(summe) ld bc,(zeidi) xor a sbc hl,bc ld (summe),hl jr nc,keidia ld bc,(spaldi) add hl,bc ld (summe),hl ld a,(flag) rla jr nc,nor ld hl,(spalt1) ld bc,(ssgn) add hl,bc ld (spalt1),hl jr co nor: ld bc,(zeile1) ld a,(zsgn) add a,b ld (zeil1),a co: keidia: ld hl,(zaehler) dec hl ld (zaehler),hl bit 7,h jr z,loop ret zeile1: db 0 zeil1: db 0 spalt1: dw 0 zeile2: db 0 spalt2: dw 0 zsgn: dw 0 ssgn: dw 0 flag: db 0 zaehler: dw 0 summe: dw 0 zeidi: dw 0 spaldi: dw 0 .dephase end