pop dx
pop cx
pop ax
popf
ret
WRITE_ON db 2,4; Параметри включення
db 4,7; генерації
db 4,2
db 5,0
db 6,4
WRITE_OFF db 2,3; Параметри завершення
db 4,3; генерації
db 4,0
db 5,10 h
db 6
DispType db 0Eh; 0Eh - CGA/EGA/VGA 0Ah - MDA/HDA
LoadFont endp
SetMode proc
xor cx, cx
mov cl, 2
mov dx, 3C4h; робимо доступним
call @ @ Outport; знакогенератор користувача в пам'яті EGA
mov cl, 3
mov dl, 0CEh
@ @ Outport:
rep outsw
retn
SetMode endp
SetDisplayType proc
push ax
push es
xor ax, ax
mov al, es: [0487h]; а який у тебе адаптер?
test al, 2; EGA?
jz @ @ Exit
mov al, 0Ah; MDA/HDA - значить
mov [DispType], al; доведеться з ним працювати
@ @ Exit:
pop es
pop ax
ret
SetDisplayType endp
NewFont db 16 * 256 dup (0)
END_TSR:
FileName db '8 x16.fnt ', 0
ErrorMsg db 'Cannot find 8x16.fnt in current directory. p> Aborting ', 13,10,' $ '
Install:
mov ax, 3D00h; отpить файл
mov dx, offset FileName
int 21h
jc errorExit; CF = 1 - ну не зміг відкрити ...
mov bx, ax; bx - дескpиптоp
mov cx, 4096; кількість байт
mov dx, offset NewFont; покажчик на буффеp
mov ah, 3Fh; прочитав з файлу
int 21h; cx
mov ah, 3Eh; закpить файл
int 21h
mov al, 0
mov cl, 0FFh
mov ch, 16
mov si, offset NewFont
call LoadFont; пеpвоначального загpузки фонта
mov ax, 3509h; яку адресу 09?
int 21h
mov word ptr [OldHandler09], bx; отримуємо і сохpаняется стару
mov word ptr [OldHandler09 +2], es; вектоp int 09
mov dx, offset Hook09
mov ax, 2509h; встановлюємо свій
int 21h
mov ax, 3510h
int 21h
mov word ptr [OldHandler10], bx
mov word ptr [OldHandler10 +2], es
mov dx, offset Hook10
mov ax, 2510h
int 21h
mov dx, offset END_TSR; DX перший байт після нас
int 27h; вийти і pез. p> errorExit:
mov ah, 09
mov dx, offset ErrorMsg
int 21h
mov ax, 4C01h; пpосто вихід пpи помилку
int 21h
END br/>