TRS-80 DOS - VTOS 4.0.2 for the Model I - SYS4/SYS Disassembled

Page Customization

Introduction/Summary

VTOS 4.0.2 SYS4/SYS Disassembly - Error Messages (Model I)

SYS4/SYS is the system overlay that shows error messages. A program, or the system itself, jumps or calls 4409H with an error code in Register A; SYS0/SYS's 44B0H pushes Register Pair AF and issues request 86H, and the request handler (4C31H) loads SYS4/SYS at 4E00H (directory entry code 06H). The manual calls it the system error dictionary; without it every error gives the form SYSTEM ERROR nn.

The file starts with a record of type 05H (the name SYS4), a record of type 1FH holding the copyright notice of Randolph Cook (1980) and four load blocks that fill 4E00H-51DDH, 990 bytes; the last record gives the transfer address 4E00H; one byte 03H follows it, which the loader never reads. The file carries no patch.

The Error Code

BitsMeaning
5-0The error number, 00H-29H (the table below); a higher number shows the text of 29H, UNKNOWN ERROR CODE, with its own number.
6Set: the text of the message alone. Clear: the long form. Bit 6 of the system flags 430FH set clears this bit, so that the long form is always given (4E0AH).
7Set: return to the caller of 4409H with Register A = the code (bit 6 as used) after the message (through the request handler's 4C4BH). Clear: go to the abort exit 4030H, which shows VTOS READY (4E95H).

Register Pairs BC, DE and HL are given back.

The Message

The message is put together in SYS0/SYS's sector buffer at 4200H and shown with 447BH, which also writes it, with the time in front, to the job log device JL when JL is not NIL. The text alone is the words of the message, each followed by a space, and 0DH. The long form starts on a new line with three asterisks, ERRCOD= and the error number as two decimal digits (05 for 5), a comma and a space, and ends with three asterisks:

*** ERRCOD=24, FILE NOT IN DIRECTORY ***

The long form then names the control block of the last file request, whose address SYS0/SYS keeps at 430AH (4E9CH), on a line of its own after 5 or 6 spaces: <FILE=NAME/EXT:d> from the directory record of an open file, <FILE=...> with the specification as typed for the errors marked in the table (the control block is not open then), or <DEVICE=*XX> for a device. A last line gives the address of the CALL that started that file request, from 430CH less 3: an address in SYS0/SYS or in the overlay that made the request (SYS2/SYS for an open, 4E69H; SYS3/SYS for a close; SYS10/SYS), not in the program:

REFERENCED AT X'48A4' (for a read through 4436H, whose 48A4H is the CALL 49EBH)

The bytes C3H, C5H and C6H in the texts are the space compression codes of the ROM's display driver (04A6H): C0H plus n is shown as n spaces.

How the Texts Are Kept

The 42 messages are made of 52 words. The table at 4F89H holds, for each error number, the low byte of its word list in 513EH-51DDH. Each byte of a list names a word by its number in bits 5-0 and has bit 7 set on the last byte; bit 6 of the last byte marks the errors whose control block holds the specification as typed. The table at 4FB1H gives the start of each word n at 4FB1H + 2n (from 4FB3H for word 1, since 4FB1H-4FB2H are the last two bytes of the table before), and a word ends where the next one starts, so the words at 5023H-513DH need no lengths and no separators. Words 03H, 14H and 24H have length 0 and no list names them.

The Messages

CodeText (the words; a mark after it: the file line shows the specification as typed)
00HNO ERROR
01HPARITY ERROR DURING HEADER READ
02HSEEK ERROR DURING READ
03HLOST DATA DURING READ
04HPARITY ERROR DURING READ
05HDATA RECORD NOT FOUND DURING READ
06HATTEMPTED TO READ SYSTEM DATA RECORD
07HATTEMPTED TO READ LOCKED/DELETED DATA RECORD
08HDEVICE NOT AVAILABLE (as typed)
09HPARITY ERROR DURING HEADER WRITE
0AHSEEK ERROR DURING WRITE
0BHLOST DATA DURING WRITE
0CHPARITY ERROR DURING WRITE
0DHDATA RECORD NOT FOUND DURING WRITE
0EHWRITE FAULT ON DISK DRIVE
0FHWRITE PROTECTED DISK
10HILLEGAL LOGICAL FILE NUMBER
11HDIRECTORY READ ERROR
12HDIRECTORY WRITE ERROR
13HILLEGAL FILE NAME (as typed)
14HGAT READ ERROR
15HGAT WRITE ERROR
16HHIT READ ERROR
17HHIT WRITE ERROR
18HFILE NOT IN DIRECTORY (as typed)
19HFILE ACCESS DENIED (as typed)
1AHFULL OR WRITE PROTECTED DISK (as typed)
1BHDISK SPACE FULL
1CHEND OF FILE ENCOUNTERED
1DHRECORD NUMBER OUT OF RANGE
1EHDIRECTORY FULL - CAN'T EXTEND FILE
1FHPROGRAM NOT FOUND
20HILLEGAL DRIVE NUMBER (as typed)
21HNO DEVICE SPACE AVAILABLE (as typed)
22HLOAD FILE FORMAT ERROR
23HMEMORY FAULT
24HATTEMPTED TO LOAD READ ONLY MEMORY
25HILLEGAL ACCESS ATTEMPTED TO PROTECTED FILE
26HFILE NOT OPEN (as typed)
27HDEVICE IN USE
28HPROTECTED SYSTEM DEVICE
29HUNKNOWN ERROR CODE

Points to Note

The specification copied into the file line counts with Register B, which LD BC,0018H sets to 00H, so the copy stops only at 03H, 0DH or 256 characters (4ED1H). The line has room for 14 characters; a longer specification, which a password makes common, runs over the line REFERENCED AT at 4F72H. That line then shows the end of the specification (with exactly 15 characters, a blank line), and stays so for later messages while SYS4/SYS remains in memory, which is the case after a code with bit 7 set; with bit 7 clear the abort exit loads SYS1/SYS over it. A text with no 03H or 0DH in its first 256 bytes would be copied up to 5061H, over the tables at 4F89H-5022H.

The specification is shown as typed, so the file line shows the password, on the display and in the job log.

A file with no extension is shown with a slash and nothing after it, NAME/:d (4F00H); the read of its directory record is not tested (4EEAH).

The file line and the line REFERENCED AT name the last file request, which need not be the one that failed.

An error number above 29H shows UNKNOWN ERROR CODE, but ERRCOD shows the number given.

Memory Map

Load Areas

Addresses
Size
Contents
4E00H-4E3DH
62 bytes
Entry
The stack, the code adjusted by 430FH bit 6, the start of the long form with the decimal number.
4E3EH-4E70H
51 bytes
The Words
The word list of the error copied word by word to 4200H.
4E71H-4E9BH
43 bytes
Show the Message
The end of the message, 447BH, the return or the abort exit.
4E9CH-4F40H
165 bytes
File or Device Line
The control block of the last file request, the line REFERENCED AT.
4F41H-4F88H
72 bytes
Texts
The start of the long form and the three line templates.
4F89H-4FB2H
42 bytes
Word List Table
The low byte of each error's word list.
4FB3H-5022H
112 bytes
Word Starts
The start of each word 01H-37H and the end of 37H.
5023H-513DH
283 bytes
The Words
52 words with no separators.
513EH-51DDH
160 bytes
Word Lists
One list for each error 00H-29H.

Variables

Memory Outside the File

Address
Size
Contents
4200H-42FFH
256 bytes
Sector Buffer of SYS0/SYS
The message is put together here (4E13H); the directory sector of an open file is read here for the file line (4EEAH).
430AH-430BH
2 bytes
Control Block of the Last File Request
Stored by SYS0/SYS 49F1H; read at 4E9EH for the file or device line.
430CH-430DH
2 bytes
Return Address of the Last File Request
The address after its CALL 49EBH or 49E9H (SYS0/SYS 49EEH); less 3 it is shown after REFERENCED AT (4F2EH).
430FH
1 byte
System Flags
Bit 6 set: bit 6 of the error code is cleared, the long form is given (4E0AH).

Operands Changed While Running

Address
Size
Contents
4E97H-4E98H
2 bytes
Return into the Request Handler
Operand of JP M,0000H at 4E96H: 4C4BH, taken from the stack at 4E01H.
4F57H-4F58H
2 bytes
Device Letters
The XX of the device line, written at 4EB5H.
4F62H-4F71H
16 bytes
File Line
The name, extension and drive or the specification as typed, then the closing bracket and 0DH (4EDEH-4F25H); a longer specification runs on into 4F72H.
4F83H-4F86H
4 bytes
Address in Hex
The address of the CALL that started the file request (4F38H).

Outside Routines

AddressContents
447BHSYS0/SYS: display the text at Register Pair HL and write it to the job log (4E86H, 4F2BH, 4F3EH).
4B10HSYS0/SYS: read the directory sector of entry Register B on drive Register C into 4200H (4EEAH).
4DE7HSYS0/SYS: Register Pair DE as four hex digits at Register Pair HL (4F38H).
4030HSYS0/SYS: the abort exit, request A3H, VTOS READY (4E99H).
4C4BHSYS0/SYS: the request handler after the overlay's call: the BREAK byte put back, return to the caller of 4409H (4E96H).

Disassembly

4E00H - Error Message Entry

SYS4/SYS is loaded at 4E00H by the request handler of SYS0/SYS for request 86H (bits 3-0 = 6, directory entry code 06H), which SYS0/SYS's 44B0H issues after a program jumps or calls 4409H with an error code in Register A. 44B0H pushes Register Pair AF before RST 28H, and the request handler calls the overlay from 4C48H, so the stack holds the return address 4C4BH, then the caller's Register Pair AF, then the address the caller of 4409H returns to when it called 4409H (after a jump, whatever the caller had on the stack). The code: bits 5-0 the error (00H-29H; higher numbers show the text of 29H), bit 6 set for the text alone, bit 7 set to return to the caller after the message instead of going to the abort exit 4030H.

4E00
EX (SP),HL E3
Exchange Register Pair HL with the top of the stack (the Stack Pointer's word): Register Pair HL = 4C4BH, the return into SYS0/SYS's request handler; the caller's Register Pair HL goes onto the stack.
4E01
LD (4E97H),HL 22 97 4E
Store Register Pair HL (4C4BH, the return into the request handler) to 4E97H, the operand of JP M,0000H at 4E96H.
4E04
POP HL E1
Restore Register Pair HL from the stack: the caller's value.
4E05
POP AF F1
Restore Register Pair AF from the stack: Register A = the error code pushed by 44B0H.
4E06
PUSH HL E5
Save Register Pair HL (the caller's) to the stack, for 4E94H.
4E07
PUSH DE D5
Save Register Pair DE (the caller's) to the stack, for 4E93H.
4E08
PUSH BC C5
Save Register Pair BC (the caller's) to the stack, for 4E92H.
4E09
LD B,A 47
Copy Register A (the error code) into Register B.
4E0A
LD A,(430FH) 3A 0F 43
Fetch the system flags from 430FH into Register A.
4E0D
AND 40H E6 40
Mask Register A to bit 6 of the system flags, 40H when set.
4E0F
XOR B A8
Exclusive OR Register B (the error code) into Register A: bit 6 is now the code's bit 6 inverted when 430FH bit 6 is set; the other bits are the code's.
4E10
AND B A0
AND Register B (the error code) into Register A: bit 6 of the code is cleared when bit 6 of 430FH is set, and the other bits are kept, so that the long form of the message is given.
4E11
LD B,A 47
Copy Register A (the error code as it will be used) into Register B.
4E12
PUSH AF F5
Save Register Pair AF (Register A the error code) to the stack, for 4E71H.
4E13
LD DE,4200H 11 00 42
Point Register Pair DE to 4200H, SYS0/SYS's sector buffer, where the message is put together.
4E16
AND 3FH E6 3F
Mask Register A (the error code) to bits 5-0: the error number.
4E18
LD C,A 4F
Copy Register A (the error number) into Register C.
4E19
BIT 6,B CB 70
Test bit 6 of Register B (the error code): set for the text of the message alone.
4E1B
LD B,00H 06 00
Load Register B with 00H, so that Register Pair BC = the error number. LD does not change the flags.
4E1D
If the NZ FLAG is set (bit 6 set: the text alone), JUMP to 4E3EH to look up the words.
4E1F
PUSH BC C5
Save Register Pair BC (the error number) to the stack.
4E20
LD HL,4F41H 21 41 4F
Point Register Pair HL to 4F41H: a line feed, three asterisks and ERRCOD=.
4E23
LD BC,000CH 01 0C 00
Load Register Pair BC with 000CH, the 12 bytes of that text.
4E26
LDIR ED B0
Copy the 12 bytes from Register Pair HL (4F41H) to Register Pair DE (4200H-420BH); Register Pair DE ends at 420CH and Register Pair BC at 0000H.
4E28
POP BC C1
Restore Register Pair BC from the stack: Register C = the error number, Register B = 00H.
4E29
EX DE,HL EB
Exchange Register Pair DE (420CH) with Register Pair HL: Register Pair HL = 420CH, the place of the first digit.
4E2A
LD C,A 4F
Copy Register A (the error number, unchanged by the LDIR) into Register C.
4E2B
LD (HL),2FH 36 2F
Store 2FH, the character before 0, to the tens digit at Register Pair HL.
4E2D
INC (HL) 34
Increment the tens digit at Register Pair HL by one, once for each ten in Register A and once more.
4E2E
SUB 0AH D6 0A
SUBtract 0AH (10) from Register A (the error number).
4E30
If the NC FLAG is set (no borrow: Register A was 10 or more), JUMP back to 4E2DH for the next ten.
4E32
INC L 2C
Increment Register L: Register Pair HL = 420DH, the place of the units digit.
4E33
ADD A,3AH C6 3A
Add 3AH to Register A (the units less 10): Register A = 30H plus the units, the digit.
4E35
LD (HL),A 77
Store Register A (the units digit) to Register Pair HL.
4E36
INC L 2C
Increment Register L: Register Pair HL = 420EH.
4E37
LD (HL),2CH 36 2C
Store 2CH, a comma, to Register Pair HL (420EH).
4E39
INC L 2C
Increment Register L: Register Pair HL = 420FH.
4E3A
LD (HL),20H 36 20
Store 20H, a space, to Register Pair HL (420FH).
4E3C
INC L 2C
Increment Register L: Register Pair HL = 4210H, the place of the first word.
4E3D
EX DE,HL EB
Exchange Register Pair HL with Register Pair DE: Register Pair DE = 4210H, where the words go.

4E3EH - The Words of the Message

Register C = the error number, Register B = 00H, Register Pair DE = the place in 4200H for the text. The byte of the error in the table at 4F89H is the low byte of its word list in 5100H-51FFH. Each byte of the list names a word: bits 5-0 the word's number n, whose start is the word at 4FB1H + 2n and whose end is the start of word n + 1; bit 6 of the list's last byte tells what the control block of the request holds (4E9CH); bit 7 is set on the last byte. Each word is copied with a space after it.

4E3E
LD A,29H 3E 29
Load Register A with 29H, the highest error number with a text of its own, UNKNOWN ERROR CODE.
4E40
CP C B9
Compare Register A (29H) against Register C (the error number).
4E41
If the NC FLAG is set (the error number is 29H or less), JUMP to 4E44H to keep it.
4E43
LD C,A 4F
Copy Register A (29H) into Register C: an error number above 29H gives UNKNOWN ERROR CODE.
4E44
LD HL,4F89H 21 89 4F
Point Register Pair HL to 4F89H, the table of the errors' word lists.
4E47
ADD HL,BC 09
Add Register Pair BC (the error number, Register B = 00H) to Register Pair HL: the error's byte in the table.
4E48
LD L,(HL) 6E
Fetch the error's byte at Register Pair HL into Register L: the low byte of its word list.
4E49
LD H,51H 26 51
Load Register H with 51H: Register Pair HL = the word list of the error, in 513EH-51DDH.
4E4B
LD A,(HL) 7E
Fetch the next byte of the word list at Register Pair HL into Register A.
4E4C
AND 3FH E6 3F
Mask Register A to bits 5-0: the number of the word.
4E4E
ADD A,A 87
Add Register A to itself: the word's number times 2, the offset of its entry in the table at 4FB1H.
4E4F
PUSH HL E5
Save Register Pair HL (the place in the word list) to the stack.
4E50
LD C,A 4F
Copy Register A (the offset of the entry) into Register C.
4E51
LD B,00H 06 00
Load Register B with 00H: Register Pair BC = the offset of the entry.
4E53
LD HL,4FB1H 21 B1 4F
Point Register Pair HL to 4FB1H, the table of the words' starts (the entry of word 1 is at 4FB3H).
4E56
ADD HL,BC 09
Add Register Pair BC (the offset) to Register Pair HL: the word's entry.
4E57
LD C,(HL) 4E
Fetch the low byte of the word's start at Register Pair HL into Register C.
4E58
INC HL 23
Increment Register Pair HL to the high byte of the entry.
4E59
LD B,(HL) 46
Fetch the high byte of the word's start at Register Pair HL into Register B: Register Pair BC = the start of the word.
4E5A
INC HL 23
Increment Register Pair HL to the entry of the next word.
4E5B
LD A,(HL) 7E
Fetch the low byte of the next word's start at Register Pair HL into Register A.
4E5C
INC HL 23
Increment Register Pair HL to the high byte of that entry.
4E5D
LD H,(HL) 66
Fetch the high byte of the next word's start at Register Pair HL into Register H.
4E5E
LD L,A 6F
Copy Register A into Register L: Register Pair HL = the start of the next word, the end of this one.
4E5F
OR A B7
OR Register A with itself, which clears the CARRY FLAG for the subtraction.
4E60
SBC HL,BC ED 42
SUBtract Register Pair BC (the start of the word) from Register Pair HL (its end): Register Pair HL = the length of the word.
4E62
PUSH BC C5
Save Register Pair BC (the start of the word) to the stack.
4E63
EX (SP),HL E3
Exchange Register Pair HL (the length) with the top of the stack (the Stack Pointer's word): Register Pair HL = the start of the word.
4E64
POP BC C1
Restore Register Pair BC from the stack: Register Pair BC = the length of the word.
4E65
LDIR ED B0
Copy the word from Register Pair HL to Register Pair DE, Register Pair BC bytes; Register Pair DE ends after it. A word of length 0 would make the LDIR copy 65536 bytes: no word list names the empty entries 03H, 14H and 24H.
4E67
LD A,20H 3E 20
Load Register A with 20H, the space that follows each word.
4E69
LD (DE),A 12
Store Register A (the space) after the word at Register Pair DE.
4E6A
INC E 1C
Increment Register E: Register Pair DE = the place of the next word (the message stays inside 4200H-42FFH).
4E6B
POP HL E1
Restore Register Pair HL from the stack: the place in the word list.
4E6C
LD A,(HL) 7E
Fetch the byte of the word list at Register Pair HL into Register A again.
4E6D
INC HL 23
Increment Register Pair HL to the next byte of the word list.
4E6E
RLCA 07
Rotate Register A left: bit 7 (the last word) goes into the CARRY FLAG.
4E6F
If the NC FLAG is set (bit 7 clear: more words), JUMP back to 4E4BH for the next word.

4E71H - Show the Message

The long form ends with three asterisks, and every message with 0DH; the text in 4200H is displayed and written to the job log through 447BH. The long form also shows the file or device of the request (4E9CH). Register Pair HL = the byte after the word list.

4E71
POP AF F1
Restore Register Pair AF from the stack: Register A = the error code (with bit 6 as used).
4E72
PUSH AF F5
Save Register Pair AF (the error code) to the stack again, for 4E8AH.
4E73
PUSH HL E5
Save Register Pair HL (the byte after the word list) to the stack.
4E74
BIT 6,A CB 77
Test bit 6 of Register A (the error code): set for the text alone.
4E76
If the NZ FLAG is set (the text alone), JUMP to 4E80H: no asterisks at the end of the message.
4E78
LD HL,4F42H 21 42 4F
Point Register Pair HL to 4F42H, the three asterisks of the text at 4F41H.
4E7B
LD BC,0003H 01 03 00
Load Register Pair BC with 0003H, the three asterisks.
4E7E
LDIR ED B0
Copy the three asterisks from Register Pair HL (4F42H) to Register Pair DE, after the last word and its space; Register Pair BC counts them down to 0000H.
4E80
LD A,0DH 3E 0D
Load Register A with 0DH, the carriage return that ends the message.
4E82
LD (DE),A 12
Store Register A (0DH) to the end of the message at Register Pair DE.
4E83
LD HL,4200H 21 00 42
Point Register Pair HL to 4200H, the start of the message.
4E86
GOSUB to 447BH (SYS0/SYS) to display the text at Register Pair HL and write it to the job log (the time in front) when JL is not NIL.
4E89
POP HL E1
Restore Register Pair HL from the stack: the byte after the word list.
4E8A
POP AF F1
Restore Register Pair AF from the stack: Register A = the error code.
4E8B
PUSH AF F5
Save Register Pair AF (the error code) to the stack again, for 4E91H.
4E8C
BIT 6,A CB 77
Test bit 6 of Register A (the error code): set for the text alone.
4E8E
If the Z FLAG is set (the long form), GOSUB to 4E9CH to show the file or device of the last file request and the address of the CALL 49EBH or 49E9H that started it.
4E91
POP AF F1
Restore Register Pair AF from the stack: Register A = the error code.
4E92
POP BC C1
Restore Register Pair BC from the stack: the caller's.
4E93
POP DE D1
Restore Register Pair DE from the stack: the caller's.
4E94
POP HL E1
Restore Register Pair HL from the stack: the caller's.
4E95
OR A B7
OR Register A (the error code) with itself: the S FLAG is set when bit 7 is set.
4E96
JP M,0000H FA 00 00
If the M FLAG is set (bit 7 of the code: return to the caller), JUMP to the operand written at 4E01H (0000H in the file), 4C4BH in the request handler, which puts the BREAK byte back and returns to the caller of 4409H with Register A = the error code (bit 6 as used) and the flags of the OR at 4E95H.
4E99
JUMP to 4030H, the abort exit: SYS1/SYS function 2 shows VTOS READY and reads the next command.

4E9CH - Show the File or Device

The long form names the file or device of the request: Index Register IX = the control block at (430AH), stored by SYS0/SYS's 49F1H at the start of each file request. Bit 6 of the last byte of the word list (Register Pair HL less one) is set for the errors met before a file is open (08H, 13H, 18H, 19H, 1AH, 20H, 21H, 26H): the control block then holds the specification as typed. When it is clear the block is open and its directory record gives the name, or it is a device route and bytes +06H-+07H give the device. The line is shown with 5 spaces (C5H) or 6 spaces (C6H) in front, then the line REFERENCED AT with the address of the CALL 49EBH or 49E9H that started the request, in SYS0/SYS or in the overlay that made it.

4E9C
PUSH IX DD E5
Save Index Register IX (the caller's) to the stack.
4E9E
LD IX,(430AH) DD 2A 0A 43
Load Index Register IX with the word at 430AH: the control block of the last file request.
4EA2
DEC HL 2B
Decrement Register Pair HL: the last byte of the error's word list.
4EA3
BIT 6,(HL) CB 76
Test bit 6 of the last byte of the word list at Register Pair HL.
4EA5
If the NZ FLAG is set (the control block holds the specification as text), JUMP to 4EBEH.
4EA7
LD C,(IX+06H) DD 4E 06
Fetch byte +06H of the control block at Index Register IX into Register C: the drive of an open file, or the first letter of a device route's name.
4EAA
LD B,(IX+07H) DD 46 07
Fetch byte +07H of the control block at Index Register IX into Register B: the directory entry code of an open file, or the second letter of a device's name.
4EAD
BIT 7,(IX+00H) DD CB 00 7E
Test bit 7 of byte +00H of the control block at Index Register IX: set for an open file.
4EB1
If the NZ FLAG is set (an open file), JUMP to 4EE4H to take the name from its directory record.
4EB3
POP IX DD E1
Restore Index Register IX from the stack: the caller's. Entry 4EB3H from 4EC9H for a text that starts with an asterisk.
4EB5
LD (4F57H),BC ED 43 57 4F
Store Register Pair BC (the two letters of the device) to 4F57H-4F58H, the XX of the text at 4F4DH: Register C first, Register B second.
4EB9
LD HL,4F4DH 21 4D 4F
Point Register Pair HL to 4F4DH: 6 spaces and the device in angle brackets.
4EBC
JUMP to 4F2BH to show the line at Register Pair HL and the address of the call.
4EBE
LD C,(IX+01H) DD 4E 01
Fetch byte +01H of the control block at Index Register IX into Register C: after an asterisk, the first letter of a device.
4EC1
LD B,(IX+02H) DD 46 02
Fetch byte +02H of the control block at Index Register IX into Register B: the second letter of a device.
4EC4
LD A,(IX+00H) DD 7E 00
Fetch byte +00H of the control block at Index Register IX into Register A: the first character of the specification.
4EC7
CP 2AH FE 2A
Compare Register A (the first character) against 2AH, an asterisk.
4EC9
If the Z FLAG is set (a device specification), JUMP to 4EB3H to show it as a device.
4ECB
PUSH IX DD E5
Save Index Register IX (the control block) to the stack.
4ECD
POP HL E1
Restore Register Pair HL from the stack: Register Pair HL = the control block, the text of the specification.
4ECE
LD DE,4F62H 11 62 4F
Point Register Pair DE to 4F62H, the place of the name in the text at 4F5BH.
4ED1
LD BC,0018H 01 18 00
Load Register Pair BC with 0018H. The loop below counts with Register B, which is 00H here, so it stops only at 03H or 0DH or after 256 characters, not after 24.
4ED4
LD A,(HL) 7E
Fetch a character of the specification at Register Pair HL into Register A.
4ED5
CP 03H FE 03
Compare Register A against 03H, the end of a specification.
4ED7
If the Z FLAG is set (03H), JUMP to 4F1FH to end the line.
4ED9
CP 0DH FE 0D
Compare Register A against 0DH, a carriage return.
4EDB
If the Z FLAG is set (0DH), JUMP to 4F1FH to end the line.
4EDD
INC HL 23
Increment Register Pair HL to the next character of the specification.
4EDE
LD (DE),A 12
Store Register A (the character) to the line at Register Pair DE. The password of the specification is copied as well.
4EDF
INC DE 13
Increment Register Pair DE to the next place in the line; with the closing bracket and 0DH written after it, a specification of more than 14 characters runs past 4F71H into the text at 4F72H.
4EE0
Decrement Register B and JUMP back to 4ED4H while it is not 00H (256 characters at most).
4EE2
JUMP to 4F1FH to end the line after 256 characters.
4EE4
LD C,(IX+06H) DD 4E 06
Fetch byte +06H of the control block at Index Register IX, the drive of the open file, into Register C.
4EE7
LD B,(IX+07H) DD 46 07
Fetch byte +07H of the control block at Index Register IX, the directory entry code of the file, into Register B.
4EEA
GOSUB to 4B10H (SYS0/SYS) to read the directory sector of entry Register B on drive Register C into 4200H; Register Pair HL = the file's record. The result of the read is not tested.
4EED
LD BC,0005H 01 05 00
Load Register Pair BC with 0005H, the offset of the name in a directory record.
4EF0
ADD HL,BC 09
Add Register Pair BC (0005H) to Register Pair HL: the name of the file, bytes +05H-+0CH of the record.
4EF1
LD DE,4F62H 11 62 4F
Point Register Pair DE to 4F62H, the place of the name in the text at 4F5BH.
4EF4
LD B,08H 06 08
Load Register B with 08H, the most characters of a name.
4EF6
LD A,(HL) 7E
Fetch a character of the name at Register Pair HL into Register A.
4EF7
CP 20H FE 20
Compare Register A (the character) against 20H, a space.
4EF9
If the Z FLAG is set (a space: the name has ended), JUMP to 4F00H.
4EFB
INC L 2C
Increment Register L to the next character of the name.
4EFC
LD (DE),A 12
Store Register A (the character) to the line at Register Pair DE.
4EFD
INC DE 13
Increment Register Pair DE to the next place in the line.
4EFE
Decrement Register B and JUMP back to 4EF6H while characters of the name are left.
4F00
LD A,2FH 3E 2F
Load Register A with 2FH, a slash. It is put in even when the file has no extension.
4F02
LD (DE),A 12
Store Register A (the slash) to the line at Register Pair DE.
4F03
INC DE 13
Increment Register Pair DE to the next place in the line.
4F04
LD C,B 48
Copy Register B (the characters of the name not used) into Register C.
4F05
LD B,00H 06 00
Load Register B with 00H: Register Pair BC = the characters left.
4F07
ADD HL,BC 09
Add Register Pair BC to Register Pair HL: the extension, bytes +0DH-+0FH of the record.
4F08
LD B,03H 06 03
Load Register B with 03H, the most characters of an extension.
4F0A
LD A,(HL) 7E
Fetch a character of the extension at Register Pair HL into Register A.
4F0B
INC L 2C
Increment Register L to the next character of the extension.
4F0C
CP 20H FE 20
Compare Register A (the character) against 20H, a space.
4F0E
If the Z FLAG is set (a space: the extension has ended), JUMP to 4F14H.
4F10
LD (DE),A 12
Store Register A (the character) to the line at Register Pair DE.
4F11
INC DE 13
Increment Register Pair DE to the next place in the line.
4F12
Decrement Register B and JUMP back to 4F0AH while characters of the extension are left.
4F14
LD A,3AH 3E 3A
Load Register A with 3AH, the colon before the drive digit.
4F16
LD (DE),A 12
Store Register A (the colon) to the line at Register Pair DE.
4F17
INC DE 13
Increment Register Pair DE to the next place in the line.
4F18
LD A,(IX+06H) DD 7E 06
Fetch byte +06H of the control block at Index Register IX, the drive, into Register A.
4F1B
ADD A,30H C6 30
Add 30H to Register A: the ASCII digit of the drive.
4F1D
LD (DE),A 12
Store Register A (the drive digit) to the line at Register Pair DE.
4F1E
INC DE 13
Increment Register Pair DE to the next place in the line.
4F1F
LD A,3EH 3E 3E
Load Register A with 3EH, the closing angle bracket.
4F21
LD (DE),A 12
Store Register A (the closing angle bracket) to the line at Register Pair DE.
4F22
INC DE 13
Increment Register Pair DE to the next place in the line.
4F23
LD A,0DH 3E 0D
Load Register A with 0DH, the carriage return that ends the line.
4F25
LD (DE),A 12
Store Register A (0DH) to the line at Register Pair DE.
4F26
POP IX DD E1
Restore Index Register IX from the stack: the caller's.
4F28
LD HL,4F5BH 21 5B 4F
Point Register Pair HL to 4F5BH: 5 spaces and the file in angle brackets.
4F2B
GOSUB to 447BH (SYS0/SYS) to display the line at Register Pair HL and write it to the job log.
4F2E
LD DE,(430CH) ED 5B 0C 43
Load Register Pair DE with the word at 430CH: the address after the CALL 49EBH (or 49E9H) that started the last file request, stored by SYS0/SYS's 49EEH.
4F32
DEC DE 1B
Decrement Register Pair DE, the first of three: back over the CALL instruction.
4F33
DEC DE 1B
Decrement Register Pair DE, the second of three.
4F34
DEC DE 1B
Decrement Register Pair DE, the third: Register Pair DE = the address of that CALL instruction.
4F35
LD HL,4F83H 21 83 4F
Point Register Pair HL to 4F83H, the NNNN of the text at 4F72H.
4F38
GOSUB to 4DE7H (SYS0/SYS) to write Register Pair DE as four hex digits at Register Pair HL (4F83H-4F86H).
4F3B
LD HL,4F72H 21 72 4F
Point Register Pair HL to 4F72H: 3 spaces and REFERENCED AT with the address.
4F3E
JUMP to 447BH (SYS0/SYS) to display the line at Register Pair HL and write it to the job log; its RET returns to 4E91H.

4F41H - Texts

The bytes C3H, C5H and C6H are space compression codes: the ROM's display driver (04A6H) shows a byte C0H plus n as n spaces.

4F41
DEFB 0AH 0A
A line feed, so that the long form of a message starts on a new line; the first of the 12 bytes copied to 4200H at 4E26H.
4F42-4F44
DEFM "***" 2A 2A 2A
The three asterisks after the line feed, and again at the end of the long form (copied from here at 4E7EH).
4F45-4F4C
DEFM " ERRCOD=" 20 45 52 52 43 4F 44 3D
The rest of the start of the long form: the decimal error number follows at 420CH-420DH (4E2BH-4E35H), then a comma and a space.
4F4D
DEFB C6H C6
A space compression code: 6 spaces in front of the device line.
4F4E-4F56
DEFM "<DEVICE=*" 3C 44 45 56 49 43 45 3D 2A
The device line: the two letters of the device follow at 4F57H.
4F57-4F58
DEFM "XX" 58 58
The two letters of the device, written at 4EB5H from Register C and Register B.
4F59-4F5A
DEFM ">",0DH 3E 0D
The closing angle bracket and the carriage return that end the device line.
4F5B
DEFB C5H C5
A space compression code: 5 spaces in front of the file line.
4F5C-4F61
DEFM "<FILE=" 3C 46 49 4C 45 3D
The start of the file line after the 5 spaces: the name follows at 4F62H.
4F62-4F6F
DEFM "NNNNNNNN/EEE:D" 4E 4E 4E 4E 4E 4E 4E 4E 2F 45 45 45 3A 44
The place of the name, the extension and the drive (4EF1H-4F1EH) or of the specification as typed (4ED4H-4EE0H); the line is ended at 4F1FH-4F25H wherever the text stops.
4F70-4F71
DEFM ">",0DH 3E 0D
The closing angle bracket and carriage return of the template; 4F1FH-4F25H write their own after the text put in.
4F72
DEFB C3H C3
A space compression code: 3 spaces in front of the line REFERENCED AT.
4F73-4F82
DEFM "REFERENCED AT X'" 52 45 46 45 52 45 4E 43 45 44 20 41 54 20 58 27
The line that gives the address of the CALL 49EBH or 49E9H that started the last file request (inside SYS0/SYS or the overlay that made the request); the four hex digits follow at 4F83H.
4F83-4F86
DEFM "NNNN" 4E 4E 4E 4E
The address of the CALL that started the file request, in hex, written at 4F38H.
4F87-4F88
DEFM "'",0DH 27 0D
The closing quote and the carriage return that end the line.

4F89H - Word Lists of the Errors

One byte for each error number 00H-29H, the low byte of its word list in 5100H-51FFH (4E48H). The bytes of 28H and 29H, at 4FB1H-4FB2H, are also the place of the entry of word 0 in the table that follows, which no list names.

4F89
DEFB 3EH 3E
Error 00H: its word list starts at 513EH, the text NO ERROR.
4F8A
DEFB 40H 40
Error 01H: its word list starts at 5140H, the text PARITY ERROR DURING HEADER READ.
4F8B
DEFB 45H 45
Error 02H: its word list starts at 5145H, the text SEEK ERROR DURING READ.
4F8C
DEFB 49H 49
Error 03H: its word list starts at 5149H, the text LOST DATA DURING READ.
4F8D
DEFB 4DH 4D
Error 04H: its word list starts at 514DH, the text PARITY ERROR DURING READ.
4F8E
DEFB 51H 51
Error 05H: its word list starts at 5151H, the text DATA RECORD NOT FOUND DURING READ.
4F8F
DEFB 57H 57
Error 06H: its word list starts at 5157H, the text ATTEMPTED TO READ SYSTEM DATA RECORD.
4F90
DEFB 5CH 5C
Error 07H: its word list starts at 515CH, the text ATTEMPTED TO READ LOCKED/DELETED DATA RECORD.
4F91
DEFB 61H 61
Error 08H: its word list starts at 5161H, the text DEVICE NOT AVAILABLE.
4F92
DEFB 64H 64
Error 09H: its word list starts at 5164H, the text PARITY ERROR DURING HEADER WRITE.
4F93
DEFB 69H 69
Error 0AH: its word list starts at 5169H, the text SEEK ERROR DURING WRITE.
4F94
DEFB 6DH 6D
Error 0BH: its word list starts at 516DH, the text LOST DATA DURING WRITE.
4F95
DEFB 71H 71
Error 0CH: its word list starts at 5171H, the text PARITY ERROR DURING WRITE.
4F96
DEFB 75H 75
Error 0DH: its word list starts at 5175H, the text DATA RECORD NOT FOUND DURING WRITE.
4F97
DEFB 7BH 7B
Error 0EH: its word list starts at 517BH, the text WRITE FAULT ON DISK DRIVE.
4F98
DEFB 80H 80
Error 0FH: its word list starts at 5180H, the text WRITE PROTECTED DISK.
4F99
DEFB 83H 83
Error 10H: its word list starts at 5183H, the text ILLEGAL LOGICAL FILE NUMBER.
4F9A
DEFB 87H 87
Error 11H: its word list starts at 5187H, the text DIRECTORY READ ERROR.
4F9B
DEFB 8AH 8A
Error 12H: its word list starts at 518AH, the text DIRECTORY WRITE ERROR.
4F9C
DEFB 8DH 8D
Error 13H: its word list starts at 518DH, the text ILLEGAL FILE NAME.
4F9D
DEFB 90H 90
Error 14H: its word list starts at 5190H, the text GAT READ ERROR.
4F9E
DEFB 93H 93
Error 15H: its word list starts at 5193H, the text GAT WRITE ERROR.
4F9F
DEFB 96H 96
Error 16H: its word list starts at 5196H, the text HIT READ ERROR.
4FA0
DEFB 99H 99
Error 17H: its word list starts at 5199H, the text HIT WRITE ERROR.
4FA1
DEFB 9CH 9C
Error 18H: its word list starts at 519CH, the text FILE NOT IN DIRECTORY.
4FA2
DEFB A0H A0
Error 19H: its word list starts at 51A0H, the text FILE ACCESS DENIED.
4FA3
DEFB A3H A3
Error 1AH: its word list starts at 51A3H, the text FULL OR WRITE PROTECTED DISK.
4FA4
DEFB A8H A8
Error 1BH: its word list starts at 51A8H, the text DISK SPACE FULL.
4FA5
DEFB ABH AB
Error 1CH: its word list starts at 51ABH, the text END OF FILE ENCOUNTERED.
4FA6
DEFB AFH AF
Error 1DH: its word list starts at 51AFH, the text RECORD NUMBER OUT OF RANGE.
4FA7
DEFB B4H B4
Error 1EH: its word list starts at 51B4H, the text DIRECTORY FULL - CAN'T EXTEND FILE.
4FA8
DEFB B8H B8
Error 1FH: its word list starts at 51B8H, the text PROGRAM NOT FOUND.
4FA9
DEFB BBH BB
Error 20H: its word list starts at 51BBH, the text ILLEGAL DRIVE NUMBER.
4FAA
DEFB BEH BE
Error 21H: its word list starts at 51BEH, the text NO DEVICE SPACE AVAILABLE.
4FAB
DEFB C2H C2
Error 22H: its word list starts at 51C2H, the text LOAD FILE FORMAT ERROR.
4FAC
DEFB C6H C6
Error 23H: its word list starts at 51C6H, the text MEMORY FAULT.
4FAD
DEFB C8H C8
Error 24H: its word list starts at 51C8H, the text ATTEMPTED TO LOAD READ ONLY MEMORY.
4FAE
DEFB CDH CD
Error 25H: its word list starts at 51CDH, the text ILLEGAL ACCESS ATTEMPTED TO PROTECTED FILE.
4FAF
DEFB D2H D2
Error 26H: its word list starts at 51D2H, the text FILE NOT OPEN.
4FB0
DEFB D5H D5
Error 27H: its word list starts at 51D5H, the text DEVICE IN USE.
4FB1
DEFB D8H D8
Error 28H: its word list starts at 51D8H, the text PROTECTED SYSTEM DEVICE.
4FB2
DEFB DBH DB
Error 29H: its word list starts at 51DBH, the text UNKNOWN ERROR CODE.

4FB3H - Starts of the Words

Two bytes for each word 01H-37H, the address of its first character; the entry of word n is at 4FB1H + 2n and the word ends where word n + 1 starts (4E57H-4E60H), so the entry at 5021H only gives the end of word 37H. Words 03H, 14H and 24H have length 0 and no list names them.

4FB3-4FB4
DEFW 5023H 23 50
Word 01H, NO: its 2 characters start at 5023H.
4FB5-4FB6
DEFW 5025H 25 50
Word 02H, ERROR: its 5 characters start at 5025H.
4FB7-4FB8
DEFW 502AH 2A 50
Word 03H: starts at 502AH, where word 04H starts too, so its length is 0; no word list names it.
4FB9-4FBA
DEFW 502AH 2A 50
Word 04H, PARITY: its 6 characters start at 502AH.
4FBB-4FBC
DEFW 5030H 30 50
Word 05H, DURING: its 6 characters start at 5030H.
4FBD-4FBE
DEFW 5036H 36 50
Word 06H, HEADER: its 6 characters start at 5036H.
4FBF-4FC0
DEFW 503CH 3C 50
Word 07H, DATA: its 4 characters start at 503CH.
4FC1-4FC2
DEFW 5040H 40 50
Word 08H, SEEK: its 4 characters start at 5040H.
4FC3-4FC4
DEFW 5044H 44 50
Word 09H, READ: its 4 characters start at 5044H.
4FC5-4FC6
DEFW 5048H 48 50
Word 0AH, WRITE: its 5 characters start at 5048H.
4FC7-4FC8
DEFW 504DH 4D 50
Word 0BH, LOST: its 4 characters start at 504DH.
4FC9-4FCA
DEFW 5051H 51 50
Word 0CH, NOT: its 3 characters start at 5051H.
4FCB-4FCC
DEFW 5054H 54 50
Word 0DH, ATTEMPTED TO: its 12 characters start at 5054H.
4FCD-4FCE
DEFW 5060H 60 50
Word 0EH, LOCKED/DELETED: its 14 characters start at 5060H.
4FCF-4FD0
DEFW 506EH 6E 50
Word 0FH, SYSTEM: its 6 characters start at 506EH.
4FD1-4FD2
DEFW 5074H 74 50
Word 10H, DIRECTORY: its 9 characters start at 5074H.
4FD3-4FD4
DEFW 507DH 7D 50
Word 11H, MEMORY: its 6 characters start at 507DH.
4FD5-4FD6
DEFW 5083H 83 50
Word 12H, ON: its 2 characters start at 5083H.
4FD7-4FD8
DEFW 5085H 85 50
Word 13H, DISK: its 4 characters start at 5085H.
4FD9-4FDA
DEFW 5089H 89 50
Word 14H: starts at 5089H, where word 15H starts too, so its length is 0; no word list names it.
4FDB-4FDC
DEFW 5089H 89 50
Word 15H, FAULT: its 5 characters start at 5089H.
4FDD-4FDE
DEFW 508EH 8E 50
Word 16H, PROTECTED: its 9 characters start at 508EH.
4FDF-4FE0
DEFW 5097H 97 50
Word 17H, ILLEGAL: its 7 characters start at 5097H.
4FE1-4FE2
DEFW 509EH 9E 50
Word 18H, LOGICAL: its 7 characters start at 509EH.
4FE3-4FE4
DEFW 50A5H A5 50
Word 19H, NUMBER: its 6 characters start at 50A5H.
4FE5-4FE6
DEFW 50ABH AB 50
Word 1AH, FILE: its 4 characters start at 50ABH.
4FE7-4FE8
DEFW 50AFH AF 50
Word 1BH, RECORD: its 6 characters start at 50AFH.
4FE9-4FEA
DEFW 50B5H B5 50
Word 1CH, END: its 3 characters start at 50B5H.
4FEB-4FEC
DEFW 50B8H B8 50
Word 1DH, OF: its 2 characters start at 50B8H.
4FED-4FEE
DEFW 50BAH BA 50
Word 1EH, OUT: its 3 characters start at 50BAH.
4FEF-4FF0
DEFW 50BDH BD 50
Word 1FH, RANGE: its 5 characters start at 50BDH.
4FF1-4FF2
DEFW 50C2H C2 50
Word 20H, ENCOUNTERED: its 11 characters start at 50C2H.
4FF3-4FF4
DEFW 50CDH CD 50
Word 21H, CODE: its 4 characters start at 50CDH.
4FF5-4FF6
DEFW 50D1H D1 50
Word 22H, GAT: its 3 characters start at 50D1H.
4FF7-4FF8
DEFW 50D4H D4 50
Word 23H, HIT: its 3 characters start at 50D4H.
4FF9-4FFA
DEFW 50D7H D7 50
Word 24H: starts at 50D7H, where word 25H starts too, so its length is 0; no word list names it.
4FFB-4FFC
DEFW 50D7H D7 50
Word 25H, UNKNOWN: its 7 characters start at 50D7H.
4FFD-4FFE
DEFW 50DEH DE 50
Word 26H, LOAD: its 4 characters start at 50DEH.
4FFF-5000
DEFW 50E2H E2 50
Word 27H, SPACE: its 5 characters start at 50E2H.
5001-5002
DEFW 50E7H E7 50
Word 28H, ONLY: its 4 characters start at 50E7H.
5003-5004
DEFW 50EBH EB 50
Word 29H, NAME: its 4 characters start at 50EBH.
5005-5006
DEFW 50EFH EF 50
Word 2AH, DEVICE: its 6 characters start at 50EFH.
5007-5008
DEFW 50F5H F5 50
Word 2BH, FORMAT: its 6 characters start at 50F5H.
5009-500A
DEFW 50FBH FB 50
Word 2CH, FOUND: its 5 characters start at 50FBH.
500B-500C
DEFW 5100H 00 51
Word 2DH, IN: its 2 characters start at 5100H.
500D-500E
DEFW 5102H 02 51
Word 2EH, ACCESS: its 6 characters start at 5102H.
500F-5010
DEFW 5108H 08 51
Word 2FH, FULL: its 4 characters start at 5108H.
5011-5012
DEFW 510CH 0C 51
Word 30H, DRIVE: its 5 characters start at 510CH.
5013-5014
DEFW 5111H 11 51
Word 31H, DENIED: its 6 characters start at 5111H.
5015-5016
DEFW 5117H 17 51
Word 32H, PROGRAM: its 7 characters start at 5117H.
5017-5018
DEFW 511EH 1E 51
Word 33H, AVAILABLE: its 9 characters start at 511EH.
5019-501A
DEFW 5127H 27 51
Word 34H, - CAN'T EXTEND: its 14 characters start at 5127H.
501B-501C
DEFW 5135H 35 51
Word 35H, OPEN: its 4 characters start at 5135H.
501D-501E
DEFW 5139H 39 51
Word 36H, USE: its 3 characters start at 5139H.
501F-5020
DEFW 513CH 3C 51
Word 37H, OR: its 2 characters start at 513CH.
5021-5022
DEFW 513EH 3E 51
The end of word 37H (OR): 513EH, where the word lists start; no word 38H exists.

5023H - The Words

The characters of the words 01H-37H, one after another with nothing between them; a word is copied with a space after it (4E65H-4E6AH).

5023-5024
DEFM "NO" 4E 4F
Word 01H, used by the messages of errors 00H, 21H.
5025-5029
DEFM "ERROR" 45 52 52 4F 52
Word 02H, used by the messages of errors 00H, 01H, 02H, 04H, 09H, 0AH, 0CH, 11H, 12H, 14H, 15H, 16H, 17H, 22H, 29H.
502A-502F
DEFM "PARITY" 50 41 52 49 54 59
Word 04H, used by the messages of errors 01H, 04H, 09H, 0CH.
5030-5035
DEFM "DURING" 44 55 52 49 4E 47
Word 05H, used by the messages of errors 01H, 02H, 03H, 04H, 05H, 09H, 0AH, 0BH, 0CH, 0DH.
5036-503B
DEFM "HEADER" 48 45 41 44 45 52
Word 06H, used by the messages of errors 01H, 09H.
503C-503F
DEFM "DATA" 44 41 54 41
Word 07H, used by the messages of errors 03H, 05H, 06H, 07H, 0BH, 0DH.
5040-5043
DEFM "SEEK" 53 45 45 4B
Word 08H, used by the messages of errors 02H, 0AH.
5044-5047
DEFM "READ" 52 45 41 44
Word 09H, used by the messages of errors 01H, 02H, 03H, 04H, 05H, 06H, 07H, 11H, 14H, 16H, 24H.
5048-504C
DEFM "WRITE" 57 52 49 54 45
Word 0AH, used by the messages of errors 09H, 0AH, 0BH, 0CH, 0DH, 0EH, 0FH, 12H, 15H, 17H, 1AH.
504D-5050
DEFM "LOST" 4C 4F 53 54
Word 0BH, used by the messages of errors 03H, 0BH.
5051-5053
DEFM "NOT" 4E 4F 54
Word 0CH, used by the messages of errors 05H, 08H, 0DH, 18H, 1FH, 26H.
5054-505F
DEFM "ATTEMPTED TO" 41 54 54 45 4D 50 54 45 44 20 54 4F
Word 0DH, used by the messages of errors 06H, 07H, 24H, 25H.
5060-506D
DEFM "LOCKED/DELETED" 4C 4F 43 4B 45 44 2F 44 45 4C 45 54 45 44
Word 0EH, used only by the message of error 07H; its characters are copied by the LDIR at 4E65H.
506E-5073
DEFM "SYSTEM" 53 59 53 54 45 4D
Word 0FH, used by the messages of errors 06H, 28H.
5074-507C
DEFM "DIRECTORY" 44 49 52 45 43 54 4F 52 59
Word 10H, used by the messages of errors 11H, 12H, 18H, 1EH.
507D-5082
DEFM "MEMORY" 4D 45 4D 4F 52 59
Word 11H, used by the messages of errors 23H, 24H.
5083-5084
DEFM "ON" 4F 4E
Word 12H, used only by the message of error 0EH; its characters are copied by the LDIR at 4E65H.
5085-5088
DEFM "DISK" 44 49 53 4B
Word 13H, used by the messages of errors 0EH, 0FH, 1AH, 1BH.
5089-508D
DEFM "FAULT" 46 41 55 4C 54
Word 15H, used by the messages of errors 0EH, 23H.
508E-5096
DEFM "PROTECTED" 50 52 4F 54 45 43 54 45 44
Word 16H, used by the messages of errors 0FH, 1AH, 25H, 28H.
5097-509D
DEFM "ILLEGAL" 49 4C 4C 45 47 41 4C
Word 17H, used by the messages of errors 10H, 13H, 20H, 25H.
509E-50A4
DEFM "LOGICAL" 4C 4F 47 49 43 41 4C
Word 18H, used only by the message of error 10H; its characters are copied by the LDIR at 4E65H.
50A5-50AA
DEFM "NUMBER" 4E 55 4D 42 45 52
Word 19H, used by the messages of errors 10H, 1DH, 20H.
50AB-50AE
DEFM "FILE" 46 49 4C 45
Word 1AH, used by the messages of errors 10H, 13H, 18H, 19H, 1CH, 1EH, 22H, 25H, 26H.
50AF-50B4
DEFM "RECORD" 52 45 43 4F 52 44
Word 1BH, used by the messages of errors 05H, 06H, 07H, 0DH, 1DH.
50B5-50B7
DEFM "END" 45 4E 44
Word 1CH, used only by the message of error 1CH; its characters are copied by the LDIR at 4E65H.
50B8-50B9
DEFM "OF" 4F 46
Word 1DH, used by the messages of errors 1CH, 1DH.
50BA-50BC
DEFM "OUT" 4F 55 54
Word 1EH, used only by the message of error 1DH; its characters are copied by the LDIR at 4E65H.
50BD-50C1
DEFM "RANGE" 52 41 4E 47 45
Word 1FH, used only by the message of error 1DH; its characters are copied by the LDIR at 4E65H.
50C2-50CC
DEFM "ENCOUNTERED" 45 4E 43 4F 55 4E 54 45 52 45 44
Word 20H, used only by the message of error 1CH; its characters are copied by the LDIR at 4E65H.
50CD-50D0
DEFM "CODE" 43 4F 44 45
Word 21H, used only by the message of error 29H; its characters are copied by the LDIR at 4E65H.
50D1-50D3
DEFM "GAT" 47 41 54
Word 22H, used by the messages of errors 14H, 15H.
50D4-50D6
DEFM "HIT" 48 49 54
Word 23H, used by the messages of errors 16H, 17H.
50D7-50DD
DEFM "UNKNOWN" 55 4E 4B 4E 4F 57 4E
Word 25H, used only by the message of error 29H; its characters are copied by the LDIR at 4E65H.
50DE-50E1
DEFM "LOAD" 4C 4F 41 44
Word 26H, used by the messages of errors 22H, 24H.
50E2-50E6
DEFM "SPACE" 53 50 41 43 45
Word 27H, used by the messages of errors 1BH, 21H.
50E7-50EA
DEFM "ONLY" 4F 4E 4C 59
Word 28H, used only by the message of error 24H; its characters are copied by the LDIR at 4E65H.
50EB-50EE
DEFM "NAME" 4E 41 4D 45
Word 29H, used only by the message of error 13H; its characters are copied by the LDIR at 4E65H.
50EF-50F4
DEFM "DEVICE" 44 45 56 49 43 45
Word 2AH, used by the messages of errors 08H, 21H, 27H, 28H.
50F5-50FA
DEFM "FORMAT" 46 4F 52 4D 41 54
Word 2BH, used only by the message of error 22H; its characters are copied by the LDIR at 4E65H.
50FB-50FF
DEFM "FOUND" 46 4F 55 4E 44
Word 2CH, used by the messages of errors 05H, 0DH, 1FH.
5100-5101
DEFM "IN" 49 4E
Word 2DH, used by the messages of errors 18H, 27H.
5102-5107
DEFM "ACCESS" 41 43 43 45 53 53
Word 2EH, used by the messages of errors 19H, 25H.
5108-510B
DEFM "FULL" 46 55 4C 4C
Word 2FH, used by the messages of errors 1AH, 1BH, 1EH.
510C-5110
DEFM "DRIVE" 44 52 49 56 45
Word 30H, used by the messages of errors 0EH, 20H.
5111-5116
DEFM "DENIED" 44 45 4E 49 45 44
Word 31H, used only by the message of error 19H; its characters are copied by the LDIR at 4E65H.
5117-511D
DEFM "PROGRAM" 50 52 4F 47 52 41 4D
Word 32H, used only by the message of error 1FH; its characters are copied by the LDIR at 4E65H.
511E-5126
DEFM "AVAILABLE" 41 56 41 49 4C 41 42 4C 45
Word 33H, used by the messages of errors 08H, 21H.
5127-5134
DEFM "- CAN'T EXTEND" 2D 20 43 41 4E 27 54 20 45 58 54 45 4E 44
Word 34H, used only by the message of error 1EH; its characters are copied by the LDIR at 4E65H.
5135-5138
DEFM "OPEN" 4F 50 45 4E
Word 35H, used only by the message of error 26H; its characters are copied by the LDIR at 4E65H.
5139-513B
DEFM "USE" 55 53 45
Word 36H, used only by the message of error 27H; its characters are copied by the LDIR at 4E65H.
513C-513D
DEFM "OR" 4F 52
Word 37H, used only by the message of error 1AH; its characters are copied by the LDIR at 4E65H.

513EH - The Word Lists

The list of each error: one byte for each word, bits 5-0 the word number, bit 7 set on the last byte. Bit 6 of the last byte is set for the errors whose control block holds the specification as typed (4EA3H).

513E-513F
DEFB 01H,82H 01 82
Error 00H, NO ERROR: the words 01H and 02H; bit 7 of 82H ends the list.
5140-5144
DEFB 04H,02H,05H,06H,89H 04 02 05 06 89
Error 01H, PARITY ERROR DURING HEADER READ: the words 04H, 02H, 05H, 06H, 09H.
5145-5148
DEFB 08H,02H,05H,89H 08 02 05 89
Error 02H, SEEK ERROR DURING READ: the words 08H, 02H, 05H, 09H.
5149-514C
DEFB 0BH,07H,05H,89H 0B 07 05 89
Error 03H, LOST DATA DURING READ: the words 0BH, 07H, 05H, 09H.
514D-5150
DEFB 04H,02H,05H,89H 04 02 05 89
Error 04H, PARITY ERROR DURING READ: the words 04H, 02H, 05H, 09H.
5151-5156
DEFB 07H,1BH,0CH,2CH,05H,89H 07 1B 0C 2C 05 89
Error 05H, DATA RECORD NOT FOUND DURING READ: the words 07H, 1BH, 0CH, 2CH, 05H, 09H.
5157-515B
DEFB 0DH,09H,0FH,07H,9BH 0D 09 0F 07 9B
Error 06H, ATTEMPTED TO READ SYSTEM DATA RECORD: the words 0DH, 09H, 0FH, 07H, 1BH.
515C-5160
DEFB 0DH,09H,0EH,07H,9BH 0D 09 0E 07 9B
Error 07H, ATTEMPTED TO READ LOCKED/DELETED DATA RECORD: the words 0DH, 09H, 0EH, 07H, 1BH.
5161-5163
DEFB 2AH,0CH,F3H 2A 0C F3
Error 08H, DEVICE NOT AVAILABLE: the words 2AH, 0CH, 33H. Bit 6 of the last byte is set: the control block holds the specification as typed.
5164-5168
DEFB 04H,02H,05H,06H,8AH 04 02 05 06 8A
Error 09H, PARITY ERROR DURING HEADER WRITE: the words 04H, 02H, 05H, 06H, 0AH.
5169-516C
DEFB 08H,02H,05H,8AH 08 02 05 8A
Error 0AH, SEEK ERROR DURING WRITE: the words 08H, 02H, 05H, 0AH.
516D-5170
DEFB 0BH,07H,05H,8AH 0B 07 05 8A
Error 0BH, LOST DATA DURING WRITE: the words 0BH, 07H, 05H, 0AH.
5171-5174
DEFB 04H,02H,05H,8AH 04 02 05 8A
Error 0CH, PARITY ERROR DURING WRITE: the words 04H, 02H, 05H, 0AH.
5175-517A
DEFB 07H,1BH,0CH,2CH,05H,8AH 07 1B 0C 2C 05 8A
Error 0DH, DATA RECORD NOT FOUND DURING WRITE: the words 07H, 1BH, 0CH, 2CH, 05H, 0AH.
517B-517F
DEFB 0AH,15H,12H,13H,B0H 0A 15 12 13 B0
Error 0EH, WRITE FAULT ON DISK DRIVE: the words 0AH, 15H, 12H, 13H, 30H.
5180-5182
DEFB 0AH,16H,93H 0A 16 93
Error 0FH, WRITE PROTECTED DISK: the words 0AH, 16H, 13H.
5183-5186
DEFB 17H,18H,1AH,99H 17 18 1A 99
Error 10H, ILLEGAL LOGICAL FILE NUMBER: the words 17H, 18H, 1AH, 19H.
5187-5189
DEFB 10H,09H,82H 10 09 82
Error 11H, DIRECTORY READ ERROR: the words 10H, 09H, 02H.
518A-518C
DEFB 10H,0AH,82H 10 0A 82
Error 12H, DIRECTORY WRITE ERROR: the words 10H, 0AH, 02H.
518D-518F
DEFB 17H,1AH,E9H 17 1A E9
Error 13H, ILLEGAL FILE NAME: the words 17H, 1AH, 29H. Bit 6 of the last byte is set: the control block holds the specification as typed.
5190-5192
DEFB 22H,09H,82H 22 09 82
Error 14H, GAT READ ERROR: the words 22H, 09H, 02H.
5193-5195
DEFB 22H,0AH,82H 22 0A 82
Error 15H, GAT WRITE ERROR: the words 22H, 0AH, 02H.
5196-5198
DEFB 23H,09H,82H 23 09 82
Error 16H, HIT READ ERROR: the words 23H, 09H, 02H.
5199-519B
DEFB 23H,0AH,82H 23 0A 82
Error 17H, HIT WRITE ERROR: the words 23H, 0AH, 02H.
519C-519F
DEFB 1AH,0CH,2DH,D0H 1A 0C 2D D0
Error 18H, FILE NOT IN DIRECTORY: the words 1AH, 0CH, 2DH, 10H. Bit 6 of the last byte is set: the control block holds the specification as typed.
51A0-51A2
DEFB 1AH,2EH,F1H 1A 2E F1
Error 19H, FILE ACCESS DENIED: the words 1AH, 2EH, 31H. Bit 6 of the last byte is set: the control block holds the specification as typed.
51A3-51A7
DEFB 2FH,37H,0AH,16H,D3H 2F 37 0A 16 D3
Error 1AH, FULL OR WRITE PROTECTED DISK: the words 2FH, 37H, 0AH, 16H, 13H. Bit 6 of the last byte is set: the control block holds the specification as typed.
51A8-51AA
DEFB 13H,27H,AFH 13 27 AF
Error 1BH, DISK SPACE FULL: the words 13H, 27H, 2FH.
51AB-51AE
DEFB 1CH,1DH,1AH,A0H 1C 1D 1A A0
Error 1CH, END OF FILE ENCOUNTERED: the words 1CH, 1DH, 1AH, 20H.
51AF-51B3
DEFB 1BH,19H,1EH,1DH,9FH 1B 19 1E 1D 9F
Error 1DH, RECORD NUMBER OUT OF RANGE: the words 1BH, 19H, 1EH, 1DH, 1FH.
51B4-51B7
DEFB 10H,2FH,34H,9AH 10 2F 34 9A
Error 1EH, DIRECTORY FULL - CAN'T EXTEND FILE: the words 10H, 2FH, 34H, 1AH.
51B8-51BA
DEFB 32H,0CH,ACH 32 0C AC
Error 1FH, PROGRAM NOT FOUND: the words 32H, 0CH, 2CH.
51BB-51BD
DEFB 17H,30H,D9H 17 30 D9
Error 20H, ILLEGAL DRIVE NUMBER: the words 17H, 30H, 19H. Bit 6 of the last byte is set: the control block holds the specification as typed.
51BE-51C1
DEFB 01H,2AH,27H,F3H 01 2A 27 F3
Error 21H, NO DEVICE SPACE AVAILABLE: the words 01H, 2AH, 27H, 33H. Bit 6 of the last byte is set: the control block holds the specification as typed.
51C2-51C5
DEFB 26H,1AH,2BH,82H 26 1A 2B 82
Error 22H, LOAD FILE FORMAT ERROR: the words 26H, 1AH, 2BH, 02H.
51C6-51C7
DEFB 11H,95H 11 95
Error 23H, MEMORY FAULT: the words 11H and 15H; bit 7 of 95H ends the list.
51C8-51CC
DEFB 0DH,26H,09H,28H,91H 0D 26 09 28 91
Error 24H, ATTEMPTED TO LOAD READ ONLY MEMORY: the words 0DH, 26H, 09H, 28H, 11H.
51CD-51D1
DEFB 17H,2EH,0DH,16H,9AH 17 2E 0D 16 9A
Error 25H, ILLEGAL ACCESS ATTEMPTED TO PROTECTED FILE: the words 17H, 2EH, 0DH, 16H, 1AH.
51D2-51D4
DEFB 1AH,0CH,F5H 1A 0C F5
Error 26H, FILE NOT OPEN: the words 1AH, 0CH, 35H. Bit 6 of the last byte is set: the control block holds the specification as typed.
51D5-51D7
DEFB 2AH,2DH,B6H 2A 2D B6
Error 27H, DEVICE IN USE: the words 2AH, 2DH, 36H.
51D8-51DA
DEFB 16H,0FH,AAH 16 0F AA
Error 28H, PROTECTED SYSTEM DEVICE: the words 16H, 0FH, 2AH.
51DB-51DD
DEFB 25H,02H,A1H 25 02 A1
Error 29H, UNKNOWN ERROR CODE: the words 25H, 02H, 21H.