fix R7 write
This commit is contained in:
parent
0f6da89826
commit
347ca2f9a6
|
@ -42,8 +42,20 @@ start:
|
|||
.loop:
|
||||
halt
|
||||
ld a, 1 : out (0xfe), a
|
||||
ld bc, 0xFFFD
|
||||
ld de, 0x00C0
|
||||
ld a, 0b11111000
|
||||
out (c), a
|
||||
ld hl, reg_buffer
|
||||
call player.reg_out
|
||||
ld a, 2 : out (0xfe), a
|
||||
ld a, 0b11111001
|
||||
ld b, 0xFF
|
||||
out (c), a
|
||||
inc hl
|
||||
call player.reg_out
|
||||
ld a, 3 : out (0xfe), a
|
||||
ld iy, reg_buffer
|
||||
call player.play_tick
|
||||
xor a : out (0xfe), a
|
||||
|
||||
|
|
|
@ -70,14 +70,11 @@ player_struct player_struct_t player_channels+(channel_struct_t*(3+0)+channel_
|
|||
; -----------------------------
|
||||
; -----------------------------
|
||||
; OPN register dump output
|
||||
; in: HL - registers in (reg:data) byte pairs, reg==0xFF - return
|
||||
; in:
|
||||
; BC = 0xFFFD
|
||||
; DE = 0x00C0 ; 0xFFBF compensated for outi
|
||||
; HL - registers in (reg:data) byte pairs, reg==0xFF - return
|
||||
reg_out:
|
||||
ld bc, 0xFFFD
|
||||
ld de, 0x00C0 ; 0xFFBF compensated for outi
|
||||
|
||||
; select 1st chip
|
||||
ld a, 0b11111000
|
||||
out (c), a
|
||||
.loop:
|
||||
ld b, d
|
||||
ld a, [hl]
|
||||
|
@ -248,8 +245,7 @@ parse_ay_channel_stream:
|
|||
push de, hl, ix
|
||||
|
||||
; ctx->ssg_r7[chip_index] &= ~(((1 << 3) | (1 << 0)) << ch);
|
||||
ld a, [player_struct.chip_idx] : ld e, a
|
||||
ld d, 0
|
||||
ld a, [player_struct.chip_idx] : ld e, a : ld d, 0
|
||||
ld ix, player_struct.ssg_r7
|
||||
add ix, de ; ix = ctx->ssg_r7[chip_index]
|
||||
|
||||
|
@ -668,6 +664,13 @@ parse_stream:
|
|||
.tok_loop:
|
||||
ld a, [player_struct.end_of_frame] : and a : jp nz, .end_of_frame
|
||||
|
||||
; common tokens
|
||||
ld a, [hl]
|
||||
cp OPM_STREAM_END
|
||||
jp z, .tok_end_of_stream
|
||||
cp OPM_STREAM_END_FRAME
|
||||
jp z, .tok_end_of_frame
|
||||
|
||||
; call stream parser proc
|
||||
call 0 ; :grins:
|
||||
.proc equ $-2
|
||||
|
@ -696,13 +699,7 @@ parse_stream:
|
|||
ld e, a : ld d, 0 : ld [ix + channel_struct_t.frames_to_play], de
|
||||
jp .tok_loop
|
||||
|
||||
.not_backref
|
||||
ld a, b
|
||||
cp OPM_STREAM_END
|
||||
jp z, .tok_end_of_stream
|
||||
cp OPM_STREAM_END_FRAME
|
||||
jp z, .tok_end_of_frame
|
||||
|
||||
.not_backref:
|
||||
; then it's most likely an delay
|
||||
call set_delay
|
||||
ld [ix + channel_struct_t.reload], de
|
||||
|
@ -788,33 +785,32 @@ play_tick:
|
|||
ld a, [player_struct.ssg_r7 + 0]
|
||||
ldi [iy], a
|
||||
|
||||
; select 2nd chip
|
||||
ldi [iy], 0b11111000
|
||||
ldi [iy], 0xFF
|
||||
; terminate list
|
||||
ldi [iy], -1
|
||||
|
||||
; chip_index = 1;
|
||||
ld a, 1 : ld [player_struct.chip_idx], a
|
||||
|
||||
; 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 * 12)
|
||||
ld bc, parse_ay_channel_stream
|
||||
ld a, 0 : ld [player_struct.channel_idx], a
|
||||
call parse_stream
|
||||
|
||||
; opmplay_parse_stream(ctx, ctx->channels + 5, 1, opmplay_parse_ay_channel_stream);
|
||||
ld ix, player_channels + (channel_struct_t * 5)
|
||||
ld ix, player_channels + (channel_struct_t * 13)
|
||||
ld bc, parse_ay_channel_stream
|
||||
ld a, 1 : ld [player_struct.channel_idx], a
|
||||
call parse_stream
|
||||
|
||||
; opmplay_parse_stream(ctx, ctx->channels + 6, 2, opmplay_parse_ay_channel_stream);
|
||||
ld ix, player_channels + (channel_struct_t * 6)
|
||||
ld ix, player_channels + (channel_struct_t * 14)
|
||||
ld bc, parse_ay_channel_stream
|
||||
ld a, 2 : ld [player_struct.channel_idx], a
|
||||
call parse_stream
|
||||
|
||||
; opmplay_parse_stream(ctx, ctx->channels + 7, 0, opmplay_parse_ay_channel_stream);
|
||||
ld ix, player_channels + (channel_struct_t * 7)
|
||||
ld ix, player_channels + (channel_struct_t * 15)
|
||||
ld bc, parse_ay_envnoise_stream
|
||||
call parse_stream
|
||||
|
||||
|
|
Loading…
Reference in a new issue