←ïðåäûäóùàÿ ñëåäóþùàÿ→
1 2
si
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,10h
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
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
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 '8x16.fnt',0
ErrorMsg db 'Cannot open 8x16.fnt in current directory. Aborting...', 13, 10, '$'
Install:
mov ax,3D00h ; îòpûòü ôàéë
mov dx,offset FileName
int 21h
jc errorExit
mov bx,ax ; bx - äåñêpèïòîp
mov cx,4096 ; êîëè÷åñòâî áàéò
mov dx,offset NewFont ; óêàçàòåëü íà áóôôåp
mov ah,3Fh ; ïpî÷èòàòü èç ôàéëà
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
int 21h
mov word ptr [OldHandler09],bx
mov word ptr [OldHandler09+2],es ; ïîëó÷àåì è ñîõpàíÿåì ñòàpûé âåêòî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
int 27h ; âûéòè è påç.
errorExit:
mov ah,09
mov dx,offset ErrorMsg
int 21h
mov ax,4C01h ; ïpîñòî âûõîä ïpè îøèáêå
int 21h
END
←ïðåäûäóùàÿ ñëåäóþùàÿ→
1 2
|
|