TRS-80 DOS - NEWDOS/80 v2.0 for the Model I - SYS4/SYS Disassembled

Page Customization

Introduction:

SYS4/SYS is a multi-purpose NEWDOS/80 overlay module that provides error message handling, queue management, system configuration, and directory display functions. The overlay loads at address 4D00H and occupies memory through 51E7H.

Error Message System: The primary function of SYS4 is displaying DOS error messages. To conserve memory, error messages use a compressed word-based encoding scheme. A vocabulary of approximately 90 common words (such as "ERROR", "FILE", "DISK", "ILLEGAL", etc.) is stored in a lookup table starting at 4E75H. Each error message is encoded as a sequence of 1-byte word indices, with bit 7 set on the final word to mark the end of the phrase. This compression allows complex error messages like "ILLEGAL INITIALIZATION DATA ON SYSTEM DISKETTE" to be stored in just 6 bytes instead of the full 44-character string.

Command Dispatch: Entry at 4D00H examines Register A for command codes: 25H (display error message), 45H (file operation setup), 65H (queue add), 85H (queue remove), A5H (screen dump), C5H (file query), and E5H (system configuration with sub-functions in Register C).

Queue Management: Functions at 4D47H and 4D55H implement a singly-linked list for managing system queues. The queue head pointer is stored at 4584H, with each queue entry containing a 2-byte forward pointer to the next entry.

System Configuration: The E5H command provides sub-functions (selected by Register C) to toggle various system flags: keyboard echo control (401CH), display routing (4019H), error suppression (4289H), and debug hook installation (4478H-447AH).

Directory Display: Function 503AH implements the DIR command processing, scanning directory sectors and displaying file entries with optional password filtering. The display prompt "KILL IT? (Y/N/Q)" at 5144H supports file deletion confirmation.

Screen Dump: Function 515FH at command code A5H provides a screen memory dump utility, reading video RAM at 3C00H and outputting displayable characters while converting graphics characters to periods.

Variables:

AddressBytesPurpose
4019H1Display routing flag. Bit 0: when set, routes output to alternate destination.
401CH1Keyboard echo flag. Bit 0: when set, enables keyboard character echo.
427EH1Current drive number for error message display.
4288H1System status flag, cleared during error message processing.
4289H1Error control flag. Bit 7: when set, suppresses error message display.
428BH1System control flags. Bit 2: when set, bypasses filename display in error messages.
4290H1Maximum displayable character code for screen dump function.
431FH1Track count offset used in DIR command sector calculations.
4478H-447AH3Debug hook vector. First byte is opcode (C3H=JP or C9H=RET), followed by 2-byte address at 4479H.
4480H1Directory operation control flag.
4487H1Current directory slot pointer for DIR command processing.
4584H-4585H2Queue head pointer. Points to first entry in linked list, or 0000H if queue is empty.
4A2DH1IX prefix configuration byte. Set to DDH for IX mode or 00H for normal mode.
4A2EH-4A2FH2Index register offset configuration. Set to 017EH or FF3EH depending on mode.
4D00H-4DBFH192Scratch buffer area. Used as bitmap workspace during KILL operations (C0H bytes).
4DC0H-4DDFH32Secondary scratch buffer area (20H bytes) for granule allocation tracking.
4EA1H1Current directory entry low-byte position within sector buffer.
4FB8H1Error display mode flag. 00H=normal error display, 01H=alternate processing mode.
5130H1Computed track count for DIR command processing.
5140H1DIR command filter flags. Bit 0: password filter active, Bit 1: USR filter active.
5141H-5143H3Password filter string for DIR command (3 characters).
5144H-515EH27DIR command prompt string: "KILL IT? (Y/N/Q)" with trailing spaces and ETX terminator.

Disassembly

4D00H - Error Message Handler Entry Point

This is the entry point for SYS4/SYS, the NEWDOS/80 error message handler. Register A contains either a command code or an error code. The routine checks for special codes first, then displays the appropriate error message from a compressed message table stored at 4D84H. Word components are stored separately at 4E74H and combined to form complete error messages.

4D00
CP E6H FE E6
Compare Register A against E6H (the "END" or "no error" code). If A equals E6H, the Z FLAG is set; otherwise the NZ FLAG is set.
4D02
If the Z FLAG (Zero) has been set (meaning A = E6H, indicating no error/success), RETURN immediately to the caller without displaying any message.

The code did not return, so A contains something other than E6H. Now check if A is 46H (ASCII F), which indicates a FORMAT command context.

4D03
CP 46H FE 46
Compare Register A against 46H (ASCII: F). If A equals 46H, the Z FLAG is set; otherwise the NZ FLAG is set.
4D05
If the NZ FLAG (Not Zero) has been set (meaning A ≠ 46H, not a FORMAT command), JUMP forward to 4D0EH to skip the flag-setting code.

A = 46H (ASCII F), indicating this is being called during FORMAT command processing. Set bit 2 of the DOS system flags at 436AH to remember this state.

4D07
PUSH HL E5
Save Register Pair HL onto the stack (preserve its current value).
4D08
LD HL,436AH 21 6A 43
Point Register Pair HL to 436AH, the DOS system flags byte 1.
4D0B
SET 2,(HL) CB D6
SET bit 2 of the byte at (HL), which is the DOS system flags at 436AH. This bit indicates that a FORMAT command is in progress and affects how subsequent error messages are handled.
4D0D
POP HL E1
Restore Register Pair HL from the stack.

Now save the caller's return address for later use. The stack currently contains: [Return Address]. We exchange HL with the stack to capture this address.

4D0E
EX (SP),HL E3
Exchange HL with the value on top of the stack. The caller's return address moves into HL, while HL's previous value is placed on the stack.
4D0F
LD (4D7FH),HL 22 7F 4D
Store the caller's return address (now in HL) into memory location 4D7FH. This address is embedded in the JP M instruction at 4D7EH and determines where to exit on error.
4D12
POP HL E1
Restore HL from the stack (getting back the original HL value that was exchanged).
4D13
EX (SP),HL E3
Exchange HL with the top of stack again, restoring the original stack state while HL now holds the original HL value.
4D14
PUSH DE D5
Save Register Pair DE onto the stack.
4D15
PUSH BC C5
Save Register Pair BC onto the stack.
4D16
PUSH HL E5
Save Register Pair HL onto the stack. All main registers are now preserved.

