Самый простой пример:
Должен пищать одну ноту (если в Sample записать синус, то должно чисто звучать).
Запрос данных в бите 7 порта FE появляется для каждых 128 байт (256 в режиме 16 бит). Его следует проверять, если его не оказалось, то прерывание экранное, а не от CBL.
При выставленных прерываниях от CBL, стоит использовать режим IM 2, иначе, будет часто вызываться DOS-овая процедура прерываний и могут появиться тормоза на высоких частотах.
В режиме 8 бит сэмплы должны иметь уровень нуля на 80h,
16 бит сэмплы - уровень нуля - 0000h,
Stereo-сэмплы - должны иметь чередующиеся отсчеты левого и правого канала.
| | |
| Code: mono_8bit: DB 80h,81h,7Fh....
mono_16bit: DW 0,1000,-1000...
stereo_8bit: DB 80h,80h,81h,80h,7Fh,80h... ; здесь один канал играет, второй молчит
stereo_16bit: DW 0,0,1000,0,-1000,0... ; аналогично, один канал играет, второймолчит
| |
| | |
(При тестировании 16 бит режима следует помнить, что звук с амплитудой в единицы почти не слышен)
P.S. Формат данных выбран так, что бы из WAV-файлов данные в CBL пересылать простой операцией блочной пересылки.