ARM7 BIOS

From DSiBrew
Revision as of 16:30, 12 September 2009 by Svpe (talk | contribs)
Jump to navigation Jump to search

BIOS and Bootrom

The ARM7 BIOS is splitted up into two parts:

  1. the actual BIOS which is 0x8000 bytes long and starts at 0x0
  2. the bootrom which is probably also 0x8000 bytes long and starts at 0x8000
  • The data of 1) can only be read by instructions within the BIOS. It can therefore be dumped by applying some irq timer trick to find a usable ldr instruction or by just using the memcpy at 0x6bb0 with the usual arguments.
  • The data of 2) can only be read until bit 0 in register 0x04004000 or 0x04004001 (?) is cleared. It is enabled after it has been executed and can never be read again until a reset then. It might contains keys and has not been dumped yet.

SVC list

The BIOS provides the following SVC functions. Every SVC not mentioned here just jumps to an infinite loop at 0x16c (b .)

SVC NAME DESCRIPTION
01 n/a n/a
02 n/a n/a
03 WaitByLoop n/a
04 IntrWait n/a
05 VSyncWait n/a
06 HaltMaybe n/a
07 StopMaybe n/a
08 n/a n/a
09 n/a n/a
0b CPUSet n/a
0c CpuFastSet n/a
0d n/a n/a
0e crc16 n/a
10 n/a n/a
11 n/a n/a
12 n/a n/a
13 n/a n/a
14 n/a n/a
15 n/a n/a
19 n/a n/a
1a GetSinTable n/a
1b GetPitchTable n/a
1c GetVolumeTable n/a
1d n/a n/a
1f CustomHalt n/a
20 n/a n/a
21 n/a n/a
22 n/a n/a
23 n/a n/a
24 sha1_init n/a
25 sha1_update n/a
26 sha1_finalize n/a
27 sha1 n/a
28 sha1_compare n/a
29 sha1_random_maybe n/a


reset vectors et al

The first few words of the BIOS cannot be dumped. You can guess them by tracing the code though (all values are noted in little endian here):

060000ea
060000ea
1f0000ea
040000ea
030000ea
feffffea
130000ea
000000ea