Register

G1L Format

Discuss issues related to Calculator Hacking/Modding.
Senior Member
User avatar
Posts: 101
Joined: Sun Mar 27, 2016 10:24 am
Location: France
Calculators: Casio Afx 1.0, Casio fx-9860GII, Casio fx-CG50

G1L Format

Postby cakeisalie5 » Thu Dec 01, 2016 6:07 pm

Hi,

I found some (small) documentation on the G3L I could use to read it, but almost nothing on G1L. There is indeed fx_legacy_messages.htm, but nothing else that I could find. I'm crap at reverse engineering, so I was wondering if you heard of any work on it I could use.

Thanks in advance ! :)
Part of the Planète Casio community (FR) - main author of Cahute

Senior Member
User avatar
Posts: 605
Joined: Sat Sep 15, 2012 6:59 am
Location: Krautland ****
Calculators: Casio fx-7400GII, Casio fx-7400GII (SH4), Casio fx-9750GII, Casio fx-9750GII (SH4), Casio fx-9860G, Casio fx-9860G SD, Casio fx-9860G Slim, Casio fx-9860GII SD, Casio fx-9860GII SD Power Graphic 2, Casio Classpad 330 plus, Casio fx-CG20, Casio fx-CG50, Casio Classpad fx-CP400

Re: G1L Format

Postby SimonLothar » Sun Dec 11, 2016 6:02 pm

This is the asm source of some experimental G1L file, which I just checked. It identifies itself in the SYSTEM/Language menu as "MyLanguage".
It is just done from scratch and neither documented nor optmized. I'll try to post a better documented one as fast as possible.
But it works on a fx 9860GII-2 with OS 2.09.
ASM-source: Show
Code: Select all
MSG_COUNT:         .DEFINE "729"

   .MACRO MX
   .list noexp
   .AIF \&Lauf LT 10
   .list exp
   .DATA.W msg000\&Lauf - StartOfMessageTable
   .list noexp
   .AELIF \&Lauf LT 100
   .list exp
   .DATA.W msg00\&Lauf - StartOfMessageTable
   .list noexp
   .AELSE
   .list exp
   .DATA.W msg0\&Lauf - StartOfMessageTable
   .list noexp
   .AENDI
   .list exp
   .ENDM
   
   .MACRO MY MyText
   .list exp
msg0\&Lauf:   .sdataz "\MyText'"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MYa MyText
   .list exp
msg00\&Lauf:   .sdataz "\MyText'"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MYb MyText
   .list exp
msg000\&Lauf:   .sdataz "\MyText'"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY4 MyText
   .list exp
msg0\&Lauf:   .sdataz <h'E6><h'56><h'E5><h'C2>"\MyText'"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY5
   .list exp
msg0\&Lauf:   .sdataz  "["<h'E6><h'9A>"]Key ["<h'E6><h'9B>"]Key"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY2 MyText
   .list exp
msg0\&Lauf:   .sdataz <h'F9><h'C9><h'F9><h'C9>"\MyText'"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY2a MyText
   .list exp
msg00\&Lauf:   .sdataz <h'F9><h'C9><h'F9><h'C9>"\MyText'"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY2b MyText
   .list exp
msg000\&Lauf:   .sdataz <h'F9><h'C9><h'F9><h'C9>"\MyText'"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY10 MyText
   .list exp
msg0\&Lauf:   .sdataz <h'F9><h'C9><h'F9><h'C9><h'F9><h'C9><h'F9><h'C9><h'F9><h'C9><h'F9><h'C9><h'F9><h'C9><h'F9><h'C9><h'F9><h'C9><h'F9><h'C9><h'F9><h'C9><h'F9><h'C9>"\MyText'"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY3 MyText
   .list exp
msg0\&Lauf:   .sdataz <h'F9><h'C9><h'F9><h'C9><h'F9><h'C9>"\MyText'"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY6
   .list exp
msg0\&Lauf:   .sdataz "F1:Stop&Go "<h'E6><h'D7><h'E6><h'9F>
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY7
   .list exp
