I have been trying various ways of creating an APP for TI-83+/84+, using Brass, and Rabbitsign, to no avail. They both spit out an APP that works in emulator, but no matter what I set the Signing Key as, it will not install on a real calc. 0104, 010A should both work on a TI-84+ and neither of them work for me.

Does anyone have a link to a scource file, that is known to work with Brass and Rabbitsign so that I can see if my setup is able to perform the compilation of an APP successfully?
According to the wiki, 010A can only be used to sign a TI 84 Plus (SE) app. Have you tried using an emulated calculator that is the same model as your own?

In other words, what model does your emulator emulate? What model (including model code) is your actual calculator? Do you have the correct header for the application?

We don't know the problem if we don't have any source code.
Hi clevor,

Yes, I have tried various calculators, and they do not work. I have tried various emulated calculators, and the always work.

I can answer the particular model code and the header used later when I get back home.

If you can share a header that you know has worked for Brass & Rabbitsign for you before, I would be grateful.

Kind regards,

matalog.
Here is an application header supplied by WikiTI.
https://wikiti.brandonw.net/index.php?title=83Plus:OS:Certificate/Headers:Fields:Application_Headers
clevor wrote:
According to the wiki, 010A can only be used to sign a TI 84 Plus (SE) app. Have you tried using an emulated calculator that is the same model as your own?

In other words, what model does your emulator emulate? What model (including model code) is your actual calculator? Do you have the correct header for the application?

We don't know the problem if we don't have any source code.


This is the code I used:


Code:
.binarymode intel                 ; TI-83+ Application
#DEFINE NOAPPHEADER
#DEFINE NOEND
#DEFINE TI83P
#DEFINE NOTOKENS


.nolist
#include "ti83plus.inc"
.list


.defpage 0, 16*1024, $4000          ; Page 0 definition
;Uncomment for more pages
;.defpage 1, 16*1024, $4000          ; Page 1 definition
;.defpage 2, 16*1024, $4000          ; Page 2 definition


.page 0                             ; Start page 0
Page0Start:
   ; Master Field
   .db   80h, 0Fh, 0, 0, 0, 0
   ; Signing Key ID
   .db   80h, 12h, 1, 4 ; or 15 for the TI-84+CSE
   ;revision
   .db 80h,21h,7   ; 7
   .db 80h,31h,35  ;   3 b 3
   ; Name
   .db   80h, 48h, "Del2Bksp" ;App name, change as needed
   ; Disable TI splash screen.
   ;.db   80h, 90h
   ; Pages
   .db   80h, 81h, 1
   ; Date stamp.  Apparently, the calculator doesn't mind if you put
   ; nothing in this.
   .db   03h, 22h, 09h, 00h
   ; Date stamp signature.  Since nothing ever checks this, there's no
   ; reason ever to update it.  Or even have data in it.
   .db   02h, 00
   ; Final field
   .db   80h, 70h             

ASMStart:
           ;  blank for now

.end
.end


I found the signing keys at http://db48x.net/TI-keys/keys.shtml


I instructed Brass as follows "brass d2b1.asm d2b1.hex"

And I instructed Rabbitsign as follows: "rabbitsign -p -t 8xk -f -g -vv -k 0104.key d2b1.hex"

To which Rabbitsign output:

    0104.key: Loaded Rabin/RSA private key:
    0104.key: n = 878E894D2CBA39ED8191EFB30A0DF25B4DC3E5E585A80D8AEDBCD73B74167CEA
    F19DAFE59BA36FFB70A33DD94571147D8A34F15A361AC5E17E49722DA3124AD
    0104.key: p = 1CC2C1433A79A5D734F9F5F1FF1BC43F3F87D378142693CE26FEC1B5E9542E5B
    0104.key: q = 4B697D56EA14013042B11939BBAA1ED3BAB09496DBF208785739B07947B70F79

    Signing TI-83/84 Plus application d2b1.hex...
    d2b1.hex: hash = 99EECE0A3F23D2F97EEBD2BCDF5B805F
    d2b1.hex: sig = 2ED9F4860E0B0F30FFAD6E388DA6A58F564B4CAD43D096D878424834934B784
    367F2B0A526035640CDA9C874EEB029E29D5D78CADF7E5E5ACBC402BD3AB7D4B
    d2b1.hex: f = 0


And then TI ConnectCE returned:




I'll be having a look at it again later this evening. Let me know if you see anything wrong there.


EDIT--

I attempted to use the Minimal application from https://wikiti.brandonw.net/index.php?title=83Plus:OS:Certificate/Headers:Fields:Application_Headers

My whole program is:


