diff --git a/src-md/crt0.s b/src-md/crt0.s index 0027d30c3..252a7b68e 100644 --- a/src-md/crt0.s +++ b/src-md/crt0.s @@ -2597,19 +2597,25 @@ bump_fm: 13: /* EOF reached */ move.l fm_loop,d0 - add.w d3,d0 + andi.l #0x01FF,d0 /* 1 read buffer */ + add.l d3,d0 andi.w #0x0FFF,d0 /* 4KB buffer */ - move.l d0,fm_loop2 /* offset to z80 loop start */ + move.w d0,fm_loop2 /* offset to z80 loop start */ /* reset */ jsr vgm_reset /* restart at start of compressed data */ - move.w #0,offs68k - move.w d3,offsz80 - move.w #7,preread_cnt /* refill buffer if room */ - bra.w 7f + move.l fm_loop,d2 + andi.w #0xFE00,d2 + beq.b 14f + move.l d2,-(sp) + jsr vgm_read2 + addq.l #4,sp + move.w d0,d2 + andi.w #0x7FFF,d2 /* amount data pre-read (with wrap around) */ 14: move.w d2,offs68k move.w d3,offsz80 + move.w #7,preread_cnt /* refill buffer if room */ bra.w 7f 5: @@ -2625,8 +2631,12 @@ bump_fm: /* music ended, check for loop */ tst.w fm_rep - beq.w 7f /* no repeat, leave FM_IDX as 0 */ + bne.b 50f /* repeat, loop vgm */ + /* no repeat, reset FM */ + jsr rst_ym2612 + bra.w 7f +50: move.l fm_loop2,d0 z80wr FM_START,d0 lsr.w #8,d0 diff --git a/src-md/scd_fs.c b/src-md/scd_fs.c index 34cb78ac0..3df369d84 100644 --- a/src-md/scd_fs.c +++ b/src-md/scd_fs.c @@ -11,8 +11,9 @@ #define CHUNK_BLOCKS (1<