thanks Ken, I plan to use some or all of this thread in my next bit of
coding.  being able to transfer in via serial is key for me, and that trick
I posted to auto hide the ML will make it easy to do that.  Very cool to
have ultra dense ML+BASIC now.

On Tue, Jun 5, 2018 at 8:38 PM, Ken Pettit <[email protected]> wrote:

> Correction:
>
> On line 20, the last POKE needs to convert to a positive integer first by
> adding 65536 prior to dividing by 256, and then convert to INT:
>
> 20 FORX=1 TO #:POKE63212+x*3,195:POKE63212+x*3+1:V(X)AND255:POKE63212+x*
> 3+2,INT((V(X)+65536)/256):NEXT
>
> Ken
>
>
> On 6/5/18 5:20 PM, Ken Pettit wrote:
>
> Hey Steve,
>
> I know there have been MANY posts on this topic (we have been keeping the
> list busy the past few days), but I couldn't help but post at least one
> more!  :)
>
> Another option for your column of usage options:
>
> DATA / REM structure
> ================
> 65531 DATAA:REM ML(with no leading space)
> Line# DATAA:REM ML
> Line# DATAA:REM ML
>
> The two cool things about this:
>
> 1. You can split your ML into arbitrarily large "functions" and find them
> easily with the code below.  Each function could do relative branching as
> needed, etc.  A tight BASIC loop could POKE a jump to those discovered
> addresses into fixed locations in ALTLCD.  That would make CALL or CC / CZ
> calling one of these ML "functions" easy.
>
> 2.  Using the REM statement, there are no restrictions on bytes used other
> than 00H.  REM will skip EVERYTHING until it finds 00H.
>
> The code to find the ML addresses easily:
>
> // In the code below, READ updates address 64440 so it points to the ':'
> after the "DATAA:REM" statements from above.
> // Below # is the number of ML lines from above, minus 1
> // We subtract 65534 instead of -65536+2 (i.e. 65536 to convert to INT, +2
> to skip ':' and REM
> 10 DEFINTV:DIMV(#):FOR X=0 TO #:READ A$:V(X)=PEEK(64440)+PEEK(
> 64441)*256-65534:NEXT
>
> Vector table V now has the addresses of all of the ML "routines", each of
> which can support XIP.  This could either be poked to fixed locations by
> BASIC or passed to one of the ML routines for processing:
>
> // Create up to 17 fixed location jump instructions in TEXT "Line Starts
> Array" hidey-hole
> 20 FORX=1 TO #:POKE63212+x*3,195:POKE63212+x*3:V(X)AND255:POKE63212+x*3:
> V(X)/256:NEXT
> 30 CALL V(0):CALL 63212:   ML:  JZ 63218, etc.
> -or-
> CALL V(0),0,VARPTR(V(0))
>
> Ken
>
>
> On 6/5/18 1:56 PM, Stephen Adolph wrote:
>
> more summary..... please correct or comment.  I agree with Ken regarding
> unsafe codes.  let me know if this is a good capture.
>
>
>                                 $ structure             DATA
> structure          RAW
>                                 65531 a$="###"          65531 DATA
> ###          65531 ###
> Hidden lines: excluded chars
>         Executed in BASIC       " comma 0               0
>       0(BASIC errors)
>         not executed            0                       0
>         0
>
> Rules:
> * hidden ML can combine BASIC instructions if desired
> * lines can be arbitrarily long
> * lines must adhere to BASIC structure rules otherwise (pointers,
> termination etc)
> * must follow this or an equivalent structure
>         [BASIC program]
>         65529 REM
>         -----hidden code starts here
>         65531 [embedded ML structure] or combination of ML and BASIC
>         [any line #] [more embedded ML] or combination of ML and BASIC
>
> On Tue, Jun 5, 2018 at 4:28 PM, Stephen Adolph <[email protected]>
> wrote:
>
>> it also survived save and load to/from simulated NADSBOX via TEENY.
>>
>> On Tue, Jun 5, 2018 at 4:13 PM, Stephen Adolph <[email protected]>
>> wrote:
>>
>>> well it survived a save and load to/from simulated NADSBOX via TSDOS.  I
>>> guess 16 bit math must be occurring... ;)
>>>
>>> So this is pretty interesting.  An arbitrarily long contiguous block of
>>> ML, hidden from BASIC, that does not interfere with BASIC, which can be
>>> appended and run in place.
>>>
>>>
>>>
>>> On Tue, Jun 5, 2018 at 2:06 PM, John R. Hogerhuis <[email protected]>
>>> wrote:
>>>
>>>>
>>>> On Tue, Jun 5, 2018 at 10:17 AM Ken Pettit <[email protected]> wrote:
>>>>
>>>>> Hey Steve,
>>>>>
>>>>> Were you able to load / save using TS-DOS with this also?  I believe
>>>>> it should work, but TS-DOS does have to modify the "next BASIC line 
>>>>> address
>>>>> pointers" when it inloads an .BA file.
>>>>>
>>>>>
>>>>> Ken
>>>>>
>>>>>
>>>> Loading by cassette is another important compatibility if only because
>>>> it’s built into the mask rom.
>>>>
>>>> And CloudT uses a portion of the cassette logic (above the low level
>>>> audio I/O) for dealing with files :-)
>>>>
>>>> — John.
>>>>
>>>
>>>
>>
>
>
>

Reply via email to