msg0\&Lauf:   .sdataz "F3:Normal "<h'E6><h'9F>
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY8
   .list exp
msg0\&Lauf:   .sdataz "F4:Fast "<h'E5><h'A4>
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM
   
   .MACRO MY9
   .list exp
msg0\&Lauf:   .sdataz "F6:"<h'E6><h'91>"Page 1"
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .ENDM

   .SECTION D,DATA,ALIGN=4
Header:      .DATA.B   h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00
         .DATA.B   h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00,h'00
Name:      .SDATAZ "Simon"         
         .ORG h'28
         .DATA.B   h'01,h'00
Low_index   .DATA.W 0
High_index   .DATA.W MSG_COUNT

Lauf .ASSIGNA 0
         .AREPEAT MSG_COUNT+1
   .list noexp
         MX
   .list noexp
Lauf .ASSIGNA \&Lauf+1
   .list exp
         .AENDR

StartOfMessageTable

   .list noexp
Lauf   .ASSIGNA 0
   MYb "MyLanguage"

   MY2b "Press:[EXIT]  "
   MY2b "Yes:[F1]      "
   MY2b "No :[F6]      "
   MY2b "Store In         "
   MY2b "Recall From"
   MY2b "Select"
   MY2b "Delete Formula?"
   MY2b ""
   MY2b "Press [MENU] KEY"

   MY2a " Draw:[EXE]"
   MYa "Execute"

   MY2a " V-Win Memory"
   MY2a ""
   MY2a " Graph Memory"
   MY2a ""
   MY2a " Dynamic Memory"
   MY2a ""
   MY2a " Picture Memory"
   MY2a ""
   MY2a " Function Memory"
   MY2a ""
   MY2a " List Memory "

   MYa ""
   MYa ""
   MYa ""
   MYa ""
   MYa ""
   MYa ""
   MYa ""
   MYa ""

   MY2a ""
   MY2a "RESET (CLEAR)"
   MY2a " MAIN MEMORIES?"
   MY2a ""
   MY2a "MAIN MEMORIES"
   MY2a " CLEARED!"
   MY2a ""
   MY2a ""
   MY2a "RESET (CLEAR)"
   MY2a "STORAGE MEMORIES?"
   MY2a ""
   MY2a ""
   MY2a " INITIALIZE?"
   MY2a ""
   MY2a ""
   MY2a " Low"
   MY2a " Main Batteries!"
   MY2a ""
   MY2a " Please Replace"
   MY2a ""
   MY2a " Low"
   MY2a " Backup Battery!"
   MY2a ""
   MY2a " Please Replace"
   MY2a ""
   MY2a " Break"
   MY2a ""
   MY2a "Terminate"
   MY2a " Application?"

   MYa ""
   MYa ""
   MYa ""
   MYa ""
   MYa ""
   MYa ""

   MY2a ""
   MY2a " Condition ERROR"
   MY2a ""
   MY2a ""
   MY2a " Time Out"
   MY2a ""
   MY2a ""
   MY2a " System ERROR"
   MY2a ""
   MY2a ""
   MY2a " Memory ERROR"
   MY2a ""
   MY2a ""
   MY2a " Syntax ERROR"
   MY2a ""
   MY2a ""
   MY2a " Ma ERROR"
   MY2a ""
   MY2a ""
   MY2a " Go ERROR"
   MY2a ""
   MY2a ""
   MY2a " Nesting ERROR"
   MY2a ""
   MY2a ""
   MY2a " Stack ERROR"
   MY2a ""
   MY2a ""
   MY2a " Argument ERROR"
   MY2a ""
   MY2a ""
   MY2a " Dimension ERROR"
   MY2a ""
   MY2a ""

   MY2 " Com ERROR"
   MY2 ""
   MY2 ""
   MY2 " Transmit ERROR"
   MY2 ""
   MY2 ""
   MY2 " Receive ERROR"
   MY2 ""
   MY2 ""
   MY2 " Memory Full"
   MY2 ""
   MY2 ""
   MY2 " Undefined"
   MY2 ""
   MY2 ""
   MY2 " Overflow ERROR"
   MY2 ""
   MY2 ""
   MY2 " Domain ERROR"
   MY2 ""
   MY2 ""
   MY2 " Non-Real ERROR"
   MY2 ""
   MY2 ""
   MY2 " No Solution"
   MY2 ""
   MY2 ""
   MY2 " Mismatch"
   MY2 ""
   MY2 ""
   MY2 " No Variable"
   MY2 ""
   MY2 ""
   MY2 " Not Found"
   MY2 ""
   MY2 ""
   MY2 "Application ERROR"
   MY2 ""
   MY2 ""
   MY2 " Already Exists"
   MY2 ""
   MY2 " Complex Number"
   MY2 " In List"
   MY2 ""
   MY2 " Complex Number"
   MY2 " In Matrix"
   MY2 ""
   MY2 "Can't Solve!"
   MY2 "Adjust initial"
   MY2 " value or bounds."
   MY2 "Then try again."
   MY2 ""
   MY2 " Range ERROR"
   MY2 ""
   MY2 " TRUE"
   MY2 " FALSE"
   MY2 "THERE IS ANOTHER"
   MY2 " EXPRESSION"
   MY2 " NOT COMPLETE"
   MY2 "ANOTHER ANSWER"
   MY2 " IS EXIST"
   MY2 " CAN NOT JUDGE"
   MY "Matrix"
   MY "Row Operation"
   MY2 "Delete Matrix?"
   MY2 ""
   MY2 "Delete"
   MY2 " All Matrices?"
   MY2 ""
   MY2 "Dimension m\xA9n"
   MY2 ""
   MY "Dynamic!Func"
   MY "Too Many Functions"
   MY "Dynamic Var"
   MY "Dynamic Setting"
   MY "Speed Control"
   MY "Dynamic Speed"
   MY2 ""
   MY2 "One Moment Please"
   MY "Equation"
   MY "Select Type"
   MY2 "Simultaneous"
   MY3 "Polynomial"
   MY3 "Solver"
   MY "Simultaneous"
   MY "No Data In Memory"
   MY ""
   MY "Data Exists In Memory"
   MY ""
   MY "Unknowns"
   MY ""
   MY "Number Of Unknowns?"
   MY "Polynomial"
   MY "Degree"
   MY ""
   MY "Degree?"
   MY2 "Unknowns[7~30]?"
   MY2 ""
   MY2 "Degree[4~30]?"
   MY2 ""
   MY2 "Delete"
   MY2 " Coefficients?"
   MY2 ""
   MY2 "Sort Lists Into"
   MY2 " Descending Order"
   MY2 ""
   MY2 "How Many"
   MY2 " Lists?:"
   MY2 "Select List"
   MY2 ""
   MY2 " Base List"
   MY2 ""
   MY2 " Second List"
   MY2 ""
   MY2 " Third List"
   MY2 ""
   MY2 " Fourth List"
   MY2 ""
   MY2 " Fifth List"
   MY2 ""
   MY2 " Sixth List"
   MY2 ""
   MY2 "Delete List?"
   MY2 ""
   MY "1-Variable"
   MY "2-Variable"
   MY "Mode"
   MY "LinearReg"
   MY "Med-Med"
   MY "QuadReg"
   MY "CubicReg"
   MY "QuartReg"
   MY "LogReg"
   MY "ExpReg"
   MY "PowerReg"
   MY "SinReg"
   MY "LogisticReg"
   MY "Graph Func"
   MY2 "Histogram Setting"
   MY2 ""
   MY "Program List"
   MY "No Programs"
   MY "Program Name"
   MY "Password?"
   MY "Search For Program"
   MY "Rename"
   MY "Search For Text"
   MY ""
   MY2 "Delete Program?"
   MY2 ""
   MY2 "Delete"
   MY2 " All Programs?"
   MY "1-Sample ZTest"
   MY "2-Sample ZTest"
   MY "1-Prop ZTest"
   MY "2-Prop ZTest"
   MY "1-Sample tTest"
   MY "2-Sample tTest"
   MY "LinearReg tTest"
   MY4 " Test"
   MY "2-Sample FTest"
   MY "ANOVA"
   MY "1-Sample ZInterval"
   MY "2-Sample ZInterval"
   MY "1-Prop ZInterval"
   MY "2-Prop ZInterval"
   MY "1-Sample tInterval"
   MY "2-Sample tInterval"
   MY "Normal P.D"
   MY "Normal C.D"
   MY "Inverse Normal"
   MY "Student-t P.D"
   MY "Student-t C.D"
   MY4 " P.D"
   MY4 " C.D"
   MY "F P.D"
   MY "F C.D"
   MY "Binomial P.D"
   MY "Binomial C.D"
   MY "Poisson P.D"
   MY "Poisson C.D"
   MY "Geometric P.D"
   MY "Geometric C.D"
   MY "Select Equation"
   MY "Financial(1/2)"
   MY "Financial(2/2)"
   MY3 "Simple Interest"
   MY3 "Compound Interest"
   MY3 "Cash Flow"
   MY3 "Amortization"
   MY3 "Conversion"
   MY3 "Next Page"
   MY3 "Cost/Sel/Margin"
   MY3 "Days Calculation"
   MY "Simple Interest"
   MY "Compound Interest"
   MY "Cash Flow"
   MY "Amortization"
   MY "Conversion"
   MY "Cost/Sel/Margin"
   MY "Days Calculation"
   MY "Graph Func"
   MY ""
   MY "Graph to Table"
   MY "Recursion"
   MY "Table Setting"
   MY "Select Formula Data"
   MY "Select Form/Remain"
   MY2 "Delete Table?"
   MY2 ""
   MY "System Manager"
   MY ""
   MY "F1:Contrast"
   MY "F2:Auto Power Off"
   MY "F3:Language"
   MY "F4:Version"
   MY "F5:Reset"
   MY "File Name"
   MY2 "Delete Data?"
   MY2 ""
   MY2 " Capture Memory"
   MY2 ""
   MY2 "Delete"
   MY2 " Graph Memory"
   MY2 "Delete"
   MY2 " V-Win Memory"
   MY2 "Delete"
   MY2 " Picture Memory"
   MY "Version"
   MY "Folder Name"
   MY "Contrast"
   MY5
   MY "Light Dark"
   MY "Auto Power Off"
   MY "***** RESET *****"
   MY "F1:Setup Data"
   MY "F2:Main Memories"
   MY "F3:Add-In"
   MY "F4:Storage Memories"
   MY "Bytes Free"
   MY2 " Setup Data"
   MY2 " Main Memories"
   MY ""
   MY2 " Add-In"
   MY2 " Storage Memories"
   MY2 " Initialize All"
   MY2 " SD Card"
   MY "KBytes Free"
   MY2 ""
   MY2 ""
   MY2 ""
   MY2 ""
   MY "Message Language"
   MY2 ""
   MY2 " English Mode"
   MY2 ""
   MY "Communication"
   MY "Tutorial Is Enabled"
   MY "Tutorial Is Disabled"
   MY "F1:Transmit"
   MY "F2:Receive"
   MY "Data Select"
   MY2 " Transmit OK?"
   MY2 ""
   MY ""
   MY "Transmitting..."
   MY ""
   MY "Cancel:[AC]"
   MY "Cancel Is Disabled"
   MY "Remainder :"
   MY2 ""
   MY2 " Complete!"
   MY2 ""
   MY2 ""
   MY2 " Terminated!"
   MY2 ""
   MY "Overwrite Check"
   MY "Already Exists"
   MY "Overwrite OK?"
   MY "F1 :Yes"
   MY "F6 :No"
   MY "AC :Cancel"
   MY "Password Check"
   MY "Program Name"
   MY "Password?"
   MY2 " Backup OK?"
   MY2 ""
   MY2 " Duplicate OK?"
   MY2 ""
   MY ""
   MY "Receiving..."
   MY2 "Disable Tutorial?"
   MY2 ""
   MY ""
   MY2 ""
   MY2 " Model Mismatch"
   MY2 ""
   MY "Uploading..."
   MY2 ""
   MY2 " Download ERROR"
   MY2 ""
   MY "Downloading..."
   MY "Retry Download"
   MY2 ""
   MY2 " Remove ERROR"
   MY2 ""
   MY "Duplicating..."
   MY "Retry Duplication"
   MY2 ""
   MY2 " Duplicate ERROR"
   MY2 ""
   MY2 " Retry :[EXE]"
   MY2 " Reset :[EXIT]"
   MY "Setting"
   MY2 "Delete"
   MY2 " All Equations?"
   MY "Tutorial"
   MY "Linear Equation"
   MY "Linear Inequality"
   MY "Quadratic Equation"
   MY "Simul Equation"
   MY "Select Sample"
   MY "TRUE"
   MY "FALSE"
   MY2 ""
   MY2 " Invalid Card"
   MY2 ""
   MY2 "Sort Lists Into"
   MY2 " Ascending Order"
   MY2 ""
   MY2 "How Many"
   MY2 " Lists?:"
   MY "View Window"
   MY "View Window :Left"
   MY "View Window :Right"
   MY "== Function Memory =="
   MY2 "Factor"
   MY2 "Select Number"
   MY2 ""
   MY2 "Select List No."
   MY2 ""
   MY2 "Select File No."
   MY2 ""
   MY2 "Enter X-Value"
   MY2 ""
   MY2 "Enter \xE6G-Value"
   MY2 ""
   MY2 "Enter T-Value"
   MY2 ""
   MY2 "Enter Y-Value"
   MY2 ""
   MY2 "Enter Lower Bound"
   MY2 ""
   MY2 "Enter Upper Bound"
   MY2 ""
   MY2 "Enter r-Value"
   MY2 ""
   MY "Table+Graph"
   MY "Graph+Graph"
   MY2 ""
   MY2 "Card is protected"
   MY2 ""
   MY2 "Delete All The"
   MY2 " Selected Data?"
   MY2 "Storage/SD memory"
   MY2 "is nearly full."
   MY2 "You may be unable"
   MY2 "to save edits."
   MY ""
   MY ""
   MY2 ""
   MY2 ""
   MY2 " CLEARING..."
   MY2 ""
   MY2 "One Moment Please"
   MY2 ""
   MY2 "MAIN MENU:[MENU]"
   MY2 "SYSTEM :[ESC]"
   MY2 ""
   MY2 " Data ERROR"
   MY2 ""
   MY2 ""
   MY2 " Card ERROR"
   MY2 ""
   MY2 ""
   MY2 " No Data"
   MY2 ""
   MY ""
   MY "DATA ERROR!"
   MY ""
   MY "Read User's Guide"
   MY ""
   MY "Confirmed:[EXE]"
   MY "OFF:[ESC]"
   MY2 "RESET (CLEAR)"
   MY2 "STORAGE MEMORIES?"
   MY2 ""
   MY2 ""
   MY2 "STORAGE MEMORIES"
   MY2 " CLEARED!"
   MY "Memory Manager"
   MY "F1:Main Memory"
   MY "F4:Backup"
   MY "F5:Optimization"
   MY "Main Mem"
   MY "Storage Mem"
   MY "Backup"
   MY2 ""
   MY2 "One Moment Please"
   MY2 ""
   MY "F1:Save Backup Data"
   MY "F2:Load Backup Data"
   MY "Backup Data Exists"
   MY2 "Already Exists"
   MY2 "Overwrite OK?"
   MY2 "LINK :[ESC]"
   MY2 "Keyword?"
   MY2 " Backup Data?"
   MY6
   MY "F2:Slow >"
   MY7
   MY8
   MY2 "Delete"
   MY "(Not Used)"
   MY "(No Applications)"
   MY "F5:Add-In&Storage"
   MY "F6:Next Page"
   MY2 " Reset OK?"
   MY2 "Exiting will"
   MY2 "cancel data"
   MY2 "selection."
   MY2 " Reset!"
   MY2 "Used"
   MY "(unknown)"
   MY "eAct List"
   MY "No Files"
   MY "Storage/SD memory is"
   MY "nearly full.You may"
   MY "be unable to save"
   MY "edits."
   MY "Open this file"
   MY "anyway?"
   MY ""
   MY "eActivity Name"
   MY "Search"
   MY2 "Delete"
   MY2 " eActivity?"
   MY2 "Delete Line?"
   MY2 ""
   MY2 "An eActivity"
   MY2 "data was found."
   MY2 "Save this data?"
   MY2 ""
   MY "CablexType :"
   MY "Wakeup :"
   MY "Capture :"
   MY "Select Data Type"
   MY ""
   MY "F1:User Data"
   MY "F2:eActivity"
   MY "F3:Add-In"
   MY "F4:SD Card"
   MY ""
   MY "Select Cable Type"
   MY ""
   MY "F1:USB cable"
   MY "F2:3Pin cable"
   MY "Wakeup Enable"
   MY ""
   MY "F1:On"
   MY "F2:Off"
   MY "Capture Set Mode"
   MY ""
   MY "F1:Memory"
   MY "F2:PC"
   MY "F3:OHP"
   MY "0"
   MY "Select Add-In Type"
   MY ""
   MY "F1:Add-In App."
   MY "F2:Add-In Language"
   MY "F3:Add-In Menu"
   MY ""
   MY "Select Trans Type"
   MY ""
   MY "F1:Select"
   MY "F2:Current"
   MY "Select Trans Data"
   MY "Select Application"
   MY "Select Language"
   MY "Select Menu"
   MY ""
   MY "OS Update?"
   MY ""
   MY "Yes:[EXE]"
   MY "No :[EXIT]"
   MY2 ""
   MY2 " Please Reconnect"
   MY2 ""
   MY2 ""
   MY "Character Select"
   MY2 ""
   MY2 "No Real Roots"
   MY2 ""
   MY "Catalog"
   MY2 "Run"
   MY2 "Graph"
   MY2 "Graph Editor"
   MY2 "Table Editor"
   MY2 "Conics Graph"
   MY2 "Conics Editor"
   MY2 "Stat Graph"
   MY2 "List Editor"
   MY2 "Matrix Editor"
   MY2 "Simul Equation"
   MY2 "Poly Equation"
   MY2 "Solver"
   MY2 "Dynamic Graph"
   MY2 "Recur Editor"
   MY2 "Financial"
   MY2 "Notes"
   MY2 "SpreadSheet"
   MY2 "Geometry"
   MY2 "Memory Manager"
   MY "Spread Sheet Name"
   MY "Spread Sheet List"
   MY2 "Delete Sheet?"
   MY2 ""
   MY "No Sheets"
   MY2 "Go To"
   MY2 ""
   MY "Sequence"
   MY "Fill"
   MY2 "Delete All?"
   MY "Store In Variable Mem"
   MY "Store In List Memory"
   MY "Store In File Memory"
   MY "Store In Mat Memory"
   MY "Recall From List Mem"
   MY "Recall From File Mem"
   MY "Recall From Mat Mem"
   MY "Menu Language"
   MY "No Other Data"
   MY ""
   MY "OS"
   MY "Add-In Application"
   MY "Message"
   MY "Menu"
   MY "Product ID"
   MY "User Name"
   MY "F1:Main&Storage"
   MY "F2:Initialize All"
   MY "F3:SD Card"
   MY9
   MY2 ""
   MY2 " No Card"
   MY2 ""
   MY "F2:Storage Memory"
   MY "F3:SD Card"
   MY "SD Card"
   MY2 "Copy to"
   MY2 ""
   MY2 " Storage Mem:[1]"
   MY2 " SD Card :[2]"
   MY2 " Main Mem :[1]"
   MY2 " Storage Mem:[2]"
   MY2 ""
   MY2 " Too Many Data"
   MY2 ""
   MY2 "Fragmentation"
   MY2 " ERROR"
   MY2 " Please Optimize"
   MY "No Data"
   MY2 ""
   MY2 " Invalid Name"
   MY2 ""
   MY2 ""
   MY2 " Invalid Type"
   MY2 ""
   MY "No Card"
   MY2 "Save to"
   MY2 ""
   MY2 "Load from"
   MY2 ""
   MY2 "Optimize"
   MY2 ""
   MY2 "Input a Date"
   MY2 " ...Month"
   MY2 " ...Day"
   MY2 " ...Year"
   MY2 "Save this file?"
   MY2 ""
   MY2 " Cancel:[AC]"
   MY2 "Total Data Size"
   MY2 "Free Bytes"
   MY10 " Bytes"
   MY2 "Strip Data Size"
   MY2 ""
   MY2 " Circular ERROR"
   MY2 ""
   MY2 "Select Mat Name"
   MY2 ""
   MY "Table Func"
   MY2 "Storage Memory"
   MY2 " Full"
   MY2 ""
   MY2 ""
   MY2 "SD Card Full"
   MY2 ""
   MY2 "Insufficient"
   MY2 " Workspace"
   MY2 ""
   MY2 "Not enough memory"
   MY2 "to save Data"
   MY2 "Strip."
   MY2 ""
   MY2 "Invalid file name"
   MY2 "or folder name."
   MY2 ""
   MY2 ""
   MY2 "Data is protected"
   MY2 ""
   MY2 "Copy protection"
   MY2 " ERROR"
   MY2 ""
   MY2 ""
   MY2 " Version ERROR"
   MY2 ""
   MY2 " Format OK?"
   MY2 " Format!     "
    .list exp
   .END

