Author Topic: Canon 500D / T1i  (Read 80888 times)

Rezzar

  • New to the forum
  • *
  • Posts: 4
Re: Canon 500D / T1i
« Reply #75 on: April 19, 2019, 12:07:21 AM »
So I've formatted my card and I've copied the 1.1.1 firmware on to it to the root directory but when I inserted the card back in the camera my screen turns blank again and the red blinking light shows up. Without the card I can access pretty much all the menu settings but with a card even a clean one with anything on it the screen won't come up

Walter Schulz

  • Contributor
  • Hero Member
  • *****
  • Posts: 6839
Re: Canon 500D / T1i
« Reply #76 on: April 19, 2019, 05:41:45 AM »
So I've formatted my card

And I smell macOS. Please use disk utility and erase card first.
Photogs and videographers: Assist in proof reading upcoming in-camera help!. Your input is wanted and needed!

hawkbox

  • Just arrived
  • *
  • Posts: 1
Re: Canon 500D / T1i
« Reply #77 on: May 19, 2019, 02:23:58 AM »
I have a T1i I bought a long ass time ago and I've been trying to get it working for video with larger SD cards.  I flashed it a few months back but the video function crashes fairly often and is somewhat annoying, when I have a moment this weekend though I will try to flash this as I don't use it often but it would be nice to have it properly functional with larger cards.

critix

  • Contributor
  • Member
  • *****
  • Posts: 113
Re: Canon 500D / T1i
« Reply #78 on: September 22, 2019, 03:48:50 PM »
Here is the ML version for 1.1.2 firmware:
https://bitbucket.org/ccritix/magic-lantern/downloads/magiclantern-Nightly.2019Sep22.500D112.zip
Result of "Stubs API test":
Code: [Select]
[Pass] is_play_mode() => 0x1
[Pass] src = fio_malloc(size) => 0x422700d8
[Pass] dst = fio_malloc(size) => 0x42a780f0
[Pass] memcmp(dst, src, 4097) => 0xffffff5c
[Pass] edmac_memcpy(dst, src, 4097) => 0x42a780f0
[Pass] memcmp(dst, src, 4097) => 0x0
[Pass] edmac_memcpy(dst, src, 4097) => 0x42a780f0
[Pass] memcmp(dst, src, size) => 0x84
[Pass] edmac_memcpy(dst, src, size) => 0x42a780f0
[Pass] memcmp(dst, src, size) => 0x0
[Pass] memcmp(dst, src, size) => 0x9e
[Pass] edmac_memcpy_start(dst, src, size) => 0x42a780f0
       dt => 0x33ff
[Pass] copied => 0x4014f0
[Pass] copied => 0x4014f0
[Pass] copied => 0x4014f0
[Pass] memcmp(dst, src, copied) => 0x0
[Pass] memcmp(dst, src, copied + 16) => 0xffffffe8
       edmac_memcpy_finish()
       free(src)
       free(dst)
Cache test A (EDMAC on BMP buffer)...
[Pass] bmp = bmp_load("ML/CROPMKS/CINESCO2.BMP", 1) => 0xa5fd8c
[Pass] old => 0x0
[Pass] irq => 0xc0
[Pass] differences => 0x67f
[Pass] old => 0x0
[Pass] irq => 0xc0
[Pass] differences => 0x0
Cache test B (FIO on 8K buffer)...
[Pass] tries[0] => 0xff
[Pass] tries[1] => 0x100
[Pass] tries[2] => 0xff
[Pass] tries[3] => 0xea
[Pass] failr[0] => 0x93
[Pass] failw[0] => 0x92
[Pass] failr[1] => 0x83
[Pass] failw[1] => 0x0
[Pass] failr[2] => 0x0
[Pass] failw[2] => 0x98
[Pass] failr[3] => 0x0
[Pass] failw[3] => 0x0
       times[0] / tries[0] => 0x15
       times[1] / tries[1] => 0x15
       times[2] / tries[2] => 0x16
       times[3] / tries[3] => 0x16
Cache tests finished.

[Pass] f = FIO_CreateFile("test.dat") => 0x3
[Pass] FIO_WriteFile(f, (void*)0xFF000000, 0x10000) => 0x10000
[Pass] FIO_WriteFile(f, (void*)0xFF000000, 0x10000) => 0x10000
       FIO_CloseFile(f)
