Magic Lantern Firmware Wiki

2.0.4 TOP Level routines

328pages on
this wiki
Add New Page
Talk0 Share


Ref: 2.0.4 bootstrap

MG 9221

Bootstrap onwardsEdit

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

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




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 FunctionsEdit

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.


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 FunctionsEdit

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
0xFFB5639C AJ_StartLnImgTransferApp

Ad blocker interference detected!

Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.