;************************ ; PLOT / SYMBOL - MCode ; Turbo Pascal Version ; 1987 by M.A. & E. W. ; Vers. 10/8/87 ; (incl. DotColor) ; (incl. Scr_Access) ; ; Modifiziert fuer SOKOBAN ; 2004 by W.C. ; ; Es fallen weg: ; _SYMB ; _GET ; _SCRACC ; ; Pixel nur setzen oder loeschen ; ; Neu: ; _CLRGRAF ; ;************************ ; ; GX_BEG equ 0f400h ; Start fuer das Paket ; VORSICHT: TURBO darf nicht ; darueber kompilieren XBIOS equ 0fc5ah ; Extended BIOS Adresse RUN_SCR equ 000e9h ; Aufruf Screen Environment ; ROLLER equ 0b600h ; Adresse des Roller RAM VIDRAM equ 05930h ; Startadresse des Videospeichers ; VIDLEN equ 8*32*90 ; Groesse des Videospeichers ; LOMASK equ 00000111b HIMASK equ 00000011b ROLMASK equ 11111000b ; PIXSET equ 0 PIXRES equ 1 ; .phase GX_BEG ; ; Bit anfassen ; _PLOT: ld de,(_X) ; X Koordinate holen (0..719 0000..02CF) ld hl,(_YM) ; Y Koordinate holen (0..255 00....FF) ; ld bc,PLOT call XBIOS ; Plotroutine aufrufen dw RUN_SCR ret ; _X: ds 2 ; X Koordinate _YM: ds 2 ; Y Koordinate und Modus ; M=0 : Pixel setzen ; M=1 : Pixel loeschen ; ; DE haelt X-Wert ; L haelt Y-Wert ; H haelt Modus ; PLOT: ld a,HIMASK and d ; Hoechsten Wert maskieren ld d,a ; X-Wert laden push hl ; Y-Wert und Modus sichern ld h,0 ; Nur Y-Wert add hl,hl ; Verdoppeln ld bc,ROLLER add hl,bc ; In das Roller RAM zeigen ld c,(hl) ; Adresse holen inc hl ld b,(hl) ld a,c ; Niederen Wert holen and ROLMASK ; Maskieren ld l,a ld h,b add hl,hl ; Wert verdoppeln add hl,de ; Adresse berechnen ld a,l and ROLMASK ld l,a ld a,c ; Niederen Wert holen and LOMASK or l ld l,a ld a,e ; Spaltenwert holen and LOMASK ; Und maskieren inc a ld b,a ; Als Laenge xor a scf ; Bit setzen loop: rra djnz loop ; Bit positionieren pop bc ld c,a ; Bit retten ld a,b ; Modus holen cp PIXSET ; Test Bit setzen jr nz,clear ld a,c or (hl) ; Bit setzen ld (hl),a ret clear: cp PIXRES ; Test Bit loeschen ret nz ld a,c cpl and (hl) ; Bit loeschen ld (hl),a ret ; ; Bildschirm loeschen - inklusiv der Statuszeile ; _CLRGRAF: ld bc,CLRGRAF call XBIOS ; Loeschroutine aufrufen dw RUN_SCR ret ; CLRGRAF: ld hl,VIDRAM ld (hl),0 ; Erstes Byte Null setzen ld de,VIDRAM+1 ld bc,VIDLEN-1 ldir ; Speicher nun komplett loeschen ret ; .dephase ; end