; ; ; ;PROGRAMM SETPOINT ; MAXSPAL equ 719 HIMASK equ 11111000b LOMASK equ 00000011b SPALMSK equ 00000111b HIBIT equ 10000000b ROLLER equ 0b600h XBIOS equ 0fc5ah SCR_RUN equ 000e9h .phase 0f0bah ;]BERNAHME DER WERTE VON BASIC ; ; SETPOINT(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 ;EINSPRUNGADRESSE F]R ANDERE ASSEMBLERPROGRAMME ;B: ZEILE. C: MODUS. DE: SPALTE ;BEREICHSKONTROLLE ld (modus),bc ld (spalte),de ;UMSCHALTEN AUF BANK 0 ld bc,routin call XBIOS dw SCR_RUN ret ; routin: ld bc,(modus) ld de,(spalte) ein: ld a,b ld (zeile),a ld a,d cp HIGH MAXSPAL jr c,ok jr z,con ld d,0 jr ok con: ld a,e cp 1 + LOW MAXSPAL jr c,ok sub LOW MAXSPAL ld e,a ok: ld b,e ld a,e and HIMASK ld e,a ld (spalte),de ld a,c and LOMASK ld (modus),a ;MASKEN ERSTELLEN ld a,b and SPALMSK ld (shift),a ld b,a ld a,HIBIT jr z,noshft shft: srl a djnz shft noshft: ld l,a cpl ld h,a ld (maske),hl ;ADRESE IM ROLLER RAM BERECHNEN ld hl,zeile ld e,(hl) ld a,(hl) and SPALMSK ld c,a ld d,0 ex de,hl add hl,hl ld a,h add a,HIGH ROLLER ld h,a ;ADRESSE IM SCREEN RAM BERECHNEN ld e,(hl) inc hl ld d,(hl) ex de,hl add hl,hl ld b,0 or a sbc hl,bc ;ADRESSE DES BYTES push hl pop ix ld de,(spalte) add ix,de ;PUNKT SETZEN/L\SCHEN/AUSTAUSCHEN ld a,(modus) ld b,(ix+0) ld hl,(maske) or a jr nz,nill loesch: ld a,b and h ld (ix+0),a ret nill: rra jr nc,austau setz: ld a,b or l ld (ix+0),a ret austau: ld a,b and l jr z,setz jr loesch modus: db 0 zeile: db 0 spalte: dw 0 shift: db 0 maske: dw 0 .dephase end