Me, gao_atc and juuso have made a patch on the Time zone choice, for several models of TV if there is a desire of an insertion it is possible to take from juuso. Big thanx moras86 for great timezone images

Download!














The patch description:
After analyzing of T-CHL7DEUC 2004.1 firmware (exeDSP binary) the following has been found. The Time zones changing mechanism is already added to firmware initially, but it has been implemented for only two countries: Spain and Australia.
An operation principle is the following: Function TCCountrySpecBase is the designer of the country. Inside the structure is filled by default value, in this case we have interesting elements 0?40 and 0?48-0?64 . The initiating index, stored in menu TimeZone is in 0?40.
0?48-0?64 store values in minutes for each index of TimeZone.
SpoilerShow
Code: Select all
00000040 defaultTimeZoneRegion DCD ?
00000044 defaultTimezone DCD ?                   ; GMT value in minutes (60,120,180...)
00000048 field_48        DCD ?
0000004C field_4C        DCD ?
00000050 field_50        DCD ?
00000054 field_54        DCD ?
00000058 field_58        DCD ?
0000005C field_5C        DCD ?
00000060 field_60        DCD ?
00000064 field_64        DCD ?
Then were functions of read and write TimeZone found:
CTvInfo:: GetTimeZone
CTvInfo:: SetTimeZone
Only edit of function CTvInfo:: GetTimeZone is needed to get working patch.
SpoilerShow
Code: Select all
LDR R3, = _ZN8TCTvInfo10m_pManagerE; TCTvInfo:: m_pManager
MOV R1, R5; the pointer on an index
MOV R2, R6; the pointer for the period of GMT
LDR R4, [R3]
MOV R3, R7
MOV R0, R4
LDR R12, [R4]
MOV LR, PC
LDR PC, [R12, #0x94]; reading of values
B Patch_Time_zone
SpoilerShow
Code: Select all
GMT = zone number * 60min i.e. 
GMT0 = 0 * 60 = 0
GMT1 = 1*60 = 60
GMT2 = 2*60 = 120 etc. 
Patch_Time_zone 
If (ItemZone <= 0x11) ItemZone = 0x11
 else GMT = (ItemZone ? 0x12) *60
LDR R0, [R5]
CMP R0, #0x11
SUBHI R0, R0, #0x12
RSBHI R0, R0, R0, LSL#4
MOVHI R0, R0, LSL#2
STRHI R0, [R6]
MOVLS R0, #0x11
STRLS R0, [R5]
SpoilerShow
Code: Select all
STMFD SP!, {R4, R5, LR}
MOV R5, #0xF; 15th records
MOV R4, R0
STR R5, [R0, #0x1C]
SUB SP, SP, #4
MOV R0, #0x3C; 60 byte to select
BL _Znaj; operator new [] (uint)
MOV R3, #0x11; initiating value
STR R0, [R4, #0x20]
SpoilerShow
Code: Select all
CClockActionWindowTimeZoneItem::AddMenuItemFlag(void)const
BL      _ZN4TCTv10GetCountryEPi ; TCTv::GetCountry(int *)
LDR     R0, [SP,#0x10+var_C]
CMP     R0, #0x21
CMPNE   R0, #0
B       loc_11849D0  ;patch
CClockActionWindowTimeZoneItem::EnableMenuItemFlag(void)const
BL      _ZN4TCTv10GetCountryEPi ; TCTv::GetCountry(int *)
LDR     R3, [SP,#0x10+var_C]
CMP     R3, #0x21
CMPNE   R3, #0
MOVNE   R0, #0
MOVEQ   R0, #1
B       loc_1184A24 ;patch
SpoilerShow
Code: Select all
CClockActionWindowBase::t_CreateTimeZone(void)
BL      _ZN4TCTv10GetCountryEPi ; TCTv::GetCountry(int *)
LDR     R3, [SP,#0x18+var_14]
CMP     R3, #0x16
B       loc_1154054  ;patch
LDR     R0, =0x3028     ; size
BL      _Znwj           ; operator new(uint)
MOV     R4, R0
BL   _ZN23CTimeZoneActionWindowSPC1Ev ; CTimeZoneActionWindowSP::CTimeZoneActionWindowSP(void)
loc_1154044                             ; CODE XREF: CClockActionWindowBase::t_CreateTimeZone(void)+5Cj
MOV     R3, #0x2800
STR     R4, [R5,R3]
ADD     SP, SP, #0xC
LDMFD   SP!, {R4,R5,PC}
loc_1154054                             ; CODE XREF: CClockActionWindowBase::t_CreateTimeZone(void)+28j
LDR     R0, =0x3028     ; size
BL      _Znwj           ; operator new(uint)
MOV     R4, R0
BL      _ZN23CTimeZoneActionWindowAUC1Ev ; CTimeZoneActionWindowAU::CTimeZoneActionWindowAU(void)
B       loc_1154044
SpoilerShow
Code: Select all
CTimeZoneActionWindowAU:: t_ChangeAppIndex (int)
CTimeZoneActionWindowAU:: t_SetTimeZoneValue (int)
CTimeZoneActionWindowAU:: t_ChangeMap (int)Further ideas:
To have separate Content library game for GMT selection there are two variants:
1. Select a zone from the list just after start of game, save the selected zone to a file, change function GetTimeZoneto read values from file. But this way can be slow since function GetTimeZone is often used by other functions and reading from NAND is quite slow.
2. The same as previous but for saving selected zone use function SetTimeZone.
3. Loader who makes whole patching process like it was done to get permanent patch of GMT time zone.
 This forum is NOT FOR USER questions or problems but DEVELOPER.
This forum is NOT FOR USER questions or problems but DEVELOPER.


 wxHexEditor
wxHexEditor DivFix++ AVI Fix
DivFix++ AVI Fix Meteorite MKV Repair
Meteorite MKV Repair