Hi Steve,
Search through BASIC lines? Nah, don't do that! Put a dummy DATA
statement and then your ML code:
10 DATA "a", "encoded ML"
Then do a READ D$. The BASIC ROM will perform the search and update
address FBB8H (on M100/T102) with the address where READ will start it's
search next. Just use that variable as your starting point. Of course
you still have to avoid opcode and operands in the low region of the
ASCII table.
Ken
On 5/31/18 4:49 AM, Stephen Adolph wrote:
John I think a scheme like that could work, however you'd need to
eliminate all codes under 32decimal. To run in place, you lose the
ability to encode/decode the problematic characters.
finding the DATA statements in RAM can be done but it is a bit of
work. I think you'd have to start from the directory table and trace
out the line by line starting addresses from there.
On Wed, May 30, 2018 at 3:15 PM, John Gardner <[email protected]
<mailto:[email protected]>> wrote:
Or, for really evil results, you can execute your embedded code
in place - I think. I have'nt tried this on a MT, but it works a
treat
on TI CC-40's & TI-74's, 8-bitters of a similar vintage. Of course
you have to keep track of where your code is in memory...
I actually wrote a tool once (in QB) that would take a .lst file and
turn the opcodes into DATA statements, with offsets & jumps in
the right places; a TI-BASIC DATA statement length is 80 Bytes
max, not 255, so more than one is sometimes needed, & there's
some overhead in the jumps, but an EXEC statement is pretty fast...
Too much fun... "8)
...
On 5/30/18, Stephen Adolph <[email protected]
<mailto:[email protected]>> wrote:
> I often want to embed ML into basic programs. There are 2 ways
that I use
> 1) make a string of binary and assign it to a basic string
variable. (use
> VARPTR)
> 2) include data statements that contain the ML binary, with
some encoding,
> and use a routine to poke into memory
>
> regarding (2)
> I've seen 2 methods
> 1) encode data as decimal numbers
> ex. Data 125, 34, 56 etc
>
> 2) encode data as hex characters
> ex. Data C9F501 etc
>
> Neither of these are really optimal because they expand the size
of the
> code by 2 -3 x
>
> I've come up with an alternative to this which I'm now using.
The raw
> binary, with some code changes, can be directly embedded in data
> statements, in quotes.
>
> ex. Data "$%#(Lop" etc
>
> gotchas:
> 1) all binary codes <=32 must be mapped to special sequences to
avoid
> problems with BASIC
> 2) the " character has to be mapped to a different sequence
otherwise you
> confuse BASIC
>
> I use the "/" as a special symbol to mean "special sequence" and
I map all
> characters <=32, + " + / by adding 64d to each character.
>
> Ex. if the code 0Dh is encountered in the binary, it would get
transformed
> to "/" + chr$(13+64).
>
> Decoding is straightforward - look for / and subtract 64 from
the next
> character.
>
> Anyhow the net result is very compact with a minimal poke
routine. I
> compile my machine code into Intel HEX format, run a simple
program to
> encode the data into sets of DATA statements, and copy the
resulting text
> into a .DO file.
>