| 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
|