comment *
ml /c /AT /Fl beep.asm
link16 /t beep;
*
.model tiny
.code
org 100h
start:
mov dx, 3fdfh
mov al, 76h
out dx, al
mov si, 0
L1:
mov bl, seq[si]
or bl, bl
jz exit
inc si
sub bl, 60
add bl, bl
mov bh, 0
mov ax, ftbl[bx]
mov dx, 3fdbh ; 分周比
out dx, al
mov al, ah
out dx, al
mov al, 6 ; beep on
out 37h, al
mov cx, 9 ; 音長
L2:
@@:
in al, 0a0h ; VSYNC
and al, 20h
jnz @b
@@:
in al, 0a0h
and al, 20h
jz @b
loop L2
jmp L1
exit:
mov al, 7 ; beep off
out 37h, al
mov ax, 4c00h
int 21h
seq db 83,71,67, 83,71,67, 83,71,67, 83,71,67, 81,71,67, 79,71,67
db 79,71,67, 78,71,67, 76,71,67, 76,71,67, 79,71,67, 83,71,67
db 88,71,67, 88,71,67, 88,71,67, 88,71,67, 86,71,67, 84,71,67
db 84,76,72, 83,76,72, 81,76,72, 81,76,72, 83,76,72, 84,76,72
db 0
; 分周比テーブル
; f=.44*2^((note-69)/12)
; n=2457.6/f (10MHz系)
ftbl dw 9394,8866,8369,7899, 7456,7037,6642,6269, 5918,5585,5272,4976
dw 4697,4433,4184,3950, 3728,3519,3321,3135, 2959,2793,2636,2488
dw 2348,2217,2092,1975, 1864,1759,1661,1567, 1479,1396,1318,1244
end start