ARAM Map

From SMWiki

Jump to: navigation, search

SMW ARAM map

Address Length Type Description
$0000 $0B General Seem to be multiple mirrors of the input ports $F4 to $F7. Sometimes scratch RAM?
$000C $02 General Unknown, various strange effects
$000E $01 General Fine vibrato value
$000F $01 General Coarse vibrato value
$0010 $02 General Scratch RAM
$0014 $02 General During upload, points to destination of current upload, otherwise, scratch RAM for pointers
$0016 $02 General Pitch value for current note. May as well be scratch RAM since it's only used within the note munching routine
$0018 $02 General Points towards sound effect data for $1DF9. Like $0030 for $1DF9
$001A $02 General Points towards sound effect data for $1DFC. Like $0030 for $1DFC
$001D $01 General Bitwise flags for which channels should be muted
$0020 $0F Noise Something to do with noise generation (dsp register 3d). 2 bytes per channel
$0030 $0F Music data pointers 2 bytes per channel. Points to next (or current?) music data byte for each channel
$0040 $02 Misc Points to music data. Roughly corresponds to "current measure"
$0042 $01 Misc Decreases by 1 each time song loops. If FF, never decreases. Music stops at 0.
$0043 $01 Misc Global transposition value. Negative values work.
$0044 $02 Misc Main timer, increases after every tick of spc register $FD
$0046 $01 Misc Current channel being processed * 2 (for indexing word tables)
$0047 $01 Misc  ?? holds 1 when there is a key on event
$0048 $01 Misc seems to be a bitwise indicator of current channel being processed
$0049 $01 Misc Unknown. Is added to the tempo to determine timing somehow.
$004A $05 Empty Free RAM
$0050 $02 Tempo Tempo. High byte is always 0, and is ignored.
$0052 $01 Tempo Decrementing timer. When it reaches 0, set tempo to value in $53
$0053 $01 Tempo Tempo to change to when $52 reaches 0.
$0054 $01 Tempo Low byte of $53. Does nothing. Just there to store 0 to $50
$0055 $01 Tempo Some weird tempo slide value used with tempo change $52.
$0056 $01 Volume/Fade Related to fade volume
$0057 $01 Volume/Fade Global volume
$0058 $01 Volume/Fade Decrementing timer for volume fade
$0059 $01 Volume/Fade Volume to fade to when $58 reaches 0
$005A $02 Volume/Fade Related to fading. Does something strange like slide the volume in and out
$005C $01 Misc Related to $48
$005D $03 Empty Free RAM
$0060 $01 Echo loaded with d4 (Set patch command)
$0061 $02 Echo Echo volume left. High byte is always 0. A mirror of DSP register $2C
$0063 $02 Echo Echo volume right. High byte is always 0. A mirror of DSP register $3C
$0065 $01 Echo Related to echo fade somehow
$0070 $0F Channel timers High bytes = individual channel timers. Low bytes = unused?
$0080 $0F Pan/Fade Related to pan fading. 2 bytes per channel
$0090 $0F Pitch/Portamento High bytes = pitch slide counter (works in tandem with $2C0~F) Low bytes = delay
$00A0 $0F Vibrato High bytes = channel 0-7 vibrator fade timer. Low bytes = channel 0-7 vibrato setting
$00C0 $0F Sample High bytes = ?. Low bytes = Instrument number (If above 80 with $E5 samples, sample number)
$00D0 $1F Empty Free RAM
$00F0 $01 Register SPC TEST register
$00F1 $01 Register SPC CONTROL register
$00F2 $01 Register DSP DATA port
$00F3 $01 Register DSP ADDRESS port
$00F4 $01 Register Input port from SNES. $2140 / $1DF9
$00F5 $01 Register Input port from SNES. $2141 / $1DFA
$00F6 $01 Register Input port from SNES. $2142 / $1DFB
$00F7 $01 Register Input port from SNES. $2143 / $1DFC
$00F8 $02 Register Acts like normal RAM
$0100 $0F Channel timers Note duration timers for 0-7. 2 bytes per channel.
$0162 $45 Empty Free RAM. Used by carol's MORE.bin
$01CF Variable Misc Stack
$0240 $0F Channel velocity High bytes = channel 0-7 velocity. Low bytes = ??
$0280 $0F Channel velocity High bytes = channel 0-7 velocity. Low bytes = ??
$02B0 $0F Pitch/Tuning High bytes = channel 0-7 current note value, low bytes = pitch modifier/tuning value. FF = (almost) 1 semitone higher
$02C0 $0F Portamento High bytes = channel 0-7 pitch slide (for $90~$9F), low bytes = ??
$02D0 $0F Portamento High bytes = channel 0-7 pitch modifier/tuning value. low bytes = ??
$03A0 $60 Empty Could be free RAM
$0400 $FF Empty FreeRAM, $FA bytes used by carol's MORE.bin, $F7 bytes used by AddMusicM's MORE.bin
$0500 $0D3E Code SMW's SPC Engine
$05D0 $CD Function The "note-munching" routine. This translates a note value into a pitch
$0697 $07 Function Function to send data to the DSP
$1295 $0C Data Table of initial DSP settings (tied to $12A1, contains the values sent to DSP reg adresses)
$12A1 $0C Data Table of initial DSP settings (contains the DSP register addresses themselves)
$12A1 $0C Data Table of initial DSP settings (contains the DSP register addresses themselves)
$123E $1C Empty/Song data Not sure how it's used in a clean ROM, but this is where Romi's MORE.bin puts the ADSR command.
$125D ~$4000 Song data This is where song data gets uploaded. Could save a lot of ARAM by uploading 1 at a time.
$1600 $5E more.bin AddmusicM's MORE.bin puts data here. Obviously it moves stuff around because otherwise this would overwrite (or be overwritten by) the song data.
$5619 $68 Pointer Pointer table to sound effects for $1DFC
$5681 $100 Pointer Pointer table to sound effects for $1DF9
$58D6 ~$419 SFX data "Save game" OW sound effect data
$5CEF ~$1C7 SFX data "Head bump" sound effect data
$5CEF ~$14A SFX data "Get coin" sound effect data
$6000 $2000 Echo The echo buffer
$6800 $1800 Music data Romi's Addmusic uploads misc. music here. That is why his Addmusic breaks, because the echo buffer overwrites this.
$8000 ~$7FE0 Samples Table of samples (see DSP register 5D) followed by the samples themselves
$~FFE0 ~20 IPL ROM This is a copy of the IPL ROM, which allows the DSP to run on boot
Personal tools