[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Advanced Applesoft HELP!



In article <Pine.3.07.9505180146.A26142-b100000@acme>
dalloff@freenet.columbus.oh.us (Dave Althoff) writes:
>I have written a machine-language library for an Applesoft program. 
>Normally, I stick such libraries at $8000 and am done with it at that. 
>But this is a program which, if I am not careful, could accidentally tromp
>a library stored up there.  And the library is fairly long; and I really
>don't like doing library BLOADs anyway.
>
>I was careful to write the library using 100% relocatable code. 
>Therefore, it seems that this would be a good candidate for that age-old
>tactic where the library is sandwiched in between the last line of
>tokenized Applesoft and the current LOMEM: value.  This causes Applesoft
>to take care of all the memory management, automatically relocating the
>library if the Applesoft gets edited, and causing the library to be saved
>on disk as part of the tokenized program.  Really a neat trick!  And it
>works well.  I've done it in the past.
>
>Trouble is, I can't remember how I did it 8-}!  And I can't seem to find
>any of my old POKE charts 8-(.  I have lots of DOS 3.3 data, but next to
>nothing on the workings of Applesoft.
>
>Can anybody at least point me in the right direction?  And if you're still
>a little fuzzy on what I'm trying to do, the old RENUMBER program from the
>DOS 3.3 System Master used this tactic...in fact, RENUMBER remained memory
>resident until an FP command was issued.  And yes, I'm looking at that one
>for a starting point (the CALL PEEK (nnn)+PEEK(nnn+1)*256 is really helpful!).

The pointer you need is the Applesoft end-of-program pointer, at locations
175 and 176 ($AF and $B0 in hex).

To create your hybrid program:

1.  LOAD the Applesoft code.
2.  CALL -151
3.  Note the end-of-program address, in $AF (low byte) and $B0 (hi byte).
4.  Make sure there are at least three zero bytes preceeding the end-of-
program address.  Those three bytes MUST stay there, or Applesoft won't be
able to figure out where the program's last line is.
4.  Control-C return
5.  BLOAD ML.LIBRARY,A$(the address you noted in step 3)
6.  Find the ending address of the machine language library.  Add one to
this value, and store it in $AF and $B0.
7.  SAVE the Applesoft program.

Your Applesoft file now contains the hybrid program (Applesoft + machine
language).

To call your machine language library:

10 LL = (whatever): REM Insert the length of the ML library here
20 EP =  PEEK (175) + 256 *  PEEK (176): REM End of program
30 ML = EP - LL: REM Find start of ML code
40  CALL ML

             - Neil Parker
--
Neil Parker, nparker@{cie-2,cie}.uoregon.edu, http://cie-2.uoregon.edu/~nparker

     "Evolution is vastly overrated."  -- Ambassador Delenn, _Babylon_5_