home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
02
/
ldm
/
memwrite.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-11-10
|
5KB
|
113 lines
(* ------------------------------------------------------ *)
(* MEMWRITE.PAS *)
(* ------------------------------------------------------ *)
UNIT MemWrite;
INTERFACE
PROCEDURE WriteMem(x,y : INTEGER; s : STRING; Farbe : BYTE);
PROCEDURE WriteAtt(x, y, Len, Farbe : INTEGER);
PROCEDURE WritePart(x, y, Len, Disp : INTEGER; S : STRING);
VAR
VideoBuffer : WORD;
IMPLEMENTATION
CONST
MonoScreen = $B000;
ColorScreen = $B800;
LineTab : ARRAY [0..25] OF INTEGER =
(0,-1,79,159,239,319,399,479,559,639,
719,799,879,959,1039,1119,1199,
1279,1359,1439,1519,1599,1679,1759,
1839,1919);
VAR
ScreenMode : BYTE ABSOLUTE $0040:$0049;
PROCEDURE InitTest;
BEGIN
IF ScreenMode = 7 THEN VideoBuffer := MonoScreen
ELSE VideoBuffer := ColorScreen;
END;
PROCEDURE WriteMem(x,y : INTEGER; s : STRING; Farbe : BYTE);
{ Schreibt s mit Farbe an Position xy }
BEGIN
INLINE($8B/$76/<Y); { MOV SI,[BP+<Y] }
INLINE($D1/$E6); { SHL SI }
INLINE($8B/$BC/>LINETAB); { MOV DI,[SI+>LINETAB] }
INLINE($03/$7E/<X); { ADD DI,[BP+<X] }
INLINE($D1/$E7); { SHL DI }
INLINE($8E/$06/>VIDEOBUFFER); { MOV ES,[VIDEOBUFFER] }
INLINE($1E); { PUSH DS }
INLINE($8C/$D0); { MOV AX,SS }
INLINE($8E/$D8); { MOV DS,AX }
INLINE($8A/$8E/>S); { MOV CL,[BP+S] }
INLINE($20/$C9); { AND CL,CL }
INLINE($74/<$0D); { JZ $0D }
INLINE($30/$ED); { XOR CH,CH }
INLINE($8A/$66/<FARBE); { MOV AH,[BP+<FARBE] }
INLINE($8D/$B6/>S+1); { LEA SI,[BP+S+1] }
INLINE($AC); { LODSB }
INLINE($AB); { STOSW }
INLINE($E2/<$FC); { LOOP $FC }
INLINE($1F); { POP DS }
END;
PROCEDURE WritePart(x, y, Len, Disp : INTEGER; S : STRING);
{ Schreibt s ab Disp in ein Len breites }
{ Feld. }
BEGIN
INLINE($8B/$76/<Y); { MOV SI,[BP+<Y] }
INLINE($D1/$E6); { SHL SI }
INLINE($8B/$BC/>LINETAB); { MOV DI,[SI+>LINETAB] }
INLINE($03/$7E/<X); { ADD DI,[BP+<X] }
INLINE($D1/$E7); { SHL DI }
INLINE($8A/$96/>S); { MOV DL,[BP+S] }
INLINE($30/$F6); { XOR DH,DH }
INLINE($8A/$4E/<LEN); { MOV CL,[BP+<LEN] }
INLINE($30/$ED); { XOR CH,CH }
INLINE($8B/$76/<DISP); { MOV SI,[BP+<DISP] }
INLINE($8E/$06/>VIDEOBUFFER); { MOV ES,[VIDEOBUFFER] }
INLINE($39/$F2); { CMP DX,SI }
INLINE($7C/<$6); { JL $6 }
INLINE($8A/$82/$FF00); { MOV AL,[BP+SI+$FF00] }
INLINE($EB/$2); { JMP $2 }
INLINE($B0/32); { MOV AL,32 'Space' }
INLINE($26); { ES: }
INLINE($88/$05); { MOV [DI],AL }
INLINE($46); { INC SI }
INLINE($47); { INC DI }
INLINE($47); { INC DI }
INLINE($E2/<$EC); { LOOP $EC }
END;
PROCEDURE WriteAtt(x, y, Len, Farbe : INTEGER);
{ Schreibt Len Attribute mit Farbe an xy }
BEGIN
INLINE($8B/$76/<Y); { MOV SI,[BP+<Y] }
INLINE($D1/$E6); { SHL SI }
INLINE($8B/$BC/>LINETAB); { MOV DI,[SI+>LINETAB] }
INLINE($03/$7E/<X); { ADD DI,[BP+<X] }
INLINE($D1/$E7); { SHL DI }
INLINE($47); { INC DI }
INLINE($8A/$4E/$08); { MOV CL,[BP+$08] }
INLINE($20/$C9); { AND CL,CL }
INLINE($74/<$10); { JZ $10 }
INLINE($30/$ED); { XOR CH,CH }
INLINE($8A/$46/$06); { MOV AL,[BP+$06] }
INLINE($8E/$06/>VIDEOBUFFER); { MOV ES,[VIDEOBUFFER] }
INLINE($26); { ES: }
INLINE($88/$05); { MOV [DI],AL }
INLINE($47); { INC DI }
INLINE($47); { INC DI }
INLINE($E2/<$F9); { LOOP $F9 }
END;
BEGIN
InitTest;
END.
(* ------------------------------------------------------ *)
(* Ende von MEMWRITE.PAS *)