ARM

From SizeCoding
Revision as of 04:24, 10 September 2020 by Tiririca (talk | contribs) (GBA Rom Header explanation.)

Jump to: navigation, search

Introduction

So here is a bit of help to get you started:

The ARM processor

The ARM Processor is a RISC based architecture and comes in many flavors.

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 development platform for the Gameboy Advance:

  • Assembler: -
  • Emulator(s): -

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.

Getting something on screen

To be added soon.


Sound

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

Make some noise

To be added soon.

= 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. After the fixed byte, 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.

Additional Resources