home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS - Coast to Coast / simteldosarchivecoasttocoast.iso / sysutil / newbell.asm < prev    next >
Assembly Source File  |  1994-03-05  |  2KB  |  72 lines

  1.     page    ,132
  2. ;NEWBELL 2-24-83 by Jim Keesey, 2945 Sandra Pl., Palo Alto, CA  94303
  3. ;    changes 2-25-83 by J. R. Celoni, S.J.
  4. ;    DOS 3.0 bugs fixed 1-25-85 by Hal Sampson
  5. ;Run after boot to change DOS (not Basic) bell tone and length.
  6. ; (Should be converted to .COM by EXE2BIN)
  7.  
  8. note_length    equ    1311    ;length (ms) * 131.072
  9. note        equ    0a98h    ;2712 = 1193180. / 440Hz
  10.  
  11. cseg    segment public 'code'
  12.     assume    cs:cseg,ds:cseg
  13.     org    100h
  14. start    proc    far
  15.     jmp    initial
  16. start    endp
  17.  
  18.         even
  19. video_io    dd    0
  20.  
  21. new_bell    proc    near
  22.     sti            ;enable
  23.     cmp    ah,0eh        ;tty mode?
  24.     jz    nb1        ;yes
  25. vid:    jmp    cs:video_io    ;goto rom
  26. nb1:    cmp    al,7        ;bell?
  27.       jnz    vid        ;no, let rom do it
  28.  
  29. ;see IBM Tech. Ref. Man. p. A-18:  BEEP & ERR_BEEP
  30. ;
  31.     cli            ;MUST disable
  32.     push ax
  33.     push cx
  34.     mov    al,0b6h        ;sel tim 2,lsb,msb,binary
  35.     out    43h,al        ;set up timer chip
  36.     mov    ax,note        ;get note
  37.     out    42h,al        ;write timer 2 count:  lsb...
  38.     mov    al,ah
  39.     out    42h,al        ;...and msb
  40.     in    al,61h
  41.     mov    ah,al        ;save current port setting
  42.     or    al,3
  43.     out    61h,al        ;turn spkr on
  44.     mov    cx,note_length    ;64K = 500 ms
  45. here:    loop    here        ;delay
  46.     mov    al,ah
  47.     out    61h,al        ;restore port setting
  48.     pop     cx
  49.     pop    ax
  50.     sti            ;enable
  51.     iret
  52.  
  53. resident_end    equ $+1        ;(end of code +1 for int 27H)
  54. new_bell    endp
  55.  
  56. initial    proc    near
  57.     cli
  58.     lds    si,int10vect     ;int10 = video i/o
  59.     lea    di,video_io
  60.     movsw
  61.     movsw            ;save old trap location
  62.     lea    ax,new_bell
  63.     mov    word ptr [si-4],ax    ;store new trap loc...
  64.     mov    word ptr [si-2],cs    ;...& code seg
  65.     lea    dx,resident_end
  66.     int    27h        ;terminate & stay resident
  67. initial    endp
  68. int10vect    dd    40H    ;address of int10 vector
  69.  
  70. cseg    ends
  71.     end    start
  72.