[Pass] FIO_GetFileSize("test.dat", &size) => 0x0
[Pass] size => 0x20000
[Pass] p = (void*)_alloc_dma_memory(0x20000) => 0x40aaca04
[Pass] f = FIO_OpenFile("test.dat", O_RDONLY | O_SYNC) => 0x3
[Pass] FIO_ReadFile(f, p, 0x20000) => 0x20000
       FIO_CloseFile(f)
       _free_dma_memory(p)
[Pass] count => 0x3a98
[Pass] buf = fio_malloc(0x1000000) => 0x422700d8
[Pass] FIO_GetFileSize_direct("test.dat") => 0x82000000
[Pass] f = FIO_OpenFile("test.dat", O_RDWR | O_SYNC) => 0x3
[Pass] FIO_SeekSkipFile(f, 0, SEEK_END) => 0x82000000
[Pass] FIO_WriteFile(f, buf, 0x10) => 0x10
[Pass] FIO_SeekSkipFile(f, -0x20, SEEK_END) => 0x81fffff0
[Pass] FIO_WriteFile(f, buf, 0x30) => 0x30
[Pass] FIO_SeekSkipFile(f, 0x20, SEEK_SET) => 0x20
[Pass] FIO_SeekSkipFile(f, 0x30, SEEK_CUR) => 0x50
[Pass] FIO_SeekSkipFile(f, -0x20, SEEK_CUR) => 0x30
[Pass] FIO_GetFileSize_direct("test.dat") => 0x82000020
[Pass] is_file("test.dat") => 0x1
[Pass] FIO_RemoveFile("test.dat") => 0x0
[Pass] is_file("test.dat") => 0x0
[Pass] SetTimerAfter(0, timer_cbr, overrun_cbr, 0) => 0x15
[Pass] timer_func => 0x2
[Pass] SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0x8606
       msleep(900)
[Pass] timer_func => 0x0
       msleep(200)
[Pass] timer_func => 0x1
[Pass] ABS((timer_time/1000 - t0) - 1000) => 0x1
[Pass] ABS((timer_arg - ta0) - 1000) => 0xa
[Pass] timer = SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0x8608
       msleep(400)
       CancelTimer(timer)
[Pass] timer_func => 0x0
       msleep(1500)
[Pass] timer_func => 0x0
[Pass] SetHPTimerAfterNow(0, timer_cbr, overrun_cbr, 0) => 0x15
[Pass] timer_func => 0x2
[Pass] SetHPTimerAfterNow(100000, timer_cbr, overrun_cbr, 0) => 0xa7c
       msleep(90)
[Pass] timer_func => 0x0
       msleep(20)
[Pass] timer_func => 0x1
[Pass] ABS(DeltaT(timer_time, t0) - 100000) => 0x131
[Pass] ABS(DeltaT(timer_arg, ta0) - 100000) => 0xfd
[Pass] ABS((get_us_clock_value() - t0) - 110000) => 0xffffffb4
[Pass] SetHPTimerAfterNow(90000, next_tick_cbr, overrun_cbr, 0) => 0xa7e
       msleep(80)
[Pass] timer_func => 0x0
       msleep(20)
[Pass] timer_func => 0x3
       msleep(80)
[Pass] timer_func => 0x3
       msleep(20)
[Pass] timer_func => 0x1
[Pass] ABS(DeltaT(timer_time, t0) - 300000) => 0x6d
[Pass] ABS(DeltaT(timer_arg, ta0) - 300000) => 0x38
[Pass] ABS((get_us_clock_value() - t0) - 310000) => 0xffffff9f
       t0 = *(uint32_t*)0xC0242014 => 0xdb260
       msleep(250)
       t1 = *(uint32_t*)0xC0242014 => 0x16256
[Pass] ABS(MOD(t1-t0, 1048576)/1000 - 250) => 0x9
       LoadCalendarFromRTC( &now )
       s0 = now.tm_sec => 0x3a
       Date/time: 2019/09/22 15:19:58
       msleep(1500)
       LoadCalendarFromRTC( &now )
       s1 = now.tm_sec => 0x0
