我有这个工作代码,以便在 DOS 中使用“直接模式”播放 PCM 声音 (.WAV): ASM 代码在 DOS 中播放 .WAV
它完美地工作(包括时间等)。
但是我想改进这段代码,所以在播放 .WAV 文件的同时,我想以 320*200 视频模式显示动画。我也想更改内存页面,如下所示:
mov al,0x13
int 0x10
MAIN:
mov ax,08000h
mov es,ax
push cs
pop ds
;[put animation code here: e.g. one frame of a rotating cube at a time]
push es ; then change the video memory page and clear the screen
pop ds
mov ax, 0a000h
mov es,ax
mov cx,32001
xor si,si
mov di,si
rep movsw
mov ah,0x11
int 0x16
jz near MAIN ; and jump back to MAIN
那么如何合并这两个代码呢?如何在 DOS 中播放 .WAV 文件并同时显示动画?这也很酷,如果显示的帧和播放的“音乐块”可以以某种方式同步,如果你的机器速度较慢,如果你可以显示例如 5 帧/秒,那么你应该听到 5 个“音乐块”/第二。换句话说:更少的帧/秒 -> 更慢的音乐。反之亦然:如果动画太慢,则跳过帧。上面提到的播放.WAV文件的代码有一个等待循环,可能我们可以把动画代码放在这里,但是两个代码都使用ES寄存器和东西,所以它们不能轻易合并。如何解决寄存器冲突?