[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]
{ Keld Hansen }
Procedure SetCrtC; NEAR; Assembler;
Const
HorizParms : Array[1..2,1..7] of Word =
(($6A00,$5901,$5A02,$8D03,$6004,$8505,$2D13),
($5F00,$4F01,$5002,$8203,$5504,$8105,$2813));
Asm
PUSH DX
MOV DX,ES:[0063h]
PUSH BX
MOV AX,1110h
xor CX,CX
INT 10h
POP BX
MOV AL,11h
OUT DX,AL
INC DX
in AL,DX
DEC DX
MOV AH,AL
MOV AL,11h
PUSH AX
and AH,7Fh
OUT DX,AX
xor BH,BH
SUB BL,8
NEG BX
and BX,14
LEA SI,[BX+OFFSET HorizParms]
MOV CX,7
@LOOP: LODSW
OUT DX,AX
LOOP @LOOP
POP AX
OUT DX,AX
POP DX
end;
Procedure SetCharWidth(W : Word); Assembler;
Asm
MOV ES,Seg0040
MOV BL,Byte PTR W
MOV BH,ES:[0085h]
CALL SetCrtC
MOV DX,03C4h
MOV AX,0100h
CLI
OUT DX,AX
MOV BX,0001h
CMP W,8
JE @L01
MOV BX,0800h
@L01: MOV AH,BL
MOV AL,1
OUT DX,AX
MOV AX,0300h
OUT DX,AX
STI
MOV BL,13h
MOV AX,1000h
INT 10h
MOV AX,1000h
MOV BX,0F12h
INT 10h
xor DX,DX
MOV AX,720
div W
MOV ES:[004Ah],AX
end;
{
SetCharWidth can then be called With 8 (giving 90 Characters per line) or 9
(giving 80 Characters per line) after having switched into f.ex. 80x28 (by
selecting the appropriate number of scan lines and font size).
}
[Back to SCREEN SWAG index] [Back to Main SWAG index] [Original]