
5,
DISK
COMMANDS
So
far,
you
have
learned
the
simple
ways
of
using
the
disk
drive.
In
order
to
communicate
more
fully
with
the
disk,
disk
commands
need
to
be
used.
Two
of
these,
OPEN
and
PRINT*,
allow
the
creation
and
fillingofa
data
file
on
the
disk.
Just
as
important
is
their
ability
to
openacommand
channel,
allowing
the
exchangeofinformation
between
computer
and
disk
drive.
OPEN
PURPOSE:
CreatesafilebyOPENingacommunication
channel
between
computer
and
disk
drive.
FORMAT:
OPEN
file#,deviceI,(command)
channel#,text
string
The
file
number
shouldbeany
number
from1to
127.
Numbers
from
128
to
255
can
be
used
but
shouldbeavoidedasthey
cause
the
PRINT#
statement
to
generatealinefeed
after
carriage
returns.
The
device
numberisusually
8.
The
channel
number
can
be
any
number from2to
15.
These
refertochannels
used
to
communicate
with
the
disk, and
channels
0
and1are
used
by
the
operating
system
for
LOADing
and
SAVEing.
Channels2through
14
can
be
used
to
send
data
to
files
while
15
is
reservedasthe
command
channel.
The
text
string
is
a
character
string
that
is
used
as
the
name
for
the
file
created.Afile
cannot
be
created
unless
the
file
name
is
specifiedinthe
text
string.
If
you
attempt
to
openafile
already
opened,
the
error
signal
"FILE
OPEN
ERROR"
will
be
generated.
10

