Fix OPL4 abort completion
This commit is contained in:
@@ -110,7 +110,8 @@ ptr_table:
|
||||
dw blk_saa_init ; 11 = CMDBLK_SAA_INIT
|
||||
dw blk_saa2_init ; 12 = CMDBLK_SAA2_INIT
|
||||
dw blk_init_opl4 ; 13 = CMDBLK_INIT_OPL4
|
||||
dw blk_silence_wave ; 14 = CMDBLK_SILENCE_WAVE
|
||||
dw blk_silence_wave_off ; 14 = CMDBLK_SILENCE_WAVE_OFF
|
||||
dw blk_silence_wave_tl ; 15 = CMDBLK_SILENCE_WAVE_TL
|
||||
|
||||
; ═══════════════════════════════════════════════════════════════════════
|
||||
; CMDBLK_INIT_OPL3 — OPL3 init (NEW=1, clean state)
|
||||
@@ -292,7 +293,7 @@ blk_silence_opl:
|
||||
; D0 02 50 FF ... D0 02 67 FF (TL max, 24 канала)
|
||||
; 66
|
||||
; ═══════════════════════════════════════════════════════════════════════
|
||||
blk_silence_wave:
|
||||
blk_silence_wave_off:
|
||||
opl4_wave_write #68, #40
|
||||
opl4_wave_write #69, #40
|
||||
opl4_wave_write #6A, #40
|
||||
@@ -317,6 +318,9 @@ blk_silence_wave:
|
||||
opl4_wave_write #7D, #40
|
||||
opl4_wave_write #7E, #40
|
||||
opl4_wave_write #7F, #40
|
||||
blk_end
|
||||
|
||||
blk_silence_wave_tl:
|
||||
opl4_wave_write #50, #FF
|
||||
opl4_wave_write #51, #FF
|
||||
opl4_wave_write #52, #FF
|
||||
|
||||
+2
-1
@@ -286,7 +286,8 @@ const char *vgm_chip_name(uint8_t id);
|
||||
#define CMDBLK_SAA_INIT 11 /* SAA1099 chip 1: Sound Enable ON */
|
||||
#define CMDBLK_SAA2_INIT 12 /* SAA1099 chip 2: Sound Enable ON+clk */
|
||||
#define CMDBLK_INIT_OPL4 13 /* OPL4 init: NEW=1 + NEW2=1 (wave unlock) */
|
||||
#define CMDBLK_SILENCE_WAVE 14 /* OPL4 wave-часть silence: 24 канала KeyOff+Damp+TL max */
|
||||
#define CMDBLK_SILENCE_WAVE_OFF 14 /* OPL4 wave: 24x KeyOff+Damp */
|
||||
#define CMDBLK_SILENCE_WAVE_TL 15 /* OPL4 wave: 24x TL max */
|
||||
|
||||
/* ─── Очередь высокоуровневых команд (HL queue) ───────────────── */
|
||||
|
||||
|
||||
+6
-2
@@ -156,8 +156,12 @@ static void hl_push(uint8_t cmd, uint8_t param)
|
||||
static void hl_push_opl_silence(void)
|
||||
{
|
||||
hl_push(HLCMD_CMDBLK, CMDBLK_SILENCE_OPL);
|
||||
if (vgm_chip_type == VGM_CHIP_OPL4)
|
||||
hl_push(HLCMD_CMDBLK, CMDBLK_SILENCE_WAVE);
|
||||
if (vgm_chip_type == VGM_CHIP_OPL4) {
|
||||
/* Два блока по 24 записи: вместе с OPL silence они не помещаются
|
||||
* в один ISR-буфер, а cmdblock нельзя продолжать с середины. */
|
||||
hl_push(HLCMD_CMDBLK, CMDBLK_SILENCE_WAVE_OFF);
|
||||
hl_push(HLCMD_CMDBLK, CMDBLK_SILENCE_WAVE_TL);
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Построение очереди воспроизведения по обнаруженным чипам / loop info ─ */
|
||||
|
||||
Reference in New Issue
Block a user