From 0c36c0633bc82c9c18fe5986b08ba37bf92e2371 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 12 Jan 2023 23:14:57 -0500 Subject: [PATCH 01/11] VRC6: fix crash --- src/engine/platform/vrc6.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/vrc6.cpp b/src/engine/platform/vrc6.cpp index 9b4c49f03..f798d6e8d 100644 --- a/src/engine/platform/vrc6.cpp +++ b/src/engine/platform/vrc6.cpp @@ -81,7 +81,7 @@ void DivPlatformVRC6::acquire(short** buf, size_t len) { int sample=vrc6.out()<<9; // scale to 16 bit if (sample>32767) sample=32767; if (sample<-32768) sample=-32768; - buf[0][i]=buf[1][i]=sample; + buf[0][i]=sample; // Oscilloscope buffer part if (++writeOscBuf>=32) { From 21ab10c30cc4109541655e6f7bcebf84fd76d397 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 12 Jan 2023 23:16:33 -0500 Subject: [PATCH 02/11] N163: fix crash --- src/engine/platform/n163.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/n163.cpp b/src/engine/platform/n163.cpp index 7f337e980..a65532793 100644 --- a/src/engine/platform/n163.cpp +++ b/src/engine/platform/n163.cpp @@ -114,7 +114,7 @@ void DivPlatformN163::acquire(short** buf, size_t len) { int out=(n163.out()<<6)*2; // scale to 16 bit if (out>32767) out=32767; if (out<-32768) out=-32768; - buf[0][i]=buf[1][i]=out; + buf[0][i]=out; if (n163.voice_cycle()==0x78) for (int i=0; i<8; i++) { oscBuf[i]->data[oscBuf[i]->needle++]=n163.voice_out(i)<<7; From e3073a22e9d9244d11c5c5c4a38b7bbb44bd96d1 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 12 Jan 2023 23:17:32 -0500 Subject: [PATCH 03/11] BubSys: fix crash --- src/engine/platform/bubsyswsg.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/platform/bubsyswsg.cpp b/src/engine/platform/bubsyswsg.cpp index 318697223..d7b15d8ff 100644 --- a/src/engine/platform/bubsyswsg.cpp +++ b/src/engine/platform/bubsyswsg.cpp @@ -68,7 +68,7 @@ void DivPlatformBubSysWSG::acquire(short** buf, size_t len) { if (out>32767) out=32767; //printf("out: %d\n",out); - buf[0][h]=buf[1][h]=out; + buf[0][h]=out; } } From d99f0cd0456d57af2258c8eb94cc703e635da38e Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 12 Jan 2023 23:19:28 -0500 Subject: [PATCH 04/11] T6W28: forceIns() noise mode --- src/engine/platform/t6w28.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/engine/platform/t6w28.cpp b/src/engine/platform/t6w28.cpp index 4f42d076c..e81d156f1 100644 --- a/src/engine/platform/t6w28.cpp +++ b/src/engine/platform/t6w28.cpp @@ -289,6 +289,7 @@ void DivPlatformT6W28::forceIns() { chan[i].insChanged=true; chan[i].freqChanged=true; } + rWrite(1,0xe0+chan[3].duty); } void* DivPlatformT6W28::getChanState(int ch) { From e1d0c8aa79121537cdb01529ed7115b90a6ed2f7 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Thu, 12 Jan 2023 23:55:58 -0500 Subject: [PATCH 05/11] fix #920 --- src/log.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/log.cpp b/src/log.cpp index 1611e688f..8fec13189 100644 --- a/src/log.cpp +++ b/src/log.cpp @@ -29,13 +29,14 @@ int logLevel=LOGLEVEL_INFO; FILE* logFile; char* logFileBuf; +char* logFileWriteBuf; unsigned int logFilePosI; unsigned int logFilePosO; std::thread* logFileThread; std::mutex logFileLock; std::mutex logFileLockI; std::condition_variable logFileNotify; -bool logFileAvail=false; +std::atomic logFileAvail(false); std::atomic logPosition; @@ -157,8 +158,8 @@ void _logFileThread() { } } else { // wait - if (!logFileAvail) break; fflush(logFile); + if (!logFileAvail) break; logFileNotify.wait(lock); } } @@ -177,6 +178,7 @@ bool startLogFile(const char* path) { } logFileBuf=new char[TA_LOGFILE_BUF_SIZE]; + logFileWriteBuf=new char[TA_LOGFILE_BUF_SIZE]; logFilePosI=0; logFilePosO=0; logFileAvail=true; From 961c9773789c2183eafd257bb3afbc3376304724 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 13 Jan 2023 00:07:56 -0500 Subject: [PATCH 06/11] OPM/OPZ: custom clocks finally --- src/engine/platform/arcade.cpp | 8 +++++--- src/engine/platform/tx81z.cpp | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/engine/platform/arcade.cpp b/src/engine/platform/arcade.cpp index f9a2e7cb7..1984e5a18 100644 --- a/src/engine/platform/arcade.cpp +++ b/src/engine/platform/arcade.cpp @@ -19,6 +19,7 @@ #include "arcade.h" #include "../engine.h" +#include "../../ta-log.h" #include #include @@ -868,17 +869,18 @@ void DivPlatformArcade::setFlags(const DivConfig& flags) { switch (flags.getInt("clockSel",0)) { case 1: chipClock=COLOR_PAL*4.0/5.0; - baseFreqOff=12; break; case 2: chipClock=4000000.0; - baseFreqOff=-122; break; default: chipClock=COLOR_NTSC; - baseFreqOff=0; break; } + CHECK_CUSTOM_CLOCK; + + baseFreqOff=round(768.0*(log((COLOR_NTSC/(double)chipClock))/log(2.0))); + rate=chipClock/64; for (int i=0; i<8; i++) { oscBuf[i]->rate=rate; diff --git a/src/engine/platform/tx81z.cpp b/src/engine/platform/tx81z.cpp index 2b119abbe..fa3d4d18a 100644 --- a/src/engine/platform/tx81z.cpp +++ b/src/engine/platform/tx81z.cpp @@ -941,14 +941,15 @@ void DivPlatformTX81Z::setFlags(const DivConfig& flags) { int clockSel=flags.getInt("clockSel",0); if (clockSel==2) { chipClock=4000000.0; - baseFreqOff=-122; } else if (clockSel==1) { chipClock=COLOR_PAL*4.0/5.0; - baseFreqOff=12; } else { chipClock=COLOR_NTSC; - baseFreqOff=0; } + CHECK_CUSTOM_CLOCK; + + baseFreqOff=round(768.0*(log((COLOR_NTSC/(double)chipClock))/log(2.0))); + rate=chipClock/64; for (int i=0; i<8; i++) { oscBuf[i]->rate=rate; From 14e21826c3e41805ce104137f7208539cb60ec7d Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 13 Jan 2023 00:12:14 -0500 Subject: [PATCH 07/11] don't fail fast --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 95b3229f1..9c4b11c46 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,7 +26,7 @@ jobs: - { name: 'macOS ARM', os: macos-latest, arch: arm64 } - { name: 'Linux x86_64', os: ubuntu-18.04, arch: x86_64 } #- { name: 'Linux ARM', os: ubuntu-18.04, arch: armhf } - fail-fast: true + fail-fast: false name: ${{ matrix.config.name }} runs-on: ${{ matrix.config.os }} From e560838025be7c723839f5c2183544f349d899db Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 13 Jan 2023 00:15:37 -0500 Subject: [PATCH 08/11] OPL/OPLL: expand relative pitch range... poor Z80 --- src/engine/platform/opl.cpp | 2 +- src/engine/platform/opll.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 51f858519..4e798c6e5 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -343,7 +343,7 @@ void DivPlatformOPL::tick(bool sysTick) { if (chan[i].std.pitch.had) { if (chan[i].std.pitch.mode) { chan[i].pitch2+=chan[i].std.pitch.val; - CLAMP_VAR(chan[i].pitch2,-32768,32767); + CLAMP_VAR(chan[i].pitch2,-131071,131071); } else { chan[i].pitch2=chan[i].std.pitch.val; } diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index 3556679ef..cba125c15 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -124,7 +124,7 @@ void DivPlatformOPLL::tick(bool sysTick) { if (chan[i].std.pitch.had) { if (chan[i].std.pitch.mode) { chan[i].pitch2+=chan[i].std.pitch.val; - CLAMP_VAR(chan[i].pitch2,-32768,32767); + CLAMP_VAR(chan[i].pitch2,-65535,65535); } else { chan[i].pitch2=chan[i].std.pitch.val; } From bb1a80d1cbee99ed5ccf34240f0672eab25742c6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 13 Jan 2023 00:16:16 -0500 Subject: [PATCH 09/11] CI: temporarily disable Linux builds --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9c4b11c46..4d0d27c4a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,7 +24,7 @@ jobs: - { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 } - { name: 'macOS x86_64', os: macos-latest, arch: x86_64 } - { name: 'macOS ARM', os: macos-latest, arch: arm64 } - - { name: 'Linux x86_64', os: ubuntu-18.04, arch: x86_64 } + ##- { name: 'Linux x86_64', os: ubuntu-18.04, arch: x86_64 } #- { name: 'Linux ARM', os: ubuntu-18.04, arch: armhf } fail-fast: false From b5a1c132852b902c53281ac530f4a23ce553c517 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 13 Jan 2023 00:21:50 -0500 Subject: [PATCH 10/11] CI: temporarily disable Windows MinGW builds --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4d0d27c4a..2540f8133 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,8 +20,8 @@ jobs: config: - { name: 'Windows MSVC x86', os: windows-latest, compiler: msvc, arch: x86 } - { name: 'Windows MSVC x86_64', os: windows-latest, compiler: msvc, arch: x86_64 } - - { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 } - - { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 } + ##- { name: 'Windows MinGW x86', os: ubuntu-20.04, compiler: mingw, arch: x86 } + ##- { name: 'Windows MinGW x86_64', os: ubuntu-20.04, compiler: mingw, arch: x86_64 } - { name: 'macOS x86_64', os: macos-latest, arch: x86_64 } - { name: 'macOS ARM', os: macos-latest, arch: arm64 } ##- { name: 'Linux x86_64', os: ubuntu-18.04, arch: x86_64 } From fe4800f1653ff1278030ab542c427a57290ac0eb Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 13 Jan 2023 00:22:00 -0500 Subject: [PATCH 11/11] AY8930: fix Mag Max and Kyugo clock rates --- src/engine/platform/ay8930.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/engine/platform/ay8930.cpp b/src/engine/platform/ay8930.cpp index fb2584c98..50b36a64f 100644 --- a/src/engine/platform/ay8930.cpp +++ b/src/engine/platform/ay8930.cpp @@ -809,6 +809,12 @@ void DivPlatformAY8930::setFlags(const DivConfig& flags) { case 12: chipClock=3600000; break; + case 13: + chipClock=20000000/16; + break; + case 14: + chipClock=1536000; + break; default: chipClock=COLOR_NTSC/2.0; break;