53 lines
No EOL
560 B
NASM
53 lines
No EOL
560 B
NASM
note_periods:
|
|
dw 4560
|
|
dw 4304
|
|
dw 4063
|
|
dw 3835
|
|
dw 3619
|
|
dw 3416
|
|
dw 3224
|
|
dw 3043
|
|
dw 2873
|
|
dw 2711
|
|
dw 2559
|
|
dw 2415
|
|
|
|
; ax = note index
|
|
set_note:
|
|
pusha
|
|
mov bx, ax
|
|
add bx, ax
|
|
mov dx, [note_periods + bx]
|
|
call set_freq
|
|
popa
|
|
ret
|
|
|
|
; dx = counter period
|
|
set_freq:
|
|
pusha
|
|
; Channel 2, lobyte/hibyte, square wave, binary
|
|
mov al, 0b10110110
|
|
out 0x43, al
|
|
|
|
mov al, dl
|
|
out 0x42, al
|
|
mov al, dh
|
|
out 0x42, al
|
|
popa
|
|
ret
|
|
|
|
sound_on:
|
|
pusha
|
|
in al, 0x61
|
|
or al, 3
|
|
out 0x61, al
|
|
popa
|
|
ret
|
|
|
|
sound_off:
|
|
pusha
|
|
in al, 0x61
|
|
and al, 0xfc
|
|
out 0x61, al
|
|
popa
|
|
ret |