ARM7 BIOS: Difference between revisions
No edit summary |
Hallowizer (talk | contribs) m →SVC list: flagged HaltMaybe for checking, since it looks like the idle thread in ARM7 OS calls this in place of the CP15 stuff in ARM9. haven't looked very deep yet though |
||
| (5 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
== BIOS and Bootrom == | |||
The ARM7 BIOS is split into two parts: | |||
# the actual BIOS which is 0x8000 bytes long and starts at 0x0 | |||
# the bootrom which is probably also 0x8000 bytes long and starts at 0x8000 | |||
*The contents 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 contents of 2) can only be read until bit 0 in register '''0x04004000 or 0x04004001 (?)''' is cleared. It is disabled after it has been executed and can never be read again until the device is reset. | |||
== SVC list == | |||
The BIOS provides the following SVC functions. Every SVC not mentioned here just jumps to an infinite loop at 0x16c (b .) | |||
Caution: In below table, "n/a" in the NAME column seems to mean "not altered" (ie. same as in NDS BIOS). Whilst "n/a" in the DESCRIPTION column seems to mean "not any" (ie. nobody has written a description yet). | |||
{| class="wikitable sortable" width="55%" | |||
|- | |||
! 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{{check}} | |||
|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 deduce them by tracing the code though (all values are noted in big endian here): | |||
ea000006 | |||
ea000006 | |||
ea00001f | |||
ea000004 | |||
ea000003 | |||
eafffffe | |||
ea000013 | |||
ea000000 | |||
== See Also == | |||
* [[ARM9 SWI Functions]] | |||
* [[Bootloader]] (Stage 1 contained in BIOS ROMs) | |||