TRS-80 DOS - TRSDOS v1.3 - SYS04/SYS Disassembled

Program Overview

SYS4/SYS is the TRSDOS 1.3 error handler overlay. It is loaded at 4E00H by the SYS0 resident ERROR entry point at 4409H (via DO 00,4) whenever a DOS or BASIC operation posts an error code on the stack. The overlay decodes the error code, prints either a short numeric message ("* * ERROR nn * *") or a detailed word-based English message, then either returns to the DOS prompt (via ABORT at 4030H) or reboots (via JP 0000H), depending on bit 7 of the error code.

On entry to SYS4, Register A holds the error code with meaning encoded in three fields: bits 0–5 are the numeric error code (0–63), bit 6 selects detailed (1) versus short (0) message format, and bit 7 selects return-to-calling-program (1) versus return-to-DOS (0). If the system's DO-file chaining flag (DOFLAG at 4CFDH) is active, SYS4 first aborts the DO file — clearing DOFLAG, forcing return-to-DOS by masking bit 7, restoring the keyboard driver vector from GOSAVE, and resetting the end-of-memory pointer from the backup — before proceeding to the normal error-display path.

The overlay contains two parallel lookup tables that together implement the error messages. TABLE2 at 4E9BH is the word dictionary: 66 English words (NO, ERROR, FOUND, CRC, DURING, READ, SEEK, LOST, DATA, RECORD, NOT, ATTEMPT, SYSTEM, DISK, DRIVE, READY, WRITE, FAULT, ON, PROTECTED, ILLEGAL, LOGICAL, FILE, NUMBER, DIRECTORY, IMPROPER, NAME, GAT, HIT, IN, ACCESS, DENIED, DUE TO, PASSWORD, PROTECTION, SPACE, FULL, PAST EOF, OUTSIDE OF, LIMITS, MORE, EXTENTS, OPEN, PROGRAM, AVAILABLE, USE, AS A, MEMORY, LOAD, I/O, UNOPEN, INVALID, COMMAND PARAMETER, REQUIRED, ALREADY, SECTOR, UNDEFINED ERROR CODE, TIME OUT, RS-232, ACTIVE, RECEIVE, TRANSMIT, NON, TO, HARDWARE, LENGTH) each with bit 7 set on its first character to mark word boundaries. TABLE1 at 502BH is the per-error word-index list: each error entry starts with a byte whose bit 7 is set, followed by zero or more continuation bytes, each byte naming a word number from TABLE2. Errors 7, 33, and 36 are unfilled slots that display the literal UNDEFINED ERROR CODE text, and errors 43–63 are filled from 50D1H to 50E5H with a repeating UNDFN+80H pattern.

Memory Map

