diff --git a/makefile b/makefile index 10bfbfa..dcef83c 100644 --- a/makefile +++ b/makefile @@ -10,7 +10,7 @@ NAME = CEaShell APP_NAME = CEaShell APP_VERSION = 5.0.0.0000 -CEASHELL_VERSION = 0.84.1 +CEASHELL_VERSION = 1.0 APPVAR_VERSION = 0 DESCRIPTION = "(C) 2022 RoccoLox & TIny_Hacker" COMPRESSED = NO diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..d565a60 --- /dev/null +++ b/readme.txt @@ -0,0 +1,113 @@ +Introduction +-------------------- + +CEaShell (pronounced like "Seashell") is a new shell for the TI-84 Plus CE. +It aims to provide a modern, sleek, and easy to use UI, which is understandable +by any user regardless of previous experience or calculator-related knowledge. +To get help, suggest a feature, or report a bug, join the discord! + +Features +-------------------- + +* Program and OS app running +* Custom color themes and visual preferences +* Viewing of program information +* Modifying of file properties (Archiving/Unarchiving, Hiding/Unhiding, etc.) +* Editing of TI-BASIC programs +* Creating of programs and appvars +* OS enhancements +* Program icons and descriptions in the OS programs menu +* And many more! + +Installation +-------------------- + +1. Download the latest version of CEaShell from the GitHub releases page + (https://github.com/roccoloxprograms/CEaShell/releases/latest). +2. Send APPINST.8xp, AppInstA.8xv and AppInstB.8xv to your calculator using TI-Connect CE + or TiLP. +3. Run prgmAPPINST from the programs menu. You will need to use the arTIfiCE jailbreak + (https://yvantt.github.io/arTIfiCE) if you are on an OS version 5.5 and above. +4. CEaShell will be installed in the apps menu. + +Uninstalling +-------------------- + +1. Open the memory management menu by pressing [2nd], [+], [2]. +2. Scroll down until you find an option "Apps". +3. Press [enter] and then find CEaShell. +4. Press [del] and then press [2]. +5. Exit the memory management menu by pressing [clear]. + +Navigation +-------------------- + +Below is a table with keys and their various usage in CEaShell: + ++---------------------------------------+--------------------------------------------------------+ +| Key | Action performed | ++---------------------------------------+--------------------------------------------------------+ +| [2nd] / [enter] | Run programs, toggle/select items in menus. | +| [↑], [↓], [←], [→] | Scroll through options or menus. | +| [y=] | Open/exit customization menu. | +| [graph] | Open/exit settings menu. | +| [alpha] / [window] / [zoom] / [trace] | View and modify file properites. | +| [del] | Delete currently selected file. | +| [mode] | Create a new file or copy the currently selected one. | +| [clear] | Exit CEaShell. | +| [a] - [z] | Jump to the program beginning with the letter pressed. | +| [on] | Turn off the calculator while remaining in the shell. | ++---------------------------------------+--------------------------------------------------------+ + +Shortcuts +-------------------- + +If the option "[on] key shortcuts" is enabled in CEaShell, the follow key combinations +will preform specific utilities in the OS: + ++-----------------+-----------------------------------------------------------------+ +| Key combination | Action performed | ++-----------------+-----------------------------------------------------------------+ +| [on] + [prgm] | Launch CEaShell. | +| [on] + [sto →] | Invert OS colors ("Dark mode"). | +| [on] + [ln] | Un-invert OS colors. | +| [on] + [stat] | Turn off the calculator, and preserve where you were in the OS. | +| [on] + [graph] | Jump to a program label in the OS program editor. | ++-----------------+-----------------------------------------------------------------+ + +Building CEaShell +-------------------- + +Make sure you have installed the linker relocations branch of the +CE C Toolchain (https://github.com/ce-programming/toolchain). +CEaShell will not be able to compile using the main version. +You will also need to use the latest version of convimg (https://github.com/mateoconlechuga/convimg). + +1. Clone CEaShell with the app_tools submodule by running + `git clone --recurse-submodules https://github.com/RoccoLoxPrograms/CEaShell` +2. If you are using an OS that uses python3 insead of python, open "app_tools/makefile" + and change `PYTHON_VER := python` to `PYTHON_VER := python3`. +3. `cd` into the cloned repository, and run `make gfx`. +4. Once complete, run `make`. The compiled binaries will be in the newly created "bin" directory. + + +Bugs +-------------------- + +If you encounter a bug while using CEaShell, don't hesitate to make an issue or report it on the +Discord server (https://discord.gg/RDTtu258fW). Feel free to request features or ask for help +on the discord or in the Cemetech topic (https://ceme.tech/t18820) as well! + +Translation +-------------------- + +Currently, there is a French translation of CEaShell which is translated by Shadow (https://github.com/Bryankaveen). +You can find it here: https://github.com/RoccoLoxPrograms/CEaShell/tree/french-translation + +Credits +-------------------- + +A more detailed credits can be found in CEaShell. app_tools is created by commandblockguy (https://github.com/commandblockguy/), +and some of the assembly was written by MateoConLechuga (https://github.com/mateoconlechuga/). + +© 2022 RoccoLox Programs and TIny_Hacker diff --git a/src/asm/runProgram.asm b/src/asm/runProgram.asm index 848e4db..40fef37 100644 --- a/src/asm/runProgram.asm +++ b/src/asm/runProgram.asm @@ -53,6 +53,7 @@ returnIsAsm := backupPrgmName + 9 returnEditLocked := returnIsAsm + 1 returnCEaShell := returnEditLocked + 1 lockStatus := ti.pixelShadow2 + 3 +quitOrOff := lockStatus + 1 sysHookFlg := 52 appInpPrmptInit := 0 @@ -80,10 +81,12 @@ _runProgram: ld de, ti.OP1 + 1 ld bc, 8 ldir ; move name to OP1 - ld hl,execute_hook - call ti.SetHomescreenHook _continueRun: + ld a, $bb + ld (quitOrOff), a + ld hl,execute_hook + call ti.SetHomescreenHook call _isGetCSCHookInstalled cp a, 1 call z, ti.ClrGetKeyHook @@ -354,12 +357,12 @@ _basicProgram: jp ti.ParseInp _return: - call _reinstallGetCSCHook call ti.PopErrorHandler xor a, a .error: push af + call _reinstallGetCSCHook res ti.progExecuting, (iy + ti.newDispF) res ti.cmdExec, (iy + ti.cmdFlags) res ti.allowProgTokens, (iy + ti.newDispF) @@ -389,6 +392,9 @@ _return: jp z, _reloadApp .quitNoApp: + ld a, (quitOrOff) + cp a, $bb + jp nz, ti.JForceCmdNoChar call _removeStopHook res ti.onInterrupt, (iy + ti.onFlags) call ti.ClrTxtShd @@ -526,6 +532,8 @@ execute_vectors: ld (ti.currLastEntry),a bit appInpPrmptInit,(iy + ti.apiFlg2) jr nz,.aipi + bit ti.monAbandon, (iy + ti.monFlags) + jr nz, .reloadHooks call ti.ClrHomescreenHook call ti.ForceFullScreen .aipi: @@ -533,6 +541,12 @@ execute_vectors: call ti.PutAway ld b,0 ret +.reloadHooks: + call ti.DeleteTempPrograms + call ti.CleanAll + call _reinstallGetCSCHook + call _reinstallHomescreenHook + jr .aipi _showError: xor a, a @@ -705,33 +719,18 @@ execute_hook: db $83 cp a,3 ret nz + call ti.ReleaseBuffer ld iy, ti.flags call _reinstallGetCSCHook - call ti.ClrHomescreenHook - ld hl, appVarName ; restore other homescreen hook if need be - call ti.Mov9ToOP1 - call ti.ChkFindSym - jr c, .continue - call ti.ChkInRam - jr z, .inRam - ld hl, 10 - add hl, de - ld a, c - ld bc, 0 - ld c, a - add hl, bc - ex de, hl - -.inRam: - ld hl, 10 - add hl, de - ld a, 1 - cp a, (hl) - call z, _installHomescreenHook + call _reinstallHomescreenHook .continue: + bit ti.monAbandon, (iy + ti.monFlags) + jr nz, .turningOff bit appInpPrmptDone,(iy + ti.apiFlg2) res appInpPrmptDone,(iy + ti.apiFlg2) + ld a, 0 + ld (quitOrOff), a jp z, _return.quit call ti.ReloadAppEntryVecs ld hl,execute_vectors @@ -741,6 +740,11 @@ execute_hook: ld (ti.cxCurApp),a ret +.turningOff: + bit appInpPrmptDone,(iy + ti.apiFlg2) + res appInpPrmptDone,(iy + ti.apiFlg2) + jp z, _return.quit + _removeExecuteHookInstalled: ld iy, ti.flags bit ti.homescreenHookActive, (iy + ti.hookflags2) ; check if a menu hook is installed @@ -776,6 +780,30 @@ _reinstallGetCSCHook: call _installGetCSCHookCont ret +_reinstallHomescreenHook: + call ti.ClrHomescreenHook + ld hl, appVarName ; restore other homescreen hook if need be + call ti.Mov9ToOP1 + call ti.ChkFindSym + ret c + call ti.ChkInRam + jr z, .inRam + ld hl, 10 + add hl, de + ld a, c + ld bc, 0 + ld c, a + add hl, bc + ex de, hl + +.inRam: + ld hl, 10 + add hl, de + ld a, 1 + cp a, (hl) + call z, _installHomescreenHook + ret + _lcdNormal: ld hl, ti.vRam ld bc, ((ti.lcdWidth * ti.lcdHeight) * 2) + 0 diff --git a/src/main.c b/src/main.c index a17f727..d9d8bae 100644 --- a/src/main.c +++ b/src/main.c @@ -5,8 +5,8 @@ * By RoccoLox Programs and TIny_Hacker * Copyright 2022 * License: GPL-3.0 - * Last Build: December 26, 2022 - * Version: 0.84.1 + * Last Build: December 27, 2022 + * Version: 1.0 * * -------------------------------------- **/