Remove trailing whitespace, normalize dot commands

This commit is contained in:
T. Joseph Carter 2017-07-20 15:45:47 -07:00
parent d9046beb1d
commit b773fd6d8c
27 changed files with 382 additions and 382 deletions

View File

@ -7,8 +7,5 @@ insert_final_newline = true
trim_trailing_whitespace = true
max_line_length=80
[*.txt]
trim_trailing_whitespace = false
[*.md]
trim_trailing_whitespace = false

View File

@ -1,35 +1,35 @@
.ec ^
.ec^
.na
.ll60
.m11
.m22
.m48
.fo ''-%-
.pn 5
.pn5
.pi0
.br
.np
.ce
CHAPTER 1 - INTRODUCTION
.sp 2
.sp2
Beneath Apple DOS is intended
to serve as a companion to Apple's
DOS Manual, providing additional
information for the advanced
information for the advanced
programmer or
the novice Apple user who wants to
know more about the structure of
diskettes.
diskettes.
It is not the intent of this manual
to replace the documentation provided
by Apple Computer Inc.
by Apple Computer Inc.
Although, for the
sake of
sake of
continuity, some of the material
covered in the Apple manual is also
covered here, it will be assumed that
the reader is reasonably familiar
the reader is reasonably familiar
with the
contents of the DOS Manual. Since
all chapters presented here may not
@ -45,7 +45,7 @@ It also draws from application notes,
articles, and discussions with
knowledgeable people. This
manual was not prepared with the
assistance of Apple Computer Inc.
assistance of Apple Computer Inc.
Although no
guarantee can be made concerning the
accuracy of the information
@ -56,7 +56,7 @@ tested.
There were several reasons
for writing Beneath Apple DOS:
.SP1
.sp1
.nf
To show direct assembly language access to DOS.
.br
@ -83,15 +83,15 @@ internal workings of DOS. With the
advent of DOS 3.3, the old 3.2 manual
was updated but the body of
information in it remained
essentially intact. Beyond these
Apple manuals,
essentially intact. Beyond these
Apple manuals,
there have been no significant
additions to the documentation on
DOS,
DOS,
apart from a few articles in APPLE
user group magazines and newsletters.
This manual takes up
where the
where the
Disk Operating System
Manual leaves off.
.bp

View File

