[Back to ANSI SWAG index] [Back to Main SWAG index] [Original]
{$S+,R-,V-,I-,N-,B-,F-}
{$M 16384,0,655360}
USES Dos, Crt;
VAR
AscStr : STRING;
Row,Col,
x : BYTE;
BaseOfScreen : WORD;
procedure FastWrite(Strng : String; Row, Col, Attr : Byte); assembler;
{ display strings directly on the CRT VERY FAST with color !! }
asm
PUSH DS { ;Save DS }
MOV CH,Row { ;CH = Row }
MOV BL,Col { ;BL = Column }
XOR AX,AX { ;AX = 0 }
MOV CL,AL { ;CL = 0 }
MOV BH,AL { ;BH = 0 }
DEC CH { ;Row (in CH) to 0..24 range }
SHR CX,1 { ;CX = Row * 128 }
MOV DI,CX { ;Store in DI }
SHR DI,1 { ;DI = Row * 64 }
SHR DI,1 { ;DI = Row * 32 }
ADD DI,CX { ;DI = (Row * 160) }
DEC BX { ;Col (in BX) to 0..79 range }
SHL BX,1 { ;Account for attribute bytes }
ADD DI,BX { ;DI = (Row * 160) + (Col * 2) }
MOV ES,BaseOfScreen { ;ES:DI points to BaseOfScreen:Row,Col }
LDS SI,DWORD PTR [Strng] { ;DS:SI points to St[0] }
CLD { ;Set direction to forward }
LODSB { ;AX = Length(St); DS:SI -> St[1] }
XCHG AX,CX { ;CX = Length; AL = WaitForRetrace }
JCXZ @FWExit { ;If string empty, exit }
MOV AH,Attr { ;AH = Attribute }
@FWDisplay:
LODSB { ;Load next character into AL }
{ ; AH already has Attr }
STOSW { ;Move video word into place }
LOOP @FWDisplay { ;Get next character }
@FWExit:
POP DS { ;Restore DS }
end; {asm block}
PROCEDURE dumphex(a:integer);
CONST
HEX = '0123456789ABCDEF';
VAR
inter,u : BYTE;
BEGIN
AscStr := '';
FOR u := 1 TO 4 DO
BEGIN
inter := a SHR 12;
a := a SHL 4;
AscStr := AscStr + (Copy(hex,inter+1,1));
END;
END;
Procedure GetAscii;
Var
A,B,C : String[15];
i : integer;
Begin
Row := 1;
For I := 0 to 255 Do
Begin
DumpHex(i);
A := Copy(AscStr,3,2);
Str(I,B);
If Length(B)=2 then B:=' '+B;
If Length(B)=1 then B:=' '+B;
c:=chr(i);
IF (i > 0) AND (i mod 23 = 0) THEN
BEGIN
Readkey;
Row := 1;
END ELSE
BEGIN
FastWrite(A+' '+B+' '+C, Row, 5 , 15);
inc(Row);
END;
End;
End;
PROCEDURE GetScreenType;
{ set screen address for color or monochrome .. }
BEGIN
ASM
mov BaseOfScreen,$B000
mov ax,$0F00
int $10
cmp al,2
je @XXX
cmp al,7
je @XXX
mov BaseOfScreen,$B800
@XXX :
end;
END;
BEGIN
ClrScr;
GetScreenType;
GetAscii;
Readkey;
END.
[Back to ANSI SWAG index] [Back to Main SWAG index] [Original]