Difference between revisions of "ARM"

From SizeCoding
Jump to: navigation, search
(Added to ROM Header section)
 
(4 intermediate revisions by 2 users not shown)
Line 5: Line 5:
 
The ARM Processor is a RISC based architecture and comes in many flavors.
 
The ARM Processor is a RISC based architecture and comes in many flavors.
  
== Gameboy Advance ==
+
*'''[[RISC OS on ARM based CPUs]]''' - Create your tiny intro on ARM hardware on RISC OS.
The Gameboy Advance uses an ARM7TDMI Processor running at 16.7 MHz, 384kb of memory and a 240x160 pixel resolution.
+
*'''[[Acorn Archimedes]]''' - Acorn Archimedes
 +
*'''[[Gameboy Advance]]''' - Gameboy Advance Sizecoding Information
  
=== Setting up ===
+
== Generic ARM sinus table generator ==
Setting up your development platform for the Gameboy Advance:
+
Here is a fairly generic ARM sinus table generator
 
+
<syntaxhighlight lang="">
* Assembler: -
+
To be added
* Emulator(s): -
+
</syntaxhighlight>
 
 
=== 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 ===
 
* [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]
 

Latest revision as of 13:12, 8 April 2024

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.

Generic ARM sinus table generator

Here is a fairly generic ARM sinus table generator

To be added