; PROGRAMM SETCHAR ; MAXZEIL equ 248 MAXSPAL equ 712 SPALMSK equ 00000111b EVEN equ 11111110b ALLE equ 11111111b ROLLER equ 0b600h CHARAM equ 0b800h XBIOS equ 0fc5ah SCR_RUN equ 000e9h .phase 0f000h ;]BERNAHME DER WERTE VON BASIC ; ; SETCHAR(zeile%,spalte%,zeichen%) ; ; zeile% = 0..248 ; spalte% = 0..712 ; ld a,(hl) ex de,hl ld e,(hl) inc hl ld d,(hl) ld h,b ld l,c ld c,(hl) ;EINSPRUNGADRESSE F]R ANDERE ASSEMBLERPROGRAMME ;A: ZEILE. C: CHARACTER. DE: SPALTE ;BEREICHSKONTROLLE cp MAXZEIL+1 jr c,ok1 sub MAXZEIL ok1: ld (zeile),a ld a,d cp HIGH MAXSPAL jr c,ok2 jr z,con ld d,0 jr ok2 con: ld a,e cp 1 + LOW MAXSPAL jr c,ok2 sub LOW MAXSPAL ld e,a ok2: ld b,e ld a,e and EVEN ld e,a ld (spalte),de ld a,c ld (zeich),a ;MASKEN ERSTELLEN ld a,b and SPALMSK ld (shift),a ld b,a ld a,ALLE jr z,noshft shft: srl a djnz shft noshft: ld l,a cpl ld h,a ld (maske),hl ;ADRESSE IM CHAR RAM BERECHNEN ld l,c ld h,0 add hl,hl add hl,hl add hl,hl ld a,h add a,HIGH CHARAM ld h,a ld (char),hl ;UMSCHALTEN AUF BANK 0 ld bc,routin call XBIOS dw SCR_RUN ret ; routin: ld b,8 loop: push bc ;ADRESE IM ROLLER RAM BERECHNEN ld hl,zeile ld e,(hl) ld a,(hl) inc (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 hl,(char) ld de,(spalte) add ix,de ;ZEICHEN VERSCHIEBEN ld d,(hl) ld e,0 ld a,(shift) ld b,a or a jr z,noshfl shftl: srl d rr e djnz shftl ;ZEILE SCHREIBEN noshfl: ld a,(ix+0) ld hl,(maske) and h or d ld (ix+0),a ld a,(ix+8) and l or e ld (ix+8),a ;N[CHSTE ZEILE ld hl,char inc (hl) pop bc djnz loop ret zeile: db 0 spalte: dw 0 zeich: db 0 shift: db 0 maske: dw 0 char: dw 0 .dephase end