I'm in the process of writing a program in C# that reads the aboot.mbn file. So far what it does is output the header information and "soft-executes" each instruction one at a time, all the while keeping track of the state of each register, and memory, and following all branches according to the applicable conditions. The code section of aboot.mbn starts with 8 branch instructions.
1. I start at the first branch at 0xF800000 and follow that until I reach 0xF810A64 where the infinite loop is waiting for the SPMI command.
2. Then I follow the second branch (at 0xF800004) to 0xF8155B4 where another infinite loop occurs, this time it is a true infinite loop with no conditional exits, weird in my opinion, but I don't know, maybe this is normal.
3. So then I take the 3rd branch (at 0xF800008) until I see that this also leads to the same exact infinite loop at 0xF8155B4.
4. The 4th branch (at 0xF80000C) also leads to the infinite loop at 0xF8155B4.
5. The 5th branch (at 0xF800010) also leads to the infinite loop at 0xF8155B4.
6. The 6th branch (at 0xF800014) leads to a different infinite loop at 0xF8159A4 immediately.
7. The 7th branch (at 0xF800018) leads to 0xF80B8E8 where a BLX instruction attempts to branch to a variable address stored in memory at 0xF9251C0. When running this in my isolated environment where nothing else is running, the address 0xF9251C0 contains only zeros, because it's not the aboot.mbn instructions that write anything here. Something else is supposed to write an address here, and this BLX instruction will branch to it and start executing whatever is there.
8. The 8th branch ends up at the same infinite loop described in branch 1.
The output from my program can be seen here: https://raw.githubusercontent.com/Co...oot_output.txt