ARM based CPUs

From SizeCoding
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. 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