Leading the way to the Future
Welcome Guest, Login!
08 Oct 2003 12:49:02 pm by anduril66
I tried the Fake Mem Reset prog by David L. Good, but can I request a customized version (for personal use), with some of the following features:
1)When you call the program, it shows the Mem reset message immediately w/o the starting menu.
2)ROM version 1.14 instead of 1.12
3)Exit with any keypress.
Many thanks.
08 Oct 2003 01:41:48 pm by NETWizz
I am already on it.

I can fix it so it says 1.14, but I cannot do much else to it without the source.
08 Oct 2003 02:53:47 pm by NETWizz
Okay,

Download this, unzip it, and send it to your calculator.


Then Asm(prgmMODIFY

What it will do is edit ZCLEAR to make it display 1.14

How it works.

It finds the location of ZCLEAR, calculates the position of 2 in 1.12, and then increases it by one.

So, if you run it once, it will return 1.13
if you run it again ZCLEAR will print 1.14
...
It shoud be good to 1.19

So, if you upgrade your calc os, just run Asm(prgmMODIFY until ZCLEAR returns the number you want.

It will not ever go to 1.20 instead, it will find the next ascii character, so if you did it enough, you could have it dispplay A which is 41h...

If ZCLEAR is not present, this program will exit causing no harm.

If you have a program called ZCLEAR that was not written by David L, it will screw up the program.

It uses write back to work.
08 Oct 2003 05:22:28 pm by Adm.Wiggin
whoa, thats awesome! Smile i think thats cool how you can do that Jbirk! maybe, since David is back (Wink), you could get the source from him Wink Smile
08 Oct 2003 05:27:46 pm by NETWizz
Here is the source, Adm.Wiggin.

It is really simple to do what I did.


Code:
#include   "ti83plus.inc"

  .org    $9d93
  .db     $BB,$6D

   ld hl,modify
   rst 20h
   bcall(_chkfindsym)
   ret c

   ld hl,$A1
   add hl,de

   ld a,(hl)
   inc a
   ld (hl),a

   ret  

modify:
.db protprogobj,"ZCLEAR",0

.end
08 Oct 2003 05:40:09 pm by Adm.Wiggin
cool... so that really just takes the $9F th byte of the program and changes it? wow...
08 Oct 2003 09:26:59 pm by NETWizz
No

It finds the program DE points to the data/size

Then it adds $A1 to the address and the byte is at the address.

Then it reads and writes to that area of ram.

ld hl,de is de+hl->hl
09 Oct 2003 04:54:38 pm by Adm.Wiggin
yes, so you add 2 to the program location, then you must add the offset for the byte you wish to change Smile
10 Oct 2003 11:03:08 am by anduril66
Is there a way to make a program hide or delete itself (without crashinhg the calc) after completing a task?
10 Oct 2003 01:05:15 pm by David
Huh, Jbirk wrote a patcher for ZCLEAR Smile
Anyways, point 1 and 3 will be easy to fix. Point #2 (correct rom version), is also rather easy. I have considered using the TI-OS system routine for retrieving the basecode version, thus making it more realistic.

Anduril, yes, it's possible make a program hide/delete itself. It's just to do it the normal way. It might sound dangerous to delete a program while it's running, but nothing will strange will happen, providing you run it from TI-OS, running from a shell won't work thought, because it will try to write back to a program that doesn't exist any longer . TI-OS doesn't perform any writeback, it just deletes the program copy and doesn't care about whether the original program exists or not.
10 Oct 2003 02:56:32 pm by NETWizz
#include "ti83plus.inc"

.org $userMem-2
.db $BB,$6D

ld hl,modify
rst 20h
bcall(_chkfindsym)
ret c

ld hl,$A1
add hl,de

ld a,(hl)
inc a
ld (hl),a

ret

modify:
.db protprogobj,"ZCLEAR",0

.end


How this program works:

It loads the address containing the object type and zeroterminated name into hl, then rst20h copies this information to OP1. Next, bcall(_chkfindsym) looks up the information from the sym table (VAT); in other words, it finds the program.

After finding the program,
HL -> Sym Table Entry Object/Type byte (you could change this byte to protect/unprotect 5=unprotected 6=protected)
DE -> Size bytes (ther are two with the LSB first) inc de twice to get to the actual data in ram.
B = Flash page (if 0, in ram, else in archive)
C flag will be returned if the program is not found.

So, ret c exits if ZCLEAR is not found.

ld hl,$A1 ;loads hl with the number of bytes the program is in from the first size byte
add hl,de ;HL+DE->HL

HL now points to the 2 in 1.12

ld a,(hl) ;read from that mem address and store the 2 or whatever it is in A.
inc a ;A+1->A
ld (hl),a ;A-> value at memory address defined in HL; put simply, write the new value back.

ret ;Exit the program


Going the extra distance:

After the ret c, you should add something I think.

add this:

ld a,b ;flash page to accumulator
or a ;same as cp 0; are we on page 0, ram?
ret nz ;If not in ram, exit

Add that to prevent unpredicatle results if you have ZCLEAR archived.
10 Oct 2003 03:10:08 pm by NETWizz
andruil66 wrote:
Is there a way to make a program hide or delete itself (without crashinhg the calc) after completing a task?

Yes here is how:

ld hl,label
rst 20h
bcall(_chkfindsym)

;we will assume it exists, sience you are running it

;bcall(_delvararc) will delete this regardless of wheater it is in ram or the archive

;if you wish to hide, then don't delete instead:

; hl point to the obj type

ld bc,-6
add hl,bc

;now hl points to the first character of the programs name

res 6,(hl) ;hide it by subtracting 40h

ret ;exit

;you can unhide with an asm program, MirageOS, or the beta of NimbusOS


;Below is the data section

label:
.db progobj,"NAME",0

You use protprogobj for protected programs, and I do not think you need the 0 termination if you have 8 or more characters, but I can't remember for sure, nor do I wish to enter the flash debugger to find out.
10 Oct 2003 04:33:03 pm by Adm.Wiggin
you dont need the 0 if it is 8 chars... it cant be more Smile
14 Oct 2003 01:03:01 pm by anduril66
Thank you very much.
Can you please compile the finished program and show me the source code (because I can't download programs rignt now).

It is very nice of you to do all this work for someone else.
14 Oct 2003 03:45:31 pm by JoeImp
How do you attach a file. I didnt believe you could.

Imp
14 Oct 2003 06:05:03 pm by Adm.Wiggin
you must be an admin to have that privelage set... it was set during the logo contest to upload logos...
25 Oct 2003 09:08:13 am by David
anduril66 wrote:
I tried the Fake Mem Reset prog by David L. Good, but can I request a customized version (for personal use), with some of the following features:
1)When you call the program, it shows the Mem reset message immediately w/o the starting menu.
2)ROM version 1.14 instead of 1.12
3)Exit with any keypress.
Many thanks.

Ok, Anduril. I got inspired and created an improved version of the ZCLEAR prog. This one uses a key hook to integrate itself in the Mem/Reset menu. So when you try to perform a mem/RAM reset, the program will fake that screen! I also added a routine for displaying the proper base version.

Do you want it this way, or do you just need a fake mem reset screen (w/o) keyhook?
25 Oct 2003 12:08:47 pm by Adm.Wiggin
thats cool David! you know too much about the TI-OS for me! ;)

wait, Jbirk taught me the theory behind that! you check what menu the user is in, if it is the memory delete, then check if they are on the clearing option, if they are, then you check for when they click it, then just display your screen... is that even close?
25 Oct 2003 12:30:19 pm by David
Yes, that's pretty close!
There are three bytes starting at (menucurrent) that holds the currently selected menu, sub-menu (eg math and stat menu) and item. So I just read from (menucurrent), and if it's 23h, then we're in the "Reset RAM?" menu Smile

I will post the program here very soon.
25 Oct 2003 12:47:00 pm by Adm.Wiggin
sweet!!!!! you could post it under Downloads on unitedti.org... and make a news article that says something like "First Download added to UnitedTI.org!"
Wink