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 <mailto: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
    <mailto: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