I guess one more comment - This is comparable as-is to running code in
ALTLCD.  ALTLCD is 320 bytes, this supports 255 bytes.

On Mon, Jun 4, 2018 at 8:49 AM, Stephen Adolph <[email protected]> wrote:

> Ken,
> a comment.
> DADTHUNK code could expand from 14 bytes to 24 bytes, as you point out, to
> shorten the calls in the program ML.
> --> at this point, maybe a DATA approach for T(i) would be more dense than
> assigning each T(i), with a read loop.
>
> How do we embed programs larger than 255 bytes?  If I understand this, we
> have single programs contained in single strings.
> It seems like it would be hard to have a large program segmented into
> multiple strings.
>
> any thoughts?
>
> Steve
>
>
>
> On Mon, Jun 4, 2018 at 7:27 AM, Stephen Adolph <[email protected]>
> wrote:
>
>> Ken,
>> Regarding T, interesting way to make a machine code routine in ram.
>> This is quite compact for a short routine, but I think this part is
>> equivalent to encoding the 14 bytes and poking into ALTLCD.
>> Is there something I missed in that?
>> IE you don't care how those 14 bytes show up, nor where they are.
>> Steve
>>
>> On Sun, Jun 3, 2018 at 12:17 PM, Ken Pettit <[email protected]> wrote:
>>
>>> Hey Guys,
>>>
>>> Okay, BASIC XIP code, as promised.  This code was written taking a
>>> "purest' approach where no hidey holes were used, only BASIC allocated
>>> RAM.  If hidey holes were to be used, I believe the resulting assembly
>>> could be made smaller.  A short relative jump could be made to occupy only
>>> 5 bytes (MVI A,offset + CALL helper_in_hidey_hole).  This method does not
>>> preserve A, it uses it as the relative jump distance.  To preserve A, it
>>> would need to be PUSH/POPed using the stack.  Also, looking at the number
>>> of instructions that have to be executed to make this happen, I'm not sure
>>> the resulting ASM code will be faster than BASIC, but it was a fun
>>> experiment. ;)
>>>
>>> I developed / assembled the ASM code using the VIrutalT assembler and
>>> then manually copied bytes into the BASIC program.  There are quite a few
>>> comments in the ASM code.
>>>
>>> Again, the concept:
>>>
>>> 1.  INT array T(0-6) is initialized using BASIC assign statements with
>>> an ASM THUNK to perform DAD D operation.
>>> 2.  VARPTR(T(0)) is passed to the ML program in H$ string.
>>> 3.  The T() array address is store off so the ROM JUMPTHUNK code will
>>> jump there (fixed CALL to jump to variable address).
>>> 4.  The Accumulator holds a short jump distance.
>>> 5.  Relative branching is done by:
>>>
>>>      MVI A, offset
>>>      CALL LOCATEME
>>>      CALL JUMPTHUNK
>>>      XTHL
>>>      RET
>>>
>>> If a large ML program is needed in BASIC, one could expand/modify the
>>> code above a bit and poke it into a hidey hole.  Then each relative jump
>>> would become:
>>>
>>>      MVI A,offset
>>>      CALL hidey_hole
>>>
>>> Ken
>>>
>>> On 6/2/18 2:56 PM, John R. Hogerhuis wrote:
>>>
>>>> Very nice. Code? :-)
>>>>
>>>> — John.
>>>>
>>>
>>>
>>
>

Reply via email to