RangeSizeContents
4E00H–4E05H6 bytesEntry: DOFLAG check and early-exit branch
4E06H–4E19H20 bytesDO-file-active cleanup path (clears DOFLAG, restores keyboard driver vector, resets MEMEND)
4E1AH–4E2EH21 bytesMain dispatch: save registers, mask error code, branch to DETAIL (long) or BINDEC (short)
4E2FH–4E3CH14 bytesDETAIL: locate start-of-error entry in TABLE1 and count down to the target error
4E3DH–4E4BH15 bytesSMALL0: read next word number, then scan TABLE2 for start-of-word and count down to the target word
4E4CH–4E64H25 bytesGOTWD: emit letters of target word, then inter-word space, then loop to next word or finish
4E65H–4E75H17 bytesERROUT: emit carriage return, restore registers, and branch to reboot or ABORT via DONE self-modifying JP
4E76H–4E89H20 bytesBINDEC: binary-to-decimal conversion for short "* * ERROR nn * *" message, then JP PRINT
4E8AH–4E99H16 bytesShort-message text buffer: "* * ERROR 00 * *" + 03H terminator (BINDEC patches the "00" into X1)
4E9BH–502AH400 bytesTABLE2: word dictionary (66 words, each word's first character has bit 7 set as start marker)
502BH–50E5H187 bytesTABLE1: per-error word-index list (error codes 0–63; bit 7 set on each error's first byte)
50E6H1 byteDummy stop byte (80H) at end of TABLE1

Complete Variable List

SYS4 uses one self-modifying code location within its own overlay area and references five external workspace variables from SYS0 or the Model III ROM BASIC workspace.

AddressLabelDescription
4E71HDONE+1Self-modifying: operand byte of the JP NZ,nnnnH at 4E70H (DONE). Written by LD (4E71H),HL at 4E1CH with the return address popped from the stack (the caller of the error handler). When bit 7 of the error code is set, control jumps back to this patched address instead of to DOS.
4E94HX1Within-overlay data: the "00" bytes of the short-message text "* * ERROR 00 * *" at 4E8AH. BINDEC writes the tens digit at 4E94H and the ones digit at 4E95H using INC (HL) / LD (HL),A.
4015HKDCBExternal (SYS0-resident): keyboard Device Control Block base. SYS4 writes a restored driver address to KDCB+1 (4016H, the JP operand slot) to re-enable normal keyboard handling after a DO-file is aborted by an error.
4411HMEMEND (per SYS4 source)External (SYS0-resident): active end-of-memory pointer (2 bytes). Reset from MEM2 when SYS4 aborts a DO file, so that any DO-command memory allocations are released. See Cross-references note.
4415HMEM2 (per SYS4 source)External (SYS0-resident): saved/backup end-of-memory pointer (2 bytes). The canonical end-of-memory value, copied to MEMEND (4411H) by SYS4 during DO-file error cleanup. See Cross-references note.
42B1HGOSAVEExternal (SYS0-resident): saved keyboard driver address (2 bytes). Loaded into HL and stored at KDCB+1 (4016H) to restore the normal keyboard handler after a DO-file is aborted.
4CFDHDOFLAGExternal (SYS0-resident): DO-file active flag (1 byte). Non-zero when a DO chaining file is executing; zero otherwise. SYS4 tests it on entry and, if non-zero, clears it and runs the DO-file cleanup path.

Major Routine List

AddressLabelDescription / Entry & Exit
4E00HSTARTOverlay entry. Entry: A = error code (bits 0–5 = code, bit 6 = detail flag, bit 7 = return-to-caller flag); stack top = error return address. Exit: falls through to START0 or (if DOFLAG was set) continues after restoring keyboard driver and MEMEND.
4E1AHSTART0Main dispatch entry (reached with or without DO-file cleanup). Entry: A = error code; stack top = return address. Exit: falls through to DETAIL or BINDEC depending on bit 6.
4E2FHDETAILDetailed (word-based) error message printer. Entry: C = error number (incremented by 1 for the DEC loop). Exit: falls through to ERROUT after emitting all words.
4E33HSMLP1Inner loop of DETAIL: scan TABLE1 forward for the next bit-7-set byte (start of an error entry).
4E37HSMLP2Skip-forward helper for SMLP1.
4E3AHGOTERFound the start of an error entry in TABLE1; decrement C and either stop or continue.
4E3DHSMALL0Read next word number from TABLE1, mask bit 7, then locate that word in TABLE2. Entry: HL → current byte in TABLE1 (a word number, possibly with bit 7 set).
4E45HSMLP3Inner loop of SMALL0: scan TABLE2 forward for the next bit-7-set byte (start of a word).
4E49HSMLP4Skip-forward helper for SMLP3.
4E4CHGOTWDFound the start of a word in TABLE2; decrement C and either stop or continue scanning.
4E4FHSMLP5Letter-emit loop: strip bit 7, call DSP, advance HL, stop when bit 7 marks the next word.
4E65HERROUTCommon exit: emit CR, restore AF/BC/DE/HL, test bit 7 of original error code, then DONE (JP NZ patched address) or JP ABORT.
4E70HDONESelf-modifying return instruction (JP NZ,0000H). Operand is patched at 4E1CH with the caller's address.
4E76HBINDECBinary-to-decimal converter for the short-form "* * ERROR nn * *" message. Entry: A = error code (0–63). Exit: JP PRINT (ROM routine) which emits the patched message buffer and returns via stack.
4E7BHBIN1Tens-digit accumulation loop for BINDEC.

DOS Entry Points Used

AddressLabelPurpose
4030HABORTSYS0 return-to-DOS-prompt vector. Jumped to at 4E73H to abort the current operation and redisplay the TRSDOS prompt.
42B1HGOSAVESYS0 saved keyboard driver address. Read at 4E0EH during DO-file cleanup to restore KDCB+1.
4411HMEMENDSYS0 active end-of-memory pointer. Written at 4E17H during DO-file cleanup. (Label per SYS4 source.)
4415HMEM2SYS0 saved end-of-memory pointer. Read at 4E14H during DO-file cleanup. (Label per SYS4 source.)
4CFDHDOFLAGSYS0 DO-file active flag. Read at 4E00H, cleared at 4E07H.
4015HKDCBSYS0 keyboard DCB base. KDCB+1 (4016H) is written at 4E11H during DO-file cleanup to restore the normal keyboard driver vector.

Cross-References and Analysis Notes

MEM2 / MEMEND label discrepancy (4411H vs 4415H). The original Tandy/LSI SYS4 source equates MEMEND EQU 4411H and MEM2 EQU 4415H, and the SYS4 cleanup sequence at 4E14H–4E19H reads a "real end of memory" value from 4415H (MEM2) and stores it into 4411H (MEMEND) to reset the active memory boundary. The existing site-wide RAM-addresses page, however, currently labels 4411H as MEM2 and 4415H as SSYS10. The SYS4 source labels have been used in this disassembly because the source is authoritative for this overlay's own equates, but the site-wide 4411H / 4415H entries should be reviewed and reconciled against the source — either by swapping the labels (if the SYS4 source reflects the actual TRSDOS 1.3 convention) or by adding a cross-reference note (if the existing labels reflect a later DOS revision's usage).

TABLE1 start address. LD HL,502BH at 4E30H identifies TABLE1 at 502BH, where the first byte (81H = NO+80H) marks the start of error code 0's entry. This is verified by walking the binary: each bit-7-set byte in 502BH–50E5H corresponds to one error code (64 entries total, with errors 7, 33, 36, and 43–63 being unfilled UNDFN slots). The existing disassembly page labels the first row at 502CH; the correct first-row address is 502BH.

Error code to label mapping. The SYS4 source defines 39 distinct error labels (EGOOD, ECRC, EDNS, ELOSTD, ESKER, ERNF, EHFLT, EDOOR, EILIO, ERCPM, ERICP, ETIME, ENSD, EWFLT, EWPROT, ELFN, EDRE, EDWE, EBFN, EADRE, EADWE, EFRE, EFWE, EFNF, EFAD, EDSF, EDSFL, EEOF, ENRF, ENMEX, EPNF, EBDRV, ELFFE, EMFLT, EFNYO, EDATA, EFAT, EFAO, EWLRL) exported via GLOBAL in SYS0.GBL for use by the rest of the DOS. Error codes 7, 33, and 36 are explicit placeholders (X: DEFL X+1 / X: DEFL X+2 advancing the counter) with no symbolic label; error 37 is an unlabeled duplicate of error 25 (FILE ACCESS DENIED). Errors 43–63 share a repeating UNDFN+80H filler pattern emitted by DEFB 64-X%UNDFN+80H.

Self-modifying DONE. The JP NZ,0000H instruction at 4E70H has its operand (4E71H–4E72H) patched at 4E1CH with the return address recovered from the caller's stack. This is how SYS4 returns to the calling program (when error code bit 7 is set) rather than to DOS — by rewriting its own return instruction on the fly.

4E00H - START - Entry into SYS04/SYS

 
ORG 4E00H
4E00START
LD A,(4CFDH)LD A,(DOFLAG)
Fetch the value stored at memory location 4CFDH and put it into Register A.
NOTE: 4CFDH is where the "DO" (chaining) active flag is kept. 0=Not active, and 255=active.
Original Source Code Comment: GET THE 'DO FILE' FLAG
4E03
OR A
Since a LD command does not set any FLAGS, Set FLAGS based on the contents of Register A.
Original Source Code Comment: WE DOING A DO FILE?
4E04
If the Z FLAG (Zero) is set, then "DO" is not active, so JUMP to 4E1AH.
Original Source Code Comment: NO, CONTINUE

If we are here, then "DO" was active when the error struck, so the below code deals with "DO" being active.

4E06
XOR A
Set Register A to ZERO and clear all Flags.
Original Source Code Comment: YES, TURN THE DO FILE OFF
4E07
LD (4CFDH),ALD (DOFLAG),A
Disable "DOS" by storing a 0 (i.e., the value held in Register A) into the memory location 4CFDH.
NOTE: 4CFDH is where the "DO" (chaining) active flag is kept. 0=Not active, and 255=active.
4E0A
POP AF
Restore Register Pair AF from the top of the STACK to get the applicable error code.
Original Source Code Comment: GET THE ERROR CODE
4E0B
AND 7FH
MASK the value of Register A against 7FH (0111 1111). This has the effect of turning off bits 7, leaving only bits 6, 5, 4, 3, 2, 1, 0 active, which will indicate that any routine exit is to exit to DOS.
Original Source Code Comment: MASK OFF HIGH BIT. RETURN TO DOS FLAG
4E0D
PUSH AF
Save the masked error code (i.e., Register AF) to the top of the stack.
Original Source Code Comment: BACK ON THE STACK
4E0E
LD HL,(42B1H)LD HL,(GOSAVE)
Fetch the value stored at memory location 42B1H (i.e., the keyboard driver address) and put it into Register HL.
Original Source Code Comment: GET THE KEYBOARD ADDR
4E11
LD (4016H),HLLD (KDCB+1),HL
Store the value held in Register HL (i.e., the saved keyboard driver address) into the memory location 4016H (i.e., the two byte keyboard driver vector).
Original Source Code Comment: AND RESTORE THE DRIVER ADDR
4E14
LD HL,(4415H)LD HL,(MEM2)
Fetch the value stored at memory location 4415H (i.e., a backup copy of high memory address a/k/a the end of physical memory) and put it into Register HL.
NOTE: 4415H is the storage location for the ADDRESS OF THE END OF PHYSICAL MEMORY.
Original Source Code Comment: GET THE REAL END OF MEMORY
4E17
LD (4411H),HLLD (MEMEND),HL
Store the value held in Register HL (the end of physical memory) into the memory location 4411H (i.e., the address of highest available memory location).
Original Source Code Comment: RESET THE END OF MEMORY

At this point, we don't care if "DO" was or was not active; so the routine continues..

4E1ASTART0
POP AF
Restore the error code Register Pair AF from the top of the STACK.
Original Source Code Comment: GET ERROR CODE
4E1B
EX (SP),HL
EXchange the value stored in Register Pair HL (the end of physical memory) with the value stored at the top of the STACK (i.e., the return address).
Original Source Code Comment: GET THE ERROR CALLER OFF THE STACK
4E1C
LD (4E71H),HLLD (DONE+1),HL
Store the value held in Register HL (i.e., the return address) into the memory location 4E71H (which is in the middle of a JP NZ,nnnnH opcode.
Original Source Code Comment: SAVE IT FOR EXIT
4E1F
PUSH DE
Save Register DE to the top of the stack.
Original Source Code Comment: ALL
4E20
PUSH BC
Save Register BC to the top of the stack.
Original Source Code Comment: THE
4E21
PUSH AF
Save Register AF to the top of the stack.
Original Source Code Comment: REGISTERS
4E22
LD B,A
LET Register B = Register A (i.e., the error code with bit 7 of the options cleared).
Original Source Code Comment: SAVE ERROR TEMP
4E23
AND 3FH
MASK the value of Register A against 3FH (0011 1111). This has the effect of turning off bits 7, 6, leaving only bits 5, 4, 3, 2, 1, 0 active, removing some more options from the error code.
Original Source Code Comment: MASK OFF OR'D VALUE
4E25
LD C,A
LET Register C = Register A (i.e., the error code with bits 7 and 6 of the options cleared). This leaves Register C holding the true error code.
Original Source Code Comment: PUT OR'D INTO C
4E26
BIT 6,B
Test Bit 6 of Register B (i.e., the error code with bit 7 of the options cleared). Bit 6 of an error code signifies whether to display the long error message or the short error message.
Original Source Code Comment: DETAILED?
4E28
If the NZ FLAG (Not Zero) is set then we set to display the LONG error message, so JUMP to 4E2FH.
Original Source Code Comment: IF YES GO
4E2A
GOSUB to 4E76H to display the SHORT error message.
Original Source Code Comment: CONVERT
4E2D
JUMP to 4E65H to display a carriage return, restore all registers, and check bit 7 to see if we need to reboot (not zero) or exit to the DOS PROMPT and jump there.
Original Source Code Comment: RET

4E2FH - DETAIL - Display LONG Error Message. On Entry, Register C has the pure (i.e., no option bits) error code..

4E2FDETAIL
INC C
Bump the value stored in Register C by 1.
Original Source Code Comment: ADVANCE FOR DEC LOOP
4E30
LD HL,502BHLD HL,TABLE1
LET Register Pair HL = 502BH, which is the error message lookup table.
Original Source Code Comment: HL=> ERROR WORD LOOKUP TABLE
4E33SMLP1
BIT 7,(HL)
Test Bit 7 of Register (HL) to see if we are at the start of a long error message.
Original Source Code Comment: START OF NEXT ERROR TABLE?
4E35
If the NZ FLAG (Not Zero) is set then we have found the error message, so JUMP to 4E3AH.
Original Source Code Comment: IF YES CONT
4E37SMLP2
INC HL
Bump the value stored in Register Pair HL by 1 to look at the next byte of the long error message table.
Original Source Code Comment: NO, SKIP TILL FOUND
4E38
LOOP BACK to 4E33H.
Original Source Code Comment: GET IT

4E3AH - GOTER - Continuation of DISPLAY LONG ERROR MESSAGE routine. Jumped here when HL is pointing to the start of a long error message (based on Bit 7). This will parse down C error messages.

4E3AGOTER
DEC C
DECrement the value stored in Register C (which is counting backwards through error messages to find the one we need) by 1.
Original Source Code Comment: CORRECT ERROR?
4E3B
If the NZ FLAG (Not Zero) is set, then we haven't found our error yet, so LOOP BACK to 4E37H.
Original Source Code Comment: IF NOT FIND IT

If we are here, we have counted down C messages until we hit the one we need, pointed to by (HL).

4E3DSMALL0
LD A,(HL)
Fetch the value stored at memory location pointed to by Register Pair HL (i.e., the word number) and put it into Register A.
Original Source Code Comment: GET WORD POS IN TABLE 1
4E3E
PUSH HL
Save Register HL (i.e., the long error message table pointer) to the top of the stack.
Original Source Code Comment: SAVE FOR NEXT WORD
4E3F
AND 7FH
MASK the value of Register A against 7FH (0111 1111). This has the effect of turning off bits 7, leaving only bits 6, 5, 4, 3, 2, 1, 0 active.
Original Source Code Comment: KILL START BIT
4E41
LD C,A
LET Register C = Register A (i.e., the word number, minus Bit 7).
4E42
LD HL,4E9BHLD HL,TABLE2
LET Register Pair HL = 4E9BH, which is the LONG ERROR MESSAGE WORD TABLE.
Original Source Code Comment: HL => WEBSTERS
4E45SMLP3
BIT 7,(HL)
Test Bit 7 of the memory address pointed by Register Pair HL. If Bit 7 is NZ then we are at a new word.
Original Source Code Comment: START OF NEW WORD?
4E47
If the NZ FLAG (Not Zero) is set then we are at a new word so JUMP to 4E4CH.
Original Source Code Comment: YES, SEE IF RIGHT ONE
4E49SMLP4
INC HL
Bump the value stored in Register Pair HL by 1 since we weren't at a new word.
Original Source Code Comment: NO, BUMP TO NEXT WORD
4E4A
LOOP BACK to to 4E45H until Bit 7 of (HL) is NOT ZERO.
Original Source Code Comment: GET IT

4E4CH - GOTWD - Continuation of DISPLAY LONG ERROR MESSAGE routine. Jumped here when (HL) points to a new word in the long error message routine..

4E4CGOTWD
DEC C
DECrement the value stored in Register C (which is counting backwards through error messages to find the one we need) by 1.
Original Source Code Comment: CORRECT WORD?
4E4D
If the NZ FLAG (Not Zero) is set then we still aren't at the right word yet, so JUMP BACK to 4E49H.
Original Source Code Comment: IF NOT FIND IT

If we are here, we have found the right word.

4E4FSMLP5
LD A,(HL)
Fetch the value stored at memory location pointed to by Register Pair HL (i.e., a character of the word we were looking for) and put it into Register A.
Original Source Code Comment: GET LETTER
4E50
AND 7FH
MASK the value of Register A against 7FH (0111 1111). This has the effect of turning off bits 7, leaving only bits 6, 5, 4, 3, 2, 1, 0 active.
Original Source Code Comment: KILL START BIT
4E52
GOSUB to 0033H.
NOTE: 0033H is the character print routine, to put the character held in Register A at the current cursor position.
Original Source Code Comment: DISPLAY IT
4E55
INC HL
Bump the value stored in Register Pair HL by 1 to point to the next letter of the word in the error message we were looking for.
4E56
BIT 7,(HL)
Test Bit 7 of Register (HL) to see if we just INC'd HL to a new word.
Original Source Code Comment: NEXT WORD?
4E58
If the Z FLAG (Zero) is set then we are NOT yet at a new word, so LOOP to 4E4FH to keep displaying that word.
Original Source Code Comment: IF NOT CONT
4E5A
LD A,20HLD A,' '
LET Register A = 20H (ASCII: SPACE).
Original Source Code Comment: PRINT A SPACE BETWEEN
4E5C
GOSUB to 0033H to display the SPACE.
NOTE: 0033H is the character print routine, to put the character held in Register A at the current cursor position.
4E5F
POP HL
Restore Register Pair HL (i.e., the long error message table pointer) from the top of the STACK.
Original Source Code Comment: GET NEXT WORD
4E60
INC HL
Bump the value stored in Register Pair HL by 1 to go to the next entry in the word lookup table for our specific error.
4E61
BIT 7,(HL)
Test Bit 7 of Register (HL) to see if the message is done or not.
Original Source Code Comment: IS IT NEXT ERROR?
4E63
If the Z FLAG (Zero) is set then we are NOT done with our full message, so LOOP BACK to 4E3DH to process the next word.
Original Source Code Comment: IF NOT CONT
4E65ERROUT
LD A,0DH
LET Register A = 0DH (ASCII: CARRIAGE RETURN).
Original Source Code Comment: PRINT CARR RET
4E67
GOSUB to 0033H to print a CARRIAGE RETURN) since we have finished with our error message.
NOTE: 0033H is the character print routine, to put the character held in Register A at the current cursor position.
4E6A
POP AF
Restore Register Pair AF from the top of the STACK.
Original Source Code Comment: RESTORE ALL REGISTERS
4E6B
POP BC
Restore Register Pair BC from the top of the STACK.
4E6C
POP DE
Restore Register Pair DE from the top of the STACK.
4E6D
POP HL
Restore Register Pair HL from the top of the STACK.
4E6E
BIT 7,A
Test Bit 7 of Register A to see if we are returning to DOS (Z) or rebooting (NZ).
4E70
If the NZ FLAG (Not Zero) is set, JUMP to 0000H.
Original Source Code Comment: PROG MODIFYS (RET ADD)
4E73
JUMP to 4030H.
NOTE: 4030H is the OPERATION ABORTED routine. Routine runs, displays an error, and returns to the DOS PROMPT.
Original Source Code Comment: JP TO DOS

4E76H - BINDEC - Display SHORT ERROR MESSAGE routine..

4E76BINDEC
LD HL,4E94HLD HL,X1
LET Register Pair HL = 4E94H, which is the table lookup for error numbers.
Original Source Code Comment: PLACE TO STORE THE ANSWER
4E79
LD (HL),2FH
Store a 2FH into the memory location pointed to by Register Pair HL to initialize the number for the upcoming math, noting that 2FH is one below 30H which is the hex value for "0".
4E7BBIN1
INC (HL)
Bump the value pointed to by Register Pair HL by 1. On entry, (HL) will now be 30H or a 0.
4E7C
SUB 0AH
SUBtract the value 0AH (Decimal: 10) from Register A so that Register A will hold the TENS POSITION number.
4E7E
If the NC FLAG (No Carry) is set, JUMP to 4E7BH.
4E80
INC HL
Bump the value stored in Register Pair HL by 1 so that HL now points to the ONES POSITION number.
4E81
ADD A,3AH
ADD the value 3AH to Register A (Results held in Register A) to convert Register A into ASCII.
4E83
LD (HL),A
Store the value held in Register A (the ONES POSITION number) into the memory location pointed to by Register Pair HL.
4E84
LD HL,4E8AHLD HL,ERRCOD
LET Register Pair HL = 4E8AH, whic his t he base of the message table.
4E87
JUMP to 021BH.
NOTE: 021BH will display the character at (HL) until a 03H is found, and then RETurn.

4E8AH - ERRCOD - ERROR MESSAGE STORAGE for ERROR 00..

4E8AERRCOD
Message
"* * ".
4E8E
Message
"ERROR".
4E93
Message
" 00 ".
4E97
Message
"* * " + 03H.

4E9BH - TABLE2 - ERROR MESSAGE WORD TABLE..

Addr
Word No.
Error Word
4E9BTABLE2
01
"NO"
4E9D
02
"ERROR"
4EA2
03
"FOUND"
4EA7
04
"CRC"
4EAA
05
"DURING"
4EB0
06
"READ"
4EB4
07
"SEEK"
4EB8
08
"LOST"
4EBC
09
"DATA"
4EC0
0A
"RECORD"
4EC6
0B
"NOT"
4EC9
0C
"ATTEMPT"
4ED0
0D
"SYSTEM"
4ED6
0E
"DISK"
4EDA
0F
"DRIVE"
4EDF
10
"READY"
4EE4
11
"WRITE"
4EE9
12
"FAULT"
4EEE
13
"ON"
4EF0
14
"PROTECTED"
4EF9
15
"ILLEGAL"
4F00
16
"LOGICAL"
4F07
17
"FILE"
4F0B
18
"NUMBER"
4F11
19
"DIRECTORY"
4F1A
1A
"IMPROPER"
4F22
1B
"NAME"
4F26
1C
"GAT"
4F29
1D
"HIT"
4F2C
1E
"IN"
4F2E
1F
"ACCESS"
4F34
20
"DENIED"
4F3A
21
"DUE TO"
4F40
22
"PASSWORD"
4F48
23
"PROTECTION"
4F52
24
"SPACE"
4F57
25
"FULL"
4F5B
26
"PAST EOF"
4F53
27
"OUTSIDE OF"
4F62
28
"LIMITS"
4F73
29
"MORE"
4F77
2A
"EXTENTS"
4F7E
2B
"OPEN"
4F82
2C
"PROGRAM"
4F89
2D
"AVAILABLE"
4F92
2E
"USE"
4F95
2F
"AS A"
4F99
30
"MEMORY"
4F9F
31
"LOAD"
4FA3
32
"I/O"
4FA6
33
"UNOPEN"
4FAC
34
"INVALID"
4FB3
35
"COMMAND PARAMETER"
4FC4
36
"REQUIRED"
4FCC
37
"ALREADY"
4FD3
38
"SECTOR"
4FD9
39
"* * UNDEFINED ERROR CODE * *"
4FF5
3A
"TIME OUT"
4FFE
3B
"RS-232"
5004
3C
"ACTIVE"
500A
3D
"RECIEVE"
5011
3E
"TRANSMIT"
5019
3F
"NON"
501C
40
"TO"
501E
41
"HARDWARE"
5026
42
"LENGTH"

502BH - TABLE1 - ERROR PHRASE TABLE..

Addr
Word No.
Error Phrase
502C
00
"NO ERROR CODE"
502F
01
"CRC ERROR DURING DISK I/O"
5034
02
"DISK DRIVE NOT ON SYSTEM"
5039
03
"LOST DATA DURING DISK I/O"
503E
04
"CRC ERROR DURING DISK I/O"
5043
05
"DISK SECTOR NOT FOUND"
5047
06
"DISK DRIVE HARDWARE FAULT"
504B
07
"ILLEGAL SIDE NUMBER"
504E
08
"DISK DRIVE NOT READY"
5052
09
"ILLEGAL I/O ATTEMPT"
5055
10
"REQUIRED COMMAND PARAMETER NOT FOUND"
5059
11
"ILLEGAL COMMAND PARAMETER"
505B
12
"TIME OUT ON DISK DRIVE"
505F
13
"I/O ATTEMPT TO NON SYSTEM DISK"
5065
14
"WRITE FAULT ON DISK I/O"
506A
15
"WRITE PROTECTED DISK"
506D
16
"ILLEGAL LOGICAL FILE NUMBER"
5071
17
"DIRECTORY READ ERROR"
5074
18
"DIRECTORY WRITE ERROR"
5077
19
"INVALID FILE NAME"
507A
20
"GAT READ ERROR"
508D
21
"HIT WRITE ERROR"
5080
22
"HIT READ ERROR"
5083
23
"HIT WRITE ERROR"
5086
24
"FILE NOT FOUND"
5089
25
"FILE ACCESS DENIED DUE TO PASSWORD PROTECTION"
5090
26
"DIRECTORY SPACE FULL"
5093
27
"DISK SPACE FULL"
5096
28
"ATTEMPT TO READ PAST EOF"
509A
29
"ATTEMPT TO READ OUTSIDE OF FILE LIMITS"
50A0
30
"NO MORE EXTENTS AVAILABLE"
50A4
31
"PROGRAM NOT FOUND"
50A7
32
"INVALID DRIVE NUMBER"
50AA
33
"* * UNDEFINED ERROR CODE * *"
50AB
34
"ATTEMPT TO USE NON PROGRAM FILE AS A PROGRAM"
50B3
35
"MEMORY FAULT DURING PROGRAM LOAD"
50B7
36
"* * UNDEFINED ERROR CODE * *"
50B8
37
"FILE ACCESS DENIED DUE TO PASSWORD PROTECTION"
50C0
38
"I/O ATTEMPT TO UNOPEN FILE"
50C5
39
"INVALID COMMAND PARAMETER"
50C7
40
"FILE ALREADY IN DIRECTORY"
50CB
41
"ATTEMPT TO OPEN FILE ALREADY OPEN"
50Dl
42-63
22 Undefined Error Codes
 
END 4E00H