!lm10
!rm76
Renewing Subscriptions

The 4-digit number in the upper right corner of your mailing label is the expiration date of your subscription.  The first two digits are the year, and the last two digits are the month of the last issue you have paid for.

If your label says "8109", now is the time to renew to be sure of uninterrupted service.


Beneath Apple DOS

In the few weeks since I sent out last month's AAL, with the review of this book, I have sold 85 copies!  My apologies if your shipment was delayed a little.  Last Friday at 3:30 a shipment of 100 copies arrived; at 5:45 I took about 50 packages to the UPS station.  Another 10 went out by mail this morning.  A lot of work, but a lot of fun too.

I expect another shipment of 100 copies about the time you get this newsletter, so go ahead and order your copy if you have been waiting.


Restoring Clobbered Page 3 Pointers........Preston R. Black, M.D.

Here's a very short (14 byte) program which you might find useful.  As you know, DOS writes the page 3 vectors (between $3D0 and $3FF) as the last step in the bootstrap process.  This is done by copying a portion of DOS onto this area.  The image remains in memory and can be used to rewrite the vectors if they are clobbered.

If you have a 48K Apple, the routine which copies the vector data starts at $9E25.  My program temporarily patches DOS to isolate the vector-copier, by storing an RTS opcode at the end of the loop ($9E30).  After calling the loop, the original value of $9E30 is restored.

I put the subroutine at $BCD0 inside DOS, abecause this area is not used by DOS.  It can be placed on all slave diskettes you INIT after patching DOS.  With this subroutine installed, you can use all of page 3 for your assembly language program.  Once your program is finished, you can JMP $BCD0 to restore $3D0-$3FF to its normal state.

Here is the program, written to assemble into $0CD0-0CDD.  After assembly is complete, you can move it into DOS with the monitor command

     :$BCD0<CD0.CDDM   (if issued from inside S-C Assembler II
     or
     *BCD0<CD0.CDD     (if you do it from the monitor.

<program.1>

On second thought, 12 bytes is enough.  Rather than patching the DOS code to make a subroutine, I can just put a program up at $BCD0 which looks like the code at $9E25.  Here is the shorter version:

<program.2>