corresponding HMake-file: Show
!MESSAGE
!MESSAGE Executing Hitachi ASMSH phase
!MESSAGE

PROG=Language

"$(PROG).obj" : $(PROG).asm $(PROG).hmk hm.cmd setup.obj
"ASMSH" -subcommand=<<
$(PROG).asm
-LIST=$(PROG).LST
-CPU=sh3
-endian=big
-round=zero
-denormalize=off
-debug
-literal=pool,branch,jump,return
-nologo
-chgincpath
-errorpath
<<

!MESSAGE
!MESSAGE Executing Hitachi OPTLNK phase
!MESSAGE

"$(PROG).bin" : $(PROG).OBJ
"OPTLNK" -subcommand=<<
noprelink
nomessage
list "$(PROG).map"
show symbol
nooptimize
start P,B,C,D/00000000
fsymbol P
nologo
input $(PROG).obj
input setup.obj
output "$(PROG).abs"
-nomessage=1100
end
input "$(PROG).abs"
form binary
output "$(PROG).BIN"
exit
<<

I think a G1N-file to replace the FKey-icons should be done in a similar way. I am on it.
I'll be back!

Senior Member
User avatar
Posts: 101
Joined: Sun Mar 27, 2016 10:24 am
Location: France
Calculators: Casio Afx 1.0, Casio fx-9860GII, Casio fx-CG50

