From b6026e76c538f680fbf6de75b4ef4d3e5a35d87b Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 19 Apr 2022 18:10:43 -0500 Subject: [PATCH] SMS: fix noise pitch being odd on linear pitch off issue #379 --- src/engine/platform/sms.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/engine/platform/sms.cpp b/src/engine/platform/sms.cpp index d755e84f..da31e478 100644 --- a/src/engine/platform/sms.cpp +++ b/src/engine/platform/sms.cpp @@ -23,8 +23,6 @@ #define rWrite(v) {if (!skipRegisterWrites) {sn->write(v); if (dumpWrites) {addWrite(0x200,v);}}} -#define CHIP_DIVIDER 64 - const char* regCheatSheetSN[]={ "DATA", "0", NULL @@ -55,6 +53,8 @@ int DivPlatformSMS::acquireOne() { void DivPlatformSMS::tick(bool sysTick) { for (int i=0; i<4; i++) { + int CHIP_DIVIDER=64; + if (i==3 && isRealSN) CHIP_DIVIDER=60; chan[i].std.next(); if (chan[i].std.vol.had) { chan[i].outVol=MIN(15,chan[i].std.vol.val)-(15-(chan[i].vol&15)); @@ -119,8 +119,7 @@ void DivPlatformSMS::tick(bool sysTick) { } } if (chan[3].freqChanged || updateSNMode) { - // seems arbitrary huh? - chan[3].freq=parent->calcFreq(chan[3].baseFreq,chan[3].pitch-1-(isRealSN?127:0),true)+chan[3].std.pitch.val; + chan[3].freq=parent->calcFreq(chan[3].baseFreq,chan[3].pitch,true)+chan[3].std.pitch.val; if (chan[3].freq>1023) chan[3].freq=1023; if (chan[3].actualNote>0x5d) chan[3].freq=0x01; if (snNoiseMode&2) { // take period from channel 3 @@ -164,6 +163,8 @@ void DivPlatformSMS::tick(bool sysTick) { } int DivPlatformSMS::dispatch(DivCommand c) { + int CHIP_DIVIDER=64; + if (c.chan==3 && isRealSN) CHIP_DIVIDER=60; switch (c.cmd) { case DIV_CMD_NOTE_ON: if (c.value!=DIV_NOTE_NULL) {