title 'Bit innerhalb eines Frames setzen' page 64 ; Copyright (C) Werner Cirsovius ; Hohe Weide 44 ; D-2000 Hamburg 20 ; Tel.:040/4223247 ; Version 1.0, November 1986 ; ===== Konstanten ===== row equ 90 shift macro reg mov a,reg rar mov reg,a endm bitacc: ; Setzt Bit innerhalb einer Framezeile ; EIN B haelt vertikalen Zaehler 0..7 ; DE haelt horizontalen Zaehler 0..719 ; HL haelt Basis-Adresse des Frames ; AUS Gewaehltes Bit gesetzt push d call shfrd ; Horizontales Byte 0..89 berechnen call shfrd call shfrd push d lxi d,row ; Zeilenbreite setzen mov a,b ; Multiplikator laden ora a jz muldon nxmul: dad d ; Produkt berechnen dcr b jnz nxmul muldon: pop d dad d ; Auf das echte Byte zeigen pop b push h xchg dad h ; Byteposition * 8 berechnen dad h dad h mov a,c sub l ; Modulo fuer Zugriff berechnen mov c,a mvi b,0 lxi h,bitmap dad b ; Auf zu setzendes Bit zeigen mov a,m pop h ora m ; Bit setzen mov m,a ret shfrd: ; Register DE rechts schieben ora a ; CARRY loeschen shift d ; Mit dem hohen Wert anfangen shift e ; Danach das niedere Byte ret bitmap: ; Tabelle mit anzufassenden Bits ; Achtung: Das MSB ist das linke Bit db 10000000b db 01000000b db 00100000b db 00010000b db 00001000b db 00000100b db 00000010b db 00000001b end