[Pass] MOD(s1-s0, 60) => 0x2
[Pass] MOD(s1-s0, 60) => 0x2
       m0 = MALLOC_FREE_MEMORY => 0x39188
[Pass] p = (void*)_malloc(50*1024) => 0xebad8
[Pass] CACHEABLE(p) => 0xebad8
       m1 = MALLOC_FREE_MEMORY => 0x2c988
       _free(p)
       m2 = MALLOC_FREE_MEMORY => 0x39188
[Pass] ABS((m0-m1) - 50*1024) => 0x0
[Pass] ABS(m0-m2) => 0x0
       m0 = GetFreeMemForAllocateMemory() => 0x16d974
[Pass] p = (void*)_AllocateMemory(256*1024) => 0xaac9c4
[Pass] CACHEABLE(p) => 0xaac9c4
       m1 = GetFreeMemForAllocateMemory() => 0x12d968
       _FreeMemory(p)
       m2 = GetFreeMemForAllocateMemory() => 0x16d974
[Pass] ABS((m0-m1) - 256*1024) => 0xc
[Pass] ABS(m0-m2) => 0x0
       m01 = MALLOC_FREE_MEMORY => 0x39188
       m02 = GetFreeMemForAllocateMemory() => 0x16d974
[Pass] p = (void*)_alloc_dma_memory(256*1024) => 0x40aaca04
[Pass] UNCACHEABLE(p) => 0x40aaca04
[Pass] CACHEABLE(p) => 0xaaca04
[Pass] UNCACHEABLE(CACHEABLE(p)) => 0x40aaca04
       _free_dma_memory(p)
[Pass] p = (void*)_shoot_malloc(24*1024*1024) => 0x4a000068
[Pass] UNCACHEABLE(p) => 0x4a000068
       _shoot_free(p)
       m11 = MALLOC_FREE_MEMORY => 0x39188
       m12 = GetFreeMemForAllocateMemory() => 0x16d974
[Pass] ABS(m01-m11) => 0x0
[Pass] ABS(m02-m12) => 0x0
[Pass] suite = shoot_malloc_suite_contig(24*1024*1024) => 0xebad8
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x1
[Pass] suite->size => 0x1800000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xebaf8
[Pass] chunk->signature => 'MemChunk'
[Pass] chunk->size => 0x1800000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4a000064
[Pass] UNCACHEABLE(p) => 0x4a000064
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite_contig(0) => 0xebad8
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x1
[Pass] suite->size => 0x1ae0000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xebaf8
[Pass] chunk->signature => 'MemChunk'
[Pass] chunk->size => 0x1ae0000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4a000064
[Pass] UNCACHEABLE(p) => 0x4a000064
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite(64*1024*1024) => 0xebad8
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0x6
[Pass] suite->size => 0x4000000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xebaf8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x11c0000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x422700c4
[Pass] UNCACHEABLE(p) => 0x422700c4
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebb48
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x11c4000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x42000064
[Pass] UNCACHEABLE(p) => 0x42000064
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebb78
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x11c8000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4211c088
[Pass] UNCACHEABLE(p) => 0x4211c088
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebba8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x11cc000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x421240a0
[Pass] UNCACHEABLE(p) => 0x421240a0
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebbd8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x2cac000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4c000064
[Pass] UNCACHEABLE(p) => 0x4c000064
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebc08
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x4000000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4a000064
[Pass] UNCACHEABLE(p) => 0x4a000064
       chunk = GetNextMemoryChunk(suite, chunk) => 0x0
