TRS-80 DOS - TRSDOS v2.3 for the Model I - BOOT/SYS Disassembled

Page Customization

Introduction/Summary

TRSDOS v2.3 BOOT/SYS Disassembly - The Boot Sector (Model I)

BOOT/SYS is the file that holds track 0, sectors 0-4 of a TRSDOS 2.3 diskette. Only its first sector matters: when the computer is started or reset, the ROM reads track 0, sector 0 of drive 0 into 4200H-42FFH and jumps to 4200H. That sector clears the screen, finds the directory entry of SYS0/SYS, loads SYS0/SYS and jumps to its transfer address, which starts TRSDOS. When SYS0/SYS is not on the diskette it shows NO SYSTEM; when a sector cannot be read, DISK ERROR. Byte 2 of the sector is the diskette's directory track, which SYS0/SYS also reads (4B35H).

The file is 1,280 bytes, five sectors of 256, with no load records: it is the image of the sectors themselves. Sector 0 is shown at 4200H-42FFH, where it runs. Sectors 1-4 are not loaded or used by anything; their rows show the offset of each byte in the file (0100H-04FFH). Every byte of the file is on one row, checked against S:\1\BOOT.SYS and its listing.

Memory Map

Address RangeUse
37E1H
1 byte
The drive select latch: 01H selects drive 0 (420FH, 427CH).
37ECH-37EFH
4 bytes
The floppy disk controller: command and status (37ECH), track (37EDH), sector (37EEH), data (37EFH).
41FCH
stack top
The Stack Pointer set at 4204H.
4200H-4274H
117 bytes
The boot code: clear the screen, read the SYS0/SYS entry, load SYS0/SYS and jump to it.
4275H-428FH
27 bytes
Fetch the next byte of SYS0/SYS, reading the next sector when the buffer is used up.
4290H-4299H
10 bytes
Show DISK ERROR or NO SYSTEM, wait for ENTER and halt.
429AH-42A9H
16 bytes
Display text up to 0DH or 03H.
42AAH-42E1H
56 bytes
Read a sector: SEEK, READ SECTOR, two tries.
42E2H-42FFH
30 bytes
The screen clear, NO SYSTEM, DISK ERROR, and two bytes not used.
4D00H-4DFFH
256 bytes
The buffer: directory sector 4, then each sector of SYS0/SYS in turn.
File 0100H-04FFH
1,024 bytes
Sectors 1-4 of BOOT/SYS, never loaded.

How the Boot Works

The code disables interrupts, sets the Stack Pointer to 41FCH and clears the screen (1CH cursor to the top left, 1FH erase to the end). It selects drive 0 and reads sector 4 of the directory track (byte 2 of this sector, 11H here) into 4D00H. Entry 0 of directory sector 4 is locator 02H, the entry of SYS0/SYS; when bit 4 of its first byte is clear the entry is not in use and NO SYSTEM is shown.

Otherwise bytes 16H-17H of the entry, the first extent, give the track (byte 16H) and the first granule on it (bits 5-7 of byte 17H); the first sector is the granule number times five. From there sectors are read one after the other into 4D00H, rolling over to sector 0 of the next track after sector 9; the other extents of the entry are not looked at. The bytes are taken as load records: type 01H stores its data at its load address (its length byte counts the two address bytes, so 02H gives no data, 00H gives 254 bytes and 01H gives 255), type 02H gives the transfer address, which the code jumps to with interrupts still disabled, and any other type is skipped by its length byte (00H = 256). Before each sector the drive select latch is written again.

The read routine seeks to the track (1BH), reads the sector (88H), checks the status with AND 5CH and tries a second time when that fails. A sector that cannot be read either time shows DISK ERROR. Both messages select 32 characters per line (17H) and give 40 spaces (E8H) before the text; the code then waits for a line through the ROM's line input (0040H) and executes HALT, so only RESET goes on.

Copies of the Boot Sector

  • FORMAT/CMD carries its own copy at 5E00H, runs it at 4200H for its display and read routines, and writes it to track 0, sector 0 of the new diskette with the directory track it chose in byte 2. Its copy differs from this sector in byte 7DH as well: B6H there, so 427CH in that copy stores to 37B6H instead of the drive select latch. A diskette fresh from FORMAT/CMD has no SYS0/SYS entry, so its boot stops at NO SYSTEM before that store. Byte FFH is not in FORMAT's file.
  • BACKUP/CMD copies track 0 of the source with the other tracks that hold data. On one drive it checks that a source diskette's boot sector starts with 00H; it writes 76H (HALT) there on the destination while the copy runs, and puts the real first byte back at the end.
  • SYS0/SYS's 4B35H reads track 0, sector 0 of a drive when a directory sector reads back with the normal data mark, and takes byte 2 as that drive's directory track.

Notes from the Code

  • 4201H is CP 11H: it compares and changes only the flags, so its operand, byte 2 of the sector, is free to hold the directory track.
  • SYS0/SYS is loaded from its first extent only, the sectors taken one after the other; a SYS0/SYS whose sectors were not consecutive from its first granule would load wrongly.
  • The loader takes a load record length of 02H as no data bytes, where SYS0/SYS's own loader (4C6AH-4C7DH) takes it as 256.
  • After NO SYSTEM or DISK ERROR the ROM's line input reads into the message bytes themselves, up to Register B characters (4DH or 4EH, left by the read), before HALT.
  • Bytes FEH-FFH (EBH, 5FH) are not used, nor are sectors 1-4.

Variables

Variables and Registers Kept

Address RangePurpose
4202H
1 byte
The directory track, 11H in this file (the operand of CP nn at 4201H), read at 4212H and by SYS0/SYS at 4B4AH.
4D00H-4DFFH
256 bytes
The sector buffer (4218H, 427FH); the SYS0/SYS entry is at 4D00H-4D1FH while directory sector 4 is in it.
4D16H-4D17H
2 bytes
The first extent of the SYS0/SYS entry: track, granule byte (422BH).
BC'
2 bytes
Alternate Register Pair: the buffer pointer, 4DFFH to start (423AH), counted on by 4276H.
DE'
2 bytes
Alternate Register Pair: Register D' = the track, Register E' = the sector of the next read (422EH, 4239H, 4285H-428CH).

Disassembly

4200H - Sector 0: the Boot Code

When the computer is started or reset with a diskette in drive 0, the ROM reads track 0, sector 0 into 4200H-42FFH and jumps to 4200H. These 256 bytes are sector 0 of BOOT/SYS. The code clears the screen, reads the directory entry of SYS0/SYS (directory sector 4, entry 0), and loads SYS0/SYS from the first sector of its first extent, record by record, then jumps to its transfer address. Two routines here, 429AH (display text) and 42AAH (read a sector), serve the boot code only; the copy of this sector that FORMAT/CMD carries uses them as well.

4200
NOP 00
No Operation: byte 0 of the boot sector. Execution starts here when the ROM jumps to 4200H; 00H does nothing and the next instruction follows.
4201
CP 11H FE 11
Compare Register A against 11H, the byte at 4202H: a compare whose result is not used, so the byte at 4202H can hold the directory track, 11H (track 17) in this file. FORMAT/CMD puts the track it chose into its copy of this byte; SYS0/SYS's 4B35H reads it to find a diskette's directory track.
4203
DI F3
Disable interrupts: no interrupt is to run while SYS0/SYS is read in and loaded over low memory.
4204
LD SP,41FCH 31 FC 41
Load the Stack Pointer with 41FCH, the same stack top TRSDOS uses below 4200H.
4207
LD HL,42E2H 21 E2 42
Point Register Pair HL to 42E2H, the text 1CH (cursor to the top left), 1FH (erase to the end of the screen), 03H (end of the text).
420A
GOSUB to 429AH to display the text at Register Pair HL: the screen is cleared.
420D
LD A,01H 3E 01
Load Register A with 01H, the select bit of drive 0 (bit 0).
420F
LD (37E1H),A 32 E1 37
Store Register A (01H) into the drive select latch at 37E1H: drive 0 is selected and its motor turns on.
4212
LD A,(4202H) 3A 02 42
Fetch the directory track from 4202H, byte 2 of this sector, into Register A.
4215
LD D,A 57
Copy the directory track from Register A into Register D, the track for the read.
4216
LD E,04H 1E 04
Load Register E with 04H, directory sector 4: entry 0 of sector 4 is locator 02H, the entry of SYS0/SYS.
4218
LD BC,4D00H 01 00 4D
Point Register Pair BC to 4D00H, the buffer for the directory sector.
421B
GOSUB to 42AAH to read track Register D, sector Register E into (BC) (Register Pair BC = 4D00H); the Z FLAG is set when the sector was read.
421E
If the NZ FLAG is set (the directory sector could not be read in two tries), JUMP to 4290H to show DISK ERROR and halt.
4220
LD A,(4D00H) 3A 00 4D
Fetch byte 00H of the SYS0/SYS entry, its attributes, from 4D00H into Register A.
4223
AND 10H E6 10
AND Register A (the attributes) with 10H, keeping bit 4, the bit of an entry in use: the Z FLAG is set when the entry is free.
4225
LD HL,42E5H 21 E5 42
Point Register Pair HL to 42E5H, the message NO SYSTEM; LD does not change the flags.
4228
If the Z FLAG is set (no SYS0/SYS on this diskette), JUMP to 4293H to show the message at Register Pair HL and halt. A diskette fresh from FORMAT/CMD goes this way, as FORMAT writes directory sector 4 as zeros.
422A
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set: Register Pairs BC', DE' and HL' now hold the read position used by 4275H.
422B
LD HL,(4D16H) 2A 16 4D
Fetch bytes 16H-17H of the SYS0/SYS entry, its first extent, from 4D16H into Register Pair HL: Register L = the starting track, Register H = the granule byte (bits 5-7 the first granule, bits 0-4 the granule count minus one).
422E
LD D,L 55
Copy the starting track from Register L into Register D, the track of the first sector to read.
422F
LD A,H 7C
Copy the granule byte from Register H into Register A.
4230
RLCA 07
Rotate Register A left, circularly: bit 7 of the granule byte goes to bit 0.
4231
RLCA 07
Rotate Register A left again, circularly: bits 6-7 of the granule byte are now bits 0-1.
4232
RLCA 07
Rotate Register A left a third time, circularly: bits 5-7 of the granule byte, the first granule, are now bits 0-2.
4233
AND 07H E6 07
AND Register A with 07H, keeping bits 0-2: Register A = the number of the first granule on its track.
4235
LD H,A 67
Copy the granule number from Register A into Register H.
4236
RLCA 07
Rotate Register A (the granule number) left, circularly: the granule number times two.
4237
RLCA 07
Rotate Register A left again, circularly: the granule number times four.
4238
ADD A,H 84
ADD Register H (the granule number) to Register A (four times it): the granule number times five, the sector where the granule starts, as each granule is five sectors.
4239
LD E,A 5F
Copy the first sector from Register A into Register E: Register Pair DE = the track and sector of the first sector of SYS0/SYS.
423A
LD BC,4DFFH 01 FF 4D
Load Register Pair BC with 4DFFH: Register B = 4DH, the page of the buffer, Register C = FFH, so the first INC C at 4276H gives 00H and a sector is read before the first byte is taken.
423D
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set again: the read position stays in the alternate registers while Register Pairs BC, DE and HL serve the loader.
423E
Record Loop
GOSUB to 4275H to fetch the next byte of SYS0/SYS into Register A: the type of the next load record. 4252H, 4267H loop back here.
4241
DEC A 3D
DECrement Register A (the record type) by 1: the Z FLAG is set for type 01H, a block of data to load.
4242
If the NZ FLAG is set (not type 01H), JUMP to 425BH to look at the other types.
4244
GOSUB to 4275H to fetch the record's length byte into Register A: the count of the load address and data bytes that follow.
4247
LD B,A 47
Copy the length from Register A into Register B, the count of bytes still to take.
4248
GOSUB to 4275H to fetch the low byte of the load address into Register A.
424B
LD L,A 6F
Copy the low byte of the load address from Register A into Register L.
424C
DEC B 05
DECrement Register B (the count) by 1 for the low address byte; the zero result of a length of 01H is not tested here.
424D
GOSUB to 4275H to fetch the high byte of the load address into Register A.
4250
LD H,A 67
Copy the high byte from Register A into Register H: Register Pair HL = the load address.
4251
DEC B 05
Data Loop
DECrement Register B (the count) by 1, for the high address byte the first time and for each data byte after it. 4259H loops back here.
4252
If the Z FLAG is set (the count is used up), LOOP BACK to 423EH for the next record. A length of 02H loads no bytes, 00H loads 254, 01H loads 255.
4254
GOSUB to 4275H to fetch the next data byte into Register A.
4257
LD (HL),A 77
Store the data byte from Register A into memory at (HL), Register Pair HL = the load address.
4258
INC HL 23
INCrement Register Pair HL (the load address) by 1.
4259
Data Loop End
JUMP to 4251H to count the byte and take the next one.
425B
DEC A 3D
DECrement Register A by 1 again: it was the record type minus 1, so the Z FLAG is set for type 02H, the transfer address. 4242H jumps here.
425C
If the Z FLAG is set (type 02H), JUMP to 4269H to fetch the transfer address and go there.
425E
GOSUB to 4275H to fetch the length byte of a record of another type into Register A.
4261
LD B,A 47
Copy the length from Register A into Register B, the count of bytes to skip; 00H skips 256.
4262
Skip Loop
GOSUB to 4275H to fetch a byte of the record into Register A; it is not used. 4265H loops back here.
4265
Skip Loop End
DECrement Register B (the bytes left to skip) and LOOP BACK to 4262H until the record is passed.
4267
The record is skipped: LOOP BACK to 423EH to fetch the type of the next record.
4269
GOSUB to 4275H to fetch the length byte of the transfer record into Register A; it is not used. 425CH jumps here.
426C
GOSUB to 4275H to fetch the low byte of the transfer address into Register A.
426F
LD L,A 6F
Copy the low byte of the transfer address from Register A into Register L.
4270
GOSUB to 4275H to fetch the high byte of the transfer address into Register A.
4273
LD H,A 67
Copy the high byte from Register A into Register H: Register Pair HL = the transfer address of SYS0/SYS.
4274
JP (HL) E9
JUMP to the address in Register Pair HL, the transfer address of SYS0/SYS, which now runs with interrupts still disabled.

4275H - Fetch the Next Byte of SYS0/SYS

Returns the next byte of the file in Register A. The read position is kept in the alternate registers: Register Pair BC' = the buffer pointer, Register D' = the track, Register E' = the sector. When the buffer is used up the next sector is read into 4D00H, and the sector number runs on to the next track after sector 9.

4275
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set: Register Pair BC = the buffer pointer, Register Pair DE = the track and sector of the next read. Called by 423EH and the other loader rows.
4276
INC C 0C
INCrement Register C (the low byte of the buffer pointer) by 1: the Z FLAG is set when it wraps from FFH to 00H, the buffer used up.
4277
If the NZ FLAG is set (bytes left in the buffer), JUMP to 428DH to fetch the byte at (BC).
4279
PUSH BC C5
Save Register Pair BC (4D00H, the start of the buffer) onto the stack, as the read moves Register Pair BC.
427A
LD A,01H 3E 01
Load Register A with 01H, the select bit of drive 0.
427C
LD (37E1H),A 32 E1 37
Store Register A (01H) into the drive select latch at 37E1H again before each sector read: drive 0 stays selected and its motor keeps turning while SYS0/SYS loads.
427F
GOSUB to 42AAH to read track Register D, sector Register E into (BC) (Register Pair BC = 4D00H); the Z FLAG is set when the sector was read.
4282
If the NZ FLAG is set (the sector could not be read in two tries), JUMP to 4290H to show DISK ERROR and halt.
4284
POP BC C1
Restore Register Pair BC (4D00H, the start of the buffer) from the stack; the read left it at 4E00H.
4285
INC E 1C
INCrement Register E (the sector) by 1, to the next sector of SYS0/SYS.
4286
LD A,E 7B
Copy the sector from Register E into Register A.
4287
SUB 0AH D6 0A
SUBtract 0AH from Register A (the sector): the Z FLAG is set after sector 9, the last of a track, and Register A = 00H.
4289
If the NZ FLAG is set (still on the track), JUMP to 428DH to fetch the first byte.
428B
LD E,A 5F
Copy Register A (00H) into Register E: sector 0 of the next track. The sectors are read one after the other from the first extent's start; the other extents of the entry are not looked at.
428C
INC D 14
INCrement Register D (the track) by 1, to the next track.
428D
LD A,(BC) 0A
Fetch the next byte from (BC) (Register Pair BC = the buffer pointer) into Register A. 4277H and 4289H jump here.
428E
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set: the loader's Register Pairs BC, DE and HL are back, Register A = the byte.
428F
RET C9
RETURN to the caller with the byte in Register A.

4290H - Show an Error and Halt

4290H shows DISK ERROR; 4293H shows the message at Register Pair HL (NO SYSTEM from 4228H). Then waits for ENTER and halts.

4290
LD HL,42F1H 21 F1 42
Point Register Pair HL to 42F1H, the message DISK ERROR. 421EH and 4282H jump here.
4293
GOSUB to 429AH to display the message at Register Pair HL (42F1H, or 42E5H for NO SYSTEM from 4228H).
4296
GOSUB to ROM routine at 0040H, the line input, to wait for a line to be typed into the message's own bytes at Register Pair HL, up to Register B characters (Register B = 4DH or 4EH, the high byte the sector read left in Register Pair BC); only ENTER or BREAK ends it.
4299
HALT 76
HALT with interrupts disabled since 4203H: the processor stops until RESET is pressed.

429AH - Display Text

Register Pair HL = the text. Shows each character through the ROM up to and including 0DH, or up to 03H without showing it, and returns with Register Pair HL unchanged.

429A
PUSH HL E5
Save Register Pair HL (the text) onto the stack, so the caller gets it back. Register Pair HL = the text, which ends with 0DH (shown) or 03H (not shown). Called by 420AH and 4293H.
429B
LD A,(HL) 7E
Display Loop
Fetch the next character from (HL) (Register Pair HL = the text pointer) into Register A. 42A6H loops back here.
429C
CP 03H FE 03
Compare Register A against 03H, the end of a text that leaves the cursor after it.
429E
If the Z FLAG is set (03H), JUMP to 42A8H to return without showing it.
42A0
GOSUB to ROM routine at 0033H to display the character in Register A at the cursor; it leaves Register A unchanged and Register Pair DE = 401DH, the display's control block.
42A3
INC HL 23
INCrement Register Pair HL (the text pointer) by 1.
42A4
CP 0DH FE 0D
Compare Register A (the character just shown) against 0DH, ENTER, the other end of a text.
42A6
Display Loop End
If the NZ FLAG is set, LOOP BACK to 429BH for the next character.
42A8
POP HL E1
Restore Register Pair HL (the start of the text) from the stack. 429EH jumps here.
42A9
RET C9
RETURN to the caller with Register Pair HL = the start of the text.

42AAH - Read a Sector

Register D = track, Register E = sector, Register Pair BC = the buffer. Seeks to the track and reads the sector, trying twice. Returns the Z FLAG when read, or the NZ FLAG with Register A = the status AND 5CH.

42AA
PUSH BC C5
Save Register Pair BC (the buffer address) onto the stack for a second try. Register D = track, Register E = sector, Register Pair BC = the buffer. Called by 421BH and 427FH.
42AB
GOSUB to 42B2H for the first try to read track Register D, sector Register E into (BC); it returns the Z FLAG when the read succeeded.
42AE
POP HL E1
Restore the buffer address from the stack into Register Pair HL.
42AF
RET Z C8
If the Z FLAG is set (read), RETURN to the caller.
42B0
LD B,H 44
Copy Register H (the high byte of the buffer address) into Register B.
42B1
LD C,L 4D
Copy Register L (the low byte of the buffer address) into Register C: Register Pair BC = the buffer again, and the second try follows; its result goes to the caller.
42B2
LD (37EEH),DE ED 53 EE 37
One Try
Store Register Pair DE into 37EEH-37EFH: Register E (the sector) into the sector register at 37EEH, Register D (the track) into the data register at 37EFH, the track for the SEEK. 42ABH calls here.
42B6
LD HL,37ECH 21 EC 37
Point Register Pair HL to 37ECH, the controller's command and status register.
42B9
LD (HL),1BH 36 1B
Store 1BH into (HL) (Register Pair HL = 37ECH): SEEK, loading the head, to the track in the data register.
1771 FDC Command: 1BH (00011011)Function Description
Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0Summary of Bits
00011011Command=Seek (bits 7-4 = 0001)
h = 1: head load and settle delay
V = 0: no verify
r1 r0 = 11: 15 ms stepping rate
42BB
PUSH AF F5
Save Register Pair AF onto the stack: PUSH and POP pass time while the controller sets its BUSY bit.
42BC
POP AF F1
Restore Register Pair AF from the stack; with 42BBH, 42BDH and 42BEH a short delay after the command.
42BD
PUSH AF F5
Save Register Pair AF onto the stack, the second PUSH of the delay after the command.
42BE
POP AF F1
Restore Register Pair AF from the stack, the end of the delay after the SEEK command.
42BF
LD A,(HL) 7E
Wait for the Seek
Fetch the controller's status from (HL) (Register Pair HL = 37ECH) into Register A. 42C1H loops back here.
42C0
RRCA 0F
Rotate Register A (the status) right, circularly: bit 0, BUSY, goes into the CARRY FLAG.
42C1
If the CARRY FLAG is set (BUSY), LOOP BACK to 42BFH until the SEEK ends.
42C3
LD (HL),88H 36 88
Store 88H into (HL) (Register Pair HL = 37ECH): READ SECTOR for the sector in the sector register.
1771 FDC Command: 88H (10001000)Function Description
Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0Summary of Bits
10001000Command=Read Sector (bits 7-5 = 100)
m = 0: one sector
b = 1: IBM sector length
E = 0: no head load delay
42C5
PUSH DE D5
Save Register Pair DE (the track and sector) onto the stack, as Register Pair DE serves as the pointer to the data register.
42C6
LD DE,37EFH 11 EF 37
Point Register Pair DE to 37EFH, the controller's data register.
42C9
PUSH BC C5
Save Register Pair BC (the buffer pointer) onto the stack; with 42CAH a delay after the command.
42CA
POP BC C1
Restore Register Pair BC (the buffer pointer) from the stack, the end of the delay after READ SECTOR.
42CB
JUMP to 42D8H, which goes on to 42D0H to look at the status.
42CD
RRCA 0F
Not Ready for a Byte
Rotate Register A (the status) right, circularly: bit 0, BUSY, goes into the CARRY FLAG. 42D3H jumps here.
42CE
If the NO CARRY FLAG is set (no longer BUSY: the read has ended), JUMP to 42DAH to check the result.
42D0
LD A,(HL) 7E
Read Loop
Fetch the controller's status from (HL) (Register Pair HL = 37ECH) into Register A. 42D8H jumps here.
42D1
BIT 1,A CB 4F
Test bit 1 of Register A (the status), DATA REQUEST: set when a byte is waiting in the data register.
42D3
If the Z FLAG is set (no byte waiting), JUMP to 42CDH to see whether the read is still going on.
42D5
LD A,(DE) 1A
Fetch the byte from the data register at (DE) (Register Pair DE = 37EFH) into Register A.
42D6
LD (BC),A 02
Store the byte from Register A into (BC) (Register Pair BC = the buffer pointer).
42D7
INC BC 03
INCrement Register Pair BC (the buffer pointer) by 1.
42D8
Read Loop End
JUMP to 42D0H for the next status check. 42CBH jumps here.
42DA
LD A,(HL) 7E
Fetch the controller's final status from (HL) (Register Pair HL = 37ECH) into Register A. 42CEH jumps here.
42DB
AND 5CH E6 5C
AND Register A with 5CH, keeping the error bits of a read: the Z FLAG is set when the read succeeded.
1771 Status after Read Sector, AND 5CHFunction Description
Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0Summary of Bits
01011100Bits kept by AND 5CH:
6: F9H or F8H data mark
4: record not found
3: CRC error
2: lost data
Bit 5 (FAH or F8H mark) is not kept
42DD
POP DE D1
Restore Register Pair DE (the track and sector) from the stack.
42DE
RET Z C8
If the Z FLAG is set (no error), RETURN with Register A = 00H.
42DF
LD (HL),D0H 36 D0
Store D0H into (HL) (Register Pair HL = 37ECH): FORCE INTERRUPT, stopping the controller after the error.
1771 FDC Command: D0H (11010000)Function Description
Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0Summary of Bits
11010000Command=Force Interrupt (bits 7-4 = 1101)
I3-I0 = 0000: end the command, no interrupt
42E1
RET C9
RETURN with the NZ FLAG set and Register A = the error bits of the status.

42E2H - The Texts of the Boot Sector

The screen clear and the two messages, shown through 429AH.

42E2-42E4
DEFB 1CH, 1FH, 03H 1C 1F 03
Shown by 4207H: 1CH moves the cursor to the top left, 1FH erases to the end of the screen, 03H ends the text.
42E5-42F0
DEFB 17H, E8H / DEFM "NO SYSTEM" / DEFB 0DH 17 E8 4E 4F 20 53 59 53 54 45 4D 0D
Shown by 4228H: 17H selects 32 characters per line, E8H gives 40 spaces (C0H plus 40), then the text and ENTER.
42F1-42FD
DEFB 17H, E8H / DEFM "DISK ERROR" / DEFB 0DH 17 E8 44 49 53 4B 20 45 52 52 4F 52 0D
Shown by 4290H: 17H selects 32 characters per line, E8H gives 40 spaces (C0H plus 40), then the text and ENTER.
42FE-42FF
DEFB EBH, 5FH EB 5F
Bytes FEH and FFH of the sector, not used by the code: EBH and 5FH.

Sector 1, File Bytes 0100H-01FFH

Sector 1 of BOOT/SYS on track 0. The directory entry of BOOT/SYS (written by FORMAT/CMD from 5780H) gives it granule 0, track 0 sectors 0-4, with the ending record number 5, so this sector is part of the file. The ROM loads only sector 0, the boot code never reads this sector, and SYS0/SYS reads sector 0 of track 0 for its byte 2 (4B35H) but not this one. The bytes have no use in TRSDOS 2.3; the rows show them with their offset in the file.

