Difference between revisions of "Gameboy Advance"

From SizeCoding
Jump to: navigation, search
(Created page with "== Gameboy Advance == The Gameboy Advance uses an ARM7TDMI Processor running at 16.7 MHz, 384kb of memory and a 240x160 pixel resolution. === Setting up === Setting up your d...")
 
m (Sound: missed a spot)
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
== Gameboy Advance ==
+
== Game Boy Advance ==
The Gameboy Advance uses an ARM7TDMI Processor running at 16.7 MHz, 384kb of memory and a 240x160 pixel resolution.
+
The Game Boy Advance uses an ARM7TDMI Processor running at 16.7 MHz, 384kb of memory and a 240x160 pixel resolution.
  
 
=== Setting up ===
 
=== Setting up ===
 
Setting up your development platform for the Gameboy Advance:
 
Setting up your development platform for the Gameboy Advance:
  
* Assembler: -
+
* Assembler: -  
* Emulator(s): -
+
* Emulator(s): mGBA, NanoBoyAdvance, NO$GBA
  
 
=== Video display ===
 
=== Video display ===
The Gameboy Advance has many graphics modes to play in both 256 colors as well as 15-bit direct RGB access, as well as support for tilemaps and 128 hardware sprites with a max 64x64 resolution.   
+
The Game Boy Advance has many graphics modes to play in both 256 colors as well as 15-bit direct RGB access, as well as support for tilemaps and 128 hardware sprites with a max 64x64 resolution.   
  
 
==== Getting something on screen ====
 
==== Getting something on screen ====
Line 16: Line 16:
  
 
=== Sound ===
 
=== Sound ===
The Gameboy Advance has 4 channel sound + 2 x DMA for digital audio.
+
The Game Boy Advance has 4 channel sound + 2 x DMA for digital audio.
  
 
==== Make some noise ====
 
==== Make some noise ====
Line 22: Line 22:
  
 
=== ROM Header ===
 
=== ROM Header ===
The Gameboy Advance ROM header is 192 bytes in size, where 156 bytes are reserved for the Nintendo logo. The first 4 bytes in the ROM header is a ARM-branch instruction to the actual code. The following 156 bytes are the mandatory Nintendo Logo. At offset 0x00A0 the header expects a game title in maximum 12 bytes. These 12 bytes can be reused by inserting instructions instead of a game title. Following the game title, the next 4 bytes are the game code, which can also be used for instructions. After the game code, 2 bytes for the maker code are reserved, which can be used, when already changed into THUMB-Mode. The next byte is fixed and has to be always 0x96. The next byte is free, but hardly to make usage of. One could try to create a useful instruction using the byte before or in general here could be stored some value. After this, another 8 bytes can be used for instructions from offset 0x00B4. At offset 0x00BD a complementary check for the header has to be calculated. If the calculated checksum is different than the stored value, the ROM won't boot. Since some values in the header are fixed, which normaly should be jumped over, one can analyse the resulting instructions created by that fixed bytes and decide whether just slide through it.
+
The Game Boy Advance ROM header is 192 bytes in size, where 156 bytes are reserved for the Nintendo logo. The first 4 bytes in the ROM header is a ARM-branch instruction to the actual code. The following 156 bytes are the mandatory Nintendo Logo. At offset 0x00A0 the header expects a game title in maximum 12 bytes. These 12 bytes can be reused by inserting instructions instead of a game title. Following the game title, the next 4 bytes are the game code, which can also be used for instructions. After the game code, 2 bytes for the maker code are reserved, which can be used, when already changed into THUMB-Mode. The next byte is fixed and has to be always 0x96. The next byte is free, but hardly to make usage of. One could try to create a useful instruction using the byte before or in general here could be stored some value. After this, another 8 bytes can be used for instructions from offset 0x00B4. At offset 0x00BD a complementary check for the header has to be calculated. If the calculated checksum is different than the stored value, the ROM won't boot. Since some values in the header are fixed, which normaly should be jumped over, one can analyse the resulting instructions created by that fixed bytes and decide whether just slide through it.
  
 
=== Additional Resources ===
 
=== Additional Resources ===
 
* [https://problemkaputt.de/gbatek.htm GBATEK]
 
* [https://problemkaputt.de/gbatek.htm GBATEK]
 
* [https://www.pouet.net/prodlist.php?type%5B%5D=256b&platform%5B%5D=Gameboy+Advance Pouet: 256 byte productions for the GBA]
 
* [https://www.pouet.net/prodlist.php?type%5B%5D=256b&platform%5B%5D=Gameboy+Advance Pouet: 256 byte productions for the GBA]

Latest revision as of 20:25, 30 April 2024

Game Boy Advance

The Game Boy Advance uses an ARM7TDMI Processor running at 16.7 MHz, 384kb of memory and a 240x160 pixel resolution.

Setting up

Setting up your development platform for the Gameboy Advance:

  • Assembler: -
  • Emulator(s): mGBA, NanoBoyAdvance, NO$GBA

Video display

The Game Boy Advance has many graphics modes to play in both 256 colors as well as 15-bit direct RGB access, as well as support for tilemaps and 128 hardware sprites with a max 64x64 resolution.

Getting something on screen

To be added soon.


Sound

The Game Boy Advance has 4 channel sound + 2 x DMA for digital audio.

Make some noise

To be added soon.

ROM Header

The Game Boy Advance ROM header is 192 bytes in size, where 156 bytes are reserved for the Nintendo logo. The first 4 bytes in the ROM header is a ARM-branch instruction to the actual code. The following 156 bytes are the mandatory Nintendo Logo. At offset 0x00A0 the header expects a game title in maximum 12 bytes. These 12 bytes can be reused by inserting instructions instead of a game title. Following the game title, the next 4 bytes are the game code, which can also be used for instructions. After the game code, 2 bytes for the maker code are reserved, which can be used, when already changed into THUMB-Mode. The next byte is fixed and has to be always 0x96. The next byte is free, but hardly to make usage of. One could try to create a useful instruction using the byte before or in general here could be stored some value. After this, another 8 bytes can be used for instructions from offset 0x00B4. At offset 0x00BD a complementary check for the header has to be calculated. If the calculated checksum is different than the stored value, the ROM won't boot. Since some values in the header are fixed, which normaly should be jumped over, one can analyse the resulting instructions created by that fixed bytes and decide whether just slide through it.

Additional Resources