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

Page Customization

Introduction/Summary

NEWDOS/80 v2.0 BOOT/SYS Disassembly - Boot Sector and System Data Sector (Model I)

BOOT/SYS is the first file on every NEWDOS/80 v2.0 diskette: the first five sectors of track 0 (one granule), directory entry code 00H. Only its first three sectors hold data. Sector 0 is the boot sector, which the Model I ROM's bootstrap (069FH) reads into 4200H-42FFH and jumps to at 4200H; sector 1 is an identical copy; sector 2 is the system data sector, which holds the PDRIVE table and the SYSTEM options.

The boot sector's only job is to load SYS0/SYS, which starts at track 0, sector 5, right after BOOT/SYS. It reads SYS0/SYS sector by sector into a buffer at 5100H-51FFH and processes it as a load module: a type 01H record is a block of bytes to be stored at its load address, a type 02H record is the transfer address, types 00H and 03H-1FH are skipped, and a type of 20H or more means the file is not a load module (NO SYS). When the transfer address is reached, the byte there must be A5H, which SYS0/SYS has at 4D00H; the boot sector then jumps to the byte after it, 4D01H, the start of SYS0's reset code. A sector that cannot be read in 10 tries gives ERROR. Both messages clear the screen and leave the computer looping until RESET is pressed.

