Commits

a1ex  committed 51f0c51

5D Mark III: initial stubs and constants

  • Participants
  • Parent commits 8e406f4

Comments (0)

Files changed (2)

File platform/5D3.112/consts.h

+#define CARD_DRIVE "A:/"
+#define CARD_LED_ADDRESS 0xC022C06C // http://magiclantern.wikia.com/wiki/Led_addresses
+
+// thanks Indy
+#define HIJACK_INSTR_BL_CSTART  0xff0c0d7c
+#define HIJACK_INSTR_BSS_END 0xff0c1cb8
+#define HIJACK_FIXBR_BZERO32 0xff0c1c1c
+#define HIJACK_FIXBR_CREATE_ITASK 0xff0c1ca8
+#define HIJACK_INSTR_MY_ITASK 0xff0c1cc4
+#define HIJACK_TASK_ADDR 0x23E14
+
+// no idea if it's overflowing, need to check experimentally 
+//~ #define ARMLIB_OVERFLOWING_BUFFER 0x21c94 // in AJ_armlib_setup_related3
+
+// not needed for now
+//~ #define DRYOS_ASSERT_HANDLER 0x23DF4 // dec TH_assert or assert_0
+
+#define YUV422_LV_BUFFER_1 0x40D07800 
+#define YUV422_LV_BUFFER_2 0x4c233800
+#define YUV422_LV_BUFFER_3 0x4f11d800
+
+// http://magiclantern.wikia.com/wiki/VRAM_ADDR_from_code
+// stateobj_disp[1]
+//~ #define YUV422_LV_BUFFER_DMA_ADDR (*(uint32_t*)(0x246a4+something))
+
+#define YUV422_LV_BUFFER_DMA_ADDR YUV422_LV_BUFFER_1
+#define YUV422_HD_BUFFER_DMA_ADDR 0x44000080
+
+
+// http://magiclantern.wikia.com/wiki/ASM_Zedbra
+#define YUV422_HD_BUFFER_1 0x44000080
+#define YUV422_HD_BUFFER_2 0x4C000080
+#define YUV422_HD_BUFFER_3 0x50000080
+#define IS_HD_BUFFER(x)  ((0x40FFFFFF & (x)) == 0x40000080 ) // quick check if x looks like a valid HD buffer
+
+// see "focusinfo" and Wiki:Struct_Guessing
+#define FOCUS_CONFIRMATION (*(int*)0x276D0)
+
+// used for Trap Focus 
+// To find it, go to MainCtrl task and take the number from the second line minus 4.
+// See also "cam event metering"
+#define HALFSHUTTER_PRESSED (*(int*)0x23fd0)
+
+#define DISPLAY_SENSOR_POWERED 0
+
+#define GMT_IDLEHANDLER_TASK (*(int*)0x2e81c) // dec create_idleHandler_task
+
+// for gui_main_task
+#define GMT_NFUNCS 7
+#define GMT_FUNCTABLE 0xff796d4c // dec gui_main_task
+//#define GMT_IDLEHANDLER_TASK (*(int*)0x2e81c) // dec create_idleHandler_task
+
+// button codes as received by gui_main_task
+// need to print those on screen
+#define BGMT_WHEEL_UP 0
+#define BGMT_WHEEL_DOWN 1
+#define BGMT_WHEEL_LEFT 2
+#define BGMT_WHEEL_RIGHT 3
+
+#define BGMT_PRESS_SET 4
+#define BGMT_UNPRESS_SET 0x3d
+
+#define BGMT_MENU 5
+#define BGMT_INFO 6
+#define BGMT_PLAY 8
+#define BGMT_TRASH 9
+
+#define BGMT_PRESS_ZOOMIN_MAYBE 0xA
+#define BGMT_UNPRESS_ZOOMIN_MAYBE 0xB
+#define BGMT_PRESS_ZOOMOUT_MAYBE 0xC
+#define BGMT_UNPRESS_ZOOMOUT_MAYBE 0xD
+
+#define BGMT_LV 0xE
+#define BGMT_Q 0xE
+#define BGMT_Q_ALT 0xE
+
+//~ #define BGMT_FUNC 0x12
+#define BGMT_PICSTYLE 0x13
+//~ #define BGMT_JOY_CENTER (lv ? 0x1e : 0x3b)
+#define BGMT_JOY_CENTER 0x1e
+
+#define BGMT_PRESS_UP 0x16
+#define BGMT_PRESS_UP_RIGHT 0x17
+#define BGMT_PRESS_UP_LEFT 0x18
+#define BGMT_PRESS_RIGHT 0x19
+#define BGMT_PRESS_LEFT 0x1a
+#define BGMT_PRESS_DOWN_RIGHT 0x1B
+#define BGMT_PRESS_DOWN_LEFT 0x1C
+#define BGMT_PRESS_DOWN 0x1d
+
+#define BGMT_UNPRESS_UDLR 0x15
+#define BGMT_PRESS_HALFSHUTTER 0x1f
+#define BGMT_UNPRESS_HALFSHUTTER 0x20
+#define BGMT_PRESS_FULLSHUTTER 0x21
+#define BGMT_UNPRESS_FULLSHUTTER 0x22
+
+#define BGMT_FLASH_MOVIE 0
+#define BGMT_PRESS_FLASH_MOVIE 0
+#define BGMT_UNPRESS_FLASH_MOVIE 0
+#define FLASH_BTN_MOVIE_MODE 0
+#define BGMT_ISO_MOVIE 0
+#define BGMT_PRESS_ISO_MOVIE 0
+#define BGMT_UNPRESS_ISO_MOVIE 0
+
+#define GMT_OLC_INFO_CHANGED 103 // backtrace copyOlcDataToStorage call in gui_massive_event_loop
+
+#define LV_BOTTOM_BAR_DISPLAYED (((*(int*)0x29754) == 0xF))
+#define ISO_ADJUSTMENT_ACTIVE ((*(int*)0x29754) == 0xF) // dec ptpNotifyOlcInfoChanged and look for: if arg1 == 1: MEM(0x79B8) = *(arg2)
+
+// from a screenshot
+#define COLOR_FG_NONLV 1
+
+#define MVR_516_STRUCT (*(void**)0x241A0) // look in MVR_Initialize for AllocateMemory call; decompile it and see where ret_AllocateMemory is stored.
+
+#define MEM(x) (*(int*)(x))
+#define div_maybe(a,b) ((a)/(b))
+
+// see mvrGetBufferUsage, which is not really safe to call => err70
+// macros copied from arm-console
+#define MVR_BUFFER_USAGE_FRAME ABS(div_maybe(-MEM(832 + arg0) + MEM(500 + arg0), MEM(668 + arg0)))
+#define MVR_BUFFER_USAGE_SOUND div_maybe(-100*MEM(708 + arg0) + 100*MEM(696 + arg0), 0xa)
+#define MVR_BUFFER_USAGE MAX(MVR_BUFFER_USAGE_FRAME, MVR_BUFFER_USAGE_SOUND)
+
+#define MVR_FRAME_NUMBER  (*(int*)(0x1F4 + MVR_516_STRUCT)) // in mvrExpStarted
+#define MVR_BYTES_WRITTEN 0 // idk; 5D2: (*(int*)(0xE4 + MVR_516_STRUCT)) // in mvrSMEncodeDone
+
+#define MOV_RES_AND_FPS_COMBINATIONS 7
+#define MOV_OPT_NUM_PARAMS 2
+#define MOV_GOP_OPT_NUM_PARAMS 5
+#define MOV_OPT_STEP 5
+#define MOV_GOP_OPT_STEP 5
+
+#define AE_VALUE 0 // 404
+
+#define CURRENT_DIALOG_MAYBE (*(int*)0x26634) // not sure
+
+#define DLG_PLAY 1
+#define DLG_MENU 2
+
+// not sure
+//~ #define DLG_FOCUS_MODE 9
+//~ #define DLG_DRIVE_MODE 8
+//~ #define DLG_PICTURE_STYLE 4
+//~ #define DLG_Q_UNAVI 0x18
+//~ #define DLG_FLASH_AE 0x22
+//~ #define DLG_PICQ 6
+
+#define _MOVIE_MODE_NON_LIVEVIEW 0 //(!lv && !lv_paused && !get_lv_stopped_by_user() && gui_state == GUISTATE_IDLE && lv_movie_select == LVMS_ENABLE_MOVIE && lens_info.job_state == 0 && !HALFSHUTTER_PRESSED)
+#define DLG_MOVIE_ENSURE_A_LENS_IS_ATTACHED 0//  (_MOVIE_MODE_NON_LIVEVIEW && !lens_info.name[0])
+#define DLG_MOVIE_PRESS_LV_TO_RESUME 0//(_MOVIE_MODE_NON_LIVEVIEW && lens_info.name[0])
+
+
+
+#define PLAY_MODE (gui_state == GUISTATE_PLAYMENU && CURRENT_DIALOG_MAYBE == DLG_PLAY)
+#define MENU_MODE (gui_state == GUISTATE_PLAYMENU && CURRENT_DIALOG_MAYBE == DLG_MENU)
+
+//~ #define AUDIO_MONITORING_HEADPHONES_CONNECTED (!((*(int*)0xc0220070) & 1))
+//~ #define HOTPLUG_VIDEO_OUT_PROP_DELIVER_ADDR 0x1aac // this prop_deliver performs the action for Video Connect and Video Disconnect
+//~ #define HOTPLUG_VIDEO_OUT_STATUS_ADDR 0x1ad4 // passed as 2nd arg to prop_deliver; 1 = display connected, 0 = not, other values disable this event (trick)
+
+// trial and error
+// choose a gui mode which lets you:
+// * use the wheel and all other keys for menu navigation
+// * optional: send PRESS SET and UNPRESS SET events (if it doesn't, add an exception under EVENT_1)
+// * see LiveView image under menu
+// * go back safely to mode 0 (idle) without side effects (check display, Q menu, keys etc)
+// * does not interfere with recording
+//~ #define GUIMODE_ML_MENU guimode_ml_menu
+//~ #define GUIMODE_ML_MENU (recording ? 0 : lv ? 38 : 2)
+// outside LiveView, Canon menu is a good choice
+
+// position for displaying clock outside LV
+#define DISPLAY_CLOCK_POS_X 435
+#define DISPLAY_CLOCK_POS_Y 452
+
+#define MENU_DISP_ISO_POS_X 500
+#define MENU_DISP_ISO_POS_Y 27
+
+// for displaying TRAP FOCUS msg outside LV
+#define DISPLAY_TRAP_FOCUS_POS_X 500
+#define DISPLAY_TRAP_FOCUS_POS_Y 320
+#define DISPLAY_TRAP_FOCUS_MSG       "TRAP \nFOCUS"
+#define DISPLAY_TRAP_FOCUS_MSG_BLANK "     \n     "
+
+#define NUM_PICSTYLES 9
+#define PROP_PICSTYLE_SETTINGS(i) (PROP_PICSTYLE_SETTINGS_STANDARD - 1 + i)
+
+#define MOVIE_MODE_REMAP_X SHOOTMODE_ADEP
+#define MOVIE_MODE_REMAP_Y SHOOTMODE_CA
+#define MOVIE_MODE_REMAP_X_STR "A-DEP"
+#define MOVIE_MODE_REMAP_Y_STR "CA"
+
+#define FLASH_MAX_EV 3
+#define FLASH_MIN_EV -10 // not sure if it actually works
+#define FASTEST_SHUTTER_SPEED_RAW 160
+#define MAX_AE_EV 2
+
+#define DIALOG_MnCardFormatBegin (0x363BC) // ret_CreateDialogBox(...DlgMnCardFormatBegin_handler...) is stored there
+#define DIALOG_MnCardFormatExecute (0x39B98) // similar
+
+#define BULB_MIN_EXPOSURE 100
+
+// http://magiclantern.wikia.com/wiki/Fonts
+#define BFNT_CHAR_CODES    0xf7363764
+#define BFNT_BITMAP_OFFSET 0xf7366868
+#define BFNT_BITMAP_DATA   0xf736996c
+
+ #define DLG_SIGNATURE 0x414944
+
+// from CFn
+ #define AF_BTN_HALFSHUTTER 0
+ #define AF_BTN_STAR 2
+
+#define IMGPLAY_ZOOM_LEVEL_ADDR (0x2E9C4) // dec GuiImageZoomDown and look for a negative counter
+#define IMGPLAY_ZOOM_LEVEL_MAX 14
+
+#define BULB_EXPOSURE_CORRECTION 150 // min value for which bulb exif is OK [not tested]
+
+// see http://magiclantern.wikia.com/wiki/VRAM/BMP
+#define WINSYS_BMP_DIRTY_BIT_NEG MEM(0x323b0+0x38)
+
+#define BTN_ZEBRAS_FOR_PLAYBACK BGMT_PICSTYLE // what button to use for zebras in Play mode
+
+// manual exposure overrides
+#define LVAE_STRUCT 0x68BB8
+#define CONTROL_BV      (*(uint16_t*)(LVAE_STRUCT+0x20)) // EP_SetControlBv
+#define CONTROL_BV_TV   (*(uint16_t*)(LVAE_STRUCT+0x22)) // EP_SetControlParam
+#define CONTROL_BV_AV   (*(uint16_t*)(LVAE_STRUCT+0x24))
+#define CONTROL_BV_ISO  (*(uint16_t*)(LVAE_STRUCT+0x26))
+#define CONTROL_BV_ZERO (*(uint16_t*)(LVAE_STRUCT+0x28))
+#define LVAE_ISO_SPEED  (*(uint8_t* )(LVAE_STRUCT))      // offset 0x0; at 3 it changes iso very slowly
+//~ #define LVAE_ISO_MIN    (*(uint8_t* )(LVAE_STRUCT+0x28)) // string: ISOMin:%d
+//~ #define LVAE_ISO_HIS    (*(uint8_t* )(LVAE_STRUCT+0x2a)) // no idea what this is
+#define LVAE_DISP_GAIN  (*(uint16_t*)(LVAE_STRUCT+0x3c)) // lvae_setdispgain
+#define LVAE_MOV_M_CTRL (*(uint8_t* )(LVAE_STRUCT+0x1c)) // lvae_setmoviemanualcontrol
+
+#define MIN_MSLEEP 10
+
+#define INFO_BTN_NAME "INFO"
+#define Q_BTN_NAME "[Q]"
+#define ARROW_MODE_TOGGLE_KEY "PicStyle"
+
+#define DISPLAY_STATEOBJ (*(struct state_object **)0x246a4)
+#define DISPLAY_IS_ON (DISPLAY_STATEOBJ->current_state != 0)
+
+//~ #define LV_STRUCT_PTR 0x1D78
+//~ #define FRAME_ISO *(uint16_t*)(MEM(LV_STRUCT_PTR) + 0x5C)
+
+// see "Malloc Information"
+#define MALLOC_STRUCT 0x3c268
+#define MALLOC_FREE_MEMORY (MEM(MALLOC_STRUCT + 8) - MEM(MALLOC_STRUCT + 0x1C)) // "Total Size" - "Allocated Size"

