PocketSNES GBA Super Nintendo SNES Advance ROMS Emulator

SEARCH 
PocketSNES NewsReviewsFeatuesDownload PocketSNES EmulatorRom Tool Help
 
 

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

 

Flash2Advance ULTRA 1G Card

 

gba tv tuner

 

 

 

 


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)