Main Builds » 70D 1.1.2

Latest Build (2018-12-24 19:47)

Change Log

7203e71: 70D: updated GUIMODE_ML_MENU definition to match 700D, 650D, 100D and EOS M (see commit e65c0e3)\u000a\u000aThis should allow scrollwheel controls when browsing ML menu while recording H.264. Tested only in QEMU.

8f8a994: Merged lua_fix into 70D.112

2451574: printf: limit buffer size only when running from init_task\u000a(fixes memory backend messages truncated during startup)

754d731: Memory backend: some models use AllocateMemory rather than malloc for RscMgr data structures\u000a\u000aFixes small memory test on 50D and 5D2.\u000aThanks aprofiti,

1f60366: 1100D: enabled FEATURE_BEEP\u000a(beeps were enabled by default, with no way to turn them off; no crashes reported yet)

6ca36c4: api_test.lua: moved log file into ML/LOGS

b54cb4b: api_test.lua: skip FPS override test on cameras without this feature\u000a(currently 70D)

388e84b: api_test.lua: 50D has no video playback functionality; skipping this test\u000a

9170a21: 600D, 1100D: these models are using two button codes for Q\u000a(one in photo mode, another in LiveView)

7212b6e: NotifyBox: minor fixes/cleanups

75fab56: Lua exclude "." and ".." from directory listings.\u000a\u000aAdded API test for recursively listing directory contents.

bb02391: lua_dryos: minor doc updates

