home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS - Coast to Coast
/
simteldosarchivecoasttocoast.iso
/
sysutil
/
newbell.asm
< prev
next >
Wrap
Assembly Source File
|
1994-03-05
|
2KB
|
72 lines
page ,132
;NEWBELL 2-24-83 by Jim Keesey, 2945 Sandra Pl., Palo Alto, CA 94303
; changes 2-25-83 by J. R. Celoni, S.J.
; DOS 3.0 bugs fixed 1-25-85 by Hal Sampson
;Run after boot to change DOS (not Basic) bell tone and length.
; (Should be converted to .COM by EXE2BIN)
note_length equ 1311 ;length (ms) * 131.072
note equ 0a98h ;2712 = 1193180. / 440Hz
cseg segment public 'code'
assume cs:cseg,ds:cseg
org 100h
start proc far
jmp initial
start endp
even
video_io dd 0
new_bell proc near
sti ;enable
cmp ah,0eh ;tty mode?
jz nb1 ;yes
vid: jmp cs:video_io ;goto rom
nb1: cmp al,7 ;bell?
jnz vid ;no, let rom do it
;see IBM Tech. Ref. Man. p. A-18: BEEP & ERR_BEEP
;
cli ;MUST disable
push ax
push cx
mov al,0b6h ;sel tim 2,lsb,msb,binary
out 43h,al ;set up timer chip
mov ax,note ;get note
out 42h,al ;write timer 2 count: lsb...
mov al,ah
out 42h,al ;...and msb
in al,61h
mov ah,al ;save current port setting
or al,3
out 61h,al ;turn spkr on
mov cx,note_length ;64K = 500 ms
here: loop here ;delay
mov al,ah
out 61h,al ;restore port setting
pop cx
pop ax
sti ;enable
iret
resident_end equ $+1 ;(end of code +1 for int 27H)
new_bell endp
initial proc near
cli
lds si,int10vect ;int10 = video i/o
lea di,video_io
movsw
movsw ;save old trap location
lea ax,new_bell
mov word ptr [si-4],ax ;store new trap loc...
mov word ptr [si-2],cs ;...& code seg
lea dx,resident_end
int 27h ;terminate & stay resident
initial endp
int10vect dd 40H ;address of int10 vector
cseg ends
end start