beep.asm
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
 
最終更新:2021年09月07日 09:31