From b04ed91297b5f03854ee0e906775ddc2c48036f6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Mon, 29 Apr 2024 01:03:52 -0500 Subject: [PATCH] YM2608-LLE, part 19 fix YM2610 crash fix chan osc --- src/engine/platform/ym2203.cpp | 14 +++----------- src/engine/platform/ym2608.cpp | 14 +++----------- src/engine/platform/ym2610.cpp | 14 +++----------- src/engine/platform/ym2610b.cpp | 14 +++----------- src/engine/platform/ym2610shared.h | 2 ++ 5 files changed, 14 insertions(+), 44 deletions(-) diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index 2ff583ca2..5a92c4dc9 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -399,20 +399,12 @@ void DivPlatformYM2203::acquire_lle(short** buf, size_t len) { } if (!fm_lle.o_s && lastS) { if (!fm_lle.o_sh1 && lastSH) { - dacVal2=dacVal; - } - - if (!fm_lle.o_sh2 && lastSH2) { - dacVal2=dacVal; - } - - if (fm_lle.o_sh1 && !lastSH) { - dacOut[0]=dacVal2^0x8000; + dacOut[0]=dacVal^0x8000; have0=true; } - if (fm_lle.o_sh2 && !lastSH2) { - dacOut[1]=dacVal2^0x8000; + if (!fm_lle.o_sh2 && lastSH2) { + dacOut[1]=dacVal^0x8000; have1=true; } diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 4c240e556..af48f4670 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -603,20 +603,12 @@ void DivPlatformYM2608::acquire_lle(short** buf, size_t len) { } if (!fm_lle.o_s && lastS) { if (!fm_lle.o_sh1 && lastSH) { - dacVal2=dacVal; - } - - if (!fm_lle.o_sh2 && lastSH2) { - dacVal2=dacVal; - } - - if (fm_lle.o_sh1 && !lastSH) { - dacOut[0]=dacVal2^0x8000; + dacOut[0]=dacVal^0x8000; have0=true; } - if (fm_lle.o_sh2 && !lastSH2) { - dacOut[1]=dacVal2^0x8000; + if (!fm_lle.o_sh2 && lastSH2) { + dacOut[1]=dacVal^0x8000; have1=true; } diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index da5e1fb8b..a3eaeecf3 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -525,20 +525,12 @@ void DivPlatformYM2610::acquire_lle(short** buf, size_t len) { } if (!fm_lle.o_s && lastS) { if (!fm_lle.o_sh1 && lastSH) { - dacVal2=dacVal; - } - - if (!fm_lle.o_sh2 && lastSH2) { - dacVal2=dacVal; - } - - if (fm_lle.o_sh1 && !lastSH) { - dacOut[0]=dacVal2^0x8000; + dacOut[0]=dacVal^0x8000; have0=true; } - if (fm_lle.o_sh2 && !lastSH2) { - dacOut[1]=dacVal2^0x8000; + if (!fm_lle.o_sh2 && lastSH2) { + dacOut[1]=dacVal^0x8000; have1=true; } diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index 9ce7902e5..118ce4009 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -594,20 +594,12 @@ void DivPlatformYM2610B::acquire_lle(short** buf, size_t len) { } if (!fm_lle.o_s && lastS) { if (!fm_lle.o_sh1 && lastSH) { - dacVal2=dacVal; - } - - if (!fm_lle.o_sh2 && lastSH2) { - dacVal2=dacVal; - } - - if (fm_lle.o_sh1 && !lastSH) { - dacOut[0]=dacVal2^0x8000; + dacOut[0]=dacVal^0x8000; have0=true; } - if (fm_lle.o_sh2 && !lastSH2) { - dacOut[1]=dacVal2^0x8000; + if (!fm_lle.o_sh2 && lastSH2) { + dacOut[1]=dacVal^0x8000; have1=true; } diff --git a/src/engine/platform/ym2610shared.h b/src/engine/platform/ym2610shared.h index 35901fc9a..056639cda 100644 --- a/src/engine/platform/ym2610shared.h +++ b/src/engine/platform/ym2610shared.h @@ -116,6 +116,8 @@ class DivPlatformYM2610Base: public DivPlatformOPN { OPN2_Reset(&fm_nuked); OPN2_SetChipType(&fm_nuked,ym3438_mode_opn); + memset(&fm_lle,0,sizeof(fmopna_2610_t)); + if (useCombo==2) { fm_lle.input.cs=1; fm_lle.input.rd=0;