EXAMPLES:
OPEN
5,8,5,
"TEST"
(createsafile
called
TEST)
OPEN
15,8,15,"I"
(sends
commandtodisk
on
command
channel)
OPEN
A,B,C,Z$
(these
variables
must
be
defined)
Fillsapreviously
OPENed
file
with
data.
PRINT#
file
!,
text
string
The
PRINT!
command
works
exactly
like
the
PRINT
command,
except
the
data goes
to
a
device
other
than
the
screen,
in
this
case
the
disk
drive.
When
used
withadata channel,
PRINT!
sends
informationtoa
buffer
in
the
disk
drive
which
then
LOADs
it
onto
the
disk.
When
used
withacommand
channel,
PRINT!
sends
commandstothe
disk
drive. The
commandisplaced
inside
quotes
as
a
text
string.
EXAMPLES:
PRINT!
7,C$
(fills
file7with
text
string
C$)
PRINT!
15,
"I"
(sends
disk
commandoncommand
(Channel)
INITIALIZE
PURPOSE:
Initializes
disk
driver
to
power
up
condition.
FORMAT:
OPEN
15,8,15,
"I"
or
OPEN
15,8,15:PRINTH5,
"I"
Sometimes,
an
error
condition
on
the
disk
will
prevent
you
from
performinganoperation.
INITIALIZE
returns
the
disk
drive
to
its
original
state
when
power
is
turned
on.
NEW
PURPOSE:
Formats
new
disk
or
re-formats
used
one.
FORMAT:
PRINT!15,
"NEW
0:
disk
name,
id!"
This
command
formatsanew
disk.
It
is
also
useful
to
erase
an
already-formatted
disk,
as
it
erases
the
entire
disk,
puts
timing
and
block
markers
on,
and
creates
the
directory
and
the
BAM.
The
disk
name
is
for
user
convenience
while
the
id!
isa2
digit
alphanumeric
identifier
that
is
placed
in
the
directory
and
every
block
on the
disk.
If
you
switch
disks
while
writing
data,
the
drive
will know
by
checking
the
id#.
EXAMPLES:
OPEN
15,8,15,
"NEW
0:
TEST
DISK,
Al"
OPEN
15,8,15:PRINT!15,"N0:'MYDISK,
MY"
11

If
the
disk
needs
erasing
but
not
re
forma11ing,•
the
same
command
is
used,
but
leave
out
the
id#.
EXAMPLE:
OPEN
15,8,15,"N0:
NEW
INFO11
SCRATCH
PURPOSE:
Eraseafile
or
files
from
the disk.
FORMAT:
PRINT#15,
"SCRATCH
0:
filename"
This
command
erases
one
or
more
files
from
the
disk,
making
room
for
new
or
longer
files.
Groups
of
files
can
be
erased
at
one time
by
naming
all
of
them
in
one
scratch
command.
EXAMPLES:
PRINT#15,"S0:TEXT"
(erases
file
called
TEXT)
PRINT#15,"SCRATCH0:
TEXT,
0:TEST,
0:
MUSIC"
(erases
files
TEXT,
TEST,
and
MUSIC)
COPY
PURPOSE:
Duplicateanexisting
file.
FORMAT:
PRINTi.15,
"COPY
0:newfilename=0:oldf
ilenar.e"
COPY
allows
you
to
makeacopy
of
any
programorfile
on
the
disk.
The
new file's
name
must
be.
different
from
the
old
one.
COPY
can
also
combineupto
four
files
into
one
new
one.
EXAMPLES:
PRINT#15,"C
0:BACKUP=0:ORIGINAL"
PRINT#15,"COPY0:NEWFILE=0:
OLD1,0:
OLD2,0"
(combines
OLD1
and
OLD2
into
NEWFILE)
RENAME
PURPOSE:
Change
the
name
of
existing
file.
FORMAT:
PRINT#15#"RENAMEO:
newname=0:
oldname"
This
command
lets
you
change
the
name
of
a
file
once
it's
in
the
disk
directory.
RENAME
will
not
work
on
any
files
that
are
currently
open.
EXAMPLE:
PRINT#15,HR
0:GOODNAME=0:
DUMBNAME"
VALIDATE
PURPOSE:
Removes
wasted
spaces
on
disk.
FORMAT:
OPEN
15,8,15,"V0:"
12

BLOCK-READ
PURPOSE:
To
readaspecific
block
of
data
from
the
disk.
FORMAT:
PRINT!
file
#,"BLOCK-READ:"
channel
#,
drive
#,
track
!,
block#(BLOCK-READ
can
be
replaced
with
B-R)
The
file
and
channel
numbers
are
ones
that
have
been
OPENed.
The
track
number
and
block
number
indicate
which
256
byte
block
is
to
be
read.
Executing
this
command
causes
the
disk
drive
to
move
the
specified
block
of
data
into
the
buffer
area.
The
data
can
then
be
read
from
the
buffer
area
using
either
INPUT!
or
GET#.
Only
data
in
that
particular
block
will
be
read,
and
any
unused
bytes
in
the
block
will
not
be
read*
The
sample
program
below
uses
BLOCK-READtoread
the
contents
of
block9on
track
5
and
display
the
block's
contents
on
the
screen.
10
OPEN
15f8r15
20
OPEN
8,8,8,"!"
30
PRINT!15,
"B-R:"8,0f5,9
(reads
block
into
buffer)
40
GET!8,
A$
50
PRINT
A$;
60
IF
ST=0
THEN
40
70
PRINT
"READ.
COMPLETE"
80
CLOSE8:
CLOSE
15
.BLOCK-WRITE
PURPOSE:
Writeablock
of.data
to
a
specified
block
location
on
the
disk.
FORMAT:
PRINT!
file
#,
"BLOCK-WRITE:11
drive
#,
channel
!,
track
!,
block
!
BLOCK-WRITE
can
be
shortened
to
B-W.
This
command
causes
data
previously
stored
in
the
buffer
to
be
written
to
the
specified
locationonthe
disk.
The
data
should
be
transferred
to
the
buffer
on
a
data
channel
using
PRINT!
before
BLOCK-WRITEingitinto
the
disk.
The
DOS
keeps
track
of
how
many
bytes
are
stored
into
the
buffer and
stores
the
byte
count into
the
first
byte
of
the
block
when
BLOCK-WRITEisexecuted. This
means
that
only
255
bytes
can
actually
be
writtentoor
read
from
the
block,
since
the
byte
count
uses
the
first
byte
of
the
block.
Here's
an
example
of
a
routine
that
will
write
data
to
the
same
block
that
is
read
in
the
BLOCK-READ
example
above
(track
5,
block
9):
10
OPEN
15,8,15
20
OPEN
8,8,8,"!"
30
FOR
AA=1 TO
32
40
PRINT!8,
"TESTING"
50
NEXT
60
PRINT!15f"B-W:"
8;0>5,9
70
CLOSE8:CLOSE15
18

