Ken,
so you are suggesting the .BA file calls into the .DO file?  interesting.

When I embed programs as strings, I write the program to avoid codes <32
d.
ex.
mvi  a,00
is bad
xra a
is good.



On Thu, May 31, 2018 at 2:34 PM, Ken Pettit <petti...@gmail.com> wrote:

> Hey guys,
>
> Looking at this a bit, it seems because of the restrictions imposed by
> BASIC with regard to binary values less than 32 decimal, the only real
> viable way to do execute in-place ML code would be to imbed it in a .DO
> file.  Then the only restriction is that you can't have 26 decimal (the End
> Of File character).  This is much less restrictive, though it would require
> distributing the BASIC program with a .DO file as a dependency.  For
> execute in place, you could even implement a relative branch mechanism so
> you don't have to recalculate jump addresses when the .DO moves.
>
> 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 <gof...@gmail.com> 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 <twospru...@gmail.com> 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.
>> >
>>
>
>
>

Reply via email to