1. Trammell Hudson
  2. Magic Lantern
  3. Pull requests

Pull requests

#813 Open
Repository
daniel_fort
Branch
update-to-700D.115
Repository
hudson
Branch
unified

Update to 700D.115

Bitbucket cannot automatically merge this request.

The commits that make up this pull request have been removed.

Bitbucket cannot automatically merge this request due to conflicts.

Review the conflicts on the Overview tab. You can then either decline the request or merge it manually on your local system using the following commands:

hg update 221152120589
hg pull -r update-to-700D.115 https://bitbucket.org/daniel_fort/magic-lantern
# Note: This will create a new head!
hg merge update-to-700D.115
hg commit -m 'Merged in daniel_fort/magic-lantern/update-to-700D.115 (pull request #813)'
Author
  1. Daniel Fort
Reviewers
Description
  • hg rename 700D.114 700D.115

  • update to firmware revision 700D.115

Comments (6)

  1. Daniel Fort author

    Tested the new ML-SETUP.FIR and it works fine so I committed and pushed it.

    Here's the check-stubs.py output, pretty simple update:

    STUB                                                    OLD           NEW     DELTA
    get_current_task                                     0x0000252c -> 0x0000252c [0x000]
    create_init_task                                     0x00002eb8 -> 0x00002eb8 [0x000]
    DryosDebugMsg                                        0x0000395c -> 0x0000395c [0x000]
    dm_set_store_level                                   0x00003cc8 -> 0x00003cc8 [0x000]
    SetHPTimerAfterNow                                   0x00004fd8 -> 0x00004fd8 [0x000]
    SetHPTimerNextTick                                   0x000050c8 -> 0x000050c8 [0x000]
    create_named_semaphore                               0x00006178 -> 0x00006178 [0x000]
    take_semaphore                                       0x000062d8 -> 0x000062d8 [0x000]
    give_semaphore                                       0x000063c4 -> 0x000063c4 [0x000]
    msleep                                               0x000067b4 -> 0x000067b4 [0x000]
    task_create                                          0x00006868 -> 0x00006868 [0x000]
    GetSizeOfMaxRegion                                   0x00007444 -> 0x00007444 [0x000]
    GetMemoryInformation                                 0x00007498 -> 0x00007498 [0x000]
    _AllocateMemory                                      0x000076f8 -> 0x000076f8 [0x000]
    _FreeMemory                                          0x00007a94 -> 0x00007a94 [0x000]
    CreateMemoryChunk                                    0x0000835c -> 0x0000835c [0x000]
    GetMemoryAddressOfMemoryChunk                        0x00008900 -> 0x00008900 [0x000]
    DeleteMemorySuite                                    0x00008974 -> 0x00008974 [0x000]
    CreateMemorySuite                                    0x00008b7c -> 0x00008b7c [0x000]
    AddMemoryChunk                                       0x00008e58 -> 0x00008e58 [0x000]
    GetFirstChunkFromSuite                               0x00008f28 -> 0x00008f28 [0x000]
    GetNextMemoryChunk                                   0x000096c4 -> 0x000096c4 [0x000]
    dma_memcpy                                           0x0000a460 -> 0x0000a460 [0x000]
    SetTimerAfter                                        0x0000b4d8 -> 0x0000b4d8 [0x000]
    CancelTimer                                          0x0000b6d8 -> 0x0000b6d8 [0x000]
    task_trampoline                                      0x0000bb80 -> 0x0000bb80 [0x000]
    get_obj_attr                                         0x0000e68c -> 0x0000e68c [0x000]
    SetEDmac                                             0x00011480 -> 0x00011480 [0x000]
    ConnectWriteEDmac                                    0x0001152c -> 0x0001152c [0x000]
    ConnectReadEDmac                                     0x000115f0 -> 0x000115f0 [0x000]
    StartEDmac                                           0x00011798 -> 0x00011798 [0x000]
    RegisterEDmacCompleteCBR                             0x00011984 -> 0x00011984 [0x000]
    UnregisterEDmacCompleteCBR                           0x000119c0 -> 0x000119c0 [0x000]
    RegisterEDmacAbortCBR                                0x00011a6c -> 0x00011a6c [0x000]
    UnregisterEDmacAbortCBR                              0x00011aa8 -> 0x00011aa8 [0x000]
    RegisterEDmacPopCBR                                  0x00011b00 -> 0x00011b00 [0x000]
    UnregisterEDmacPopCBR                                0x00011b3c -> 0x00011b3c [0x000]
    msg_queue_create                                     0x00013460 -> 0x00013460 [0x000]
    msg_queue_receive                                    0x00013570 -> 0x00013570 [0x000]
    msg_queue_post                                       0x0001375c -> 0x0001375c [0x000]
    msg_queue_count                                      0x0001379c -> 0x0001379c [0x000]
    CreateRecursiveLock                                  0x00013810 -> 0x00013810 [0x000]
    AcquireRecursiveLock                                 0x000138a8 -> 0x000138a8 [0x000]
    ReleaseRecursiveLock                                 0x000139bc -> 0x000139bc [0x000]
    vsnprintf                                            0x00014ee4 -> 0x00014ee4 [0x000]
    TryPostStageEvent                                    0x00016564 -> 0x00016564 [0x000]
    TryPostStageEvent_end                                0x000165c0 -> 0x000165c0 [0x000]
    TryPostEvent                                         0x00016c44 -> 0x00016c44 [0x000]
    TryPostEvent_end                                     0x00016ca0 -> 0x00016ca0 [0x000]
    _alloc_dma_memory                                    0x00016e8c -> 0x00016e8c [0x000]
    _free_dma_memory                                     0x00016ec0 -> 0x00016ec0 [0x000]
    is_taskid_valid                                      0x0001992c -> 0x0001992c [0x000]
    bzero32                                              0x0001c45c -> 0x0001c45c [0x000]
    task_dispatch_hook                                   0x000232c4 -> 0x000232c4 [0x000]
    pre_isr_hook                                         MISSING    -> 0x000232cc [?????] [!!!]
    post_isr_hook                                        MISSING    -> 0x000232d0 [?????] [!!!]
    gui_main_struct                                      0x000236b0 -> 0x000236b0 [0x000]
    sounddev                                             0x000239f4 -> 0x000239f4 [0x000]
    dm_names                                             0x000241c8 -> 0x000241c8 [0x000]
    task_max                                             0x000247b0 -> 0x000247b0 [0x000]
    additional_version                                   0x00026ce8 -> 0x00026ce8 [0x000]
    mvr_config                                           0x000314f4 -> 0x000314f4 [0x000]
    gui_task_list                                        0x0003d8a0 -> 0x0003d8a0 [0x000]
    sd_device                                            0x00049000 -> 0x00049000 [0x000]
    LCD_Palette                                          0x00050acc -> 0x00050acc [0x000]
    bmp_vram_info                                        0x000522cc -> 0x000522cc [0x000]
    camera_engine                                        0xc0220000 -> 0xc0220000 [0x000]
    cstart                                               0xff0c1c20 -> 0xff0c1c20 [0x000] [!!!]
    init_task                                            0xff0c5408 -> 0xff0c5408 [0x000] [!!!]
    _malloc                                              0xff0c82e8 -> 0xff0c82e8 [0x000] [!!!]
    _free                                                0xff0c8340 -> 0xff0c8340 [0x000] [!!!]
    gui_main_task                                        0xff0d6a30 -> 0xff0d6a30 [0x000] [!!!]
    GUI_Control                                          0xff0d6e04 -> 0xff0d6e04 [0x000] [!!!]
    GUI_ChangeMode                                       0xff0d6fc0 -> 0xff0d6fc0 [0x000] [!!!]
    gui_init_end                                         0xff0d7478 -> 0xff0d7478 [0x000] [!!!]
    SRM_AllocateMemoryResourceFor1stJob                  0xff0e6c48 -> 0xff0e6c48 [0x000] [!!!]
    SRM_FreeMemoryResourceFor1stJob                      0xff0ea818 -> 0xff0ea818 [0x000] [!!!]
    StartASIFDMAADC                                      0xff108fbc -> 0xff108fbc [0x000] [!!!]
    StopASIFDMAADC                                       0xff109138 -> 0xff109138 [0x000] [!!!]
    StartASIFDMADAC                                      0xff109174 -> 0xff109174 [0x000] [!!!]
    StopASIFDMADAC                                       0xff10924c -> 0xff10924c [0x000] [!!!]
    SetASIFMode                                          0xff109510 -> 0xff109510 [0x000] [!!!]
    SetNextASIFADCBuffer                                 0xff1096f0 -> 0xff1096f0 [0x000] [!!!]
    SetNextASIFDACBuffer                                 0xff1097a4 -> 0xff1097a4 [0x000] [!!!]
    sounddev_task                                        0xff10b228 -> 0xff10b228 [0x000] [!!!]
    SoundDevActiveIn                                     0xff10b714 -> 0xff10b714 [0x000] [!!!]
    sounddev_active_in                                   0xff10b714 -> 0xff10b714 [0x000] [!!!]
    SoundDevShutDownIn                                   0xff10b930 -> 0xff10b930 [0x000] [!!!]
    SetAudioVolumeIn                                     0xff10c5dc -> 0xff10c5dc [0x000] [!!!]
    prop_register_slave                                  0xff11f260 -> 0xff11f260 [0x000] [!!!]
    _prop_request_change                                 0xff11f454 -> 0xff11f454 [0x000] [!!!]
    prop_deliver                                         0xff11fa10 -> 0xff11fa10 [0x000] [!!!]
    _prop_cleanup                                        0xff11fadc -> 0xff11fadc [0x000] [!!!]
    LoadCalendarFromRTC                                  0xff1315dc -> 0xff1315dc [0x000] [!!!]
    SetAudioVolumeOut                                    0xff132564 -> 0xff132564 [0x000] [!!!]
    SetSamplingRate                                      0xff1338c4 -> 0xff1338c4 [0x000] [!!!]
    PowerMicAmp                                          0xff134078 -> 0xff134078 [0x000] [!!!]
    PowerAudioOutput                                     0xff134484 -> 0xff134484 [0x000] [!!!]
    call                                                 0xff138be8 -> 0xff138be8 [0x000] [!!!]
    AllocateMemoryResource                               0xff13c78c -> 0xff13c78c [0x000] [!!!]
    AllocateContinuousMemoryResource                     0xff13c7d8 -> 0xff13c7d8 [0x000] [!!!]
    FreeMemoryResource                                   0xff13c8f0 -> 0xff13c8f0 [0x000] [!!!]
    DispSensorStart                                      0xff146038 -> 0xff146038 [0x000] [!!!]
    SetGUIRequestMode                                    0xff1ab8e8 -> 0xff1ab8e8 [0x000] [!!!]
    GUI_SetRollingPitchingLevelStatus                    0xff1b7920 -> 0xff1b7920 [0x000] [!!!]
    gui_massive_event_loop                               0xff1c7270 -> 0xff1c7270 [0x000] [!!!]
    ptpPropSetUILock                                     0xff2a74a8 -> 0xff2a74a8 [0x000] [!!!]
    mvrSetDefQScale                                      0xff2c1790 -> 0xff2c1790 [0x000] [!!!]
    mvrFixQScale                                         0xff2c1c98 -> 0xff2c1c98 [0x000] [!!!]
    _EngDrvOut                                           0xff2c29e8 -> 0xff2c29e8 [0x000] [!!!]
    shamem_read                                          0xff2c2a84 -> 0xff2c2a84 [0x000] [!!!]
    _engio_write                                         0xff2c2d00 -> 0xff2c2d00 [0x000] [!!!]
    CreateResLockEntry                                   0xff2c6b9c -> 0xff2c6b9c [0x000] [!!!]
    LockEngineResources                                  0xff2c7064 -> 0xff2c7064 [0x000] [!!!]
    UnLockEngineResources                                0xff2c7208 -> 0xff2c7208 [0x000] [!!!]
    _audio_ic_write                                      0xff337e3c -> 0xff337e3c [0x000] [!!!]
    _audio_ic_read                                       0xff338488 -> 0xff338488 [0x000] [!!!]
    _FIO_OpenFile                                        0xff344ffc -> 0xff344ffc [0x000] [!!!]
    _FIO_CreateFile                                      0xff3450b8 -> 0xff3450b8 [0x000] [!!!]
    _FIO_RemoveFile                                      0xff345164 -> 0xff345164 [0x000] [!!!]
    FIO_ReadFile                                         0xff34520c -> 0xff34520c [0x000] [!!!]
    FIO_SeekSkipFile                                     0xff3452bc -> 0xff3452bc [0x000] [!!!]
    FIO_WriteFile                                        0xff3453ac -> 0xff3453ac [0x000] [!!!]
    FIO_CloseFile                                        0xff34545c -> 0xff34545c [0x000] [!!!]
    _FIO_GetFileSize                                     0xff3455d8 -> 0xff3455d8 [0x000] [!!!]
    _FIO_RenameFile                                      0xff345af0 -> 0xff345af0 [0x000] [!!!]
    _FIO_CreateDirectory                                 0xff345cb8 -> 0xff345cb8 [0x000] [!!!]
    _FIO_FindFirstEx                                     0xff346280 -> 0xff346280 [0x000] [!!!]
    FIO_FindNextEx                                       0xff346374 -> 0xff346374 [0x000] [!!!]
    FIO_FindClose                                        0xff346454 -> 0xff346454 [0x000] [!!!]
    ptp_register_handler                                 0xff458998 -> 0xff458998 [0x000] [!!!]
    dialog_redraw                                        0xff4b7c7c -> 0xff4b7c7c [0x000] [!!!]
    MirrorDisplay                                        0xff4d91ac -> 0xff4d91ac [0x000] [!!!]
    ReverseDisplay                                       0xff4d91dc -> 0xff4d91dc [0x000] [!!!]
    NormalDisplay                                        0xff4d920c -> 0xff4d920c [0x000] [!!!]
    ErrForCamera_handler                                 0xff5166f8 -> 0xff5166f8 [0x000] [!!!]
    CancelDateTimer                                      0xff521608 -> 0xff521608 [0x000] [!!!]
    dialog_set_property_str                              0xff5242b4 -> 0xff5242b4 [0x000] [!!!]
    HideUnaviFeedBack_maybe                              0xff529f54 -> 0xff529f54 [0x000] [!!!]
    LiveViewApp_handler                                  0xff52c454 -> 0xff52c454 [0x000] [!!!]
    LiveViewApp_handler_BL_JudgeBottomInfoDispTimerState 0xff52d378 -> 0xff52d378 [0x000] [!!!]
    LiveViewApp_handler_end                              0xff52e800 -> 0xff52e800 [0x000] [!!!]
    ShootOlcApp_handler                                  0xff5331bc -> 0xff5331bc [0x000] [!!!]
    PlayMovieGuideApp_handler                            0xff547300 -> 0xff547300 [0x000] [!!!]
    fsuDecodePartitionTable                              0xff6300b8 -> 0xff6300bc [0x004]
    GetCFnData                                           0xff675110 -> 0xff675114 [0x004]
    SetCFnData                                           0xff675328 -> 0xff67532c [0x004]
    ErrCardForLVApp_handler                              0xff695a5c -> 0xff695a60 [0x004]
    LiveViewShutterApp_handler                           0xff6e6c08 -> 0xff6e6c0c [0x004]
    PlayMain_handler                                     0xff702a3c -> 0xff702a40 [0x004]
    audio_thresholds                                     0xff7fd164 -> 0xff7fd168 [0x004]
    

    Also ran the Stubs API test from the selftest module, looks like a perfect score:

    [Pass] is_play_mode() => 0x1
    [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) => 0x4084cb04
    [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) => 0x4a104094
    [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] FIO_RemoveFile("test.dat") => 0x0
    [Pass] SetTimerAfter(0, timer_cbr, overrun_cbr, 0) => 0x15
    [Pass] timer_func => 0x2
    [Pass] SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0x28c8
           msleep(900)
    [Pass] timer_func => 0x0
           msleep(200)
    [Pass] timer_func => 0x1
    [Pass] ABS((timer_time/1000 - t0) - 1000) => 0x7
    [Pass] ABS((timer_arg - ta0) - 1000) => 0xa
    [Pass] timer = SetTimerAfter(1000, timer_cbr, overrun_cbr, 0) => 0x2914
           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) => 0x6b36
           msleep(90)
    [Pass] timer_func => 0x0
           msleep(20)
    [Pass] timer_func => 0x1
    [Pass] ABS(DeltaT(timer_time, t0) - 100000) => 0x114
    [Pass] ABS(DeltaT(timer_arg, ta0) - 100000) => 0xea
    [Pass] ABS((get_us_clock_value() - t0) - 110000) => 0xfffffecd
    [Pass] SetHPTimerAfterNow(90000, next_tick_cbr, overrun_cbr, 0) => 0x6b38
           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) => 0x92
    [Pass] ABS(DeltaT(timer_arg, ta0) - 300000) => 0xbc
    [Pass] ABS((get_us_clock_value() - t0) - 310000) => 0xfffffff5
           t0 = *(uint32_t*)0xC0242014 => 0xad8f8
           msleep(250)
           t1 = *(uint32_t*)0xC0242014 => 0xea667
    [Pass] ABS(MOD(t1-t0, 1048576)/1000 - 250) => 0x1
           LoadCalendarFromRTC( &now )
           s0 = now.tm_sec => 0xc
           Date/time: 2017/02/08 08:29:12
           msleep(1500)
           LoadCalendarFromRTC( &now )
           s1 = now.tm_sec => 0xe
    [Pass] MOD(s1-s0, 60) => 0x2
    [Pass] MOD(s1-s0, 60) => 0x2
           m0 = MALLOC_FREE_MEMORY => 0x202f8
    [Pass] p = (void*)_malloc(50*1024) => 0x11f4f0
    [Pass] CACHEABLE(p) => 0x11f4f0
           m1 = MALLOC_FREE_MEMORY => 0x13ae8
           _free(p)
           m2 = MALLOC_FREE_MEMORY => 0x202f8
    [Pass] ABS((m0-m1) - 50*1024) => 0x10
    [Pass] ABS(m0-m2) => 0x0
           m0 = GetFreeMemForAllocateMemory() => 0x337bc0
    [Pass] p = (void*)_AllocateMemory(256*1024) => 0x84cac4
    [Pass] CACHEABLE(p) => 0x84cac4
           m1 = GetFreeMemForAllocateMemory() => 0x2f7bb4
           _FreeMemory(p)
           m2 = GetFreeMemForAllocateMemory() => 0x337bc0
    [Pass] ABS((m0-m1) - 256*1024) => 0xc
    [Pass] ABS(m0-m2) => 0x0
           m01 = MALLOC_FREE_MEMORY => 0x202f8
           m02 = GetFreeMemForAllocateMemory() => 0x337bc0
    [Pass] p = (void*)_alloc_dma_memory(256*1024) => 0x4084cb04
    [Pass] UNCACHEABLE(p) => 0x4084cb04
    [Pass] CACHEABLE(p) => 0x84cb04
    [Pass] UNCACHEABLE(CACHEABLE(p)) => 0x4084cb04
           _free_dma_memory(p)
    [Pass] p = (void*)_shoot_malloc(24*1024*1024) => 0x4a104074
    [Pass] UNCACHEABLE(p) => 0x4a104074
           _shoot_free(p)
           m11 = MALLOC_FREE_MEMORY => 0x202f8
           m12 = GetFreeMemForAllocateMemory() => 0x337bc0
    [Pass] ABS(m01-m11) => 0x0
    [Pass] ABS(m02-m12) => 0x0
    [Pass] suite = shoot_malloc_suite_contig(24*1024*1024) => 0x11f4f0
    [Pass] suite->signature => 'MemSuite'
    [Pass] suite->num_chunks => 0x1
    [Pass] suite->size => 0x1800000
    [Pass] chunk = GetFirstChunkFromSuite(suite) => 0x11f518
    [Pass] chunk->signature => 'MemChunk'
    [Pass] chunk->size => 0x1800000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4a104070
    [Pass] UNCACHEABLE(p) => 0x4a104070
           shoot_free_suite(suite); suite = 0; chunk = 0;
    [Pass] suite = shoot_malloc_suite_contig(0) => 0x11f4f0
    [Pass] suite->signature => 'MemSuite'
    [Pass] suite->num_chunks => 0x1
    [Pass] suite->size => 0x1dfc000
    [Pass] chunk = GetFirstChunkFromSuite(suite) => 0x11f518
    [Pass] chunk->signature => 'MemChunk'
    [Pass] chunk->size => 0x1dfc000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x42200064
    [Pass] UNCACHEABLE(p) => 0x42200064
           shoot_free_suite(suite); suite = 0; chunk = 0;
    [Pass] suite = shoot_malloc_suite(64*1024*1024) => 0x11f4f0
    [Pass] suite->signature => 'MemSuite'
    [Pass] suite->num_chunks => 0x7
    [Pass] suite->size => 0x4000000
    [Pass] chunk = GetFirstChunkFromSuite(suite) => 0x11f518
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x18b8000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4a104070
    [Pass] UNCACHEABLE(p) => 0x4a104070
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f578
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x36b4000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x42200064
    [Pass] UNCACHEABLE(p) => 0x42200064
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f5b0
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x3ab4000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x419ff0a4
    [Pass] UNCACHEABLE(p) => 0x419ff0a4
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f5e8
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x3b8c000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x49f240e4
    [Pass] UNCACHEABLE(p) => 0x49f240e4
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f620
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x3c64000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x47f240e4
    [Pass] UNCACHEABLE(p) => 0x47f240e4
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f658
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x3d3c000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x45f240e4
    [Pass] UNCACHEABLE(p) => 0x45f240e4
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f690
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x4000000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4ddc0064
    [Pass] UNCACHEABLE(p) => 0x4ddc0064
           chunk = GetNextMemoryChunk(suite, chunk) => 0x0
    [Pass] total => 0x4000000
           shoot_free_suite(suite); suite = 0; chunk = 0;
    [Pass] suite = shoot_malloc_suite(0) => 0x11f4f0
    [Pass] suite->signature => 'MemSuite'
    [Pass] suite->num_chunks => 0x7
    [Pass] suite->size => 0x5b00000
    [Pass] chunk = GetFirstChunkFromSuite(suite) => 0x11f518
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x18b8000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4a104070
    [Pass] UNCACHEABLE(p) => 0x4a104070
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f578
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x36b4000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x42200064
    [Pass] UNCACHEABLE(p) => 0x42200064
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f5b0
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x3ab4000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x419ff0a4
    [Pass] UNCACHEABLE(p) => 0x419ff0a4
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f5e8
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x3b8c000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x49f240e4
    [Pass] UNCACHEABLE(p) => 0x49f240e4
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f620
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x3c64000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x47f240e4
    [Pass] UNCACHEABLE(p) => 0x47f240e4
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f658
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x3d3c000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x45f240e4
    [Pass] UNCACHEABLE(p) => 0x45f240e4
           chunk = GetNextMemoryChunk(suite, chunk) => 0x11f690
    [Pass] chunk->signature => 'MemChunk'
    [Pass] total += chunk->size => 0x5b00000
    [Pass] p = GetMemoryAddressOfMemoryChunk(chunk) => 0x4ddc0064
    [Pass] UNCACHEABLE(p) => 0x4ddc0064
           chunk = GetNextMemoryChunk(suite, chunk) => 0x0
    [Pass] total => 0x5b00000
           shoot_free_suite(suite); suite = 0; chunk = 0;
    [Pass] strlen("abc") => 0x3
    [Pass] strlen("qwertyuiop") => 0xa
    [Pass] strlen("") => 0x0
    [Pass] strcpy(msg, "hi there") => 0x1b3d24
    [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
    [Pass] snprintf(buf, 3, "%d", 1234) => 0x2
    [Pass] buf => '12'
    [Pass] memcpy(foo, bar, 6) => 0x1b3ce0
    [Pass] foo => 'asdfghuiop'
    [Pass] memset(bar, '*', 5) => 0x1b3cc0
    [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) => 0x6f9800c6
    [Pass] test_task_created => 0x1
    [Pass] get_task_name_from_id(get_current_task()) => 'run_test'
    [Pass] task_max => 0x68
    [Pass] task_max => 0x68
    [Pass] mq = mq ? mq : (void*)msg_queue_create("test", 5) => 0x6f9a00b0
    [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) => 0x6f9c0042
    [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) => 0x6f9e0076
    [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