Code:
.binarymode intel
.defpage   0, 16384, 4000h
.page   0
program_start:   
   ; Minimal application.  This application is just 31 bytes! And takes up 16 K of archive space!
   ; Master Field
   .db   80h, 0Fh, 0, 0, 0, 0
   ; Name. Note that the name field reads 80 43 because the name specified here is 3 characters long.
   .db   80h, 43h, "nop"
   ; Disable TI splash screen.
   .db   80h, 90h
   ; Pages
   .db   80h, 81h, 1
   ; Signing Key ID
   .db   80h, 12h, 1, 4 ; or 15 for the TI-84+CSE
   ; Date stamp.  Apparently, the calculator doesn't mind if you put
   ; nothing in this.
   .db   03h, 22h, 09h, 00h
   ; Date stamp signature.  Since nothing ever checks this, there's no
   ; reason ever to update it.  Or even have data in it.
   .db   02h, 00
   ; Final field
   .db   80h, 70h
   ; No need for padding here. The OS will just start execution here.
   b_call(_JForceCmdNoChar)


And it would not install to the TI-84+ either. It all seems to be sending over and then at 100% I get that error message saying it is not for me, above.
I have been trying to make a blank App template that can have Assembly added later and tailored to suit.

I have given up on Brass, as no-one seems to know how to make it successfully work with Rabbitsign to create a signed app for TI-83+/84+.

I'm now trying SPASM. I have a file that I can actually load to a TI-84+, but unfortunately I no longer know where the ASM should be placed to take the next control of the App, and the APP just turns off the calculator.

I would have liked to completely remove the jumptable.inc, but If I remove it, then the program no longer sends to the calc. To be honest, the assembler SPASM complains that all of the labels or macros in jumptable.inc were not found but compiles anyway.

Why might the inclusion of #include "jumptable.inc" determine if the app would successfully be signed or not?

Here is the code that works, but only with #include "jumptable.inc" - I trimmed down the source code of microOS to get this.


Code:

.nolist
#include "ti83plus.inc"
.list


   .org   4000h
   
starting_address:
   ; Master Field
   .db   80h, 0Fh, 0, 0, 0, 0
   ; Signing Key ID
   .db   80h, 12h, 1, 4
   ; Disable TI splash screen.  Also, pointer to the jump table.
   .db   80h, 94h
   .dw   0
   .dw   1
   ; Pages
   .db   80h, 81h, 1
   ; Name
   .db   80h, 48h, "MicrOS3 "
   ; Revision
   .db   80h, 21h, 1
   ; Build
   .db   80h, 31h, 1
   ; Date stamp
   ; The conversion factor from Unix time to 1997-time is 852076800
   .db   03h, 26h, 09h, 04h, 1Bh, 5Eh, 35h, 02h
   ; Date stamp signature.  Since nothing ever checks this, there's no
   ; reason ever to update it.
   .db   02h, 0Dh, 40h
   .db   0a1h ,06bh ,099h ,0f6h ,059h ,0bch ,067h
   .db   0f5h ,085h ,09ch ,009h ,06ch ,00fh ,0b4h ,003h ,09bh ,0c9h
   .db   003h ,032h ,02ch ,0e0h ,003h ,020h ,0e3h ,02ch ,0f4h ,02dh
   .db   073h ,0b4h ,027h ,0c4h ,0a0h ,072h ,054h ,0b9h ,0eah ,07ch
   .db   03bh ,0aah ,016h ,0f6h ,077h ,083h ,07ah ,0eeh ,01ah ,0d4h
   .db   042h ,04ch ,06bh ,08bh ,013h ,01fh ,0bbh ,093h ,08bh ,0fch
   .db   019h ,01ch ,03ch ,0ech ,04dh ,0e5h ,075h
   ; Final field
   .db   80h, 7Fh, 0, 0, 0, 0
   ; There's no need for more padding here.  TI just starts execution after
   ; the last field.

.seek 4080h
#include "jumptable.asm"



.end
.end


And this is what jumptable.inc has in it:


Code:
first_jump_table_entry_point:
   ; MicrOS entry points for RAM-loaded software
   ; Core I/O
   
   jp   WaitForScreen      ; 4010h
   jp   NewLine         ; 4013h
   jp   PutMap         ; 4016h
   jp   PutC         ; 4019h
   jp   PutS         ; 401Ch
   jp   ClearScreen      ; 401Fh
   jp   DispHL         ; 4022h
   jp   GetCSC         ; 4025h
   jp   GetKey         ; 4028h
   jp   CursorOff      ; 402Bh
   jp   CursorOn      ; 402Eh
   ; Flash
   jp   runRAMCode      ; 4031h
   jp   writeFlashByte      ; 4034h
   jp   writeFlashByteRaw   ; 4037h
   jp   eraseSector      ; 403Ah
   jp   eraseSectorRaw      ; 403Dh
   jp   issueAutoselect      ; 4040h
#ifdef RUN_FROM_FLASH
 #ifndef IS_APP
   jp   LockFlashPrivilegedRoutine; 4043h
   jp   UnlockFlashPrivilegedRoutine; 4046h
 #else
   jp   mainMenu
   jp   mainMenu
 #endif
#else
   jp   mainMenu
   jp   mainMenu
#endif
   jp   GetFlashType      ; 4049h
   jp   GetFlashChipType   ; 404Ch
   ; Support
   jp   SetUpISR      ; 404Fh
   jp   multHbyE      ; 4052h
   jp   ldHLindirect      ; 4055h
   jp   cphlde         ; 4058h
   jp   dispByte      ; 405Bh
   jp   clearMem      ; 405Eh
   jp   menu         ; 4061h
   jp   getHexByte      ; 4064h
   jp   getByte         ; 4067h
   jp   putByte         ; 406Ah
   jp   UnlockAllRAM      ; 406Dh
   jp   GetVersion      ; 4070h
   jp   ReadByte      ; 4073h
   jp   IncReadPtr      ; 4076h
   jp   DecReadPtr      ; 4079h
   jp   editVal8      ; 407Ch
   jp   editVal16      ; 407Fh
   jp   ProcessKeyJumpTable   ; 4082h
   ; Jump points
   jp   mainMenu      ; 4085h
   jp   hexEditor      
   jp   PortMonitor      
   jp   PortMonGotoToPortExternal
   jp   Reboot         
   
   
   
   ; BrandonW: Place entry points for linking here
last_jump_table_entry_point:


Any ideas about - What part of jumptable.inc is letting this work with spasm and rabbitsign, and Where should I place the Assembly that will become my App?
Here's how I do it with spasm (which should automatically sign the app for you if you run "spasm app.asm app.8xk")


Code:
#include "app.inc"

defpage(0,"APP")

start:
   bcall   _JForceCmdNoChar

validate()


And app.inc:


Code:
; Fatal error macro. Displays message prefixed with "error"
; and returns with error code
#define fatal(str,return) .error str
#macro defpage(page, appname)
#if page = 0
  #ifndef gpage
    #define free_space 0
    #define gpage 0
    #ifndef appname
      .echo "Warning: No name given, using \"Default\""
      #define appname "Default"
    #endif
    .org $4000
    .db $80,$0F,0,0,0,0
    .db $80,$12,1,4
    .db $80,$21,1
    .db $80,$31,1
    .db $80,$48

   #define gappname eval(appname)

_   .db appname
    #define apnamlen eval($ - -_)
    echo_fill(apnamlen,"-","------------------------------------------")
    .echo "Beginning APP \"",appname,"\", courtesy of SPASM macros"
    echo_fill(apnamlen,"-","------------------------------------------")

    #if apnamlen <= 8
      .fill 8-apnamlen,' '
    #else
      #define err "App name is ",apnamlen-8," character(s) too long."
      fatal(err,1)
    #endif

    .db $80,$81,0
    .db $80,$90
    .db $03,$26,$09,$04,$04,$06f,$1b,$80
    .db $02,$0d,$40
    .db $a1,$6b,$99,$f6,$59,$bc,$67
    .db $f5,$85,$9c,$09,$6c,$0f,$b4,$03,$9b,$c9
    .db $03,$32,$2c,$e0,$03,$20,$e3,$2c,$f4,$2d
    .db $73,$b4,$27,$c4,$a0,$72,$54,$b9,$ea,$7c
    .db $3b,$aa,$16,$f6,$77,$83,$7a,$ee,$1a,$d4
    .db $42,$4c,$6b,$8b,$13,$1f,$bb,$93,$8b,$fc
    .db $19,$1c,$3c,$ec,$4d,$e5,$75
    .db $80,$7F,0,0,0,0
    .dw 0,0,0,0,0,0,0,0
  #else
    fatal("There was already a page 0.",1)
  #endif
#else
  #if ($ & $0000FFFF) > $8000
   #define err "Page ",gpage," went over bounds by ",$-$8000," bytes."
   fatal(err, 1)
  #endif
  #if page <= gpage
    fatal("Your page numbers must increase.")
  #endif
  #if page > gpage+1
    .echo "Warning: Skipping page ",gpage+1," at user request."
  #endif
  #define free_space eval(free_space + $8000-($ & $0000FFFF))
  .echo "Page ",gpage," free space: ",$8000-($ & $0000FFFF)
  .block ($8000-($ & $0000FFFF) + ((page-gpage-1)*$4000))
  #define gpage eval(page)
  .org $4000+(gpage*$10000)
#endif
#endmacro
   
#macro validate
#if ($ & $0000FFFF) > $8000
  #define err "Page ",gpage," went over bounds by ",$-$8000," bytes."
  fatal(err, 1)
#else
  .echo "Page ",gpage," free space: ",$8000-($ & $0000FFFF)
  #define free_space eval(free_space + $8000 - ($ & $0000FFFF))
  .echo "Success: Page sizes validated and \"",gappname,"\" is ready for signing."
  .echo "           In ",gpage+1," page(s), ",free_space," bytes are available."
#endif
#endmacro

#macro echo_fill(times, char, base)
#if times > 0
 #define base base,char
 echo_fill(eval(times-1), char, base)
#else
 .echo base
#endif
#endmacro

#define .defpage defpage(
#define .validate validate
I have put the first piece of code into a file called app.asm and the second piece of code into a file called app.inc.

I compiled with Spasm app.asm app.8xk and it will not copy to calculator.

I changed the first code to a format that SPASM accepts for the bcall and included "ti83plus.inc" as that is referenced to by _JForceCmdNoChar - and that still does not send to calculator.


Code:
#include "app.inc"
#include "ti83plus.inc"
defpage(0,"APP")

start:
   bcall(_JForceCmdNoChar)

validate()


Did you say that this works for you?
Yes, it works for me.
MateoConLechuga wrote:
Yes, it works for me.


Which of the methods I described above works for you?

Do you live with the bcall not being used due to not having #include "ti83plus.inc"? Or do you actually include it so that the bcall can work?
matalog wrote:
Do you live with the bcall not being used due to not having #include "ti83plus.inc"? Or do you actually include it so that the bcall can work?

I just define what I need myself:


Code:
.nolist
.addinstr bcall * EF 3 NOP 1
_JForceCmdNoChar = $4027
.list

#include "app.inc"
defpage(0,"APP")

start:
   bcall   _JForceCmdNoChar

validate()
MateoConLechuga wrote:
matalog wrote:
Do you live with the bcall not being used due to not having #include "ti83plus.inc"? Or do you actually include it so that the bcall can work?

I just define what I need myself:


Code:
.nolist
.addinstr bcall * EF 3 NOP 1
_JForceCmdNoChar = $4027
.list

#include "app.inc"
defpage(0,"APP")

start:
   bcall   _JForceCmdNoChar

validate()


Yeah, it doesn't work with the other code you first sent as a file called "app.inc" It does not copy to a Ti-84+
matalog wrote:
Yeah, it doesn't work with the other code you first sent as a file called "app.inc" It does not copy to a Ti-84+

Then that is an issue with your transfer software. What TI84+ do you have?
MateoConLechuga wrote:
matalog wrote:
Yeah, it doesn't work with the other code you first sent as a file called "app.inc" It does not copy to a Ti-84+

Then that is an issue with your transfer software. What TI84+ do you have?


I'm using a C6EE. I have successfully uploaded other Apps created by Spasm and Rabbitsign today with it.

Following your instructions does not seem to give me a file that copies to it just.
MateoConLechuga wrote:
matalog wrote:
Yeah, it doesn't work with the other code you first sent as a file called "app.inc" It does not copy to a Ti-84+

Then that is an issue with your transfer software. What TI84+ do you have?


Just so we are on the same page, this is exactly what I am using:

https://www.dropbox.com/s/zyvqvg05if61q2k/apptest.zip?dl=1

In a command prompt window I type "Spasm app2.asm app2.8xk"

It compiles or assembles successfully but does not copy to a TI-84+ calculator.

Could you test this please, and see if it does work on your computer?
I was able to send this app on my TI-84+ (you just need to actually put some things into the app):

Download: https://usercontent.irccloud-cdn.com/file/i4A6S0PJ/app.zip

Some people just pad their apps to fill a 16KiB page.


Code:
.nolist
.addinstr bcall * EF 3 NOP 1
_JForceCmdNoChar = $4027
.list

#include "app.inc"
defpage(0,"APP")

start:
   bcall   _JForceCmdNoChar

data:
   .db   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   .db   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   .db   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   .db   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   .db   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   .db   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   .db   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
   .db   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

validate()
  
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 1
» All times are UTC - 5 Hours
 
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

 

Advertisement