File platform/5D3.112/stubs.S

+/** \file
+ * Entry points into the firmware image.
+ *
+ * These are the functions that we can call from our tasks
+ * in the Canon 1.0.9 firmware for the 550d.
+ *
+ * \todo Sort this file?  Generate it from the IDA map?
+ */
+/*
+ * Copyright (C) 2010 Magic Lantern 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.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor,
+ * Boston, MA  02110-1301, USA.
+ */
+
+.text
+
+#define NSTUB(addr,name) \
+	.global name; \
+	name = addr
+
+NSTUB( ROMBASEADDR, firmware_entry )
+
+#define RAM_OFFSET 0xFF9DEEE8 // some functions are copied to RAM at around ff0c009c; they have to be called from RAM...
+
+NSTUB(0xff9f38a0 - RAM_OFFSET, AcquireRecursiveLock) // AJ_KernelDry_KerRLock.c
+NSTUB(0xff9e8888 - RAM_OFFSET, AllocateMemory)
+NSTUB(0xff44c850, CreateDialogBox)
+NSTUB(0xFF9EB28C - RAM_OFFSET, CreateRecursiveLock)
+NSTUB(0xff44b820, DeleteDialogBox)
+NSTUB(0xFF9E4A78 - RAM_OFFSET, DryosDebugMsg)
+NSTUB(0xFF30ACF0, FIO_CleanupAfterFindNext_maybe) // proper name: FindClose
+NSTUB(0xff309cf8, FIO_CloseFile)
+NSTUB(0xff30a554, FIO_CreateDirectory)
+NSTUB(0xff309954, FIO_CreateFile)
+NSTUB(0xff30ab1c, FIO_FindFirstEx)
+NSTUB(0xff30ac10, FIO_FindNextEx)
+NSTUB(0xff309e74, FIO_GetFileSize)
+NSTUB(0xff309898, FIO_Open)
+NSTUB(0xff309aa8, FIO_ReadFile)
+NSTUB(0xff309a00, FIO_RemoveFile)
+NSTUB(0xff309c48, FIO_WriteFile)
+NSTUB(0xff9e8c24 - RAM_OFFSET, FreeMemory)
+NSTUB(0xFF0DEE48, GUI_ChangeMode)
+NSTUB(0xFF0DEC8C, GUI_Control)
+NSTUB(0xff19d7a8, GUI_GetFirmVersion)
+NSTUB(0xFF195804, GUI_SetLvMode)
+NSTUB(0xff60ccc8, GetCFnData)
+NSTUB(0xff133f50, GuiEdLedBlink)
+NSTUB(0xff3401bc, GuiEdLedOff)
+NSTUB(0xFF343300, GuiEdLedOn)
+NSTUB(0xff135de8, LoadCalendarFromRTC)
+NSTUB(0xff133020, MuteOff_0)
+NSTUB(0xff12d19c, MuteOn_0)
+NSTUB(0xFF46CFC8, RedrawDisplay)
+NSTUB(0xff9f39b4 - RAM_OFFSET, ReleaseRecursiveLock) // AJ_KernelDry_KerRLock.c_p2
+NSTUB(0xff12e110, SetBitmapVramAddress)
+//	NSTUB(0xFFB5E994, SetCFnData) // no strings
+NSTUB(0xff188c48, SetGUIRequestMode)
+NSTUB(0xff136f1c, _audio_ic_read)
+NSTUB(0xff136e64, _audio_ic_write) // str:Reg_0x_02X_Data_04x
+NSTUB(   0x468b8, additional_version)
+NSTUB(0xff9f6e84 - RAM_OFFSET, alloc_dma_memory)
+//	NSTUB(0xffcb4ae4, audio_thresholds) - not there?
+NSTUB(   0x42d7c, bmp_vram_info )                 // look in SetBitmapVramAddress - as in 60D
+NSTUB(0xFF9FB330 - RAM_OFFSET, bzero32)
+NSTUB(0xff13b64c, call)
+NSTUB(0xC0220000, camera_engine)
+NSTUB(0xFF6AB2C4, cfReadBlk)
+//	NSTUB(   0x20890, cf_device) idk...
+NSTUB(0xff0c10e0, cli_save)
+NSTUB(0xFF9E1DA0 - RAM_OFFSET, create_init_task)
+NSTUB(0xff9e7308 - RAM_OFFSET, create_named_semaphore)
+NSTUB(0xFF0C1C0C, cstart)
+//	NSTUB(0xFFA6BDD0, ctrlman_dispatch_event)         // might be good (dumps=1, score=10)
+NSTUB(0xFF44D57C, dialog_redraw)
+NSTUB(0xff352868, dialog_set_property_str)
+NSTUB(0xff2f3874, dispcheck)                      // might be good (dumps=1, score=4.3)
+NSTUB(   0x24b60, dm_names)
+NSTUB(0xff9e4de0 - RAM_OFFSET, dm_set_store_level)
+NSTUB(0xff9e49f8 - RAM_OFFSET, dmstart)
+NSTUB(0xff9e4a38 - RAM_OFFSET, dmstop)
+NSTUB(0xff9e5420 - RAM_OFFSET, dumpf)
+NSTUB(0xFF0C8144, free) // see "can't malloc"
+NSTUB(0xff9f6eb8 - RAM_OFFSET, free_dma_memory)
+NSTUB(0xff5bb268, fsuDecodePartitionTable) // AJ_fsuGetPart_related
+NSTUB(0xff9e7554 - RAM_OFFSET, give_semaphore)
+NSTUB(0xff0df2e4, gui_init_end)
+NSTUB(   0x24118, gui_main_struct)
+NSTUB(0xFF0DE8BC, gui_main_task)
+	NSTUB(0xFF8901A4, gui_massive_event_loop)         // no match
+NSTUB(0xff44a744, gui_task_create)
+NSTUB(0xFF44A870, gui_task_destroy)
+NSTUB(   0x32244, gui_task_list)
+NSTUB(0xff0c520c, init_task)                      // might be good (dumps=1, score=14)
+NSTUB(0xff0c80ec, malloc)
+NSTUB(0x1c364, memcpy)
+NSTUB(0x1486C, msg_queue_post)
+NSTUB(0xff9f3568 - RAM_OFFSET, msg_queue_receive)
+NSTUB(    0x8a5c, msleep)
+NSTUB(0xFF28BB9C, mvrFixQScale)
+NSTUB(0xFF0EA9B0, mvrSetBitRate)
+NSTUB(0xFF28B62C, mvrSetDeblockingFilter)
+NSTUB(0xff28b694, mvrSetDefQScale)
+NSTUB(0xFF28BBC0, mvrSetPrintMovieLog)
+NSTUB(   0x299f0, mvr_config)
+NSTUB(0xff123c88, _prop_cleanup)
+NSTUB(0xff123bbc, prop_deliver)
+NSTUB(0xff123de4, prop_get_value)
+NSTUB(0xff12340c, prop_register_slave)
+NSTUB(0xff123600, _prop_request_change) // potentially dangerous
+NSTUB(0xff19e014, prop_request_icu_auto_poweroff)
+NSTUB(0xff3f4ee0, ptp_register_handler)
+NSTUB(0xff13b5f0, register_func)
+NSTUB(0xff6b164c, sdReadBlk)
+NSTUB(   0x399D4, sd_device)
+NSTUB(0xff0c10f4, sei_restore)
+//NSTUB(    0x2360, sounddev) - no sound for now
+//NSTUB(0xff85b0e4, sounddev_task)
+//NSTUB(0xff85b454, sounddev_active_in)
+NSTUB(0xff144880, strcmp)
+NSTUB(0xff31b8f0, strcpy)
+NSTUB(0xff0c8008, strlen)
+NSTUB(0xff9e7468 - RAM_OFFSET, take_semaphore)
+NSTUB(0x8b10, task_create)
+NSTUB(   0x23E14, task_dispatch_hook )
+NSTUB(0xff9ecd10 - RAM_OFFSET, task_trampoline)
+//NSTUB(0xFFA41604, vram_get_number) // not found
+NSTUB(0xFF2F2884, vram_get_pos_and_size)
+//NSTUB(   0x57090, vram_info) // not sure, but not used
+NSTUB(0xff9f4edc - RAM_OFFSET, vsnprintf)
+NSTUB(0xFF4AFD94, LiveViewApp_handler)
+NSTUB(0xFF36724C, PlayMain_handler)
+NSTUB(0xFF4B88F4, OlcAFFrameApp_handler)
+NSTUB(0xFF49C0B0, ErrCardForLVApp_handler) // not sure
+
+NSTUB(0xff28cbfc, _engio_write)
+NSTUB(0xff28c988, shamem_read) // AJ_0x8FB0_engio_struct_n_R0_manipulation_to_get_ptr
+NSTUB(0xff28c8ec, _EngDrvOut) // AJ_EngDrvOut_1xVar_to_ShadowStruct
+
+	//NSTUB(0xff9b1be0 - RAM_OFFSET, LightMeasure_n_Callback_r0) - looks a bit different, disabling for now
+NSTUB(0xff4b68bc, ShootOlcApp_handler) // AJ_DIALOG.HANDLER_DlgShootOlcInfo.c
+
+	//NSTUB(0xff987200 - RAM_OFFSET, set_fps_maybe)
+
+	//NSTUB(0xff8168c0, get_current_task)
+
+NSTUB(0x4157c, LCD_Palette) // in InitializeBitmapDisplayDevice, right after 0xc0f14800
+
+//NSTUB(0xff34db4c, GuiSetAutoBrightness) // guess: refreshes brightness in auto mode?
+
+//NSTUB(0xFF195A3C, Gui_SetSoundRecord) danger
+
+NSTUB(0xFF9E8628 - RAM_OFFSET, GetMemoryInformation)
+NSTUB(0xFF1449FC, copy_malloc_info_maybe)
+
+NSTUB(0xff9eb0a4 - RAM_OFFSET, msg_queue_create)
+
+NSTUB(0xff1064c8, PD_RemoteRelease)