home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / os2sdk / os2sdk11 / petzold / chap08 / speaker.asm < prev    next >
Encoding:
Assembly Source File  |  1989-02-20  |  2.0 KB  |  51 lines

  1. ;-------------------------------------------------
  2. ; SPEAKER.ASM -- Ring 2 routine for ORGAN program
  3. ;                (Accesses Intel 8255 Timer chip)
  4. ;-------------------------------------------------
  5.  
  6.                PUBLIC    Speaker
  7.                .286
  8.                .MODEL    MEDIUM, PASCAL
  9.  
  10.                .DATA
  11. ClockFreq      dd   1193180
  12.  
  13.                .CODE     SPEAKER_TEXT
  14. Speaker        PROC FAR  Frequency:WORD
  15.                Cli                                ; Disable interrupts
  16.  
  17.                Mov  BX, Frequency                 ; Get parameter from stack
  18.                Or   BX, BX                        ; Check if it's zero
  19.                Jz   TurnOff                       ; If so, turn off sound
  20.  
  21.                Mov  AL, 10110110b                 ; Set flags for programming
  22.                Out  43h, AL
  23.  
  24.                Mov  AX, WORD PTR [ClockFreq]      ; Calculate timer frequency
  25.                Mov  DX, WORD PTR [ClockFreq + 2]
  26.                Div  BX
  27.  
  28.                Out  42h, AL                       ; Output low byte
  29.                Jmp  $ + 2                         ; Delay
  30.  
  31.                Mov  AL, AH                        ; Output high byte
  32.                Out  42h, AL
  33.                Jmp  $ + 2                         ; Delay
  34.  
  35.                In   AL, 61h                       ; Get 8255 bits
  36.                Jmp  $ + 2                         ; Delay
  37.  
  38.                Or   AL, 00000011b                 ; Set bits for speaker
  39.                Out  61h, AL                       ; Set 8255 bits
  40.                Jmp  Return
  41.  
  42. TurnOff:       In   AL, 61h                       ; Get 8255 bits
  43.                Jmp  $ + 2                         ; Delay
  44.                And  AL, 11111101b                 ; Set bits for no speaker
  45.                Out  61h, AL                       ; Set 8255 bits
  46.  
  47. Return:        Sti                                ; Enable interrupts
  48.                Ret
  49. Speaker        ENDP
  50.                END
  51.