[Pass] total => 0x4000000
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] suite = shoot_malloc_suite(0) => 0xebad8
[Pass] suite->signature => 'MemSuite'
[Pass] suite->num_chunks => 0xb
[Pass] suite->size => 0x5f00000
[Pass] chunk = GetFirstChunkFromSuite(suite) => 0xebaf8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x11c0000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x422700c4
[Pass] UNCACHEABLE(p) => 0x422700c4
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebb48
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x11c4000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x42000064
[Pass] UNCACHEABLE(p) => 0x42000064
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebb78
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x11c8000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4211c088
[Pass] UNCACHEABLE(p) => 0x4211c088
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebba8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x11cc000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x421240a0
[Pass] UNCACHEABLE(p) => 0x421240a0
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebbd8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x2cac000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4c000064
[Pass] UNCACHEABLE(p) => 0x4c000064
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebc08
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x478c000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4a000064
[Pass] UNCACHEABLE(p) => 0x4a000064
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebc38
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x4ca8000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4bae00e4
[Pass] UNCACHEABLE(p) => 0x4bae00e4
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebc68
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x51c4000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4dae00e4
[Pass] UNCACHEABLE(p) => 0x4dae00e4
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebc98
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x56e0000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x49ae00e4
[Pass] UNCACHEABLE(p) => 0x49ae00e4
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebcc8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x5bfc000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x47ae00e4
[Pass] UNCACHEABLE(p) => 0x47ae00e4
       chunk = GetNextMemoryChunk(suite, chunk) => 0xebcf8
