Latest News
Visit our download section to get the laest version
of PocketSnes emulator for gba. Create PocketSNES.gba
(or SNES ADVANCE.gba) file and write it to your GBA Flash Card or
play it in VisualBoy Advance emu on PC/ Mac/ Linux/ BeOS.

The debug build of PocketSNES can be useful for finding speed hacks.
Using your favorite GBA emulator, go to address 0x2030000 in its memory
viewer. The 65816 state is dumped to memory:
2030000 = A reg
2030004 = X reg
2030008 = Y reg
203000C = D reg
2030010 = S reg
2030014 = PC reg
2030018 = Flags
203001C = Cycle counter
2030020 = Next 8 bytes at PC
2030028 = Rom offset
203002C = Frame counter
203XXXX is also an I/O write counter (i.e. 0x2032140 shows how many
times $2140 was written)
L button: Step one instruction at a time
L button: Run continuously, updating state after every instruction
R: Run continuously, updating state less frequently (faster)
Full List of SuperNintendo game roms that have ben confirmed
to be more or less playable on PocketSNES for GBA
GBA ROM Flash Cards
For backups and emulators
Play all GBA ROMS as well as Pocket SNES
emulator game roms on GB Advance & GBA SP using gba Flash Cards
from Success-HK.com
|
GBA Pocket SNES Advance Notes
##########################################
PocketSNES.EXE
##########################################
All data required to build pocketsnes is internal to PocketSNES.EXE. You
can insert your own data by placing any of the following files in the same
directory as PocketSNES.EXE:
pocketsnes.bin =emulator binary
background.bin =256 color background (240x160)
background.pal =palette for background.bin
font.bin =16 color 16x16 font (ascii chars 32-??)
font.pal =font palette
Gfx data (except font.pal) must be LZ77 compressed with a VRAM-safe compression
algorithm.
(GBACRUSHER does this, if you can find it)
##########################################
PocketSNES.GBA format
##########################################
???: pocketsnes.bin
4 bytes: background.bin size
???: background.bin
4 bytes: background.pal size
???: background.pal
4 bytes: font.bin size
???: font.bin
4 bytes: font.pal size
???: font.pal
4 bytes: total number of roms
???: rom data (repeat until EOF)
rom data
--------
32 bytes: rom title
4 bytes: rom size
4 bytes: rom CRC32
4 bytes: rom flags
4 bytes: autoscroll value (0-127 for sprite, or 65816 address)
4 bytes: autoscroll scale
4 bytes: autoscroll (signed) offset
4 bytes: reserved
???: rom contents (no header)
rom flags
---------
bit0: 0=Mode20 (LoROM), 1=Mode21 (HiROM)
bit1: 0=NTSC, 1=PAL
bit2: 0=SRAM disable, 1=SRAM enable
bit3: 0=autoscroll by sprite number, 1=autoscroll by address
bit4: 1=autoscroll address points to a 16 bit number
bits 16-31: "advanced settings" (currently undefined)
##########################################
PocketSNES.DAT
##########################################
Pocketsnes.exe reads a pocketsnes.dat file that holds rom settings. Lines
are formatted like this:
CRC32|title|flags|autoscrollval|scale|offset[|speed hacks]
All values are in decimal except the CRC and speed hacks. Speed hacks
modify the rom before it's written out. Multiple hacks are separated by
a comma.
Example:
29573026|Whatever|0|0|0|0|0080=40,1080=012345,AAAA=42
Meaning:
rom[0x0080]=0x40
rom[0x1080]=0x01
rom[0x1081]=0x23
rom[0x1082]=0x45
rom[0xAAAA]=0x42
##########################################
Rom patching
##########################################
(for speed hacks)
To advance the cycle counter to the next event (VBlank, IRQ, whatever),
you have two instructions you can use. Instruction $42 works like a relative
branch. The high nibble of the next byte is the branch type, low nibble
is the branch offset (always a negative branch). For example, you'd replace
$D0 $FC with $42 $DC. Instruction $DB is also a relative branch in the
range of 64. The high bit determines the branch type: 0 for BNE, 1 for
BEQ. For example, $D0 $EE would be replaced with $DB $7E.
A simple SPC700 (SNES sound CPU) faking routine is in place but it's far
from perfect. Some games will need their sound code NOP'd out to run.
##########################################
PocketSNES debug
##########################################
The debug build of PocketSNES can be useful for finding speed hacks. Using
your favorite GBA emulator, go to address 0x2030000 in its memory viewer.
The 65816 state is dumped to memory:
2030000 = A reg
2030004 = X reg
2030008 = Y reg
203000C = D reg
2030010 = S reg
2030014 = PC reg
2030018 = Flags
203001C = Cycle counter
2030020 = Next 8 bytes at PC
2030028 = Rom offset
203002C = Frame counter
203XXXX is also an I/O write counter (i.e. 0x2032140 shows how many times
$2140 was written)
L button: Step one instruction at a time
L button: Run continuously, updating state after every instruction
R: Run continuously, updating state less frequently (faster)
|