?? dsound.asm
字號:
;DOS下直接控制聲卡發聲的匯編例子程序
;在win XP的cmd窗口中調試通過
;有的機器在純dos下找不到聲卡,可能主板上的集成聲卡不兼容
code SEGMENT
ASSUME CS:code,ds:code
ORG 100H
start: ;jmp loc_2 ;去掉jmp前的分號,可以跳過顯示作者信息
call loc_1
db "DOS voc test v1.0 (c)SYZ 2006.7.13",0dh,0ah
db "press any key ",0dh,0ah,24h
;山東海化集團 盛玉增 編制,qq:5611409 e-mail:sb_y@tom.com
;http://www.wfhyjl.cn 轉載請保留作者信息,謝謝。
val_1 dw 0
loc_1:
pop dx
mov ah,9
int 21h ;顯示信息
loc_2:
mov dx,226h
mov al,1
out dx,al
;;;;;;;; 復位 dsp
mov cx,0
loop $
mov al,0
out dx,al
call dspin
cmp al,0aah ;判斷聲卡是否準備好
jz loc_3
jmp error_1 ; 出錯退出
loc_3:
mov al,0d1h
call dspout ;打開喇叭
mov si,offset data_1 ;音頻數據開始
mov cx,offset data_end ;音頻數據結尾
sub cx,si ;算出音頻數據字節數
mov val_1,cx ;保存到變量中
mov di,8000h
mov es,di
mov di,0
cld
rep movsb ;把音頻數據移動到8000:0
;目的是免了計算DMA頁和偏移的麻煩,同時也
;可以防止出現DMA傳輸的的跨段錯誤
mov dx,0ah ;DMA屏蔽寄存器
mov al,5 ;選擇通道1
;用通道3時,al=7
;一般聲卡默認是用通道1
out dx,al ;mask off dma channel
mov dx,0ch ;DMACFFREG
mov al,0
out dx,al ;clear flip-flop
mov dx,0bh
mov al,59h
out dx,al ;set mode for dac
mov dx,2 ;dma 偏移
mov al,0 ;8000:0的偏移是0
out dx,al ;低8位0
out dx,al ;高8位0
mov dx,83h ;dma 頁
mov al,8h ;8000:0的頁是8
out dx,al
mov dx,3 ;dma 計數
mov cx,val_1 ;數據塊大小
mov al,cl
dec al
out dx,al ;低8位
mov al,ch
out dx,al ;高字節
mov dx,0ah ;dmac 屏蔽寄存器
mov al,1 ;允許通道1接受請求
out dx,al
mov al,040h ;dspcmdtimeconst命令
call dspout
mov al,131 ;tc控制聲音播放的速度
call dspout
mov al,48h ;dspcmdblocksize命令
call dspout
mov cx,val_1 ;count數據塊的大小
dec cx ;減去一個字節
mov al,cl ;低8位
call dspout
mov al,ch ;高8位
call dspout
mov al,1ch ;dspcmdautodmadac
call dspout ;dsp自動模式
ddd_1: mov ah,0
int 16h ;等待按任意鍵
mov al,0d3h
call dspout ;關喇叭
mov al,0dah
call dspout ;停止dma傳輸
error_1:
push cs
pop ds
int 20h ;返回dos
dspout:push ax ;dsp輸出
mov dx,22ch
dso1:in al,dx
or al,al
js dso1 ;未就緒,循環等待
pop ax
out dx,al
retn
dspin: ;dsp輸入
mov dx,22eh
dsi1: in al,dx
and al,80h
jz dsi1 ;是否就緒?
mov dx,22ah
in al,dx
retn
;-------------------------------------------------------------
;以下為voc文件內容,是用cool edit pro 2.0錄制的,內容是一句典型
;的濰坊方言,請能聽懂的朋友與我聯系:-)
;直接把數據文件放到這里,是為了免去操作文件的麻煩,作者比較懶,
;用流行的話說是,相當的懶:-)
;以下為voc的文件頭部分,是用\masm32\bintodb.exe轉化的
; C:\haha.voc is 20037 bytes long
db 67,114,101,97,116,105,118,101,32,86,111,105,99,101,32,70
db 105,108,101,26,26,0,10,1,41,17,1,2,64,0,131,0 ;此處的131是tc
data_1: ;以下為音頻數據塊
db 126,126,126,126,125,125,125,125,125,125,125,125,125,125,124,124
db 124,124,124,124,124,124,124,124,124,125,125,125,125,126,126,126
db 127,127,127,128,128,128,128,128,128,128,128,127,127,127,126,126
db 125,125,125,124,124,123,123,123,123,122,122,122,122,122,122,122
db 122,122,122,122,123,123,123,124,124,125,126,127,127,128,129,129
db 130,131,131,132,132,132,132,131,131,129,128,127,126,125,124,123
db 122,122,121,120,120,119,119,119,119,119,119,119,120,120,121,121
db 122,122,123,124,124,126,127,127,128,129,130,130,131,132,133,134
db 134,135,135,135,135,133,130,127,126,124,123,123,123,122,121,121
db 122,122,123,122,122,121,121,120,119,119,119,119,120,120,120,121
db 122,122,123,123,124,125,126,126,127,128,128,129,131,132,134,135
db 137,139,140,140,139,135,130,128,126,123,122,121,119,120,120,120
db 121,122,122,123,123,123,124,124,124,124,124,122,122,122,121,121
db 122,121,121,121,121,120,120,120,120,120,120,122,123,125,126,128
db 130,132,134,137,139,142,144,144,142,137,132,129,126,123,121,119
db 117,117,118,118,119,120,121,121,122,123,124,125,125,125,125,123
db 121,122,122,122,123,122,121,121,121,121,120,120,119,119,119,120
db 122,123,125,127,129,131,133,136,138,141,143,146,146,143,137,132
db 129,125,123,121,118,116,117,117,118,119,120,121,121,123,124,125
db 126,126,126,125,122,122,122,121,122,123,122,122,121,121,121,120
db 119,119,119,120,121,122,124,126,128,130,133,136,138,141,144,147
db 148,145,141,134,130,127,123,121,119,117,116,116,117,118,119,120
db 121,122,124,125,126,126,126,125,124,122,122,122,122,122,123,122
db 121,120,120,119,118,118,117,118,119,121,122,124,126,129,132,134
db 137,139,142,145,147,148,147,141,134,130,127,123,121,119,116,116
db 116,116,117,119,120,120,122,123,124,125,126,126,125,124,122,121
db 121,123,122,122,122,120,120,120,119,118,118,117,118,119,120,122
db 124,126,129,131,134,137,139,142,145,147,149,148,150,139,128,122
db 116,123,120,118,110,112,116,121,122,119,119,120,126,127,126,122
db 121,122,121,119,118,120,122,123,123,122,120,118,117,117,117,116
db 116,115,116,120,123,127,129,133,137,141,144,146,149,152,157,157
db 146,132,127,127,126,117,111,114,120,121,118,115,116,122,126,124
db 119,120,124,126,125,123,120,120,121,121,120,119,119,120,120,117
db 115,112,112,114,115,114,114,117,121,125,127,129,133,138,141,143
db 145,147,152,156,159,157,141,127,124,127,124,114,110,115,122,121
db 117,115,118,126,129,125,120,122,125,126,124,120,119,121,120,119
db 118,118,119,119,117,115,115,113,113,113,115,115,116,118,121,126
db 129,131,135,139,142,144,146,149,153,155,159,160,142,122,121,128
db 126,115,110,115,123,123,119,116,118,127,131,127,119,121,125,126
db 123,120,119,119,118,118,119,118,117,118,117,116,115,112,111,113
db 117,117,116,117,121,127,130,131,134,138,143,145,146,148,152,157
db 162,162,141,120,118,129,128,115,108,116,126,126,119,115,118,128
db 133,127,118,119,125,127,123,119,117,120,120,118,116,117,118,119
db 116,113,115,113,112,113,115,117,117,118,121,126,130,133,135,138
db 141,145,147,149,152,157,163,165,139,115,115,131,130,115,107,116
db 128,127,120,114,116,128,134,128,117,117,125,128,124,118,117,119
db 121,120,117,114,116,120,118,113,112,113,113,114,115,115,115,118
db 122,125,127,131,136,138,140,143,146,148,152,158,164,167,145,117
db 110,127,133,119,107,113,127,130,121,115,115,126,135,131,120,115
db 122,127,124,118,117,121,124,121,115,114,117,120,118,113,111,113
db 113,114,113,115,116,119,121,123,127,130,135,138,138,141,144,148
db 152,157,162,168,154,122,107,120,134,125,111,111,125,131,124,117
db 114,122,133,133,123,115,120,125,125,119,117,120,123,122,117,110
db 113,120,121,114,108,111,114,114,113,112,116,119,123,124,124,129
db 137,140,137,139,145,151,155,157,163,169,145,113,105,124,135,123
db 111,113,125,131,124,115,111,124,135,132,120,113,120,126,125,119
db 118,120,122,123,118,110,111,117,120,115,110,109,111,114,115,114
db 114,118,124,126,126,129,135,139,139,141,145,151,156,160,166,168
db 136,108,106,130,135,121,109,116,127,130,122,114,112,127,135,130
db 117,115,122,126,123,116,116,122,124,122,114,111,115,118,116,112
db 112,111,111,112,114,117,117,120,124,126,129,132,136,138,140,144
db 148,153,158,163,172,161,121,100,113,137,132,117,110,121,130,129
db 119,111,116,133,135,126,113,115,123,126,121,116,116,121,124,122
db 112,110,113,116,115,112,110,109,111,115,117,117,118,123,126,127
db 131,136,138,139,143,149,152,156,161,173,166,122,98,109,137,135
db 120,109,119,130,133,119,108,112,133,136,127,113,113,123,127,123
db 116,112,120,128,124,108,104,113,119,116,109,107,110,114,116,115
db 115,119,124,125,126,132,138,140,140,142,149,155,158,164,177,155
db 112,95,119,140,131,115,112,122,132,131,117,108,117,136,134,123
db 112,116,123,125,121,117,114,119,126,122,110,106,113,118,117,110
db 108,110,114,118,119,117,120,125,127,130,135,140,141,142,146,154
db 158,161,173,166,119,95,110,141,135,121,110,121,130,135,120,108
db 111,134,137,126,112,113,123,126,121,116,115,119,124,122,111,107
db 113,118,116,111,109,111,113,117,119,119,120,124,127,130,136,140
db 141,143,149,156,160,163,176,151,107,92,122,144,133,114,112,123
db 134,131,116,107,117,137,134,123,112,115,123,125,121,117,118,122
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -