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.

Also on Fandom

Random Wiki