Dev'rs GP32 Dev FAQs - Last Update 2002-Mar-30


General FAQs

If I have a question can I send it to devrs.com?
Are there any other GP32 dev FAQ references?
Where can I get a gp32?
How do I find out what product ID & firmware version is installed on my GP32?
Are there any emulators for gp32 development?
Is it possible to emulate other systems on the gp32?
How does internet gaming work on the gp32?
Is there an RF link support in the GP32?
I don't live in Korea. How do I get the GP Free Launcher?
How do I make an .fxe file so I can run my code with the GP Free Launcher?
Why does my code work in the emulator but not on real hardware?
Why do some makefxe tools either crash or cause the emulator/hardware to crash?
What do the various file extensions in gp32 dev mean?
How do I transfer a file to my gp32?
Can I play an mp3 while also playing a game?
Where is the unique Product ID stored in each gp32 console?
Where can I find information on the graphics or sound chips?
What signals are found on the gp32 EXT connector?
How are the console buttons connected to the CPU?
What is the clock speed of the GP32?
Why do my assembly language swi calls sometimes cause problems?
What C/C++ compiler packages can I use for gp32 development?

SMC FAQs

How is data stored on the SMC cards?
Can games access data on the SMC card?
Are all SMC cards basically the same?
Is it true that gp32 games are encrypted?
Where can I find detailed technical specs of SMC cards?

If I have a question can I send it to devrs.com?

Please do not. About every answer that is know by devrs.com
has been put into this FAQs file. If you have a question then send it to the proper gp32 development mailing list. Go to yahoogroups.com and search for gp32dev.

Are there any other GP32 dev FAQ references?

Check the following link: http://www.liftoff.dk/gp32dev

Where can I get a gp32?

Check http://www.lik-sang.com or similar sites.

How do I find out what product ID & firmware version is installed on my GP32?

Enter test mode to view the product ID & firmware version by pressing
following shoulder buttons sequence:
L - R - R - L - R - R - L - L

Are there any emulators for gp32 development?

There is GeePee32:
http://users.skynet.be/firefly/gp32/

Is it possible to emulate other systems on the gp32?

Yes. If you are trying to emulate an 8 bit
system on the gp32 then the chances are very good of full-speed emulation. If you are trying to emulate a 16 bit system then maybe or maybe not. It depends on your coding skills and your ability to effectively use ARM assembly language.

How does internet gaming work on the gp32?

To do this you must have an RF link adapter or a USB cable
that connects your gp32 to a PC. The RF link seems to be the standard method proposed by GamePark. However, software could be developed by others to support gaming over USB.

Is there an RF link support in the GP32?

No. You would have to buy a separate hardware adapter that plugs
into the EXT port on the bottom.

I don't live in Korea. How do I get the GP Free Launcher?

http://english.gamepark.com

How do I make an .fxe file so I can run my code with the GP Free Launcher?

http://www.devrs.com/gp32/software.php#comp

Why does my code work in the emulator but not on real hardware?

The main reason appears to be due to memory alignment problems.
The real ARM processor often requires data to be 4 byte aligned or else you can get unexpected results.

Why do some makefxe tools either crash or cause the emulator/hardware to crash?

This is because some tools for making fxe files REQUIRE that
the input file contain a non-empty Read/Write (RW) section due to the algorithm they use to convert to fxe format (and the emu probably requires this as well). [i.e. DWORD at input file offset 0xc should not equal DWORD at input file offset 0x14] B2fxe doesn't care if your RW section is empty and creates an output file that works fine in emulators and hardware.

What do the various file extensions in gp32 dev mean?

The areas of file types that are encrypted are discussed here but
there currently are no plans to provide information on the encryption method itself:

.axf - ARM Executable Format (Same as .gxb format but also can contain debug info.)

.fpk - Archive file for free stuff from GamePark

.fxe - Scrambled (light encryption) binary file & graphic icon for free games/apps from GP & third party developers. You have to use Game Park's free launcher to run these on your gp32. When the launcher unscrambles these files and removes the icon, the result is identical to a .gxb file. They are usually found in the gp:\GPMM directory.

.gpm* - Contains an SMC ID

.gps - Generated by GP's PC link software. Contains username, password, and GP32 ID... all in encrypted format.