9c3a93e: gui_common: allow simulated key events when half-shutter is UI-locked\u000a(fixes movie.stop on 50D:

0040e6c: Merged allocate-raw-lv-buffer into lua_fix

7ca7753: Merged qemu into lua_fix

238b57a: Merged 100D_merge_fw101 into lua_fix

1cf3de0: 500D: experimental workaround for ERR70, issue #1468\u000a(only enabled when recording H.264 with sound)

24b5439: 500D: removed old workarounds for ERR70\u000a(still experimenting)

8bd8bb7: VRAM: recompute LUTs only when display parameters actually change\u000a(appears to help with 500D's ERR70 while recording; to be tested with external monitors)

4eb1a1e: selftest: info screen toggling test\u000a(crashes 500D)

b951e43: Lua: fix printing pointer values\u000a(no %p in Canon's vsnprintf)

2703bfb: Lua: minor stack fix\u000a(apparently never triggered)

1265adf: Lua: simple stack checking when yielding to other tasks

7d08956: Lua: stack dump function for debugging\u000a

6cb0b5f: Lua:

61b7286: Lua dryos: removed card.cluster_size\u000a(too low-level to be useful for Lua)

4521fef: Lua dryos: refactored card functions for consistency with directory functions

8b34a1a: Lua: moved dryos.dcim_dir to dryos.shooting_card:dcim_dir\u000a(or dryos..dcim_dir)

e6ff287: Lua dryos: fix card free_space field\u000a(never worked)

e4e0ea7: Lua: added dryos.cf_card and dryos.sd_card\u000a(just for consistency)

a6e51b7: 6D DEFAULT_RAW_BUFFER_SIZE\u000a\u000a

9d642c6: 650D DEFAULT_RAW_BUFFER_SIZE is the same as on the 700D\u000a

3d08648: Lua: added dryos.shooting_card.get_image_path to fix edge cases\u000afrom api_test.lua when image number wrapped around at 9999->0001\u000a\u000a(this replaced the hardcoded logic from api_test.lua for getting previous/future still image paths)

832ae7f: Merged img_name into lua_fix\u000a(required to test the file number updates, i.e. wrapping around at 9999->0001)

c7e5427: shoot.c: Canon wraps around from IMG_9999 to IMG_0001, not 0000\u000a(affected: fast pictures, intervalometer/bracketing scripts)

42dd018: api_test.lua: Canon wraps around from IMG_9999 to IMG_0001, not 0000

2510353: api_test.lua: limit ISO tests to 3200\u000a(max value on 500D)

af5fdce: Modules: enabled img_name by default\u000a(works reasonably well, also tested on 5D2 and 500D)

9fd75a2: img_name: misc GUI fixes

94bdcd3: img_name: option to customize DCIM folder number

5ff0a13: img_name: fix file number getting out of sync when taking pictures

7dc04d8: close_liveview: also handle the "paused" LiveView state

9645d9e: menu: do not draw on the screen when using menu.get/set from scripts\u000a(some update functions may use custom drawing code; this should not run)

e14e168: api_test.lua: fix movie mode tests on 5D2\u000a(unusual movie mode "definition"; hopefully the fix also applies to 50D)

3ad18a2: Lua: also print free memory after unloading a script or after starting to run it in background

c2de82c: Lua: experiment - limit small allocations to UMM heap only\u000a\u000aThis forces the garbage collection to run, and appears to be enough even for large scripts.\u000a\u000aWithout this, api_test.lua could end up allocating the entire AllocateMemory buffer from ML core, leaving the system without RAM.

a0a518e: Focus backend: fine-tuned waiting workaround for models with CONFIG_FOCUS_COMMANDS_PROP_NOT_CONFIRMED\u000aFixes crash on 5D2 with 50/1.8 STM. Also applied on 50D and 500D.\u000a550D and 7D might require the same workaround with certain lenses, to be tested.

19229c6: lens.autofocus: fix operation in LiveView for 5D2 and 500D, likely also 50D\u000a(use PROP_REMOTE_AFSTART_BUTTON rather than half-shutter)

9c80751: 500D: found a way to disable the "Perform autofocus with AE lock <*> button" message in LiveView\u000a(minor annoyance; it was also interferring with LiveView tests from api_test.lua)

ad85e21: Properties: fixed name of PROP_LV_AF_RESULT (was PROP_LV_FOCUS_BAD)\u000aand made it available for modules.

59a2345: api_test.lua: additional checks for paused LiveView

2e57804: api_test.lua: when requesting a different video mode, wait for user to finish navigating menus\u000a(e.g. on 5D2, switching between movie and photo mode is done from Canon menu)

7d5c523: api_test.lua: skip testing with focus step size 1\u000a(too slow and may fail on certain lenses)

3943fef: api_test.lua: leave Canon overlays disabled at the end of the test

f88dc37: api_test.lua: do not fail the autofocus tests right away\u000a(use retries and ask the user to make sure the camera has something to focus on)

a3a0275: api_test.lua: beeps and screen flashes where user input is expected

0d9055e: api_test.lua: relaxed half-shutter checks (replaced some assertions with warnings)\u000a\u000a5D2: there may be spurious half-shutter events, e.g. if scene brightness is changed during the test\u000a50D:

13c6f63: api_test.lua: log the error message on failure

26d014f: menu.set: relaxed conditions for trying every single string value\u000a(arbitrary durations now working with intervalometer)

1900af4: menu.set: reworked to fix issues with certain menus, e.g. FPS override\u000a

64666b0: close_liveview: fix "exiting" movie mode, including special case for 5D2/50D

e65c0e3: 700D, 650D, 100D: updated GUIMODE_ML_MENU definition to allow scrollwheel controls when browsing ML menu while recording H.264\u000aEOS M: updated GUIMODE_ML_MENU to use the same underlying dialogs\u000a\u000a\u000a\u000a

6147d5a: 650D, 700D, EOSM: fix interference between ML menu and Canon overlays in LiveView\u000a\u000a

c1eb1d2: Follow focus: fix apparently random stops when using LCD sensor

7b73298: Follow focus: removed top icon when using LCD sensor\u000a(was redundant and conflicting with ML top bar)

65e0b68: Focus tools: refuse to run if continuous AF is enabled in Canon menu

4b47c20: Lua lens.focus: warn if continuous AF / movie servo AF are enabled in Canon menu

39429e5: Menu: dependency flags for continuous AF\u000a(used for rack/stack/follow focus, as these requires it turned off in Canon menu)

c523bab: focus.h: added is_continuous_af()

a8e74ec: Updated some LiveView AF properties for newer models\u000a(tested on 700D)

90be248: SET+MainDial: another workaround for issue #2901\u000a\u000a(TODO: find a way to reproduce in QEMU)

7a42306: SET+MainDial: workaround for issue #2901\u000a\u000aIssue: touchscreen stops working after pressing SET in PLAY mode (700D, maybe others).\u000a\u000aThis workaround only covers pressing SET from some playback dialog, such as erasing an image.

7f7be1a: VRAM: workaround from 03c5f43 apparently required only on 5D3 1.2.3 and has some side effects (issue #2901)\u000a\u000aTo test: play Arkanoid right after powering up the camera, without going to PLAY mode or LiveView.\u000aIf you get artifacts in background, your camera requires this workaround.

4359b15: QEMU: fix handling replies of duplicate MPU messages\u000a(encountered in 80D, maybe others)

fc165d7: MPU spells: comment out photo capture from startup logs\u000a(affects 450D and 1000D)

758ea1d: 7D: FEATURE_HEADPHONE_OUTPUT_VOLUME needs to be undefined - like the 500D


488f94a: QEMU tests: retry screenshots if there apparently was a successful match\u000afollowed by a (possibly transient) difference

753cda5: QEMU tests: fixed some transient screenshots\u000a(optional double-checking code to autodetect them)

b78f9f6: GDB scripts: register_cmd (for DryOS shell functions)\u000a\u000aUseful for naming a few more functions, but requires entering the DryOS shell to trigger them. Stubs for 5D3.

3900684: GDB scripts: make sure all EOS models have CreateStateObject defined\u000a(only test models with this string present in the ROM)

dd34b51: GDB scripts: make sure all models have register_func (RegisterEventProcedure) defined\u000a\u000aException: Eeko.

71ec3a8: QEMU: workaround for running GDB tests on 7D

4f0986d: QEMU: fix 7D LED assertion

c084a11: QEMU tests: fix race condition when checking GDB scripts\u000a(shared file)

a56526f: GDB scripts: 800D comments, for consistency with other platforms

a54c7ad: GDB scripts: print "(null)" in other places where string arguments might be optional

d5684f9: GDB scripts: 5D4 uses a new syntax for create_semaphore\u000a(name is the third argument)

ef2516f: QEMU: 5D4 emulation updated for firmware 1.1.2\u000a\u000a- updated test results and GDB script\u000a- fixed serial flash read interrupt; file I/O working!

63aa717: GDB scripts: print "(null)" for empty semaphore / message queue names\u000a(auto-search the ROM for this string constant, as otherwise we'd need to define a malloc symbol for each camera model)\u000a\u000aIf the "(null)" string is not found in the firmware, the GDB tests will fail with timeout.

636d1d0: QEMU: disabled eos_handle_rom MMIO handlers\u000a(unused, only triggered incorrectly on Eeko, where they caused a crash)

1a6e483: GDB scripts: fix pausing prompt on short terminals

89076f5: Removed some CONFIG_QEMU entries that are no longer needed\u000a- cache_hacks.h: these are now emulated reasonably well\u000a- 5D2: old leftover in gui.c

4cc498d: Minimal targets: only compile subdirectories with a valid Makefile

77f1f07: QEMU tests: FA_CaptureTestImage works on 1300D\u000a(prints "Image Power Failure", but the fix is not straightforward)

92f5067: Makefile: when running "make install", copy ML-SETUP.FIR only for the generic profile\u000a(not for minimal or other targets)

0e27b6b: Makefile: always check all minimal targets when running "make zip"\u000a(only check whether they compile without errors, just like with the installer)

e8c2e35: Minimal target: moved the Hello World example into its own directory and removed old platform folders

d6f322b: Minimal targets: 5D3 1.1.3 hacks no longer needed

e4d2c76: GDB scripts: fix IDC names containing spaces

219bdfa: QEMU: fix timeout in ImgPowDet emulation\u000a(there were nondeterministic errors in the FRSP test)

c5fef89: QEMU: emulate ADTGDMA interrupt (used on 100D and EOS M2)\u000a\u000a- fixes FA_CaptureTestImage on 100D\u000a- some LiveView screenshots changed on 100D\u000a- color palette in LiveView changed on M2; can be worked around by pressing L (updated menu tests)

93e1c3a: QEMU tests: ignore nondeterministic screenshot on 6D\u000a(may appear with or without free space)

af1b0dc: GDB scripts: moved try_expand_ram_struct at the top

2627562: GDB scripts: minor whitespace fix

f34fbd4: QEMU: ensure valid RAM address before executing EDMAC transfers\u000a(EOS M fails here when running FA_CaptureTestImage)

1558689: QEMU: image sensor power emulation\u000a(fixes FA_CaptureTestImage on 5D2; tested on all other models able to run the FRSP test)

51ea8e0: QEMU: output dummy data (zeros) on read EDMAC connections\u000a\u000aFixes FA_CaptureTestImage on 700D and 650D.

c5dfbe4: qemu-frsp: fix compiling for 70D

241f75f: QEMU: allow reads to EDMAC CHSW registers\u000a(required for FA_CaptureTestImage emulation on 6D and others)

fcc92f6: qemu-frsp: ensure valid exposure settings before the test\u000a(exposure time not too long, ISO other than Auto; required on 600D and others)

2056815: QEMU: fix YUV vertical scaling for 1100D\u000a(only the FRSP test uses it for now)

5131e72: qemu-frsp: allocate a YUV buffer if there isn't one already set up (only with CONFIG_QEMU)\u000a\u000aFixes preview on 5D3 and 1100D, where Canon firmware does not allocate one at startup.

029fecb: QEMU tests: all models able to navigate Canon menu should pass the FRSP (FA_CaptureTestImage) test\u000a\u000aMost of them will fail; to be fixed.

e2f648f: QEMU tests: handle models not yet in mainline\u000a(FRSP and HPTimer tests are using this for now)

5c3e459: QEMU: updated gcc 7/8 patch for systems using virtio-9p

8c7217a: QEMU: updated gcc 7.x patch to also work with gcc 8.x

70cfcb4: eos.c: fix gcc8 warnings

d256390: Makefile: allow "make install*" without a FIR file\u000a(for minimal targets and new platforms)

bdab902: QEMU logging: attempt to identify tail calls by default\u000a(-d calls,notail to disable)

f9802bf: QEMU tests: updated for 200D 1.0.1

6edfe05: QEMU logging: moved IDC files into model subdirectories\u000a(for consistency with romcpy shell files)

5a933e7: QEMU logging: fix typo when using -d romcpy\u000a(output file path was not printed correctly)

0ffb5ef: QEMU tests: initial support for 800D\u000a(fixme: call trace not deterministic, same as 77D)

bebea6b: 800D: minor stub fixes in GDB script

59e4e3c: qemu: add 800D to model_list.c, and add 800D/debugmsg.gdb

1939f0c: Config options: fix issue #2892\u000a(custom presets not appearing in menu)

61c6a87: Merged config_var_refactor into lua_fix

8cd3f78: Merged unified into lua_fix

79cd0c5: Menu: fix config var incorrectly changed during fast toggles\u000a(e.g. 36 -> 35 without calling the CBR)

51f2c7d: Config variables: declare all internal structures static\u000a(minor refactor)

5cf9d77: Config variables: include the forward declaration in the CONFIG_INT_EX definition\u000a(no longer needed to declare CONFIG_VAR_CHANGE_FUNC's twice)

7ce54e4: Config variables: use CONFIG_VAR_CHANGE_FUNC (similar to MENU_SELECT_FUNC); minor renames

9abd360: Merged unified into config_var_refactor

74d41e2: audio-ak: fix compiling for 500D

cecef93: menu: short joystick clicks should not be interpreted as SET outside ML menu\u000a(fixes incorrect trigger of Auto ETTR from joystick, for example)

2a7265d: rename xxx_update functions for config_vars to xxx_on_change

9817bac: rename CONFIG_INT_UPDATE to CONFIG_INT_EX and .update to .on_change to avoid confusion and name conflicts with MENU_UPDATE_FUNCs

41c6a31: Merge

1057609: config var: refactor audio-lapis to use new config var CBR (not tested -> I have none of these cameras)

5a01dae: config var: refactor audio-ak and audio-common to use new config var CBR (TODO: audio-lapis)

7a3b5fa: Ghost image: further cleanups and fixes

4702ca0: Ghost image: fix crash (issues #2796, #2783, #2878, #2885)

94442d9: features.tmpl edited online with Bitbucket: use id in th section heading to allow for direct linking via anchor

5e40987: Merged in edmac (pull request #886)\u000a\u000aEDMAC module: fixes for DIGIC 4, connection map

b54a0c6: Merged in adv_int (pull request #907)\u000a\u000aAdvanced intervalometer updates

58e11ee: Merged in memory-backend (pull request #906)\u000a\u000aMemory backend improvements

87dfe3c: Makefile: fix "make install_qemu CONFIG_QEMU=y" for minimal targets

cc13316: QEMU: experimental support for gdb-multiarch\u000a(latest Ubuntu no longer has gdb-arm-none-eabi...)

13a1fe1: QEMU install: minor fixes

03cb41d: QEMU install: on some systems, building GDB requires makeinfo; skip it\u000a\u000aAlso show the last few lines from the compilation logs if there's an error.

36a89bd: QEMU install: on older Ubuntu, gcc/gdb installation without package manager may be required

03f2c82: QEMU install: minor fix for 32-bit Ubuntu\u000a(option 3: no 64-bit gcc available)

ede4b4c: QEMU installer: removed option to allow old 64-bit GDB\u000a(hopefully no longer needed)

c57b71d: QEMU installer: minor fix regarding GDB installation\u000a(force compiling from source if a valid 64-bit gdb is already installed)

ec4df76: QEMU installer: attempt to compile gdb 8.1 from source if a 32-bit version is not available (in particular, Mac and WSL)\u000a\u000a (thanks t3r4n)

459d709: QEMU install: there's no DISPLAY variable on Mac

04f441f: QEMU: better emulation for cache patches\u000a\u000a(uninstalling works, at least for dm-spy-experiments)

4cc0ac8: QEMU: fix CPU0 labels incorrectly appearing in DIGIC 6 logs\u000a(only DIGIC 7 should display these)

0f1447d: QEMU: moved ARM946EOS-specific functions (cache lockdown and WFI) from cpu.c to helper.c

565ee36: 100D: fix INPUT_ENABLE_IMAGE_PHYSICAL_SCREEN_PARAMETER (display filters working)\u000a\u000a

f506ed3: 100D: fix timer A limit in x5 zoom mode\u000a\u000a\u000aTODO: double-check all other models (raw_diag OB zones screenshot in all LiveView modes, with FPS override maxed out)

c2ee480: Minimal targets: CONFIG_QEMU no longer hardcoded in Makefile\u000a(should be specified on the command line if desired)

2c36494: Makefile: allow CONFIG_QEMU to work on all ML profiles, including minimal and installer\u000a\u000aBy default, CONFIG options are only used for the generic profile.\u000aThis enables qprintf for debugging DIGIC 6/7 ports using the minimal profile.

afa843c: QEMU: fix printing callstack from GDB scripts\u000a(broken in 1834cd8)

7f8871f: GDB scripts: workaround for a crash occuring with 5D\u000a(possibly GDB bug; can't explain why it works)

600343c: qemu-frsp: fix compiling on lua_fix codebase\u000a(1200D and soon all others)

b3914b9: QEMU: updated expected test results for 1200D 1.0.2\u000a(no stubs changed in debugmsg.gdb)

2b709cf: QEMU: removed bogus/unused BGMT_ISO

697fa63: QEMU: fix Q button code for 1200D\u000a\u000a-\u000a- assuming the same applies to 1300D; unsure about 600D/1100D

30f46a0: QEMU: fix compiling on 32-bit x86 hosts\u000a\u000aCaveat: -d romcpy not working on x86 (requires int128_t)

8b9b81b: QEMU README: initial notes on DIGIC 7

0e6493e: Merged in nikfreak/magic-lantern/unified_sf_dump_70D (pull request #853)\u000a\ support for 70D

32ea18c: Close branch

0fc21f8: add 70D stubs for sf_dump module

29014d5: Created new branch unified_sf_dump_70D

a2cf77e: Merged in es_as/magic-lantern (pull request #891)\u000a\u000a650D: sf_dump stubs

a03dc9e: 650D:sf_dump stubs

b184d8b: Merged in daniel_fort/magic-lantern/unified_650D.104_stub_fix (pull request #923)\u000a\u000aFix 650D PlayMovieGuideApp_handler

185da25: Find the latest version of exiftool.

e30b3e0: Close branch

8c87b81: Fixed stub. Discovered while running lua API tests.\u000a

a20c79b: QEMU: initial support for DIGIC 7 EOS (200D, 77D, 6D2)\u000a- added ROMID; updated MemDiv, XDMAC, SDIO\u000a- emulation starts many tasks, talks to MPU, initializes SD, creates the DCIM directory on the virtual card\u000a- fails with ERROR WaitPU1 TimeOut\u000a- dumpf does not save any logs (figure out why)\u000a- note: M5 ROM should now be loaded as ROM0

39c9a47: QEMU logging: initial support for DIGIC 7\u000a(CPU0 only; exception vectors at nonzero address)

2fb4f6b: QEMU tests: ROM dumper needs larger timeout on slower computers; undo unwanted changes from cb93334

d0c4830: QEMU tests: fix expected results for restore after format after updating SD image

cb93334: QEMU tests: reworked ROM dump test to wait as much or as little as each camera needs\u000a(fixme: 70D waits for some CFDMA messages that are for some other device)

f300d36: QEMU: usleep patching no longer required on M3

b3d7b70: QEMU: updated ROM dump tests to check SFDATA.BIN too\u000a(currently only applies to DIGIC 6)

daa3003: QEMU: updated SD image with latest display test\u000a(changeset 9b37638)

9416cfa: QEMU: experimental UTimer emulation\u000a- these look pretty much like regular timers (same offsets), but behave like HPTimers!\u000a- UTimer patches from DIGIC 6 no longer needed!\u000a- fine-tuned HPTimer messages

9e082f6: QEMU: fix logging of MMIO registers from the same range as MREQ\u000a(eos_handle_mreq also receives a few other registers, unknown yet)

a4de619: QEMU: specify actual RAM size for each model, rather than using generic values\u000a(emulating with larger size usually works, but doesn't catch some edge cases)

2590edf: QEMU: reordered model definitions in model_list.c\u000a(grouped by DIGIC version and similarity)

394eee0: QEMU: renamed IO_MEM_START/SIZE to MMIO_ADDR/SIZE for consistency;\u000aadded MMIO_ADDR to model_list.c (possibly needed for future models)

1834cd8: QEMU: removed unused entries; moved ML helpers to a different GPIO range.\u000a\u000aOld range was not accessible on certain models, such as PowerShots and DIGIC 7.\u000aOld GPIOs are still accepted (debugging existing code from experimental branches is still possible without merging latest qemu).

59a663e: QEMU logging: -d romcpy now output a shell script for extracting the copied blocks

5d7146a: QEMU: memfd patch to fix compilation with glibc 2.27\u000a

d5e6fbf: QEMU installer: minor updates\u000a- option to "make clean" before renaming the old folder (to save disk space)\u000a- exit if QEMU fails to compile\u000a- check for a valid DISPLAY (important for WSL)\u000a- updated help links

43b5d42: QEMU: updated CPU definition for DIGIC 7; renamed for older models and reverted the HIVECS property back to false

180a4dd: QEMU tests: updated checksums for EOS M/M2 screenshots displaying date/time\u000a(fix commit 8c575ef99b7f)

e7c7ce2: QEMU tests: updated checksum for a screenshot affected by transparency - commit 5b274e3\u000a(Canon quirk - it's not even a LiveView screenshot)

a35f489: allow incomplete mpu_send/recv lines\u000a(such as the ones from 80D logs)

5519e42: MPU spells: documented some AF-related properties

09ca7ba: GDB scripts: also identify and name PTP handlers

7e752d6: GDB scripts: identify named functions during execution and export as IDC\u000a\u000aNamed functions identified from: task_create, register_func, register_interrupt, CreateStateObject\u000aTested on 5D3 1.1.3, EOSM2 1.0.3 and 80D 1.0.2 (missing stubs added).

1a45866: QEMU: check whether the ROM contents are mirrored (whether dumped size is larger than actual ROM size)\u000a\u000a```\u000a[EOS] loading './50D/ROM0.BIN' to 0xF0000000-0xF0FFFFFF\u000a[EOS] mirrored data; unique 0x400000 bytes repeated 0x4 times\u000a[EOS] loading './50D/ROM1.BIN' to 0xF8000000-0xF8FFFFFF\u000a[EOS] mirrored data; unique 0x800000 bytes repeated 0x2 times\u000a```\u000a\u000a

289c074: QEMU: SRM_SetBusy/ClearBusy emulation for 5D3/6D/70D

248458f: mark unknown MPU messages with ???\u000a\u000a(this ensures all MPU messages are displayed to the terminal, including unknown ones)

4918aef: lua_task: task name must be allocated by caller (it's not copied, so we must not modify it afterwards)\u000a\u000aEasiest way: use the same name for all tasks started by Lua scripts.

d8f2726: Lua: added sleep() with floating-point argument\u000a(similar to msleep)

8c2dab6: Lua: option to disable powersave while running tasks created from scripts\u000a\u000aExample: task.create(func, nil, nil, true)

18a131e: Powersave: experimental option to disable the 30-minute timer in LiveView

446e2eb: Powersave: simplified the option to enable while recording;\u000aupdated help; aligned menu definition

e2310ef: menu: experimental fix for issue #1974 (timeout in LiveView, 6D/M/100D/70D)\u000a\u000aHypothesis:\u000aTested on 5D3 with GUI mode 41.\u000aTested in QEMU on 6D (it keeps poking the MPU while ML menu is open).

c0dad01: property.h: fix declaration of prop_deliver\u000a(first argument is a pointer to the property, unlike prop_request_change)

609d604: boot-hack: no real reason to use short for magic_off\u000a(

53cf435: boot-hack: make sure our relocation buffer is 32-bit aligned\u000a(it usually is, unless compiler decides otherwise)

39156e3: Lua: experimental camera.flash (get/set)\u000ashoot.h: added set_flash_firing

8b6b858: boot-hack: fade-out LED feedback when bypassing ML at startup\u000a(by pressing or not pressing SET, depending on how it's configured)\u000a\u000aShould also fix

7dd027a: Menu: QEMU hack 90f702c no longer needed for EOS M/M2\u000a(keeping changes to gui.h and button_codes.h)

13b79a0: fix printing GDB command line on systems where process name is limited to 15 chars;\u000aonly look at processes started by the same parent as this script (to avoid false positives)\u000ato be tested on Mac and WSL

ea8b17d: QEMU: EOS M and M2 appear to handle the Q/SET button just like 100D\u000a

0fc9e8e: QEMU: enabled MPU properties for EOS M (no more issues after LiveView emulation)

e39699a: QEMU: allow any argument for PROP_LEO_LENSID (EOSM); documented PROP_LEO_LENS*\u000a\u000aShould fix emulation with ROMs saved with a different lens (apparently lens ID goes into ROM - property 0xC000004)\u000a

eeb1251: Experimental option to load ML only when holding SET pressed at startup\u000a

b2de18e: config.h: require const char * for config_flag_file_setting_save/load

1324f51: EOS M: disabled long-press SET/Q (let's try PLAY for submenus)

2297b8e: Menu: use PLAY (in addition to Q) for opening submenus (experiment)\u000a

7469c34: Menu: disabled Junkie mode; MENU key just goes back\u000a\u000a\u000aCan be re-enabled by defining FEATURE_JUNKIE_MENU in features.h

562116e: Auto ETTR: backout EOS M specific changes (pull request $428), hopefully no longer needed.\u000aTriggering by SET should now work just like on all other camera models.\u000aNot tested, please report back.

2efea8b: EOSM: enable the SET/Q long-press trick from 100D\u000a(short press = SET, long press = Q)

02b99ab: 100D, EOSM: attempt to fix pressing SET at startup to bypass ML\u000a\u000a(the INFO key can now be used for config presets, just like with all other models)\u000a\u000aChange made generic, for any future models that might use a combined Q/SET button.

0b485e3: QEMU: send PROP_LV_LENS message at initialization (5D3 1.1.3; 1.2.3 commented; the message is model-specific)\u000a\u000aUseful for LiveView emulation (display focal length, focus distance etc)\u000aMessage sent in a different place (not as in the logs), as it interferes with our (broken) LiveView emulation

5b274e3: QEMU: experimental bitmap transparency support\u000a(doesn't match the hardware exactly, but it's better than nothing)

7df1daf: QEMU: experimental movie mode switch (V key)\u000aSome cameras have dedicated movie mode on the dial, others use a switch and can record video in any mode dial position.

d69ab7e: QEMU: key mapping for Zoom In / Zoom Out (they don't do anything interesing yet);\u000aallow defining different keybindings on the same physical key (5D3/6D: only one zoom button, unlike most others)\u000acleaned up zoom button handling on 5D3 and 6D (unpress zoom out should not be sent from keyboard, for example)

bf6a9c0: QEMU: fix copy/paste error in HPTimer emulation\u000a(no side effects)

28f8d92: QEMU tests: large timeouts appear to help in some tricky cases\u000a(such as mode switches, which may be slower than usual)

8c575ef: QEMU: updated GUI tests for LiveView.\u000a\u000aEOS M/M2: no more reason to start with the date/time dialog.\u000aStill some color palette issues; usually can be worked around by switching to other video mode and back.\u000aMinor call trace differences for 650D and 700D (missed from previous commit)

d2116b6: QEMU: LiveView works!!! (GUI elements only, no image)\u000aCredits go to Greg for the first PoC\u000a\u000aTests not yet updated, just to check whether the implementation is really without side effects outside LV.\u000aOnly one screenshot changed - on EOS M (that screenshot was already in LiveView).\u000aNote: 70D uses more EDMAC connections; increased number from 48 to 64.

bc69e69: MPU spells: identified some more properties while looking into the EOSM shutter bug\u000a

3b9af67: QEMU: validate calls to eos_trigger_int\u000aallow missing UART RX/TX interrupt and just print a warning\u000a(affected: Eeko and EOS M5; fix not obvious)

2090c2f: QEMU: removed unnecessary assertion in interrupt controller\u000a(triggered very rarely under "normal" conditions, but happens very often with io_trace)

97db8e1: QEMU tests: run the GDB test for 10 seconds\u000a(these logs will be used for building the interrupt map)

0901cba: QEMU: fix alignment of MMIO messages before starting tasks (-d io)

a7821fd: QEMU: fix HPTimer handling of periodic triggers\u000a(VxWorks models use a HPTimer as heartbeat, unlike DryOS)\u000a\u000aNo visible differences on the UI, but heartbeat is now triggering on all VxWorks models.\u000a\u000aMinor emulation differences on 60D, 600D, 650D, 700D, 100D, EOSM, 6D (besides VxWorks models).

29e9550: GDB scripts: EOSM.202 stubs for logging properties\u000a(related: af43d85)

cf62d68: fix handling logs with Windows newlines\u000a

b442627: QEMU: delay EDMAC reads by one timer step (apparently reads are supposed to finish after writes)\u000a\u000aChange required to pass the memory benchmark on 5D3 and 6D.\u000a700D gives the same error if writes are delayed.\u000a\u000aMinor changes to call/return trace on 60D, 600D, 1200D and 1300D (no visible effects).

ccfb0ae: QEMU tests: updated EOSM2 call/return trace for latest SFDATA.BIN from dfort\u000a(previously, SFDATA.BIN for 100D was assumed; no visible changes)

c6dfebd: QEMU: declared silent control events for 5D3\u000a(not used; only for annotations)


0c858dd: QEMU: declared internal zoom in/out events for 5D3\u000a(they are sent by the MPU during GUI mode switches)

d756b74: QEMU: fix LV button code for 5D3

1404ae8: more output options (to stdout, to file, auto rename)

e1735d5: MPU spells: script to annotate logs with mpu_send/recv events\u000a(known MPU messages moved to

f3ad52f: Makefile: fix "make install_qemu CONFIG_QEMU=y" for minimal targets

eb5a09a: VRAM: enabled workaround from 03c5f43 on all models\u000a(fixes Arkanoid, benchmarks and others on fresh startup in photo mode, without any images on the card)

e411085: Makefile: fix "make clean" for modules not enabled by default

69ee2a5: Merged memory-backend into lua_fix\u000a(memset32 fix)

a5b1848: selftest: tests for model ID functions (is_camera etc)

49568a6: is_camera: extended to allow checking DIGIC version\u000ae.g. if (is_camera("DIGIC", "5")) { ... }

7c04c75: memset64/memcpy64: use versions from b831cb1; fix calls from Magic Zoom to ensure proper alignment

375fa4e: Backout b831cb1 (breaks Magic Zoom and CONFIG_MARK_UNUSED_MEMORY_AT_STARTUP, as memset64 is not the same as memset)

1d7da4a: 100D: disabled full-screen magic zoom (issue #2842)

e40caa9: menu: fix typo regarding short unpress events\u000a(side effect: short joystick press also moved the menu selection up on 5D3)

287c785: adv_int: ignore empty lines when loading keyframes

6239bc6: adv_int: use strstr instead of my_strstr (fixes slow load)

284656a: Include strstr in ML core

ef21d82: adv_int: refactor keyframe time formatting

5ca412b: adv_int: auto-load the saved sequence at startup

a4869c8: adv_int: renamed menu entry to "Ramping options"

86accb6: Memory backend: drop timestamps from history; show last 1024 events

d016ccf: Memory backend: show total allocations (number and amount), including untracked ones

0e56fe7: Memory backend: allow using shoot_malloc as a last resort, even for small blocks;\u000aallow small blocks (smaller than minimum_free_space / 64) to break the minimum_free_space limit (until minimum_free_space / 4)\u000afine-tuned until the old set of Lua scripts were able to run on 1100D without umm_malloc

28bf259: Memory backend: a pointer to task names (rather than copying the full string) should be enough

a67b3ed: Memory backend: renamed memcheck_mallocbuf to memcheck_entries

b831cb1: Moved memset64 and memcpy64 to\u000a- simplified to accept only 32-bit aligned pointers\u000a- using regular memset for Magic Zoom\u000a- closing issue #1995

d7866ee: Memory backend: if shoot_malloc fails, try SRM next\u000a(poor man's autodetection, since we don't know how to query the available size in advance)

ee7abdb: exmem: reworked shoot_malloc to handle large requests better\u000a- moved autodetection to dedicated functions (for both fragmented and continuous allocations)\u000a- autodetect the max available size for large requests (slower, but when it fails, it fails gracefully)

bd7a1dd: exmem: removed the "relaxed" checks introduced in 04f02a4\u000a(not sure why they were needed; we'll find out if it fails)

766ffbb: exmem: speed-up shoot_malloc\u000a(1s timeout probably not needed)

51f6129: exmem: do not keep track of full shoot memory allocations\u000a(allows reserving some memory in advance and allocating all the remaining RAM afterwards)

f12eba5: Memory backend: fix handling of untracked blocks\u000a(possible buffer overflow before this fix)

f9f3358: Memory backend: figured out why AllocateContinuousMemoryResource may crash with many small blocks\u000a\u000a(todo: figure out where to keep 89e3b12 or not; adapt tests if not)

e4fd29d: Memory backend: when checking available memory, allocate both Shoot ans SRM at the same time\u000a(they may overlap)

1162fce: Memory backend: fix initialization

67f582f: mem.c: option to disable heap poisoning\u000a(useful when running in QEMU with -d memcheck - with this, overflowing reads will be caught as well)

26f1647: Memory backend: allow breaking minimum_free_space for small blocks\u000a(it was possible to fail the allocation for very small blocks that could not be covered by shoot_malloc)

c6d6699: Memory backend: allow AllocateMemory as a last resort, even if free space is below limit\u000a(it was possible to fail the allocation for very small blocks that could not be covered by shoot_malloc)

1e4985e: memory backend: reduce memcheck area (should reduce overhead a bit)

4e59a74: memory backend: ignore null pointers passed to free (Lua does that)

2ade4a5: exmem: when autodetecting available memory, print all srm/shoot memory blocks to console

9cffc6f: Memory backend: drop timestamps from history; show last 1024 events

b750776: Memory backend: show total allocations (number and amount), including untracked ones

aa4d3ea: Memory backend: allow using shoot_malloc as a last resort, even for small blocks;\u000aallow small blocks (smaller than minimum_free_space / 64) to break the minimum_free_space limit (until minimum_free_space / 4)\u000afine-tuned until the old set of Lua scripts were able to run on 1100D without umm_malloc

5e3fa95: Memory backend: a pointer to task names (rather than copying the full string) should be enough

65a1f86: Memory backend: renamed memcheck_mallocbuf to memcheck_entries

af24e33: Moved memset64 and memcpy64 to\u000a- simplified to accept only 32-bit aligned pointers\u000a- using regular memset for Magic Zoom\u000a- closing issue #1995

df86639: Memory backend: if shoot_malloc fails, try SRM next\u000a(poor man's autodetection, since we don't know how to query the available size in advance)

da3cfb7: exmem: reworked shoot_malloc to handle large requests better\u000a- moved autodetection to dedicated functions (for both fragmented and continuous allocations)\u000a- autodetect the max available size for large requests (slower, but when it fails, it fails gracefully)

21264fc: exmem: removed the "relaxed" checks introduced in 04f02a4\u000a(not sure why they were needed; we'll find out if it fails)

fc71232: exmem: speed-up shoot_malloc\u000a(1s timeout probably not needed)

e1d3d45: exmem: do not keep track of full shoot memory allocations\u000a(allows reserving some memory in advance and allocating all the remaining RAM afterwards)

0f10b31: Memory backend: fix handling of untracked blocks\u000a(possible buffer overflow before this fix)

db34f9c: Memory backend: figured out why AllocateContinuousMemoryResource may crash with many small blocks\u000a\u000a(todo: figure out where to keep 89e3b12 or not; adapt tests if not)

d288685: Intervalometer: attempt to get sligthly better timing accuracy, to be tested\u000a

bcbabb3: Moved timer functions to timer.h (always included from dryos.h)\u000aRenamed get_ms_clock_value / get_us_clock_value to get_ms_clock / get_us_clock\u000aReplaced all hardcoded references to 0xC0242014 with GET_DIGIC_TIMER()\u000a```\u000afind . -not -path '*/\.*' -type f -name '*.c' -o -name '*.h' -exec sed -i 's/get_ms_clock_value/get_ms_clock/g' {} +\u000afind . -not -path '*/\.*' -type f -name '*.c' -o -name '*.h' -exec sed -i 's/get_us_clock_value/get_us_clock/g' {} +\u000ased -i 's/\*(volatile uint32_t \*)0xC0242014/GET_DIGIC_TIMER()/' */*.c\u000a...\u000a```

7cdf315: Reworked get_ms_clock_value / get_us_clock_value / get_seconds_clock\u000a- only update the 64-bit us_clock on each call (overhead from ~ 4us reduced to less than 1us)\u000a- lower-resolution clocks are always derived from the microsecond clock and computed only on request\u000a- dropped get_ms_clock_value_fast

420833b: imath.h: fix comments for FMT_FIXEDPOINT*; added FMT_FIXEDPOINT6

e4fd44e: QEMU: workaround to emulate io_trace\u000a(without it, many MMIO events are missed, apparently because of QEMU's TLB cache)

958a876: NotifyBox: log messages to QEMU console

d2bb805: GDB scripts: replaced *(int*)(x) with MEM(x)\u000a(for consistency with other ML code, and maybe slightly easier to read)

34b5de3: QEMU: experimental Q button emulation for 100D\u000a(not 100% sure about it, but seems to emulate the long Q/SET press correctly)

c8b8aa9: added README

0769f9e: img_name: moved options into a submenu\u000a(had to adjust menu callbacks a bit)

2e98b38: img_name: experimental option to change image file number\u000a(fixme: requires restart)

b7f2933: Properties: declared PROP_FILE_NUMBERING_MODE and PROP_NUMBER_OF_CONTINUOUS_MODE; allow changing the latter

bf946b6: img_name: save the user-set prefix in config file

ed6e5e8: img_name: make it clear whether the option is active or not;\u000adisable when user sets prefix back to original value

c0b1ab5: img_name: misc small fixes\u000a- no strcpy\u000a- warn if IME modules are not loaded\u000a- fix changing the fourth character\u000a- fill with _ if user enters less than 4 characters\u000a- moved to Shoot menu (it only applies to still pictures)\u000a- menu appearance, help update\u000a- no symbols exported\u000a- fix warnings

29221b2: Renamed to\u000a(it only applies to still images, not to any kind of files, and "pref" could be misread as "preferences")



  1. Make sure you are running Canon firmware 1.1.2.

  2. Once you have the correct Canon firmware:
    • Format the card from the camera.
    • Unzip the archive and copy ML files to the memory card.
    • Run the Firmware Update process from Canon menu.

      This procedure will enable the BOOTDISK flag in your camera's Flash ROM, allowing it to load and execute custom code from the memory card. A copy of the original (unmodified) ROM contents will be saved to the card.

      Magic Lantern will run from this card; it won't replace your original firmware.

  3. After installation, please copy your ROM backup files (ML/LOGS/ROM*.BIN on the card) to a safe place.
Detailed instructions on the wiki. Please don't forget to check the FAQ and the user guide.


From camera:
  1. Run Firmware Update from your ML card.
  2. Follow the on-screen instructions, including the fine print.

    This procedure disables the BOOTDISK flag. You will no longer be able to run Magic Lantern, unless you reinstall it.

    Some settings changed by Magic Lantern might be persistent; this procedure will not reset them. To restore the camera to factory state, you may also want to clear all camera settings and custom functions from Canon menu.

From one card:
  • Canon menu: Format card, remove Magic Lantern.
  • This procedure does not disable the BOOTDISK flag. With this method, you will still be able to run Magic Lantern from other cards.
  • Never delete the Magic Lantern files from the card! Format the card instead.

Known issues

Camera doesn't boot?

  1. Remove battery, remove card.
  2. Put battery back, close card and battery covers.
  3. Start the camera without card.
    • » Did it work? Format the card, reinstall Magic Lantern.
    • » Still not working? Double-check battery and card doors, run the diagnostic tools and get in touch with us.

Troubleshooting tips

  • If your camera locks up, remove the battery and reboot.
  • Make sure you have a backup card without Magic Lantern on it (just in case).
  • To restore ML defaults: Prefs → Config files.
  • To see what settings you have changed from ML defaults: Modified (Δ) menu.
  • To disable Magic Lantern temporarily: press and hold SET at startup.

Older Builds

Magic Lantern is not approved nor endorsed by Canon in any way, and using it will probably void your warranty.
We are not responsible for any damages to your camera.

Copyright (C) 2009-2018 Magic Lantern Development Team

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.