diff options
Diffstat (limited to 'src-z80/core')
| -rw-r--r-- | src-z80/core/bgm.z80 | 53 | ||||
| -rw-r--r-- | src-z80/core/main.z80 | 8 | ||||
| -rw-r--r-- | src-z80/core/sfx.z80 | 30 |
3 files changed, 51 insertions, 40 deletions
diff --git a/src-z80/core/bgm.z80 b/src-z80/core/bgm.z80 index f69235d..c1650f1 100644 --- a/src-z80/core/bgm.z80 +++ b/src-z80/core/bgm.z80 @@ -210,38 +210,59 @@ ClearBGM: or a call z, StopPCM - ld b, 4 ; Mute all non-locked PSG channels - ld de, RAM_PSGData+48 +;---------------------------------------------------------------------------- + + ld b, 4 ; Reset all PSG channels + ld de, RAM_PSGData+48+15 ld hl, RAM_Locked+11 .mutepsg: PollPCM - ld a, (hl) + + ld (hl), $00 ; Reset BGM volume + + ld a, e + sub 15 + ld e, a + + ld a, (hl) ; Mute PSG channel if it isn't locked or a jr nz, .nopsgmute xor a ld (de), a + .nopsgmute: PollPCM - ld a, e - sub 16 - ld e, a + + dec e dec l djnz .mutepsg - ld b, 8 ; Mute all non-locked FM channels -.mutefm: +;---------------------------------------------------------------------------- + + ld b, 8 ; Reset all FM channels + ld de, RAM_BGMFMVol+7 +.resetfm: PollPCM - ld a, (hl) + + xor a ; Reset BGM volume + ld (de), a + dec e + + ld a, (hl) ; Kill FM channel if not locked or a - jr nz, .nofmmute + jp nz, .nofmkill + PollPCM - dec b - ld (ix+0), $28 - ld (ix+1), b - inc b -.nofmmute: + + ld a, b + dec a + call KillFM + +.nofmkill: dec l - djnz .mutefm + djnz .resetfm + +;---------------------------------------------------------------------------- ret ; End of subroutine diff --git a/src-z80/core/main.z80 b/src-z80/core/main.z80 index cb0329e..9ac1aa4 100644 --- a/src-z80/core/main.z80 +++ b/src-z80/core/main.z80 @@ -88,7 +88,6 @@ EntryPoint: ld (ix+1), $03 ld (ix+0), $26 ld (ix+1), $C9 - ;ld (ix+1), $FF ld (ix+0), $27 ld (ix+1), $3F @@ -159,16 +158,9 @@ DoTick: bit 0, a call nz, UpdatePCM -; ld (ix+0), $26 ; Reset timer -;.timerset: -; ld (ix+1), $C8 ld (ix+0), $27 ld (ix+1), $2F -; ld a, (.timerset+3) ; $C8 is too fast, $C9 is too slow -; xor $01 ; So, we alternate between them to compensate -; ld (.timerset+3), a - PollPCM DoTick_SFX: ; Process SFXs diff --git a/src-z80/core/sfx.z80 b/src-z80/core/sfx.z80 index b7e26aa..f32a8f0 100644 --- a/src-z80/core/sfx.z80 +++ b/src-z80/core/sfx.z80 @@ -273,26 +273,16 @@ ClearSFX: rrca ld iyl, a - ld a, b ; Kill ADSR + ld a, b ; Kill ADSR call KillFM PollPCM - - ld hl, RAM_BGMFMVol ; Restore BGM FM volume - ld a, b - add l - ld l, a - ld c, (hl) - ld a, l - add 8 - ld l, a - ld (hl), c - - PollPCM - - ld a, l ; Restore BGM FM instrument - sub 8*2 + + ld a, b ; Restore BGM FM instrument + ld h, RAM_BGMFMInstr>>8 + add RAM_BGMFMInstr&$FF ld l, a + push bc push de push hl @@ -302,6 +292,14 @@ ClearSFX: pop hl pop de pop bc + + PollPCM + + ld a, b ; Restore BGM FM volume + add RAM_BGMFMVol&$FF + ld l, a + ld b, (hl) + call SetFMVolLoad PollPCM inc b |
