got FM working
This commit is contained in:
parent
7e5040925a
commit
038e4b3c35
|
|
@ -42,18 +42,18 @@ ssg_r7 block 2, 0
|
||||||
; instantinate structures
|
; instantinate structures
|
||||||
align 256
|
align 256
|
||||||
player_channels:
|
player_channels:
|
||||||
channel_struct_t 0, 0 ; TODO: fill start offsets here
|
channel_struct_t 0, music_p0_ch0 ; TODO: fill start offsets here
|
||||||
channel_struct_t 0, 0
|
channel_struct_t 0, music_p0_ch1
|
||||||
channel_struct_t 0, 0
|
channel_struct_t 0, music_p0_ch2
|
||||||
channel_struct_t 0, 0
|
channel_struct_t 0, music_p0_ch3
|
||||||
channel_struct_t 0, music_p0_ch4
|
channel_struct_t 0, music_p0_ch4
|
||||||
channel_struct_t 0, music_p0_ch5
|
channel_struct_t 0, music_p0_ch5
|
||||||
channel_struct_t 0, music_p0_ch6
|
channel_struct_t 0, music_p0_ch6
|
||||||
channel_struct_t 0, music_p0_ch7
|
channel_struct_t 0, music_p0_ch7
|
||||||
channel_struct_t 0, 0
|
channel_struct_t 0, music_p0_ch8
|
||||||
channel_struct_t 0, 0
|
channel_struct_t 0, music_p0_ch9
|
||||||
channel_struct_t 0, 0
|
channel_struct_t 0, music_p0_ch10
|
||||||
channel_struct_t 0, 0
|
channel_struct_t 0, music_p0_ch11
|
||||||
channel_struct_t 0, music_p0_ch12
|
channel_struct_t 0, music_p0_ch12
|
||||||
channel_struct_t 0, music_p0_ch13
|
channel_struct_t 0, music_p0_ch13
|
||||||
channel_struct_t 0, music_p0_ch14
|
channel_struct_t 0, music_p0_ch14
|
||||||
|
|
@ -83,7 +83,7 @@ reg_out:
|
||||||
outi
|
outi
|
||||||
ld b, e
|
ld b, e
|
||||||
outi
|
outi
|
||||||
dup 4: nop : edup ; delay
|
dup 10: nop : edup ; delay
|
||||||
jp .loop
|
jp .loop
|
||||||
|
|
||||||
; ------------------------
|
; ------------------------
|
||||||
|
|
@ -508,25 +508,25 @@ parse_fm_channel_stream:
|
||||||
bit OPM_FM_CMD00_REG50_BIT, b
|
bit OPM_FM_CMD00_REG50_BIT, b
|
||||||
jp z, 1f
|
jp z, 1f
|
||||||
ld a, 0x50 : add c : ldi [iy], a
|
ld a, 0x50 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
;if (mask & OPM_FM_CMD00_REG60) opn_write_reg(chip_index, 0x60 + regbase, *data++);
|
;if (mask & OPM_FM_CMD00_REG60) opn_write_reg(chip_index, 0x60 + regbase, *data++);
|
||||||
bit OPM_FM_CMD00_REG60_BIT, b
|
bit OPM_FM_CMD00_REG60_BIT, b
|
||||||
jp z, 1f
|
jp z, 1f
|
||||||
ld a, 0x60 : add c : ldi [iy], a
|
ld a, 0x60 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
;if (mask & OPM_FM_CMD00_REG70) opn_write_reg(chip_index, 0x70 + regbase, *data++);
|
;if (mask & OPM_FM_CMD00_REG70) opn_write_reg(chip_index, 0x70 + regbase, *data++);
|
||||||
bit OPM_FM_CMD00_REG70_BIT, b
|
bit OPM_FM_CMD00_REG70_BIT, b
|
||||||
jp z, 1f
|
jp z, 1f
|
||||||
ld a, 0x70 : add c : ldi [iy], a
|
ld a, 0x70 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
;if (mask & OPM_FM_CMD00_REG80) opn_write_reg(chip_index, 0x80 + regbase, *data++);
|
;if (mask & OPM_FM_CMD00_REG80) opn_write_reg(chip_index, 0x80 + regbase, *data++);
|
||||||
bit OPM_FM_CMD00_REG80_BIT, b
|
bit OPM_FM_CMD00_REG80_BIT, b
|
||||||
jp z, 1f
|
jp z, 1f
|
||||||
ld a, 0x80 : add c : ldi [iy], a
|
ld a, 0x80 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
scf
|
scf
|
||||||
ret
|
ret
|
||||||
|
|
@ -547,19 +547,19 @@ parse_fm_channel_stream:
|
||||||
bit OPM_FM_CMD40_REG30_BIT, b
|
bit OPM_FM_CMD40_REG30_BIT, b
|
||||||
jp z, 1f
|
jp z, 1f
|
||||||
ld a, 0x30 : add c : ldi [iy], a
|
ld a, 0x30 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
;if (mask & OPM_FM_CMD40_REG40) opn_write_reg(chip_index, 0x40 + regbase, *data++);
|
;if (mask & OPM_FM_CMD40_REG40) opn_write_reg(chip_index, 0x40 + regbase, *data++);
|
||||||
bit OPM_FM_CMD40_REG40_BIT, b
|
bit OPM_FM_CMD40_REG40_BIT, b
|
||||||
jp z, 1f
|
jp z, 1f
|
||||||
ld a, 0x40 : add c : ldi [iy], a
|
ld a, 0x40 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
;if (mask & OPM_FM_CMD40_REG90) opn_write_reg(chip_index, 0x90 + regbase, *data++);
|
;if (mask & OPM_FM_CMD40_REG90) opn_write_reg(chip_index, 0x90 + regbase, *data++);
|
||||||
bit OPM_FM_CMD40_REG90_BIT, b
|
bit OPM_FM_CMD40_REG90_BIT, b
|
||||||
jp z, 1f
|
jp z, 1f
|
||||||
ld a, 0x90 : add c : ldi [iy], a
|
ld a, 0x90 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
;if (mask & OPM_FM_CMD40_EOF) endOfFrame = true;
|
;if (mask & OPM_FM_CMD40_EOF) endOfFrame = true;
|
||||||
bit OPM_FM_CMD40_EOF_BIT, b
|
bit OPM_FM_CMD40_EOF_BIT, b
|
||||||
|
|
@ -591,19 +591,19 @@ parse_fm_channel_stream:
|
||||||
ld a, 0xA4 : add c : ldi [iy], a
|
ld a, 0xA4 : add c : ldi [iy], a
|
||||||
ld a, [ix + channel_struct_t.reg_fhi] : ldi [iy], a
|
ld a, [ix + channel_struct_t.reg_fhi] : ldi [iy], a
|
||||||
ld a, 0xA0 : add c : ldi [iy], a
|
ld a, 0xA0 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
; if (mask & OPM_FM_CMD80_REGB0) opn_write_reg(chip_index, 0xB0 + ch, *data++);
|
; if (mask & OPM_FM_CMD80_REGB0) opn_write_reg(chip_index, 0xB0 + ch, *data++);
|
||||||
bit OPM_FM_CMD80_REGB0_BIT, b
|
bit OPM_FM_CMD80_REGB0_BIT, b
|
||||||
jp z, 1f
|
jp z, 1f
|
||||||
ld a, 0xb0 : add c : ldi [iy], a
|
ld a, 0xb0 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
; if (mask & OPM_FM_CMD80_REGB4) opn_write_reg(chip_index, 0xB4 + ch, *data++);
|
; if (mask & OPM_FM_CMD80_REGB4) opn_write_reg(chip_index, 0xB4 + ch, *data++);
|
||||||
bit OPM_FM_CMD80_REGB4_BIT, b
|
bit OPM_FM_CMD80_REGB4_BIT, b
|
||||||
jp z, 1f
|
jp z, 1f
|
||||||
ld a, 0xb4 : add c : ldi [iy], a
|
ld a, 0xb4 : add c : ldi [iy], a
|
||||||
ldi a, [hl] : ld [iy], a
|
ldi a, [hl] : ldi [iy], a
|
||||||
1:
|
1:
|
||||||
; if (mask & OPM_FM_CMD80_EOF) endOfFrame = true;
|
; if (mask & OPM_FM_CMD80_EOF) endOfFrame = true;
|
||||||
bit OPM_FM_CMD80_EOF_BIT, b
|
bit OPM_FM_CMD80_EOF_BIT, b
|
||||||
|
|
@ -618,6 +618,7 @@ parse_fm_channel_stream:
|
||||||
ld a, b : and 0xE0 : cp OPM_FM_KEY
|
ld a, b : and 0xE0 : cp OPM_FM_KEY
|
||||||
jp nz, .not_key
|
jp nz, .not_key
|
||||||
|
|
||||||
|
inc hl
|
||||||
; opn_write_reg(chip_index, 0x28, ((mask & OPM_FM_CMDA0_OP_MASK) << 4) + ch);
|
; opn_write_reg(chip_index, 0x28, ((mask & OPM_FM_CMDA0_OP_MASK) << 4) + ch);
|
||||||
ld a, [player_struct.channel_idx] : ld c, a
|
ld a, [player_struct.channel_idx] : ld c, a
|
||||||
ld a, b : and OPM_FM_CMDA0_OP_MASK
|
ld a, b : and OPM_FM_CMDA0_OP_MASK
|
||||||
|
|
@ -758,6 +759,30 @@ play_tick:
|
||||||
; chip_index = 0;
|
; chip_index = 0;
|
||||||
xor a : ld [player_struct.chip_idx], a
|
xor a : ld [player_struct.chip_idx], a
|
||||||
|
|
||||||
|
; opmplay_parse_stream(ctx, ctx->channels + 0, 0, opmplay_parse_fm_control_stream);
|
||||||
|
ld ix, player_channels + (channel_struct_t * 0)
|
||||||
|
ld bc, parse_fm_control_stream
|
||||||
|
call parse_stream
|
||||||
|
|
||||||
|
; opmplay_parse_stream(ctx, ctx->channels + 1, 0, opmplay_parse_fm_channel_stream);
|
||||||
|
ld ix, player_channels + (channel_struct_t * 1)
|
||||||
|
ld bc, parse_fm_channel_stream
|
||||||
|
ld a, 0 : ld [player_struct.channel_idx], a
|
||||||
|
call parse_stream
|
||||||
|
|
||||||
|
; opmplay_parse_stream(ctx, ctx->channels + 2, 1, opmplay_parse_fm_channel_stream);
|
||||||
|
ld ix, player_channels + (channel_struct_t * 2)
|
||||||
|
ld bc, parse_fm_channel_stream
|
||||||
|
ld a, 1 : ld [player_struct.channel_idx], a
|
||||||
|
call parse_stream
|
||||||
|
|
||||||
|
; opmplay_parse_stream(ctx, ctx->channels + 3, 2, opmplay_parse_fm_channel_stream);
|
||||||
|
ld ix, player_channels + (channel_struct_t * 3)
|
||||||
|
ld bc, parse_fm_channel_stream
|
||||||
|
ld a, 2 : ld [player_struct.channel_idx], a
|
||||||
|
call parse_stream
|
||||||
|
|
||||||
|
if 0
|
||||||
; opmplay_parse_stream(ctx, ctx->channels + 4, 0, opmplay_parse_ay_channel_stream);
|
; opmplay_parse_stream(ctx, ctx->channels + 4, 0, opmplay_parse_ay_channel_stream);
|
||||||
ld ix, player_channels + (channel_struct_t * 4)
|
ld ix, player_channels + (channel_struct_t * 4)
|
||||||
ld bc, parse_ay_channel_stream
|
ld bc, parse_ay_channel_stream
|
||||||
|
|
@ -784,6 +809,7 @@ play_tick:
|
||||||
ldi [iy], 7
|
ldi [iy], 7
|
||||||
ld a, [player_struct.ssg_r7 + 0]
|
ld a, [player_struct.ssg_r7 + 0]
|
||||||
ldi [iy], a
|
ldi [iy], a
|
||||||
|
endif
|
||||||
|
|
||||||
; terminate list
|
; terminate list
|
||||||
ldi [iy], -1
|
ldi [iy], -1
|
||||||
|
|
@ -791,6 +817,30 @@ play_tick:
|
||||||
; chip_index = 1;
|
; chip_index = 1;
|
||||||
ld a, 1 : ld [player_struct.chip_idx], a
|
ld a, 1 : ld [player_struct.chip_idx], a
|
||||||
|
|
||||||
|
; opmplay_parse_stream(ctx, ctx->channels + 0, 0, opmplay_parse_fm_control_stream);
|
||||||
|
ld ix, player_channels + (channel_struct_t * 8)
|
||||||
|
ld bc, parse_fm_control_stream
|
||||||
|
call parse_stream
|
||||||
|
|
||||||
|
; opmplay_parse_stream(ctx, ctx->channels + 1, 0, opmplay_parse_fm_channel_stream);
|
||||||
|
ld ix, player_channels + (channel_struct_t * 9)
|
||||||
|
ld bc, parse_fm_channel_stream
|
||||||
|
ld a, 0 : ld [player_struct.channel_idx], a
|
||||||
|
call parse_stream
|
||||||
|
|
||||||
|
; opmplay_parse_stream(ctx, ctx->channels + 2, 1, opmplay_parse_fm_channel_stream);
|
||||||
|
ld ix, player_channels + (channel_struct_t * 10)
|
||||||
|
ld bc, parse_fm_channel_stream
|
||||||
|
ld a, 1 : ld [player_struct.channel_idx], a
|
||||||
|
call parse_stream
|
||||||
|
|
||||||
|
; opmplay_parse_stream(ctx, ctx->channels + 3, 2, opmplay_parse_fm_channel_stream);
|
||||||
|
ld ix, player_channels + (channel_struct_t * 11)
|
||||||
|
ld bc, parse_fm_channel_stream
|
||||||
|
ld a, 2 : ld [player_struct.channel_idx], a
|
||||||
|
call parse_stream
|
||||||
|
|
||||||
|
if 0
|
||||||
; opmplay_parse_stream(ctx, ctx->channels + 4, 0, opmplay_parse_ay_channel_stream);
|
; opmplay_parse_stream(ctx, ctx->channels + 4, 0, opmplay_parse_ay_channel_stream);
|
||||||
ld ix, player_channels + (channel_struct_t * 12)
|
ld ix, player_channels + (channel_struct_t * 12)
|
||||||
ld bc, parse_ay_channel_stream
|
ld bc, parse_ay_channel_stream
|
||||||
|
|
@ -817,6 +867,7 @@ play_tick:
|
||||||
ldi [iy], 7
|
ldi [iy], 7
|
||||||
ld a, [player_struct.ssg_r7 + 1]
|
ld a, [player_struct.ssg_r7 + 1]
|
||||||
ldi [iy], a
|
ldi [iy], a
|
||||||
|
endif
|
||||||
|
|
||||||
; terminate list
|
; terminate list
|
||||||
ldi [iy], -1
|
ldi [iy], -1
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue