DOSPLUS 3.5 for the Model I - ERROR/OVL Disassembled

Page Customization

Introduction/Summary

DOSPLUS 3.5 ERROR/OVL Disassembly - The Long Error Messages of Extended Disk BASIC (Model I)

ERROR/OVL is the overlay of DOSPLUS Extended Disk BASIC 1.7 (BASIC/CMD) that shows an error in words: the full message instead of the ROM's two letter code, the line number, and the statement in error after an arrow. It is a load module of 4 blocks, 807 bytes, from 5200H to 5526H, with the transfer address 5200H. Unlike the SYS and CMD files of DOSPLUS it has no comment records (no 05H name or copyright record): the file starts with its first load block. The file is 1024 bytes, four sectors; after the transfer record (file offsets 0337H-033AH) come 197 bytes E5H, the rest of the fourth sector, which are never loaded and are not shown below. The Model I and Model III files are identical byte for byte, and so are the two pages apart from their links.

The Parts of ERROR/OVL

AddressContents
5200H-5260HThe routine: the message, the line and the statement (5200H).
5261H-5265HThe arrow --> and a space, ended by 00H (5261H).
5266H-5526HThe list of the 44 messages, after a first 00H (5266H).

How BASIC/CMD Uses It

The ROM's error routine (19A2H) first passes an error to an ON ERROR GOTO handler; when there is none it calls the Disk BASIC link 41A6H at 19ECH with Register E = the offset of the error (the ERR value). BASIC/CMD's error hook (5C00H) reads its state byte 62F5H: bit 1 set loads ERROR/OVL with LOAD@ into 5200H, the area of the high overlays, through the file control block of file area 0, keeps the transfer address in 62F8H-62F9H and sets OVLYH$ so that the next library command reads its overlay again; bit 0 set returns into ERROR/OVL. When the file is not on the diskette BASIC/CMD goes on with the ROM's two letter codes, and every disk error is shown as UE, as the manual says. A library command run by CMD loads over ERROR/OVL, so BASIC/CMD sets bit 1 again and the next error loads it afresh.

Finding the Message

The list holds the messages one after another, each ended by 00H. The routine turns the offset into the number of a message (5204H): the offsets 00H-2EH (the 23 errors of the ROM's table, NEXT without FOR to DISK BASIC feature, and 2EH, Undefined user function) are taken as they are; the disk error offsets 64H-8AH (error codes 51-70, FIELD overflow to File access DENIED) have 34H subtracted, so that they follow the first 24 messages; every other offset (2FH-62H and 8BH-FFH) is shown as Unprintable error, offset 26H. Half of the result, plus one, is the number of 00H bytes to pass from 5266H, done with the ROM's text scan at 1F07H (5219H). The offsets 70H, 76H and 78H (error codes 57, 60 and 61) have the text ? only; BASIC/CMD's map of the DOS errors (6CB6H) and its own error exits never produce them.

OffsetsError codeMessages
00H-2CH1-23The ROM's errors, NEXT without FOR (NF) to DISK BASIC feature (L3), in the ROM's order.
2EH24Undefined user function (BASIC/CMD's FN).
30H-62H25-50No message: Unprintable error.
64H-8AH51-70The disk errors, FIELD overflow to File access DENIED (? for 57, 60 and 61).
8CH-FEH71-128No message: Unprintable error.

What Is Shown

The message is shown without the ROM's question mark and without the word Error (5220H). BASIC/CMD's 6C47H then clears the run flag; a program loaded with access level 6 or 7, which may not be listed, is wiped there, RUN access only is shown and BASIC goes to READY without coming back (5223H). What follows depends on the current line number in 40A2H-40A3H:

Line numberThen
FFFEHThe start-up of BASIC: BASIC/CMD's start-up copies the ROM's table (18F7H) to 4080H, and the table holds FFFEH for 40A2H. An error before any line has run, such as a program named after BASIC that cannot be loaded, ends BASIC with a new line and EXIT@ (5226H). The ROM goes to its restart at 0674H in this case.
FFFFHDirect mode: READY (1A19H) at once (5235H).
Any otherThe text in and the line number (the ROM's 0FA7H), a new line, the arrow and the statement in error (523CH).

The statement is found through 40F7H-40F8H, where the ROM's error routine keeps the text pointer of the statement in error: the byte before the statement, a colon inside a line or the 00H that ends the line before (5242H). After a colon the line is shown from the colon on, which gives the manual's example, NEXT without FOR in 30 and then --> : NEXT J. After a 00H the next line's link is tested: a link of 0000H (the end of the program) goes to READY without an arrow; otherwise the text of that line is shown from its first statement, without a colon. BASIC/CMD's 64CDH expands the tokenized text into file area 0's buffer and shows it (525BH), and the routine ends at the ROM's READY.

Differences from the Manual

The manual (Disk BASIC, pages 5-40 and 5-57) agrees with the bytes: the message texts and their error codes and ERR values are those of its table, and the display is the message, in, the line number, and the arrow before the statement. The manual does not say that the error codes 57, 60 and 61, which its table leaves out, show the text ?, that an error during the start-up of BASIC returns to the DOS, or that a run only program is wiped after the message.

The Model I and the Model III

The two files are the same, and the ROM addresses ERROR/OVL uses (1F07H, 28A7H, 20F9H, 0FA7H, its text at 1924H, 1A19H, and the table entry FFFEH at 1919H-191AH) are the same in the Model I and Model III ROMs; the page of each model links to that model's BASIC/CMD and SYS0/SYS pages.

Variables

Memory Outside ERROR/OVL

Address
Size
Contents
40A2H-40A3H
2 bytes
Current line number
FFFEH during the start-up, FFFFH in direct mode (5226H).
40F7H-40F8H
2 bytes
Text pointer of the statement in error
Saved by the ROM's error routine at 19CDH (5242H).
62F5H
1 byte
ERROR/OVL state
BASIC/CMD: bit 0 use ERROR/OVL, bit 1 load it first (5C00H).
62F8H-62F9H
2 bytes
ERROR/OVL entry
BASIC/CMD: the transfer address 5200H that LOAD@ returned (5C10H).

In ERROR/OVL

Address
Size
Contents
5261H-5265H
5 bytes
Arrow
The text --> and a space, ended by 00H (5261H).
5266H-5526H
705 bytes
Message list
A 00H, then the 44 messages, each ended by 00H (5266H).

Registers

RegisterContents
EEntry: the offset of the error (the ERR value). Then the number of 00H bytes still to pass (5215H).
HLThe message list pointer, then the line number, then the text of the statement in error (5201H, 5226H, 5242H).

Outside Routines

AddressContents
6C47HBASIC/CMD: clear the run flag and wipe a run only program (5223H).
64CDHBASIC/CMD: expand and show the text of a line (525BH).
402DHSYS0/SYS: EXIT@ (5232H).
1F07HROM: scan the text to its next 00H (5219H).
28A7HROM: show the text up to its 00H (5220H, 5257H).
20F9HROM: a new line when the cursor is not at the start of one (522FH, 523FH).
0FA7HROM: the text in and the line number (523CH).
1A19HROM: READY (5239H, 524DH, 525EH).

Disassembly

5200H - Long Error Message

ERROR/OVL's transfer address. BASIC/CMD's error hook at 5C00H (link 41A6H) loads ERROR/OVL into 5200H on the first error and then returns into it, with Register E = the offset of the error (ERR) and, on the stack, the return address of the ROM's CALL 41A6H at 19ECH; the ROM has already passed the errors to an ON ERROR GOTO handler. ERROR/OVL turns the offset into the number of a message in its list, shows the message, lets BASIC/CMD wipe a run only program, and then: during the start-up of BASIC (line number FFFEH) goes back to the DOS; in direct mode (FFFFH) goes to READY; in a program shows in and the line number, then --> and the statement in error with the rest of its line, and goes to READY.

5200
POP AF F1
Discard the top of the stack into Register Pair AF: the return address 19EFH of the ROM's CALL 41A6H, so that the ROM's two letter message is never shown.
5201
LD HL,5266H 21 66 52
Point Register Pair HL to 5266H, the 00H byte before the first message of the list (5267H on), where each message is ended by 00H.
5204
LD A,E 7B
Load Register A with Register E, the offset of the error (00H, 02H, 04H and so on, the ERR value), as BASIC/CMD's hook passes it.
5205
CP 8BH FE 8B
Compare Register A against 8BH: the NC FLAG for an offset of 8BH or more, beyond 8AH, the last disk error (File access DENIED).
5207
If the NC FLAG is set (no message for the offset), JUMP to 5211H to show Unprintable error instead.
5209
CP 63H FE 63
Compare Register A against 63H: the NC FLAG for the offsets 63H-8AH, the disk errors of BASIC/CMD (64H FIELD overflow on).
520B
If the NC FLAG is set (a disk error), JUMP to 5213H to subtract 34H: the disk messages follow the first 24 messages in the list.
520D
CP 2FH FE 2F
Compare Register A against 2FH: the C FLAG for the offsets 00H-2EH, the 23 errors of the ROM's table and 2EH, Undefined user function.
520F
If the C FLAG is set (00H-2EH), JUMP to 5215H with the offset unchanged: these messages are in the order of the offsets.
5211
LD A,5AH 3E 5A
Load Register A with 5AH, which the SUB 34H below turns into 26H, the offset of Unprintable error: for the offsets 2FH-62H and 8BH-FFH.
5213
SUB 34H D6 34
SUBtract 34H from Register A: a disk error offset 64H-8AH becomes 30H-56H, its place in the list after the 24 messages of 00H-2EH.
5215
LD E,A 5F
Load Register E with Register A, the offset of the message in the list (00H-56H, always even).
5216
SRL E CB 3B
Shift Register E right by one bit (SRL): the even offset becomes the number of the message, counted from 0.
5218
INC E 1C
INCrement Register E by 1: the number of 00H bytes to pass, the one at 5266H before the first message included.
5219
GOSUB to 1F07H, the ROM's scan of the text at Register Pair HL (both stop characters 00H): Register Pair HL stops at the next 00H byte.
521C
INC HL 23
INCrement Register Pair HL by 1, past the 00H, to the first character of the next message.
521D
DEC E 1D
DECrement Register E by 1, the count of the 00H bytes still to pass.
521E
If the NZ FLAG is set (more 00H bytes to pass), LOOP BACK to 5219H to pass the next message.
5220
GOSUB to 28A7H, the ROM's output of the text at Register Pair HL up to its 00H: the long message of the error.
5223
GOSUB to 6C47H in BASIC/CMD, which clears the run flag (62F7H); for a program loaded with access level 6 or 7 it wipes the program, shows RUN access only and goes to READY without coming back.
5226
LD HL,(40A2H) 2A A2 40
Load Register Pair HL with the current line number from 40A2H-40A3H: FFFFH in direct mode, FFFEH during the start-up of BASIC.
5229
LD DE,FFFEH 11 FE FF
Load Register Pair DE with FFFEH, the line number that BASIC/CMD's start-up copies from the ROM's table (1919H) to 40A2H.
522C
RST 18H DF
RST 18H: compare Register Pair HL, the line number, with Register Pair DE (FFFEH): the Z FLAG when they are equal.
522D
If the NZ FLAG is set (not the start-up), JUMP to 5235H.
522F
GOSUB to 20F9H, the ROM's new line when the cursor is not at the start of a line, after the message.
5232
JUMP to 402DH, EXIT@, back to the DOS: an error before any program line ran (such as a program named after BASIC that cannot be loaded) ends BASIC. The ROM goes to 0674H here.
5235
LD DE,FFFFH 11 FF FF
Load Register Pair DE with FFFFH, the line number of direct mode.
5238
RST 18H DF
RST 18H: compare Register Pair HL, the line number, with Register Pair DE (FFFFH): the Z FLAG in direct mode.
5239
If the Z FLAG is set (direct mode), JUMP to 1A19H, the ROM's READY: there is no line to show.
523C
GOSUB to 0FA7H, the ROM's output of the text at 1924H (a space, in and a space) and of the line number in Register Pair HL.
523F
GOSUB to 20F9H, the ROM's new line when the cursor is not at the start of a line, before the statement.
5242
LD HL,(40F7H) 2A F7 40
Load Register Pair HL from 40F7H-40F8H, the text pointer the ROM's error routine saved at 19CDH: the byte before the statement in error, a colon or the 00H ending the line before.
5245
XOR A AF
Set Register A to 00H by XORing it with itself, for the OR tests below.
5246
OR (HL) B6
OR Register A with the byte at Register Pair HL: the Z FLAG for a 00H, so that the statement is the first of the next line.
5247
If the NZ FLAG is set (a colon), JUMP to 5253H to show the line from the colon on.
5249
INC HL 23
INCrement Register Pair HL by 1, to the low byte of the next line's link.
524A
OR (HL) B6
OR Register A (00H) with the low byte of the link at Register Pair HL.
524B
INC HL 23
INCrement Register Pair HL by 1, to the high byte of the link.
524C
OR (HL) B6
OR Register A with the high byte of the link at Register Pair HL: the Z FLAG for a link of 0000H, the end of the program.
524D
If the Z FLAG is set (no next line), JUMP to 1A19H, the ROM's READY, without the arrow.
5250
INC HL 23
INCrement Register Pair HL by 1, to the low byte of the line number.
5251
INC HL 23
INCrement Register Pair HL by 1, to the high byte of the line number.
5252
INC HL 23
INCrement Register Pair HL by 1, to the first byte of the line's text, the statement in error.
5253
PUSH HL E5
Save Register Pair HL, the text from the statement in error on, to the top of the stack.
5254
LD HL,5261H 21 61 52
Point Register Pair HL to 5261H, the text --> and a space.
5257
GOSUB to 28A7H, the ROM's output of the text at Register Pair HL up to its 00H: the arrow.
525A
POP HL E1
Restore Register Pair HL, the text from the statement in error on, from the top of the stack.
525B
GOSUB to 64CDH in BASIC/CMD, which expands the tokenized text at Register Pair HL to its 00H (the statement and the rest of the line) and shows it with a new line.
525E
JUMP to 1A19H, the ROM's READY, which shows READY and waits for the next command.
5261-5265
DEFM "--> " / DEFB 00H 2D 2D 3E 20 00
The arrow shown before the statement in error: two hyphens, the greater than sign and a space, ended by the 00H at which the ROM's 28A7H stops.

5266H - The Messages

The 44 messages, each ended by 00H, after a first 00H at 5266H. Message n (counted from 0) is found after n + 1 bytes 00H: the messages 0-23 are those of the offsets 00H-2EH (the ROM's 23 errors and Undefined user function), the messages 24-43 those of the disk error offsets 64H-8AH (error codes 51-70). Offsets 70H, 76H and 78H (error codes 57, 60 and 61) have the text ? only; BASIC/CMD raises none of them.

5266
DEFB 00H 00
The 00H before the first message, the first of the 00H bytes that the scan at 5219H passes.
5267-5277
DEFM "NEXT without FOR" / DEFB 00H 4E 45 58 54 20 77 69 74 68 6F 75 74 20 46 4F 52 00
The message NEXT without FOR of the ROM's offset 00H (error code 1, the ROM's two letter code NF).
5278-5284
DEFM "Syntax error" / DEFB 00H 53 79 6E 74 61 78 20 65 72 72 6F 72 00
The message Syntax error of the ROM's offset 02H (error code 2, the ROM's two letter code SN).
5285-5299
DEFM "RETURN without GOSUB" / DEFB 00H 52 45 54 55 52 4E 20 77 69 74 68 6F 75 74 20 47 4F 53 55 42 00
The message RETURN without GOSUB of the ROM's offset 04H (error code 3, the ROM's two letter code RG).
529A-52A5
DEFM "Out of DATA" / DEFB 00H 4F 75 74 20 6F 66 20 44 41 54 41 00
The message Out of DATA of the ROM's offset 06H (error code 4, the ROM's two letter code OD).
52A6-52BB
DEFM "Illegal function call" / DEFB 00H 49 6C 6C 65 67 61 6C 20 66 75 6E 63 74 69 6F 6E 20 63 61 6C 6C 00
The message Illegal function call of the ROM's offset 08H (error code 5, the ROM's two letter code FC).
52BC-52C4
DEFM "Overflow" / DEFB 00H 4F 76 65 72 66 6C 6F 77 00
The message Overflow of the ROM's offset 0AH (error code 6, the ROM's two letter code OV).
52C5-52D2
DEFM "Out of memory" / DEFB 00H 4F 75 74 20 6F 66 20 6D 65 6D 6F 72 79 00
The message Out of memory of the ROM's offset 0CH (error code 7, the ROM's two letter code OM).
52D3-52E8
DEFM "Undefined line number" / DEFB 00H 55 6E 64 65 66 69 6E 65 64 20 6C 69 6E 65 20 6E 75 6D 62 65 72 00
The message Undefined line number of the ROM's offset 0EH (error code 8, the ROM's two letter code UL).
52E9-52FF
DEFM "Subscript out of range" / DEFB 00H 53 75 62 73 63 72 69 70 74 20 6F 75 74 20 6F 66 20 72 61 6E 67 65 00
The message Subscript out of range of the ROM's offset 10H (error code 9, the ROM's two letter code BS).
5300-5313
DEFM "Redimensioned array" / DEFB 00H 52 65 64 69 6D 65 6E 73 69 6F 6E 65 64 20 61 72 72 61 79 00
The message Redimensioned array of the ROM's offset 12H (error code 10, the ROM's two letter code DD).
5314-5324
DEFM "Division by zero" / DEFB 00H 44 69 76 69 73 69 6F 6E 20 62 79 20 7A 65 72 6F 00
The message Division by zero of the ROM's offset 14H (error code 11, the ROM's two letter code /0).
5325-5333
DEFM "Illegal direct" / DEFB 00H 49 6C 6C 65 67 61 6C 20 64 69 72 65 63 74 00
The message Illegal direct of the ROM's offset 16H (error code 12, the ROM's two letter code ID).
5334-5341
DEFM "Type mismatch" / DEFB 00H 54 79 70 65 20 6D 69 73 6D 61 74 63 68 00
The message Type mismatch of the ROM's offset 18H (error code 13, the ROM's two letter code TM).
5342-5355
DEFM "Out of string space" / DEFB 00H 4F 75 74 20 6F 66 20 73 74 72 69 6E 67 20 73 70 61 63 65 00
The message Out of string space of the ROM's offset 1AH (error code 14, the ROM's two letter code OS).
5356-5365
DEFM "String too long" / DEFB 00H 53 74 72 69 6E 67 20 74 6F 6F 20 6C 6F 6E 67 00
The message String too long of the ROM's offset 1CH (error code 15, the ROM's two letter code LS).
5366-5380
DEFM "String formula too complex" / DEFB 00H 53 74 72 69 6E 67 20 66 6F 72 6D 75 6C 61 20 74 6F 6F 20 63 6F 6D 70 6C 65 78 00
The message String formula too complex of the ROM's offset 1EH (error code 16, the ROM's two letter code ST).
5381-538F
DEFM "Can't continue" / DEFB 00H 43 61 6E 27 74 20 63 6F 6E 74 69 6E 75 65 00
The message Can't continue of the ROM's offset 20H (error code 17, the ROM's two letter code CN).
5390-5399
DEFM "No RESUME" / DEFB 00H 4E 6F 20 52 45 53 55 4D 45 00
The message No RESUME of the ROM's offset 22H (error code 18, the ROM's two letter code NR).
539A-53AE
DEFM "RESUME without error" / DEFB 00H 52 45 53 55 4D 45 20 77 69 74 68 6F 75 74 20 65 72 72 6F 72 00
The message RESUME without error of the ROM's offset 24H (error code 19, the ROM's two letter code RW).
53AF-53C0
DEFM "Unprintable error" / DEFB 00H 55 6E 70 72 69 6E 74 61 62 6C 65 20 65 72 72 6F 72 00
The message Unprintable error of the ROM's offset 26H (error code 20, the ROM's two letter code UE).
53C1-53D0
DEFM "Missing operand" / DEFB 00H 4D 69 73 73 69 6E 67 20 6F 70 65 72 61 6E 64 00
The message Missing operand of the ROM's offset 28H (error code 21, the ROM's two letter code MO).
53D1-53DE
DEFM "Bad file data" / DEFB 00H 42 61 64 20 66 69 6C 65 20 64 61 74 61 00
The message Bad file data of the ROM's offset 2AH (error code 22, the ROM's two letter code FD).
53DF-53F1
DEFM "DISK BASIC feature" / DEFB 00H 44 49 53 4B 20 42 41 53 49 43 20 66 65 61 74 75 72 65 00
The message DISK BASIC feature of the ROM's offset 2CH (error code 23, the ROM's two letter code L3).
53F2-5409
DEFM "Undefined user function" / DEFB 00H 55 6E 64 65 66 69 6E 65 64 20 75 73 65 72 20 66 75 6E 63 74 69 6F 6E 00
The message Undefined user function of the offset 2EH (error code 24), raised by BASIC/CMD's FN at 5EFEH.
540A-5418
DEFM "FIELD overflow" / DEFB 00H 46 49 45 4C 44 20 6F 76 65 72 66 6C 6F 77 00
The message FIELD overflow of the disk error offset 64H (error code 51, list place 30H).
5419-5427
DEFM "Internal error" / DEFB 00H 49 6E 74 65 72 6E 61 6C 20 65 72 72 6F 72 00
The message Internal error of the disk error offset 66H (error code 52, list place 32H).
5428-5437
DEFM "Bad file number" / DEFB 00H 42 61 64 20 66 69 6C 65 20 6E 75 6D 62 65 72 00
The message Bad file number of the disk error offset 68H (error code 53, list place 34H).
5438-5446
DEFM "File not found" / DEFB 00H 46 69 6C 65 20 6E 6F 74 20 66 6F 75 6E 64 00
The message File not found of the disk error offset 6AH (error code 54, list place 36H).
5447-5454
DEFM "Bad file mode" / DEFB 00H 42 61 64 20 66 69 6C 65 20 6D 6F 64 65 00
The message Bad file mode of the disk error offset 6CH (error code 55, list place 38H).
5455-5466
DEFM "File already open" / DEFB 00H 46 69 6C 65 20 61 6C 72 65 61 64 79 20 6F 70 65 6E 00
The message File already open of the disk error offset 6EH (error code 56, list place 3AH).
5467-5468
DEFM "?" / DEFB 00H 3F 00
The text ? of the disk error offset 70H (error code 57, list place 3CH), an error number that BASIC/CMD never raises.
5469-5477
DEFM "Disk I/O error" / DEFB 00H 44 69 73 6B 20 49 2F 4F 20 65 72 72 6F 72 00
The message Disk I/O error of the disk error offset 72H (error code 58, list place 3EH).
5478-548B
DEFM "File already exists" / DEFB 00H 46 69 6C 65 20 61 6C 72 65 61 64 79 20 65 78 69 73 74 73 00
The message File already exists of the disk error offset 74H (error code 59, list place 40H).
548C-548D
DEFM "?" / DEFB 00H 3F 00
The text ? of the disk error offset 76H (error code 60, list place 42H), an error number that BASIC/CMD never raises.
548E-548F
DEFM "?" / DEFB 00H 3F 00
The text ? of the disk error offset 78H (error code 61, list place 44H), an error number that BASIC/CMD never raises.
5490-5499
DEFM "Disk full" / DEFB 00H 44 69 73 6B 20 66 75 6C 6C 00
The message Disk full of the disk error offset 7AH (error code 62, list place 46H).
549A-54A8
DEFM "Input past end" / DEFB 00H 49 6E 70 75 74 20 70 61 73 74 20 65 6E 64 00
The message Input past end of the disk error offset 7CH (error code 63, list place 48H).
54A9-54BA
DEFM "Bad record number" / DEFB 00H 42 61 64 20 72 65 63 6F 72 64 20 6E 75 6D 62 65 72 00
The message Bad record number of the disk error offset 7EH (error code 64, list place 4AH).
54BB-54C8
DEFM "Bad file name" / DEFB 00H 42 61 64 20 66 69 6C 65 20 6E 61 6D 65 00
The message Bad file name of the disk error offset 80H (error code 65, list place 4CH).
54C9-54D6
DEFM "Mode-mismatch" / DEFB 00H 4D 6F 64 65 2D 6D 69 73 6D 61 74 63 68 00
The message Mode-mismatch of the disk error offset 82H (error code 66, list place 4EH).
54D7-54EF
DEFM "Direct statement in file" / DEFB 00H 44 69 72 65 63 74 20 73 74 61 74 65 6D 65 6E 74 20 69 6E 20 66 69 6C 65 00
The message Direct statement in file of the disk error offset 84H (error code 67, list place 50H).
54F0-54FE
DEFM "Too many files" / DEFB 00H 54 6F 6F 20 6D 61 6E 79 20 66 69 6C 65 73 00
The message Too many files of the disk error offset 86H (error code 68, list place 52H).
54FF-5513
DEFM "Disk write protected" / DEFB 00H 44 69 73 6B 20 77 72 69 74 65 20 70 72 6F 74 65 63 74 65 64 00
The message Disk write protected of the disk error offset 88H (error code 69, list place 54H).
5514-5526
DEFM "File access DENIED" / DEFB 00H 46 69 6C 65 20 61 63 63 65 73 73 20 44 45 4E 49 45 44 00
The message File access DENIED of the disk error offset 8AH (error code 70, list place 56H).