.gxe - Binary info file : title, company, icon, encrypted stuff,.. This file can also contain the first X number of encypted bytes of the binary. The remainer of the binary is found in the .gxc file with the same name.

.gxc - Encrypted binary file. After a header, every X interval number of bytes in this type of file you will find Y number of bytes of information that is encrypted. The rest of the file is unencrypted.

Header (20 bytes long)
Encypted binary data (Y bytes)
Unencrypted binary data (X-Y bytes)
Encypted binary data (Y bytes)
Unencrypted binary data (X-Y bytes)
...etc...

If you remove the 20 byte header and unencrypt the file (placing it after any unencrypted code from the .gxe file), then the resulting data is identical in all other respects with a .gxb file.

.gxb* - Non-encrypted binary file. This is placed in gp32 ram starting at location 0xc000000. The entry point is the starting location and the entry is performed in ARM (not thumb) mode. Here is the header in ARM SDT format:

b _SkipHeader
DCD Start of Read Only section
DCD End "
DCD Start of Read/Write section
DCD End "
DCD Start of Zero Initialized section
DCD End "
DCD 0x44450011
... sometimes more info here...
_SkipHeader
... Init heap,etc ...
ldr r4,=C_Entry
bx r0

.smc - Raw SMC card data (Similar to how raw CD data = ISO format)

.zpk - Another archive file used by GamePark

* The file extensions marked this way are unofficial extensions from third-party developers.

How do I transfer a file to my gp32?

You can use the GP32<->PC USB cable or you can use a PC
SMC card reader/writer such as the EMS 5in1 card reader/writer. There are reports that the EMS card reader is 20 to 30 times faster for transferring files than the USB cable.

Can I play an mp3 while also playing a game?

No. The gp32 has to devote the majority of it's processing power
to the decoding & playing of mp3 files so no other functions are supported at the same time.

Where is the unique Product ID stored in each gp32 console?

In the serial IIC-bus eeprom in the gp32.

Where can I find information on the graphics or sound chips?

There basically are no separate chips for graphics or sound processing.
The gp32 CPU handles most of these operations. There is an external Samsung LPC3600 LCD timing controller but this is only used for generating correct signal timing for the LCD. There is also an external Phillips UDA1330A stereo filter IIS-bus DAC but this is only used to convert the final composite sound signal from digital to analog.

The gp32 graphics hardware has no layers, tile modes, sprites, or other fancy hardware. It basically just has double-buffering of a bitmap-style screen mode.

What signals are found on the gp32 EXT connector?

Pins: 1=3.3v, 2=nRESET, 3=nTRST, 4=JTAG[TDI], 5=JTAG[TMS],
6=JTAG[TCK], 7=JTAG[TDO], 8=AIN0, 9=RXD0/GPF0, 10=TXD0/GPF2, 11=IIC-bus[SCL], 12=IIC-bus[SDA], 13=nRTS0/GPF4, 14=nCTS0/GPF5, 15=RXD1/GPF1, 16=TXD1/GPF3, 17=NoConnection(?), 18=Ground

Refer to the CPU data sheet for more info on these signals.

How are the console buttons connected to the CPU?

A=GPB14[pin19], B=GPB13[pin18], Start=EINT6/GPE6[pin125],
Select=EINT7/GPE7[pin126], L=GPB12[pin17], R=GPB15[pin20], Up=GPB11[pin16], Down=GPB9[pin14], Left=GPB8[pin13], Right=GPB10[pin15]
When read, the values will be 0 when pressed & 1 when released.

What is the clock speed of the GP32?

This is software selectable from many different speeds from
~22MHz up to ~133.5MHz. The slower the selected speed, the longer the battery life that you will experience. However, just because the CPU can be set for very high speeds does not mean that the rest of the system (in particular the SDRAM) can handle this speed as well. Bios v1.5.7 defaults the clock speed to 67.8MHz. FireFly and others have managed to run their GP32 at up to 99MHz, with instruction and data cache on, without noticeable problems. Some people appear to experience problems at this speed.

Why do my assembly language swi calls sometimes cause problems?

If you are using ARM SDT tools then you must make sure that you
tell the compiler what registers are being used by bios swi code so that the compiler will know what registers will be safe and what registers will be destroyed by the swi. YOU MUST ALWAYS TELL THE COMPILER THAT THE LR REGISTER WILL BE DESTROYED. Read that last sentence one more time to commit it to memory. ;-) Here is the format for passing that info:
swi 0x?, {input registers}, {output register}, {lr,destroyed registers}
If the swi call requires no input or output registers, then use the following format as an example:
swi 0x?, {}, {}, {lr,destroyed registers}