RELATIVE
FILE
FORMAT
DATA
BLOCK:
BYTE
DEFINITION
0,1
...••..
Track
and
sector
of
next
data
block.
2-256
254
bytesofdata.
Bipty
records
contain FF
(all
binary
ones)
in
the
first
byte
followedby00
to
the
end
of
the
record.
Partially
filled
records
are
padded
with
nulls
(00).
SIDE
SECTOR
BLOCK:
BYTE
DEFINITION
0,1
••
Track
and
sectorofnext
side
sector
block.
2
Side
sector
number
(0-5).
3
••«•••••
Record
length.
4,5
Track
and
sectoroffirst
side
sector
(0).
6,7
Track
and
sectorofsecond
side
sector
(1),
8,9
Track
and
sectorofthird
side
sector
(2).
10,11
Track
and
sectoroffourth
side
sector
(3).
12,13
Track
and
sectoroffifth
side
sector
(4).
14,15
Track
and
sectorofsixth
side
sector
(5).
16-256
Track
and
sector
pointersto120
data
blocks.
USING
RELATIVE
FILES
Relative
files
are
created
the
first
time
they
are
OPENed.
That same
file
will
be
used
until
it
is
C LOS
Ed.
A
relative
file
can
only
be
erased fromadisk
by
using
the
SCRATCH
command
or
by
re-formatting
the
entire
disk.
The
"§"
sign,
used
with
SAVE
as
a
SAVE
and
REPLACE,
will
not
work with
relative
files.
FORMAT TO
CREATE
RELATIVE
FILE:
OPEN
file
#,
device#,channel#,"0:name,L,"♦CHR$(rl#)
(record
length)
21

EXAMPLES:
OPEN
2,8,2,"0:FILE,L"+CHR$(100)
(record
length
is
100)
OPEN
F,8,F,"0:"
+A$+
",L,"+CHR$(Q)
FORMAT
TO
OPEN
EXISTING
RELATIVE
FILE:
OPEN
file
#,
device#,channel#,w0:name"
EXAMPLE:
OPEN
2,8,6,
"0:
TEST"
V
In
this
case,
the
DOS
can
tell
by
the
syntax
that
it
is a
relative
file.
Both
of
the
above
formats
allow
either
reading
or
writingtothe
file.
HOWEVER:
In
order
to
read
or
write,
BEFORE
ANY
OPERATION,
you
must
position
the
file
pointe'r
to
the
correct
record
position*
POSITION
PURPOSE:
To
POSITION
the
file
pointerata
record.
FORMAT:
PRINT*
file#,"P"
CHR$(channel*)CHR$(rec#
lo)
CHR$(rec#
hi*)CHR$(record
position)
NOTE:
CHR$(record
position)
specifies
the
location
within
the
record
itself
and
is
optional.
Since
there
are
720
records
available
and
the
largest
number
one
byte
can hold
is
256,
two
bytes
must
be
used
to
specify
the
position.
The
rec#lo
contains
the
least
significant
part
of
the
address
and
reclhi
hold
the
most
significant.
The
relationship
is
represented
by:
reel*rec#hi*256♦rec#lo.
The
rec#
is
the
actual
positionina
record
where
data
transfer
starts.
EXAMPLES:
PRINTI15,"PHCHR$(2)CHR$(1)CHR$(0)
PRINTI15,"PWCHR$(CH)CHR$(Rl)CHR$(R2)CHR$(P)
Here'sasample
program
that
createsarelative
file:
10
OPEN
15,8,15
20
OPEN
8,8,8,"0:TEST,L,w+CHR$(50)
30
PRINT#15,ttP"CHR$(8)CHR$(0)CHR$(4)CHR$(l)
40
PRINT#8,CHR$(255)
50
CLOSE8:CLOSE15
22

