NEC PC 编程参考/PC-98xx 系列编程参考/声音 BIOS
外观
声音 BIOS 是一个用于操作 OPN 音乐播放/声音生成系统的工具包。它没有默认中断 - 中断必须由应用程序建立。
声音 BIOS 需要支持 OPN 音乐 BIOS 的声卡。它只能在正常模式下使用。
声音 BIOS 中断是通过将地址 0xCEE00 的字节设置为所需的 interrupt 号来建立的。
N88-BASIC 默认将声音 BIOS 中断设置为 0xD2。
声音 BIOS 期待访问内存的特定区域以进行操作,以及其他需求。
- 从 0000:05E0 开始的 DWORD 必须保留给它。
- 256 字节的状态区域
- 512 字节的工作区域
- 96 字节的堆栈空间
状态区域和工作区域必须是连续的。要为声音 BIOS 保留空间,将工作区域开始的段偏移量设置为 0xCEE06 的 WORD(0 是可接受的)。在使用声音 BIOS 之前,将 ES 设置为 0xCEE0,将 DI 设置为 0xCEE06 的 WORD。将 SS 设置为指定的 BIOS 堆栈区域段,将 SI 设置为同一区域的偏移量。
通过调用其指定的中断并使用 CPU 寄存器 AH 中的命令号来访问声音 BIOS。每个声音 BIOS 命令都需要特定的参数。以下声音 BIOS 命令列表解释了可用的命令以及如何将参数传递给它们。
AH | 命令 | 目的 | 设置 | 配置结构偏移量 |
---|---|---|---|---|
0 | INIT | 设置 PLAY 命令环境和歌曲参数。将节奏设置为 1(120 bpm,48 步/分钟),音符长度设置为全音符,所有轨道指针设置为空。在使用任何其他命令之前必须调用。 |
ES = 声音 BIOS 配置/工作段。PLAY 缓冲区应在调用之前配置。 | |
1 | PLAY | 播放存储到缓冲区的音符/操作宏。 | ES:BX 指向每个通道/轨道的 28 字节指针表。 该表的第一个 DWORD 包含包含歌曲的段。随后的 DWORD 包含段中轨道偏移量(以字节 1-2 为单位)和长度(以字节 3-4 为单位)。歌曲的总大小不能超过 64k 字节。 |
|
2 | CLEAR | 清除 PLAY 缓冲区。 | 如果 AL = 0,则重置歌曲。如果 AL = 1,则清除以创建新歌曲。 | |
10 | READ REG | 读取音乐播放设备上的端口。 | 将 AL 作为要读取的端口;将数据返回给 BX | |
11 | WRITE REG | 写入音乐播放设备。此命令可以手动调用或在 PLAY 缓冲区中调用。 |
| |
12 | SET TOUCH | 指定音符长度(“门控”)作为节拍比例(称为“步长”)。使用此函数设置一组音符的默认长度(或“谱表”)。比例表示为音符类型 - 1 / 8(0 = 八分音符,1 = 四分音符,3 = 二分音符,7 = 全音符)命令可以手动调用或在 PLAY 缓冲区中调用。 |
|
0x12 |
13 | NOTE | 在乐器通道上发出一个音符。音符范围为 0-96(0-0x60),其中 0x80 为休止符。可以手动调用或在 PLAY 缓冲区中调用。此命令在 TOUCH 设置的上下文中操作。可以省略音符的长度,在这种情况下,将使用 SET LENGTH 建立的默认长度。 |
|
0x10 |
14 | SET LENGTH | 通道上后续音符的默认音符持续时间,作为步长的分数。受 SUSTAIN 调制,在提供音符的持续时间时被忽略。可以手动调用或在 PLAY 缓冲区中调用。 |
|
0x11 |
15 | SET TEMPO | 设置歌曲的播放速度。每个节奏点对应每分钟 48 个节拍。可以手动调用或在 PLAY 缓冲区中调用。 |
|
0xC0 |
16 | SET PARAM BLOCK | 通道的参数输入设置。可以手动调用或在 PLAY 缓冲区中调用。 |
| |
17 | READ PARAMS | 将 FM 合成器音调参数读取到 BX 中。 |
| |
18 | WRITE PARAMS | 将音调参数写入 FM 合成器通道。可以手动调用或在 PLAY 缓冲区中调用。 |
| |
19 | STOP | 停止从 PLAY 缓冲区播放。中断回调被禁用。 | ||
1A | RESUME | 从 PLAY 缓冲区恢复音符播放。 | ||
1B | LFO ON | 无条件地将 LFO 效果应用于通道。可以手动调用或在 PLAY 缓冲区中调用。 |
| |
1C | LFO OFF | 禁用通道上的 LFO 效果。可以手动调用或在 PLAY 缓冲区中调用。 |
| |
1D | PROC ON END | 启用/禁用轨道结束时的过程调用 |
|
|
1E | SUSTAIN | 保持通道输出。使用 0 的持续时间来省略。可以手动调用或在 PLAY 缓冲区中调用。 |
| |
1F | VOLUME | 通道音量。对载波波形的音量起作用。受参数 FB_ALG 的影响。可以手动调用或在 PLAY 缓冲区中调用。 |
|
声音 BIOS 使用 OPN 寄存器 A 作为节奏时钟/节拍器,使用寄存器 B 进行调制计时。它锁定了 PIC 并监视这些寄存器以确定根据给定的命令采取什么行动。节拍器至少以 5 毫秒的速率滴答。
手动操作声卡可能会干扰声音 BIOS 命令的正常操作,导致意外行为。