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 命令的正常操作,導致意外行為。