Now check if A = 66H (lowercase f), which is another FORMAT-related code that skips certain validity checks.

4D17
CP 66H FE 66
Compare Register A against 66H (ASCII: lowercase f). If A equals 66H, the Z FLAG is set.
4D19
LD A,H 7C
Load Register A with the high byte of HL. This captures additional context information passed by the caller.
4D1A
If the Z FLAG (Zero) has been set (meaning original A was 66H), JUMP forward to 4D3CH to skip the flag validation and go directly to message lookup.

A was not 66H. Check the DOS system flags to determine if special error handling is needed.

4D1C
LD HL,436AH 21 6A 43
Point Register Pair HL to 436AH, the DOS system flags byte 1.
4D1F
BIT 2,(HL) CB 56
Test bit 2 of the DOS flags at 436AH. If bit 2 is set (FORMAT in progress), the NZ FLAG is set; if bit 2 is clear, the Z FLAG is set.
4D21
If the NZ FLAG (Not Zero) has been set (meaning FORMAT flag is active), JUMP forward to 4D3CH to display the message without additional SVC processing.
4D23
BIT 7,A CB 7F
Test bit 7 of Register A (the high byte of HL loaded at 4D19H). If bit 7 is set (high memory address), the NZ FLAG is set.
4D25
If the NZ FLAG (Not Zero) has been set (meaning the caller was in high memory), JUMP forward to 4D3CH to skip SVC processing.

Check additional driver and system flags at 4369H and 436AH to determine if SVC call is appropriate.

4D27
DEC HL 2B
DECrement HL by 1. HL now points to 4369H, the driver status flags.
4D28
BIT 5,(HL) CB 6E
Test bit 5 of the driver status flags at 4369H. This bit indicates a special driver state.
4D2A
If the NZ FLAG (Not Zero) has been set (meaning bit 5 of driver flags is set), JUMP forward to 4D31H to proceed with SVC call.
4D2C
INC HL 23
INCrement HL by 1. HL now points back to 436AH, the DOS system flags.
4D2D
BIT 6,(HL) CB 76
Test bit 6 of the DOS system flags at 436AH. Bit 6 indicates DOS-CALL is active.
4D2F
If the Z FLAG (Zero) has been set (meaning DOS-CALL is NOT active), JUMP forward to 4D3CH to skip the SVC call and go directly to message display.

Conditions are met for an SVC call. Mask the error code, set up carry flag, and call SVC E3H (SYS1/SYS function 7) with C=07H.

4D31
AND 3FHAND 00111111 E6 3F
Mask Register A with 3FH (binary 00111111), keeping only the lower 6 bits. This extracts the error code number (0-63) from any upper flag bits.
4D33
CP FFH FE FF
Compare Register A against FFH. Since A was masked to 6 bits (max 3FH), this comparison will always result in A < FFH, setting the CARRY FLAG.
4D35
CCF 3F
Complement (invert) the Carry Flag. The carry was set by the CP, so CCF clears it.
4D36
PUSH AF F5
Save Register A (masked error code) and the Flags onto the stack for later restoration.
4D37
LD A,E3H 3E E3
Load Register A with E3H, the SVC function code. E3H decodes as: SYS1/SYS (directory sector 05H, file 0), function 7.
4D39
LD C,07H 0E 07
Load Register C with 07H as an additional parameter for the SVC call.
4D3B
RST 28H EF
Execute RST 28H (DOS Supervisor Call). With A=E3H and C=07H, this calls function 7 in SYS1/SYS to perform additional error notification or logging.

4D3CH - Error Message Lookup and Display

This section looks up the error code in a compressed message table at 4D84H. Each entry in the table contains an index byte (with high bit marking end of index chain) followed by word component indices. Word text is stored separately at 4E74H.

4D3C
AND 3FHAND 00111111 E6 3F
Mask Register A with 3FH to ensure only the lower 6 bits are used as the error code index (0-63).
4D3E
LD B,A 47
Copy the error code from Register A into Register B. B will be used as a counter to find the correct message entry.
4D3F
INC B 04
INCrement B by 1. Error code 0 needs to skip 1 entry, error code 1 needs to skip 2 entries, etc. This adjusts for 1-based counting.
4D40
LD HL,4D84H 21 84 4D
Point Register Pair HL to 4D84H, the start of the compressed error message table.

[LOOP START] - Scan through the message table to find the entry for error code B. Each entry is a variable-length sequence of bytes with the high bit (bit 7) set on the last byte of each entry's index portion.

4D43
LD A,(HL) 7E
[LOOP] Fetch the current byte from the message table at (HL) into Register A.
4D44
RLC A CB 07
Rotate Register A left through carry. This shifts bit 7 (the end-of-entry marker) into the Carry Flag, and a zero result indicates a null entry.
4D46
INC HL 23
INCrement HL to point to the next byte in the message table.
4D47
If the Z FLAG (Zero) has been set (meaning A was 80H, a null/empty entry marker), JUMP forward to 4D4DH to process the word indices.
4D49
If the NC FLAG (No Carry) has been set (meaning bit 7 was 0, not end of entry), LOOP BACK to 4D43H to continue scanning this entry.
4D4B
DECrement B and Jump if Not Zero. If B > 0, more entries to skip, so LOOP BACK to 4D43H. When B reaches 0, we've found our target entry.

Found the target message entry. Now process the word component indices. Each byte's lower 7 bits specify a word index; bit 7 marks the last component.

4D4D
LD A,(HL) 7E
Fetch the current byte (word component index) from the message table at (HL) into Register A.
4D4E
AND 7FHAND 01111111 E6 7F
Mask off bit 7 to get just the word index (0-127) in Register A.
4D50
LD B,A 47
Copy the word index into Register B for use as a counter.
4D51
If the Z FLAG (Zero) has been set (meaning word index is 0, a null/skip indicator), JUMP forward to 4D6FH to advance to the next word component.
4D53
PUSH HL E5
Save the current message table pointer (HL) onto the stack.
4D54
LD HL,4E74H 21 74 4E
Point Register Pair HL to 4E74H, the start of the word/text component table.