0100-010F
DEFB 01H, 00H, 00H, 4EH, 58H, 5AH, 51H, 6DH, 60H, 6BH, 62H, 69H, 6CH, 67H, 6EH, 65H 01 00 00 4E 58 5A 51 6D 60 6B 62 69 6C 67 6E 65
Sector 1, bytes 00H-0FH (file offset 0100H-010FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0110-011F
DEFB 68H, 63H, 6AH, 61H, 74H, 7FH, 76H, 7DH, 70H, 7BH, 72H, 79H, 7CH, 77H, 7EH, 75H 68 63 6A 61 74 7F 76 7D 70 7B 72 79 7C 77 7E 75
Sector 1, bytes 10H-1FH (file offset 0110H-011FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0120-012F
DEFB 78H, 73H, 7AH, 71H, 44H, 4FH, 46H, 4DH, 40H, 41H, 42H, 43H, 4CH, 23H, 4EH, 4FH 78 73 7A 71 44 4F 46 4D 40 41 42 43 4C 23 4E 4F
Sector 1, bytes 20H-2FH (file offset 0120H-012FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0130-013F
DEFB 27H, 49H, 4AH, 3FH, 54H, 55H, 3FH, 57H, 50H, 32H, 52H, 53H, 39H, 5DH, 5EH, 5EH 27 49 4A 3F 54 55 3F 57 50 32 52 53 39 5D 5E 5E
Sector 1, bytes 30H-3FH (file offset 0130H-013FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0140-014F
DEFB 58H, 59H, 5AH, 5BH, 24H, 2FH, 26H, 2DH, DDH, 2BH, 22H, 29H, 2CH, 2DH, 5AH, 47H 58 59 5A 5B 24 2F 26 2D DD 2B 22 29 2C 2D 5A 47
Sector 1, bytes 40H-4FH (file offset 0140H-014FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0150-015F
DEFB 41H, 5AH, 2AH, 44H, 44H, 50H, 44H, 56H, 44H, 58H, 5CH, 54H, 3CH, 4EH, 47H, 4CH 41 5A 2A 44 44 50 44 56 44 58 5C 54 3C 4E 47 4C
Sector 1, bytes 50H-5FH (file offset 0150H-015FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0160-016F
DEFB 4CH, 5CH, 57H, 3BH, 73H, 64H, 75H, 07H, 00H, 0BH, 02H, 09H, 0CH, 69H, 6BH, 7CH 4C 5C 57 3B 73 64 75 07 00 0B 02 09 0C 69 6B 7C
Sector 1, bytes 60H-6FH (file offset 0160H-016FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0170-017F
DEFB 61H, 6EH, 64H, 6EH, 70H, 15H, 74H, 6EH, 10H, 70H, 7CH, 77H, 1CH, 74H, 6DH, 1FH 61 6E 64 6E 70 15 74 6E 10 70 7C 77 1C 74 6D 1F
Sector 1, bytes 70H-7FH (file offset 0170H-017FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0180-018F
DEFB 6CH, 71H, 7FH, 1BH, 97H, 8AH, 8AH, 82H, E0H, EBH, E2H, E9H, ECH, EDH, EEH, 9FH 6C 71 7F 1B 97 8A 8A 82 E0 EB E2 E9 EC ED EE 9F
Sector 1, bytes 80H-8FH (file offset 0180H-018FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0190-019F
DEFB 9AH, 86H, 9AH, 8EH, 86H, 81H, 8FH, F7H, 9FH, 97H, F2H, 87H, 9DH, 93H, 9AH, 86H 9A 86 9A 8E 86 81 8F F7 9F 97 F2 87 9D 93 9A 86
Sector 1, bytes 90H-9FH (file offset 0190H-019FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
01A0-01AF
DEFB F8H, 9AH, 95H, 89H, B4H, CBH, C6H, C7H, C0H, CBH, C2H, C9H, 31H, C7H, CEH, C5H F8 9A 95 89 B4 CB C6 C7 C0 CB C2 C9 31 C7 CE C5
Sector 1, bytes A0H-AFH (file offset 01A0H-01AFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
01B0-01BF
DEFB C8H, C9H, ABH, A7H, B8H, D5H, BFH, B9H, B6H, BEH, A0H, BEH, BDH, A9H, B7H, B0H C8 C9 AB A7 B8 D5 BF B9 B6 BE A0 BE BD A9 B7 B0
Sector 1, bytes B0H-BFH (file offset 01B0H-01BFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
01C0-01CF
DEFB B6H, D9H, B9H, B4H, CAH, D1H, C7H, CEH, CEH, C4H, C6H, A3H, ACH, A7H, AEH, A5H B6 D9 B9 B4 CA D1 C7 CE CE C4 C6 A3 AC A7 AE A5
Sector 1, bytes C0H-CFH (file offset 01C0H-01CFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
01D0-01DF
DEFB A8H, A9H, C2H, CEH, C6H, D0H, DFH, D9H, B0H, D8H, C1H, B3H, CCH, CFH, D1H, CFH A8 A9 C2 CE C6 D0 DF D9 B0 D8 C1 B3 CC CF D1 CF
Sector 1, bytes D0H-DFH (file offset 01D0H-01DFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
01E0-01EF
DEFB CAH, D0H, DFH, CFH, E5H, F7H, FFH, 87H, E1H, EFH, E6H, 83H, 8CH, 87H, 8EH, 85H CA D0 DF CF E5 F7 FF 87 E1 EF E6 83 8C 87 8E 85
Sector 1, bytes E0H-EFH (file offset 01E0H-01EFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
01F0-01FF
DEFB 88H, 89H, E7H, FEH, E7H, E1H, 96H, F9H, FFH, E5H, 92H, F1H, F9H, 9DH, ECH, FAH 88 89 E7 FE E7 E1 96 F9 FF E5 92 F1 F9 9D EC FA
Sector 1, bytes F0H-FFH (file offset 01F0H-01FFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.

Sector 2, File Bytes 0200H-02FFH

Sector 2 of BOOT/SYS on track 0. The directory entry of BOOT/SYS (written by FORMAT/CMD from 5780H) gives it granule 0, track 0 sectors 0-4, with the ending record number 5, so this sector is part of the file. The ROM loads only sector 0, the boot code never reads this sector, and SYS0/SYS reads sector 0 of track 0 for its byte 2 (4B35H) but not this one. The bytes have no use in TRSDOS 2.3; the rows show them with their offset in the file.

0200-020F
DEFB E8H, EBH, 01H, CFH, FEH, 4EH, F5H, FFH, 11H, 06H, 03H, 03H, 60H, 0EH, 10H, 63H E8 EB 01 CF FE 4E F5 FF 11 06 03 03 60 0E 10 63
Sector 2, bytes 00H-0FH (file offset 0200H-020FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0210-021F
DEFB 6CH, 67H, 6EH, 65H, 68H, 69H, 0EH, 02H, 07H, 01H, 04H, 1EH, 12H, 04H, 06H, 16H 6C 67 6E 65 68 69 0E 02 07 01 04 1E 12 04 06 16
Sector 2, bytes 10H-1FH (file offset 0210H-021FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0220-022F
DEFB 18H, 7DH, 17H, 11H, 78H, 0EH, 12H, 14H, 28H, 20H, 46H, 28H, 32H, 41H, 2BH, 2DH 18 7D 17 11 78 0E 12 14 28 20 46 28 32 41 2B 2D
Sector 2, bytes 20H-2FH (file offset 0220H-022FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0230-023F
DEFB 4CH, 47H, 4EH, 45H, 48H, 49H, 3AH, 2AH, 26H, 21H, 56H, 20H, 39H, 25H, 3AH, 3CH 4C 47 4E 45 48 49 3A 2A 26 21 56 20 39 25 3A 3C
Sector 2, bytes 30H-3FH (file offset 0230H-023FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0240-024F
DEFB 29H, 29H, 5EH, 2FH, 2AH, 30H, 35H, 29H, 24H, 52H, 54H, 4EH, 54H, 55H, 47H, 4DH 29 29 5E 2F 2A 30 35 29 24 52 54 4E 54 55 47 4D
Sector 2, bytes 40H-4FH (file offset 0240H-024FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0250-025F
DEFB 2CH, 27H, 2EH, 25H, 28H, 29H, 49H, 44H, 5AH, 46H, 53H, 59H, 44H, 31H, 54H, 41H 2C 27 2E 25 28 29 49 44 5A 46 53 59 44 31 54 41
Sector 2, bytes 50H-5FH (file offset 0250H-025FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0260-026F
DEFB 53H, 50H, 3EH, 4BH, 59H, 57H, 5EH, 42H, 04H, 66H, 69H, 75H, 70H, 0FH, 02H, 03H 53 50 3E 4B 59 57 5E 42 04 66 69 75 70 0F 02 03
Sector 2, bytes 60H-6FH (file offset 0260H-026FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0270-027F
DEFB 0CH, 07H, 0EH, 05H, 08H, 09H, 0AH, 0BH, 7BH, 7BH, 73H, 17H, 10H, 65H, 73H, 7DH 0C 07 0E 05 08 09 0A 0B 7B 7B 73 17 10 65 73 7D
Sector 2, bytes 70H-7FH (file offset 0270H-027FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0280-028F
DEFB 78H, 64H, 1EH, 1FH, 7BH, 7CH, 74H, 6FH, 81H, 97H, E6H, E7H, E0H, E1H, E2H, E3H 78 64 1E 1F 7B 7C 74 6F 81 97 E6 E7 E0 E1 E2 E3
Sector 2, bytes 80H-8FH (file offset 0280H-028FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0290-029F
DEFB ECH, E7H, EEH, E5H, E8H, E9H, EAH, EBH, 92H, 9AH, 84H, 83H, F0H, 86H, 9DH, 81H EC E7 EE E5 E8 E9 EA EB 92 9A 84 83 F0 86 9D 81
Sector 2, bytes 90H-9FH (file offset 0290H-029FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
02A0-02AF
DEFB 88H, 95H, FEH, FFH, 8CH, 81H, F4H, FBH, C4H, D2H, D0H, D6H, D0H, D3H, C2H, C3H 88 95 FE FF 8C 81 F4 FB C4 D2 D0 D6 D0 D3 C2 C3
Sector 2, bytes A0H-AFH (file offset 02A0H-02AFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
02B0-02BF
DEFB CCH, C7H, CEH, C5H, C8H, C3H, CAH, C1H, D4H, DFH, D6H, DDH, D0H, DBH, D2H, D9H CC C7 CE C5 C8 C3 CA C1 D4 DF D6 DD D0 DB D2 D9
Sector 2, bytes B0H-BFH (file offset 02B0H-02BFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
02C0-02CF
DEFB DCH, D7H, DEH, D5H, D8H, D3H, DAH, D1H, A4H, AFH, A6H, ADH, A0H, ABH, A2H, A9H DC D7 DE D5 D8 D3 DA D1 A4 AF A6 AD A0 AB A2 A9
Sector 2, bytes C0H-CFH (file offset 02C0H-02CFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
02D0-02DF
DEFB ACH, A7H, 8DH, 01H, 18H, EAH, 4FH, 3AH, FFH, 38H, 47H, 21H, 00H, 4EH, 7EH, A8H AC A7 8D 01 18 EA 4F 3A FF 38 47 21 00 4E 7E A8
Sector 2, bytes D0H-DFH (file offset 02D0H-02DFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
02E0-02EF
DEFB ADH, FEH, 03H, 28H, 06H, CDH, 33H, 00H, 23H, 18H, F3H, 18H, FEH, 02H, 02H, EAH AD FE 03 28 06 CD 33 00 23 18 F3 18 FE 02 02 EA
Sector 2, bytes E0H-EFH (file offset 02E0H-02EFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
02F0-02FF
DEFB 4FH, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H 4F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Sector 2, bytes F0H-FFH (file offset 02F0H-02FFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.

Sector 3, File Bytes 0300H-03FFH

Sector 3 of BOOT/SYS on track 0. The directory entry of BOOT/SYS (written by FORMAT/CMD from 5780H) gives it granule 0, track 0 sectors 0-4, with the ending record number 5, so this sector is part of the file. The ROM loads only sector 0, the boot code never reads this sector, and SYS0/SYS reads sector 0 of track 0 for its byte 2 (4B35H) but not this one. The bytes have no use in TRSDOS 2.3; the rows show them with their offset in the file.

0300-030F
DEFB FFH, FFH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH FF FF FC FC FC FC FC FC FC FC FC FC FC FC FC FC
Sector 3, bytes 00H-0FH (file offset 0300H-030FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0310-031F
DEFB FFH, FFH, FFH, FFH, FFH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH FF FF FF FF FF FC FC FC FC FC FC FC FC FC FC FC
Sector 3, bytes 10H-1FH (file offset 0310H-031FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0320-032F
DEFB FCH, FCH, FCH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FC FC FC FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 3, bytes 20H-2FH (file offset 0320H-032FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0330-033F
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 3, bytes 30H-3FH (file offset 0330H-033FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0340-034F
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 3, bytes 40H-4FH (file offset 0340H-034FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0350-035F
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 3, bytes 50H-5FH (file offset 0350H-035FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0360-036F
DEFB FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC
Sector 3, bytes 60H-6FH (file offset 0360H-036FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0370-037F
DEFB FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC
Sector 3, bytes 70H-7FH (file offset 0370H-037FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0380-038F
DEFB FCH, FCH, FCH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FC FC FC FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 3, bytes 80H-8FH (file offset 0380H-038FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0390-039F
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 3, bytes 90H-9FH (file offset 0390H-039FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
03A0-03AF
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 3, bytes A0H-AFH (file offset 03A0H-03AFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
03B0-03BF
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 3, bytes B0H-BFH (file offset 03B0H-03BFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
03C0-03CF
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, 21H, 00H, 00H, E0H, 42H FF FF FF FF FF FF FF FF FF FF FF 21 00 00 E0 42
Sector 3, bytes C0H-CFH (file offset 03C0H-03CFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
03D0-03DF
DEFB 54H, 52H, 53H, 44H, 4FH, 53H, 20H, 20H, 30H, 34H, 2FH, 31H, 35H, 2FH, 37H, 39H 54 52 53 44 4F 53 20 20 30 34 2F 31 35 2F 37 39
Sector 3, bytes D0H-DFH (file offset 03D0H-03DFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
03E0-03EF
DEFB 0DH, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
Sector 3, bytes E0H-EFH (file offset 03E0H-03EFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
03F0-03FF
DEFB 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
Sector 3, bytes F0H-FFH (file offset 03F0H-03FFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.

Sector 4, File Bytes 0400H-04FFH

Sector 4 of BOOT/SYS on track 0. The directory entry of BOOT/SYS (written by FORMAT/CMD from 5780H) gives it granule 0, track 0 sectors 0-4, with the ending record number 5, so this sector is part of the file. The ROM loads only sector 0, the boot code never reads this sector, and SYS0/SYS reads sector 0 of track 0 for its byte 2 (4B35H) but not this one. The bytes have no use in TRSDOS 2.3; the rows show them with their offset in the file.

0400-040F
DEFB FFH, FFH, FFH, FFH, FFH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH FF FF FF FF FF FC FC FC FC FC FC FC FC FC FC FC
Sector 4, bytes 00H-0FH (file offset 0400H-040FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0410-041F
DEFB FFH, FFH, FFH, FFH, FFH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH FF FF FF FF FF FC FC FC FC FC FC FC FC FC FC FC
Sector 4, bytes 10H-1FH (file offset 0410H-041FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0420-042F
DEFB FCH, FCH, FCH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FC FC FC FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 4, bytes 20H-2FH (file offset 0420H-042FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0430-043F
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 4, bytes 30H-3FH (file offset 0430H-043FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0440-044F
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 4, bytes 40H-4FH (file offset 0440H-044FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0450-045F
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 4, bytes 50H-5FH (file offset 0450H-045FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0460-046F
DEFB FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC
Sector 4, bytes 60H-6FH (file offset 0460H-046FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0470-047F
DEFB FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH, FCH FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC FC
Sector 4, bytes 70H-7FH (file offset 0470H-047FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0480-048F
DEFB FCH, FCH, FCH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FC FC FC FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 4, bytes 80H-8FH (file offset 0480H-048FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
0490-049F
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 4, bytes 90H-9FH (file offset 0490H-049FH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
04A0-04AF
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 4, bytes A0H-AFH (file offset 04A0H-04AFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
04B0-04BF
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
Sector 4, bytes B0H-BFH (file offset 04B0H-04BFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
04C0-04CF
DEFB FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, FFH, 21H, 00H, 00H, E0H, 42H FF FF FF FF FF FF FF FF FF FF FF 21 00 00 E0 42
Sector 4, bytes C0H-CFH (file offset 04C0H-04CFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
04D0-04DF
DEFB 54H, 52H, 53H, 44H, 4FH, 53H, 20H, 20H, 30H, 34H, 2FH, 31H, 35H, 2FH, 37H, 39H 54 52 53 44 4F 53 20 20 30 34 2F 31 35 2F 37 39
Sector 4, bytes D0H-DFH (file offset 04D0H-04DFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
04E0-04EF
DEFB 0DH, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H 0D 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
Sector 4, bytes E0H-EFH (file offset 04E0H-04EFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.
04F0-04FF
DEFB 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H, 20H 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
Sector 4, bytes F0H-FFH (file offset 04F0H-04FFH): not used by any TRSDOS 2.3 code; BACKUP/CMD copies them with the rest of track 0, and the file has them because its directory entry gives it five sectors.