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