ARAM Map



The following contains ARAM usage past and present, including the latest version of AddmusicK. These mostly only cover the stable ARAM locations from $0000-$04FF, with some exceptions. Please note that they are sorted by when memory locations were discontinued (or changed), with the latest version containing all of the current memory locations sorted by source (New meaning that it debuted in the latest version).
Romi's Addmusic (Addmusic404)'s custom code used no new memory locations, and therefore is de facto not included in this list.

Latest Version

NOTE: $0400-$04FF are omitted from here and AddmusicK because the SPC700 program starts at $0400 rather than $0500.
Memory Locations Description UserDefine.asm Requirement Source
$00-$03 CPUIO register input from $2140-$2143 on the SNES side to $F4-$F7 on the SPC side. Cleared at a rate of (256/56)*16 timer 0 ticks (or 1 SFX tempo tick). $03 only (others are N/A)
!noSFX = false
Vanilla
$04 Last CPUIO0 SFX ID allocated and played. !noSFX = false AddmusicK
(dates back to Vanilla, but output functionality was overwritten by $0166 starting with AddmusicM, then it later lost its ability to be zeroed out when it was done playing with AddmusicK)
$05 CPUIO1 SFX ID currently playing. !noSFX = false AddmusicK
(dates back to Vanilla, but output functionality was overwritten by $0167 starting with AddmusicK)
$06 CPUIO2 music ID currently playing. N/A AddmusicK
(dates back to Vanilla, but output functionality was overwritten by $0168 starting with AddmusicK)
$07 Last CPUIO3 SFX ID allocated and played. !noSFX = false AddmusicK
(dates back to Vanilla, but output functionality was overwritten by $0167 in AddmusicM, then it was overwritten by $0169 and lost its ability to be zeroed out when it was done playing starting with AddmusicK)
$08-$0B CPUIO register input from $2140-$2143 on the SNES side to $F4-$F7 on the SPC side. Unlike $00-$03, these are not cleared regularly, and thus store the last value read. $0B only (others are N/A)
!noSFX = false
Vanilla
$0C Tick counter for the song to initialize itself. N/A Vanilla
$0D
Unused.
$0E-$0F Always zero. Read for a few operations where YA needs to have its bits inverted via subtracting a stored value. N/A Vanilla
$10-$17 Scratch RAM. Used for a variety of temporary purposes. N/A Vanilla
$18 Voice bit being processed for SFX. !noSFX = false AddmusicK
$19
Unused.
$1A Voice bits whose VxVOL DSP registers were cleared due to using noise and their noise frequency not matching the one currently in use. !noSFX = false AddmusicK 1.0.9
$1B Voice bits indicating which voices the P-Switch as SFX are being used for. !noSFX = false
!PSwitchIsSFX = true
AddmusicK 1.0.9
$1C Tick counter for CPUIO1 SFX. !noSFX = false
!useSFXSequenceFor1DFASFX = !false
Vanilla
$1D Voice bits indicating which ones are being used for SFX. !noSFX = false Vanilla
$1E When !noiseFrequencyMatchChecks = false
Noise frequency of the SFX instance with the highest priority.
When !noiseFrequencyMatchChecks = true
Voice ID times 2 of the SFX instance with the highest priority.
!noSFX = false AddmusicK 1.0.9
$1F Highest priority of the SFX instance that is using noise. !noSFX = false AddmusicK 1.0.9
$20-$2F SFX pointer. One pointer per voice. !noSFX = false AddmusicK
$30-$3F Music track pointer. One pointer per voice. N/A Vanilla
$40-$41 Phrase pointer. N/A Vanilla
$42 Phrase jump counter. N/A Vanilla
$43 Global transposition. N/A Vanilla
$44 Fractional counter for the CPUIO polling/SFX tempo ticker (running at a tempo of $38). N/A Vanilla
$45 Counter for the CPUIO polling/SFX tempo ticker (running at a tempo of $38). N/A Vanilla
$46 Current voice ID being processed times 2. N/A Vanilla
$47 Voice bit indicating which channels should be keyed on in the music. Cleared every music tempo tick. N/A Vanilla
$48 Voice bit being processed for music. N/A Vanilla
$49 Fractional counter for the music tempo ticker. N/A Vanilla
$4A Voice bit indicating which voices have pitch modulation currently active for music. N/A AddmusicK
$4B Voice bit indicating which voices have noise currently active for music. N/A AddmusicK
$4C Voice bit indicating which voices have echo currently active for music. N/A AddmusicK
$4D Voice bit indicating which voices have pitch modulation currently active for SFX. !noSFX = false AddmusicK
$4E Voice bit indicating which voices have noise currently active for SFX. !noSFX = false AddmusicK
$4F Voice bit indicating which voices have echo currently active for SFX. !noSFX = false AddmusicK
$50 Fractional part of music tempo. N/A Vanilla
$51 Music tempo. N/A Vanilla
$52 Music tempo fade tick counter. Ends up reused as fractional part of target tempo once zero. N/A Vanilla
$53 Target music tempo. N/A Vanilla
$54 Music tempo fade rate per music tempo tick, fraction portion. N/A Vanilla
$55 Music tempo fade rate per music tempo tick, whole portion. N/A Vanilla
$56 Fractional part of song volume. N/A Vanilla
$57 Song volume. N/A Vanilla
$58 Song volume fade tick counter. Ends up reused as fractional part of target song volume once zero. N/A Vanilla
$59 Target song volume. N/A Vanilla
$5A Song volume fade rate per music tempo tick, fraction portion. N/A Vanilla
$5B Song volume fade rate per music tempo tick, whole portion. N/A Vanilla
$5C Voice bits used to indicate which voices need their VxVOL DSP registers changed. Bypassed if a pan fade is required, thus requiring a VxVOL DSP register write anyways. N/A Vanilla
$5D EDL (echo delay) DSP register mirror. N/A AddmusicK
$5E Voice bits used to indicate which voices are reserved for Yoshi Drums, and thus are muted accordingly until CPUIO1 command ID $02 is sent. N/A AddmusicK
$5F FLG DSP register mirror (including the noise clock frequency). N/A AddmusicK
(moved from $2E in Vanilla SMW)
$60 Echo volume fade tick counter. N/A Vanilla
$61 Fractional part of left echo volume. N/A Vanilla
$62 Left echo volume. N/A Vanilla
$63 Fractional part of right echo volume. N/A Vanilla
$64 Right echo volume. N/A Vanilla
$65 Left echo volume fade rate per music tempo tick, fraction portion. N/A Vanilla
$66 Left echo volume fade rate per music tempo tick, whole portion. N/A Vanilla
$67 Right echo volume fade rate per music tempo tick, fraction portion. N/A Vanilla
$68 Right echo volume fade rate per music tempo tick, whole portion. N/A Vanilla
$69 Target left echo volume. N/A Vanilla
$6A Target right echo volume. N/A Vanilla
$6B Number of music tempo ticks before the end of the note prior to forcibly keying it off. N/A AddmusicK
(moved from $10A8, or being embedded in code, in Vanilla SMW)
$6C-$6D Pointer to a set of instruments defined by the song currently playing. N/A AddmusicK
$6E Which voices are being reserved for Yoshi drums. N/A AddmusicK
$6F Velocity table ID. N/A AddmusicK
$70, $72, $74, $76, $78, $7A, $7C, $7E Music note duration, one byte per voice. N/A Vanilla
$71, $73, $75, $77, $79, $7B, $7D, $7F
Unused.
$80, $82, $84, $86, $88, $8A, $8C, $8E Track volume fade tick counter, one byte per voice. N/A Vanilla
$81, $83, $85, $87, $89, $8B, $8D, $8F Track panning fade tick counter, one byte per voice. N/A Vanilla
$90, $92, $94, $96, $98, $9A, $9C, $9E Pitch slide tick counter, one byte per voice. Shared by both music and SFX. N/A Vanilla
$91, $93, $95, $97, $99, $9B, $9D, $9F Pitch slide delay in music tempo ticks, one byte per voice. Shared by both music and SFX. N/A AddmusicK 1.0.9
(dates back to Vanilla, but was only properly implemented for music)
$A0, $A2, $A4, $A6, $A8, $AA, $AC, $AE Vibrato tick counter, one byte per voice. N/A Vanilla
$A1, $A3, $A5, $A7, $A9, $AB, $AD, $AF Maximum pitch offset for vibrato, one byte per voice. N/A Vanilla
$B0, $B2, $B4, $B6, $B8, $BA, $BC, $BE Tremolo tick counter, one byte per voice. N/A Vanilla
$B1, $B3, $B5, $B7, $B9, $BB, $BD, $BF Maximum volume offset for tremolo, one byte per voice. N/A Vanilla
$C0, $C2, $C4, $C6, $C8, $CA, $CC, $CE Subroutine ($E9 command) loop counter, one byte per voice. N/A Vanilla
$C1, $C3, $C5, $C7, $C9, $CB, $CD, $CF Current instrument ID, one byte per voice. N/A Vanilla
$D0-$DF Stores the VxVOL DSP register values of voices using noise that have had their volumes zeroed out due to not using the frequency currently being used. One word per voice. !noSFX = false AddmusicK 1.0.9
$E0-$EF
Unused.
$0100, $0102, $0104, $0106, $0108, $010A, $010C, $010E Music note duration after quantization, one byte per voice. N/A Vanilla
$0101, $0103, $0105, $0107, $0109, $010B, $010D, $010F
Unused.
$0110, $0112, $0114, $0116, $0118, $011A, $011C, $011E Vibrato fade tick counter, one byte per voice. N/A Vanilla
$0111, $0113, $0115, $0117, $0119, $011B, $011D, $011F
Unused.
$0120, $0122, $0124, $0126, $0128, $012A, $012C, $012E Transposition, one byte per voice. N/A AddmusicK
(Moved from $6727-$672E and being located in the middle of code in Addmusic405)
$0121, $0123, $0125, $0127, $0129, $012B, $012D, $012F
Unused.
$0130-$015F Instrument backup table. Six bytes per voice. N/A carol's MORE.bin
$0160 Contains various flags for various purposes, stored as %??????xy
See below for a list of bits that are currently used.
N/A Varies by bit
$0160 bit 0 (%???????y) Used to indicate whether any voices have been reserved for Yoshi Drums. N/A AddmusicK 1.0.9
(Dates back to AddmusicM, but was used to indicate Yoshi Drums on #5. This was not properly adapted when ported over to AddmusicK, which supported multiple channels containing Yoshi Drums and de facto abandoned this bit's original usage, but it has been updated to reflect the correct indicator)
$0160 bit 1 (%??????x?) Used to indicate whether sync mode is on. When enabled, $0166 and $0167 are used as a 16-bit music tempo tick counter. N/A AddmusicM
$0161 Voice bit indicating whether legato is on. N/A AddmusicM
$0162 Voice bit indicating which voices can be keyed off once their note durations have elapsed. N/A AddmusicM
$0163-$0165
Unused.
$0166 CPUIO0 output from $F4 on the SPC side to $2140 on the SNES side. Also used as part of a 16-bit music tempo tick counter if bit 1 of $0160 is set. N/A AddmusicM
$0167 CPUIO1 output from $F5 on the SPC side to $2141 on the SNES side. Also used as part of a 16-bit music tempo tick counter if bit 1 of $0160 is set. N/A AddmusicK
(Dates back to AddmusicM, but instead outputs from $F7 on the SPC side to $2143 on the SNES side)
$0168 CPUIO2 output from $F6 on the SPC side to $2142 on the SNES side. N/A AddmusicK
$0169 CPUIO3 output from $F7 on the SPC side to $2143 on the SNES side. N/A AddmusicK
(Moved from $0167 in AddmusicM, but only from where it outputs: the music tempo tick usage doesn't carry over here)
$016A-$016F
Unused.
$0170, $0172, $0174, $0176, $0178, $017A, $017C, $017E Backup remote gain values, in case they are overwritten by SFX. One byte per voice. N/A AddmusicK 1.0.9
$0171, $0173, $0175, $0177, $0179, $017B, $017D, $017F
Unused.
$0180-$018F
Unused.
$0190-$019F Remote code pointer for negative event IDs (on note start), one pointer per voice. N/A AddmusicK
$01A0, $01A2, $01A4, $01A6, $01A8, $01AA, $01AC, $01AE Number of tempo ticks before the note has ended to execute remote code event type 2. One byte per voice. N/A AddmusicK
$01A1, $01A3, $01A5, $01A7, $01A9, $01AB, $01AD, $01AF Indicates whether the note currently playing is a rest. One byte per voice. N/A AddmusicK
$01B0-$01CF
Reserved for stack.
(this is actually implicit, though, as it just indicates the maximum amount of stack space allocated due to unused memory locations)
$01D0, $01D2, $01D4, $01D6, $01D8, $01DA, $01DC, $01DE SFX note duration. One byte per voice. !noSFX = false AddmusicK
$01D1, $01D3, $01D5, $01D7, $01D9, $01DB, $01DD, $01DF SFX priority. One byte per voice. !noSFX = false AddmusicK
$01E0-$01EF Track pointer for the superloop ($E6 command) to jump back to, one pointer per voice. N/A carol's MORE.bin
(shows up again in AddmusicM, but not Addmusic405)
$01F0, $01F2, $01F4, $01F6, $01F8, $01FA, $01FC, $01FE Repeat counter for the superloop ($E6 command), one byte per voice. N/A carol's MORE.bin
(shows up again in AddmusicM, but not Addmusic405)
$01F1, $01F3, $01F5, $01F7, $01F9, $01FB, $01FD, $01FF Noise frequency for each SFX, one byte per voice. !noSFX = false
!noiseFrequencySFXInstanceResolution = true
AddmusicK 1.0.9
$0200, $0202, $0204, $0206, $0208, $020A, $020C, $020E Saved note duration for music, one byte per voice. N/A Vanilla
$0201, $0203, $0205, $0207, $0209, $020B, $020D, $020F Quantization, which is in 256ths of a note. One byte per voice. N/A Vanilla
$0210, $0212, $0214, $0216, $0218, $021A, $021C, $021E Pitch base multiplier, one byte per voice. N/A Vanilla
$0211, $0213, $0215, $0217, $0219, $021B, $021D, $021F Note velocity, one byte per voice. N/A Vanilla
$0220, $0222, $0224, $0226, $0228, $022A, $022C, $022E Contains various flags for various purposes, stored as %xy??????. One byte per voice.
See below for a list of bits whose usages don't match the latest version.
N/A AddmusicK 1.0.9
(At least one of the bits dates back to AddmusicK representing the entire byte, but was moved)
$0220, $0222, $0224, $0226, $0228, $022A, $022C, $022E bit 6 (%?y??????) Flag indicating that instrument data has been modified, and thus must be restored via the backup tables at $0130-$015F. One byte per voice. N/A AddmusicK 1.0.9
(was also in AddmusicK representing the entire byte)
$0220, $0222, $0224, $0226, $0228, $022A, $022C, $022E bit 7 (%x???????) Flag indicating that remote gain has been used, and thus must be restored via the backup tables at $0170, $0172, $0174, $0176, $0178, $017A, $017C, $017E. One byte per voice. N/A AddmusicK 1.0.9
$0221, $0223, $0225, $0227, $0229, $022B, $022D, $022F
Unused.
$0230, $0232, $0234, $0236, $0238, $023A, $023C, $023E Arpeggio note index: specifically, the offset from the currently playing arpeggio. One byte per voice. N/A AddmusicK
$0231, $0233, $0235, $0237, $0239, $023B, $023D, $023F Arpeggio type, one byte per voice. N/A AddmusicK
$0240, $0242, $0244, $0246, $0248, $024A, $024C, $024E Fractional part of track volume for music, one byte per voice. N/A Vanilla
$0241, $0243, $0245, $0247, $0249, $024B, $024D, $024F Track volume for music, one byte per voice. N/A Vanilla
$0250, $0252, $0254, $0256, $0258, $025A, $025C, $025E Track volume fade rate per music tempo tick, fraction portion. One byte per voice. N/A Vanilla
$0251, $0253, $0255, $0257, $0259, $025B, $025D, $025F Track volume fade rate per music tempo tick, whole portion. One byte per voice. N/A Vanilla
$0260, $0262, $0264, $0266, $0268, $026A, $026C, $026E Target track volume, one byte per voice. N/A Vanilla
$0261, $0263, $0265, $0267, $0269, $026B, $026D, $026F Number of notes in the current arpeggio, one byte per voice. N/A AddmusicK
$0270, $0272, $0274, $0276, $0278, $027A, $027C, $027E Current arpeggio pitch offset in semitones, one byte per voice. N/A AddmusicK
$0271, $0273, $0275, $0277, $0279, $027B, $027D, $027F The most recently played note to use to offset from for arpeggio, one byte per voice. N/A AddmusicK
$0280, $0282, $0284, $0286, $0288, $028A, $028C, $028E Fractional part of panning for music, one byte per voice. N/A Vanilla
$0281, $0283, $0285, $0287, $0289, $028B, $028D, $028F Panning for music, one byte per voice. N/A Vanilla
$0290, $0292, $0294, $0296, $0298, $029A, $029C, $029E Panning fade rate per music tempo tick, fraction portion, one byte per voice. N/A Vanilla
$0291, $0293, $0295, $0297, $0299, $029B, $029D, $029F Panning fade rate per music tempo tick, whole portion, one byte per voice. N/A Vanilla
$02A0, $02A2, $02A4, $02A6, $02A8, $02AA, $02AC, $02AE Target panning, one byte per voice. N/A Vanilla
$02A1, $02A3, $02A5, $02A7, $02A9, $02AB, $02AD, $02AF Panning with phase inversion settings, one byte per voice. N/A Vanilla
$02B0, $02B2, $02B4, $02B6, $02B8, $02BA, $02BC, $02BE Note for music track, fractional, one byte per voice. N/A Vanilla
$02B1, $02B3, $02B5, $02B7, $02B9, $02BB, $02BD, $02BF Note for music track, whole, one byte per voice. N/A Vanilla
$02C0, $02C2, $02C4, $02C6, $02C8, $02CA, $02CC, $02CE Pitch slide rate per music tempo tick, fraction of a note, one byte per voice. N/A Vanilla
$02C1, $02C3, $02C5, $02C7, $02C9, $02CB, $02CD, $02CF Pitch slide rate per music tempo tick, whole note, one byte per voice. N/A Vanilla
$02D0, $02D2, $02D4, $02D6, $02D8, $02DA, $02DC, $02DE Target note, one byte per voice. N/A Vanilla
$02D1, $02D3, $02D5, $02D7, $02D9, $02DB, $02DD, $02DF Fine tune, one byte per voice. N/A Vanilla
$02E0, $02E2, $02E4, $02E6, $02E8, $02EA, $02EC, $02EE Two different purposes: either stores the pitch offset when using trill/glissando, or stores the loop point for a normal arpeggio. One byte per voice. N/A AddmusicK
$02E1, $02E3, $02E5, $02E7, $02E9, $02EB, $02ED, $02EF Volume amplification multiplier, one byte per voice. N/A AddmusicK
$02F0, $02F2, $02F4, $02F6, $02F8, $02FA, $02FC, $02FE Pitch base fractional multiplier, one byte per voice. N/A AddmusicK
$02F1, $02F3, $02F5, $02F7, $02F9, $02FB, $02FD, $02FF
Unused.
$0300, $0302, $0304, $0306, $0308, $030A, $030C, $030E Pitch envelope slide length in music tempo ticks, one byte per voice. N/A Vanilla
$0301, $0303, $0305, $0307, $0309, $030B, $030D, $030F Number of music tempo ticks to delay the pitch envelope for, one byte per voice. N/A Vanilla
$0310, $0312, $0314, $0316, $0318, $031A, $031C, $031E Number of music tempo ticks per arpeggio note, one byte per voice. N/A AddmusicK
$0311, $0313, $0315, $0317, $0319, $031B, $031D, $031F Music tempo ticks remaining before the next arpeggio note is played, one byte per voice. N/A AddmusicK
$0320, $0322, $0324, $0326, $0328, $032A, $032C, $032E Pitch envelope sign, one byte per voice. N/A Vanilla
$0321, $0323, $0325, $0327, $0329, $032B, $032D, $032F Pitch envelope offset in semitones, one byte per voice. N/A Vanilla
$0330, $0332, $0334, $0336, $0338, $033A, $033C, $033E Current vibrato pitch offset, one byte per voice. N/A Vanilla
$0331, $0333, $0335, $0337, $0339, $033B, $033D, $033F Vibrato pitch offset per music tempo tick, one byte per voice. N/A Vanilla
$0340, $0342, $0344, $0346, $0348, $034A, $034C, $034E Vibrato delay in music tempo ticks, one byte per voice. N/A Vanilla
$0341, $0343, $0345, $0347, $0349, $034B, $034D, $034F Vibrato fade length in music tempo ticks, one byte per voice. N/A Vanilla
$0350, $0352, $0354, $0356, $0358, $035A, $035C, $035E Vibrato fade rate in music tempo ticks, one byte per voice. There is no fractional portion involved. N/A Vanilla
$0351, $0353, $0355, $0357, $0359, $035B, $035D, $035F Target vibrato maximum pitch offset for fade in, one byte per voice. N/A Vanilla
$0360, $0362, $0364, $0366, $0368, $036A, $036C, $036E Current tremolo volume offset, one byte per voice. N/A Vanilla
$0361, $0363, $0365, $0367, $0369, $036B, $036D, $036F Tremolo volume offset per music tempo tick, one byte per voice. N/A AddmusicK
(Dates back to Vanilla, but was off a byte, thus using $0362+x by mistake and making tremolo non-functional. carol's MORE.bin made it functional, but relocated it to $01F1, $01F3, $01F5, $01F7, $01F9, $01FB, $01FD, $01FF, and AddmusicK reverted the memory relocation without the byte offset bug of Vanilla SMW.)
$0370, $0372, $0374, $0376, $0378, $037A, $037C, $037E Tremolo delay in music tempo ticks, one byte per voice. N/A Vanilla
$0371, $0373, $0375, $0377, $0379, $037B, $037D, $037F Final voice volume for music prior to adjustments just before writing to DSP, one byte per voice. N/A Vanilla
$0380-$0381
Unused.
$0382 Voice bits indicating voices that are currently playing by either music or SFX. N/A AddmusicK
$0383
Unused.
$0384 Backup of the offset for the music tempo. N/A AddmusicK
$0385-$0386
Unused.
$0387 Number of music tempo ticks to offset. Done by the Hurry Up! command through CPUIO0. N/A Vanilla
$0388 Pause music switch. N/A AddmusicK
$0389 Noise frequency for the music. !noSFX = false AddmusicK 1.0.9
$038A Anti-interruption switch for CPUIO0 SFX. !noSFX = false AddmusicK
$038B Anti-interruption switch for CPUIO3 SFX. !noSFX = false AddmusicK
$038C
Unused.
$038D The highest EDL (echo delay) currently permitted. N/A AddmusicK
$038E-$038F
Unused.
$0390-$039F Remote code pointer for all events except negative event IDs. One pointer per voice. N/A AddmusicK
$03A0, $03A2, $03A4, $03A6, $03A8, $03AA, $03AC, $03AE Remote code type ID for positive event IDs, one byte per voice. N/A AddmusicK
$03A1, $03A3, $03A5, $03A7, $03A9, $03AB, $03AD, $03AF Time remaining in music tempo ticks before executing remote code, one byte per voice. N/A AddmusicK
$03B0-$03BF Pointer to the list of arpeggio notes currently playing, one pointer per voice. N/A AddmusicK
$03C0-$03CF Pointer to the beginning of the SFX, one pointer per voice. N/A AddmusicK
$03D0, $03D2, $03D4, $03D6, $03D8, $03DA, $03DC, $03DE Remote code type ID for negative event IDs (on note start), one byte per voice. N/A AddmusicK 1.0.9
$03D1, $03D3, $03D5, $03D7, $03D9, $03DB, $03DD, $03DF Saved SFX note duration, one byte per voice. !noSFX = false AddmusicK
$03E0-$03EF Pointer to return to once exiting the subroutine ($E9 command) and all loops have been executed. One pointer per voice. N/A Vanilla
$03F0-$03FF Start of subroutine ($E9 command) pointer, used when looping. One pointer per voice. N/A Vanilla

AddmusicK 1.0-1.0.8

Memory Locations Description Moved From Moved To
$0220, $0222, $0224, $0226, $0228, $022A, $022C, $022E Flag indicating that instrument data has been modified, and thus must be restored via the backup tables at $0130-$015F. One byte per voice. N/A (New) $0220, $0222, $0224, $0226, $0228, $022A, $022C, $022E bit 6 (%?y??????)
$0380 Flag set while running remote code. N/A (New) N/A (Turned into an opcode gate, and thus embedded into the code)

AddmusicK Beta

Memory Locations Description Moved From Moved To
$01D1, $01D3, $01D5, $01D7, $01D9, $01DB, $01DD, $01DF Number of SFX tempo ticks to wait before playing the next SFX ID on this voice. One byte per voice. N/A (New) N/A (This memory location's purpose has been recycled into $01D0, $01D2, $01D4, $01D6, $01D8, $01DA, $01DC, $01DE)
$0221-$0230 Pointer to the list of arpeggio notes currently playing, one pointer per voice. Yes, they really are off a byte, and therefore overwrite the instrument data modification flag if used. N/A (New) $03B0-$03BF
$0390, $0392, $0394, $0396, $0398, $039A, $039C, $039E The gain value to use instead of keying off the note in a rest. One byte per voice. N/A (New) N/A (Replaced by remote code)
$0391, $0393, $0395, $0397, $0399, $039B, $039D, $039F Indicates whether the note currently playing is a rest. One byte per voice. N/A (New) $01A1, $01A3, $01A5, $01A7, $01A9, $01AB, $01AD, $01AF
$03A0, $03A2, $03A4, $03A6, $03A8, $03AA, $03AC, $03AE The gain value to use when triggering remote gain. One byte per voice. N/A (New) N/A (Replaced by remote code)
$03A1, $03A3, $03A5, $03A7, $03A9, $03AB, $03AD, $03AF Number of tempo ticks before the note has ended to apply remote gain to. One byte per voice. N/A (New) $01A0, $01A2, $01A4, $01A6, $01A8, $01AA, $01AC, $01AE (Adapted for remote code event type 2)

AddmusicM (by homing)

Contains the majority of carol's MORE.bin except for global transposition ($E4 command) due to sending staccato to its own hex command slot and not checking for $20 as a song ID, tremolo ($E5 command) due to sending set sample to its own hex command slot and not checking for $20 as a song ID, and tremolo off ($E6 command) by overwriting it with the repeat section hex command.
Memory Locations Description Moved From Moved To
$04 CPUIO0 SFX ID currently playing. N/A (existed in Vanilla, but lost its output functionality here due to being overwritten by $0166) N/A (still exists, but it doesn't zero out anymore once it is done playing)
$07 CPUIO3 SFX ID currently playing. N/A (existed in Vanilla, but lost its output functionality here due to being overwritten by $0167) N/A (still exists, but it is now overwritten by $0169 and doesn't zero out anymore once it is done playing)
$20-$21 Memory location to write to. Used exclusively by the ARAM Write ($F7) command. N/A (New) N/A (moved to scratch RAM at $10-$17, thus it no longer has a permanent allocation... plus, it's currently disabled for safety reasons)
$2D FLG DSP register mirror for the music (including the noise clock frequency). Unfortunately, this contains the same vanilla SMW bug by accidentally enabling echo writes in the process. N/A (split from $2E) N/A (recombined into $2E, unless we only count the noise frequency portion: then it gets moved to $0389)
$0160 Contains various flags for various purposes, stored as %??????xy
See below for a list of bits whose usages don't match the latest version.
N/A (New) N/A (At least one of the bits' purpose has been modified somewhat since then, but it has otherwise not moved.)
$0160 bit 0 (%???????y) Used to indicate whether to reserve voice #5 for Yoshi Drums. N/A (New) N/A (Purpose was changed so that this is on if any voice is reserved for Yoshi Drums)
$0163 Fractional counter for the special pulse wave tempo ticker. N/A (New) N/A (Was not reimplemented into AddmusicK)
$0164 Counter for the special pulse wave tempo ticker: a de-facto oscillation position variable. N/A (New) N/A (Was not reimplemented into AddmusicK)
$0165 Amount to shift the special wave width per 256/x timer 0 ticks. Yes, this is a tempo value independent of the SFX and music tempos. N/A (New) N/A (Was not reimplemented into AddmusicK)
$0167 CPUIO3 output from $F7 on the SPC side to $2143 on the SNES side. Also used as part of a 16-bit music tempo tick counter if bit 1 of $0160 is set. N/A (New) $0169
(NOTE: This only applies to the actual output: the music tempo tick counter does not move from this location.)
$0168 Only zeroes are ever written here. The memory location references this overwrites causes the tempo offset caused by the Hurry Up! SFX to last beyond loading new data and from fixed music IDs that would normally zero out the tempo offset. As for why this bypass is here? Because of the ARAM write ($F7) command, which is used instead to stop the tempo offset by writing a zero directly to $0387. N/A (New) N/A (The bypass was removed in AddmusicK, and instead a special hex command is used to reset tempo offsets caused by the Hurry Up! SFX)
$0400-$04FF
Reserved for code. (the start of the SPC700 program is still at $0500)
$2450-$247C
(stored within a sample directory table)
The special pulse wave BRR sample. N/A (New) N/A (Was not reimplemented into AddmusicK)

Addmusic405 (by HuFlungDu)

Contains the majority of carol's MORE.bin except for the repeat section ($E6) command (which was previously limited to song IDs $20 and up) and the ADSR ($ED) command, which is instead from Romi's Addmusic (Addmusic404), which doesn't utilize the backup instrument table, nor did it support setting the GAIN DSP register directly (instead it forces ADSR mode when used).
Memory Locations Description Moved From Moved To
$0400-$04FF
Reserved for code. (the start of the SPC700 program is still at $0500)
$6727-$672E
(stored within code)
Transposition, one byte per voice. N/A (New) $0120, $0122, $0124, $0126, $0128, $012A, $012C, $012E

carol's MORE.bin

Memory Locations Description Moved From (Vanilla) Moved To
$E0 Used as scratch RAM for two purposes: it either stores the SRCN ID last defined by what is now the $F3 command, or it stores the first of two bytes of the $ED command (GAIN/ADSR switch specifically). N/A (New) N/A (the storage mechanism was removed)
$E1 Used as scratch RAM for two purposes: it either stores the pitch base multiplier last defined by what is now the $F3 command, or it stores the second of two bytes of the $ED command (either VxADSR2 or VxGAIN, depending on what the first byte was). N/A (New) N/A (the storage mechanism was removed)
$E2-$E3 Used as a pointer for a replaced instrument routine. N/A (was originally exclusively used by scratch RAM at $10-$17) N/A (moved to scratch RAM at $10-$17, thus it no longer has a permanent allocation)
$0162-$01A6
Reserved for code.
$01F1, $01F3, $01F5, $01F7, $01F9, $01FB, $01FD, $01FF Tremolo volume offset per music tempo tick, one byte per voice. $0361, $0363, $0365, $0367, $0369, $036B, $036D, $036F (was initially nonfunctional due to using $0362+x for its references by mistake) $0361, $0363, $0365, $0367, $0369, $036B, $036D, $036F
$0400-$04FF
Reserved for code. (the start of the SPC700 program is still at $0500)

Vanilla

Memory Locations Description Moved To
$04 CPUIO0 SFX ID currently playing. Outputs from $F4 on the SPC side to $2140 on the SNES side. N/A (still exists, but no longer acts as output in AMK, and it doesn't zero out anymore once it is done playing)
$05 CPUIO1 SFX ID currently playing. Outputs from $F5 on the SPC side to $2141 on the SNES side. N/A (still exists, but no longer acts as output in AMK)
$06 CPUIO2 music ID currently playing. Outputs from $F6 on the SPC side to $2142 on the SNES side. N/A (still exists, but no longer acts as output in AMK)
$07 CPUIO3 SFX ID currently playing. Outputs from $F7 on the SPC side to $2143 on the SNES side. N/A (still exists, but no longer acts as output in AMK, and it doesn't zero out anymore once it is done playing)
$0D Number of SFX tempo ticks to wait before playing the next SFX ID from CPUIO3. N/A (Merged with note duration for SFX, see $0384 under Vanilla)
$18-$19 Pointer for CPUIO0 SFX. Varies by voice ID (going by vanilla default (#4), it's $28-$29, and going by AMK default (#6), it's $2C-$2D)
$1A-$1B Pointer for CPUIO3 SFX. Varies by voice ID (going by vanilla default (#6), it's $2C-$2D, and going by AMK default (#7), it's $2E-$2F)
$1E-$2D
Unused.
$2E FLG DSP register mirror (including the noise clock frequency). There is a vanilla SMW bug where this inadvertently enables echo writes when noise SFX is played due to not accounting for this when setting the noise frequency. $5F
$2F NON (noise on) DSP register mirror. Interestingly, in vanilla SMW, for SFX, you can only enable noise with the $DA command for CPUIO3 SFX, and no other known voices to my knowledge can do this because noise is not implemented for music, not even its instruments. De-facto split between $4B for music and $4E for SFX. Within the context of the actual utilization of this memory location, though, it's $4E.
$4A-$4F
Unused.
$5D-$5F
Unused.
$6B-$6F
Unused.
$71, $73, $75, $77, $79, $7B, $7D, $7F
Unused.
$D0-$EF
Unused.
$0101, $0103, $0105, $0107, $0109, $010B, $010D, $010F
Unused.
$0111, $0113, $0115, $0117, $0119, $011B, $011D, $011F
Unused.
$0120-$01CF
Reserved for stack.
(this is actually implicit, though, as it just indicates the maximum amount of stack space allocated due to unused memory locations)
$01D0-$01FF
Unused.
$0220-$023F
Unused.
$0261, $0263, $0265, $0267, $0269, $026B, $026D, $026F
Unused.
$0270-$027F
Unused.
$02E0-$02FF
Unused.
$0310-$031F
Unused.
$0361, $0363, $0365, $0367, $0369, $036B, $036D, $036F Supposed to be tremolo volume offset per music tempo tick, one byte per voice. However, vanilla SMW uses $0362+x in the opcodes rather than $0361+x. Therefore, this causes the tremolo hex commands to be de-facto non-functional. $0361, $0363, $0365, $0367, $0369, $036B, $036D, $036F
$0380 Note duration for CPUIO0 SFX. Varies by voice ID (going by vanilla default (#4), it's $01D8, and going by AMK default (#6), it's $01DC)
$0381 Saved note duration for CPUIO0 SFX. Varies by voice ID (going by vanilla default (#4), it's $01D9, and going by AMK default (#6), it's $01DD)
$0382 Number of SFX tempo ticks to wait before playing the next SFX ID from CPUIO0. N/A (Merged with note duration for SFX, see $0380 under Vanilla)
$0383 Number of SFX tempo ticks to wait before playing the next SFX ID from CPUIO1. N/A (This memory location's purpose has been recycled into $1C after AddmusicK 1.0.8)
$0384 Note duration for CPUIO3 SFX. Varies by voice ID (going by vanilla default (#6), it's $01DC, and going by AMK default (#7), it's $01DE)
$0385 Saved note duration for CPUIO3 SFX. Varies by voice ID (going by vanilla default (#6), it's $03DD, and going by AMK default (#7), it's $03DF)
$0386 Yoshi Drum switch, set via CPUIO1 commands. N/A (Turned into an opcode switch after AddmusicK 1.0.8, and thus embedded into the code)
$0389 EON (echo on) DSP register mirror. Only ever set by the music. De-facto split between $4C for music and $4F for SFX. Within the context of the actual utilization of this memory location, though, it's $4C.
$038A-$03DF
Unused.
$0400-$04FF
Unused.
$10A8
(embedded in code)
Number of music tempo ticks before the end of the note prior to forcibly keying it off.
(NOTE: This memory location was first directly modified in carol's MORE.bin, hence its inclusion)
$6B


Return to the main page