@ -2,7 +2,7 @@
.np
.ce
CHAPTER 2 - THE EVOLUTION OF DOS
.sp 2
.sp2
Since its introduction, Apple DOS has
gone through three major versions.
@ -30,10 +30,10 @@ such, it had a number of bugs. With the
movement towards the APPLE II PLUS
and the introduction of the AUTOSTART
ROM, a new release was needed.
.SP1
.sp1
DOS 3.2 - 16 February 1979
Although DOS 3.2 embodied more
Although DOS 3.2 embodied more
changes from its
predecessor than any other release of
DOS, 90% of the basic structure of DOS 3.1
@ -77,7 +77,7 @@ can.
.bp
- Some DOS commands are allowed to
create a new file, others will not.
create a new file, others will not.
Under DOS 3.1, any reference to a
file that didn't exist, caused it to
be created. This forced DOS 3.1 to
@ -140,7 +140,7 @@ creating master diskettes. UPDATE
and allows the HELLO file to be
renamed.
.br
.pi0
.pi0
.in0
.ps1
.sp1
@ -163,14 +163,14 @@ new bootstrap and state ROM chips for
the disk controller card which
provide the capability to
format, read, and write a
diskette with 16 sectors.
diskette with 16 sectors.
(These ROMs are the
same ones used with the LANGUAGE
SYSTEM.)
SYSTEM.)
This improvement
represents almost a 25% increase in
available disk space over the old
13 sector format.
13 sector format.
Also included in the 3.3
package is an updated version of the
DOS manual, a BASICS diskette (for 13
@ -242,7 +242,7 @@ Because the COPY program was rewritten
under 3.3, that restriction no longer
applies.
.br
.pi0
.pi0
.in0
.ps1
.nx ch3.1

View File

@ -2,12 +2,12 @@
.np
.ce
CHAPTER 3 - DISK II HARDWARE AND TRACK FORMATTING
.sp 2
.sp2
Apple Computer's excellent manual on
the Disk Operating System (DOS)
provides only very basic information
about how diskettes are formatted.
about how diskettes are formatted.
This chapter will explain in detail
how information is structured on a
diskette. The first section will
@ -16,7 +16,7 @@ hardware, and may be skipped by those
already familiar with the DOS manual.
For system housekeeping, DOS divides
diskettes into tracks and sectors.
diskettes into tracks and sectors.
This is done during the
initialization process. A track is a
physically defined circular path
@ -26,14 +26,14 @@ track is identified by its distance
from the center of the disk. Similar
to a phonograph stylus, the
read/write head of the disk drive may
be positioned over any given track.
be positioned over any given track.
The tracks are similar to the grooves
in a record, but they are not
connected in a spiral. Much like
playing a record, the diskette is
spun at a constant speed while the
data is read from or written to its
surface with the read/write head.
surface with the read/write head.
Apple formats its diskettes into 35
tracks. They are numbered from 0 to
34, track 0 being the outermost track
@ -70,7 +70,7 @@ protection schemes.
A sector is a subdivision of a track.
It is the smallest unit of
"updatable" data on the diskette.
"updatable" data on the diskette.
DOS generally reads or writes data a
sector at a time. This is to avoid
using a large chunk of memory as a
@ -86,7 +86,7 @@ locate the first sector of the track.
The implication is that
the software must be able
to locate any given track and sector
with no help from the hardware.
with no help from the hardware.
This scheme, known as "soft sectoring",
takes a little more space
for storage but allows flexibility,
@ -100,14 +100,14 @@ sector formats.
.ne10
.nf
DISK ORGANIZATION
.SP1
.sp1
TRACKS
All DOS versions................35
.SP1
.sp1
SECTORS PER TRACK
DOS 3.2.1 and earlier...........13
DOS 3.3.........................16
.SP1
.sp1
SECTORS PER DISKETTE
DOS 3.2.1 and earlier..........455
DOS 3.3........................560
@ -118,15 +118,15 @@ BYTES PER SECTOR
BYTES PER DISKETTE
DOS 3.2.1 and earlier.......116480
DOS 3.3.....................143360
.SP1
.sp1
USABLE* SECTORS FOR DATA STORAGE
DOS 3.2.1 and earlier..........403
DOS 3.3........................496
.SP1
.sp1
USABLE* BYTES PER DISKETTE
DOS 3.2.1 and earlier.......103168
DOS 3.3.....................126976
.SP2
.sp2
* Excludes DOS, VTOC, and CATALOG
.bp
TRACK FORMATTING
@ -186,12 +186,12 @@ least significant bit cell would be
bit cell 0. When reference is made
to a specific data bit (i.e. data bit
5), it is with respect to the
corresponding bit cell (bit cell 5).
corresponding bit cell (bit cell 5).
Data is written and read serially,
one bit at a time. Thus, during a
write operation, bit cell 7 of each
byte would be written first, with bit
cell 0 being written last.
cell 0 being written last.
Correspondingly, when data is being
read back from the diskette, bit cell
7 is read first and bit cell 0 is
@ -245,19 +245,19 @@ instructed to write in 32
cycle intervals. If not, zero bits
will continue to be written every four
cycles, which is, in fact, exactly
how self-sync bytes are created.
how self-sync bytes are created.
Self-sync bytes will be covered in
detail shortly.
.sp1
*** INSERT FIGURE 3.6 HERE ***
A "field" is made up of a group of
A "field" is made up of a group of
consecutive
bytes. The number of bytes varies,
depending upon the nature of the
field. The two types of fields
present on a diskette are the Address
Field and the Data Field. They are
Field and the Data Field. They are
similar in that they both contain a
prologue, a data area, a checksum, and
an epilogue. Each field on a track is
@ -277,7 +277,7 @@ beneath the read/write head.
All gaps are primarily alike in
content, consisting of self-sync
hexadecimal FF's, and vary only in
the number of bytes they contain.
the number of bytes they contain.
Figure 3.7 is a diagram of a portion
of a typical track, broken into its
major components.
@ -286,7 +286,7 @@ major components.
Self-sync or auto-sync bytes are
special bytes that make up the three
different types of gaps on a track.
different types of gaps on a track.
They are so named because of their
ability to automatically bring the
hardware into synchronization with
@ -311,14 +311,14 @@ clock bits from data bits,
the hardware finds
the first bit cell with data in it
and proceeds to read the following
seven data
seven data
bits into the eight bit latch. In
effect, it assumes that it had
started at the beginning of a data
byte. Of course, in reality, the
odds of its having started at the
beginning of a byte are only one in
eight.
eight.
Pictured in Figure 3.8 is a small
portion of a track. The clock bits
have been stripped out and 0's and
@ -381,7 +381,7 @@ the track.
We can now discuss the particular
portions of a track in detail. The
three gaps will be covered first.
three gaps will be covered first.
Unlike some other disk formats, the
size of the three gap types will vary
from drive to drive and even from
@ -424,13 +424,13 @@ clarity).
.bp
Gap 2 appears after each Address
Field and before each Data Field.
Field and before each Data Field.
Its length varies from five to ten bytes
on a normal drive. The primary
purpose of Gap 2 is to provide time
for the information in an Address
Field to be decoded by the computer
before a read or write takes place.
before a read or write takes place.
If the gap were too short, the
beginning of the Data Field might
spin past while DOS was still
@ -444,7 +444,7 @@ will occur in exactly the same spot
each time. This is due to the fact
that the drive which is rewriting
the Data Field may not be the one
which originally INITed or wrote it.
which originally INITed or wrote it.
Since the speed of the drives can
vary, it is possible that the write
could start in mid-byte. (See Figure
@ -472,7 +472,7 @@ boundary, thus altering an existing
byte. Figure 3.12 illustrates this.
.sp1
*** INSERT FIGURE 3.11 HERE ***
.SP1
.sp1
*** INSERT FIGURE 3.12 HERE ***
Gap 3 appears after each
@ -485,7 +485,7 @@ additional time needed to manipulate
the data that has been read before
the next sector is to be read. The
length of Gap 3 is not as critical as
that of Gap 2. If the
that of Gap 2. If the
following Address
Field is missed, DOS can always wait
for the next time it spins around
@ -503,7 +503,7 @@ An examination of the contents of the
two types of fields is in order.
The Address Field contains
the "address" or identifying
information about the Data Field
information about the Data Field
which follows it. The volume, track,
and sector number of any given sector
can be thought of as its "address",
@ -519,7 +519,7 @@ Figure 3.13.
The prologue consists of three bytes
which form a unique sequence, found
in no other component of the track.
in no other component of the track.
This fact enables DOS to locate an
Address Field with almost no
possibility of error. The three
@ -539,7 +539,7 @@ where it is positioned on a
particular diskette. The checksum is
computed by exclusive-ORing the first
three pieces of information, and is
used to verify its integrity.
used to verify its integrity.
Lastly follows the epilogue, which
contains the three bytes $DE, $AA and
$EB. Oddly, the $EB is always written
@ -558,14 +558,14 @@ Field. Much like the Address Field,
it consists of a prologue, data,
checksum, and an epilogue. (Refer to
Figure 3.14) The prologue is
different only in the third byte.
different only in the third byte.
The bytes are $D5, $AA, and $AD,
which again form a unique sequence,
enabling DOS to locate the beginning
of the sector data. The data
consists of 342 bytes of encoded
data. The encoding scheme used will
be discussed in the next section.
be discussed in the next section.
The data is followed by a checksum
byte, used to verify the integrity of
the data just read. The epilogue

View File

@ -2,12 +2,12 @@
.np
.ce
CHAPTER 3 - DISK II HARDWARE AND TRACK FORMATTING
.sp 2
.sp2
Apple Computer's excellent manual on
the Disk Operating System (DOS)
provides only very basic information
about how diskettes are formatted.
about how diskettes are formatted.
This chapter will explain in detail
how information is structured on a
diskette. The first section will
@ -16,7 +16,7 @@ hardware, and may be skipped by those
already familiar with the DOS manual.
For system housekeeping, DOS divides
diskettes into tracks and sectors.
diskettes into tracks and sectors.
This is done during the
initialization process. A track is a
physically defined circular path
@ -26,14 +26,14 @@ track is identified by its distance
from the center of the disk. Similar
to a phonograph stylus, the
read/write head of the disk drive may
be positioned over any given track.
be positioned over any given track.
The tracks are similar to the grooves
in a record, but they are not
connected in a spiral. Much like
playing a record, the diskette is
spun at a constant speed while the
data is read from or written to its
surface with the read/write head.
surface with the read/write head.
Apple formats its diskettes into 35
tracks. They are numbered from 0 to
34, track 0 being the outermost track
@ -70,7 +70,7 @@ protection schemes.
A sector is a subdivision of a track.
It is the smallest unit of
"updatable" data on the diskette.
"updatable" data on the diskette.
DOS generally reads or writes data a
sector at a time. This is to avoid
using a large chunk of memory as a
@ -86,7 +86,7 @@ locate the first sector of the track.
The implication is that
the software must be able
to locate any given track and sector
with no help from the hardware.
with no help from the hardware.
This scheme, known as "soft sectoring",
takes a little more space
for storage but allows flexibility,
@ -100,14 +100,14 @@ sector formats.
.ne10
.nf
DISK ORGANIZATION
.SP1
.sp1
TRACKS
All DOS versions................35
.SP1
.sp1
SECTORS PER TRACK
DOS 3.2.1 and earlier...........13
DOS 3.3.........................16
.SP1
.sp1
SECTORS PER DISKETTE
DOS 3.2.1 and earlier..........455
DOS 3.3........................560
@ -118,15 +118,15 @@ BYTES PER SECTOR
BYTES PER DISKETTE
DOS 3.2.1 and earlier.......116480
DOS 3.3.....................143360
.SP1
.sp1
USABLE* SECTORS FOR DATA STORAGE
DOS 3.2.1 and earlier..........403
DOS 3.3........................496
.SP1
.sp1
USABLE* BYTES PER DISKETTE
DOS 3.2.1 and earlier.......103168
DOS 3.3.....................126976
.SP2
.sp2
* Excludes DOS, VTOC, and CATALOG
.bp
TRACK FORMATTING
@ -186,12 +186,12 @@ least significant bit cell would be
bit cell 0. When reference is made
to a specific data bit (i.e. data bit
5), it is with respect to the
corresponding bit cell (bit cell 5).
corresponding bit cell (bit cell 5).
Data is written and read serially,
one bit at a time. Thus, during a
write operation, bit cell 7 of each
byte would be written first, with bit
cell 0 being written last.
cell 0 being written last.
Correspondingly, when data is being
read back from the diskette, bit cell
7 is read first and bit cell 0 is
@ -245,19 +245,19 @@ instructed to write in 32
cycle intervals. If not, zero bits
will continue to be written every four
cycles, which is, in fact, exactly
how self-sync bytes are created.
how self-sync bytes are created.
Self-sync bytes will be covered in
detail shortly.
.sp1
*** INSERT FIGURE 3.6 HERE ***
A "field" is made up of a group of
A "field" is made up of a group of
consecutive
bytes. The number of bytes varies,
depending upon the nature of the
field. The two types of fields
present on a diskette are the Address
Field and the Data Field. They are
Field and the Data Field. They are
similar in that they both contain a
prologue, a data area, a checksum, and
an epilogue. Each field on a track is
@ -277,7 +277,7 @@ beneath the read/write head.
All gaps are primarily alike in
content, consisting of self-sync
hexadecimal FF's, and vary only in
the number of bytes they contain.
the number of bytes they contain.
Figure 3.7 is a diagram of a portion
of a typical track, broken into its
major components.
@ -286,7 +286,7 @@ major components.
Self-sync or auto-sync bytes are
special bytes that make up the three
different types of gaps on a track.
different types of gaps on a track.
They are so named because of their
ability to automatically bring the
hardware into synchronization with
@ -311,14 +311,14 @@ clock bits from data bits,
the hardware finds
the first bit cell with data in it
and proceeds to read the following
seven data
seven data
bits into the eight bit latch. In
effect, it assumes that it had
started at the beginning of a data
byte. Of course, in reality, the
odds of its having started at the
beginning of a byte are only one in
eight.
eight.
Pictured in Figure 3.8 is a small
portion of a track. The clock bits
have been stripped out and 0's and
@ -381,7 +381,7 @@ the track.
We can now discuss the particular
portions of a track in detail. The
three gaps will be covered first.
three gaps will be covered first.
Unlike some other disk formats, the
size of the three gap types will vary
from drive to drive and even from
@ -424,13 +424,13 @@ clarity).
.bp
Gap 2 appears after each Address
Field and before each Data Field.
Field and before each Data Field.
Its length varies from five to ten bytes
on a normal drive. The primary
purpose of Gap 2 is to provide time
for the information in an Address
Field to be decoded by the computer
before a read or write takes place.
before a read or write takes place.
If the gap were too short, the
beginning of the Data Field might
spin past while DOS was still
@ -444,7 +444,7 @@ will occur in exactly the same spot
each time. This is due to the fact
that the drive which is rewriting
the Data Field may not be the one
which originally INITed or wrote it.
which originally INITed or wrote it.
Since the speed of the drives can
vary, it is possible that the write
could start in mid-byte. (See Figure
@ -472,7 +472,7 @@ boundary, thus altering an existing
byte. Figure 3.12 illustrates this.
.sp1
*** INSERT FIGURE 3.11 HERE ***
.SP1
.sp1
*** INSERT FIGURE 3.12 HERE ***
Gap 3 appears after each
@ -485,7 +485,7 @@ additional time needed to manipulate
the data that has been read before
the next sector is to be read. The
length of Gap 3 is not as critical as
that of Gap 2. If the
that of Gap 2. If the
following Address
Field is missed, DOS can always wait
for the next time it spins around
@ -503,7 +503,7 @@ An examination of the contents of the
two types of fields is in order.
The Address Field contains
the "address" or identifying
information about the Data Field
information about the Data Field
which follows it. The volume, track,
and sector number of any given sector
can be thought of as its "address",
@ -519,7 +519,7 @@ Figure 3.13.
The prologue consists of three bytes
which form a unique sequence, found
in no other component of the track.
in no other component of the track.
This fact enables DOS to locate an
Address Field with almost no
possibility of error. The three
@ -539,7 +539,7 @@ where it is positioned on a
particular diskette. The checksum is
computed by exclusive-ORing the first
three pieces of information, and is
used to verify its integrity.
used to verify its integrity.
Lastly follows the epilogue, which
contains the three bytes $DE, $AA and
$EB. Oddly, the $EB is always written
@ -558,6 +558,6 @@ Field. Much like the Address Field,
it consists of a prologue, data,
checksum, and an epilogue. (Refer to
Figure 3.14) The prologue is
different only in the third byte.
different only in the third byte.
The bytes are $D5, $AA, and $AD,
which again form a

View File

@ -1,9 +1,9 @@
.SP2
.sp2
DATA FIELD ENCODING
Due to Apple's hardware, it is not
possible to read all 256 possible
byte values from a diskette.
byte values from a diskette.
This is not a great problem, but it
does require that the data written to
the disk be encoded. Three different
@ -17,7 +17,7 @@ bits. It would thus require 512
"disk" bytes for each 256 byte sector
of data. Had this technique been used
for sector data, no more than 10
sectors would have fit on a track.
sectors would have fit on a track.
This amounts to about 88K of data per
diskette, or roughly 72K of space
available to the user; typical for 5
@ -43,7 +43,7 @@ comparable drives of the day.
Currently, of course, DOS 3.3
features 16 sectors per track and
provides a 23% increase in disk
storage over the 13 sector format.
storage over the 13 sector format.
This was made possible by a hardware
modification (the P6 PROM on the disk
controller card) which allowed a "6
@ -55,7 +55,7 @@ bytes.
These three different encoding
techniques
will now be covered in some detail.
will now be covered in some detail.
The hardware for DOS 3.2.1 (and
earlier versions of DOS) imposed a
number of restrictions upon how data
@ -86,7 +86,7 @@ contained in the Address Field. It
is quite easy to decode the data, since the
byte with the odd bits is simply
shifted left and logically ANDed with
the byte containing the even bits.
the byte containing the even bits.
This is illustrated in Figure 3.16.
.sp1
*** INSERT FIGURE 3.16 HERE ***
@ -121,7 +121,7 @@ bytes, thus leaving an exact mapping
between five bit data bytes and eight bit
"disk" bytes. The process of
converting eight bit data bytes to eight bit
"disk" bytes, then, is twofold.
"disk" bytes, then, is twofold.
An overview is diagrammed in Figure
3.17.
.sp1
@ -132,7 +132,7 @@ up a sector must be translated to
five bit bytes. This is done by the
"prenibble" routine at $B800. It is
a fairly involved process, involving
a good deal of bit rearrangement.
a good deal of bit rearrangement.
Figure 3.18 shows the before and
after of prenibbilizing. On the left
is a buffer of eight bit data bytes, as
@ -141,7 +141,7 @@ package by DOS. Each byte in this
buffer is represented by a letter (A,
B, C, etc.) and each bit by a number
(7 through 0). On the right side are
the results of the transformation.
the results of the transformation.
The primary buffer contains five
distinct areas of five bit bytes (the
top three bits of the eight bit bytes
@ -194,7 +194,7 @@ the checksum computation to decode
data, the
transformation shown in Figure 3.20
greatly facilitates the time
constraint. As the data is being
constraint. As the data is being
read from a sector the accumulator
contains the cumulative result of
all previous bytes, exclusive-ORed
@ -230,7 +230,7 @@ with only 64 needed. An additional
requirement was introduced to force
the mapping to be one to one, namely,
that there must be at least two
adjacent bits set, excluding bit 7.
adjacent bits set, excluding bit 7.
This produces exactly 64 valid "disk"
values. The initial transformation
is done by the prenibble routine
@ -301,7 +301,7 @@ into a "pseudo" or soft sector number
used by DOS. For example, if the
sector number found on the disk were a
2, this is used as an offset into a
table where the number $0B is found.
table where the number $0B is found.
Thus, DOS treats the physical sector
2 as sector 11 ($0B) for all intents
and purposes. This presents no
@ -322,7 +322,7 @@ access time.
It is interesting to point out that
Pascal, Fortran, and CP/M diskettes
all use software interleaving also.
all use software interleaving also.
However, each uses a different
sector order. A comparison of these
differences is presented in Figure
@ -330,4 +330,4 @@ differences is presented in Figure
.sp1
*** INSERT FIGURE 3.24 (22) HERE ***
.br
.nxch4
.nx ch4

View File

@ -38,7 +38,7 @@ with new files or expansions of
existing files. An example of the way
DOS uses sectors is given in Figure
4.1.
.SP1
.sp1
*** INSERT FIGURE 4.1 ***
.sp1
DISKETTE SPACE ALLOCATION
@ -96,7 +96,7 @@ following format (all byte offsets are
given in base 16, hexadecimal):
.np
VOLUME TABLE OF CONTENTS (VTOC) FORMAT
.SP1
.sp1
.un
BYTE DESCRIPTION
00 Not used
@ -126,14 +126,14 @@ C4-FF Bit maps for additional tracks if there are more
than 35 tracks per diskette
.bp
BIT MAPS OF FREE SECTORS ON A GIVEN TRACK
.SP1
.sp1
A four byte binary string of ones and zeros,
representing free and allocated sectors respectively.
Hexadecimal sector numbers are assigned to bit
positions as follows:
.sp1
BYTE SECTORS
+0 FEDC BA98
+0 FEDC BA98
+1 7654 3210
+2 .... .... (not used)
+3 .... .... (not used)
@ -151,7 +151,7 @@ An example of a VTOC sector is given
in Figure 4.2. This VTOC corresponds
to the map of the diskette given in
Figure 4.1.
.SP1
.sp1
*** INSERT FIGURE 4.2 ***
.bp
THE CATALOG
@ -187,7 +187,7 @@ sector (sector 1)
has a zero pointer to indicate
that there are no more catalog
sectors in the chain.
.SP1
.sp1
*** INSERT FIGURE 4.3 ***
In each catalog
@ -203,8 +203,8 @@ described on the following page.
.sp1
.np
CATALOG SECTOR FORMAT
.SP1
.UN
.sp1
.un
BYTE DESCRIPTION
00 Not used
01 Track number of next catalog sector (usually 11 hex)
@ -219,9 +219,9 @@ BA-DC Sixth file descriptive entry
DD-FF Seventh file descriptive entry
.bp
FILE DESCRIPTIVE ENTRY FORMAT
.SP1
.sp1
RELATIVE
.UN
.un
BYTE DESCRIPTION
00 Track of first track/sector list sector.
If this is a deleted file, this byte contains a hex
@ -260,9 +260,9 @@ was needed to describe them. There
are four entries in use and three
entries which have never been used
and contain zeros.
.SP1
.sp1
*** INSERT FIGURE 4.4 ***
.SP1
.sp1
THE TRACK/SECTOR LIST
Each file has
@ -276,7 +276,7 @@ sector points to this T/S List sector
which, in turn, points to each sector
in the file. This concept is
diagramed in Figure 4.5.
.SP1
.sp1
*** INSERT FIGURE 4.5 ***
.bp
The format of a Track/Sector List
@ -317,9 +317,9 @@ have no data sectors allocated
in the T/S List. This distinction is not always handled
correctly by DOS. The VERIFY command, for instance, stops when
it gets to the first zero T/S List entry and can not be used
to verify some random organization text files.
to verify some random organization text files.
An example T/S List sector is given in Figure 4.6.
An example T/S List sector is given in Figure 4.6.
The example file (HELLO, from our
previous examples) has only one data
sector, since it is less than 256
@ -328,7 +328,7 @@ sector and the T/S List sector, HELLO
is 2 sectors long, and this will be
the value shown when a CATALOG
command is done.
.SP1
.sp1
*** INSERT FIGURE 4.6 ***
.bp
Following the Track/Sector pointer in
@ -349,8 +349,8 @@ the Track/Sector List, DOS can read
each sector of the file in the correct order so
that the programmer need never know
that the data was broken up into
sectors at all.
.SP1
sectors at all.
.sp1
TEXT FILES
The TEXT data type is the least
@ -389,7 +389,7 @@ less efficient in the use of disk space than
with a BINARY type file, since each
digit must occupy a full byte in the
file.
.SP1
.sp1
*** INSERT FIGURE 4.7 ***
.bp
BINARY FILES
@ -399,7 +399,7 @@ shown in Figure 4.8. An exact copy of
the memory involved is written to the
disk sector(s), preceded by the
memory address where it was found and
the length (a total of four bytes).
the length (a total of four bytes).
The address and length (in low order,
high order format) are those given in
the A and L keywords from the BSAVE
@ -419,9 +419,9 @@ address either by providing the A
entered, or by changing the address
in the first two bytes of the file on
the diskette.
.SP1
.sp1
*** INSERT FIGURE 4.8 ***
.SP1
.sp1
APPLESOFT AND INTEGER FILES
A BASIC program, be it APPLESOFT or
@ -431,7 +431,7 @@ format of an APPLESOFT file type is
given in Figure 4.9 and that of
INTEGER BASIC in 4.10. When the SAVE
command is typed, DOS determines the
location of the BASIC program image
location of the BASIC program image
in memory and its length. Since a
BASIC program is always loaded at a
location known to the BASIC
@ -453,7 +453,7 @@ scope of this manual, but a
breakdown of the example INTEGER
BASIC program is given in Figure
4.10.
.SP1
.sp1
*** INSERT FIGURES 4.9 AND 4.10 ***
.bp
OTHER FILE TYPES (S,R,A,B)
@ -478,7 +478,7 @@ based on additional information
stored with the image itself. The
format for this type of file is given
in the documentation accompanying the
DOS TOOLKIT.
DOS TOOLKIT.
It is recommended that if the
reader requires more information
about R files he should refer to that

View File

@ -2,7 +2,7 @@
.np
.ce
CHAPTER 5 - THE STRUCTURE OF DOS
.sp 2
.sp2
DOS MEMORY USE
DOS is an assembly language program
@ -37,7 +37,7 @@ on a 48K system, it will not boot on
less than 48K since the RAM DOS
occupied does not exist on a smaller
machine.
.SP1
.sp1
*** INSERT FIGURE 5.1 ***
A diagram of DOS's memory for a 48K
@ -57,7 +57,7 @@ changed from 3, the space occupied by
the file buffers also changes. This
affects the placement of HIMEM,
moving it up or down with fewer or
more buffers respectively.
more buffers respectively.
The 3.5K
above the file buffers is occupied by
@ -69,7 +69,7 @@ interfacing to BASIC, interpreting
commands, and managing the file
buffers. All disk functions are
passed on via subroutine calls to the
file manager.
file manager.
.bp
The file manager,
occupying about 4.3K, is a collection
@ -85,7 +85,7 @@ lanaguage program which is not part
of DOS. This interface is generalized
through a group of vectors in page 3
of RAM and is documented in the next
chapter.
chapter.
The last 2.5K of DOS is the
Read/Write Track/Sector (RWTS)
@ -147,19 +147,19 @@ table itself starts at $3D0.
.ll60
.bp
DOS VECTOR TABLE ($3D0-$3FF)
.NP
.np
ADDR USAGE
3D0 A JMP (jump or GOTO) instruction to the DOS warmstart
routine. This routine reenters DOS but does not
routine. This routine reenters DOS but does not
discard the current BASIC program and does not reset
MAXFILES or other DOS environmental variables.
3D3 A JMP to the DOS coldstart routine. This routine
3D3 A JMP to the DOS coldstart routine. This routine
reinitializes DOS as if it was rebooted, clearing the
current BASIC file and resetting HIMEM.
3D6 A JMP to the DOS file manager subroutine to allow a
user written assembly language program to call it.
3D9 A JMP to the DOS Read/Write Track/Sector (RWTS)
routine to allow user written assembly language
routine to allow user written assembly language
programs to call it.
3DC A short subroutine which locates the input parameter
list for the file manager to allow a user written
@ -170,9 +170,9 @@ ADDR USAGE
up input parameters before calling RWTS.
3EA A JMP to the DOS subroutine which "reconnects" the DOS
intercepts to the keyboard and screen data streams.
3EF A JMP to the routine which will handle a BRK machine
3EF A JMP to the routine which will handle a BRK machine
language instruction. This vector is only supported by
the AUTOSTART ROM. Normally the vector contains the
the AUTOSTART ROM. Normally the vector contains the
address of the monitor ROM subroutine which displays
the registers.
3F2 LO/HI address of routine which will handle RESET for
@ -185,7 +185,7 @@ ADDR USAGE
RESET was pressed. If a power-up occured, the
AUTOSTART ROM ignores the address at 3F2 (since it has
never been initialized) and attempts to boot a
diskette. To prevent this from happening when you
diskette. To prevent this from happening when you
change $3F2 to handle your own RESETs, EOR (exclusive
OR) the new value at $3F2 with a $A5 and store the
result in the power-up byte.
@ -216,7 +216,7 @@ The location of these stages on the
diskette and a memory map are given
in Figure 5.2 and a description of
the bootstrap process follows.
.SP1
.sp1
*** INSERT FIGURE 5.2 ***
The first boot stage (let's call it
@ -368,7 +368,7 @@ The various stages of the bootstrap
process will be covered again in greater
detail in Chapter 8, DOS PROGRAM
LOGIC.
.SP1
.sp1
*** INSERT FIGURE 5.3 HERE ***
.BR
.NX CH6.1
.br
.nx CH6.1

View File

@ -29,7 +29,7 @@ eight two byte toggles that essentially
represent pulling a TTL line high or
low. Applications which could use
direct disk access range from a
user written operating system to DOS-independent
user written operating system to DOS-independent
utility programs. The
device address assignments are given
in Figure 6.1.
@ -64,7 +64,7 @@ ADDRESS LABEL DESCRIPTION
.bp
The addresses are slot dependent and
the offsets are computed by
multiplying the slot number by 16.
multiplying the slot number by 16.
In hexadecimal this works out nicely
and we can add the value $s0 (where s
is the slot number) to the base
@ -106,7 +106,7 @@ Basically, each of the four phases
(0-3) must be turned on and then off
again. Done in ascending order, this
moves the arm inward. In descending
order, this moves the arm outward.
order, this moves the arm outward.
The timing between accesses to these
locations is critical, making this a
non-trivial exercise. It is
@ -119,10 +119,10 @@ MOTOR OFF/ON:
.sp1
.nf
LDA $C088,X Turn motor off.
.SP1
.sp1
LDA $C089,X Turn motor on.
.SP1
.FI
.sp1
.fi
NOTE: A sufficient delay should be
provided to allow the motor time to
come up to speed. Shugart recommends
@ -132,39 +132,39 @@ until data starts to change.
.bp
.nf
ENGAGE DRIVE 1/2:
.SP1
.sp1
LDA $C08A,X Engage drive 1.
.sp1
LDA $C08B,X Engage drive 2.
.sp1
READ A BYTE:
.SP1
.sp1
READ LDA $C08C,X
BPL READ
.SP1
.FI
.sp1
.fi
NOTE: $C08E,X must already have been
accessed to assure Read mode. The
loop is necessary to assure that the
accumulator will contain valid data.
accumulator will contain valid data.
If the data latch does not yet
contain valid data the high bit will
be zero.
.sp1
.nf
SENSE WRITE PROTECT:
.SP1
.sp1
LDA $C08D,X
LDA $C08E,X Sense write protect.
BMI ERROR If high bit set, protected.
.sp1
WRITE LOAD AND WRITE A BYTE
.SP1
.sp1
LDA DATA
STA $C08D,X Write load.
ORA $C08C,X Write byte.
.sp1
.FI
.fi
NOTE: $C08F,X must already have been
accessed to insure Write mode and a
100 microsecond delay should be
@ -195,7 +195,7 @@ without an adjustment.
WRITE STA $C08D,X (5)
ORA $C08C,X (4)
RTS (6)
.SP2
.sp2
CALLING READ/WRITE TRACK/SECTOR (RWTS)
Read/Write Track/Sector (RWTS) exists
@ -205,7 +205,7 @@ roughly the top third of the DOS
program. The interface to RWTS is
standardized and thoroughly documented by Apple
and may be called by a
program running outside of DOS.
program running outside of DOS.
There are two subroutines which must
be called or whose function must be
@ -241,7 +241,7 @@ on the facing page (offsets are given in hexadecimal):
.bp
.nf
INPUT/OUTPUT CONTROL BLOCK - GENERAL FORMAT
.SP1
.sp1
BYTE DESCRIPTION
00 Table type, must be $01
01 Slot number times 16 (s0: s=slot. Example: $60)
@ -272,14 +272,14 @@ BYTE DESCRIPTION
10 Drive number of last access (must be initialized)
.sp1
DEVICE CHARACTERISTICS TABLE
.SP1
.sp1
BYTE DESCRIPTION
00 Device type (should be $00 for DISK II)
01 Phases per track (should be $01 for DISK II)
02-03 Motor on time count (should be $EFD8 for DISK II)
.bp
RWTS IOB BY CALL TYPE
.SP1
.sp1
SEEK Move disk arm to desired track
.sp1
Input: Byte 00 - Table type ($01)
@ -293,7 +293,7 @@ Input: Byte 00 - Table type ($01)
.sp1
Output: Byte 0D - Return code (See previous definition)
0F - Current Slot number * 16
10 - Current Drive number
10 - Current Drive number
.sp1
READ Read a sector into a specified buffer
.sp1
@ -314,7 +314,7 @@ Input: Byte 00 - Table type ($01)
Output: Byte 0D - Return code (See previous definition)
0E - Current Volume number
0F - Current Slot number * 16
10 - Current Drive number
10 - Current Drive number
.bp
WRITE Write a sector from a specified buffer
.sp1
@ -335,7 +335,7 @@ Input: Byte 00 - Table type ($01)
Output: Byte 0D - Return code (See previous definition)
0E - Current Volume number
0F - Current Slot number * 16
10 - Current Drive number
10 - Current Drive number
.sp1
FORMAT Initialize the diskette (does not put DOS on disk,
create a VTOC/CATALOG, or store HELLO program)
@ -353,6 +353,6 @@ Input: Byte 00 - Table type ($01)
Output: Byte 0D - Return code (See previous definition)
0E - Current Volume number
0F - Current Slot number * 16
10 - Current Drive number
10 - Current Drive number
.bp
.nx ch6.2

View File

@ -7,7 +7,7 @@ the central third of the DOS program.
The interface to these routines is
generalized in such a way that they
may be called by a program running
outside of DOS. The definition of
outside of DOS. The definition of
this interface has
never been published by APPLE (or
anyone else, for that manner) but
@ -19,7 +19,7 @@ these routines may be relied upon as
"safe". Indeed, the new FID utility
program
uses these routines to process files
on the diskette.
on the diskette.
There are
two subroutines which must be called
@ -81,7 +81,7 @@ The general format of the file
manager parameter list is as follows:
.bp
FILE MANAGER PARAMETER LIST - GENERAL FORMAT
.NP
.np
BYTE DESCRIPTION
00 Call type: 01=OPEN 05=DELETE 09=RENAME
02=CLOSE 06=CATALOG 0A=POSITION
@ -97,7 +97,7 @@ BYTE DESCRIPTION
FILE MANAGER PARAMETER LIST BY CALL TYPE below.
0A Return code (note: not all return codes can occur
for any call type). The processor CARRY
flag is set upon return from the file
flag is set upon return from the file
manager if there is a non-zero return code:
00=No errors
01=Not used ("LANGUAGE NOT AVAILABLE")
@ -114,7 +114,7 @@ BYTE DESCRIPTION
0C-0D Address of a 45 byte buffer which will be used by the
file manager to save its status between calls. This
area is called the file manager workarea and need not
be initialized by the caller but the space must be
be initialized by the caller but the space must be
provided and this two byte address field initialized.
(addresses are in low/high order format)
0E-0F Address of a 256 byte buffer which will be used by the
@ -124,15 +124,15 @@ BYTE DESCRIPTION
10-11 Address of a 256 byte buffer which will be used by the
file manager to maintain the data sector buffer.
Buffer need not be initialized by the caller.
.SP1
.sp1
*** INSERT FIGURE 6.2 ***
.bp
FILE MANAGER PARAMETER LIST BY CALL TYPE
.NP
.np
OPEN Locates or creates a file. A call to POSITION should
follow every OPEN.
.sp1
Input: Byte 00 - 01
Input: Byte 00 - 01
02/03 - Fixed record length or 0000 if variable
04 - Volume number or 00 for any volume
05 - Drive number to be used (01 or 02)
@ -280,7 +280,7 @@ Input: Byte 00 - 0B
.sp1
Output: Byte 0A - Return code
.sp2
VERIFY Verify that there are no bad sectors in a file by
VERIFY Verify that there are no bad sectors in a file by
reading every sector.
.sp1
Input: Byte 00 - 0C
@ -292,7 +292,7 @@ DOS BUFFERS
Usually it is desirable to use one of DOS's buffers when
calling the file manager to save memory. DOS buffers consist of
each of the three buffers used by the file manager (file
each of the three buffers used by the file manager (file
manager workarea, T/S List sector, and data sector) as well as
a 30 byte file name buffer and some link pointers. All together
a DOS buffer occupies 595 bytes of memory. The address of the
@ -300,7 +300,7 @@ first DOS buffer is stored in the first two bytes of DOS ($9D00
on a 48K APPLE II). The address of the next buffer is stored in
the first and so on in a chain of linked elements. The link
address to the next buffer in the last buffer is zeros. If the
buffer is not being used by DOS, the first byte of the file
buffer is not being used by DOS, the first byte of the file
name field is a hex 00. Otherwise, it contains the first
character of the name of the open file. The assembly language
programmer should follow these conventions to avoid having DOS
@ -309,18 +309,18 @@ name of the file should be stored in the buffer to reserve it
for exclusive use (or at least a non-zero byte stored on the
first character) and later, when the user is through with the
buffer, a 00 should be stored on the file name to return it
to DOS's use. If the later is not done, DOS will eventually
run out of available buffers and will refuse even to do a
to DOS's use. If the later is not done, DOS will eventually
run out of available buffers and will refuse even to do a
CATALOG command. A diagram of the DOS
buffers for MAXFILES 3 is given in
Figure 6.3 and
Figure 6.3 and
the format of a DOS buffer is given below.
.SP1
.sp1
*** INSERT FIGURE 6.3 ***
.sp1
.ne10
DOS BUFFER FORMAT
.NP
.np
BYTE DESCRIPTION
000/0FF Data sector buffer (256 bytes in length)
100/1FF T/S List sector buffer (256 bytes in length)
@ -401,15 +401,15 @@ COMMON ALGORITHMS
Given below are several pieces of code
which are used when working with DOS:
.SP1
.sp1
.ne5
LOCATE A FREE DOS BUFFER
The following subroutine may be used
to locate an unallocated DOS buffer
for use with the DOS file manager.
.SP1
.NP
.sp1
.np
FBUFF LDA $3D2 LOCATE DOS LOAD POINT
STA $1
LDY #0
@ -445,11 +445,11 @@ call RWTS or the file manager to
insure that DOS is present on this
machine.
.sp1
.NP
.np
LDA $3D0 GET VECTOR JMP
CMP #$4C IS IT A JUMP?
BNE NODOS NO, DOS NOT LOADED
.SP2
.sp2
.ne5
WHICH VERSION OF DOS IS ACTIVE?
@ -469,7 +469,7 @@ the DOS version may be required:
.sp2
.ne5
WHICH BASIC IS SELECTED?
.PP
Some programs depend upon either the
INTEGER BASIC ROM or the APPLESOFT
ROM. To find out which is active and
@ -481,7 +481,7 @@ is used for INTEGER BASIC and $4C is
used for APPLESOFT. To set up for
APPLESOFT, for example:
.sp1
.NP
.np
LDA #$4C CODE FOR APPLESOFT
JSR SETBSC CALL SUBROUTINE
BNE ERROR LANGUAGE NOT AVAILABLE

View File

@ -64,18 +64,18 @@ be followed to do this:
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
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
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
.sp1
.ne5
AVOIDING RELOAD OF LANGUAGE CARD

View File

@ -5,8 +5,8 @@
.m22
.m48
.fo ''-%-
.pn 5
.pi 0
.pn5
.pi0
.br
.np
.ce
@ -34,7 +34,7 @@ are given in decimal, addresses in
hexadecimal (base 16).
.sp1
DISK II CONTROLLER CARD ROM - BOOT 0
.SP1
.sp1
.pi0
.ul
ADDRESS
@ -44,9 +44,9 @@ C600-C65B This routine is the first code executed when a disk
C600G or 6 control-P.
Dynamically build a translate table for converting
disk codes to six bit hex at location $356-$3FF.
Call an RTS instruction in the monitor ROM and
Call an RTS instruction in the monitor ROM and
extract the return address from the stack to find out
the address of this controller card ROM.
the address of this controller card ROM.
Use this address to determine the slot number of this
drive by shifting $Csxx.
Save the slot number times 16 ($s0)
@ -92,9 +92,9 @@ C65C-C6FA This subroutine reads the sector number stored at
Otherwise, go to $801 to begin executing the second
stage of the bootstrap.
.sp1
FIRST RAM BOOTSTRAP LOADER - BOOT 1
FIRST RAM BOOTSTRAP LOADER - BOOT 1
.sp1
.Ul
.ul
ADDRESS
.np
0801-084C This routine loads the second RAM loader, Boot 2,
@ -104,7 +104,7 @@ ADDRESS
Create the address of the ROM sector read subroutine
(C65C in our case) and store it at $3E,$3F.
Pick up the first memory page in which to read Boot 2
from location $8FE, add the length of Boot 2 in
from location $8FE, add the length of Boot 2 in
sectors from $8FF, and set that value as the first
address to which to read (read last page first).
081F Get sector to read, if zero, go to $839.
@ -124,8 +124,8 @@ ADDRESS
master disk, $B700 in its final relocated location).
.sp1
DOS 3.3 MAIN ROUTINES
.SP1
.Ul
.sp1
.ul
ADDRESS
.np
9D00-9D0F Relocatable address constants
@ -144,7 +144,7 @@ ADDRESS
and this table contains the address of the routine
which handles each state from state 0 to state 6.
.np
9D1E-9D55 Command handler entry point table. This table
9D1E-9D55 Command handler entry point table. This table
contains the address of a command handler subroutine
for each DOS command in the following standard order:
INIT A54F
@ -186,7 +186,7 @@ ADDRESS
9D5E Address of BASIC warmstart.
9D60 Address of BASIC relocate (APPLESOFT only).
.np
9D62-9D6B Image of the entry point vector for INTEGER BASIC.
9D62-9D6B Image of the entry point vector for INTEGER BASIC.
This image is copied to 9D56 if INTEGER BASIC is made
active.
.np
@ -213,7 +213,7 @@ ADDRESS
Set NOMON C,I,O.
Set video intercept handler state to 0.
Coldstart or warmstart the current BASIC (exit DOS).
(DOS will next gain control when BASIC prints its
(DOS will next gain control when BASIC prints its
input prompt character)
.np
9DEA-9E50 First entry processing for DOS. This routine is
@ -227,7 +227,7 @@ ADDRESS
Set MAXFILES to 3 by default.
Call A7D4 to build the DOS file buffers.
If an EXEC was active, close the EXEC file
Set the video intercept state to 0 and indicate
Set the video intercept state to 0 and indicate
warmstart status by calling A75B.
If the last command executed was not INIT (this DOS
was not just booted), go to 9E45.
@ -242,7 +242,7 @@ ADDRESS
If so, go to A180 to execute it. Otherwise, return
to caller.
.np
9E51-9E7F An image of the DOS 3-page jump vector which the
9E51-9E7F An image of the DOS 3-page jump vector which the
above routine copies to $3D0-$3FF. See Chapter 5 for
a description of its contents.
.np
@ -252,7 +252,7 @@ ADDRESS
go to 9E9E.
Get value in A register at entry and echo it on the
screen (erases flashing cursor).
If in read state (reading a file) go to A626 to get
If in read state (reading a file) go to A626 to get
next byte from disk file.
Otherwise, call 9DEA to do first entry processing.
Put cursor on screen in next position.
@ -287,7 +287,7 @@ ADDRESS
If read flag is on (file being read) and output is a
"?" character (BASIC INPUT), go to state 6 to skip
it.
If read flag is on and output is prompt character
If read flag is on and output is prompt character
($33) go to state 2 to ignore the line.
Set state to 2 (ignore non-DOS command) just in case.
If output character is not a control-D, go to
@ -329,7 +329,7 @@ ADDRESS
Exit DOS with echo on screen if MON O.
.np
9F61-9F70 State 5 output handler. --Start of WRITE data line--
If the character is a control-D, go to state 0 to
If the character is a control-D, go to state 0 to
immediately exit write mode.
If the character is a line feed, write it and exit,
staying in state 5.

View File

@ -8,13 +8,13 @@
If it doesn't match and if there are more entries
left to check, go back to 9FD6.
If it does match, go to A01B.
Otherwise, if command was not found in the table,
Otherwise, if command was not found in the table,
check to see if the first character was a control-D.
If so, go to A6C4 to print "SYNTAX ERROR".
Otherwise, call A75B to reset the state and warmstart
flag and go to 9F95 to echo the command and exit.
(the command must be for BASIC, not DOS)
A01B Compute an index into the operand table for the
A01B Compute an index into the operand table for the
command which was entered.
Call A65E to see if a BASIC program is executing.
If not, and the command is not a direct type command,
@ -26,7 +26,7 @@
is a legal operand for this command.
If not, go to A0A0.
Otherwise, clear the filename buffer (call A095).
Flush to the next non-blank (call A1A4) and copy
Flush to the next non-blank (call A1A4) and copy
the filename operand to the first filename buffer.
Skip forward to a comma if one was not found yet.
If a second filename is legal for this command, use
@ -82,7 +82,7 @@ A17A-A17F Call A180 to process the command, then exit via echo
A180-A192 Do command.
Reset the video intercept state to zero.
Clear the file manager parameter list.
Using the command index, get the address of the
Using the command index, get the address of the
command handling routine from the command handler
routine table at 9D1E and go to it.
Command handler will exit to caller of this routine.
@ -93,12 +93,12 @@ A193-A1A3 Get next character on command line and check to see
A1A4-A1AD Flush command line characters until a non-blank is
found.
.np
A1AE-A1B8 Clear the file manager parameter list at B5BA to
A1AE-A1B8 Clear the file manager parameter list at B5BA to
zeros.
.np
A1B9-A1D5 Convert numeric operand from command line. Call
either A1D6 (decimal convert) or A203 (hex convert)
depending upon the presence or lack thereof of a
depending upon the presence or lack thereof of a
dollar sign ($).
.np
A1D6-A202 Decimal convert subroutine.

View File

@ -57,7 +57,7 @@ A331-A35C BSAVE command handler.
Open and verify a B type file (A3D5).
Write the A keyword value as the first two bytes of
the file.
Write the L keyword value as the next two bytes of
Write the L keyword value as the next two bytes of
the file.
Use the A value to exit by writing a range of bytes
from memory to the file.
@ -92,7 +92,7 @@ A397-A3D4 SAVE command handler.
A3BC Open and test for I type file (A3D5).
Compute program length (HIMEM-PGMSTART).
Write this two byte length to file.
Exit by writing program image from PGMSTART as a
Exit by writing program image from PGMSTART as a
range of bytes (A3FF).
.np
A3D5-A3DF Open and test file type.
@ -124,7 +124,7 @@ A413-A479 LOAD command handler.
Which BASIC is active?
If INTEGER, go to A450.
Select APPLESOFT BASIC (A4B1). This call could result
in DOS losing control if the RAM version must be
in DOS losing control if the RAM version must be
run.
Read first two bytes of file as length of program.
Add length to LOMEM (program start) to compute
@ -159,7 +159,7 @@ A4B1-A4D0 Select desired BASIC.
Save current command index in case we must RUN
APPLESOFT.
If INTEGER, go to A59E to select it.
Otherwise, copy primary file name to secondary
Otherwise, copy primary file name to secondary
buffer to save it in case RAM APPLESOFT is needed.
Go to A57A to set APPLESOFT.
.np

View File

@ -20,7 +20,7 @@ A59E-A5B1 INT command handler.
A5B2-A5C5 Set ROM to desired BASIC.
(This routine is passed a $4C for APPLESOFT or a $20
for INTEGER, since these bytes appear at $E000 in
these BASICs. It will work regardless of which
these BASICs. It will work regardless of which
BASIC is onboard)
If desired BASIC is already available, exit.
Try selecting ROM card.
@ -76,7 +76,7 @@ A65E-A678 Test to see if BASIC is running a program or is in
immediate command mode.
If active BASIC is INTEGER, go to A672.
If line number is greater than 65280 and prompt is
"]" then APPLESOFT is in immediate mode.
"]" then APPLESOFT is in immediate mode.
Otherwise, it is executing a program.
Exit to caller with appropriate return code.
A672 Check $D9 to determine whether BASIC is executing a

View File

@ -14,7 +14,7 @@ A909-A940 Command valid keywords table.
This table is used to determine which keywords are
required or may be given for any DOS command.
Each command has a two byte entry with 16 flags,
indicating which keywords may be given. The flag
indicating which keywords may be given. The flag
bit settings are as follows:
.ul
BIT MEANING
@ -71,7 +71,7 @@ A909-A940 Command valid keywords table.
.np
A941-A94A Keyword name table.
This table contains all the ASCII names of the DOS
keywords in standard order. Each keyword name
keywords in standard order. Each keyword name
occupies one byte:
V,D,S,L,R,B,A,C,I,O
.np
@ -133,13 +133,13 @@ A971-AA3E Error message text table.
.np
AA3F-AA4F Error message text offset index table.
This table contains the offset in bytes to the text
of any given error message in the table above.
of any given error message in the table above.
Entries are one byte each for each error code number.
.np
AA4F-AA65 DOS main routines variables.
AA4F Current file buffer address (2 bytes).
AA51 Status flags: $01=READ state, $00=Warmstart,
$80=Coldstart, $40=APPLESOFT RAM
AA51 Status flags: $01=READ state, $00=Warmstart,
$80=Coldstart, $40=APPLESOFT RAM
AA52 DOS CSWL intercept state number.
AA53 Address of true CSWL handler (2 bytes).
AA55 Address of true KSWL handler (2 bytes).
@ -202,7 +202,7 @@ AAFD-AB05 File manager external entry point (from $3D6).
Is X register zero?
If so, allow new files by simulating an INIT command
index.
Otherwise, require old file by simulating a LOAD
Otherwise, require old file by simulating a LOAD
command index.
Fall through to main file manager entry point.
.np

View File

@ -79,7 +79,7 @@ AC96-ACA7 READ A RANGE OF BYTES subcode handler.
Read a byte (ACA8).
Point $42,$43 at range address and add one to address
Store byte read at address.
Loop back to AC96. (length check will exit file
Loop back to AC96. (length check will exit file
manager when length is zero.)
.np
ACA8-ACB8 Read a data byte.
@ -245,7 +245,7 @@ AE8E-AF07 INIT function handler.
Set up link from this directory sector to next (track
$11, sector-1).
Call RWTS to write directory sector.
Write each sector on track in this way except for
Write each sector on track in this way except for
sector zero.
On last sector (sector 1) zero link pointer.
Point RWTS parms at DOS load point (B7C2).

View File

@ -15,7 +15,7 @@ AF5E-AFDB Read a T/S List sector to file buffer.
Is first or next wanted?
If first, go to AFB5 to continue.
Otherwise, get link to next T/S List from this one.
If link is non-zero, use it to find next one and go
If link is non-zero, use it to find next one and go
to AFB5.
Otherwise, we are out of T/S Lists for this file.
If we are reading file, exit with error code.
@ -113,7 +113,7 @@ B0B6-B133 Read next data sector (if necessary).
If non-zero, go to B114.
Otherwise, if not writing, exit with error (no data
to read there).
If writing, allocate a new sector and store its
If writing, allocate a new sector and store its
track/sector location in the list at this point
(B134).
Go to B120.
@ -196,7 +196,7 @@ B23A-B243 Switch to second pass in directory scan.
B244-B2C2 Allocate a disk sector.
Is there a track currently allocated to this file?
If not, go to B26A to find a track with free sectors.
B249 Otherwise, decrement sector number to get next
B249 Otherwise, decrement sector number to get next
possible free sector number.
If there are no more sectors on this track, go to
B265 to find a new track.
@ -225,7 +225,7 @@ B244-B2C2 Allocate a disk sector.
Compute bit map index (tracknumber*4).
Copy track bit map from VTOC to workarea, watching
to see if all four bytes are zero (track is full).
In any case, set all four bytes in VTOC to zero
In any case, set all four bytes in VTOC to zero
(allocate all sectors).
If no free sectors in the track, go to B272 to try
next track.
@ -337,7 +337,7 @@ B4BB-B5BA DIRECTORY sector buffer.
B5BB-B5D0 File manager parameter list.
B5BB Opcode
B5BC Subcode
B5BD Eight bytes of variable parameters depending on
B5BD Eight bytes of variable parameters depending on
opcode.
B5C5 Return code.
B5C7 Address of file manager workarea buffer.
@ -385,7 +385,7 @@ B600-B6FF Start of Boot 2/RWTS image.
on track 0, sector 0.
B65D DOS 3.3 patch area.
B65D APPEND patch flag.
B65E APPEND patch. Come here when file manager driver
B65E APPEND patch. Come here when file manager driver
gets an error other than end of data.
Locate and free the file buffer.
Clear the APPEND flag.

View File

@ -5,7 +5,7 @@ B700-B749 DOS 2nd stage boot loader.
Create new stack.
Call SETVIC ($FE93) and SETKBD ($FE89).
Exit to DOS coldstart ($9D84).
.NP
.np
B74A-B78C Put DOS on tracks 0-2.
Set RWTS parmlist to write DOS to disk.
Call Read/Write group of pages ($B793).
@ -20,7 +20,7 @@ B793-B7B4 Read/Write a group of pages.
B7B5-B7C1 Disable interrupts and call RWTS.
.np
B7C2-B7D5 Set RWTS parameters for writing DOS.
.NP
.np
B7D6-B7DE Zero current buffer.
Zero 256 bytes pointed to by $42,$43.
Exit to caller.
@ -51,14 +51,14 @@ B7E8-B7F8 RWTS parmlist.
B7F6 Volume number found.
B7F7 Slot number found.
B7F8 Drive number found.
.NP
.np
B7F9-B7FA Unused.
.NP
.np
B7FB-B7FE Device Characteristics Table (DCT).
B7FB Device type (should be $00).
B7FC Phases per track (should be $01).
B7FD Motor on time count (2 bytes - should be $EF, $D8).
.NP
.np
B7FF Unused.
.np
B800-B829 PRENIBBLE routine.
@ -128,7 +128,7 @@ B8DC-B943 READ routine.
B944-B99F RDADR routine.
Read an Address Field.
Reads starting address marks ($D5/$AA/$96), address
information (volume/track/sector/checksum), and
information (volume/track/sector/checksum), and
closing address marks ($DE/$AA).
On entry: X-reg:Slot number times 16
Read mode (Q6L,Q7L)
@ -181,13 +181,13 @@ BA29-BA68 Write Translate Table.
Values range from $96 to $FF.
Codes with more than one pair of adjacent zeros or
with no adjacent ones are excluded.
.NP
.np
BA69-BA95 Unused.
.np
BA96-BAFF Read Translate Table.
Contains 8 bit bytes used to convert 6 bit "nibbles".
Values range from $96 to $FF.
Codes with more than one pair of adjacent zeros or
Codes with more than one pair of adjacent zeros or
with no adjacent ones are excluded.
.np
BB00-BBFF Primary Buffer.
@ -220,7 +220,7 @@ BCC4-BCDE Write double byte subroutine.
BCDF-BCFF Unused.
.np
BD00-BD18 Main entry to RWTS.
Upon entry, store Y-reg and A-reg at $48,$49 as
Upon entry, store Y-reg and A-reg at $48,$49 as
pointers to the IOB.
Initialize maximum number of recals at 1 and seeks
at 4.
@ -242,9 +242,9 @@ BD54-BD73 Move pointers in IOB to zero page for future use.
BD74-BD8F Select appropriate drive and save drive being used
as high bit of $35. 1=drive 1, 0=drive 2.
Get test results. If drive was on, branch to $BD90.
Wait for capacitor to discharge using MSWAIT
Wait for capacitor to discharge using MSWAIT
subroutine at $BA00.
BD90-BDAA Get destination track and go to it using MYSEEK
BD90-BDAA Get destination track and go to it using MYSEEK
subroutine at $BE5A.
Check test result again and if drive was on,
branch to TRYTRK at $BDAB.
@ -281,17 +281,17 @@ BE0B-BE0C Used to branch to ALLDONE at $BE46.
BE0D-BF0F FORMDSK
Jump to DSKFORM at $BEAF.
BE10-BE25 RTTRK
Check volume number found against volume number
Check volume number found against volume number
wanted.
If no volume was specified, then no error.
If specified volume doesn't match, load A-reg with
$20 (volume mismatch error) and exit via HNDLERR
$20 (volume mismatch error) and exit via HNDLERR
at $BE48.
BE26-BE45 CRCTVOL
Check to see if sector is correct.
Use ILFAV table at $BFB8 for software sector
interleaving.
If wrong sector, try again by branching back to
If wrong sector, try again by branching back to
TRYADR at $BDC1.
If sector correct, find out what operation to do.
If write, branch to WRIT at $BE51.
@ -310,11 +310,11 @@ BE51-BE59 WRITE
If the write was good, exit via ALLDONE ($BE46).
If bad write, load A-reg with $10 (write protect
error) and exit via HNDLERR ($BE48).
BE5A-BE8D MYSEEK
Provides necessary housekeeping before going to
BE5A-BE8D MYSEEK
Provides necessary housekeeping before going to
SEEKABS routine.
Determines number of phases per track and stores
track information in appropriate slot dependent
track information in appropriate slot dependent
location.
BE8E-BE94 XTOY routine.
Put slot in Y-reg by transferring X-reg divided
@ -331,7 +331,7 @@ BEAF-BF0C INIT command handler
Allow 48 retries during initialization.
Double check that the first sector found is zero
after calling TRACK WRITE.
Increment the track number after successfully
Increment the track number after successfully
formatting a track.
Loop back until 35 tracks are done.
BF0D-BF61 TRACK WRITE routine.
@ -339,7 +339,7 @@ BF0D-BF61 TRACK WRITE routine.
Preceed it with 128 self-sync bytes.
Follow them with sectors 0 through 15 in sequence.
Set retry count for verifying the track at 48.
Fill the sector initilization map with positive
Fill the sector initilization map with positive
numbers.
Loop through a delay period to bypass most of the
initial self-sync bytes.
@ -355,7 +355,7 @@ BF62-BF87 VERIFY TRACK routine.
This routine reads all 16 sectors from the track that
was just formatted.
If an error occurs during the read of either the
Address Field or the Data Field, the number of
Address Field or the Data Field, the number of
retries is decremented.
The routine continues reading until retries is zero.
Calls Sector Map routine ($BF88).
@ -367,7 +367,7 @@ BF88-BFA7 Sector Map routine.
if that value is greater than zero.
Upon completion of track zero, the sync count is
decremented by two if it is at least 16.
.NP
.np
BFA8-BFB7 Sector Initialization Map used to mark sectors as
they are initialized.
Contains a $30 prior to initialization of a track.

View File

@ -2,7 +2,7 @@
.nf
.na
DOS ZERO PAGE USAGE
.SP1
.sp1
.un
BYTE USE
24 Cursor horizontal (DOS)

View File

@ -1,39 +1,39 @@
.na
.NF
.nf
.ce
TABLE OF CONTENTS
.SP3
TABLE OF CONTENTS
.sp3
CHAPTER 1
.SP1
.UL
.sp1
.ul
INTRODUCTION
.SP3
.sp3
CHAPTER 2
.SP1
.UL
.sp1
.ul
THE EVOLUTION OF DOS
.SP1
.sp1
DOS 3
DOS 3.1
DOS 3.2
DOS 3.2.1
DOS 3.3
.SP3
.sp3
CHAPTER 3
.SP1
.UL
.sp1
.ul
THE DISK II HARDWARE AND TRACK FORMATTING
.SP1
.sp1
DISK ORGANIZATION
TRACK FORMATTING
DATA FIELD ENCODING
SECTOR INTERLEAVING
.SP3
.sp3
CHAPTER 4
.SP1
.UL
.sp1
.ul
DISKETTE DATA FORMATS
.SP1
.sp1
DISKETTE SPACE ALLOCATION
THE VTOC
THE CATALOG
@ -43,21 +43,21 @@ BINARY FILES
APPLESOFT AND INTEGER FILES
OTHER FILE TYPES (S,R,A,B)
EMERGENCY REPAIRS
.SP3
.sp3
CHAPTER 5
.SP1
.UL
.sp1
.ul
THE STRUCTURE OF DOS
.SP1
.sp1
DOS MEMORY USE
THE DOS VECTORS IN PAGE 3
WHAT HAPPENS DURING BOOTING
.SP3
.sp3
CHAPTER 6
.SP1
.UL
.sp1
.ul
USING DOS FROM ASSEMBLY LANGUAGE
.SP1
.sp1
DIRECT USE OF DISK DRIVE
CALLING READ/WRITE TRACK/SECTOR (RWTS)
RWTS IOB BY CALL TYPE
@ -65,50 +65,50 @@ CALLING THE DOS FILE MANAGER
FILE MANAGER PARAMETER LIST BY CALL TYPE
THE FILE MANAGER WORKAREA
COMMON ALGORITHMS
.SP3
.sp3
CHAPTER 7
.SP1
.UL
.sp1
.ul
CUSTOMIZING DOS
.SP1
.sp1
SLAVE VS MASTER PATCHING
AVOIDING RELOAD OF LANGUAGE CARD
INSERTING A PROGRAM BETWEEN DOS AND ITS BUFFERS
BRUN OR EXEC A HELLO FILE
REMOVING THE PAUSE DURING A LONG CATALOG
.SP3
.sp3
CHAPTER 8
.SP1
.UL
.sp1
.ul
DOS PROGRAM LOGIC
.SP1
.sp1
DISK II CONTROLLER CARD ROM - BOOT 0
FIRST RAM BOOT STRAP LOADER - BOOT 1
DOS 3.3 MAIN ROUTINES
DOS FILE MANAGER
READ/WRITE TRACK/SECTOR
.BP
.bp
APPENDIX A
.SP1
.UL
.sp1
.ul
EXAMPLE PROGRAMS
.SP1
.sp1
HOW TO USE THE PROGRAMS
DUMP - TRACK DUMP PROGRAM
ZAP - DISK UPDATE PROGRAM
FTS - FIND TRACK/SECTOR LISTS PROGRAM
COPY - BINARY TO TEXT FILE CONVERT PROGRAM
INIT - REFORMAT A SINGLE DISK TRACK
.SP3
.sp3
APPENDIX B
.SP1
.UL
.sp1
.ul
DISK PROTECTION SCHEMES
.SP3
.sp3
APPENDIX C
.SP1
.UL
.sp1
.ul
GLOSSARY
.SP3
.sp3
INDEX
.BR
.br

View File

@ -1,12 +1,12 @@
.ec^
.ec^
.m11
.m22
.m48
.na
.ll60
.fo ''-%-
.pn 5
.pi 0
.pn5
.pi0
.br
.np
.ce
@ -34,7 +34,7 @@ It is recommended that, until the
reader is completely familiar with
the operation of these programs, he
would be well advised to use them
only on an "expendable" diskette.
only on an "expendable" diskette.
None of the programs can physically
damage a diskette, but they can, if
used improperly, destroy the data on
@ -43,7 +43,7 @@ re-INITialized.
.sp1
Five programs are provided:
.sp1
.NF
.nf
DUMP TRACK DUMP UTILITY
.pi8
.in8
@ -69,7 +69,7 @@ attempt to patch a diskette directory
back together. It is also useful in
examining the structure of files
stored on disk and in applying
patches to files or DOS directly.
patches to files or DOS directly.
ZAP allows its user to read, and
optionally write, any sector on a
diskette. As such, it serves as a
@ -84,7 +84,7 @@ INIT REFORMAT A SINGLE TRACK
This program will initialize a single
track on a diskette. Any volume
number ($00-$FF) may be specified.
number ($00-$FF) may be specified.
INIT is useful in restoring a track
whose sectoring has been damaged
without reinitializing the entire
@ -97,7 +97,7 @@ FTS FIND T/S LISTS UTILITY
.in8
FTS may be used when the directory
for a diskette has been destroyed.
for a diskette has been destroyed.
It searches every sector on a
diskette for what appear to be
Track/Sector Lists, printing the
@ -131,7 +131,7 @@ the File Manager.
.pi0
.in0
STORING THE PROGRAMS ON DISKETTE
.pp
.pp
The enterprising programmer may wish
to type the source code for each
program into an assembler and
@ -160,10 +160,10 @@ be stored there
.sp1
For example...
.sp1
.NF
.nf
0800:20 DC 03 112 COPY JSR LOCFPL FIND PARMLIST
.SP1
.FI
.sp1
.fi
indicates that the binary code
"20DC03" should be stored at 0800 and
that this is statement 112. To enter
@ -172,14 +172,14 @@ must type in each address and its
corresponding object code. The
following is an example of how to
enter the DUMP program:
.BP
.bp
.nf
CALL -151 (Enter the monitor from BASIC)
0800:20 E3 03
0803:84 00
0805:85 01
0807:A5 02
.SP1
.sp1
...etc...
.sp1
0879:85 3F
@ -196,16 +196,16 @@ When the program is to be run...
BLOAD DUMP (Load program)
CALL -151 (Get into monitor)
02:11 N 800G (Store track to dump, run program)
.pp
.pp
The BSAVE commands which must be used
with the other programs are:
.sp1
BSAVE ZAP,A$900,L$6C
.BR
.br
BSAVE INIT,A$800,L$89
.BR
.br
BSAVE FTS,A$900,L$DC
.BR
.br
BSAVE COPY,A$800,L$1EC
.bp
DUMP -- TRACK DUMP UTILITY
@ -230,7 +230,7 @@ I/O errors. The DUMP program serves
as an example of direct use of the
DISK II hardware from assembly
language, with little or no use of
DOS.
DOS.
To use DUMP, first store the number
of the track you wish dumped at
@ -278,7 +278,7 @@ The next step up the ladder from DUMP
is to access data on the diskette at
the sector level. The ZAP program
allows its user to specify a track
and sector to be read into memory.
and sector to be read into memory.
The programmer can then make changes
in the image of the sector in memory
and subsequently use ZAP to write the
@ -337,7 +337,7 @@ entered...
.nf
803:02 (Change 03 to 02)
04:02 N 900G (Change ZAP to write mode and do it)
.pp
.pp
Note that ZAP will remember the
previous
values in $02, $03, and $04.
@ -448,7 +448,7 @@ printed by FTS to see if it is really
a T/S List. Additionally, FTS will
find every T/S List image on the
diskette, even some which were for
files which have since been deleted.
files which have since been deleted.
Since it is difficult to determine
which files are valid and which are
old deleted files, it is usually
@ -484,7 +484,7 @@ read track $12, sector $0F. At +$0C
is the track and sector of the first
sector in the file. This sector can
be read and examined to try to
identify the file and its type.
identify the file and its type.
Usually a BASIC program can be
identified, even though it is stored
in tokenized form, from the text
@ -492,7 +492,7 @@ strings contained in the PRINT
statements. An ASCII conversion
chart (see page 8 in the APPLE II
REFERENCE MANUAL) can be used to
decode these character strings.
decode these character strings.
Straight T-type files will also
contain ASCII text, with each line
separated from the others with $8D
@ -509,8 +509,8 @@ something else. Given below is an
example ZAP to the CATALOG to create
an entry for the file whose T/S List
is at T=12 S=0F.
.SP1
.NF
.sp1
.nf
CALL -151
BLOAD ZAP
...insert disk to be ZAPped...
@ -531,7 +531,7 @@ found by FTS until all of the files
have been recovered. As each file is
recovered, it may be RENAMEd to its
previous name. Once all the files
have been copied to another disk,
have been copied to another disk,
and successfully tested, the
damaged disk may be re-INITialized.
.bp
@ -549,7 +549,7 @@ file. The name of the input file is
assumed to be "INPUT", although this
could just as easily have been
inputted from the keyboard, and the
name of the output file is "OUTPUT".
name of the output file is "OUTPUT".
COPY is a single drive operation,
using the last drive which was
referenced.

View File

@ -112,7 +112,7 @@ the order of the information,
doubling the sector numbers, or
altering the checksum with some
constant. Any of the above would
cause an I/O error in a normal DOS.
cause an I/O error in a normal DOS.
Finally, we have the two closing
bytes ($DE/$AA), which are similar to
the starting bytes, but with a
@ -135,7 +135,7 @@ also. Switching the third bytes
between the two fields is an example
of a protective measure. The data
portion consists of 342 bytes of
data, followed by a checksum byte.
data, followed by a checksum byte.
Quite often the data is written so
that the checksum computation will be
non-zero, causing an error. The
@ -176,7 +176,7 @@ A state of the art protection scheme
consists of two elements. First, the
data is stored on the diskette in
some non-standard way in order to
make copying very difficult.
make copying very difficult.
Secondly, some portion of memory is
utilized that will be altered upon a
RESET. (For example, the primary
@ -186,7 +186,7 @@ software from being removed from
memory intact.
Recently, several "nibble" or byte
copy programs have become available.
copy programs have become available.
Unlike traditional copy programs
which require the data to be in a
predefined format, these utilities
@ -196,7 +196,7 @@ protected disks were first
introduced, it has been asked, "why
can't a track be read into memory and
then written back out to another
diskette in exactly the same way?".
diskette in exactly the same way?".
The problem lies with the self-sync
or auto-sync bytes. (For a full
discussion see Chapter 3) These
@ -227,13 +227,13 @@ will expand the physical space needed
to write the track back out, since
sync bytes require 25% more room. If
enough hex $FF's occur in the data,
the track will overwrite itself.
the track will overwrite itself.
This can happen in general if the
drive used to write the data is
significantly slower than normal.
significantly slower than normal.
Thus, we are back to having to
analyze the data and, in effect, make
some assumptions. It appears that,
some assumptions. It appears that,
apart from using some
hardware device to help find the sync
bytes, a software program must make
@ -255,7 +255,7 @@ nibble copy programs to rely heavily
upon the user for direction. If the
present trend continues, it is very
likely that protection schemes will
evolve to a point where automated
evolve to a point where automated
techniques cannot be used to defeat
them.
.br

View File

@ -5,8 +5,8 @@
APPENDIX C - GLOSSARY
.sp1
.pn5
.IN20
.PI-20
.in20
.pi-20
ACCESS TIME]>The time required to
locate and read or write data on a
@ -31,7 +31,7 @@ ALPHANUMERIC]>An alphabetic character
term used to refer to the class of all
characters and digits.
ANALOG]>As opposed to digital.
ANALOG]>As opposed to digital.
Having a value which is continuous,
such as a voltage or electrical
resistance.
@ -73,7 +73,7 @@ of a program or data against the
possibility of its accidental loss or
destruction.
BASE]>The number system in use.
BASE]>The number system in use.
Decimal is base 10, since each digit
represents a power of 10
(1,10,100,...). Hexadecimal is base
@ -155,7 +155,7 @@ predecessor via an address pointer.
CHECKSUM/CRC]>A method for verifying
that data has not been damaged. When
data is written, the sum of all its
constituent bytes is stored with it.
constituent bytes is stored with it.
If, when the data is later read, its
sum no longer matches the checksum,
it has been damaged.
@ -163,7 +163,7 @@ it has been damaged.
CLOBBERED]>Damaged or destroyed. A
clobbered sector is one which has
been overwritten such that it is
unrecoverable.
unrecoverable.
CODE]>Executable instructions to the
computer, usually in machine
@ -233,7 +233,7 @@ contain a printable ASCII character, binary
numeric data, or a machine language
instruction.
DCT]>Device Characteristics Table.
DCT]>Device Characteristics Table.
Used as an input parameter table to
Read/Write Track/Sector (RWTS) to
describe the hardware characteristics
@ -249,7 +249,7 @@ an executing BASIC program. OPEN,
READ, WRITE, and CLOSE are all
examples of deferred commands.
DIGITAL]>As opposed to analog.
DIGITAL]>As opposed to analog.
Discrete values as opposed to
continuous ones. Only digital values
may be stored in a computer. Analog
@ -281,7 +281,7 @@ data stored there.
DISK INITIALIZATION]>The process
which places track formatting
information, including sectors and
gaps, on a blank diskette.
gaps, on a blank diskette.
During disk initialization, DOS also
places a VTOC and directory on the
newly formatted disk, as well as
@ -289,7 +289,7 @@ saving the HELLO program.
DISPLACEMENT]>The distance from the
beginning of a block of data to a
particular byte or field.
particular byte or field.
Displacements are usually given
beginning with 0, for the first byte,
1 for the second, etc. Also known as
@ -304,7 +304,7 @@ sends them to the printer.
DUMP]>An unformatted or partially
formatted listing of the contents of
memory or a diskette in hexadecimal.
memory or a diskette in hexadecimal.
Used for diagnostic purposes.
ENCODE]>To translate data from one
@ -316,7 +316,7 @@ on a DISK II.
ENTRY POINT (EPA)]>The entry point
address is the location within a
program where execution is to start.
program where execution is to start.
This is not necessarily the same as
the load point (or lowest memory
address in the program).
@ -414,7 +414,7 @@ because it easily converts with
binary.
HIGH MEMORY]>Those memory locations
which have high address values.
which have high address values.
$FFFF is the highest memory location.
Also called the "top" of memory.
@ -436,7 +436,7 @@ block of storage.
INSTRUCTION]>A single step to be
performed in an assembly language or
machine language program.
machine language program.
Instructions perform such operations
as addition, subtraction, store, or
load.
@ -482,7 +482,7 @@ disk or cassette tape.
JMP]>A 6502 assembly langauge
instruction which causes the computer
to begin executing instructions at a
different location in memory.
different location in memory.
Similar to a GOTO statement in BASIC.
JSR]>A 6502 assembly langauge
@ -500,7 +500,7 @@ from the keyboard or a remote
terminal.
LABEL]>A name associated with a
location in a program or in memory.
location in a program or in memory.
Labels are used in assembly langauge
much like statement numbers are used
in BASIC.
@ -521,7 +521,7 @@ array of data items.
LOAD POINT (LP)]>The lowest address
of a loaded assembly language
program -- the first byte loaded.
program -- the first byte loaded.
Not necessarily the same as the entry
point address (EPA).
@ -552,7 +552,7 @@ or Least Significant Byte. The 1's
bit in a byte or the second pair of
hexadecimal digits forming an
address. In the address $8030, $30
is the LO order part of the address.
is the LO order part of the address.
MASTER DISK]>A DOS diskette which
will boot in an APPLE II of any size
@ -602,7 +602,7 @@ stored as a file on a diskette.
OFFSET]>The distance from the
beginning of a block of data to a
particular byte or field.
particular byte or field.
Offsets are usually given
beginning with 0, for the first byte,
1 for the second, etc. Also known as

