SA1

From Wiki - GameHacking.org
Jump to: navigation, search

Overview

The SNES SA1 chip is an expansion chip added to an SNES cart that both contains a portion of the game's coding, and executes that portion of code to affect normal SNES RAM, and the additional RAM accessed primarily by the SA1 chip programming. The additional RAM is also accessible by the SNES CPU's instructions.

220px-SA1 01.jpg

There is no current information concerning hardware-based tests with Game Genie codes that change portions of ROM residing within the SA1.

Memory Mapping Comparison

Region 30:0000 - 30:3FFF is SA1 related due to the fact that some RAM is 00 mapped for SA1-using games:

Writes from the SNES CPU to 00:0000 - 00:3FFF region to change a mirrored region at 30:0000 - 30:3FFF region

00:0000 - 00:3FFF
30:0000 - 30:3FFF

SA1 code such as "STA $DE" can access address 00:30DE, and show up in the log file as a line like...
$C2:D286 85 DE . STA $DE . [$00:00DE]

The above may not always hold true, but it should be known that not all addresses will appear exactly as expected.

SA1 Address: Reads/Writes to these addresses from the SA1 CPU translate to the below CPU-accessible addresses in SNES memory
00:4000 - 00:7FFF
CPU Address:
40:0000 - 40:3FFF

Jikkyuu Oshaberi Parodius has the following in the SNES native CPU as well:
00:676C writes going to 40:076C

SA1 Address Testing:
If you wish to test writes made by the SA1 to memory, and see what area is changed, you can use the following code with Super Mario RPG (US), while in a 3D stage. You should fall through the ground, and be unaligned with the map, but have the value FE written to the address you chose.

Test SA1 Memory Writes (2 byte addresses, 0xFE written)
C9C374A9
C9C375FE
C9C378FF
C9C3793F

Load value 0x00FE to write(could be made to load a 2-byte value)
C9C374A9
C9C375FE

Address to write to(Writes to 3FFF with these values)
C9C378FF
C9C3793F