|
|
1.1 ! root 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
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.