View File

@ -1,6 +1,6 @@
PAGE]>256 bytes of memory which share
a common high order address byte.
a common high order address byte.
Zero page is the first 256 bytes of
memory ($0000 through $00FF).
@ -11,7 +11,7 @@ a separate line or wire.
PARAMETER LIST]>An area of storage
set aside for communication between
a calling program and a subroutine.
a calling program and a subroutine.
The parameter list contains input and
output variables which will be used
by the subroutine.
@ -57,7 +57,7 @@ beginning of a disk field which
uniquely identify it from any other
data on the track.
PROM]>Programmable Read Only Memory.
PROM]>Programmable Read Only Memory.
PROMs are usually used on controller
cards associated with peripherals to
hold the driver program which
@ -120,7 +120,7 @@ RELEASE]>A version of a distributed
piece of software. There have been
several releases of DOS.
RELOCATABLE]>The attribute of
RELOCATABLE]>The attribute of
an object module file
which contains a machine language
program and the information necessary
@ -131,7 +131,7 @@ RETURN CODE]>A numeric value returned
from a subroutine, indicating the
success or failure of the operation
attempted. A return code of zero
usually means there were no errors.
usually means there were no errors.
Any other value indicates the nature
of the error, as defined by the
design of the subroutine.
@ -195,7 +195,7 @@ DOS image will always be loaded into
the same memory location, regadless
of the size of the machine.
SOFT ERROR]>A recoverable I/O error.
SOFT ERROR]>A recoverable I/O error.
A worn diskette might produce soft
errors occasionally.
@ -252,13 +252,13 @@ Also called "strobe".
TOKENS]>A method where human
recognizable words may be coded to
single binary byte values for memory
compression and faster processing.
compression and faster processing.
BASIC statements are tokenized, where
hex codes are assigned to words like
IF, PRINT, and END.
TRACK]>One complete circular path of
magnetic storage on a diskette.
magnetic storage on a diskette.
There are 35 concentric tracks on an APPLE
diskette.
@ -276,7 +276,7 @@ sector number for each of its data
sectors in the order that they are to
be read or written.
TTL]>Transistor to Transistor Logic.
TTL]>Transistor to Transistor Logic.
A standard for the interconnection of
integrated circuits which also
defines the which voltages
@ -295,7 +295,7 @@ VOLUME]>An identification for a
diskette, disk platter, or cassette,
containing one or more files.
VTOC]>Volume Table Of Contents.
VTOC]>Volume Table Of Contents.
Based upon the IBM OS/VS VTOC. On
the APPLE, a sector mapping the
free sectors on the diskette and