The code uses both Z80 register sets. The main set (Register Pair HL) keeps the pointer into the sector buffer and the load address and count of the current record (Register Pairs DE and BC); the alternate set keeps the track and sector to read next (Register Pair DE') and, during a read, the FDC addresses and the try count. The EXX at 4255H switches to the disk set and the EXX at 42B6H switches back. The routine that fetches a byte (4252H) only increments Register L: when L wraps to 00H the buffer is used up and the next sector is read. This boot module is basically two main routines, and Cliff Ide treated them as such by use of the EXX register swap. In fact, Cliff uses the PUSH command only 3 times in this entire boot routine!

Another thing done here, more out of necessity than anything else, is to use the Model I memory locations for the Floppy Disk Controller (37ECH-37EFH) and the drive select latch (37E1H). The Model I didn't have ports so it couldn't be any other way (thanks to Eric Dittman for pointing this out), but it remains that by doing it this way only 1 opcode is needed to test and manipulate the controller, instead of 2 (for example BIT 1,(HL) on the status register). The first byte stored into the FDC, FEH, is not a 1771 command; as Blair Robbins has pointed out, on a Percom doubler it selects the single density controller.

SYS0/SYS's last load block runs to 51DAH, over the sector buffer at 5100H-51FFH. Running the loader on SYS0/SYS shows that every byte stored into 5100H-51DAH is stored after the buffer byte at that position has already been read, so the overlap does no harm. The stack at 41E0H and the boot code at 4200H-42FFH are not touched, since SYS0/SYS loads nothing between 4080H and 4307H.

The page shows all five sectors. Sector 0 is shown as code at 4200H-42FFH; sectors 1 to 4 are shown at the offsets their bytes have when read into the 4200H buffer (which is how SYS16 and SYS17 address the system data sector: 42A0H, 42F0H and so on).

The Five Sectors

SectorContents
0The boot sector (4200H-42FFH): the loader for SYS0/SYS, the messages ERROR and NO SYS, and bytes 02H (directory starting lump) and FDH-FFH (PDRIVE bytes +6, +2 and +7 of drive 0) used as data.
1An exact copy of sector 0. FORMAT writes the same image as sectors 0 and 1 (SYS6 6700H).
2The system data sector: PDRIVE records for drives 0-9 (bytes 00H-9FH, 16 bytes each), numeric SYSTEM options (A0H-A9H, D0H-D1H), the validity byte A5H (EFH) and the yes/no SYSTEM options (F0H-F1H, F8H-FAH). Read at reset by SYS0, and by SYS16 (PDRIVE), SYS17 (SYSTEM) and SYS6.
3, 4E5H in every byte; no data. They make BOOT/SYS one full granule (five sectors).

Bytes Filled In by FORMAT

FORMAT (SYS6) writes a boot sector image from 64BAH-65B9H with some bytes filled in for the drive being formatted. On this diskette the values are those of drive 0's PDRIVE record (35 tracks, 10 sectors per track, single density, standard interface).

Address
Size
Contents
4202H
1 byte
11H: the directory's starting lump (DDSL). Stepped over by the CP 11H at 4201H. SYS6 6797H stores it.
4208H
1 byte
FEH: the first byte written to the FDC (Percom single density). SYS6 6784H makes it FFH for a double density drive 0.
4210H
1 byte
00H: the value written to the FDC sector register, PDRIVE byte +6. SYS6 675FH stores it.
4212H-4213H
2 bytes
0005H: the first sector (05H) and track (00H) of SYS0/SYS, each raised by 1 when sectors or tracks are numbered from 1 (SYS6 6774H, 676FH).
4261H
1 byte
0AH: the sectors on one side of a track (SYS6 6791H).
42B0H
1 byte
0AH: the sectors per track (SYS6 678BH).
42B5H
1 byte
00H: the first sector number of a track, 01H when sectors are numbered from 1 (SYS6 6778H).
42FDH-42FFH
3 bytes
00H, 07H, 00H: PDRIVE bytes +6, +2 and +7 of the drive (SYS6 675CH, 67A6H, 6765H).

Variables

Memory used by the boot sector while it runs (it has no variables inside the sector itself).

Address
Size
Purpose
37E1H
1 byte
Drive select latch: 01H selects drive 0, 09H drive 0 on the second side (bit 3).
37ECH
1 byte
FDC command register (written) and status register (read): bit 7 not ready, 5 record type, 4 record not found, 3 CRC error, 2 lost data, 1 data request, 0 busy.
37EDH
1 byte
FDC track register, set to 0 at 420CH.
37EEH
1 byte
FDC sector register: the PDRIVE drive select byte at 420FH, then the sector to read (426DH).
37EFH
1 byte
FDC data register: the destination track of the Seek (426DH), then each byte read from the diskette.
41D6H-41DFH
10 bytes
The stack (Stack Pointer 41E0H): at most the return address into the loader, Register Pairs DE and BC saved during a read (425DH, 425EH) and the return addresses of 42CEH and 42D7H; at the end 4D01H, the entry of SYS0's reset code, pushed at 424AH.
5100H-51FFH
256 bytes
Sector buffer: the sector of SYS0/SYS being processed. Register Pair HL points into it; 4252H reads the next sector when Register L wraps to 00H.
RegisterUse
HLMain set: the buffer pointer (51FFH at the start, then 5100H-51FFH). Alternate set during a read: 37E1H, then 37ECH.
DEMain set: the load address of the current record. Alternate set: Register D = the track and Register E = the sector to read next; during a read 37EFH.
BCMain set: Register B = the record type being counted down, Register C = the bytes left in the record. Alternate set: Register B = tries left; during a read the buffer pointer.

Disassembly

4200H - Boot Sector: Entry and FDC Reset

The Model I ROM's bootstrap (069FH) reads track 0, sector 0 of the diskette in drive 0 into 4200H-42FFH and jumps to 4200H. Nothing is set up for this code: the registers hold whatever the ROM left in them, and interrupts are still enabled until 4203H.

4200
NOP 00
No operation. Byte 0 of the boot sector is 00H; SYS17 (WRDIRP) and DIRCHECK only accept a boot sector whose bytes 0 and 1 are 00H and FEH.
4201
CP 11H FE 11
Compare Register A (whatever the ROM left in it) against 11H. The result is never used: the instruction is there so that execution steps over byte 4202H, which is the data byte 11H (17), the directory's starting lump (DDSL). SYS0 (490AH, after a directory read error), SYS17 WRDIRP and DIRCHECK read the directory position from this byte; FORMAT (SYS6 6797H) stores it here.
4203
DI F3
Disable interrupts. No interrupt routine is installed yet, and the sector transfer loop at 4287H must not be interrupted, since the FDC data byte has to be taken within a few microseconds.
4204
LD HL,37ECH 21 EC 37
Point Register Pair HL to 37ECH, the memory-mapped command/status register of the FDC (Model I floppy disk controller at 37ECH-37EFH).
4207
LD (HL),FEH 36 FE
Store FEH into the FDC command register at Register Pair HL (37ECH). The 1771 has no command FEH; on a Percom doubler this byte selects the single density controller. FORMAT (SYS6 6784H) writes FFH here instead (double density) when drive 0 is a double density drive.
4209
LD (HL),D0H 36 D0
Store D0H into the FDC command register at Register Pair HL (37ECH): Force Interrupt with all four condition bits clear, which ends any command the ROM left running without generating an interrupt.
420B
INC HL 23
INCrement Register Pair HL from 37ECH to 37EDH, the FDC track register.
420C
LD (HL),00H 36 00
Store 00H into the FDC track register at Register Pair HL (37EDH): the head is on track 0, where the ROM read this sector.
420E
INC HL 23
INCrement Register Pair HL from 37EDH to 37EEH, the FDC sector register.
420F
LD (HL),00H 36 00
Store 00H into the FDC sector register at Register Pair HL (37EEH). The operand at 4210H is byte +6 of drive 0's PDRIVE record (the drive select byte that some interfaces read from the sector register to choose the density: 00H standard or Percom, 80H/C0H Omikron or LNW, 80H/A0H Radio Shack doubler); FORMAT (SYS6 675FH) stores it. It is 00H on this diskette.
4211
LD DE,0005H 11 05 00
Load Register Pair DE with 0005H: Register D = track 0 and Register E = sector 5, the first sector of SYS0/SYS (the sector after BOOT/SYS's five sectors). FORMAT (SYS6 676FH, 6774H) adds 1 to the track when tracks are numbered from 1 and 1 to the sector when sectors are numbered from 1.
4214
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set. The alternate Register Pair DE' now keeps the track and sector (0005H) and HL' holds 37EEH; the disk read at 4255H works in this set. The main set (Register Pairs BC, DE, HL) is now free for the loader.

4215H - Load SYS0/SYS Record by Record

SYS0/SYS is a load module: a sequence of records, each a type byte, a length byte and the data. Type 01H is a load block (two address bytes, then length minus 2 bytes of data), type 02H is the transfer address (two bytes); types 00H and 03H-1FH are skipped; a type of 20H or more means this is not a load module. The bytes come one at a time from the sector buffer at 5100H-51FFH through 4252H, which reads the next sector when the buffer is used up.

4215
LD SP,41E0H 31 E0 41
Load the Stack Pointer with 41E0H. The stack holds at most five words (41D6H-41DFH): the return address into the loader, Register Pairs DE and BC saved at 425DH/425EH, and the return addresses of 42CEH and 42D7H. SYS0/SYS loads nothing between 4080H and 4307H, so neither the stack nor this code at 4200H-42FFH is overwritten while it loads.
4218
LD HL,51FFH 21 FF 51
Point Register Pair HL to 51FFH, one byte before the sector buffer at 5100H. 4252H increments only Register L, so its first call turns 51FFH into 5100H with the Z FLAG set, and that makes it read the first sector (track 0, sector 5) into the buffer before fetching a byte.

Record Loop
Each pass reads one record header. Register Pair HL (main set) is the buffer pointer, the alternate Register Pair DE' the next sector to read.

421B
GOSUB to 4252H to fetch the next byte of SYS0/SYS from the buffer at Register Pair HL into Register A: the record type.
421E
CP 20H FE 20
Compare Register A (the record type) against 20H. If the type is 20H or more the NO CARRY FLAG is set: this is not a load module record.
4220
LD B,A 47
Copy Register A (the record type) into Register B. The two DJNZ at 422CH and 4240H count it down to tell type 01H and type 02H from the rest. LD does not change the flags of the CP above.
4221
If the NO CARRY FLAG is set (the record type in Register A is 20H or more, so the diskette's SYS0/SYS is not a NEWDOS/80 load module), JUMP to 424CH to display NO SYS.
4223
LD D,A 57
Copy Register A (the record type, 00H-1FH) into Register D. For a type 01H record Register D is replaced by the high byte of the load address at 4231H; for any other type it stays, so the bytes of a skipped record are stored at Register D x 256 + Register E, an address in the ROM (0000H-1FFFH), where the stores have no effect.
4224
GOSUB to 4252H to fetch the next byte into Register A: the record's length byte (00H means 256).
4227
LD C,A 4F
Copy Register A (the record length) into Register C, the count of bytes still to read in this record.
4228
GOSUB to 4252H to fetch the next byte into Register A: the first byte after the length (for type 01H and 02H records the low byte of the address).
422B
LD E,A 5F
Copy Register A (the first data byte, the low byte of the address) into Register E.
422C
DECrement Register B (the record type) and, if it is not 0 (the record is not type 01H), JUMP to 4240H to check for type 02H.

422EH - Type 01H: Copy a Load Block

Register E holds the low byte of the load address and Register C the record length. The block's data bytes are copied to their load address one by one.

422E
GOSUB to 4252H to fetch the next byte into Register A: the high byte of the load address.
4231
LD D,A 57
Copy Register A (the high byte of the load address) into Register D. Register Pair DE now holds the load address of this block.
4232
DEC C 0D
DECrement Register C (the record length) by 1 for the low address byte already read.
4233
DEC C 0D
DECrement Register C by 1 more for the high address byte. Register C now holds the number of data bytes (a length byte of 00H, 256, gives FEH, 254 data bytes).

Data Byte Loop
Register Pair HL = buffer pointer, Register Pair DE = load address, Register C = data bytes left. Also used by 4240H to skip the bytes of other record types.

4234
INC L 2C
INCrement Register L, the low byte of the buffer pointer in Register Pair HL. The Z FLAG is set when it wraps from FFH to 00H: the 256 bytes of the buffer at 5100H have all been used.
4235
If the Z FLAG is set (Register L wrapped, the buffer is used up), GOSUB to 4255H to read the next sector of SYS0/SYS into 5100H-51FFH. It returns with Register Pair HL = 5100H.
4238
LD A,(HL) 7E
Fetch the byte at Register Pair HL (the next data byte in the sector buffer) into Register A.
4239
LD (DE),A 12
Store Register A (the data byte) at the load address in Register Pair DE.
423A
INC DE 13
INCrement Register Pair DE, the load address, to the next byte of the block.
423B
DEC C 0D
DECrement Register C, the count of data bytes left in this record. 4240H enters here to skip the rest of a record of another type.
423C
If the NZ FLAG is set (Register C is not 0, bytes are left in the record), LOOP BACK to 4234H for the next byte.
423E
The record is finished: JUMP to 421BH to read the next record's type byte.

4240H - Not Type 01H: Transfer Address or Skip

Reached from 422CH with Register B = the record type minus 1, Register C = the record length and Register E = the first byte after the length.

4240
DECrement Register B (the record type minus 1) and, if it is not 0 (the record is not type 02H), JUMP to 423BH to count down Register C (the length, one byte already read) and pass over the rest of the record. Those bytes are stored at Register Pair DE, which points into the ROM (Register D = the type), so nothing in RAM changes.
4242
Type 02H: GOSUB to 4252H to fetch the next byte into Register A, the high byte of the transfer address.
4245
LD D,A 57
Copy Register A (the high byte) into Register D. Register Pair DE now holds SYS0/SYS's transfer address (4D00H).
4246
LD A,(DE) 1A
Fetch the byte at the transfer address in Register Pair DE into Register A. SYS0/SYS has A5H at 4D00H, its transfer address.
4247
CP A5H FE A5
Compare Register A (the byte at the transfer address) against A5H. The Z FLAG is set only if it is A5H, which marks the loaded file as SYS0/SYS.
4249
INC DE 13
INCrement Register Pair DE past the A5H marker to the first instruction of SYS0's reset code (4D01H). INC DE does not change the flags.
424A
PUSH DE D5
Save Register Pair DE (4D01H, the entry of SYS0's reset code) onto the stack, so that a RET jumps to it.
424B
RET Z C8
If the Z FLAG is set (the A5H marker was found), RETurn: the RET pops 4D01H from the stack and SYS0/SYS starts. The boot sector's work ends here.

424CH - NO SYS: SYS0/SYS Is Not a Load Module

Reached from 4221H (a record type of 20H or more) or by falling through from 424BH (no A5H at the transfer address).

424C
LD HL,42E5H 21 E5 42
Point Register Pair HL to 42E5H, the message clear screen + NO SYS, ended by 03H.
424F
JUMP to 42C3H to display the message at Register Pair HL and stop the computer there.

4252H - Fetch the Next Byte of SYS0/SYS

Returns in Register A the next byte of the sector buffer (5100H-51FFH) at Register Pair HL. When the buffer is used up it falls into 4255H, which reads the next sector first.

4252
INC L 2C
INCrement Register L, the low byte of the buffer pointer in Register Pair HL. The Z FLAG is set when it wraps to 00H: every byte of the buffer has been used (or this is the first call, with HL = 51FFH).
4253
LD A,(HL) 7E
Fetch the byte at Register Pair HL (the next byte in the buffer) into Register A. LD does not change the Z FLAG.
4254
RET NZ C0
If the NZ FLAG is set (Register L did not wrap, the byte in Register A is valid), RETurn to the caller with it. Otherwise fall into 4255H to read a sector first.

4255H - Read the Next Sector of SYS0/SYS into 5100H

Reads the sector named by the alternate Register Pair DE' (Register D = track, Register E = sector) of drive 0 into 5100H-51FFH, with up to 10 tries, then advances DE' to the following sector. Returns with the main register set restored, Register Pair HL = 5100H and Register A = the first byte of the sector.

4255
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set: Register Pair DE now holds the track (Register D) and sector (Register E) to read; the main set's buffer pointer (HL = 5100H) is kept in HL' until 42B6H.
4256
LD B,0AH 06 0A
Load Register B with 0AH (10), the number of tries for this sector.

Try Loop
Register B = tries left, Register Pair DE = track and sector. Each try selects drive 0, seeks and reads; a failed try restores the head to track 0 (42B9H) and comes back here.

4258
LD HL,37E1H 21 E1 37
Point Register Pair HL to 37E1H, the Model I drive select latch.
425B
LD (HL),01H 36 01
Store 01H into the drive select latch at Register Pair HL (37E1H): select drive 0, first side. This also starts the drive motors.
425D
PUSH DE D5
Save Register Pair DE (Register D = track, Register E = sector) onto the stack; Register E may be changed below for the second side, and 42A8H restores it.
425E
PUSH BC C5
Save Register Pair BC (Register B = tries left) onto the stack; Register Pair BC is used as the buffer pointer during the transfer, and 42A7H restores it.
425F
LD A,E 7B
Copy Register E (the sector number) into Register A.
4260
SUB 0AH D6 0A
SUBtract 0AH from Register A (the sector number). Self-Modifying Code
The operand at 4261H is the number of sectors on one side of a track, filled in by FORMAT (SYS6 6791H: the sectors per track, halved for a double sided drive). It is 0AH (10) on this diskette. If the sector number is below it the CARRY FLAG is set.
4262
If the CARRY FLAG is set (the sector in Register E is on the first side), JUMP to 4267H with the drive select latch left at 01H.
4264
LD E,A 5F
Copy Register A (the sector number minus the sectors per side) into Register E: the sector number on the second side.
4265
LD (HL),09H 36 09
Store 09H into the drive select latch at Register Pair HL (37E1H): drive 0 (bit 0) with bit 3 set, the side select for the second side of the diskette.
4267
LD HL,37ECH 21 EC 37
Point Register Pair HL to 37ECH, the FDC command/status register, for the rest of the try.
426A
GOSUB to 42CEH to wait (after a short delay) until the FDC status at Register Pair HL (37ECH) shows it is not busy, so that it accepts a new command. Register A returns the status, which is not used.
426D
LD (37EEH),DE ED 53 EE 37
Store Register Pair DE at 37EEH: Register E (the sector number) goes into the FDC sector register (37EEH) and Register D (the track) into the FDC data register (37EFH), which is where the Seek command takes the destination track from.
4271
LD (HL),1BH 36 1B
Store 1BH into the FDC command register at Register Pair HL (37ECH): Seek (0001), head load h = 1, no verify V = 0, stepping rate bits r1 r0 = 11 (the slowest rate). The head moves to the track in the data register.
4273
GOSUB to 42CEH to wait until the FDC at Register Pair HL (37ECH) is not busy: the seek is finished.
4276
LD (HL),88H 36 88
Store 88H into the FDC command register at Register Pair HL (37ECH): Read Sector (100), single record m = 0, b = 1 (IBM format sector length), no head settle delay E = 0. The sector number is in the sector register (37EEH).
4278
LD DE,37EFH 11 EF 37
Point Register Pair DE to 37EFH, the FDC data register, from which each byte read from the diskette is taken.
427B
LD BC,5100H 01 00 51
Point Register Pair BC to 5100H, the sector buffer, as the destination of the 256 bytes.
427E
GOSUB to 42D7H for a short delay, giving the FDC time to raise its busy bit for the new command before the status is tested.

Wait for the First Byte
The status bits kept are 7 (not ready), 1 (data request) and 0 (busy). The JP PO loops while exactly one (or three) of them is set; the usual exit is busy plus data request (two bits, even parity).

4281
LD A,(HL) 7E
Fetch the FDC status at Register Pair HL (37ECH) into Register A.
4282
AND 83H E6 83
AND Register A (the FDC status) with 83H, keeping bit 7 (not ready), bit 1 (data request) and bit 0 (busy). The P/V FLAG is set for an even number of 1 bits (parity even).
4284
If the PO FLAG is set (parity odd: only busy is set, the FDC is still looking for the sector), LOOP BACK to 4281H. Even parity (busy with data request, or no bit at all: the command has ended) goes on to 4287H.

Transfer Loop
Register Pair DE = 37EFH (data register), Register Pair BC = the next buffer byte, Register Pair HL = 37ECH (status). The data request test is repeated three times in a row so that the loop is short enough for the FDC's data rate.

4287
LD A,(DE) 1A
Fetch the byte waiting in the FDC data register at Register Pair DE (37EFH) into Register A.
4288
LD (BC),A 02
Store Register A (the byte from the diskette) into the sector buffer at Register Pair BC (5100H-51FFH).
4289
INC BC 03
INCrement Register Pair BC to the next byte of the sector buffer.
428A
BIT 1,(HL) CB 4E
Test bit 1 (data request) of the FDC status at Register Pair HL (37ECH). The NZ FLAG is set when the next byte is waiting in the data register.
428C
If the NZ FLAG is set (another byte is waiting), JUMP to 4287H to take it.
428F
BIT 1,(HL) CB 4E
Test bit 1 (data request) of the FDC status at Register Pair HL (37ECH) again.
4291
If the NZ FLAG is set (a byte is waiting), JUMP to 4287H to take it.
4294
BIT 1,(HL) CB 4E
Test bit 1 (data request) of the FDC status at Register Pair HL (37ECH) a third time.
4296
If the NZ FLAG is set (a byte is waiting), JUMP to 4287H to take it.
4298
BIT 0,(HL) CB 46
Test bit 0 (busy) of the FDC status at Register Pair HL (37ECH). The Z FLAG is set when the FDC is no longer busy: the read command has ended (finished or failed).
429A
If the Z FLAG is set (the FDC is not busy, the command is over), JUMP to 42A4H to check the final status.
429C
BIT 1,(HL) CB 4E
Test bit 1 (data request) of the FDC status at Register Pair HL (37ECH) once more.
429E
If the NZ FLAG is set (a byte is waiting), JUMP to 4287H to take it.
42A0
BIT 7,(HL) CB 7E
Test bit 7 (not ready) of the FDC status at Register Pair HL (37ECH). The Z FLAG is set while the drive is ready.
42A2
If the Z FLAG is set (the drive is ready and the command is still running), LOOP BACK to 428AH to keep testing for data requests. A drive that is not ready falls through and ends the try.

42A4H - End of the Read: Check the Status

Reached when the FDC is no longer busy (429AH) or the drive went not ready (42A2H). Register Pair HL = 37ECH; the stack holds the tries (Register Pair BC) and the track and sector (Register Pair DE).

42A4
LD A,(HL) 7E
Fetch the final FDC status at Register Pair HL (37ECH) into Register A.
42A5
LD (HL),D0H 36 D0
Store D0H into the FDC command register at Register Pair HL (37ECH): Force Interrupt with no condition, ending the command if the drive went not ready while it was running.
42A7
POP BC C1
Restore Register Pair BC from the stack (saved at 425EH): Register B = the tries left. The buffer pointer it held during the transfer is no longer needed.
42A8
POP DE D1
Restore Register Pair DE from the stack (saved at 425DH): Register D = track and Register E = sector as they were before the second side adjustment.
42A9
AND FCH E6 FC
AND Register A (the final FDC status) with FCH, keeping bits 7-2: not ready (7), record type (5, set for a sector written with a deleted or directory data mark), record not found (4), CRC error (3) and lost data (2). The Z FLAG is set only if none of them is set.
42AB
If the NZ FLAG is set (Register A shows an error), JUMP to 42B9H to restore the head and try again.
42AD
INC E 1C
INCrement Register E (the sector just read) to the next sector of SYS0/SYS.
42AE
LD A,E 7B
Copy Register E (the next sector number) into Register A.
42AF
SUB 0AH D6 0A
SUBtract 0AH from Register A (the next sector number). Self-Modifying Code
The operand at 42B0H is the number of sectors per track (both sides), filled in by FORMAT (SYS6 678BH). It is 0AH (10) on this diskette. The Z FLAG is set when the track is used up.
42B1
If the NZ FLAG is set (Register E is still a sector on this track), JUMP to 42B6H.
42B3
INC D 14
INCrement Register D, the track number, to the next track.
42B4
LD E,00H 1E 00
Load Register E with 00H, the first sector of the new track. Self-Modifying Code
FORMAT (SYS6 6778H) stores 01H in the operand at 42B5H when the drive's sectors are numbered from 1.
42B6
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set: the next track and sector go back into DE', and the main Register Pair HL is the buffer pointer again (5100H: Register L wrapped to 00H when the buffer ran out).
42B7
LD A,(HL) 7E
Fetch the first byte of the new sector at Register Pair HL (5100H) into Register A, the byte the caller of 4252H asked for.
42B8
RET C9
RETurn to the caller (421BH, 4224H, 4228H, 422EH or 4242H through 4252H, or 4235H) with Register A = the first byte of the sector just read.

42B9H - A Failed Try: Restore and Retry

Register B = the tries left, Register Pair DE = track and sector, Register Pair HL = 37ECH.

42B9
GOSUB to 42D7H for a short delay after the Force Interrupt at 42A5H, before the next command is written to the FDC at Register Pair HL (37ECH).
42BC
LD (HL),0BH 36 0B
Store 0BH into the FDC command register at Register Pair HL (37ECH): Restore (0000), head load h = 1, no verify V = 0, stepping rate r1 r0 = 11. The head goes back to track 0, so the next seek starts from a known track.
42BE
DECrement Register B (the tries left) and, if it is not 0, LOOP BACK to 4258H to select the drive and read the sector again. The restore is still running; 426AH waits for it.
42C0
LD HL,42DDH 21 DD 42
All 10 tries failed: point Register Pair HL to 42DDH, the message clear screen + ERROR, ended by 03H.

42C3H - Display a Message and Stop

Entered with Register Pair HL pointing to a message (42DDH ERROR or 42E5H NO SYS). The characters are displayed through the ROM up to the 03H that ends the message, and the computer then loops on that byte for ever; the user must press RESET.

42C3
LD A,(HL) 7E
Fetch the character at Register Pair HL (the next byte of the message) into Register A.
42C4
CP 03H FE 03
Compare Register A (the message byte) against 03H, the end of message byte. The Z FLAG is set at the end.
42C6
If the Z FLAG is set (Register A = 03H, the message is fully displayed), JUMP to 42C3H: Register Pair HL is not advanced, so this reads the same 03H again and again, stopping the computer here.
42C8
INC HL 23
INCrement Register Pair HL to the next character of the message.
42C9
GOSUB to the ROM routine at 0033H to display the character in Register A at the cursor (1CH homes the cursor and 1FH clears to the end of the screen). Register Pair HL is kept by the ROM.
42CC
LOOP BACK to 42C3H for the next character of the message at Register Pair HL.

42CEH - Wait Until the FDC Is Not Busy

Entered with Register Pair HL = 37ECH (the FDC status). Returns with Register A = the FDC status once bit 0 (busy) is clear.

42CE
GOSUB to 42D7H for a short delay, so that the FDC has set its busy bit for a command just written to Register Pair HL (37ECH).
42D1
BIT 0,(HL) CB 46
Test bit 0 (busy) of the FDC status at Register Pair HL (37ECH). The NZ FLAG is set while the FDC is busy.
42D3
If the NZ FLAG is set (the FDC is still busy), LOOP BACK to 42D1H to test again.
42D5
LD A,(HL) 7E
Fetch the FDC status at Register Pair HL (37ECH) into Register A for the caller.
42D6
RET C9
RETurn to the caller (426AH, 4273H or 42CEH's caller) with Register A = the FDC status.

42D7H - Short Delay

A fixed delay of six passes through a DEC/JR loop. Register A is used as the counter and returns 00H; the other registers and the memory are not touched.

42D7
LD A,06H 3E 06
Load Register A with 06H, the number of passes of the delay loop.
42D9
DEC A 3D
DECrement Register A, the delay count. The Z FLAG is set when it reaches 0.
42DA
If the NZ FLAG is set (Register A has not reached 0), LOOP BACK to 42D9H.
42DC
RET C9
RETurn to the caller with Register A = 00H and the Z FLAG set.

42DDH - Messages and the Rest of the Boot Sector (Data)

The two messages displayed by 42C3H, then the unused bytes of the sector and three bytes that FORMAT fills in from the drive's PDRIVE record.

42DD-42E4
DEFB 1CH, 1FH / DEFM "ERROR", 03H 1C 1F 45 52 52 4F 52 03
The disk error message (42C0H): 1CH homes the cursor, 1FH clears to the end of the screen (together they clear the screen), the text ERROR, and 03H, the end of message byte that 42C4H tests for.
42E5-42ED
DEFB 1CH, 1FH / DEFM "NO SYS", 03H 1C 1F 4E 4F 20 53 59 53 03
The NO SYS message (424CH): 1CH and 1FH clear the screen, then the text NO SYS and the end of message byte 03H.
42EE-42FC
DEFB 00H x 15 00 x 15
Not used by the boot code. In FORMAT's boot sector image (SYS6 65A8H-65B6H) these 15 bytes are not part of the file, so they are whatever was in memory; on this diskette they are zeros.
42FD
DEFB 00H 00
Byte FDH: byte +6 of drive 0's PDRIVE record (the drive select byte, 00H here), stored by FORMAT (SYS6 675CH). The same value is in the operand at 4210H.
42FE
DEFB 07H 07
Byte FEH: byte +2 of drive 0's PDRIVE record, stored by FORMAT (SYS6 67A6H). 07H = 0000 0111: TSR 3 (bits 0-1) and interface 1 (bits 2-4, TI letter A, the standard Model I interface).
42FF
DEFB 00H 00
Byte FFH: byte +7 of drive 0's PDRIVE record (the disk I/O flags), stored by FORMAT (SYS6 6765H). 00H: single density, tracks and sectors numbered from 0, single sided, 5 inch.

Sector 1: A Copy of the Boot Sector

The second sector of BOOT/SYS (track 0, sector 1). It holds exactly the same 256 bytes as sector 0: FORMAT writes its boot sector image (SYS6 64BAH) as both sector 0 and sector 1 of every diskette it formats (SYS6 6700H). The ROM reads only sector 0. The bytes are shown in rows of 32, at the offsets they have in the sector (4200H = byte 00H).

4200-421F
DEFB 00H, FEH, 11H, F3H, 21H, ECH, 37H, 36H, FEH, 36H, D0H, 23H, 36H, 00H, 23H, 36H, 00H, 11H, 05H, 00H, D9H, 31H, E0H, 41H, 21H, FFH, 51H, CDH, 52H, 42H, FEH, 20H 00 FE 11 F3 21 EC 37 36 FE 36 D0 23 36 00 23 36 00 11 05 00 D9 31 E0 41 21 FF 51 CD 52 42 FE 20
Bytes 00H-1FH of sector 1, equal byte for byte to bytes 00H-1FH of the boot sector (4200H-421FH in sector 0 above).
4220-423F
DEFB 47H, 30H, 29H, 57H, CDH, 52H, 42H, 4FH, CDH, 52H, 42H, 5FH, 10H, 12H, CDH, 52H, 42H, 57H, 0DH, 0DH, 2CH, CCH, 55H, 42H, 7EH, 12H, 13H, 0DH, 20H, F6H, 18H, DBH 47 30 29 57 CD 52 42 4F CD 52 42 5F 10 12 CD 52 42 57 0D 0D 2C CC 55 42 7E 12 13 0D 20 F6 18 DB
Bytes 20H-3FH of sector 1, equal byte for byte to bytes 20H-3FH of the boot sector (4220H-423FH in sector 0 above).
4240-425F
DEFB 10H, F9H, CDH, 52H, 42H, 57H, 1AH, FEH, A5H, 13H, D5H, C8H, 21H, E5H, 42H, C3H, C3H, 42H, 2CH, 7EH, C0H, D9H, 06H, 0AH, 21H, E1H, 37H, 36H, 01H, D5H, C5H, 7BH 10 F9 CD 52 42 57 1A FE A5 13 D5 C8 21 E5 42 C3 C3 42 2C 7E C0 D9 06 0A 21 E1 37 36 01 D5 C5 7B
Bytes 40H-5FH of sector 1, equal byte for byte to bytes 40H-5FH of the boot sector (4240H-425FH in sector 0 above).
4260-427F
DEFB D6H, 0AH, 38H, 03H, 5FH, 36H, 09H, 21H, ECH, 37H, CDH, CEH, 42H, EDH, 53H, EEH, 37H, 36H, 1BH, CDH, CEH, 42H, 36H, 88H, 11H, EFH, 37H, 01H, 00H, 51H, CDH, D7H D6 0A 38 03 5F 36 09 21 EC 37 CD CE 42 ED 53 EE 37 36 1B CD CE 42 36 88 11 EF 37 01 00 51 CD D7
Bytes 60H-7FH of sector 1, equal byte for byte to bytes 60H-7FH of the boot sector (4260H-427FH in sector 0 above).
4280-429F
DEFB 42H, 7EH, E6H, 83H, E2H, 81H, 42H, 1AH, 02H, 03H, CBH, 4EH, C2H, 87H, 42H, CBH, 4EH, C2H, 87H, 42H, CBH, 4EH, 20H, EFH, CBH, 46H, 28H, 08H, CBH, 4EH, 20H, E7H 42 7E E6 83 E2 81 42 1A 02 03 CB 4E C2 87 42 CB 4E C2 87 42 CB 4E 20 EF CB 46 28 08 CB 4E 20 E7
Bytes 80H-9FH of sector 1, equal byte for byte to bytes 80H-9FH of the boot sector (4280H-429FH in sector 0 above).
42A0-42BF
DEFB CBH, 7EH, 28H, E6H, 7EH, 36H, D0H, C1H, D1H, E6H, FCH, 20H, 0CH, 1CH, 7BH, D6H, 0AH, 20H, 03H, 14H, 1EH, 00H, D9H, 7EH, C9H, CDH, D7H, 42H, 36H, 0BH, 10H, 98H CB 7E 28 E6 7E 36 D0 C1 D1 E6 FC 20 0C 1C 7B D6 0A 20 03 14 1E 00 D9 7E C9 CD D7 42 36 0B 10 98
Bytes A0H-BFH of sector 1, equal byte for byte to bytes A0H-BFH of the boot sector (42A0H-42BFH in sector 0 above).
42C0-42DF
DEFB 21H, DDH, 42H, 7EH, FEH, 03H, 28H, FBH, 23H, CDH, 33H, 00H, 18H, F5H, CDH, D7H, 42H, CBH, 46H, 20H, FCH, 7EH, C9H, 3EH, 06H, 3DH, 20H, FDH, C9H, 1CH, 1FH, 45H 21 DD 42 7E FE 03 28 FB 23 CD 33 00 18 F5 CD D7 42 CB 46 20 FC 7E C9 3E 06 3D 20 FD C9 1C 1F 45
Bytes C0H-DFH of sector 1, equal byte for byte to bytes C0H-DFH of the boot sector (42C0H-42DFH in sector 0 above).
42E0-42FF
DEFB 52H, 52H, 4FH, 52H, 03H, 1CH, 1FH, 4EH, 4FH, 20H, 53H, 59H, 53H, 03H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H, 07H, 00H 52 52 4F 52 03 1C 1F 4E 4F 20 53 59 53 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 07 00
Bytes E0H-FFH of sector 1, equal byte for byte to bytes E0H-FFH of the boot sector (42E0H-42FFH in sector 0 above).

Sector 2: The System Data Sector (Data)

The third sector of BOOT/SYS (track 0, sector 2) holds the system data of the diskette: ten PDRIVE records, the numeric SYSTEM options, a validity byte and the yes/no SYSTEM options. It is read into the buffer at 4200H by SYS0's reset code (through the DOS FCB at 4480H, whose NEXT is sector 2), which copies the first 10 bytes of the records for drives 0-3 to 4371H-4398H and stores the options into the resident code; by SYS16 (PDRIVE) and SYS17 (SYSTEM), which change and rewrite it; and by SYS6 (6424H) when COPY or FORMAT need the PDRIVE data. The rows are shown at the addresses the bytes have in that buffer, which is how SYS16 and SYS17 address them (42A0H, 42F0H ...).

4200-420F
DEFB 11H, 23H, 07H, 23H, 0AH, 02H, 00H, 00H, 11H, 02H, 00H, 00H, 03H, 01H, 00H, 00H 11 23 07 23 0A 02 00 00 11 02 00 00 03 01 00 00
PDRIVE record for drive 0. +0 = 11H: directory starting lump 17 (DDSL). +1 = 23H: 35 lumps. +2 = 07H: TSR 3 (bits 0-1), interface 1 = TI A, the standard Model I interface (bits 2-4). +3 = 23H: 35 tracks (TC). +4 = 0AH: 10 sectors per track (SPT). +5 = 02H: 2 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 00H: disk I/O flags: single density, one side. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 03H: TSR 3 as typed. +13, +14 = 01H, 00H: the TI letters A. +15 = 00H: TD 0 (5 inch, one sided, single density). SYS0 copies bytes +0 to +9 of this record to 4371H-437AH at reset.
4210-421F
DEFB 11H, 28H, 07H, 28H, 0AH, 02H, 00H, 00H, 11H, 02H, 00H, 00H, 03H, 01H, 00H, 00H 11 28 07 28 0A 02 00 00 11 02 00 00 03 01 00 00
PDRIVE record for drive 1. +0 = 11H: directory starting lump 17 (DDSL). +1 = 28H: 40 lumps. +2 = 07H: TSR 3 (bits 0-1), interface 1 = TI A, the standard Model I interface (bits 2-4). +3 = 28H: 40 tracks (TC). +4 = 0AH: 10 sectors per track (SPT). +5 = 02H: 2 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 00H: disk I/O flags: single density, one side. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 03H: TSR 3 as typed. +13, +14 = 01H, 00H: the TI letters A. +15 = 00H: TD 0 (5 inch, one sided, single density). SYS0 copies bytes +0 to +9 of this record to 437BH-4384H at reset.
4220-422F
DEFB 11H, 23H, 07H, 23H, 0AH, 02H, 00H, 00H, 11H, 02H, 00H, 00H, 03H, 01H, 00H, 00H 11 23 07 23 0A 02 00 00 11 02 00 00 03 01 00 00
PDRIVE record for drive 2. +0 = 11H: directory starting lump 17 (DDSL). +1 = 23H: 35 lumps. +2 = 07H: TSR 3 (bits 0-1), interface 1 = TI A, the standard Model I interface (bits 2-4). +3 = 23H: 35 tracks (TC). +4 = 0AH: 10 sectors per track (SPT). +5 = 02H: 2 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 00H: disk I/O flags: single density, one side. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 03H: TSR 3 as typed. +13, +14 = 01H, 00H: the TI letters A. +15 = 00H: TD 0 (5 inch, one sided, single density). SYS0 copies bytes +0 to +9 of this record to 4385H-438EH at reset.
4230-423F
DEFB 11H, 23H, 07H, 23H, 0AH, 02H, 00H, 00H, 11H, 02H, 00H, 00H, 03H, 01H, 00H, 00H 11 23 07 23 0A 02 00 00 11 02 00 00 03 01 00 00
PDRIVE record for drive 3. +0 = 11H: directory starting lump 17 (DDSL). +1 = 23H: 35 lumps. +2 = 07H: TSR 3 (bits 0-1), interface 1 = TI A, the standard Model I interface (bits 2-4). +3 = 23H: 35 tracks (TC). +4 = 0AH: 10 sectors per track (SPT). +5 = 02H: 2 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 00H: disk I/O flags: single density, one side. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 03H: TSR 3 as typed. +13, +14 = 01H, 00H: the TI letters A. +15 = 00H: TD 0 (5 inch, one sided, single density). SYS0 copies bytes +0 to +9 of this record to 438FH-4398H at reset.
4240-424F
DEFB 11H, 28H, 33H, 28H, 12H, 06H, 00H, 11H, 11H, 02H, 00H, 00H, 03H, 04H, 10H, 04H 11 28 33 28 12 06 00 11 11 02 00 00 03 04 10 04
PDRIVE record for drive 4. +0 = 11H: directory starting lump 17 (DDSL). +1 = 28H: 40 lumps. +2 = 33H: TSR 3 (bits 0-1), interface 4 = TI C, Percom (bits 2-4), bit 5 TI flag M. +3 = 28H: 40 tracks (TC). +4 = 12H: 18 sectors per track (SPT). +5 = 06H: 6 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 11H: disk I/O flags: double density, sectors numbered from 1, one side. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 03H: TSR 3 as typed. +13, +14 = 04H, 10H: the TI letters CM. +15 = 04H: TD 4 (5 inch, one sided, double density).
4250-425F
DEFB 11H, 23H, 07H, 23H, 0AH, 02H, 00H, 00H, 11H, 02H, 00H, 00H, 03H, 01H, 00H, 00H 11 23 07 23 0A 02 00 00 11 02 00 00 03 01 00 00
PDRIVE record for drive 5. +0 = 11H: directory starting lump 17 (DDSL). +1 = 23H: 35 lumps. +2 = 07H: TSR 3 (bits 0-1), interface 1 = TI A, the standard Model I interface (bits 2-4). +3 = 23H: 35 tracks (TC). +4 = 0AH: 10 sectors per track (SPT). +5 = 02H: 2 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 00H: disk I/O flags: single density, one side. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 03H: TSR 3 as typed. +13, +14 = 01H, 00H: the TI letters A. +15 = 00H: TD 0 (5 inch, one sided, single density).
4260-426F
DEFB 11H, 46H, 53H, 27H, 12H, 02H, 00H, 03H, 11H, 02H, 00H, 00H, 03H, 04H, 04H, 04H 11 46 53 27 12 02 00 03 11 02 00 00 03 04 04 04
PDRIVE record for drive 6. +0 = 11H: directory starting lump 17 (DDSL). +1 = 46H: 70 lumps. +2 = 53H: TSR 3 (bits 0-1), interface 4 = TI C, Percom (bits 2-4), bit 6 TI K (track 0 in the other density). +3 = 27H: 39 tracks (TC). +4 = 12H: 18 sectors per track (SPT). +5 = 02H: 2 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 03H: disk I/O flags: double density, tracks numbered from 1, one side. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 03H: TSR 3 as typed. +13, +14 = 04H, 04H: the TI letters CK. +15 = 04H: TD 4 (5 inch, one sided, double density).
4270-427F
DEFB 11H, A0H, 06H, 50H, 14H, 02H, 00H, 40H, 11H, 02H, 00H, 00H, 02H, 01H, 00H, 02H 11 A0 06 50 14 02 00 40 11 02 00 00 02 01 00 02
PDRIVE record for drive 7. +0 = 11H: directory starting lump 17 (DDSL). +1 = A0H: 160 lumps. +2 = 06H: TSR 2 (bits 0-1), interface 1 = TI A, the standard Model I interface (bits 2-4). +3 = 50H: 80 tracks (TC). +4 = 14H: 20 sectors per track (SPT). +5 = 02H: 2 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 40H: disk I/O flags: single density, two sides. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 02H: TSR 2 as typed. +13, +14 = 01H, 00H: the TI letters A. +15 = 02H: TD 2 (5 inch, two sided, single density).
4280-428F
DEFB 11H, 48H, 13H, 28H, 12H, 02H, 00H, 01H, 11H, 02H, 00H, 00H, 03H, 04H, 00H, 04H 11 48 13 28 12 02 00 01 11 02 00 00 03 04 00 04
PDRIVE record for drive 8. +0 = 11H: directory starting lump 17 (DDSL). +1 = 48H: 72 lumps. +2 = 13H: TSR 3 (bits 0-1), interface 4 = TI C, Percom (bits 2-4). +3 = 28H: 40 tracks (TC). +4 = 12H: 18 sectors per track (SPT). +5 = 02H: 2 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 01H: disk I/O flags: double density, one side. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 03H: TSR 3 as typed. +13, +14 = 04H, 00H: the TI letters C. +15 = 04H: TD 4 (5 inch, one sided, double density).
4290-429F
DEFB 11H, 48H, 13H, 50H, 24H, 08H, 00H, 41H, 11H, 02H, 00H, 00H, 03H, 04H, 00H, 06H 11 48 13 50 24 08 00 41 11 02 00 00 03 04 00 06
PDRIVE record for drive 9. +0 = 11H: directory starting lump 17 (DDSL). +1 = 48H: 72 lumps. +2 = 13H: TSR 3 (bits 0-1), interface 4 = TI C, Percom (bits 2-4). +3 = 50H: 80 tracks (TC). +4 = 24H: 36 sectors per track (SPT). +5 = 08H: 8 granules per lump (GPL). +6 = 00H: the drive select byte written to the FDC sector register. +7 = 41H: disk I/O flags: double density, two sides. +8 = 11H: DDSL 17 as typed. +9 = 02H: DDGA 2 (directory granules). +10, +11 = 00H. +12 = 03H: TSR 3 as typed. +13, +14 = 04H, 00H: the TI letters C. +15 = 06H: TD 6 (5 inch, two sided, double density).
42A0
DEFB 02H 02
Byte A0H: SYSTEM option AL = 2, the number of drives in the system. SYS0's reset code stores it at 439FH and as the operand at 477AH (the drive limit of the select routine); it must be 1-4.
42A1
DEFB 02H 02
Byte A1H: SYSTEM option AW = 2, the number of write-with-verify tries. SYS0's reset code stores it as the operand at 4ABAH.
42A2
DEFB 00H 00
Byte A2H: SYSTEM option AN = 0, the default drive of the DIR command. SYS0's reset code stores it at 43A0H.
42A3
DEFB 00H 00
Byte A3H: SYSTEM option AO = 0, the first drive searched for room for a new file. SYS0's reset code stores it at 43A1H.
42A4
DEFB 00H 00
Byte A4H: no SYSTEM option uses this byte (SYS17's option table names no number at 42A4H); it is 00H.
42A5
DEFB 5FH 5F
Byte A5H: SYSTEM option BI = 95 (5FH), the cursor character. SYS0's reset code stores it at 4501H.
42A6
DEFB 03H 03
Byte A6H: SYSTEM option AM = 3, the number of tries of a disk read or write. SYS0's reset code stores it as the operand at 465AH.
42A7
DEFB 1EH 1E
Byte A7H: SYSTEM option AV = 30 (1EH), the number of 25 ms ticks before the first repeat of a held key. SYS0's reset code stores it at 4578H and 452FH.
42A8
DEFB FFH FF
Byte A8H: SYSTEM option AX = 255 (FFH), the highest character code sent to the printer as it is. SYS0's reset code stores it at 4370H.
42A9
DEFB 01H 01
Byte A9H: SYSTEM option BJ = 1, the CPU speed factor for the timing loops. SYS0's reset code stores it at 43A2H and as the operands at 4CEFH, 47E4H (6 x BJ) and 47F4H (2400H x BJ).
42AA-42CF
DEFB 00H x 38 00 x 38
Bytes AAH-CFH: not used by any SYSTEM option; all 00H.
42D0-42D1
DEFW 0000H 00 00
Bytes D0H-D1H: SYSTEM option AP = 0000H, the HIMEM value set at reset (0 = leave HIMEM at the top of memory). SYS0's reset code stores a value other than 0 at 4049H.
42D2-42EE
DEFB 00H x 29 00 x 29
Bytes D2H-EEH: not used by any SYSTEM option; all 00H.
42EF
DEFB A5H A5
Byte EFH: A5H, the mark of a valid NEWDOS/80 system data sector.
42F0
DEFB 32H 32
Byte F0H = 32H (0011 0010), copied to 436CH at reset: bit 7 AA = N (passwords not checked), bit 6 AB = N (not RUN-ONLY), bit 5 AG = Y (BREAK is a key), bit 4 AI = Y (lower case hardware installed), bit 1 AR = Y (COPY formats 5 and 6 without diskette passwords), bit 0 AS = N (BASIC leaves lower case text alone). Bits 3 and 2 are 0 and belong to no option.
42F1
DEFB F8H F8
Byte F1H = F8H (1111 1000), copied to 436DH at reset: bit 7 AT = Y (chaining gives every key), bit 6 BC = Y (chaining can be paused or cancelled), bit 5 BE = Y (the R command repeats the last command), bit 4 BK = Y (WRDIRP and DIRCHECK W/C allowed). Bit 3 is set but belongs to no option.
42F2
DEFB 80H 80
Byte F2H = 80H, copied to 436EH at reset. No SYSTEM option uses this byte.
42F3
DEFB 00H 00
Byte F3H = 00H, copied to 436FH at reset. No SYSTEM option uses this byte.
42F4-42F7
DEFB 00H x 4 00 x 4
Bytes F4H-F7H: not used by any SYSTEM option; all 00H.
42F8
DEFB F7H F7
Byte F8H = F7H (1111 0111): bit 7 AC = Y (keyboard debounce), bit 6 AD = Y (J-K-L screen print), bit 5 AE = Y (1-2-3 enters DEBUG), bit 4 AF = Y (D-F-G enters MINI-DOS), bit 2 AQ = Y (CLEAR key enabled), bit 1 AJ = Y (NEWDOS/80 keyboard driver), bit 0 AU = Y (repeat key). Bit 3 is 0 and belongs to no option.
42F9
DEFB 8FH 8F
Byte F9H = 8FH (1000 1111): bit 7 AY = Y (ask date and time at power-on), bit 6 AZ = N (keep them after a reset), bit 5 BA = N (no ROUTE,DO,NL at reset), bit 3 BD = Y (ENTER at reset skips the AUTO command), bit 2 BF = Y (lower case driver, LCDVR), bit 1 BG = Y (LC), bit 0 BH = Y (blinking cursor). Bit 4 is 0 and belongs to no option.
42FA
DEFB 00H 00
Byte FAH = 00H: bit 7 BN = N, so directory sectors are written with data address mark FAH (SYS0's directory write at 463CH uses FDC command A9H; with BN = Y the reset code changes it to ABH at 463DH).
42FB-42FF
DEFB 00H x 5 00 x 5
Bytes FBH-FFH: not used by any SYSTEM option; all 00H.

Sectors 3 and 4: Unused (Data)

BOOT/SYS is five sectors long (its directory entry gives an EOF of 0500H) because it fills the first granule of the diskette (a granule is five sectors). Only sectors 0-2 hold data; sectors 3 and 4 are filled with E5H.

4200-42FF
DEFB E5H x 256 E5 x 256
Sector 3 (track 0, sector 3): 256 bytes of E5H, no data.
4200-42FF
DEFB E5H x 256 E5 x 256
Sector 4 (track 0, sector 4): 256 bytes of E5H, no data. It is the last sector of BOOT/SYS's granule.