[INNER LOOP START] - Scan through the word table to find word number B.

4D57
LD A,(HL) 7E
[INNER LOOP] Fetch the current byte from the word table at (HL) into Register A.
4D58
RLCA 07
Rotate A left, moving bit 7 into the Carry Flag. Bit 7 set indicates end of current word.
4D59
INC HL 23
INCrement HL to point to the next byte in the word table.
4D5A
If the NC FLAG (No Carry) has been set (meaning bit 7 was 0, not end of word), LOOP BACK to 4D57H to continue scanning this word.
4D5C
DECrement B and Jump if Not Zero. If B > 0, more words to skip, so LOOP BACK to 4D57H. When B reaches 0, we've found the target word.

[CHARACTER OUTPUT LOOP] - Output the characters of the found word. Each character has bit 7 clear except the last character which has bit 7 set.

4D5E
LD A,(HL) 7E
[CHAR OUTPUT LOOP] Fetch the current character byte from the word table at (HL) into Register A.
4D5F
AND 7FHAND 01111111 E6 7F
Mask off bit 7 to get the ASCII character code (0-127).
4D61
GOSUB to ROM routine at 0033H to display the character in Register A at the current cursor position and advance the cursor.
4D64
LD A,(HL) 7E
Fetch the same byte again from (HL) to check if it was the last character of the word.
4D65
RLCA 07
Rotate A left, moving bit 7 into the Carry Flag.
4D66
INC HL 23
INCrement HL to point to the next character.
4D67
If the NC FLAG (No Carry) has been set (meaning bit 7 was 0, more characters remain), LOOP BACK to 4D5EH to output the next character.

Finished outputting one word. Print a space separator between words.

4D69
LD A,20H 3E 20
Load Register A with 20H (ASCII space character).
4D6B
GOSUB to ROM routine at 0033H to display a space character between words.
4D6E
POP HL E1
Restore the message table pointer from the stack back into HL.

Check if there are more word components to output for this error message.

4D6F
LD A,(HL) 7E
Fetch the current message table byte at (HL) into Register A to check for more word components.
4D70
RLCA 07
Rotate A left, moving bit 7 into the Carry Flag. Bit 7 set indicates this was the last word component.
4D71
INC HL 23
INCrement HL to point to the next byte in the message table.
4D72
If the NC FLAG (No Carry) has been set (meaning bit 7 was 0, more word components remain), LOOP BACK to 4D4DH to process the next word index.

4D74H - Error Message Cleanup and Exit

All word components have been displayed. Print a carriage return to end the message line, restore all saved registers, and exit either via system reset (cold boot) or return to DOS Ready.

4D74
LD A,0DH 3E 0D
Load Register A with 0DH (ASCII carriage return).
4D76
GOSUB to ROM routine at 0033H to display the carriage return, moving the cursor to the start of the next line.
4D79
POP AF F1
Restore Register A and Flags from the stack (the values saved at 4D36H before the SVC call, or from the initial entry).
4D7A
POP BC C1
Restore Register Pair BC from the stack.
4D7B
POP DE D1
Restore Register Pair DE from the stack.
4D7C
POP HL E1
Restore Register Pair HL from the stack.
4D7D
OR A B7
Perform OR A with itself. This sets flags based on A's value: if bit 7 is set (negative), the S FLAG (Sign/Minus) is set.
4D7E
If the M FLAG (Minus/Sign) has been set (meaning bit 7 of A is set, indicating a fatal error), JUMP to 0000H to perform a system cold boot reset. Note: The address 0000H at bytes 4D7FH-4D80H may be modified by the code at 4D0FH to point to an alternate exit handler.
4D81
JUMP to 402DH, the DOS Ready warm start entry point. This returns control to DOS and displays the "READY" prompt for the next command.

4D84H - Error Message Index Table (Data)

This is the Error Message Index Table, a data structure used by the error handler at 4D00H. Each entry corresponds to an error code (0-63). Each byte's lower 7 bits specify a word index into the Word Component Table at 4E74H; bit 7 set marks the last word of that error message. The disassembler incorrectly interpreted these bytes as Z80 instructions - they are pure data.

Error Code 00H - Empty/No Message

4D84
DEFB 80H 80
Entry 0: Word index 00H (null/empty). This error code produces no message output.

Error Code 01H - NO ERROR (DOS Error 00H)

4D85
DEFB 13H 13
Entry 1: Word index 13H = "NO".
4D86
DEFB 81H 81
Word index 01H ="ERROR".

Error Code 02H - BAD FILE DATA (DOS Error 01H)

4D87
DEFB 22H 22
Entry 2: Word index 22H = "BAD".
4D88
DEFB 05H 05
Word index 05H = "FILE".
4D89
DEFB 8BH 8B
Word index 0BH = "DATA".

Error Code 03H - SEEK ERROR DURING READ (DOS Error 02H)

4D8A
DEFB 0EH 0E
Entry 3: Word index 0EH = "SEEK".
4D8B
DEFB 01H 01
Word index 01H ="ERROR".
4D8C
DEFB 04H 04
Word index 04H ="DURING".
4D8D
DEFB 82H 82
Word index 02H ="READ".

Error Code 04H - LOST DATA DURING READ (DOS Error 03H)

4D8E
DEFB 0DH 0D
Entry 4: Word index 0DH = "LOST".
4D8F
DEFB 0BH 0B
Word index 0BH = "DATA".
4D90
DEFB 04H 04
Word index 04H ="DURING".
4D91
DEFB 82H 82
Word index 02H ="READ".

Error Code 05H - PARITY ERROR DURING READ (DOS Error 04H)

4D92
DEFB 0CH 0C
Entry 5: Word index 0CH = "PARITY".
4D93
DEFB 01H 01
Word index 01H ="ERROR".
4D94
DEFB 04H 04
Word index 04H ="DURING".
4D95
DEFB 82H 82
Word index 02H ="READ".

Error Code 06H - DATA RECORD NOT FOUND DURING READ (DOS Error 05H)

4D96
DEFB 0BH 0B
Entry 6: Word index 0BH = "DATA".
4D97
DEFB 08H 08
Word index 08H = "RECORD".
4D98
DEFB 12H 12
Word index 12H = "NOT".
4D99
DEFB 31H 31
Word index 31H = "FOUND".
4D9A
DEFB 04H 04
Word index 04H ="DURING".
4D9B
DEFB 82H 82
Word index 02H ="READ".

Error Code 07H - TRIED TO READ LOCKED/DELETED RECORD (DOS Error 06H)

4D9C
DEFB 11H 11
Entry 7: Word index 11H = "TRIED TO".
4D9D
DEFB 02H 02
Word index 02H ="READ".
4D9E
DEFB 4CH 4C
Word index 4CH = "LOCKED/DELETED".
4D9F
DEFB 88H 88
Word index 08H = "RECORD".

Error Code 08H - TRIED TO READ SYSTEM RECORD (DOS Error 07H)

4DA0
DEFB 11H 11
Entry 8: Word index 11H = "TRIED TO".
4DA1
DEFB 02H 02
Word index 02H ="READ".
4DA2
DEFB 3CH 3C
Word index 3CH = "SYSTEM".
4DA3
DEFB 88H 88
Word index 08H = "RECORD".

Error Code 09H - DEVICE NOT AVAILABLE (DOS Error 08H)

4DA4
DEFB 15H 15
Entry 9: Word index 15H = "DEVICE".
4DA5
DEFB 12H 12
Word index 12H = "NOT".
4DA6
DEFB 96H 96
Word index 16H = "AVAILABLE".

Error Code 0AH - UNDEFINED ERROR CODE (DOS Error 09H)

4DA7
DEFB 49H 49
Entry 10: Word index 49H = "UNDEFINED".
4DA8
DEFB 01H 01
Word index 01H ="ERROR".
4DA9
DEFB A9H A9
Word index 29H = "CODE".

Error Code 0BH - SEEK ERROR DURING WRITE (DOS Error 0AH)

4DAA
DEFB 0EH 0E
Entry 11: Word index 0EH = "SEEK".
4DAB
DEFB 01H 01
Word index 01H ="ERROR".
4DAC
DEFB 04H 04
Word index 04H ="DURING".
4DAD
DEFB 83H 83
Word index 03H ="WRITE".

Error Code 0CH - LOST DATA DURING WRITE (DOS Error 0BH)

4DAE
DEFB 0DH 0D
Entry 12: Word index 0DH = "LOST".
4DAF
DEFB 0BH 0B
Word index 0BH = "DATA".
4DB0
DEFB 04H 04
Word index 04H ="DURING".
4DB1
DEFB 83H 83
Word index 03H ="WRITE".

Error Code 0DH - PARITY ERROR DURING WRITE (DOS Error 0CH)

4DB2
DEFB 0CH 0C
Entry 13: Word index 0CH = "PARITY".
4DB3
DEFB 01H 01
Word index 01H ="ERROR".
4DB4
DEFB 04H 04
Word index 04H ="DURING".
4DB5
DEFB 83H 83
Word index 03H ="WRITE".

Error Code 0EH - DATA RECORD NOT FOUND DURING WRITE (DOS Error 0DH)

4DB6
DEFB 0BH 0B
Entry 14: Word index 0BH = "DATA".
4DB7
DEFB 08H 08
Word index 08H = "RECORD".
4DB8
DEFB 12H 12
Word index 12H = "NOT".
4DB9
DEFB 31H 31
Word index 31H = "FOUND".
4DBA
DEFB 04H 04
Word index 04H = "DURING".
4DBB
DEFB 83H 83
Word index 03H = "WRITE".

Error Code 0FH - WRITE FAULT ON DISK DRIVE (DOS Error 0EH)

4DBC
DEFB 03H 03
Entry 15: Word index 03H ="WRITE".
4DBD
DEFB 32H 32
Word index 32H = "FAULT".
4DBE
DEFB 19H 19
Word index 19H = "ON".
4DBF
DEFB 17H 17
Word index 17H = "DISK".
4DC0
DEFB 98H 98
Word index 18H = "DRIVE".

Error Code 10H - WRITE PROTECTED DISKETTE (DOS Error 0FH)

4DC1
DEFB 03H 03
Entry 16: Word index 03H ="WRITE".
4DC2
DEFB 46H 46
Word index 46H = "PROTECTED".
4DC3
DEFB C4H C4
Word index 44H = "DISKETTE".

Error Code 11H - DEVICE NOT AVAILABLE (DOS Error 10H)

4DC4
DEFB 15H 15
Entry 17: Word index 15H = "DEVICE".
4DC5
DEFB 12H 12
Word index 12H = "NOT".
4DC6
DEFB 96H 96
Word index 16H = "AVAILABLE".

Error Code 12H - DIRECTORY READ ERROR (DOS Error 11H)

4DC7
DEFB 07H 07
Entry 18: Word index 07H = "DIRECTORY".
4DC8
DEFB 02H 02
Word index 02H ="READ".
4DC9
DEFB 81H 81
Word index 01H ="ERROR".

Error Code 13H - DIRECTORY WRITE ERROR (DOS Error 12H)

4DCA
DEFB 07H 07
Entry 19: Word index 07H = "DIRECTORY".
4DCB
DEFB 03H 03
Word index 03H ="WRITE".
4DCC
DEFB 81H 81
Word index 01H ="ERROR".

Error Code 14H -ILLEGAL FILE NAME (DOS Error 13H)

4DCD
DEFB 06H 06
Entry 20: Word index 06H = "ILLEGAL".
4DCE
DEFB 05H 05
Word index 05H = "FILE".
4DCF
DEFB 89H 89
Word index 09H = "NAME".

Error Code 15H - TRACK # TOO HIGH (DOS Error 14H)

4DD0
DEFB 34H 34
Entry 21: Word index 34H = "TRACK".
4DD1
DEFB 1EH 1E
Word index 1EH = "#".
4DD2
DEFB 24H 24
Word index 24H = "TOO".
4DD3
DEFB AFH AF
Word index 2FH = "HIGH".

Error Code 16H - ILLEGAL FUNCTION UNDER DOS-CALL (DOS Error 15H)

4DD4
DEFB 06H 06
Entry 22: Word index 06H = "ILLEGAL".
4DD5
DEFB 47H 47
Word index 47H = "FUNCTION".
4DD6
DEFB 37H 37
Word index 37H = "UNDER".
4DD7
DEFB C5H C5
Word index 45H = "DOS-CALL".

Error Code 17H - UNDEFINED ERROR CODE (DOS Error 16H)

4DD8
DEFB 49H 49
Entry 23: Word index 49H = "UNDEFINED".
4DD9
DEFB 01H 01
Word index 01H ="ERROR".
4DDA
DEFB A9H A9
Word index 29H = "CODE".

Error Code 18H - UNDEFINED ERROR CODE (DOS Error 17H)

4DDB
DEFB 49H 49
Entry 24: Word index 49H = "UNDEFINED".
4DDC
DEFB 01H 01
Word index 01H ="ERROR".
4DDD
DEFB A9H A9
Word index 29H = "CODE".

Error Code 19H - FILE NOT IN DIRECTORY (DOS Error 18H)

4DDE
DEFB 05H 05
Entry 25: Word index 05H = "FILE".
4DDF
DEFB 12H 12
Word index 12H = "NOT".
4DE0
DEFB 1AH 1A
Word index 1AH = "IN".
4DE1
DEFB 87H 87
Word index 07H = "DIRECTORY".

Error Code 1AH - FILE ACCESS DENIED (DOS Error 19H)

4DE2
DEFB 05H 05
Entry 26: Word index 05H = "FILE".
4DE3
DEFB 3EH 3E
Word index 3EH = "ACCESS".
4DE4
DEFB BDH BD
Word index 3DH = "DENIED".

Error Code 1BH - DIRECTORY SPACE FULL (DOS Error 1AH)

4DE5
DEFB 07H 07
Entry 27: Word index 07H = "DIRECTORY".
4DE6
DEFB 0AH 0A
Word index 0AH = "SPACE".
4DE7
DEFB 94H 94
Word index 14H = "FULL".

Error Code 1CH - DISKETTE SPACE FULL (DOS Error 1BH)

4DE8
DEFB 44H 44
Entry 28: Word index 44H = "DISKETTE".
4DE9
DEFB 0AH 0A
Word index 0AH = "SPACE".
4DEA
DEFB 94H 94
Word index 14H = "FULL".

Error Code 1DH - END OF FILE ENCOUNTERED (DOS Error 1CH)

4DEB
DEFB 20H 20
Entry 29: Word index 20H = "END".
4DEC
DEFB 1CH 1C
Word index 1CH = "OF".
4DED
DEFB 85H 85
Word index 05H = "FILE".
4DEE
DEFB CBH CB
Word index 4BH = "ENCOUNTERED".

Error Code 1EH - PAST END OF FILE (DOS Error 1DH)

4DEF
DEFB 2EH 2E
Entry 30: Word index 2EH = "PAST".
4DF0
DEFB 20H 20
Word index 20H = "END".
4DF1
DEFB 1CH 1C
Word index 1CH = "OF".
4DF2
DEFB 85H 85
Word index 05H = "FILE".

Error Code 1FH - DIRECTORY FULL. CAN'T EXTEND FILE (DOS ERROR 1EH)

4DF3
DEFB 07H 07
Entry 31: Word index 07H = "DIRECTORY".
4DF4
DEFB 14H 14
Word index 14H = "FULL".
4DF5
DEFB 1DH 1D
Word index 1DH = ". ".
4DF6
DEFB 36H 36
Word index 36H = "CAN'T".
4DF7
DEFB 3FH 3F
Word index 3FH = "EXTEND".
4DF8
DEFB 85H 85
Word index 05H = "FILE".

Error Code 20H - PROGRAM NOT FOUND (DOS Error 1FH)

4DF9
DEFB 42H 42
Entry 32: Word index 42H = "PROGRAM".
4DFA
DEFB 12H 12
Word index 12H = "NOT".
4DFB
DEFB B1H B1
Word index 31H = "FOUND".

Error Code 21H - ILLEGAL OR MISSING DRIVE # (DOS Error 20H)

4DFC
DEFB 06H 06
Entry 33: Word index 06H = "ILLEGAL".
4DFD
DEFB 1BH 1B
Word index 1BH = "OR".
4DFE
DEFB 57H 57
Word index 57H = "MISSING".
4DFF
DEFB 18H 18
Word index 18H = "DRIVE".
4E00
DEFB 9EH 9E
Word index 1EH = "#".

Error Code 22H - NO DEVICE SPACE AVAILABLE (DOS Error 21H)

4E01
DEFB 13H 13
Entry 34: Word index 13H = "NO".
4E02
DEFB 15H 15
Word index 15H = "DEVICE".
4E03
DEFB 0AH 0A
Word index 0AH = "SPACE".
4E04
DEFB 96H 96
Word index 16H = "AVAILABLE".

Error Code 23H - LOAD FILE FORMAT ERROR (DOS Error 22H)

4E05
DEFB 27H 27
Entry 35: Word index 27H = "LOAD".
4E06
DEFB 05H 05
Word index 05H = "FILE".
4E07
DEFB 41H 41
Word index 41H = "FORMAT".
4E08
DEFB 81H 81
Word index 01H ="ERROR".

Error Code 24H - MEMORY FAULT (DOS Error 23H)

4E09
DEFB 40H 40
Entry 36: Word index 40H = "MEMORY".
4E0A
DEFB B2H B2
Word index 32H = "FAULT".

Error Code 25H - TRIED TO LOAD READ ONLY MEMORY (DOS Error 24H)

4E0B
DEFB 11H 11
Entry 37: Word index 11H = "TRIED TO".
4E0C
DEFB 27H 27
Word index 27H = "LOAD".
4E0D
DEFB 02H 02
Word index 02H = "READ".
4E0E
DEFB 28H 28
Word index 28H = "ONLY".
4E0F
DEFB A1H A1
Word index 40H = "MEMORY".

Error Code 26H - ILLEGAL ACCESS TRIED TO PROTECTED FILE (DOS Error 25H)

4E10
DEFB 06H 06
Entry 38: Word index 06H = "ILLEGAL".
4E11
DEFB 3EH 3E
Word index 3EH = "ACCESS".
4E12
DEFB 11H 11
Word index 11H = "TRIED TO".
4E13
DEFB 46H 46
Word index 46H = "PROTECTED".
4E14
DEFB 85H 85
Word index 05H = "FILE".

Error Code 27H - FILE NOT OPEN (DOS Error 26H)

4E15
DEFB 05H 05
Entry 39: Word index 05H = "FILE".
4E16
DEFB 12H 12
Word index 12H = "NOT".
4E17
DEFB A6H A6
Word index 26H = "OPEN".

Error Code 28H - ILLEGAL INITIALIZATION DATA ON SYSTEM DISKETTE (DOS Error 27H)

4E18
DEFB 06H 06
Entry 40: Word index 06H = "ILLEGAL".
4E19
DEFB 4AH 4A
Word index 4AH = "INITIALIZATION".
4E1A
DEFB 0BH 0B
Word index 0BH = "DATA".
4E1B
DEFB 19H 19
Word index 19H = "ON".
4E1C
DEFB 3CH 3C
Word index 3CH = "SYSTEM".
4E1D
DEFB C4H C4
Word index 44H = "DISKETTE".

Error Code 29H - ILLEGAL DISKETTE TRACK COUNT (DOS Error 28H)

4E1E
DEFB 06H 06
Entry 41: Word index 06H = "ILLEGAL".
4E1F
DEFB 44H 44
Word index 44H = "DISKETTE".
4E20
DEFB 34H 34
Word index 34H = "TRACK".
4E21
DEFB B5H B5
Word index 35H = "COUNT".

Error Code 2AH - ILLEGAL LOGICAL FILE # (DOS Error 29H)

4E22
DEFB 06H 06
Entry 42: Word index 06H = "ILLEGAL".
4E23
DEFB 43H 43
Word index 43H = "LOGICAL".
4E24
DEFB 05H 05
Word index 05H = "FILE".
4E25
DEFB 9EH 9E
Word index 1EH = "#".

Error Code 2BH - ILLEGAL DOS FUNCTION (DOS Error 2AH)

4E26
DEFB 06H 06
Entry 43: Word index 06H = "ILLEGAL".
4E27
DEFB 21H 21
Word index 21H = "DOS".
4E28
DEFB C7H C7
Word index 47H = "FUNCTION".

Error Code 2CH - ILLEGAL FUNCTION UNDER CHAINING (DOS Error 2BH)

4E29
DEFB 06H 06
Entry 44: Word index 06H = "ILLEGAL".
4E2A
DEFB 47H 47
Word index 47H = "FUNCTION".
4E2B
DEFB 37H 37
Word index 37H = "UNDER".
4E2C
DEFB C8H C8
Word index 48H = "CHAINING".

Error Code 2DH - BAD DIRECTORY DATA (DOS Error 2CH)

4E2D
DEFB 22H 22
Entry 45: Word index 22H = "BAD".
4E2E
DEFB 07H 07
Word index 07H = "DIRECTORY".
4E2F
DEFB 8BH 8B
Word index 0BH = "DATA".

Error Code 2EH - BAD FCB DATA (DOS Error 2DH)

4E30
DEFB 22H 22
Entry 46: Word index 22H = "BAD".
4E31
DEFB 23H 23
Word index 23H = "FCB".
4E32
DEFB 8BH 8B
Word index 0BH = "DATA".

Error Code 2FH - SYSTEM PROGRAM NOT FOUND (DOS Error 2EH)

4E33
DEFB 3CH 3C
Entry 47: Word index 3CH = "SYSTEM".
4E34
DEFB 42H 42
Word index 42H = "PROGRAM".
4E35
DEFB 12H 12
Word index 12H = "NOT".
4E36
DEFB B1H B1
Word index 31H = "FOUND".

Error Code 30H - BAD PARAMETER(S) (DOS Error 2FH)

4E37
DEFB 22H 22
Entry 48: Word index 22H = "BAD".
4E38
DEFB CDH CD
Word index 4DH = "PARAMETERS)".

Error Code 31H - BAD FILESPEC (DOS Error 30H)

4E39
DEFB 22H 22
Entry 49: Word index 22H = "BAD".
4E3A
DEFB CEH CE
Word index 4EH = "FILESPEC".

Error Code 32H - WRONG DISKETTE RECORD TYPE (DOS Error 31H)

4E3B
DEFB 38H 38
Entry 50: Word index 38H = "WRONG".
4E3C
DEFB 44H 44
Word index 44H = "DISKETTE".
4E3D
DEFB 08H 08
Word index 08H = "RECORD".
4E3E
DEFB ABH AB
Word index 2BH = "TYPE".

Error Code 33H - BOOT READ ERROR (DOS Error 32H)

4E3F
DEFB 2AH 2A
Entry 51: Word index 2AH = "BOOT".
4E40
DEFB 02H 02
Word index 02H = "READ".
4E41
DEFB 81H 81
Word index 01H = "ERROR".

Error Code 34H - DOS FATAL ERROR (DOS Error 33H)

4E42
DEFB 21H 21
Entry 52: Word index 21H = "DOS".
4E43
DEFB 39H 39
Word index 39H = "FATAL".
4E44
DEFB 81H 81
Word index 01H = "ERROR".

Error Code 35H - ILLEGAL KEYWORD OR SEPARATOR OR TERMINATOR (DOS Error 34H)

4E45
DEFB 06H 06
Entry 53: Word index 06H = "ILLEGAL".
4E46
DEFB 50H 50
Word index 50H = "KEYWORD".
4E47
DEFB 1BH 1B
Word index 1BH = "OR".
4E48
DEFB 51H 51
Word index 51H = "SEPARATOR".
4E49
DEFB 1BH 1B
Word index 1BH = "OR".
4E4A
DEFB D2H D2
Word index 52H = "TERMINATOR".

Error Code 36H - FILE ALREADY EXISTS (DOS Error 35H)

4E4B
DEFB 05H 05
Entry 54: Word index 05H = "FILE".
4E4C
DEFB 4FH 4F
Word index 4FH = "ALREADY".
4E4D
DEFB BBH BB
Word index 3BH = "EXISTS".

Error Code 37H - COMMAND TOO LONG (DOS Error 36H)

4E4E
DEFB 55H 55
Entry 55: Word index 55H = "COMMAND".
4E4F
DEFB 24H 24
Word index 24H = "TOO".
4E50
DEFB ADH AD
Word index 2DH = "LONG".

Error Code 38H - DISKETTE ACCESS DENIED (DOS Error 37H)

4E51
DEFB 44H 44
Entry 56: Word index 44H = "DISKETTE".
4E52
DEFB 3EH 3E
Word index 3EH = "ACCESS".
4E53
DEFB BDH BD
Word index 3DH = "DENIED".

Error Code 39H - ILLEGAL MINI DOS FUNCTION (DOS Error 38H)

4E54
DEFB 06H 06
Entry 57: Word index 06H = "ILLEGAL".
4E55
DEFB 2CH 2C
Word index 2CH = "MINI".
4E56
DEFB 21H 21
Word index 21H = "DOS".
4E57
DEFB C7H C7
Word index 47H = "FUNCTION".

Error Code 3AH - OPERATOR/PROGRAM/PARAMETER REQUIRE FUNCTION TERMINATION (DOS Error 39H)

4E58
DEFB 56H 56
Entry 58: Word index 56H = "OPERATOR/PROGRAM/PARAMETER".
4E59
DEFB 53H 53
Word index 53H = "REQUIRE".
4E5A
DEFB 47H 47
Word index 47H = "FUNCTION".
4E5B
DEFB D4H D4
Word index 54H = "TERMINATION".

Error Code 3BH - DATA COMPARE MISMATCH (DOS Error 3AH)

4E5C
DEFB 0BH 0B
Entry 59: Word index 0BH = "DATA".
4E5D
DEFB 58H 58
Word index 58H = "COMPARE".
4E5E
DEFB D9H D9
Word index 59H = "MISMATCH".

Error Code 3CH - INSUFFICIENT MEMORY (DOS Error 3BH)

4E5F
DEFB 5AH 5A
Entry 60: Word index 5AH = "INSUFFICIENT".
4E60
DEFB C0H C0
Word index 40H = "MEMORY".

Error Code 3DH - INCOMPATIBLE DRIVES OR DISKETTES (DOS Error 3CH)

4E61
DEFB 12H 12
Entry 61: Word index 12H = "NOT".
4E62
DEFB 5BH 5B
Word index 5BH = "COMPATIBLE".
4E63
DEFB 5CH 5C
Word index 5CH = "DRIVES".
4E64
DEFB 1BH 1B
Word index 1BH = "OR".
4E65
DEFB DDH DD
Word index 5DH = "DISKETTES".

Error Code 3EH - ASE=N ATTRIBUTE. CAN'T EXTEND FILE (DOS Error 3DH)

4E66
DEFB 3AH 3A
Entry 62: Word index 3AH = "ASE=N".
4E67
DEFB 5EH 5E
Word index 5EH = "ATTRIBUTE".
4E68
DEFB 1DH 1D
Word index 1DH = ". ".
4E69
DEFB 36H 36
Word index 36H = "CAN'T".
4E6A
DEFB 3FH 3F
Word index 3FH = "EXTEND".
4E6B
DEFB 85H 85
Word index 05H = "FILE".

Error Code 3FH - CAN'T EXTEND FILE VIA READ (DOS Error 3EH)

4E6C
DEFB 36H 36
Entry 63: Word index 36H = "CAN'T".
4E6D
DEFB 3FH 3F
Word index 3FH = "EXTEND".
4E6E
DEFB 05H 05
Word index 05H = "FILE".
4E6F
DEFB 25H 25
Word index 25H = "VIA".
4E70
DEFB 82H 82
Word index 02H = "READ".

Padding bytes between error message table and word lookup table.

4E71
DEFB 00H 00
Unused padding byte.
4E72
DEFB 00H 00
Unused padding byte.
4E73
DEFB 00H 00
Unused padding byte.
4E74
DEFB 00H 00
Unused padding byte.

4E75H - Error Message Storage Area

4E75-4E79
DEFM 'ERROR'
Error Word Lookup 01H
4E7A-4E7D
DEFM 'READ'
Error Word Lookup 02H
4E7E-4E82
DEFM 'WRITE'
Error Word Lookup 03H
4E83-4E88
DEFM 'DURING'
Error Word Lookup 04H
4E89-4E8C
DEFM 'FILE'
Error Word Lookup 05H
4E8D-4E93
DEFM 'ILLEGAL'
Error Word Lookup 06H
4E94-4E9B
DEFM 'DIRECTORY'
Error Word Lookup 07H
4E9C-4EA2
DEFM 'RECORD'
Error Word Lookup 08H
4EA3-4EA6
DEFM 'NAME'
Error Word Lookup 09H
4EA7-4EAB
DEFM 'SPACE'
Error Word Lookup 0AH
4EAC-4EAF
DEFM 'DATA'
Error Word Lookup 0BH
4EB0-4EB5
DEFM 'PARITY'
Error Word Lookup 0CH
4EB6-4EB9
DEFM 'LOST'
Error Word Lookup 0DH
4EBA-4EBD
DEFM 'SEEK'
Error Word Lookup 0EH
4EBE-4EC0
DEFM 'GAT'
Error Word Lookup 0FH
4EC1-4EC3
DEFM 'HIT'
Error Word Lookup 10H
4EC4-4ECB
DEFM 'TRIED TO'
Error Word Lookup 11H
4ECC-4ECE
DEFM 'NOT'
Error Word Lookup 12H
4ECF-4ED0
DEFM 'NO'
Error Word Lookup 13H
4ED1-4ED4
DEFM 'FULL'
Error Word Lookup 14H
4ED5-4EDA
DEFM 'DEVICE'
Error Word Lookup 15H
4EDB-4EE3
DEFM 'AVAILABLE'
Error Word Lookup 16H
4EE4-4EE7
DEFM 'DISK'
Error Word Lookup 17H
4EE8-4EEC
DEFM 'DRIVE'
Error Word Lookup 18H
4EED-4EEE
DEFM 'ON'
Error Word Lookup 19H
4EEF-4EF0
DEFM 'IN'
Error Word Lookup 1AH
4EF1-4EF2
DEFM 'OR'
Error Word Lookup 1BH
4EF3-4EF4
DEFM 'OF'
Error Word Lookup 1CH
4EF5-4EF6
DEFM '. '
Error Word Lookup 1DH
4EF7-4EF7
DEFM '#'
Error Word Lookup 1EH
4EF8-4EFA
DEFM 'OUT'
Error Word Lookup 1FH
4EFB-4EFD
DEFM 'END'
Error Word Lookup 20H
4EFE-4F00
DEFM 'DOS'
Error Word Lookup 21H
4F01-4F03
DEFM 'BAD'
Error Word Lookup 22H
4F04-4F06
DEFM 'FCB'
Error Word Lookup 23H
4F07-4F09
DEFM 'TOO'
Error Word Lookup 24H
4F0A-4F0C
DEFM 'VIA'
Error Word Lookup 25H
4F0D-4F10
DEFM 'OPEN'
Error Word Lookup 26H
4F11-4F14
DEFM 'LOAD'
Error Word Lookup 27H
4F15-4F18
DEFM 'ONLY'
Error Word Lookup 28H
4F19-4F1C
DEFM 'CODE'
Error Word Lookup 29H
4F1D-4F20
DEFM 'BOOT'
Error Word Lookup 2AH
4F21-4F24
DEFM 'TYPE'
Error Word Lookup 2BH
4F25-4F28
DEFM 'MINI'
Error Word Lookup 2CH
4F29-4F2C
DEFM 'LONG'
Error Word Lookup 2DH
4F2D-4F30
DEFM 'PAST'
Error Word Lookup 2EH
4F31-4F34
DEFM 'HIGH'
Error Word Lookup 2FH
4F35-4F3A
DEFM 'HEADER'
Error Word Lookup 30H
4F3B-4F3F
DEFM 'FOUND'
Error Word Lookup 31H
4F40-4F44
DEFM 'FAULT'
Error Word Lookup 32H
4F45-4F49
DEFM 'RANGE'
Error Word Lookup 33H
4F4A-4F4E
DEFM 'TRACK'
Error Word Lookup 34H
4F4F-4F53
DEFM 'COUNT'
Error Word Lookup 35H
4F54-4F58
DEFM 'CAN'T'
Error Word Lookup 36H
4F59-4F5D
DEFM 'UNDER'
Error Word Lookup 37H
4F5E-4F62
DEFM 'WRONG'
Error Word Lookup 38H
4F63-4F67
DEFM 'FATAL'
Error Word Lookup 39H
4F68-4F6C
DEFM 'ASE=N'
Error Word Lookup 3AH
4F6D-4F72
DEFM 'EXISTS'
Error Word Lookup 3BH
4F73-4F78
DEFM 'SYSTEM'
Error Word Lookup 3CH
4F79-4F7D
DEFM 'DENIED'
Error Word Lookup 3DH
4F7E-4F84
DEFM 'ACCESS'
Error Word Lookup 3EH
4F85-4F8A
DEFM 'EXTEND'
Error Word Lookup 3FH
4F8B-4F90
DEFM 'MEMORY'
Error Word Lookup 40H
4F91-4F96
DEFM 'FORMAT'
Error Word Lookup 41H
4F97-4F9D
DEFM 'PROGRAM'
Error Word Lookup 42H
4F9E-4FA4
DEFM 'LOGICAL'
Error Word Lookup 43H
4FA5-4FAC
DEFM 'DISKETTE'
Error Word Lookup 44H
4FAD-4FB4
DEFM 'DOS-CALL'
Error Word Lookup 45H
4FB5-4FBD
DEFM 'PROTECTED'
Error Word Lookup 46H
4FBE-4FC5
DEFM 'FUNCTION'
Error Word Lookup 47H
4FC6-4FCD
DEFM 'CHAINING'
Error Word Lookup 48H
4FCE-4FD6
DEFM 'UNDEFINED'
Error Word Lookup 49H
4FD7-4FE4
DEFM 'INITIALIZATION'
Error Word Lookup 4AH
4FE5-4FEF
DEFM 'ENCOUNTERED'
Error Word Lookup 4BH
4FF0-4FFD
DEFM 'LOCKED/DELETED'
Error Word Lookup 4CH
4FFE-5009
DEFM 'PARAMETERS)'
Error Word Lookup 4DH
500A-5011
DEFM 'FILESPEC'
Error Word Lookup 4EH
5012-5018
DEFM 'ALREADY'
Error Word Lookup 4FH
5019-501F
DEFM 'KEYWORD'
Error Word Lookup 50H
5020-5028
DEFM 'SEPARATOR'
Error Word Lookup 51H
5029-5032
DEFM 'TERMINATOR'
Error Word Lookup 52H
5033-5039
DEFM 'REQUIRE'
Error Word Lookup 53H
503A-5044
DEFM 'TERMINATION'
Error Word Lookup 54H
5045-504B
DEFM 'COMMAND'
Error Word Lookup 55H
504C-5065
DEFM 'OPERATOR/PROGRAM/PARAMETER'
Error Word Lookup 56H
5066-506C
DEFM 'MISSING'
Error Word Lookup 57H
506D-5073
DEFM 'COMPARE'
Error Word Lookup 58H
5074-507B
DEFM 'MISMATCH'
Error Word Lookup 59H
507C-5087
DEFM 'INSUFFICIENT'
Error Word Lookup 5AH
5088-5092
DEFM 'COMPATIBLE'
Error Word Lookup 5BH
5093-5098
DEFM 'DRIVES'
Error Word Lookup 5CH
5099-50A2
DEFM 'DISKETTES'
Error Word Lookup 5DH
50A3-50AB
DEFM 'ATTRIBUTE'
Error Word Lookup 5EH
50AC-END
NOP
Filler