mirror of
https://github.com/iKarith/beneath-apple-dos.git
synced 2024-06-29 20:29:38 +00:00
27bcf5f79c
PIEWriter dot codes are case-insensitive, and I've deciphered that .pp is a paragraph break. Replace those with blank lines. The NUL at EOF was escaped, but it can be simply deleted. Did so.
189 lines
5.7 KiB
Plaintext
189 lines
5.7 KiB
Plaintext
.bp
|
|
.np
|
|
.ce
|
|
CHAPTER 7 - CUSTOMIZING DOS
|
|
.sp1
|
|
|
|
Although DOS usually provides most of
|
|
the functionality needed by the BASIC
|
|
or assembly language programmer, at
|
|
times a custom change is required.
|
|
Making changes to your copy of DOS
|
|
should only be undertaken when
|
|
absolutely necessary, since new
|
|
versions of DOS are released from
|
|
time to time, and the job of moving
|
|
several patches to a new version of
|
|
DOS every few months can become a
|
|
burden. In addition, wholesale
|
|
modification of DOS without a clear
|
|
understanding of the full
|
|
implications of each change can
|
|
result in an unreliable system.
|
|
.sp1
|
|
SLAVE VS MASTER PATCHING
|
|
|
|
The usual procedure for making
|
|
changes to DOS involves "patching"
|
|
the object or machine language code
|
|
in DOS. Once a desired change is
|
|
identified, a few instructions are
|
|
stored over other instructions within
|
|
DOS to modify the program. There are
|
|
three levels at which changes to DOS
|
|
may be applied.
|
|
.sp1
|
|
1 - A patch can be made to the DOS
|
|
in memory. If this is done, a later
|
|
reboot will cause the change to "fall
|
|
out" or be removed.
|
|
.sp1
|
|
2 - A patch of the first type can be
|
|
made permanent by initializing a\x1f?O7O?K'7s';;\x44\x4d\x08\x5a\x5d\x46\x46\x41\x46\x4f\x08\x5c\x40\x4d\x08\x58\x497#+''O\x87\x8f\x93oc\x97++3c77+'##37#g'7#'3#7g'g7+'3#K#/7/#33#g3/3/g'g'+7?g+#g\x83\x8b\x97g++g37''/7Kwkgwkg'+#gwg3//'/g'++3'/+7g3/#g7'3'h.
|
|
Each time this newly created diskette
|
|
is booted the patched version of DOS
|
|
will be loaded. Also, any slave
|
|
diskettes created by that diskette
|
|
will also contain the patched version
|
|
of DOS.
|
|
.bp
|
|
3 - The patch is applied directly to
|
|
a master diskette. This is somewhat
|
|
more complicated. Either the patch
|
|
may be made to the image of DOS on
|
|
the first three tracks of a master
|
|
diskette using a zap program, or
|
|
MASTER CREATE may be used to write
|
|
the changed copy of DOS to a new
|
|
diskette. The following procedure may
|
|
be followed to do this:
|
|
.br
|
|
BLOAD MASTER CREATE
|
|
Get into the monitor (CALL -151)
|
|
Store a $4C at location $80D (80D:4C)
|
|
Execute MASTER CREATE (800G)
|
|
When MASTER CREATE finishes loading the DOS image
|
|
it will exit. You may use the monitor to make
|
|
changes in the image. MASTER CREATE loads DOS
|
|
into memory at $1200 such that Boot 2 (RWTS) is
|
|
loaded first, followed by the main part of DOS
|
|
starting at $1C00.
|
|
When all patches have been made, reenter MASTER CREATE
|
|
at location $82D (82DG).
|
|
Complete the MASTER CREATE update normally. The
|
|
resulting diskette will have the patches applied.
|
|
.br
|
|
This procedure will work for versions 3.2, 3.2.1, and 3.3 of
|
|
DOS.
|
|
.SP1
|
|
.ne5
|
|
AVOIDING RELOAD OF LANGUAGE CARD
|
|
|
|
A rather annoying addition to DOS 3.3
|
|
was a patch to the Boot 2 code to
|
|
store a binary zero in the first byte
|
|
of the Language Card, forcing DOS to
|
|
reload BASIC (either INTEGER or
|
|
APPLESOFT) for every boot, whether or
|
|
not the machine was just powered up.
|
|
When the machine is first powered up
|
|
this patch is not necessary, since
|
|
the first byte of the Language Card
|
|
does not appear to DOS to be either
|
|
BASIC, and it will reload the card
|
|
anyway. On subsequent reboots, more
|
|
often than not, a good copy of BASIC
|
|
already resides in the Language Card
|
|
and this patch results in a LANGUAGE
|
|
NOT AVAILABLE error message after
|
|
booting a slave diskette. Presumably
|
|
the patch was added for version 3.3
|
|
to allow for the eventual possibility
|
|
that a language like PASCAL whose
|
|
first byte of code just happens to
|
|
match one of the BASICs would cause
|
|
strange results in DOS. If the user
|
|
always powers the machine off and on
|
|
between using DOS and any other
|
|
system, the patch may be removed as
|
|
follows.
|
|
.bp
|
|
At $BFD3 (48K) is a STA instruction which
|
|
stores a zero on the Language Card.
|
|
This instruction must be made into
|
|
three no-operation instructions:
|
|
BFD3:EA EA EA
|
|
.br
|
|
A slave diskette may then be INITed
|
|
using this modified version of DOS
|
|
and that diskette will have the
|
|
patch in its DOS. The address of the
|
|
store instruction for a 32K DOS is
|
|
7FD3 and for a 16K DOS is 3FD3.
|
|
.sp1
|
|
INSERTING A PROGRAM BETWEEN DOS AND ITS BUFFERS
|
|
|
|
Once in a while it is useful to find
|
|
a "safe" place to load a machine
|
|
language program (a printer driver,
|
|
perhaps) where BASIC and DOS
|
|
can never walk over it, even if DOS
|
|
is coldstarted. If the program is
|
|
less than 200 bytes long, $300 is a
|
|
good choice. For larger programs,
|
|
it is usually better to "tuck" the
|
|
program in between DOS and its
|
|
buffers (assuming the program is
|
|
relocatable and will run at that
|
|
location). To do this, load the
|
|
program into low RAM, copy it to high
|
|
RAM right below $9D00 (for a 48K
|
|
machine), over the top of DOS's
|
|
buffers, change the first buffer
|
|
address at $9D00 to point below your
|
|
program, (remember to allow 38 extra
|
|
bytes for the filename and link fields)
|
|
and JMP to $3D3 (DOS
|
|
COLDSTART). This will cause DOS to
|
|
rebuild its buffers below your
|
|
program and "forget" about the memory
|
|
your program occupies until the next
|
|
time DOS is booted. Of course, BASIC
|
|
can not get at that memory either,
|
|
since its HIMEM is below the DOS
|
|
buffers.
|
|
.bp
|
|
BRUN OR EXEC THE HELLO FILE
|
|
|
|
Ordinarily, when DOS finishes booting
|
|
into memory, it performs a RUN
|
|
command on the HELLO file in its file
|
|
name buffer (left there by the INIT
|
|
command which wrote DOS to the
|
|
diskette). To change the RUN command
|
|
to a BRUN or an EXEC, apply the
|
|
following patch to DOS (48K):
|
|
.sp1
|
|
9E42:34 (for BRUN)
|
|
..or..
|
|
9E42:14 (for EXEC)
|
|
.sp1
|
|
.ne5
|
|
REMOVING THE PAUSE DURING A LONG CATALOG
|
|
|
|
Normally, when a CATALOG command is
|
|
done on a disk with many files, DOS
|
|
will pause every time the screen
|
|
fills with names to allow the user
|
|
time to see them all.
|
|
By pressing any key
|
|
the CATALOG continues. If this pause
|
|
is undesirable, apply the following
|
|
patch to DOS (48K):
|
|
.sp1
|
|
AE34:60
|
|
.br
|
|
.bp
|
|
.st waiting for ch8 diskette
|
|
.nx ch8
|