What C/C++ compiler packages can I use for gp32 development?

There are currently at least 3 approaches:

MS Visual C++ is supported by GamePark in the form of libraries that allow you to develop and test a game on a PC. The resulting compiled code will only run on a PC but this same source code can be compiled on other C compilers to generate binaries that will run on real GP32 hardware. The main drawback to VC++ is that you can not develop optimized ARM assembly language with this setup. GP will make the VC++ libraries available here when they are released: http://www.gameparkdev.co.kr

ARM SDT is a very efficient compiler but it is ~$4000USD.

GCC is also a popular approach. There are several different GCC compilers that have been targeted to the ARM platform as listed below. For each of these packages you will need additional libraries or files that can be found here: http://www.devrs.com/gp32/files/gcc/
1) Dev Kit Advance was originally intended for the GameBoy Advance, but it is basically a generic ARM GCC 3.0.2 C/C++ compiler for windows: http://www.io.com/~fenix/devkitadv Add this to your compile options for smaller code that is tuned for the ARM920T processor: -mtune=arm920
2) GCC 3.0.4 that is available from http://darkfader.net/gp32 is a slightly later version of GCC that is much smaller than Dev Kit Advance


How is data stored on the SMC cards?

The gp32 supports both FAT12 & FAT16 file formats. Any standard
SMC card reader for windows should work fine for reading & writing files on the SMC card. Note that file names can only be up to 8 characters in length, followed by a period, and 3 extension characters. Directory names can only be up to 8 characters long. The EMS 5in1 card reader from LikSang.com is known to work fine for gp32 SMC cards.

There is also other SMC info that is read by using SMC command 0x90:
The 1st ID byte identifies the manufacturer, being either Samsung (0xEC) or Toshiba (0x98).
The 2nd ID byte tells you the type/size of the SMC (0x73 = 3.3V NAND 16MB / Samsung SMC)
The 3rd ID byte, if it contains the value 0xA5, indicates that this SMC card contains a unique 16-byte SMC ID. Due to security reasons, Toshiba and others do not provide information for reading SMC IDs without first requiring you to sign a Non-Disclosure Agreement.

Can games access data on the SMC card?

Yes. The gp32 game development libraries treat the SMC like a
disk drive in that you can read/write files and create/destroy files and directories.

Are all SMC cards basically the same?

No. Some SMC cards do not contain a unique 16 byte SMC ID
and some SMC cards support 3.3 volts while others use 5 volts.

The GP32 only supports 3.3 volt cards. When looking at the metallic pins of the SMC card, hold the card such that the pins are at the top of the card. If the notch on the end of the card is on the right then it is a 3.3 volt card, otherwise it is 5 volts.

If you ever want to experiment with SMC ID encryption then the SMC card must contain a SMC ID. However, for all other uses the presence of an SMC ID is not required. (i.e. mp3 files, GP32 ID encryption, etc.) Some or all Toshiba SMC cards are known to contain an SMC ID. The SMC Option Code will be 0xA5 if it contains an SMC ID. GP32 games that are all made in one batch will contain the same 16 byte SMC ID code, otherwise they will be different.

Due to security reasons, Toshiba and others do not provide information for reading SMC IDs without first requiring you to sign a Non-Disclosure Agreement.

Is it true that gp32 games are encrypted?

Yes. They use secumax.com technology. Here are the two
types that are supported:

SMC ID Encryption - Games that are encrypted this way will only work on one particular SMC card, but the game will work on any gp32 console. Some SMC cards have their own unique ID that is built into the hardware of the card itself and it can not be changed. The gp32 bios uses this unique ID as a key to unencrypt .gxe files. Most, if not all, commercial games are encrypted this way.

GP32 ID Encryption - Each gp32 game console has it's own unique product ID. (This ID can be viewed from the gp32 test screen. Accessing the test screen is covered in another FAQ in this file.) Games which have been encrypted using the GP32 ID will work on only one gp32 console, but can be run from any SMC card.

Where can I find detailed technical specs of SMC cards?

http://www.ssfdc.or.jp/english/spec/index.htm