View File

@ -25,7 +25,7 @@ Q7H with Q6L = Write
Q7H with Q6H = Load Write Latch
.bp
SIG 3-4
.SP3
.sp3
8-5
.sp1
9E9E If EXECing, call A682 to get the next byte from the
@ -37,9 +37,9 @@ SIG 3-4
8-8
.sp1
table of valid keywords (A941).
.SP3
.sp3
8-9
.SP1
.sp1
A1AE-A1B8 Clear the file manager parameter list at B5BB to
.sp3
8-13
@ -55,9 +55,9 @@ AACA-ACD9 WRITE A RANGE OF BYTES subcode handler.
ACDA-ACEE Write a data byte.
.sp3
8-27
.SP1
.sp1
AF3A Otherwise, set up RWTS pointer (AF4B).
.SP1
.sp1
next (C=1)).
.sp3
8-28
@ -78,13 +78,13 @@ B134-B15A Add a new data sector to file.
8-34
.sp1
Call SETVID ($FE93) and SETKBD ($FE89).
.SP3
.sp3
8-35
.SP1
.sp1
$20=Volume mismatch, $40=Drive error, $08=INIT error.
.sp1
Uses Write Translate Table ($BA29).
.SP3
.sp3
8-37
.sp1
Y-reg:number of autosyncs to write
@ -92,7 +92,7 @@ B134-B15A Add a new data sector to file.
8-39
.sp1
Jump to DSKFORM at $BEAF.
.SP1
.sp1
Use ILEAV table at $BFB8 for software sector
.sp3
8-41
@ -100,7 +100,7 @@ B134-B15A Add a new data sector to file.
BFC8-BFD8 Patch area starts here.
.bp
SIG 5-6
.SP3
.sp3
A-16
.sp1
using ZAP to patch a catalog entry into track 17 for each

View File

@ -25,6 +25,9 @@ join in--send patches, help add stuff, etc.
* Escape all else in C-style
3. Remove NUL at end of .txt files
4. .pp dot command is paragraph break, replace with blank line.
5. Remove trailing whitespace
6. Normalize case and spacing of dot commands (lowercase here)
This has probably broken the .s files a bit, and I haven't bothered to decompile
the five byte HELLO ... ;)