QEMU 中的小 x86-16 哔声

Posted

技术标签:

【中文标题】QEMU 中的小 x86-16 哔声【英文标题】:Small x86-16 beep in QEMU 【发布时间】:2021-07-20 07:02:29 【问题描述】:

我正在使用引导扇区中的 x86-16 程序集创建一个小型乒乓球游戏,以便在 Ubuntu 20.04.2 上的 QEMU 中运行。 当球击中桨时,我想发出控制台哔声。在 x86-16 中创建任何类型的哔声的节省空间的方式是什么?

我正在使用 FASM。

【问题讨论】:

***.com/questions/29714604/make-beep-sound-in-bios 有点相关,尽管它是用于内联汇编的。让这种尴尬的是,硬件命令只是打开和关闭蜂鸣器,所以你必须在两者之间创建自己的延迟——要么通过忙等待,要么通过挂钩定时器中断。 @NateEldredge OP 可以挂钩定时器 IRQ,将其设置为一次性并使用它来关闭哔声。 如果你不挑剔(音高,持续时间);您可以尝试使用 BIOS 打印一个 ASCII “铃”字符。 @Brendan 如果游戏逻辑是由计时器触发的,那甚至可以工作。 @Brendan 是的,应该可以,但不确定如何在 x86-16 中进行,这就是问题所在;详细点? 【参考方案1】:

您可以为此使用BIOS.Teletype function 0Eh。

这是一个函数,它使用来自BL 的颜色将来自AL 的字符写入来自BH 的显示页面。该函数还解释一些控制代码:13 表示回车,10 表示换行,8 表示退格,7 表示响铃。该函数不返回任何内容。

因为响起蜂鸣器是一种可听操作,所以您可以减少几个字节,而无需提及任何关于显示页面或颜色的内容

在引导扇区的有限空间内,接下来就是发出哔哔声:

mov ax, 0E07h  ; BIOS.Teletype BELL
int 10h

【讨论】:

以上是关于QEMU 中的小 x86-16 哔声的主要内容,如果未能解决你的问题,请参考以下文章

在python中的错误点使用哔声

WinCE中的哔声,可能吗?

python audiolab中的哔声

如何在 Windows 上禁用 emacs 中的哔声

语音识别中的果冻豆哔声

如何在 Mac OS X 10.6 中发出硬件哔声