This
program
createsarelative
file
called
TEST
that
will
contain
records
that
are
50
bytes
long.
Line
30
moves
the
pointertothe
first
positioninrecord
#1024
(rec#=256*4+0
=
JL024).
Notice
that
the
POINTER
commandissent
on the
command
channel
while
data
is
sent
on
a
data
channel,8in
this
case.
Since
the
record
didn't
already
exist,
an
error
message
will
be
generated,
warning
you
not
to
use
GET#
or
INPUT#.
Oncearelative
file
exists,
you
can
OPEN
it
and
expand
it
or
access
it
for
data
transfer.
The
file
can
be
expanded
but
the
record
length
cannotbechanged.
To
expandafile
just
specify
a
larger
number
of
records,asin
Line
30
in
the
previous
example
program.
To
write
data
to
an
existing
relative
file
use
the
following:
10
OPEN
15,8,15
20
OPEN
2,8,6,"0:TEST"
30
GOSUB
1000
40
IF
A=100
THEN
STOP
50
PRINT#15,MP"CHR$(6)CHR$(100)CHR$(0)CHR$(l)
60
GOSUB
1000
70
IF
A=50
THEN
PRINT#2,1:GOTO50
80
IF
A=100
THEN
STOP
90
PRINT#2,"123456789"
100
PRINT#15,"P"CHR$(6)CHR$(100)CHR$(0)CHR$(20)
110
PRINT#2,
"JOHN
QWERTY"
120
CLOSE
2:CLOSE15
130
END
1000
INPUT#15,A,A$,B$,C$
1010
IF
(A=50)OR(A<20)
THEN
RETURN
1020
PRINT
"FATAL
ERROR:";
1030
PRINT
A,A$,B$,C$
1040
A=100:RETURN
Lines
10
and
20
open
the
command
andadata
channel.
Lines
30
and
40
check
for
errors.
Line
50
moves
the
file
pointer
to the
100th
record
position.
Since
no
records
exist
yet,
an
error
signal
is
generated.
Lines
60,
70,
and
80
check
for the
error
and
create
100
records.
Line
90
writes9bytes
of
data
to
the
first9locations
in
record
100.
Line
110
then
printsaname
from
that
position.
It
is
important
that
data
is
wrltt.en
into
the
record
sequentiallysodata
alreadyinthe
recordisnot
destroyed.
23

The
following
program
reads
back
the
data
put
in
the
file
by
the
previous
program.
10
OPEN
15,8,15
20
OPEN
2,8,6,"0:TEST"
30
GOSUB
1000
r
40
IF
A*=100
THEN
STOP
50
PRINT#15,"P"CHR$(6)CHR$(100)CHR$(0)CHR$(l)
60
GOSUB
1000
70
IF
A=50
THEN
PRINT
A$
80 IP
A=100
THEN
STOP
90
INPUT!2,D$:
PRINT
D$
100
PRINT#15,"P"CHR$(6)CHR$(100)CHR$(0)CHR$(20)
110
INPUT#2,E$:
PRINT
E$
120
CLOSE
2:CLOSE15
130
END
1000
INPUT#15,A,A$,B$,C$
1010
IF
(A=5O)OR(A<20)
THEN
RETURN
1020
PRINT
"FATAL
ERROR:";
1030
PRINT
A,A$,B$,C$
1040
A=*100:
RETURN
Lines
90,
100,
and
110
read
the
record
and
display
the
contentsonthe
screen.
Notice
that
the
carriage
return
sent
to
the
disk
after
each
PRINT#
statementonthe
write
routineisthe
separator
for
each
field
on
the
record.
If
the
file
is
to
be
writtenorread
sequentially,itisn't
necessary
to
adjust
the
pointer
to
each
record.
The
record
pointer
automatically
starts
at
Position1if
no
other
position
has
been
defined.
The
pointer
moves
through
the
record
as
each
field
is
readorwritten.
24

