{ 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). }