Parent: http://magiclantern.wikia.com/wiki/2.0.4_AJ
Ref: 2.0.4 bootstrap
Bootstrap onwards[]
I'm not really sure the best way of explaining how the firmware works - especially as I don't know myself!
And where better to start than the 'top' of the tree? AJ_guess_bootstrap() at 0xFF810000
AJ_guess_bootstrap() |
TH_cstart() |
TH_create_init_task( TH_init_task ) |
At some point TH_init_task() is then activated
TH_init_task() | TH_dmSetup | AJ_termDriverInit | TH_termDeviceCreate | TH_stdioSetup |
TH_stdlibSetup | TH_armlib_setup | <AJ_massive_kernel_init> | ||
AJ_massive_kernel_init() | AJ_Serial_IO | AJ_task_create_PowerMgr | AJ_init_task_for_DM | AJ_property_config |
<AJ_CreateSequencer> | AJ_loads_of_RegisterFunc_calls | AJ_task_create("TaskMain") | AJ_NewTaskShell | |
AJ_CreateSequencer( aAJ_0xFFC49B74_toplevel_SeqSubList) |
AJ_task_create("Sequencer") |
The "Sequence" task calls a sub called AJ_SEQ_seqEventDispatch() to go through the startup routines in order:
ROM:FFC49B74 aAJ_0xFFC49B74_toplevel_sub_list ROM:FFC49B78 DCD TH_startupEntry ROM:FFC49B84 DCD AJ_startupPrepareProperty ROM:FFC49B90 DCD AJ_startupPrepareCapture ROM:FFC49B9C DCD AJ_startupPrepareDevelop_n_SDS_initialise ROM:FFC49BA8 DCD AJ_startupPreparePlayback ROM:FFC49BB4 DCD AJ_startupInitializeComplete
For the purposes of simplicity - and because each one of these does enough to fill a house with - I'll decided that each one of these is 'high enough' to be considered a Top Level function
Top Level Functions[]
A routine that is functionally high enough to the subroutine hierarchy to warrant its own listing
Address | Subroutine Name | Description |
---|---|---|
0xFF810000 | AJ_guess_bootstrap() | Eyes to the top of this page. |
0xFF813684 | CreateTaskClass, PROPAD(Fix,Ring,Rasen,Custom), InitializeIntercom, PROP_Initialize, EM_Initialise | |
0xFF813F98 | AJ_startupPrepareProperty() | Init the FM (FileMgr), and allocated space for FC (FileCache) |
0xFF814350 | AJ_startupPrepareCapture() | Create "FileCache"' and' "RscMgr" tasks |
0xFF8147B0 | AJ_startupPrepareDevelop_n_SDS_initialise() | Get ready for LiveView |
0xFF814A58 | AJ_startupPreparePlayback() | |
0xFF814B58 | AJ_startupInitializeComplete() | InitializeDL, BindGUI(, FA_Initialize(), EnablePowerSave() |
Orphan Functions[]
A routine that IDA cannot find a cross-reference to a routine! (eg test function, or one where the reference is 'hidden' in data)
Address | Subroutine Name | Description |
---|---|---|
0xFF866B90 | AJ_DispCon_TestTurnOnLcd_Start() | |
0xFF898BAC | AJ_guess_windows_setup_svg_width_height_viewbox() | |
0xFF9AC1F0 | AJ_check_Vram_For_Adjust() | |
0xFF9AC284 | AJ_Check_Vram_For_Adjust_p2() | |
0xFF9AC34C | AJ_AlreadyVramForAdjust() | |
0xFF9AC5AC | AJ_Vram_for_adjust_CreateWhiteRedGreen() | |
0xFF9ACA68 | AJ_DisplayFactory.c_VRAM_YUV422_File_Name() | |
0xFF9BA770 | AJ_setup_calls_for_CU_n_CUStart | |
0xFF9C59A8 | AJ_UndisplayPhysicalScreen_and_call_MainTestProc | |
0xFF9C5A18 | AJ_TestSemaphore | |
0xFF9E0CE0 | AJ_FACTORY_zFctBackSWTest.c | |
0xFFA28F18 | AJ_CreateObject | |
0xFFA664A4 | AJ_AL_FACTORY | |
0xFFB5639C | AJ_StartLnImgTransferApp | |
0xFFBD4408 | AJ_CRP_TOPLEVEL |