.186 _TEXT segment byte public 'CODE' DGROUP group _DATA,_BSS assume cs:_TEXT,ds:DGROUP,ss:DGROUP _TEXT ends _DATA segment word public 'DATA' d@ label byte d@w label word _DATA ends _BSS segment word public 'BSS' b@ label byte b@w label word _BSS ends _TEXT segment byte public 'CODE' extrn _mputchar:near old_isr dd ? public _mscisr _mscisr proc near cmp ah,0eh je do_local jmp cs:[old_isr] do_local: pusha push es push ds mov cx, DGROUP mov ds, cx mov es, cx mov ah,0 push ax call _mputchar pop ax pop ds pop es popa iret _mscisr endp public _bell _bell proc near mov ax,0e07h pushf call cs:[old_isr] ret _bell endp public _mscisr_init _mscisr_init proc near push es cli mov ax,0 mov es,ax mov bx,es:[40h] mov word ptr cs:[old_isr], bx mov ax, offset _mscisr mov word ptr es:[40h], ax mov bx,es:[42h] mov word ptr cs:[old_isr+2], bx mov word ptr es:[42h], cs pop es sti ret _mscisr_init endp public _mscisr_uninit _mscisr_uninit proc near push es cli mov ax,0 mov es,ax mov bx, word ptr cs:[old_isr] mov es:[40h], bx mov bx, word ptr cs:[old_isr+2] mov es:[42h], bx pop es sti ret _mscisr_uninit endp _TEXT ends end