# 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