/

Login

Username:

Password:

Register

Username:

Password:

Password confirm:

Email:

ram map notes
$00:818C 23 bytes Subroutine (JSL)

Source code for the SA-1 command wait loop written into RAM at $0E. This routine should be called there instead.

$00:81A3 14 bytes Subroutine (JSL)

Source code for the SA-1 response wait loop written into RAM at $26. This routine should be called there instead.

$00:84A2 28 bytes Interrupt

SNES IRQ routine. Jumps to the address in $309B when fired, with the direct page set to $37xx.

The game only seems to use either $0084BB (no routine) or $01EA1F (status bar routine).

$00:850A 15 bytes Subroutine (JSL)

Routine to change the SNES mode (and Layer 3 priority) to the value in A.

$00:8554 39 bytes Subroutine (JSL)

Routine to update the Layer 1 VRAM metadata.
A = Tilemap size (------yx)
X = GFX address
Y = Tilemap address

$00:857B 37 bytes Subroutine (JSL)

Routine to update the Layer 2 VRAM metadata.
A = Tilemap size (------yx)
X = GFX address
Y = Tilemap address

$00:85A0 39 bytes Subroutine (JSL)

Routine to update the Layer 3 VRAM metadata.
A = Tilemap size (------yx)
X = GFX address
Y = Tilemap address

$00:85EA 110 bytes Subroutine (JSR)

Subroutine to execute buffered DMAs from $0100 to VRAM.

$00:8658 69 bytes Subroutine (JSR)

Subroutine to execute queued DMAs from $0900 to VRAM.

$00:869D 63 bytes Table

Table of VRAM DMA options, with 3 bytes per option. This is the table referenced by the VRAM DMA buffers at $0100/$0900.

$00:86E5 117 bytes Subroutine (JSL)

Routine to write DMA data from a table in $--xxAAaa to $0100. The fist byte being FF marks the end of the table.

If the first byte of the DMA data is negative, then its source data is decompressed first.

$00:875A 178 bytes Subroutine (JSL)

Routine to transfer the data in $31-$38 to the circular VRAM DMA buffer at $0100.

$00:880C 136 bytes Subroutine (JSL)

Routine to write a single tile into the DMA buffer at $0100. Call with:
$AAaa = Tile number
$XXxx = Destination within tilemap

$00:889A 349 bytes Subroutine (JSL)

Subroutine to decompress data compressed with inhal. Call with:
$--aaXXxx = pointer to source data
$--(DB)YYyy = pointer to decompression destination
After calling, both these pointers are updated to the byte immediately following the data.

The routine can alternatively be called at $008894 if the user is already running on the SNES; this will skip some overhead code for transferring control from the SA-1.

$00:89F7 15 bytes Subroutine (JSL)

Subroutine to wait for the SNES to fire NMI.

$00:8A06 187 bytes Subroutine (JSL)

Routine to fetch controller inputs. The portion starting at $008A56 onwards always runs on the SNES, but the main routine can be called by either.

$00:8AC1 80 bytes Subroutine (JSL)

RNG routine. Uses $43 as a seed, and returns the result in $49.
The routine can also be called at $008AC4; doing so will use the value passed in A as a modulo operator for the result.

$00:8BB2 66 bytes Subroutine (JSL)

Routine to write data to palette at $0500. Call with:
$-xxAAaa = Pointer to source data
$YY = Starting color
$yy = Number of colors

The routine can alternatively be called at $008BC1, which will write to the alternative palette at $0700.

$00:8BF4 112 bytes Vector

SA-1 RESET vector.
$008C3E sets the intial decompression buffer address.
$008C44 sets the maximum NMI load.

$00:8C64 46 bytes Subroutine (JSL)

Routine to pass control from the SNES to the SA-1 chip. Pointer to the routine to execute should be in $--xxAAaa.

$00:8C92 62 bytes Subroutine (JSL)

Routine to pass control to the SNES. Pointer to the routine to execute should be in $--xxAAaa.

$00:8CD0 103 bytes Subroutine (JSL)

Routine to transfer the data in $31-$38 to the VRAM DMA queue at $0900.

$00:8D37 56 bytes Subroutine (JSL)

Routine to fix directional input. Takes the full 16-bit controller input in A, and if two mutually-exclusive directions are being pressed (i.e. up+down, left+right), clears the directional buttons.

$00:BC9D 51 bytes Pointer Table

Pointers to various gamemodes for the SA-1 chip. Indexed by $7390 times 3.

$00:CD89 173 bytes Subroutine (JSR)

Routine to check for a multitap controller connection. If one is plugged in, it returns the relevant controller port in A/$08, as [12------].

The part of this starting at $00CDEC onwards simply serves as a signature for the routine and is not used by anything.

$00:D648 85 bytes Subroutine (JSR)

Routine to upload data to the SPC700. Enter at $00D66E with a 24-bit pointer to the data in $95 to transfer it.
Each data block should contain four header bytes at the start. The first two is the length of the block (excluding the header), while the second is the location in ARAM to write to. Blocks will be uploaded in sequence until a data block with length 0000 is read.

$00:DBBE 616 bytes Vector

SNES debug RESET vector, used for the debug VRAM viewer. Booting to here will activate the VRAM viewer, whose handling is entirely contained within this routine.

$00:DE26 69 bytes Vector

SA-1 debug RESET vector, used for the debug VRAM viewer. Doesn't actually really do anything besides stall the SA-1.

$01:E995 1 bytes Misc.

Scanline that IRQ fires at in levels (the routine in $01EA1F).

$16:8000 224 bytes Data

VWF positioning info. Each option (00-1B) gets 8 bytes, ordered as follows:
0 - 16-bit VRAM address to put the Layer 3 GFX
2 - 16-bit VRAM address to put the Layer 3 tilemap
4 - X position to write the text at (in 8x8s)
5 - Y position to write the text at (in 8x8s)
6 - Width of the text (in 8x8s)
7 - Height of the text (in 8x8s)

$88:8A3E 2562 bytes Music

The entire SPC engine. The first four bytes are a data header, with the first two being the size of the engine and thse second two being the location it gets written to in ARAM.
A disassembly of the engine can be found here.


There are currently 5725 bytes in the rom map