Re: G1L Format

Postby cakeisalie5 » Sun Dec 11, 2016 8:35 pm

I tried to mess around with what I've understood of what you did and what I know about G3L files, and here's what I got :

0x20-0x27: identifier ("PowerUSB"/"Simon\0\0\0")
0x28-0x29: unknown (CORRECTED - see below)
0x2A-0x2B: all zeroes
0x2C-0x2D: message count
0x2E-0x2F: unknown (CORRECTED - see below)

Then we have a tab of offsets (all 16-bytes long) that indicate the offset of the message since the first string (right after the offsets tab).
Then we have the strings, null-terminated.

But there is a problem with this: the first message I manage to parse is:
Code: Select all
[libg1m info]  g1m_parse_lang: [#0] '���� �n�`�g�m�i�s�e:[EXIT]  '

(unknown characters are normal since strings are FONTCHARACTER-encoded)

where the first message I parse with Russian.g3l is:
Code: Select all
[libg1m info]  g1m_parse_lang_cg: [#0] 'Russian'


What am I missing ? x) (I'll try to mess around a little more to find out what has gone wrong)
Last edited by cakeisalie5 on Thu Dec 15, 2016 12:01 pm, edited 2 times in total.
Part of the Planète Casio community (FR) - main author of Cahute

Senior Member
User avatar
Posts: 605
Joined: Sat Sep 15, 2012 6:59 am
Location: Krautland ****
Calculators: Casio fx-7400GII, Casio fx-7400GII (SH4), Casio fx-9750GII, Casio fx-9750GII (SH4), Casio fx-9860G, Casio fx-9860G SD, Casio fx-9860G Slim, Casio fx-9860GII SD, Casio fx-9860GII SD Power Graphic 2, Casio Classpad 330 plus, Casio fx-CG20, Casio fx-CG50, Casio Classpad fx-CP400

Re: G1L Format

Postby SimonLothar » Mon Dec 12, 2016 6:15 am

cakeisalie5 wrote:0x2E-0x2F: unknown

0x2E-0x2F is the index to the first message, which is the ASCIIZ-name of the language. Both bytes must be zero.
I'll be back!

Senior Member
User avatar
Posts: 101
Joined: Sun Mar 27, 2016 10:24 am
Location: France
Calculators: Casio Afx 1.0, Casio fx-9860GII, Casio fx-CG50

Re: G1L Format

Postby cakeisalie5 » Mon Dec 12, 2016 4:12 pm

Yay, looks like my library manages to read G1L files now! Thanks :D
Part of the Planète Casio community (FR) - main author of Cahute

Senior Member
User avatar
Posts: 605
Joined: Sat Sep 15, 2012 6:59 am
Location: Krautland ****
Calculators: Casio fx-7400GII, Casio fx-7400GII (SH4), Casio fx-9750GII, Casio fx-9750GII (SH4), Casio fx-9860G, Casio fx-9860G SD, Casio fx-9860G Slim, Casio fx-9860GII SD, Casio fx-9860GII SD Power Graphic 2, Casio Classpad 330 plus, Casio fx-CG20, Casio fx-CG50, Casio Classpad fx-CP400

Re: G1L Format

Postby SimonLothar » Thu Dec 15, 2016 7:05 am

0x28-0x29 represents the OS version, f. i. 0x02 0x09 on OS 2.09.
I'll be back!

Senior Member
User avatar
Posts: 605
Joined: Sat Sep 15, 2012 6:59 am
Location: Krautland ****
Calculators: Casio fx-7400GII, Casio fx-7400GII (SH4), Casio fx-9750GII, Casio fx-9750GII (SH4), Casio fx-9860G, Casio fx-9860G SD, Casio fx-9860G Slim, Casio fx-9860GII SD, Casio fx-9860GII SD Power Graphic 2, Casio Classpad 330 plus, Casio fx-CG20, Casio fx-CG50, Casio Classpad fx-CP400

Re: G1L Format

Postby SimonLothar » Sat Dec 17, 2016 3:15 pm

Based on the information of this post https://www.cemetech.net/forum/viewtopic.php?t=12549&sid=afa4a188929817a1ebe448e1f96b7f22
I build two asm example sources for Prizm G3L-files.
One file represents a message table (byte at offset 0x24 == 4)
The other file represents a FKey-icon table (byte at offset 0x24 == 2).

Some of previously documented header variables (like the complete inverted standard header) are not necessary.

I added the files to http://casiopeia.net/forum/downloads.php?view=detail&df_id=155.
I'll be back!

Senior Member
User avatar
Posts: 101
Joined: Sun Mar 27, 2016 10:24 am
Location: France
Calculators: Casio Afx 1.0, Casio fx-9860GII, Casio fx-CG50

Re: G1L Format

Postby cakeisalie5 » Sat Dec 17, 2016 4:26 pm

Got functions to read G3L files (at least, normal language files):
https://forge.touhey.fr/lib/libg1m/tree ... rse/lang.c (l. 98)
https://forge.touhey.fr/lib/libg1m/tree ... mat/lang.h (l. 43)

But nice that there is an equivalent of the FKey files for the Prizm! I'll try to implement this ^^
Part of the Planète Casio community (FR) - main author of Cahute

Return to Calculator Hacking/Modding Discussions

Who is online

Users browsing this forum: Google [Bot] and 40 guests