📄 利用intel8253通道2发出波形演自动奏音乐.txt
字号:
cseg segment
assume cs:cseg,ds:cseg
start:mov ax,cseg
mov ds,ax
mov dx,pareb
in al,dx
or al,3
out dx,al
mov si,offset clk2
mov ax,word ptr [si]
mov dx,word ptr [si+2]
push dx
push ax
mov si,offset y11
mov di,offset cz11
mov cx,ynumb
countcz:
pop ax
pop dx
push dx
push ax
mov bx,word ptr[si]
div bx
add si,2
mov word ptr[di],ax
add di,2
loop countcz
pop ax
pop ax
mov dx,ctr53
mov al,10110110b
ag: mov si,offset yjys
mov dx,cann2
countinue:
mov ax,word ptr[si]
add si,2
and ax,ax
jz ag
cmp ax,0ffffh
jz stop
mov di,offset cz11
mov ch,ah
mov ah,0
shl al,1
add di,ax
mov ax,word ptr[di]
out dx,al
mov al,ah
out dx,al
mov ah,ch
call delay
jmp countinue
stop: mov dx,pareb
in al,dx
and al,11111100b
out dx,al
mov ax,4c00h
int 21h
delay proc near
l0: mov cx,2cd0H
l1: push cx
mov cx,0
l2: loop l2
pop cx
loop l1
dec ah
jnz l0
ret
delay endp
ctr53 equ 43h
cann2 equ 42h
pareb equ 61h
clk2 dd 1193182
ynumb equ 42
y11 dw 131,147,165,175,196,220,247
y12 dw 252,294,330,349,392,440,494
y21 dw 139,156,175,185,208,233,262
y22 dw 277,311,349,370,415,466,523
y31 dw 123,139,156,165,185,208,233
y32 dw 247,277,311,330,370,415,466
cz11 dw 7 dup(?)
cz12 dw 7 dup(?)
cz21 dw 7 dup(?)
cz22 dw 7 dup(?)
cz31 dw 7 dup(?)
cz32 dw 7 dup(?)
yjys dw 0204H,0104h,0105h,0201h,0100h,0100h,0105h,0201h,0104h,104h,105h,0107h,0105h,0104h,0100h
dw 0100h,0105h,0201h,104h,0101h,0100h,0106h,0105h,0104h,010ch,0101h,0101h,102h,101h,100h
dw 101h,100h,106h,105h,104h,0h,124h,125h,126h,127h,128h,129h,0000
cseg ends
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -