[A83] Re: Ambivalent Ion programs [83/83+] ADDED in P.P.S., Ambivalent
[Prev][Next][Index][Thread]
[A83] Re: Ambivalent Ion programs [83/83+] ADDED in P.P.S., Ambivalent Miragos Programs
Summarized:
when you start from TIOS (83+)/ZASMLOAD(83) it executes the xor a, which
zeroes
register a and sets the zero flag.
when you start from ion, this part is skipped, so the a register has some
value.
subsequently, register a will be zero when you run it from TIOS/ZASMLOAD, so
you can
check for that to see if it is executed from ion or not.
A nice feature would then be a template for these programs :
.nolist
#include "ion.inc"
.list.
#ifdef TI83P
.org progstart-2 ;// add Special bytes, so you can do
asm(prgmPROGNAME)
.db $BB,$6D ;// on the 83+
#else
.org progstart
#endif
xor a ;// set register a to zero if we started from
TIOS/ZASMLOAD
jr nc,start
.db "Programname",0 ;// put your programs name here
start:
or a
jr z,__TIOS__ ;// jump to the TIOS/ZASMLOAD-version if executed
from there
__ION__:
...place your ion-program here...
__ion_quit__: ;// jump to here if your program uses a quit
routine
ret ;// program finished, quit. Make sure the stack is
correct!
_TIOS__: ;// this part of the program handle a message
bcall(_clrlcdf) ;// to inform the user that he/she should use ION
bcall(_homeup) ;// when they started from the TIOS/ZASMLOAD
ld hl,__TIOS_Text1__ ;//
bcall(_puts) ;// Feel free to change it into something else if
you feel
bcall(_newline) ;// you're up to it!
ld hl,__TIOS_Text2__
bcall(_puts)
bcall(_newline)
ld hl,__TIOS_Text3__
bcall(_puts)
bcall(_newline)
ret
__TIOS_Text1__:
.db "Please run this",0
__TIOS_Text2__:
.db "program through,0
__TIOS_Text1__:
.db "the ION-Shell!",0
.end
END
I'll put it in a file, and post it to TICalc someday
Henk, could you convert it into a Z80ASM version?
--Peter Martijn
P.S. Is it an idea to "implement" this into the C-Compiler?
P.P.S I checked the Mirageos Header format, but that doesn't seem to
support these kinds of programs, it has
a header format of:
.org progstart -2
.db $bb,$6D
ret ;// for TIOS returning
.db identifier
.db icon-data......
it doesn;t seem to support "TIOS-parts", because of the icon-data, which would
couse the calc to hang,.
Unless... suppose we use the following format:
#include "ti83plus.inc" ;//General TI-83 Plus include file
#include "mirage.inc" ;//MirageOS include file
.org $9d93 ;//Origin (set back two to account for AsmPrgm)
.db $BB,$6D ;//Compiled AsmPrgm token
;//it was: ret ;So TIOS wont run the program
;// .db 1 ;Identifier as MirageOS program
;//we'll exchange it with:
jr +1 ;//so it still has the header part
;//we'll then have to adapt the image, so it says:
.db %00000000
xor a //to set register a to zero
jr __start__ ;// the only problem with this is that we mess up the
image
;// it will look something like this:
.db %00000000,%00000000 ;// -:still icon, O: white pixel - forced, X: black
pixel-forced
.db %00000000,%00000000 ;// ?:unknown, because it depends on the descriptino
below
.db %00000000,%00000000 ;//
.db %00000000,%00000000 ;// --------XOXOXXXX
.db %00000000,%00000000 ;// OOOXXOOO????????
.db %00000000,%00000000 ;// ...rest of icon...
.db %00000000,%00000000
.db %00000000,%00000000
.db %00000000,%00000000
.db %00000000,%00000000
.db %00000000,%00000000
.db %00000000,%00000000
.db %00000000,%00000000
.db "Description",0 ;Zero terminated description
__start__:
or a
jr z,__TIOS__ ;// jump to the TIOS/ZASMLOAD-version if executed
from there
__MIROS__:
...place your mirageos-program here...
__MIROS_quit__: ;// jump to here if your program uses a quit
routine
ret ;// program finished, quit. Make sure the stack is
correct!
_TIOS__: ;// this part of the program handle a message
bcall(_clrlcdf) ;// to inform the user that he/she should use ION
bcall(_homeup) ;// when they started from the TIOS/ZASMLOAD
ld hl,__TIOS_Text1__ ;//
bcall(_puts) ;// Feel free to change it into something else if
you feel
bcall(_newline) ;// you're up to it!
ld hl,__TIOS_Text2__
bcall(_puts)
bcall(_newline)
ld hl,__TIOS_Text3__
bcall(_puts)
bcall(_newline)
ret
__TIOS_Text1__:
.db "Please run this",0
__TIOS_Text2__:
.db "program through,0
__TIOS_Text1__:
.db "MirageOs!",0
.end
END
with the modified-with-quit-program it would be like this:
#include "ti83plus.inc" ;//General TI-83 Plus include file
#include "mirage.inc" ;//MirageOS include file
.org $9d93 ;//Origin (set back two to account for AsmPrgm)
.db $BB,$6D ;//Compiled AsmPrgm token
;// it was: ret ;So TIOS wont run the program
;// .db 3 ;Identify modified MirageOS with quit routine
;//we'll exchange it with:
jr +3 ;//, so it still has the header part
;//we'll then have to adapt the image, so it says:
.db %00000000,%00000000
.db %00000000
xor a ;//to set register a to zero
jr __start__ ;// with this, we'll mes up the first 3 lines...
;// it will look something like this:
.db %00000000,%00000000 ;// -:still icon, O: empty pixel - forced, X: black
pixel-forced
.db %00000000,%00000000 ;// ?:unknown, becuase it depends on the progname
.db %00000000,%00000000 ;//
.db %00000000,%00000000 ;// ----------------
.db %00000000,%00000000 ;// --------XOXOXXXX
.db %00000000,%00000000 ;// OOOXXOOO????????
.db %00000000,%00000000 ;// ...rest of icon...
.db %00000000,%00000000
.db %00000000,%00000000
.db %00000000,%00000000
.db %00000000,%00000000
.db %00000000,%00000000
.dw __MIROS_quit__ ;pointer to address of quit routine
.db "Description",0 ;Zero terminated description
__start__:
or a
jr z,__TIOS__ ;// jump to the TIOS-version if executed from
there
__MIROS__:
...place your mirageos-program here...
__MIROS_quit__: ;// jump to here if your program uses a quit
routine
ret ;// program finished, quit. Make sure the stack is
correct!
_TIOS__: ;// this part of the program handle a message
bcall(_clrlcdf) ;// to inform the user that he/she should use ION
bcall(_homeup) ;// when they started from the TIOS
ld hl,__TIOS_Text1__ ;//
bcall(_puts) ;// Feel free to change it into something else if
you feel
bcall(_newline) ;// you're up to it!
ld hl,__TIOS_Text2__
bcall(_puts)
bcall(_newline)
ld hl,__TIOS_Text3__
bcall(_puts)
bcall(_newline)
ret
__TIOS_Text1__:
.db "Please run this",0
__TIOS_Text2__:
.db "program through,0
__TIOS_Text1__:
.db "MirageOs!",0
.end
END
Dan Englender, any ideas about if this works?
Henk Poley wrote:
> > Van: Emir Sakic <saka@hotmail.com>
> >
> > But you had a good point.
>
> Yes, but I've thought about something else, Ion calls to progstart+1, so it
> jumps over the potential RET or XOR A (!).
> The TIOS (hmm, realy ZASMLOAD on the Ti-83) jumps to progstart...
> So it would execute the RET or XOR A.
>
> Well, since it doesn't matter if you put a RET or an XOR A in your
> Ion-header (Ion will ALWAYS load the lib-vectors, if you don't believe me,
> look at the source...) you could just do a check for A = 0.
>
> To be sure you also check if the zero-flag is set, it could be that Ion has
> set A to zero before jumping to your code.
>
> So it would be:
> > .nolist
> > #include "ion.inc"
> > .list
> >
> > #ifdef TI83P
> > .org progstart-2
> > .db $BB,$6D
> > #else
> > .org progstart
> > #endif
> > xor a
> > jr nc,start
> > .db "ION vs. TI-OS",0
> > start:
> jr nz,_Ion_start
> or a
> jr z,_TIOS_start
> _Ion_start:
> > bcall(_clrlcdf)
> > bcall(_homeup)
> > ld hl,txt
> > bcall(_puts)
> > bcall(_getkey)
> > ret
> >
> > _TIOS_start:
> > bcall(_clrlcdf)
> > bcall(_homeup)
> > ld hl,txt2
> > bcall(_puts)
> > bcall(_newline)
> > ret
> > txt:
> > .db "OK..Ion is cool!",0
> > txt2:
> > .db "I hate TI-OS!",0
> >
> > .end
> > END
>
> Should work (I think)
>
> Henk Poley
Follow-Ups:
References: