From 43468653a07bc26de73752cffcb4b3576813e576 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 10 Oct 2023 20:15:58 -0500 Subject: [PATCH] prepare for pre-calculated pitch table --- src/asm/spc700/player.s | 7 +++++++ src/asm/spc700/snes.s | 1 + src/engine/dispatch.h | 29 +++++++++++++++++++++++++++++ src/engine/platform/abstract.cpp | 3 +++ src/gui/settings.cpp | 2 +- 5 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 src/asm/spc700/player.s create mode 100644 src/asm/spc700/snes.s diff --git a/src/asm/spc700/player.s b/src/asm/spc700/player.s new file mode 100644 index 000000000..6ce6c3673 --- /dev/null +++ b/src/asm/spc700/player.s @@ -0,0 +1,7 @@ +; command stream player code for SPC700 architecture. + +csTick: + ret + +csInit: + ret diff --git a/src/asm/spc700/snes.s b/src/asm/spc700/snes.s new file mode 100644 index 000000000..7127bd4b5 --- /dev/null +++ b/src/asm/spc700/snes.s @@ -0,0 +1 @@ +; SNES DivDispatch code. diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 1a8ec347d..3f2dda6b1 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -267,6 +267,29 @@ struct DivCommand { value2(0) {} }; +struct DivPitchTable { + int pitch[(12*128)+1]; + unsigned char linearity, blockBits; + bool period; + + // get pitch + int get(int base, int pitch, int pitch2); + + // linear: note + // non-linear: get(note,0,0) + int getBase(int note); + + // calculate pitch table + void init(float tuning, double clock, double divider, int octave, unsigned char linear, bool isPeriod, unsigned char block=0); + + DivPitchTable(): + linearity(2), + blockBits(0), + period(false) { + memset(pitch,0,sizeof(pitch)); + } +}; + struct DivDelayedCommand { int ticks; DivCommand cmd; @@ -692,6 +715,11 @@ class DivDispatch { */ virtual void renderSamples(int sysID); + /** + * tell this DivDispatch that the tuning and/or pitch linearity has changed, and therefore the pitch table must be regenerated. + */ + virtual void notifyPitchTable(); + /** * initialize this DivDispatch. * @param parent the parent DivEngine. @@ -718,6 +746,7 @@ class DivDispatch { if (chipClock