[Pass] chunk->signature => 'MemChunk'
[Pass] total += chunk->size => 0x5f00000
[Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x45ae00e4
[Pass] UNCACHEABLE(p) => 0x45ae00e4
       chunk = GetNextMemoryChunk(suite, chunk) => 0x0
[Pass] total => 0x5f00000
       shoot_free_suite(suite); suite = 0; chunk = 0;
[Pass] strlen("abc") => 0x3
[Pass] strlen("qwertyuiop") => 0xa
[Pass] strlen("") => 0x0
[Pass] strcpy(msg, "hi there") => 0x1b2424
[Pass] msg => 'hi there'
[Pass] snprintf(a, sizeof(a), "foo") => 0x3
[Pass] snprintf(b, sizeof(b), "foo") => 0x3
[Pass] strcmp(a, b) => 0x0
[Pass] snprintf(a, sizeof(a), "bar") => 0x3
[Pass] snprintf(b, sizeof(b), "baz") => 0x3
[Pass] strcmp(a, b) => 0xfffffff8
[Pass] snprintf(a, sizeof(a), "Display") => 0x7
[Pass] snprintf(b, sizeof(b), "Defishing") => 0x9
[Pass] strcmp(a, b) => 0x4
[FAIL] snprintf(buf, 3, "%d", 1234) => 0x4
[Pass] buf => '12'
[Pass] memcpy(foo, bar, 6) => 0x1b24c0
[Pass] foo => 'asdfghuiop'
[Pass] memset(bar, '*', 5) => 0x1b24a0
[Pass] bar => '*****hjkl;'
       bzero32(bar + 5, 5)
[Pass] bar => '****'
       EngDrvOut(LCD_Palette[0], 0x1234)
[Pass] shamem_read(LCD_Palette[0]) => 0x1234
       call("TurnOnDisplay")
[Pass] DISPLAY_IS_ON => 0x1
       call("TurnOffDisplay")
[Pass] DISPLAY_IS_ON => 0x0
       call("TurnOnDisplay")
[Pass] DISPLAY_IS_ON => 0x1
       task_create("test", 0x1c, 0x1000, test_task, 0) => 0x63000ae
[Pass] test_task_created => 0x1
[Pass] get_current_task_name() => 'run_test'
[Pass] task_max => 0x68
[Pass] task_max => 0x68
[Pass] mq = mq ? mq : (void*)msg_queue_create("test", 5) => 0x632009c
[Pass] msg_queue_post(mq, 0x1234567) => 0x0
[Pass] msg_queue_receive(mq, (struct event **) &m, 500) => 0x0
[Pass] m => 0x1234567
[Pass] msg_queue_receive(mq, (struct event **) &m, 500) => 0x9
[Pass] sem = sem ? sem : create_named_semaphore("test", 1) => 0x6340284
[Pass] take_semaphore(sem, 500) => 0x0
[Pass] take_semaphore(sem, 500) => 0x9
[Pass] give_semaphore(sem) => 0x0
[Pass] take_semaphore(sem, 500) => 0x0
[Pass] give_semaphore(sem) => 0x0
[Pass] rlock = rlock ? rlock : CreateRecursiveLock(0) => 0x636005a
[Pass] AcquireRecursiveLock(rlock, 500) => 0x0
[Pass] AcquireRecursiveLock(rlock, 500) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0x0
[Pass] ReleaseRecursiveLock(rlock) => 0xf
       SetGUIRequestMode(1); msleep(1000);
[Pass] CURRENT_GUI_MODE => 0x1
       SetGUIRequestMode(2); msleep(1000);
[Pass] CURRENT_GUI_MODE => 0x2
       SetGUIRequestMode(0); msleep(1000);
[Pass] CURRENT_GUI_MODE => 0x0
[Pass] display_idle() => 0x1
       GUI_Control(BGMT_PLAY, 0, 0, 0); msleep(1000);
[Pass] PLAY_MODE => 0x1
[Pass] MENU_MODE => 0x0
       GUI_Control(BGMT_MENU, 0, 0, 0); msleep(1000);
[Pass] MENU_MODE => 0x1
[Pass] PLAY_MODE => 0x0
[Pass] dialog->type => 'DIALOG'
       GUI_Control(BGMT_MENU, 0, 0, 0); msleep(500);
[Pass] MENU_MODE => 0x0
[Pass] PLAY_MODE => 0x0
       SW1(1,100)
[Pass] HALFSHUTTER_PRESSED => 0x1
       SW1(0,100)
[Pass] HALFSHUTTER_PRESSED => 0x0
[Pass] is_play_mode() => 0x1
[Pass] is_pure_play_photo_mode() => 0x1
[Pass] is_pure_play_movie_mode() => 0x0
[Pass] is_play_mode() => 0x1
[Pass] is_pure_play_photo_mode() => 0x0
[Pass] is_pure_play_movie_mode() => 0x0
[Pass] is_play_mode() => 0x1
[Pass] is_pure_play_photo_mode() => 0x0
[Pass] is_pure_play_movie_mode() => 0x1
[Pass] is_play_mode() => 0x1
[Pass] is_pure_play_photo_mode() => 0x0
[Pass] is_pure_play_movie_mode() => 0x0
Only 1 fail at:
Code: [Select]
[FAIL] snprintf(buf, 3, "%d", 1234) => 0x4
Canon 1300D, 500D, EOS M, EOS M2

panca

  • New to the forum
  • *
  • Posts: 2
Re: Canon 500D / T1i
« Reply #79 on: September 26, 2019, 07:38:11 PM »
Hi Critix,

I am the guy who created the issue on Bitbucket. Thank you for your initiative - sorry I overlooked this post.

Unfortunately I have to report that this version has the same behaviour for me. When I try to "update" with the 500D running firmware 1.1.2, I get the message below. I did low-level format the card with the new Canon 1.1.2 firmware first, still the camera replies:

Firmware update program

Update file
cannot be found.
Please check the momory
card and reload the
battery and try again.

If I add the official 1.1.1 firmware file on the drive (as suggested in the troubleshooting guide) the update program does load, but only the official Canon update file is offered for update....

Sorry to be pain in the a*, but that's what I find ;)

Best
Panca/Rainer

PS: I still observe that the ML-UPDATE.FIR file is pretty small (34kb) compared to the 1.1.1 version (66kb). Thanks for the consideration.

critix

  • Contributor
  • Member
  • *****
  • Posts: 113
Re: Canon 500D / T1i
« Reply #80 on: September 26, 2019, 07:47:22 PM »
With version 1.1.1 set the camera bootflag. Then update the camera to 1.1.2. and you can use ML for version 1.1.2. Unfortunately, for the moment there is no ML-SETUP.FIR for version 1.1.2.
Canon 1300D, 500D, EOS M, EOS M2

panca

  • New to the forum
  • *
  • Posts: 2
Re: Canon 500D / T1i
« Reply #81 on: September 26, 2019, 08:16:19 PM »
Hi Citrix,

Oh I see! Thanks, it is working now!

Not knowing this might have been my problem in the first place. Anyways, all is good that ends well... ;)

Thanks again
.r.

critix

  • Contributor
  • Member
  • *****
  • Posts: 113
Re: Canon 500D / T1i
« Reply #82 on: September 27, 2019, 06:58:01 PM »
I restored the archive with ML-SETUP.FIR correctly, for version 1.1.2
Canon 1300D, 500D, EOS M, EOS M2