We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS
N-SPC Engine/Source Variant ARAM Map
From SnesLab
NOTE: This ARAM map only goes up to $800, which is the start of the SPC700 program. This is intended to show the purpose of the RAM-like memory locations that are used, which are stored prior to the start of this program.
NOTE 2: This is not a representative ARAM map for all N-SPC variants. However, a lot of these memory locations may be recycled, depending on the variant.
ARAM Address | Description |
---|---|
$00-$03 | CPUIO register input. Technically only $00 is used in the code, but the structure is set up for all four CPUIO registers to be read from. |
$04-$07 | CPUIO register output. Technically only $04 is used in the code, but the structure is set up for all four CPUIO registers to be read from. |
$08-$0B | Last value read by the CPUIO register. Technically only $08 is used in the code, but the structure is set up for all four CPUIO registers to be read from. |
$0C | Tick counter for the song to initialize itself. |
$0D | Unused. However, its internal variable name in the source code is sf3c. sf0c is $0C's internal variable name in the source code. Thus, it's probably an initialization tick counter for something else. |
$0E-$0F | Always zero. Read for an operation where YA needs to have its bits inverted. |
$10-$13 | Scratch RAM with varying purposes. |
$14-$17 | Scratch RAM mostly used for storing word addresses, though sometimes this isn't the case. |
$18-$19 | Contains an RNG value. Generated every timer 0 tick. |
$1A | SFX voice on flag (AKA which music channels should not play notes) |
$1B | Fast Forward flag. |
$1C-$1F | Unused. |
$20 | Unused. However, its internal variable name in the source code is skc, and it appears to have been intended for a chs/soko-on routine, where the code is commented out in the source. TODO guess purpose |
$21 | Unused. However, its internal variable name in the source code is skdw, and it appears to have been intended for a chs/soko-on routine, where the code to call it is commented out in the source. TODO guess purpose |
$22 | Unused. However, its internal variable name in the source code is skd, and it appears to have been intended for a chs/soko-on routine, where the code to call it is commented out in the source. TODO guess purpose |
$23 | Unused. However, its internal variable name in the source code is skdadw, and it appears to have been intended for a chs/soko-on routine, where the code to call it is commented out in the source. TODO guess purpose |
$24 | Unused. However, its internal variable name in the source code is skdad, and it appears to have been intended for a chs/soko-on routine, where the code to call it is commented out in the source. TODO guess purpose |
$25 | Unused. However, its internal variable name in the source code is skca, and it appears to have been intended for a chs/soko-on routine, where the code to call it is commented out in the source. TODO guess purpose |
$26 | Unused. However, its internal variable name in the source code is skcb, and it appears to have been intended for a chs/soko-on routine, where the code to call it is commented out in the source. TODO guess purpose |
$27 | Unused. However, its internal variable name in the source code is skcs, and it appears to have been intended for a chs/soko-on routine, where the code to call it is commented out in the source. TODO guess purpose |
$28-$2B | Unused. However, its internal variable name in the source code is bkc, and it appears to have been intended for a chc/bakuhatu-on routine, where the code to call it is commented out in the source. TODO guess purpose |
$2C-$2D | Unused. However, its internal variable name in the source code is adk, and it appears to have been intended for a chd/sound effect routine, where the code to call it is commented out in the source. The variable itself is internally marked as kokaon add.. TODO guess purpose |
$2E | Unused. However, its internal variable name in the source code is sac, and it appears to have been intended for a chd/sound effect routine, where the code to call it is commented out in the source. TODO guess purpose |
$2F | Unused. However, its internal variable name in the source code is sacs, and it appears to have been intended for a chd/sound effect routine, where the code to call it is commented out in the source. TODO guess purpose |
$30-$3F | Track pointer for the music, one word per track. |
$40-$41 | Phrase pointer. |
$42 | Phrase jump counter. |
$43 | Fractional counter for the CPUIO/SFX tempo ticker (running at a tempo of $20). |
$44 | Current channel being processed times 2. |
$45 | Key on flag for all channels. Cleared every timer tick. |
$46 | Key off flag for all channels. Cleared every timer tick. |
$47 | Voice bit being processed for music. |
$48 | FLG mirror. |
$49 | NON mirror. |
$4A | EON mirror. |
$4B | PMON mirror. Never set by the sound driver to anything other than zero, but clearly it sets up possible support by the programmer of the variant. |
$4C | Counter to wait for the echo buffer to initialize itself for. |
$4D | EDL mirror. |
$4E | EFB mirror. |
$4F | Unused. |
$50 | Global transposition. |
$51 | Fractional counter for the music tempo ticker. |
$52 | Fractional part of music tempo. |
$53 | Music tempo. |
$54 | Music tempo fade tick counter. Ends up reused as fractional part of target tempo once zero. |
$55 | Target music tempo. |
$56 | Music tempo fade rate per music tempo tick, fraction portion. |
$57 | Music tempo fade rate per music tempo tick, whole portion. |
$58 | Song volume, fraction portion. |
$59 | Song volume, whole portion. |
$5A | Song volume fade tick counter. Ends up reused as fractional part of target song volume once zero. |
$5B | Target song volume. |
$5C | Song volume fade rate per music tempo tick, fraction portion. |
$5D | Song volume fade rate per music tempo tick, whole portion. |
$5E | Voice volume change flag. |
$5F | Percussion base instrument ID. Defines the lowest instrument ID to use for the percussion kit. |
$60 | Fractional part of left echo volume. |
$61 | Left echo volume. |
$62 | Fractional part of right echo volume. |
$63 | Right echo volume. |
$64 | Left echo volume fade rate per music tempo tick, fraction portion. |
$65 | Left echo volume fade rate per music tempo tick, whole portion. |
$66 | Right echo volume fade rate per music tempo tick, fraction portion. |
$67 | Right echo volume fade rate per music tempo tick, whole portion. |
$68 | Echo volume fade tick counter. |
$69 | Target left echo volume. |
$6A | Target right echo volume. |
$6B-$6F | Unused. |
$70,$72,$74,$76,$78,$7A,$7C,$7E | Music note duration, one byte per track. |
$71,$73,$75,$77,$79,$7B,$7D,$7F | Music note duration after quantization. |
$80,$82,$84,$86,$88,$8A,$8C,$8E | Subroutine loop counter. |
$81,$83,$85,$87,$89,$8B,$8D,$8F | Unused. |
$90,$92,$94,$96,$98,$9A,$9C,$9E | Track volume fade tick counter, one byte per track. |
$91,$93,$95,$97,$99,$9B,$9D,$9F | Track panning fade tick counter, one byte per track. |
$A0,$A2,$A4,$A6,$A8,$AA,$AC,$AE | Pitch slide tick counter. |
$A1,$A3,$A5,$A7,$A9,$AB,$AD,$AF | Pitch slide delay in music tempo ticks. |
$B0,$B2,$B4,$B6,$B8,$BA,$BC,$BE | Vibrato tick counter. |
$B1,$B3,$B5,$B7,$B9,$BB,$BD,$BF | Maximum pitch offset for vibrato. |
$C0,$C2,$C4,$C6,$C8,$CA,$CC,$CE | Tremolo tick counter. |
$C1,$C3,$C5,$C7,$C9,$CB,$CD,$CF | Maximum volume offset for tremolo. |
$D0-$EF | Unused. |
$100,$102,$104,$106,$108,$10A,$10C,$10E | Vibrato fade tick counter. |
$101,$103,$105,$107,$109,$10B,$10D,$10F | Unused. |
$110-$1CF | Reserved for stack. |
$1D0-$1DF | Unused mirrors for the SPC700 registers (referring to $F0-$FF). The TEST register is not defined in the original source, while the others are. |
$1E0-$1FF | Unused. |
$200,$202,$204,$206,$208,$20A,$20C,$20E | Saved note duration for music. |
$201,$203,$205,$207,$209,$20B,$20D,$20F | Quantization, which is in 256ths of a note. |
$210,$212,$214,$216,$218,$21A,$21C,$21E | Note velocity. |
$211,$213,$215,$217,$219,$21B,$21D,$21F | Current instrument ID. |
$220,$222,$224,$226,$228,$22A,$22C,$22E | Pitch base multiplier, fraction portion. |
$221,$223,$225,$227,$229,$22B,$22D,$22F | Pitch base multiplier, whole portion. |
$230-$23F | Pointer to return to once exiting the subroutine and all loops have been executed. One word per track. |
$240-$24F | Start of subroutine pointer, used when looping. One word per track. |
$250-$27F | Unused. |
$280,$282,$284,$286,$288,$28A,$28C,$28E | Pitch envelope slide length in music tempo ticks. |
$281,$283,$285,$287,$289,$28B,$28D,$28F | Number of music tempo ticks to delay the pitch envelope for. |
$290,$292,$294,$296,$298,$29A,$29C,$29E | Pitch envelope sign. |
$291,$293,$295,$297,$299,$29B,$29D,$29F | Pitch envelope offset in semitones. |
$2A0,$2A2,$2A4,$2A6,$2A8,$2AA,$2AC,$2AE | Current vibrato pitch offset. |
$2A1,$2A3,$2A5,$2A7,$2A9,$2AB,$2AD,$2AF | Vibrato pitch offset per music tempo tick. |
$2B0,$2B2,$2B4,$2B6,$2B8,$2BA,$2BC,$2BE | Vibrato delay in music tempo ticks. |
$2B1,$2B3,$2B5,$2B7,$2B9,$2BB,$2BD,$2BF | Vibrato fade length in music tempo ticks. |
$2C0,$2C2,$2C4,$2C6,$2C8,$2CA,$2CC,$2CE | Vibrato fade rate per music tempo tick. There is no fractional portion involved. |
$2C1,$2C3,$2C5,$2C7,$2C9,$2CB,$2CD,$2CF | Target vibrato maximum pitch offset for fade in. |
$2D0,$2D2,$2D4,$2D6,$2D8,$2DA,$2DC,$2DE | Current tremolo volume offset. |
$2D1,$2D3,$2D5,$2D7,$2D9,$2DB,$2DD,$2DF | Tremolo volume offset per music tempo tick. |
$2E0,$2E2,$2E4,$2E6,$2E8,$2EA,$2EC,$2EE | Tremolo delay in music tempo ticks. |
$2E1,$2E3,$2E5,$2E7,$2E9,$2EB,$2ED,$2EF | Unused. |
$2F0,$2F2,$2F4,$2F6,$2F8,$2FA,$2FC,$2FE | Transposition on a per-channel basis. |
$2F1,$2F3,$2F5,$2F7,$2F9,$2FB,$2FD,$2FF | Unused. |
$300,$302,$304,$306,$308,$30A,$30C,$30E | Fractional part of track volume for music. |
$301,$303,$305,$307,$309,$30B,$30D,$30F | Track volume for music. |
$310,$312,$314,$316,$318,$31A,$31C,$31E | Track volume fade rate per music tempo tick, fraction portion. |
$311,$313,$315,$317,$319,$31B,$31D,$31F | Track volume fade rate per music tempo tick, whole portion. |
$320,$322,$324,$326,$328,$32A,$32C,$32E | Target track volume. |
$321,$323,$325,$327,$329,$32B,$32D,$32F | Final voice volume for music prior to adjustments just before writing to DSP. |
$330,$332,$334,$336,$338,$33A,$33C,$33E | Fractional part of panning for music. |
$331,$333,$335,$337,$339,$33B,$33D,$33F | Panning for music. |
$340,$342,$344,$346,$348,$34A,$34C,$34E | Panning fade rate per music tempo tick, fraction portion. |
$341,$343,$345,$347,$349,$34B,$34D,$34F | Panning fade rate per music tempo tick, whole portion. |
$350,$352,$354,$356,$358,$35A,$35C,$35E | Target panning. |
$351,$353,$355,$357,$359,$35B,$35D,$35F | Panning with phase inversion settings. |
$360,$362,$364,$366,$368,$36A,$36C,$36E | Current note, fractional portion. |
$361,$363,$365,$367,$369,$36B,$36D,$36F | Current note, whole portion. |
$370,$372,$374,$376,$378,$37A,$37C,$37E | Pitch slide rate per music tempo tick, fraction of a note. |
$371,$373,$375,$377,$379,$37B,$37D,$37F | Pitch slide rate per music tempo tick, whole note. |
$380,$382,$384,$386,$388,$38A,$38C,$38E | Target note. |
$381,$383,$385,$387,$389,$38B,$38D,$38F | Fine tune. |
$390-$3FF | Unused. |
$400,$402,$404,$406,$408,$40A,$40C,$40E | Channel mute flag. |
$401,$403,$405,$407,$409,$40B,$40D,$40F | Unused. |
$410-$7FF | Unused. |