9,
PROGRAMMING
THE
DISK
CONTROLLER
The
FSD-2isa
smart
peripheral,
which
means
that
it
contains
its
own
microprocessor
and
memory. An
advanced
programmer
can
access the
microprocessor
and
its
memory,
providingawide
range
of
applications.
Routines
can
be
designed
that
resideinthe
disk
memory
and
operateonthe
microprocessortocontrol
disk
drive
operation.
DOS
programs
can
be
added
that
come
from
the
actual
disk.
There
is
16K
of
ROM
in
the
disk
drive
as
well
as
2K
RAM.
The/
most
useful
area
to
the
advanced
programmer
is
the
buffer
RAJ^SfS*
area
located
between
4000H
and
5FFFH
(theHmeans
it's
^^^W'
hexadecimal
number).
This
area
can
actuallybewritten
into
witri
Machine
Language
level
instructions
and
executed
by
the
disk
controller
(microprocessor).
%
The
methodofhandling
data
transferstoand
from
memory
are
referred
to
as
MEMORY
commands.
There
are
three
basic
MEMORY
commands,
and
some
additional
commands called
USER
commands.
MEMORY-WRITE
PURPOSE:
Transfersupto
34
bytes
of
data
to
drive
memory.
FORMAT:
PRINT#15,"M-W:"CHR$(address
low
byte)
CHR$(address
high
byte)CHR$(#ofcharacters)
CHR$(data)
MEMORY-WRITE
allows
you
to
write
up
to
34
bytes
of
data
at
a
time
into
the
disk
controller's
memory.
MEMORY-EXECUTE
AND
USER
commands
can
be
used
to
run
this
code.
The
low
and
high
bytes
are
the
decimal
equivalent
of
the
hexadecimal
address
in
the
actual
memory
space.
The
number
of
bytes
is
the
decimal
amount
of
bytes
to
be
transferred,upto
34.
The
d^ata
must
be
the
decimal
representationofthe
hexadecimal-coded
instruction
you
wish
sent.
See
the
example
below.
10
OPEN
15,8,15
20
PRINT#i5,"M-W:"CHR$(0)CHR$(112)CHR$(3)CHR$(169)CHR$(8)CHR$(96)
30
CLOSE
15
This
routine
writes
three
bytes
to
locations
7000H,
7001H,
and
7002H
(256*112+0=28672=7000H).
The
three bytes
are:
169
(A9H,aPAGE
ZERO
instruction),
8
(8H,alocation),
96
(60H,aRETURN
instruction).
When
executed,
this
program
would
cause
the
drive
controllertoload
its
accumulator
with
the
contentsoflocation
0008H
and
then
return
control
back
to
the
disk
drive.
25

MEMORY-READ
PURPOSE:
Read
data
from
drive
memory.
FORMAT:
PRINT#15
file
#,
-M-R:"
CHR$(address
low
byte)
CHR$(address
high
byte)
The
MEMORY-READ
command
selectsabyte
to
be
read from
a
location
in
the
disk
drive
memory,
specified
by
the
low
and
high
bytes
of
the
location
address.
The
next
byte
read
(using
GET#)
from
channel
#15
will
be
from
the
specified
memory
location.
The
following
example
illustrates
this
by
reading
data from
10
consecutive
bytes,
located
from
FFOOH
to
FFOAH
(in
decimal,
65280
to
'65290).
10
OPEN
15,8,15
20
FOR A
=
1
TO
10
30
PRINT#15,"M-R:"CHR$(A)CHR$(255)
40
GET#15,A$:PRINT
ASC(A$♦CHR$(0));
50
NEXT
60
CLOSE
15
When
using
MEMORY-READ,
any
use
of
INPUT#
on
the
error
channel
will
give
peculiar
results.
This
can
be
clearedupby
using
any
other
command,
except
the
MEMORY
commands.
Here's
a
useful
program
that
reads
the
disk
controller's
memory:
10
OPEN
15,8,15
20
INPUT-LOCATION
PLEASE";A
30
Al
=
INT(A/256):A2=A-Al*256
40
PRINT#15,"M-R:"CHR$(A2)CHR$(A1)
50
FORL=
1
TO
5
.
60
GET#15,A$
70
PRINT
ASC(A$+CHR$(0))
80
NEXT
90
INPUT-CONTINUE-;A$
100 IF
LEFT$(A$,1)«"Y"
THEN
50
110
GOTO
20
MEMORY-EXECUTE
PURPOSE:
Executes
program
in
disk
memory.
FORMAT:
PRINT!15
file
*9-M-E:"CHR$(address
low
byte)
CHR$(address
high
byte)
Once
a
program
has
been
loaded
into
disk
memory
(either
the
16K
in
the
ROM
or
the
2K
in
the
RAM),
the
address
of
the
MEMORY-
EXECUTE
command
specifies
where
program
execution
will
begin.
The
use
of
this
commmand
requires
that
the
programtobe
executed
end
with
an
RTS
instruction,socontrol
will
be
returned
to the
DOS.
Following
is
a
routine
that
writes
an
RTS
(ReTurn
from
Subroutine).
26

10
OPEN
15,8,15,"M-W:"CHR$(0)CHR$(5);l;CHR$(96)
20
PRINT#15,"M-E:"CHR$(0)CHR$(19):
REM
JUMPS
TO
BYTE,
RETURNS
30
CLOSE
15
USER
COMMANDS
Along
with
the
USER1
and
USER2
commands
discussed
in
chapter
7f
there
are
others
that,
when
executed,
cause
jumps
to
specific
locations
in
the
disk
drive's
buffer.
This
lets
you
make
longer
routines
that
operate
in
the
disk's memory
along
withajump
table,
even
in
BASIC.
USER
COMMAND
FUNCTION
Ul
or
UA
BLOCK-READ
without
changing
buffer-pointer
U2
or
UB
BLOCK-WRITE
without
changing
buffer-pointer
U3
or
UC
jump
to
0500H
U4
or
UD
jump
to
0503H
U5
or
UE
jump
to
0506H
U6
or
UP
jump
to
0509H
U7
or
UG
jump
to
050CH
U8
or
UH
jumpto050FH
U9
or
UI
jump
to
FFFAH
U;
or
UJ
power-up
vector
UI+
set
Commodore64speed
U-
set
VIC
20
speed
EXAMPLESOFUSER
COMMANDS
PRINT#1S,"U3"
PRINT#15,"U"+CHR$(50+Q)
PRINT#15,"UI"
27

10-1.
CHANGING
THE
DEVICE
NUMBER
All
peripherals
need
device
numbers
so
the
computer
can
identify
which
one
you
want
to
transfer
data
to
or
from.
The
FSD-2
is
preset
inside
the
hardware
withadevice
number
of
8,
drive
number
0.
The
disk
knows
its
own device
number
by
looking
at
a
hardware
jumperonthe
circuit
board
and
writing
the
number
based
on
the
jumper
intoasection
of
its
RAN*
The
device
number,canbechanged
by
two
methods,
hardware
and
software.
If
you
are
temporarily
using
two
disk
drives,
using
the
software
method
lets
you
change
one
drive's
device
number
temporarily.
If
you
expect
to
use
two
(or
more)
drives
on
a
permanent
basis,
the
hardware
method
is a
simple
and
permanent
way
to
changeadrive's
device
number.
SOFTWARE
METHOD
The
device
number
is
changed
by
performingaMEMORY-WRITE
to
locations
0077H
and
0078H.
The
command
is
executed
once
the
command
channel
has
been
opened.
FORMAT:
PRINT#
file#,"M-W:
"CHR$(119)CHR$(0)CHR$(2)
CHR$
(address+32)CHR$(address+64)
The
addressisthe
new
device
number
desired.
Belowisan
exampleofchanging
the
device
numberto9.
10
OPEN
15,8,15
20
PRINT#15,"M-W:"CHR$(119)CHR$(0)CHR$(2)CHR$(9+32)CHR$(9+64)
30
CLOSE
15
First,
turn
on
one
drive
and
change
its
device
number,
then
the
next
drive,
until
all
the
drives
are
on.
28

34:
SYNTAX
ERROR
(no
file
given)
The
file
name
was
left
out
of
a
command
or
the DOS
does
not
recognize
it
as
such.
Typically,acolon
(:)
has
been
omitted.
35-38:
NOT
USED
39:
SYNTAX
ERROR
(invalid
command)
May
resultifthe
command
sent
to
the
command channel
is
unrecognizablebythe
DOS.
40-49:
NOT
USED
50:
RECORD
NOT
PRESENT
Result'ofdisk
reading
past
the
last
record
through
the
INPUT*
or
GET#
commands.
This
message
will
also
occur
after
positioningtoa
record
beyond
the
end
of
a
file
inarelative
file.
If
the
intentisto
expand
the
file
by
adding
the
new
record
(withaPRINT#
command),
the
error
message
may
be
ignored.
INPUT
or
GET
should
not
be
used
after
this
error
occurs
without
first
repositioning.
51:
OVERFLOW
IN
RECORD
PRINT*
statement
exceeds
the
record
boundary,
truncating
information.
Since
the
carriage
return,
sent
as
a
record
terminator,iscountedinthe
record
size,
this
message
will
occur
if
the
total
charactersinthe
record
(including
the
final
carriage
return)
exceeds
the
defined
size*
52:
FILE TOO
LARGE
Record
position
within
a
relative
file
indicates
that
disk
overflow
will
result.
53-59:
NOT
USED
60:
WRITE
FILE
NOT
OPEN
A
write
file
that
has
not
been closed
is
being
opened
for
reading.
61:
FILE
NOT
OPEN
A
file
being
accessed
has
not
been
opened
in
the
DOS.
Sometimesinthis
situation,anerror
is
not
generated,
the
requestissimply
ignored.
62:
FILE
NOT
FOUND
The
requested
file
doesn't
exist
on the
indicated
drive.
63:
FILE
EXISTS
The
file
name
of
the
file
being
created
already
exists
on
the
disk.
32