From ff5a6b1a642a619544bb62958fb2d7ff0b6a794d Mon Sep 17 00:00:00 2001 From: revelj Date: Sun, 16 Aug 2020 09:34:00 +0200 Subject: [PATCH] Made frequency table lookups work across 256 byte boundaries Fixes https://github.com/trash80/mGB/issues/3 --- Source/mGBASMSynthFunctions.s | 93 ++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 45 deletions(-) diff --git a/Source/mGBASMSynthFunctions.s b/Source/mGBASMSynthFunctions.s index 364bbb7..0afc172 100644 --- a/Source/mGBASMSynthFunctions.s +++ b/Source/mGBASMSynthFunctions.s @@ -60,12 +60,13 @@ _asmUpdatePu1PbWheelReset$:: ld A,(hl) ld B,A - ld A,#<_freq - add A,B - add A,B - ld E,A - ld A,#>_freq - ld D,A + ld A,B + add A,A + add A,#<_freq + ld E,A + adc #>_freq + sub E + ld D,A ld A,(DE) ld (#0xFF13),A @@ -144,15 +145,13 @@ _asmUpdatePu2PbWheelReset$:: ld hl, #_noteStatus + 3 ld A,(hl) - ld B,A - - ld A,#<_freq - add A,B - add A,B - ld E,A - ld A,#>_freq - ld D,A + add A,A + add A,#<_freq + ld E,A + adc #>_freq + sub E + ld D,A ld A,(DE) ld (#0xFF18),A @@ -254,14 +253,13 @@ _asmUpdateWavPbWheelReset$:: ld hl, #_noteStatus + 5 ld A,(hl) - ld B,A - ld A,#<_freq - add A,B - add A,B - ld E,A - ld A,#>_freq - ld D,A + add A,A + add A,#<_freq + ld E,A + adc #>_freq + sub E + ld D,A ld A,(DE) @@ -340,9 +338,10 @@ _asmUpdateNoiPbWheelReset$:: ld B,A ld A,#<_noiFreq - add A,B + add A,B ld E,A - ld A,#>_noiFreq + adc A,#>_noiFreq + sub E ld D,A ld A,(DE) @@ -380,7 +379,7 @@ _asmPlayNotePu1:: cp #0x00 jr nz,_asmPlayNotePu1OnSet$ - jr _asmPlayNotePu1Off$ + jp _asmPlayNotePu1Off$ _asmPlayNotePu1OnSet$:: ld A, (#0xFF12) @@ -426,12 +425,13 @@ _asmPlayNotePu1On$:: ld hl, #_noteStatus + 1 ld (hl),B - ld A,#<_freq - add A,B - add A,B - ld E,A - ld A,#>_freq - ld D,A + ld A,B + add A,A + add A,#<_freq + ld E,A + adc #>_freq + sub E + ld D,A ld A,(DE) ld (#0xFF13),A @@ -522,7 +522,7 @@ _asmPlayNotePu2$:: cp #0x00 jr nz,_asmPlayNotePu2OnSet$ - jr _asmPlayNotePu2Off$ + jp _asmPlayNotePu2Off$ _asmPlayNotePu2OnSet$:: ld A, (#0xFF17) @@ -566,12 +566,13 @@ _asmPlayNotePu2On$:: ld hl, #_noteStatus + 3 ld (hl),B - ld A,#<_freq - add A,B - add A,B - ld E,A - ld A,#>_freq - ld D,A + ld A,B + add A,A + add A,#<_freq + ld E,A + adc #>_freq + sub E + ld D,A ld A,(DE) ld (#0xFF18),A @@ -689,12 +690,13 @@ pop bc ret _asmPlayNoteWavSet$:: - ld A,#<_freq - add A,B - add A,B - ld E,A - ld A,#>_freq - ld D,A + ld A,B + add A,A + add A,#<_freq + ld E,A + adc #>_freq + sub E + ld D,A ld A,(DE) @@ -819,9 +821,10 @@ _asmPlayNoteNoiOn$:: ld (#0xFF21),A ld A,#<_noiFreq - add A,B + add A,B ld E,A - ld A,#>_noiFreq + adc A,#>_noiFreq + sub E ld D,A ld A,(DE)