Percom DoubleDOS 4.24 for the Model I - SYS4/SYS Disassembled

Page Customization

Introduction/Summary

Percom DoubleDOS 4.24 SYS4/SYS Disassembly (Model I)

SYS4/SYS is the overlay of DoubleDOS (DBLDOS in Percom's manual) that shows the message of an error code. It is overlay 6 (directory record 06H): @ERROR, 4409H, jumps to 44B0H, which pushes Register Pair AF with the error code in Register A and gives request code 86H to the overlay dispatcher of SYS0/SYS (4BA2H). The dispatcher loads SYS4/SYS at 4E00H and calls it. SYS4/SYS is the one overlay whose absence stops the computer: the dispatcher HALTs when it is missing (43EBH), since there would be nothing to show the error with.

The file is 1210 bytes: a name record, the copyright record of 169 bytes, one load block, 4E00H-51F2H (1011 bytes), and the transfer address 4E00H. Every loaded byte is on exactly one row below. SYS4/SYS is the same in DoubleDOS 4.20, 4.23 (all three sets) and 4.24.

Load Map

AddressesContents
4E00H-4E13HTake the error code off the stack, keep the registers (4E00H)
4E14H-4E29HShow the error code in decimal: never run (4E14H)
4E2AH-4E5BHShow the words of the message (4E2AH)
4E5CH-4E72HEnd the line, then return or leave the program (4E5CH)
4E73H-4F35HShow the device or file and the address of the call: never run (4E73H, 4F1BH)
4F36H-4F83HThe texts of the parts never run (4F36H)
4F84H-4FC3HThe message of each error number 00H-3FH (4F84H)
4FC4H-502FHThe start of each word (4FC4H)
5030H-515AHThe 53 words (5030H)
515BH-51F2HThe lists of words of the messages (515BH)

How a Message Is Shown

StepWhat the code does
1The dispatcher's return address (4BFEH) is stored as the operand of the last jump (4E01H); the error code pushed by 44B0H is taken off the stack and the caller's registers saved.
2The low six bits of the code are the error number. Its byte in the table at 4F84H is the low byte of a list of word numbers at 51xxH (4E2AH).
3For each byte of the list, the word number in bits 5-0 gives the word's start in the table at 4FC2H and the next word's start its end; the word is shown through ROM 0033H and a space after it. Bit 7 marks the last word (4E31H).
4A carriage return ends the line and the registers are restored (4E63H).
5With bit 7 of the code set, SYS4/SYS returns through the dispatcher to the caller of 4409H with Register A the code; otherwise it jumps to 4030H, the abnormal exit, and the program ends at DOS READY (4E6CH).

So the message is shown at the cursor with no error number and no other text: for example DISK SPACE FULL for code 1BH. Bit 6 of the code makes no difference.

The Messages

CodeMessage (as shown, each word followed by a space)
Given by (the pages so far)
00HNO ERROR
No file paged so far gives it
01HPARITY ERROR DURING HEADER READ
No file paged so far gives it
02HSEEK ERROR DURING READ
No file paged so far gives it
03HLOST DATA DURING READ
SYS0/SYS read, status bit 2 (46C8H)
04HPARITY ERROR DURING READ
SYS0/SYS read, bit 3
05HDATA RECORD NOT FOUND DURING READ
SYS0/SYS read, bit 4
06HATTEMPTED TO READ LOCKED/DELETED DATA RECORD
SYS0/SYS read, bit 5 (the deleted data mark)
07HATTEMPTED TO READ SYSTEM DATA RECORD
SYS0/SYS read, bit 6
08HDEVICE NOT AVAILABLE (bit 6 set on the last word)
SYS0/SYS read, bit 7 (NOT READY)
09HPARITY ERROR DURING HEADER WRITE
No file paged so far gives it
0AHSEEK ERROR DURING WRITE
No file paged so far gives it
0BHLOST DATA DURING WRITE
SYS0/SYS write, bit 2
0CHPARITY ERROR DURING WRITE
SYS0/SYS write, bit 3
0DHDATA RECORD NOT FOUND DURING WRITE
SYS0/SYS write, bit 4
0EHWRITE FAULT ON DISK DRIVE
SYS0/SYS write, bit 5
0FHWRITE PROTECTED DISKETTE
SYS0/SYS write, bit 6
10HILLEGAL LOGICAL FILE NUMBER
SYS0/SYS write, bit 7 (NOT READY: a bug); a bad directory record (4B31H)
11HDIRECTORY READ ERROR
SYS0/SYS (4AD1H)
12HDIRECTORY WRITE ERROR
SYS0/SYS (4AEBH)
13HILLEGAL FILE NAME (bit 6 set on the last word)
SYS2/SYS
14HGAT READ ERROR
SYS0/SYS (4B00H)
15HGAT WRITE ERROR
SYS0/SYS (4B19H)
16HHIT READ ERROR
SYS2/SYS, SYS3/SYS
17HHIT WRITE ERROR
SYS2/SYS, SYS3/SYS
18HFILE NOT IN DIRECTORY (bit 6 set on the last word)
SYS2/SYS; with bit 6, 58H, a missing overlay (43E6H)
19HFILE ACCESS DENIED (bit 6 set on the last word)
SYS2/SYS, in code that never runs (4EACH)
1AHDIRECTORY SPACE FULL (bit 6 set on the last word)
SYS2/SYS
1BHDISK SPACE FULL
SYS0/SYS (4A85H)
1CHEND OF FILE ENCOUNTERED
SYS0/SYS
1DHRECORD NUMBER OUT OF RANGE
SYS0/SYS
1EHDIRECTORY FULL - CAN'T EXTEND FILE
SYS2/SYS
1FHPROGRAM NOT FOUND
SYS0/SYS @LOAD, with bit 6 (5FH, 4C25H)
20HILLEGAL DRIVE NUMBER (bit 6 set on the last word)
SYS2/SYS
21HNO DEVICE SPACE AVAILABLE (bit 6 set on the last word)
No file paged so far gives it
22HLOAD FILE FORMAT ERROR
SYS0/SYS loader, with bit 6 (62H)
23HMEMORY FAULT
SYS0/SYS loader, with bit 6 (63H)
24HATTEMPTED TO LOAD READ ONLY MEMORY
SYS0/SYS loader, with bit 6 (64H)
25HILLEGAL ACCESS ATTEMPTED TO PROTECTED FILE
SYS0/SYS, SYS3/SYS
26HFILE NOT OPEN (bit 6 set on the last word)
SYS0/SYS, SYS3/SYS
27H-3FHUNKNOWN ERROR CODE
No file paged so far gives these codes

The read and write codes of SYS0/SYS are the base (01H for a read, 09H for a write) minus one plus the number of the lowest status bit counted from 1; the bits 0 and 1 (BUSY, DATA REQUEST) are dropped first, so the codes 01H, 02H, 09H and 0AH, the messages with HEADER and SEEK, are never given by SYS0/SYS. A drive that is not ready gives 08H on a read but 10H, ILLEGAL LOGICAL FILE NUMBER, on a write (46CDH).

The Parts That Are Never Run

Two parts of SYS4/SYS are in the file but are passed over. The jump at 4E12H is unconditional, so 4E14H-4E29H, which would show a new line, three star characters and ERRCOD= with the error number in decimal before the message, never runs; the BIT 6,B before it has no effect. At 4E60H-4E62H three NOP follow a BIT 6,A whose result is not used, and nothing calls 4E73H, which would show, on the lines after the message, three star characters, the device (<DEVICE=*XX>) or file (<FILE=NAME/EXT:D>) of the last file call's FCB at 430AH, and REFERENCED AT X' and the address of the CALL that made that file call (from 430CH). Which of the device or file forms it uses is chosen by bit 6 of the last byte of the message's list, which is set for the messages of the codes 08H, 13H, 18H, 19H, 1AH, 20H, 21H and 26H, those given while the FCB still holds the specification as text.

Differences From the Manual

Percom's manual gives no error messages; it refers to the TRSDOS manual. Percom's letter of September 8, 1980 says that COPY reported FILE NOT FOUND for a file that does not exist; no message of SYS4/SYS has those words (code 18H is FILE NOT IN DIRECTORY), so the words came from COPY/CMD (to be checked on that page).

Notes

Code 00H shows NO ERROR and, since its bit 7 is clear, ends the program through 4030H like any other code below 80H.

The words 03H (FORMAT) and 24H (OVERLAY) are in no message; word 2BH, FORMAT again, is the one used (LOAD FILE FORMAT ERROR). The two bytes at 4FC2H-4FC3H are both the entries of the error numbers 3EH and 3FH and the place of word 00H, which no list uses.

The routine at 4E73H, if it ran, would count 256 characters where 24 are meant: LD BC,0018H at 4EB5H loads Register B with 00H for the DJNZ. A specification with a password (up to 23 characters) would also write its > and carriage return past the end of the file text at 4F6FH into the text at 4F70H, and would show the password. These cannot happen in 4.24, since the routine is never called.

The operand at 4E6EH is written while SYS4/SYS runs; 4F42H-4F43H, 4F55H-4F56H and 4F60H on would be written by the parts that are never run (the Variables below).

Variables

SYS4/SYS's Own Bytes

Address
Size
Contents
4E6EH-4E6FH
2 bytes
Return Address Into the Dispatcher
Operand of JP M,nnnn at 4E6DH, stored by 4E01H: 4BFEH.
4F42H-4F43H
2 bytes
Decimal Error Number
The XX of ERRCOD=XX, stored by 4E20H (never run).
4F55H-4F56H
2 bytes
Device Name
The XX of DEVICE=*XX, stored by 4E94H (never run).
4F60H-4F6FH
16 bytes
File Specification
NNNNNNNN/EEE:D> and a carriage return, written by 4EB8H-4EC0H or 4ED0H-4EFCH (never run).

Memory Outside SYS4/SYS

Address
Size
Contents
430AH-430BH
2 bytes
FCB of the Last File Call
Read by 4E7DH (never run).
430CH-430DH
2 bytes
Return Address of the Last File Call
Read by 4F0CH (never run).
4200H-42FFH
256 bytes
Sector Buffer
The directory sector read by 4AC1H for 4EC4H (never run).

The Stack at 4E00H

PlaceContents
SP+00H4BFEH, the return address of CALL 0000H at 4BFBH in the dispatcher
SP+02HRegister Pair AF pushed by 44B0H: the error code in Register A
SP+04HThe return address of the CALL 4409H (the dispatcher dropped the RST 28H return address)

Outside Routines

AddressUse
0033HROM: Show a Character
4E4CH, 4E53H, 4E65H; 4F33H (never run).
4030HSYS0/SYS: The Abnormal Exit
4E70H.
4467HSYS0/SYS: Show a Text up to 03H or 0DH
4E27H, 4E77H, 4E9BH, 4F03H, 4F09H, 4F18H (never run).
4AC1HSYS0/SYS: Read a Directory Record
4EC4H (never run).
4BFEHSYS0/SYS: The Dispatcher After the Overlay Call
Through 4E6DH: restores the BREAK flag 4315H and returns.

Disassembly

4E00H - Show the Message of an Error Code

The transfer address of SYS4/SYS, overlay 6. @ERROR (4409H) jumps to 44B0H, which pushes Register Pair AF (the error code in Register A) and gives request code 86H to the overlay dispatcher of SYS0/SYS; the dispatcher calls 4E00H with the return address 4BFEH on top of the stack, the pushed error code under it and the return address of the caller of 4409H under that. SYS4/SYS shows the words of the message of the code's low six bits, ends the line, and then returns to the caller when bit 7 of the code is set, or else leaves the program through 4030H. Every register is kept. Bit 6 of the code has no effect in 4.24 (4E0EH, 4E5EH).

4E00
EX (SP),HL E3
Exchange Register Pair HL with the top of the stack at the Stack Pointer: Register Pair HL becomes 4BFEH, the return address into the dispatcher, and the caller's Register Pair HL takes its place.
4E01
LD (4E6EH),HL 22 6E 4E
Store Register Pair HL (4BFEH, the dispatcher's return address) at 4E6EH, the operand of JP M,0000H at 4E6DH, so the last jump returns through the dispatcher.
4E04
POP HL E1
Restore the caller's Register Pair HL from the stack at the Stack Pointer.
4E05
POP AF F1
Load Register Pair AF from the stack: the Register Pair AF pushed by 44B0H, with the error code in Register A.
4E06
PUSH HL E5
Save the caller's Register Pair HL on the stack at the Stack Pointer, to be restored at 4E6BH.
4E07
PUSH DE D5
Save the caller's Register Pair DE on the stack at the Stack Pointer, to be restored at 4E6AH.
4E08
PUSH BC C5
Save the caller's Register Pair BC on the stack at the Stack Pointer, to be restored at 4E69H.
4E09
PUSH AF F5
Save Register Pair AF, the error code in Register A, on the stack at the Stack Pointer; 4E5CH reads it again.
4E0A
LD B,A 47
Copy the error code from Register A into Register B for the bit test at 4E0EH.
4E0B
AND 3FH E6 3F
AND Register A with 3FH to keep the low six bits, the number of the error: 00H-3FH.
4E0D
LD C,A 4F
Copy the number of the error from Register A into Register C, the low byte of the offset into the table at 4F84H.
4E0E
BIT 6,B CB 70
Test bit 6 of Register B, the error code. The Z FLAG this sets is not used: the jump at 4E12H does not test it.
4E10
LD B,00H 06 00
Load Register B with 00H, so that Register Pair BC is the number of the error, 0000H-003FH.
4E12
Jump to 4E2AH to show the words of the message. The jump is unconditional, so the decimal error code of 4E14H-4E29H is never shown.

4E14H - Show the Error Code in Decimal (Never Run)

Bytes that no instruction reaches: the jump at 4E12H passes over them. They would write the number of the error in Register A as two decimal digits into the text at 4F42H and show the text at 4F36H, a new line, three asterisks and ERRCOD=nn and a comma, through 4467H; the message would follow on the same line.

4E14
LD E,30H 1E 30
Load Register E with 30H, the character 0, the tens digit before counting (never run).
4E16
SUB 0AH D6 0A
Subtract 0AH from Register A, the number of the error (never run): the C FLAG is set when it went below zero.
4E18
If the C FLAG is set (Register A went below zero), jump to 4E1DH to make the units digit (never run).
4E1A
INC E 1C
Increment Register E, the tens digit, for each ten taken from Register A (never run).
4E1B
Jump back to 4E16H to take another ten from Register A (never run).
4E1D
ADD A,3AH C6 3A
Add 3AH to Register A: the remainder less 10 becomes its digit character 30H-39H (never run).
4E1F
LD D,A 57
Copy the units digit from Register A into Register D, so Register Pair DE holds both digits (never run).
4E20
LD (4F42H),DE ED 53 42 4F
Store Register Pair DE at 4F42H-4F43H: Register E, the tens digit, at 4F42H and Register D, the units digit, at 4F43H, in place of XX (never run).
4E24
LD HL,4F36H 21 36 4F
Load Register Pair HL with 4F36H, the text with the new line and ERRCOD=nn (never run).
4E27
Call 4467H to show the text at Register Pair HL up to its 03H, which leaves the cursor on the same line (never run).

4E2AH - Show the Words of the Message

Register Pair BC is the number of the error. The table at 4F84H gives the low byte of the message's list of word numbers in the page 5100H-51FFH. Each byte of the list names a word by its low six bits; the word table at 4FC2H gives the word's start, and the start of the next word is its end. Each word is shown through ROM 0033H followed by a space. Bit 7 of a byte marks the last word.

4E2A
LD HL,4F84H 21 84 4F
Load Register Pair HL with 4F84H, the table of messages, one byte for each error number 00H-3FH.
4E2D
ADD HL,BC 09
Add Register Pair BC, the number of the error, to Register Pair HL: Register Pair HL points at the error's byte of the table at 4F84H.
4E2E
LD L,(HL) 6E
Load Register L with the byte at Register Pair HL, the low byte of the address of the message's list of words.
4E2F
LD H,51H 26 51
Load Register H with 51H: Register Pair HL is the list of words of the message at 51xxH.
4E31
LD A,(HL) 7E
Load Register A with the next byte of the list at Register Pair HL, the number of a word in bits 5-0. 4E5AH jumps back here.
4E32
AND 3FH E6 3F
AND Register A with 3FH to keep the number of the word in bits 5-0; bit 7 (the last word) and bit 6 are dropped.
4E34
ADD A,A 87
Add Register A to itself to double it: the offset of the word's entry in the table at 4FC2H, two bytes for each word.
4E35
PUSH HL E5
Save Register Pair HL, the address of the byte of the list, on the stack at the Stack Pointer.
4E36
LD C,A 4F
Copy the offset of the word's entry from Register A into Register C.
4E37
LD B,00H 06 00
Load Register B with 00H, so that Register Pair BC is the offset of the word's entry.
4E39
LD HL,4FC2H 21 C2 4F
Load Register Pair HL with 4FC2H, the table of word starts: word n's start is at 4FC2H plus twice n.
4E3C
ADD HL,BC 09
Add Register Pair BC, the offset, to Register Pair HL: Register Pair HL points at the word's entry in the table.
4E3D
LD E,(HL) 5E
Load Register E with the low byte of the word's start from the table at Register Pair HL.
4E3E
INC HL 23
Increment Register Pair HL to the high byte of the word's start.
4E3F
LD D,(HL) 56
Load Register D with the high byte of the word's start at Register Pair HL: Register Pair DE is the address of the word's first character.
4E40
INC HL 23
Increment Register Pair HL to the next entry, the start of the next word, which is the end of this word.
4E41
LD A,(HL) 7E
Load Register A with the low byte of the end of the word from the table at Register Pair HL.
4E42
INC HL 23
Increment Register Pair HL to the high byte of the end of the word.
4E43
LD H,(HL) 66
Load Register H with the high byte of the end of the word from the table at Register Pair HL.
4E44
LD L,A 6F
Copy the low byte of the end from Register A into Register L: Register Pair HL is the end of the word.
4E45
OR A B7
OR Register A with itself to clear the C FLAG before the SBC HL,DE at 4E46H.
4E46
SBC HL,DE ED 52
Subtract Register Pair DE, the start of the word, from Register Pair HL, the end: Register Pair HL is the length of the word.
4E48
LD B,L 45
Copy the length of the word from Register L into Register B, the count for the DJNZ at 4E4FH (no word is longer than 14 characters).
4E49
EX DE,HL EB
Exchange Register Pair DE and Register Pair HL: Register Pair HL is the address of the word's first character.
4E4A
LD A,(HL) 7E
Load Register A with the character of the word at Register Pair HL. 4E4FH jumps back here.
4E4B
INC HL 23
Increment Register Pair HL to the next character of the word.
4E4C
Call ROM 0033H to show the character in Register A on the display at the cursor.
4E4F
Decrement Register B, the characters left, and jump back to 4E4AH while Register B is not zero.
4E51
LD A,20H 3E 20
Load Register A with 20H, a space, to follow the word.
4E53
Call ROM 0033H to show the space in Register A on the display.
4E56
POP HL E1
Restore Register Pair HL, the address of the byte of the list, from the stack at the Stack Pointer.
4E57
LD A,(HL) 7E
Load Register A with the byte of the list at Register Pair HL again, to test its bit 7.
4E58
INC HL 23
Increment Register Pair HL to the next byte of the list of words.
4E59
RLCA 07
Rotate Register A left: bit 7 of the byte, the mark of the last word, goes into the C FLAG.
4E5A
If the NC FLAG is set (not the last word), jump back to 4E31H to show the next word at Register Pair HL.

4E5CH - End the Line, Then Return or Leave

The message has been shown. The line is ended with a carriage return and the caller's registers are restored. An error code with bit 7 set returns to the caller of 4409H through the dispatcher; any other code ends the program through 4030H, the abnormal exit, which goes back to DOS READY (or into DEBUG when DEBUG is on).

4E5C
POP AF F1
Load Register Pair AF from the stack at the Stack Pointer: the error code in Register A.
4E5D
PUSH AF F5
Save Register Pair AF, the error code, on the stack at the Stack Pointer again for 4E68H.
4E5E
BIT 6,A CB 77
Test bit 6 of Register A, the error code. The Z FLAG this sets is not used: the three bytes after it are NOP.
4E60
NOP 00
No operation: the first of three bytes of 00H at 4E60H-4E62H after the test of bit 6. Nothing calls 4E73H, so the device, file and calling address are never shown.
4E61
NOP 00
No operation: the second of the three bytes of 00H at 4E60H-4E62H, where nothing calls 4E73H.
4E62
NOP 00
No operation: the third of the three bytes of 00H at 4E60H-4E62H, where nothing calls 4E73H.
4E63
LD A,0DH 3E 0D
Load Register A with 0DH, a carriage return, to end the line of the message.
4E65
Call ROM 0033H to show the carriage return in Register A: the cursor goes to the start of the next line.
4E68
POP AF F1
Restore Register Pair AF from the stack at the Stack Pointer: the error code in Register A.
4E69
POP BC C1
Restore the caller's Register Pair BC from the stack at the Stack Pointer.
4E6A
POP DE D1
Restore the caller's Register Pair DE from the stack at the Stack Pointer.
4E6B
POP HL E1
Restore the caller's Register Pair HL from the stack at the Stack Pointer.
4E6C
OR A B7
OR Register A, the error code, with itself: the M FLAG is set when bit 7 of the code is set.
4E6D
If the M FLAG is set (bit 7 of the error code), jump to the dispatcher's return address stored at 4E6EH by 4E01H (0000H in the file), which returns to the caller of 4409H with Register A the error code.
4E70
Jump to 4030H, the abnormal exit (request code A3H, or CALL 400FH when DEBUG is on): the program is left and DOS READY comes back.

4E73H - Show the Device or File and the Calling Address (Never Run)

No instruction calls 4E73H: the three NOP at 4E60H-4E62H stand where a call would be. The routine would show three asterisks on a line, then the device or the file of the FCB of the last file call (430AH) and the address of that call (430CH). Bit 6 of the last byte of the message's list chooses the form: set for the messages of codes 08H, 13H, 18H, 19H, 1AH, 20H, 21H and 26H, where the FCB still holds the specification as text.

4E73
PUSH HL E5
Save Register Pair HL, the address after the message's list of words, on the stack at the Stack Pointer (never run).
4E74
LD HL,4F47H 21 47 4F
Load Register Pair HL with 4F47H, the text of three asterisks and a carriage return (never run).
4E77
Call 4467H to show the text at Register Pair HL up to its carriage return (never run).
4E7A
POP HL E1
Restore Register Pair HL, the address after the message's list of words, from the stack at the Stack Pointer (never run).
4E7B
PUSH IX DD E5
Save Index Register IX on the stack at the Stack Pointer (never run).
4E7D
LD IX,(430AH) DD 2A 0A 43
Load Index Register IX with the word at 430AH, the FCB or device control block of the last file call (never run).
4E81
DEC HL 2B
Decrement Register Pair HL to the last byte of the message's list of words (never run).
4E82
BIT 6,(HL) CB 76
Test bit 6 of the byte at Register Pair HL, the last byte of the list (never run).
4E84
If the NZ FLAG is set (bit 6 set: the FCB holds the specification as text), jump to 4EA0H (never run).
4E86
LD C,(IX+06H) DD 4E 06
Load Register C with the byte at Index Register IX+06H, the drive of an FCB or the first character of a device name (never run).
4E89
LD B,(IX+07H) DD 46 07
Load Register B with the byte at Index Register IX+07H, the directory record of an FCB or the second character of a device name (never run).
4E8C
BIT 7,(IX+00H) DD CB 00 7E
Test bit 7 of the byte at Index Register IX+00H: set for an open FCB (never run).
4E90
If the NZ FLAG is set (an open FCB), jump to 4EC4H to build NAME/EXT:D from its directory entry (never run).
4E92
POP IX DD E1
Restore Index Register IX from the stack at the Stack Pointer (never run). 4EADH jumps here.
4E94
LD (4F55H),BC ED 43 55 4F
Store Register Pair BC, the two characters of the device name, at 4F55H-4F56H in place of XX in the device text (never run).
4E98
LD HL,4F4BH 21 4B 4F
Load Register Pair HL with 4F4BH, the text with DEVICE= and the device name (never run).
4E9B
Call 4467H to show the text at Register Pair HL up to its carriage return (never run).
4E9E
Jump to 4F06H to show the address of the call (never run).
4EA0
LD A,(IX+00H) DD 7E 00
Load Register A with the byte at Index Register IX+00H, the first character of the specification text (never run).
4EA3
CP 2AH FE 2A
Compare Register A with 2AH, the character that starts a device specification (never run).
4EA5
If the NZ FLAG is set (a file specification), jump to 4EAFH to copy it (never run).
4EA7
LD C,(IX+01H) DD 4E 01
Load Register C with the byte at Index Register IX+01H, the first character of the device name (never run).
4EAA
LD B,(IX+02H) DD 46 02
Load Register B with the byte at Index Register IX+02H, the second character of the device name (never run).
4EAD
Jump back to 4E92H to show the device name in Register Pair BC (never run).
4EAF
PUSH IX DD E5
Save Index Register IX, the FCB, on the stack at the Stack Pointer, to take it into Register Pair HL (never run).
4EB1
POP HL E1
Load Register Pair HL from the stack at the Stack Pointer: the FCB address of Index Register IX (never run).
4EB2
LD DE,4F60H 11 60 4F
Load Register Pair DE with 4F60H, the place of the specification in the file text (never run).
4EB5
LD BC,0018H 01 18 00
Load Register Pair BC with 0018H: Register C is 18H and Register B 00H, so the DJNZ at 4EC0H counts 256 characters, not 24 (never run).
4EB8
LD A,(HL) 7E
Load Register A with the character of the specification at Register Pair HL. 4EC0H jumps back here (never run).
4EB9
CP 03H FE 03
Compare Register A with 03H, the end of the specification text (never run).
4EBB
If the Z FLAG is set (the end of the text), jump to 4EF9H to close the text with > and a carriage return (never run).
4EBD
INC HL 23
Increment Register Pair HL to the next character of the specification (never run).
4EBE
LD (DE),A 12
Store the character in Register A at Register Pair DE in the file text (never run).
4EBF
INC DE 13
Increment Register Pair DE to the next place in the file text (never run).
4EC0
Decrement Register B and jump back to 4EB8H while Register B is not zero: 256 times from 00H (never run).
4EC2
Jump to 4EF9H to close the text with > and a carriage return (never run).
4EC4
Call 4AC1H to read the directory record Register B of drive Register C; Register Pair HL is the entry in the sector buffer (never run).
4EC7
LD BC,0005H 01 05 00
Load Register Pair BC with 0005H, the offset of the name in a directory entry (never run).
4ECA
ADD HL,BC 09
Add Register Pair BC to Register Pair HL: Register Pair HL points at the name, entry +05H (never run).
4ECB
LD DE,4F60H 11 60 4F
Load Register Pair DE with 4F60H, the place of the specification in the file text (never run).
4ECE
LD B,08H 06 08
Load Register B with 08H, the length of the name (never run).
4ED0
LD A,(HL) 7E
Load Register A with the character of the name at Register Pair HL. 4ED8H jumps back here (never run).
4ED1
CP 20H FE 20
Compare Register A with 20H, the space that pads a name (never run).
4ED3
If the Z FLAG is set (the end of the name), jump to 4EDAH with Register B the characters left (never run).
4ED5
INC L 2C
Increment Register L to the next character of the name in the sector buffer (never run).
4ED6
LD (DE),A 12
Store the character in Register A at Register Pair DE in the file text (never run).
4ED7
INC DE 13
Increment Register Pair DE to the next place in the file text (never run).
4ED8
Decrement Register B and jump back to 4ED0H while Register B is not zero (never run).
4EDA
LD A,2FH 3E 2F
Load Register A with 2FH, the character / before the extension (never run). The / is stored even when the extension is blank.
4EDC
LD (DE),A 12
Store the / in Register A at Register Pair DE in the file text (never run).
4EDD
INC DE 13
Increment Register Pair DE to the next place in the file text (never run).
4EDE
LD C,B 48
Copy Register B, the characters of the name not used, into Register C (never run).
4EDF
LD B,00H 06 00
Load Register B with 00H, so that Register Pair BC is the characters of the name not used (never run).
4EE1
ADD HL,BC 09
Add Register Pair BC to Register Pair HL: Register Pair HL points at the extension, entry +0DH (never run).
4EE2
LD B,03H 06 03
Load Register B with 03H, the length of the extension (never run).
4EE4
LD A,(HL) 7E
Load Register A with the character of the extension at Register Pair HL. 4EECH jumps back here (never run).
4EE5
INC L 2C
Increment Register L to the next character of the extension (never run).
4EE6
CP 20H FE 20
Compare Register A with 20H, the space that pads an extension (never run).
4EE8
If the Z FLAG is set (the end of the extension), jump to 4EEEH (never run).
4EEA
LD (DE),A 12
Store the character in Register A at Register Pair DE in the file text (never run).
4EEB
INC DE 13
Increment Register Pair DE to the next place in the file text (never run).
4EEC
Decrement Register B and jump back to 4EE4H while Register B is not zero (never run).
4EEE
EX DE,HL EB
Exchange Register Pair DE and Register Pair HL: Register Pair HL is the next place in the file text (never run).
4EEF
LD (HL),3AH 36 3A
Store 3AH, the character colon, at Register Pair HL in the file text, before the drive (never run).
4EF1
INC HL 23
Increment Register Pair HL to the next place in the file text (never run).
4EF2
LD A,(IX+06H) DD 7E 06
Load Register A with the byte at Index Register IX+06H, the drive of the FCB (never run).
4EF5
ADD A,30H C6 30
Add 30H to Register A to make the drive number its digit character (never run).
4EF7
LD (HL),A 77
Store the drive digit in Register A at Register Pair HL in the file text (never run).
4EF8
INC HL 23
Increment Register Pair HL to the next place in the file text (never run).
4EF9
LD (HL),3EH 36 3E
Store 3EH, the character >, at Register Pair HL, the end of the file text (never run). 4EBBH and 4EC2H jump here.
4EFB
INC HL 23
Increment Register Pair HL to the next place in the file text (never run).
4EFC
LD (HL),0DH 36 0D
Store 0DH, a carriage return, at Register Pair HL to end the file text (never run).
4EFE
POP IX DD E1
Restore Index Register IX from the stack at the Stack Pointer (never run).
4F00
LD HL,4F59H 21 59 4F
Load Register Pair HL with 4F59H, the text with FILE= and the specification (never run).
4F03
Call 4467H to show the text at Register Pair HL up to its carriage return (never run).
4F06
LD HL,4F70H 21 70 4F
Load Register Pair HL with 4F70H, the text REFERENCED AT X and a quote (never run). 4E9EH jumps here.
4F09
Call 4467H to show the text at Register Pair HL up to its 03H, leaving the cursor on the line (never run).
4F0C
LD HL,(430CH) 2A 0C 43
Load Register Pair HL with the word at 430CH, the return address of the last file call (never run).
4F0F
DEC HL 2B
Decrement Register Pair HL, the first of three steps back to the CALL instruction (never run).
4F10
DEC HL 2B
Decrement Register Pair HL, the second of three steps back to the CALL instruction (never run).
4F11
DEC HL 2B
Decrement Register Pair HL, the third step: Register Pair HL is the address of the CALL that made the file call (never run).
4F12
Call 4F1BH to show Register Pair HL as four hexadecimal digits (never run).
4F15
LD HL,4F82H 21 82 4F
Load Register Pair HL with 4F82H, the closing quote and a carriage return (never run).
4F18
Jump to 4467H to show the text at Register Pair HL; 4467H returns to the caller of 4E73H (never run).

4F1BH - Show Register Pair HL in Hexadecimal (Never Run)

Called only from 4F12H. Register H and then Register L are shown as two hexadecimal digits each through ROM 0033H; 4F20H shows Register A, 4F29H its low four bits.

4F1B
LD A,H 7C
Load Register A with Register H, the high byte of the address (never run).
4F1C
Call 4F20H to show Register A as two hexadecimal digits (never run).
4F1F
LD A,L 7D
Load Register A with Register L, the low byte of the address, and fall into 4F20H (never run).
4F20
PUSH AF F5
Save Register Pair AF, the byte in Register A, on the stack at the Stack Pointer (never run).
4F21
RRA 1F
Rotate Register A right through the C FLAG, the first of four steps that bring the high four bits down (never run).
4F22
RRA 1F
Rotate Register A right through the C FLAG, the second of the four steps (never run).
4F23
RRA 1F
Rotate Register A right through the C FLAG, the third of the four steps (never run).
4F24
RRA 1F
Rotate Register A right through the C FLAG, the fourth step: the high four bits are in bits 3-0 (never run).
4F25
Call 4F29H to show the low four bits of Register A as a hexadecimal digit (never run).
4F28
POP AF F1
Restore Register Pair AF, the byte in Register A, from the stack at the Stack Pointer, and fall into 4F29H for the low digit (never run).
4F29
AND 0FH E6 0F
AND Register A with 0FH to keep the low four bits (never run).
4F2B
ADD A,30H C6 30
Add 30H to Register A to make the digit character 0-9 (never run).
4F2D
CP 3AH FE 3A
Compare Register A with 3AH: the C FLAG is set for the digits 0-9 (never run).
4F2F
If the C FLAG is set (a digit 0-9), jump to 4F33H to show it (never run).
4F31
ADD A,07H C6 07
Add 07H to Register A to make the letters A-F, 41H-46H (never run).
4F33
Jump to ROM 0033H to show the character in Register A; ROM 0033H returns to the caller (never run).

4F36H - The Texts of the Parts Never Shown

The texts that 4E14H and 4E73H would show through 4467H, which stops at 03H (the cursor stays on the line) or at 0DH (the line ends). Neither routine runs in 4.24. Bytes C0H-FFH are the ROM's space compression codes: C0H plus n gives n spaces.

4F36-4F46
DEFB 0AH / DEFM "*** ERRCOD=XX, " / DEFB 03H 0A 2A 2A 2A 20 45 52 52 43 4F 44 3D 58 58 2C 20 03
The text at 4F36H of 4E24H: 0AH, which the display takes as a new line, three star characters, ERRCOD= and XX, which 4E20H replaces with the two decimal digits at 4F42H-4F43H, a comma and a space, then 03H so the message follows on the line.
4F47-4F4A
DEFM "***" / DEFB 0DH 2A 2A 2A 0D
The text at 4F47H of 4E74H: three star characters and a carriage return, the line before the device or file of the error.
4F4B-4F58
DEFB C6H / DEFM "<DEVICE=*XX>" / DEFB 0DH C6 3C 44 45 56 49 43 45 3D 2A 58 58 3E 0D
The text at 4F4BH of 4E98H: C6H (six spaces), <DEVICE= and a star, XX (4F55H-4F56H, the device name stored by 4E94H), > and a carriage return.
4F59-4F6F
DEFB C5H / DEFM "<FILE=NNNNNNNN/EEE:D>" / DEFB 0DH C5 3C 46 49 4C 45 3D 4E 4E 4E 4E 4E 4E 4E 4E 2F 45 45 45 3A 44 3E 0D
The text at 4F59H of 4F00H: C5H (five spaces), <FILE=, then at 4F60H the place of the specification (NNNNNNNN/EEE:D, written by 4EB8H or 4ED0H with > and 0DH after it), > and a carriage return. A specification with a password of 23 characters writes past 4F6FH into the text at 4F70H.
4F70-4F81
DEFB C3H / DEFM "REFERENCED AT X'" / DEFB 03H C3 52 45 46 45 52 45 4E 43 45 44 20 41 54 20 58 27 03
The text at 4F70H of 4F06H: C3H (three spaces), REFERENCED AT X and a quote, then 03H so that the four hexadecimal digits of 4F1BH follow on the line.
4F82-4F83
DEFM "'" / DEFB 0DH 27 0D
The text at 4F82H of 4F15H: the closing quote after the four hexadecimal digits of the address, and a carriage return that ends the line.

4F84H - The Message of Each Error Number

One byte for each error number 00H-3FH, the low six bits of the error code: the low byte of the address of the message's list of words in the page 5100H-51FFH (4E2AH-4E2FH). Every number from 27H on gives the list at 51F0H, UNKNOWN ERROR CODE.

4F84
DEFB 5BH 5B
Error 00H: the list of words at 515BH, the message NO ERROR.
4F85
DEFB 5DH 5D
Error 01H: the list of words at 515DH, the message PARITY ERROR DURING HEADER READ.
4F86
DEFB 62H 62
Error 02H: the list of words at 5162H, the message SEEK ERROR DURING READ.
4F87
DEFB 66H 66
Error 03H: the list of words at 5166H, the message LOST DATA DURING READ.
4F88
DEFB 6AH 6A
Error 04H: the list of words at 516AH, the message PARITY ERROR DURING READ.
4F89
DEFB 6EH 6E
Error 05H: the list of words at 516EH, the message DATA RECORD NOT FOUND DURING READ.
4F8A
DEFB 74H 74
Error 06H: the list of words at 5174H, the message ATTEMPTED TO READ LOCKED/DELETED DATA RECORD.
4F8B
DEFB 79H 79
Error 07H: the list of words at 5179H, the message ATTEMPTED TO READ SYSTEM DATA RECORD.
4F8C
DEFB 7EH 7E
Error 08H: the list of words at 517EH, the message DEVICE NOT AVAILABLE.
4F8D
DEFB 81H 81
Error 09H: the list of words at 5181H, the message PARITY ERROR DURING HEADER WRITE.
4F8E
DEFB 86H 86
Error 0AH: the list of words at 5186H, the message SEEK ERROR DURING WRITE.
4F8F
DEFB 8AH 8A
Error 0BH: the list of words at 518AH, the message LOST DATA DURING WRITE.
4F90
DEFB 8EH 8E
Error 0CH: the list of words at 518EH, the message PARITY ERROR DURING WRITE.
4F91
DEFB 92H 92
Error 0DH: the list of words at 5192H, the message DATA RECORD NOT FOUND DURING WRITE.
4F92
DEFB 98H 98
Error 0EH: the list of words at 5198H, the message WRITE FAULT ON DISK DRIVE.
4F93
DEFB 9DH 9D
Error 0FH: the list of words at 519DH, the message WRITE PROTECTED DISKETTE.
4F94
DEFB A0H A0
Error 10H: the list of words at 51A0H, the message ILLEGAL LOGICAL FILE NUMBER.
4F95
DEFB A4H A4
Error 11H: the list of words at 51A4H, the message DIRECTORY READ ERROR.
4F96
DEFB A7H A7
Error 12H: the list of words at 51A7H, the message DIRECTORY WRITE ERROR.
4F97
DEFB AAH AA
Error 13H: the list of words at 51AAH, the message ILLEGAL FILE NAME.
4F98
DEFB ADH AD
Error 14H: the list of words at 51ADH, the message GAT READ ERROR.
4F99
DEFB B0H B0
Error 15H: the list of words at 51B0H, the message GAT WRITE ERROR.
4F9A
DEFB B3H B3
Error 16H: the list of words at 51B3H, the message HIT READ ERROR.
4F9B
DEFB B6H B6
Error 17H: the list of words at 51B6H, the message HIT WRITE ERROR.
4F9C
DEFB B9H B9
Error 18H: the list of words at 51B9H, the message FILE NOT IN DIRECTORY.
4F9D
DEFB BDH BD
Error 19H: the list of words at 51BDH, the message FILE ACCESS DENIED.
4F9E
DEFB C0H C0
Error 1AH: the list of words at 51C0H, the message DIRECTORY SPACE FULL.
4F9F
DEFB C3H C3
Error 1BH: the list of words at 51C3H, the message DISK SPACE FULL.
4FA0
DEFB C6H C6
Error 1CH: the list of words at 51C6H, the message END OF FILE ENCOUNTERED.
4FA1
DEFB CAH CA
Error 1DH: the list of words at 51CAH, the message RECORD NUMBER OUT OF RANGE.
4FA2
DEFB CFH CF
Error 1EH: the list of words at 51CFH, the message DIRECTORY FULL, then word 34H (a dash, a space and CAN'T EXTEND), then FILE.
4FA3
DEFB D3H D3
Error 1FH: the list of words at 51D3H, the message PROGRAM NOT FOUND.
4FA4
DEFB D6H D6
Error 20H: the list of words at 51D6H, the message ILLEGAL DRIVE NUMBER.
4FA5
DEFB D9H D9
Error 21H: the list of words at 51D9H, the message NO DEVICE SPACE AVAILABLE.
4FA6
DEFB DDH DD
Error 22H: the list of words at 51DDH, the message LOAD FILE FORMAT ERROR.
4FA7
DEFB E1H E1
Error 23H: the list of words at 51E1H, the message MEMORY FAULT.
4FA8
DEFB E3H E3
Error 24H: the list of words at 51E3H, the message ATTEMPTED TO LOAD READ ONLY MEMORY.
4FA9
DEFB E8H E8
Error 25H: the list of words at 51E8H, the message ILLEGAL ACCESS ATTEMPTED TO PROTECTED FILE.
4FAA
DEFB EDH ED
Error 26H: the list of words at 51EDH, the message FILE NOT OPEN.
4FAB-4FC1
DEFB F0H x 23 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0
Errors 27H-3DH: each byte F0H, the list of words at 51F0H, the message UNKNOWN ERROR CODE. No DoubleDOS file gives these codes.
4FC2-4FC3
DEFB F0H,F0H F0 F0
Errors 3EH and 3FH: F0H, the list at 51F0H, UNKNOWN ERROR CODE. The two bytes are also the place of word 00H of the table at 4FC2H, which no list uses.

4FC4H - The Start of Each Word

The table of words starts at 4FC2H: word n's start is the word at 4FC2H plus twice n, for the words 01H-35H, and the start of the next word is the end of each one (4E3DH-4E44H). The entry after word 35H, 515BH, ends the last word.

4FC4-4FC5
DEFW 5030H 30 50
Word 01H starts at 5030H: NO, 2 characters, up to 5032H where word 02H starts.
4FC6-4FC7
DEFW 5032H 32 50
Word 02H starts at 5032H: ERROR, 5 characters, up to 5037H where word 03H starts.
4FC8-4FC9
DEFW 5037H 37 50
Word 03H starts at 5037H: FORMAT, 6 characters, up to 503DH where word 04H starts.
4FCA-4FCB
DEFW 503DH 3D 50
Word 04H starts at 503DH: PARITY, 6 characters, up to 5043H where word 05H starts.
4FCC-4FCD
DEFW 5043H 43 50
Word 05H starts at 5043H: DURING, 6 characters, up to 5049H where word 06H starts.
4FCE-4FCF
DEFW 5049H 49 50
Word 06H starts at 5049H: HEADER, 6 characters, up to 504FH where word 07H starts.
4FD0-4FD1
DEFW 504FH 4F 50
Word 07H starts at 504FH: DATA, 4 characters, up to 5053H where word 08H starts.
4FD2-4FD3
DEFW 5053H 53 50
Word 08H starts at 5053H: SEEK, 4 characters, up to 5057H where word 09H starts.
4FD4-4FD5
DEFW 5057H 57 50
Word 09H starts at 5057H: READ, 4 characters, up to 505BH where word 0AH starts.
4FD6-4FD7
DEFW 505BH 5B 50
Word 0AH starts at 505BH: WRITE, 5 characters, up to 5060H where word 0BH starts.
4FD8-4FD9
DEFW 5060H 60 50
Word 0BH starts at 5060H: LOST, 4 characters, up to 5064H where word 0CH starts.
4FDA-4FDB
DEFW 5064H 64 50
Word 0CH starts at 5064H: NOT, 3 characters, up to 5067H where word 0DH starts.
4FDC-4FDD
DEFW 5067H 67 50
Word 0DH starts at 5067H: ATTEMPTED TO, 12 characters, up to 5073H where word 0EH starts.
4FDE-4FDF
DEFW 5073H 73 50
Word 0EH starts at 5073H: LOCKED/DELETED, 14 characters, up to 5081H where word 0FH starts.
4FE0-4FE1
DEFW 5081H 81 50
Word 0FH starts at 5081H: SYSTEM, 6 characters, up to 5087H where word 10H starts.
4FE2-4FE3
DEFW 5087H 87 50
Word 10H starts at 5087H: DIRECTORY, 9 characters, up to 5090H where word 11H starts.
4FE4-4FE5
DEFW 5090H 90 50
Word 11H starts at 5090H: MEMORY, 6 characters, up to 5096H where word 12H starts.
4FE6-4FE7
DEFW 5096H 96 50
Word 12H starts at 5096H: ON, 2 characters, up to 5098H where word 13H starts.
4FE8-4FE9
DEFW 5098H 98 50
Word 13H starts at 5098H: DISK, 4 characters, up to 509CH where word 14H starts.
4FEA-4FEB
DEFW 509CH 9C 50
Word 14H starts at 509CH: DISKETTE, 8 characters, up to 50A4H where word 15H starts.
4FEC-4FED
DEFW 50A4H A4 50
Word 15H starts at 50A4H: FAULT, 5 characters, up to 50A9H where word 16H starts.
4FEE-4FEF
DEFW 50A9H A9 50
Word 16H starts at 50A9H: PROTECTED, 9 characters, up to 50B2H where word 17H starts.
4FF0-4FF1
DEFW 50B2H B2 50
Word 17H starts at 50B2H: ILLEGAL, 7 characters, up to 50B9H where word 18H starts.
4FF2-4FF3
DEFW 50B9H B9 50
Word 18H starts at 50B9H: LOGICAL, 7 characters, up to 50C0H where word 19H starts.
4FF4-4FF5
DEFW 50C0H C0 50
Word 19H starts at 50C0H: NUMBER, 6 characters, up to 50C6H where word 1AH starts.
4FF6-4FF7
DEFW 50C6H C6 50
Word 1AH starts at 50C6H: FILE, 4 characters, up to 50CAH where word 1BH starts.
4FF8-4FF9
DEFW 50CAH CA 50
Word 1BH starts at 50CAH: RECORD, 6 characters, up to 50D0H where word 1CH starts.
4FFA-4FFB
DEFW 50D0H D0 50
Word 1CH starts at 50D0H: END, 3 characters, up to 50D3H where word 1DH starts.
4FFC-4FFD
DEFW 50D3H D3 50
Word 1DH starts at 50D3H: OF, 2 characters, up to 50D5H where word 1EH starts.
4FFE-4FFF
DEFW 50D5H D5 50
Word 1EH starts at 50D5H: OUT, 3 characters, up to 50D8H where word 1FH starts.
5000-5001
DEFW 50D8H D8 50
Word 1FH starts at 50D8H: RANGE, 5 characters, up to 50DDH where word 20H starts.
5002-5003
DEFW 50DDH DD 50
Word 20H starts at 50DDH: ENCOUNTERED, 11 characters, up to 50E8H where word 21H starts.
5004-5005
DEFW 50E8H E8 50
Word 21H starts at 50E8H: CODE, 4 characters, up to 50ECH where word 22H starts.
5006-5007
DEFW 50ECH EC 50
Word 22H starts at 50ECH: GAT, 3 characters, up to 50EFH where word 23H starts.
5008-5009
DEFW 50EFH EF 50
Word 23H starts at 50EFH: HIT, 3 characters, up to 50F2H where word 24H starts.
500A-500B
DEFW 50F2H F2 50
Word 24H starts at 50F2H: OVERLAY, 7 characters, up to 50F9H where word 25H starts.
500C-500D
DEFW 50F9H F9 50
Word 25H starts at 50F9H: UNKNOWN, 7 characters, up to 5100H where word 26H starts.
500E-500F
DEFW 5100H 00 51
Word 26H starts at 5100H: LOAD, 4 characters, up to 5104H where word 27H starts.
5010-5011
DEFW 5104H 04 51
Word 27H starts at 5104H: SPACE, 5 characters, up to 5109H where word 28H starts.
5012-5013
DEFW 5109H 09 51
Word 28H starts at 5109H: ONLY, 4 characters, up to 510DH where word 29H starts.
5014-5015
DEFW 510DH 0D 51
Word 29H starts at 510DH: NAME, 4 characters, up to 5111H where word 2AH starts.
5016-5017
DEFW 5111H 11 51
Word 2AH starts at 5111H: DEVICE, 6 characters, up to 5117H where word 2BH starts.
5018-5019
DEFW 5117H 17 51
Word 2BH starts at 5117H: FORMAT, 6 characters, up to 511DH where word 2CH starts.
501A-501B
DEFW 511DH 1D 51
Word 2CH starts at 511DH: FOUND, 5 characters, up to 5122H where word 2DH starts.
501C-501D
DEFW 5122H 22 51
Word 2DH starts at 5122H: IN, 2 characters, up to 5124H where word 2EH starts.
501E-501F
DEFW 5124H 24 51
Word 2EH starts at 5124H: ACCESS, 6 characters, up to 512AH where word 2FH starts.
5020-5021
DEFW 512AH 2A 51
Word 2FH starts at 512AH: FULL, 4 characters, up to 512EH where word 30H starts.
5022-5023
DEFW 512EH 2E 51
Word 30H starts at 512EH: DRIVE, 5 characters, up to 5133H where word 31H starts.
5024-5025
DEFW 5133H 33 51
Word 31H starts at 5133H: DENIED, 6 characters, up to 5139H where word 32H starts.
5026-5027
DEFW 5139H 39 51
Word 32H starts at 5139H: PROGRAM, 7 characters, up to 5140H where word 33H starts.
5028-5029
DEFW 5140H 40 51
Word 33H starts at 5140H: AVAILABLE, 9 characters, up to 5149H where word 34H starts.
502A-502B
DEFW 5149H 49 51
Word 34H starts at 5149H: a dash, a space and CAN'T EXTEND, 14 characters, up to 5157H where word 35H starts.
502C-502D
DEFW 5157H 57 51
Word 35H starts at 5157H: OPEN, 4 characters, up to 515BH, the start of the lists of words.
502E-502F
DEFW 515BH 5B 51
The end of word 35H, OPEN, at 515BH: the entry after the last word, which is also where the lists of words of the messages start.

5030H - The Words

The 53 words of the messages, one after another with no end mark: the table at 4FC4H gives where each starts. Word 03H (FORMAT) and word 24H (OVERLAY) are in no message; word 2BH is FORMAT again.

5030-5031
DEFM "NO" 4E 4F
Word 01H at 5030H-5031H: NO, 2 characters, in the messages of errors 00H and 21H.
5032-5036
DEFM "ERROR" 45 52 52 4F 52
Word 02H at 5032H-5036H: ERROR, 5 characters, in the messages of errors 00H, 01H, 02H, 04H, 09H, 0AH, 0CH, 11H, 12H, 14H, 15H, 16H, 17H, 22H and 27H-3FH.
5037-503C
DEFM "FORMAT" 46 4F 52 4D 41 54
Word 03H at 5037H-503CH: FORMAT, 6 characters, in no message.
503D-5042
DEFM "PARITY" 50 41 52 49 54 59
Word 04H at 503DH-5042H: PARITY, 6 characters, in the messages of errors 01H, 04H, 09H and 0CH.
5043-5048
DEFM "DURING" 44 55 52 49 4E 47
Word 05H at 5043H-5048H: DURING, 6 characters, in the messages of errors 01H, 02H, 03H, 04H, 05H, 09H, 0AH, 0BH, 0CH and 0DH.
5049-504E
DEFM "HEADER" 48 45 41 44 45 52
Word 06H at 5049H-504EH: HEADER, 6 characters, in the messages of errors 01H and 09H.
504F-5052
DEFM "DATA" 44 41 54 41
Word 07H at 504FH-5052H: DATA, 4 characters, in the messages of errors 03H, 05H, 06H, 07H, 0BH and 0DH.
5053-5056
DEFM "SEEK" 53 45 45 4B
Word 08H at 5053H-5056H: SEEK, 4 characters, in the messages of errors 02H and 0AH.
5057-505A
DEFM "READ" 52 45 41 44
Word 09H at 5057H-505AH: READ, 4 characters, in the messages of errors 01H, 02H, 03H, 04H, 05H, 06H, 07H, 11H, 14H, 16H and 24H.
505B-505F
DEFM "WRITE" 57 52 49 54 45
Word 0AH at 505BH-505FH: WRITE, 5 characters, in the messages of errors 09H, 0AH, 0BH, 0CH, 0DH, 0EH, 0FH, 12H, 15H and 17H.
5060-5063
DEFM "LOST" 4C 4F 53 54
Word 0BH at 5060H-5063H: LOST, 4 characters, in the messages of errors 03H and 0BH.
5064-5066
DEFM "NOT" 4E 4F 54
Word 0CH at 5064H-5066H: NOT, 3 characters, in the messages of errors 05H, 08H, 0DH, 18H, 1FH and 26H.
5067-5072
DEFM "ATTEMPTED TO" 41 54 54 45 4D 50 54 45 44 20 54 4F
Word 0DH at 5067H-5072H: ATTEMPTED TO, 12 characters, in the messages of errors 06H, 07H, 24H and 25H.
5073-5080
DEFM "LOCKED/DELETED" 4C 4F 43 4B 45 44 2F 44 45 4C 45 54 45 44
Word 0EH at 5073H-5080H: LOCKED/DELETED, 14 characters, in the message of error 06H.
5081-5086
DEFM "SYSTEM" 53 59 53 54 45 4D
Word 0FH at 5081H-5086H: SYSTEM, 6 characters, in the message of error 07H.
5087-508F
DEFM "DIRECTORY" 44 49 52 45 43 54 4F 52 59
Word 10H at 5087H-508FH: DIRECTORY, 9 characters, in the messages of errors 11H, 12H, 18H, 1AH and 1EH.
5090-5095
DEFM "MEMORY" 4D 45 4D 4F 52 59
Word 11H at 5090H-5095H: MEMORY, 6 characters, in the messages of errors 23H and 24H.
5096-5097
DEFM "ON" 4F 4E
Word 12H at 5096H-5097H: ON, 2 characters, in the message of error 0EH.
5098-509B
DEFM "DISK" 44 49 53 4B
Word 13H at 5098H-509BH: DISK, 4 characters, in the messages of errors 0EH and 1BH.
509C-50A3
DEFM "DISKETTE" 44 49 53 4B 45 54 54 45
Word 14H at 509CH-50A3H: DISKETTE, 8 characters, in the message of error 0FH.
50A4-50A8
DEFM "FAULT" 46 41 55 4C 54
Word 15H at 50A4H-50A8H: FAULT, 5 characters, in the messages of errors 0EH and 23H.
50A9-50B1
DEFM "PROTECTED" 50 52 4F 54 45 43 54 45 44
Word 16H at 50A9H-50B1H: PROTECTED, 9 characters, in the messages of errors 0FH and 25H.
50B2-50B8
DEFM "ILLEGAL" 49 4C 4C 45 47 41 4C
Word 17H at 50B2H-50B8H: ILLEGAL, 7 characters, in the messages of errors 10H, 13H, 20H and 25H.
50B9-50BF
DEFM "LOGICAL" 4C 4F 47 49 43 41 4C
Word 18H at 50B9H-50BFH: LOGICAL, 7 characters, in the message of error 10H.
50C0-50C5
DEFM "NUMBER" 4E 55 4D 42 45 52
Word 19H at 50C0H-50C5H: NUMBER, 6 characters, in the messages of errors 10H, 1DH and 20H.
50C6-50C9
DEFM "FILE" 46 49 4C 45
Word 1AH at 50C6H-50C9H: FILE, 4 characters, in the messages of errors 10H, 13H, 18H, 19H, 1CH, 1EH, 22H, 25H and 26H.
50CA-50CF
DEFM "RECORD" 52 45 43 4F 52 44
Word 1BH at 50CAH-50CFH: RECORD, 6 characters, in the messages of errors 05H, 06H, 07H, 0DH and 1DH.
50D0-50D2
DEFM "END" 45 4E 44
Word 1CH at 50D0H-50D2H: END, 3 characters, in the message of error 1CH.
50D3-50D4
DEFM "OF" 4F 46
Word 1DH at 50D3H-50D4H: OF, 2 characters, in the messages of errors 1CH and 1DH.
50D5-50D7
DEFM "OUT" 4F 55 54
Word 1EH at 50D5H-50D7H: OUT, 3 characters, in the message of error 1DH.
50D8-50DC
DEFM "RANGE" 52 41 4E 47 45
Word 1FH at 50D8H-50DCH: RANGE, 5 characters, in the message of error 1DH.
50DD-50E7
DEFM "ENCOUNTERED" 45 4E 43 4F 55 4E 54 45 52 45 44
Word 20H at 50DDH-50E7H: ENCOUNTERED, 11 characters, in the message of error 1CH.
50E8-50EB
DEFM "CODE" 43 4F 44 45
Word 21H at 50E8H-50EBH: CODE, 4 characters, in the message of error 27H-3FH.
50EC-50EE
DEFM "GAT" 47 41 54
Word 22H at 50ECH-50EEH: GAT, 3 characters, in the messages of errors 14H and 15H.
50EF-50F1
DEFM "HIT" 48 49 54
Word 23H at 50EFH-50F1H: HIT, 3 characters, in the messages of errors 16H and 17H.
50F2-50F8
DEFM "OVERLAY" 4F 56 45 52 4C 41 59
Word 24H at 50F2H-50F8H: OVERLAY, 7 characters, in no message.
50F9-50FF
DEFM "UNKNOWN" 55 4E 4B 4E 4F 57 4E
Word 25H at 50F9H-50FFH: UNKNOWN, 7 characters, in the message of error 27H-3FH.
5100-5103
DEFM "LOAD" 4C 4F 41 44
Word 26H at 5100H-5103H: LOAD, 4 characters, in the messages of errors 22H and 24H.
5104-5108
DEFM "SPACE" 53 50 41 43 45
Word 27H at 5104H-5108H: SPACE, 5 characters, in the messages of errors 1AH, 1BH and 21H.
5109-510C
DEFM "ONLY" 4F 4E 4C 59
Word 28H at 5109H-510CH: ONLY, 4 characters, in the message of error 24H.
510D-5110
DEFM "NAME" 4E 41 4D 45
Word 29H at 510DH-5110H: NAME, 4 characters, in the message of error 13H.
5111-5116
DEFM "DEVICE" 44 45 56 49 43 45
Word 2AH at 5111H-5116H: DEVICE, 6 characters, in the messages of errors 08H and 21H.
5117-511C
DEFM "FORMAT" 46 4F 52 4D 41 54
Word 2BH at 5117H-511CH: FORMAT, 6 characters, in the message of error 22H.
511D-5121
DEFM "FOUND" 46 4F 55 4E 44
Word 2CH at 511DH-5121H: FOUND, 5 characters, in the messages of errors 05H, 0DH and 1FH.
5122-5123
DEFM "IN" 49 4E
Word 2DH at 5122H-5123H: IN, 2 characters, in the message of error 18H.
5124-5129
DEFM "ACCESS" 41 43 43 45 53 53
Word 2EH at 5124H-5129H: ACCESS, 6 characters, in the messages of errors 19H and 25H.
512A-512D
DEFM "FULL" 46 55 4C 4C
Word 2FH at 512AH-512DH: FULL, 4 characters, in the messages of errors 1AH, 1BH and 1EH.
512E-5132
DEFM "DRIVE" 44 52 49 56 45
Word 30H at 512EH-5132H: DRIVE, 5 characters, in the messages of errors 0EH and 20H.
5133-5138
DEFM "DENIED" 44 45 4E 49 45 44
Word 31H at 5133H-5138H: DENIED, 6 characters, in the message of error 19H.
5139-513F
DEFM "PROGRAM" 50 52 4F 47 52 41 4D
Word 32H at 5139H-513FH: PROGRAM, 7 characters, in the message of error 1FH.
5140-5148
DEFM "AVAILABLE" 41 56 41 49 4C 41 42 4C 45
Word 33H at 5140H-5148H: AVAILABLE, 9 characters, in the messages of errors 08H and 21H.
5149-5156
DEFM "- CAN'T EXTEND" 2D 20 43 41 4E 27 54 20 45 58 54 45 4E 44
Word 34H at 5149H-5156H: a dash, a space and CAN'T EXTEND, the end of the message of error 1EH, 14 characters.
5157-515A
DEFM "OPEN" 4F 50 45 4E
Word 35H at 5157H-515AH: OPEN, 4 characters, in the message of error 26H.

515BH - The Lists of Words of the Messages

For each message, the numbers of its words in bits 5-0, one byte a word; bit 7 marks the last word. Bit 6 of the last byte, set in the messages of errors 08H, 13H, 18H, 19H, 1AH, 20H, 21H and 26H, is read only by 4E82H, which never runs; 4E32H drops it.

515B-515C
DEFB 01H,82H 01 82
Error 00H: words 01H, 02H, the message NO ERROR.
515D-5161
DEFB 04H,02H,05H,06H,89H 04 02 05 06 89
Error 01H: words 04H, 02H, 05H, 06H, 09H, the message PARITY ERROR DURING HEADER READ.
5162-5165
DEFB 08H,02H,05H,89H 08 02 05 89
Error 02H: words 08H, 02H, 05H, 09H, the message SEEK ERROR DURING READ.
5166-5169
DEFB 0BH,07H,05H,89H 0B 07 05 89
Error 03H: words 0BH, 07H, 05H, 09H, the message LOST DATA DURING READ.
516A-516D
DEFB 04H,02H,05H,89H 04 02 05 89
Error 04H: words 04H, 02H, 05H, 09H, the message PARITY ERROR DURING READ.
516E-5173
DEFB 07H,1BH,0CH,2CH,05H,89H 07 1B 0C 2C 05 89
Error 05H: words 07H, 1BH, 0CH, 2CH, 05H, 09H, the message DATA RECORD NOT FOUND DURING READ.
5174-5178
DEFB 0DH,09H,0EH,07H,9BH 0D 09 0E 07 9B
Error 06H: words 0DH, 09H, 0EH, 07H, 1BH, the message ATTEMPTED TO READ LOCKED/DELETED DATA RECORD.
5179-517D
DEFB 0DH,09H,0FH,07H,9BH 0D 09 0F 07 9B
Error 07H: words 0DH, 09H, 0FH, 07H, 1BH, the message ATTEMPTED TO READ SYSTEM DATA RECORD.
517E-5180
DEFB 2AH,0CH,F3H 2A 0C F3
Error 08H: words 2AH, 0CH, 33H, the message DEVICE NOT AVAILABLE. Bit 6 is set in the last byte.
5181-5185
DEFB 04H,02H,05H,06H,8AH 04 02 05 06 8A
Error 09H: words 04H, 02H, 05H, 06H, 0AH, the message PARITY ERROR DURING HEADER WRITE.
5186-5189
DEFB 08H,02H,05H,8AH 08 02 05 8A
Error 0AH: words 08H, 02H, 05H, 0AH, the message SEEK ERROR DURING WRITE.
518A-518D
DEFB 0BH,07H,05H,8AH 0B 07 05 8A
Error 0BH: words 0BH, 07H, 05H, 0AH, the message LOST DATA DURING WRITE.
518E-5191
DEFB 04H,02H,05H,8AH 04 02 05 8A
Error 0CH: words 04H, 02H, 05H, 0AH, the message PARITY ERROR DURING WRITE.
5192-5197
DEFB 07H,1BH,0CH,2CH,05H,8AH 07 1B 0C 2C 05 8A
Error 0DH: words 07H, 1BH, 0CH, 2CH, 05H, 0AH, the message DATA RECORD NOT FOUND DURING WRITE.
5198-519C
DEFB 0AH,15H,12H,13H,B0H 0A 15 12 13 B0
Error 0EH: words 0AH, 15H, 12H, 13H, 30H, the message WRITE FAULT ON DISK DRIVE.
519D-519F
DEFB 0AH,16H,94H 0A 16 94
Error 0FH: words 0AH, 16H, 14H, the message WRITE PROTECTED DISKETTE.
51A0-51A3
DEFB 17H,18H,1AH,99H 17 18 1A 99
Error 10H: words 17H, 18H, 1AH, 19H, the message ILLEGAL LOGICAL FILE NUMBER.
51A4-51A6
DEFB 10H,09H,82H 10 09 82
Error 11H: words 10H, 09H, 02H, the message DIRECTORY READ ERROR.
51A7-51A9
DEFB 10H,0AH,82H 10 0A 82
Error 12H: words 10H, 0AH, 02H, the message DIRECTORY WRITE ERROR.
51AA-51AC
DEFB 17H,1AH,E9H 17 1A E9
Error 13H: words 17H, 1AH, 29H, the message ILLEGAL FILE NAME. Bit 6 is set in the last byte.
51AD-51AF
DEFB 22H,09H,82H 22 09 82
Error 14H: words 22H, 09H, 02H, the message GAT READ ERROR.
51B0-51B2
DEFB 22H,0AH,82H 22 0A 82
Error 15H: words 22H, 0AH, 02H, the message GAT WRITE ERROR.
51B3-51B5
DEFB 23H,09H,82H 23 09 82
Error 16H: words 23H, 09H, 02H, the message HIT READ ERROR.
51B6-51B8
DEFB 23H,0AH,82H 23 0A 82
Error 17H: words 23H, 0AH, 02H, the message HIT WRITE ERROR.
51B9-51BC
DEFB 1AH,0CH,2DH,D0H 1A 0C 2D D0
Error 18H: words 1AH, 0CH, 2DH, 10H, the message FILE NOT IN DIRECTORY. Bit 6 is set in the last byte.
51BD-51BF
DEFB 1AH,2EH,F1H 1A 2E F1
Error 19H: words 1AH, 2EH, 31H, the message FILE ACCESS DENIED. Bit 6 is set in the last byte.
51C0-51C2
DEFB 10H,27H,EFH 10 27 EF
Error 1AH: words 10H, 27H, 2FH, the message DIRECTORY SPACE FULL. Bit 6 is set in the last byte.
51C3-51C5
DEFB 13H,27H,AFH 13 27 AF
Error 1BH: words 13H, 27H, 2FH, the message DISK SPACE FULL.
51C6-51C9
DEFB 1CH,1DH,1AH,A0H 1C 1D 1A A0
Error 1CH: words 1CH, 1DH, 1AH, 20H, the message END OF FILE ENCOUNTERED.
51CA-51CE
DEFB 1BH,19H,1EH,1DH,9FH 1B 19 1E 1D 9F
Error 1DH: words 1BH, 19H, 1EH, 1DH, 1FH, the message RECORD NUMBER OUT OF RANGE.
51CF-51D2
DEFB 10H,2FH,34H,9AH 10 2F 34 9A
Error 1EH: words 10H, 2FH, 34H, 1AH, the message DIRECTORY FULL, then word 34H (a dash, a space and CAN'T EXTEND), then FILE.
51D3-51D5
DEFB 32H,0CH,ACH 32 0C AC
Error 1FH: words 32H, 0CH, 2CH, the message PROGRAM NOT FOUND.
51D6-51D8
DEFB 17H,30H,D9H 17 30 D9
Error 20H: words 17H, 30H, 19H, the message ILLEGAL DRIVE NUMBER. Bit 6 is set in the last byte.
51D9-51DC
DEFB 01H,2AH,27H,F3H 01 2A 27 F3
Error 21H: words 01H, 2AH, 27H, 33H, the message NO DEVICE SPACE AVAILABLE. Bit 6 is set in the last byte.
51DD-51E0
DEFB 26H,1AH,2BH,82H 26 1A 2B 82
Error 22H: words 26H, 1AH, 2BH, 02H, the message LOAD FILE FORMAT ERROR.
51E1-51E2
DEFB 11H,95H 11 95
Error 23H: words 11H, 15H, the message MEMORY FAULT.
51E3-51E7
DEFB 0DH,26H,09H,28H,91H 0D 26 09 28 91
Error 24H: words 0DH, 26H, 09H, 28H, 11H, the message ATTEMPTED TO LOAD READ ONLY MEMORY.
51E8-51EC
DEFB 17H,2EH,0DH,16H,9AH 17 2E 0D 16 9A
Error 25H: words 17H, 2EH, 0DH, 16H, 1AH, the message ILLEGAL ACCESS ATTEMPTED TO PROTECTED FILE.
51ED-51EF
DEFB 1AH,0CH,F5H 1A 0C F5
Error 26H: words 1AH, 0CH, 35H, the message FILE NOT OPEN. Bit 6 is set in the last byte.
51F0-51F2
DEFB 25H,02H,A1H 25 02 A1
Errors 27H-3FH: words 25H, 02H, 21H, the message UNKNOWN ERROR CODE.