Sector 0: Directory Cylinder Byte
File offsets 0000H-00FFH, cylinder 0, sector 0. Only bytes 00H-02H are not 00H. Byte 02H holds the directory cylinder; the manual gives sector 0, byte 02H as the place that always holds it. The ROM reads sector 1, not this sector, and the boot sector does not read it.
0000-0001
DEFB 00H, FEH 00 FE
Bytes 00H-01H of sector 0: 00H FEH, the same two bytes that open a boot sector (NOP and the first byte of a CP instruction); nothing in the boot executes or reads them here.
0002
DEFB 14H 14
Byte 02H of sector 0: 14H, the directory cylinder of this diskette (cylinder 20). The boot sector takes the directory cylinder from byte 0AH of sector 2 (520AH) instead.
0003-00FF
DEFB 00H x 253 00 x 253
Bytes 03H-FFH of sector 0: 253 bytes of 00H, not read during the boot.
4300H - Sector 1: Boot Sector Entry
When the computer is reset with a diskette in drive 0, the ROM reads cylinder 0, sector 1 into 4300H-43FFH (through its own jump cell at 4049H and NMI ended reads) and jumps to 4300H. This sector points the NMI vector at its end of read routine, reads sector 2 of BOOT/SYS (the drive control table copy and the boot settings) into 5200H, finds the directory entry of SYS0/SYS (the first entry of sector 4 of the directory cylinder) and loads SYS0/SYS from its first segment, record by record, until the transfer record sends it to SYS0/SYS. It works the floppy disk controller through ports F0H-F4H and uses the stack the ROM left.
4300
LD A,C3H 3E C3
Load Register A with C3H, the opcode of JP, to build a jump at the NMI vector.
4302
LD (4049H),A 32 49 40
Store Register A (C3H, JP) to 4049H, the RAM NMI vector the ROM's NMI handler jumps to: the controller's interrupt at the end of each command arrives there. The ROM's boot loader built a jump there to its own completion handler; this sector rebuilds it for itself.
4305
LD HL,43DDH 21 DD 43
Point Register Pair HL to 43DDH, the end of read routine of this sector.
4308
LD (404AH),HL 22 4A 40
Store Register Pair HL (43DDH) to 404AH-404BH, the address of the JP at 4049H: the NMI vector is now JP 43DDH, so the end of each Read Sector command leaves the byte loop at 43D0H through 43DDH.
430B
LD DE,0002H 11 02 00
Load Register Pair DE with 0002H: Register D = cylinder 00H, Register E = sector 02H, the third sector of BOOT/SYS, which holds the drive control table copy and the boot settings of this diskette.
430E
LD HL,5200H 21 00 52
Point Register Pair HL to 5200H, the 256 byte buffer sector 2 is read into. 5200H stays the base of those settings: SYS0/SYS's start-up reads them there.
4311
GOSUB to 43A5H to read cylinder Register D (00H), sector Register E (02H) into the buffer at Register Pair HL (5200H), two tries. On return the Z FLAG is set if a try succeeded and Register A holds the controller status masked with 9CH.
4314
If the NZ FLAG is set (sector 2 could not be read in two tries), JUMP to 4371H to display DISK ERROR! and stop.
4316
PUSH HL E5
Save Register Pair HL (5200H, the start of sector 2) to the top of the stack, to move it into Index Register IX.
4317
POP IX DD E1
Restore Index Register IX from the top of the stack: Index Register IX = 5200H. Every field of sector 2 below is read as IX plus an offset for the rest of the boot.
4319H - Find SYS0/SYS in the Directory
The directory cylinder is byte 0AH of sector 2. Sector 4 of that cylinder holds the directory entry of SYS0/SYS in its first 32 bytes; the entry is read into 5300H and must describe an active system file.
4319
LD D,(IX+0AH) DD 56 0A
Load Register D with the byte at Index Register IX+0AH (520AH, the directory cylinder of the drive control table copy: 14H, cylinder 20), the cylinder for the next read.
431C
LD E,04H 1E 04
Load Register E with 04H: sector 4 of the directory cylinder, whose first directory entry (bytes 00H-1FH) is the entry of SYS0/SYS. Sectors 0 and 1 of the directory hold the granule allocation table and the hash index table; the first entries of sectors 2 and 3 are BOOT/SYS and DIR/SYS.
431E
INC H 24
Increment Register H: Register Pair HL goes from 5200H to 5300H, the buffer for the directory sector (and later for each sector of SYS0/SYS).
431F
GOSUB to 43A5H to read cylinder Register D (the directory cylinder), sector Register E (04H) into the buffer at Register Pair HL (5300H), two tries. On return the Z FLAG is set if a try succeeded.
4322
If the NZ FLAG is set (the directory sector could not be read), JUMP to 4371H to display DISK ERROR! and stop.
4324
LD A,(HL) 7E
Fetch byte 00H of the directory entry from the address in Register Pair HL (5300H) into Register A: the flags of SYS0/SYS's entry (5EH on this diskette: bit 6 system file, bit 4 active file, bit 3 invisible, protection level 6).
4325
CPL 2F
Complement Register A: every bit of the entry's flags is inverted, so bits 6 and 4 are 0 when they were set in the entry.
4326
AND 50H E6 50
Mask Register A with 50H to bits 6 and 4 of the inverted flags. The Z FLAG is set only when both bits were set in the entry: an active (bit 4) system (bit 6) file.
4328
If the NZ FLAG is set (the first entry of directory sector 4 is not an active system file), JUMP to 4371H to display DISK ERROR! and stop.
432AH - Work Out Where SYS0/SYS Starts
The first segment descriptor of the entry (5316H-5317H) gives the cylinder and the granule SYS0/SYS starts at. The alternate register set becomes the reading context: Register D' the cylinder, Register B' the sector within the cylinder, Register Pair HL' the pointer into the buffer at 5300H.
432A
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set: the registers loaded next are the reading context of the byte fetch at 437FH, which works in the alternate set.
432B
LD HL,(5316H) 2A 16 53
Fetch the first segment descriptor of SYS0/SYS from 5316H-5317H (bytes 16H-17H of the entry) into Register Pair HL: Register L = the cylinder the segment starts on (12H on this diskette), Register H = bits 7-5 the granule in that cylinder, bits 4-0 the granule count less 1 (02H here: granule 0, three granules).
432E
LD D,L 55
Copy Register L (the starting cylinder) into Register D, the cylinder of the reading context.
432F
LD A,H 7C
Copy Register H (the granule and count byte of the segment descriptor) into Register A.
4330
RLCA 07
Rotate Register A left: bit 7 of the granule and count byte goes to bit 0.
4331
RLCA 07
Rotate Register A left again: bits 7-6 of the granule and count byte are now bits 1-0.
4332
RLCA 07
Rotate Register A left a third time: bits 7-5, the starting granule, are now bits 2-0 of Register A.
4333
AND 07H E6 07
Mask Register A to bits 2-0: the starting granule within the cylinder, 0-7. The Z FLAG is set when SYS0/SYS starts at granule 0 (00H on this diskette).
4335
If the Z FLAG is set (granule 0), JUMP to 433EH with Register A = 00H: the segment starts at sector 0 of the cylinder.
4337
LD B,A 47
Copy Register A (the starting granule) into Register B, the count of the multiplying loop below.
4338
XOR A AF
Zero Register A, the sector total of the multiplication.
4339
ADD A,(IX+07H) DD 86 07
Add the byte at Index Register IX+07H (5207H, the sectors per granule of the drive control table copy: 06H) to Register A, once per granule.
433C
Decrement Register B (the granules left to count) and loop back to 4339H while it is not zero. Register A ends as the starting granule times the sectors per granule: the first sector of SYS0/SYS within the cylinder.
433E
LD B,A 47
Copy Register A (the first sector within the cylinder) into Register B, the sector counter of the reading context.
433F
LD HL,53FFH 21 FF 53
Point Register Pair HL to 53FFH, the last byte of the buffer. The first INC L of the byte fetch at 437FH turns it to 5300H with the Z FLAG set, which makes the fetch read the first sector of SYS0/SYS.
4342
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set again: the reading context (cylinder Register D, sector Register B, buffer pointer Register Pair HL) is put aside for the byte fetch, and the main set is free for the loader.
4343H - Load SYS0/SYS Record by Record
SYS0/SYS is a load module: each record is a type byte, a length byte and that many bytes. Type 01H is a load block (address, then the data), type 02H the transfer address; any other type is passed over. The main register set does the loading: Register H the record type, Register B the bytes left in the record, Register Pair HL the load address.
4343
GOSUB to 437FH to fetch the next byte of SYS0/SYS into Register A: the type byte of a record.
4346
LD H,A 67
Copy Register A (the record type) into Register H, to be tested below.
4347
GOSUB to 437FH to fetch the next byte into Register A: the length byte of the record (the number of bytes that follow it; 00H stands for 256).
434A
LD B,A 47
Copy Register A (the record length) into Register B, the count of bytes left in the record.
434B
GOSUB to 437FH to fetch the next byte into Register A: the first byte after the length, the low byte of the address for a type 01H or 02H record.
434E
LD L,A 6F
Copy Register A (the low byte of the address) into Register L.
434F
DEC H 25
Decrement Register H (the record type). The Z FLAG is set when the type was 01H, a load block.
4350
If the Z FLAG is set (type 01H, a load block), JUMP to 4362H to copy its data to memory.
4352
DEC H 25
Decrement Register H again. The Z FLAG is set when the type was 02H, the transfer address.
4353
If the NZ FLAG is set (neither type 01H nor 02H, such as the 05H comment records at the front of SYS0/SYS), JUMP to 435AH to pass over the rest of the record.
4355
Type 02H: GOSUB to 437FH to fetch the high byte of the transfer address into Register A.
4358
LD H,A 67
Copy Register A (the high byte of the transfer address) into Register H: Register Pair HL is the transfer address of SYS0/SYS (4E00H on this diskette).
4359
JP (HL) E9
JUMP to the address in Register Pair HL (4E00H), the start of SYS0/SYS. The alternate registers still hold the reading context and Index Register IX still points to 5200H; SYS0/SYS's start-up reads sector 2's settings from 5200H.
435AH - Pass Over a Record
A record of any type other than 01H or 02H: the byte at Register L has already been taken, Register B counts the bytes left.
435A
DEC B 05
Decrement Register B, the bytes left in the record (the byte fetched into Register L at 434BH is counted off first). The Z FLAG is set when the record has been passed over.
435B
If the Z FLAG is set (no bytes left in the record), JUMP back to 4343H for the next record.
435D
GOSUB to 437FH to fetch the next byte of the record into Register A, which is thrown away.
4360
JUMP back to 435AH to count the byte off Register B.
4362H - Copy a Load Block
Type 01H: the low byte of the load address is in Register L; the high byte follows, then the data.
4362
GOSUB to 437FH to fetch the next byte into Register A: the high byte of the load address.
4365
LD H,A 67
Copy Register A (the high byte of the load address) into Register H: Register Pair HL is the load address of the block.
4366
DEC B 05
Decrement Register B (the bytes left in the record) for the low byte of the address taken at 434BH.
4367
DEC B 05
Decrement Register B again for the high byte of the address: Register B is now the number of data bytes. A length byte of 02H leaves 00H, which the DJNZ loop below runs 256 times.
4368
GOSUB to 437FH to fetch the next data byte of the block into Register A.
436B
LD (HL),A 77
Store Register A (the data byte) to the address in Register Pair HL, its place in memory.
436C
INC HL 23
Increment Register Pair HL to the next load address.
436D
Decrement Register B (the data bytes left) and loop back to 4368H while it is not zero.
436F
JUMP back to 4343H to read the type byte of the next record of SYS0/SYS.
4371H - Display DISK ERROR! and Stop
Reached when a sector cannot be read in two tries or the directory entry of SYS0/SYS is not an active system file.
4371
LD HL,43F2H 21 F2 43
Point Register Pair HL to 43F2H, the eleven characters DISK ERROR! in this sector.
4374
LD B,0BH 06 0B
Load Register B with 0BH, the number of characters to display (11).
4376
LD A,(HL) 7E
Fetch the character at the address in Register Pair HL into Register A.
4377
INC HL 23
Increment Register Pair HL to the next character of the text.
4378
GOSUB to the ROM's display routine at 0033H to display the character in Register A at the cursor. The ROM routine uses Register Pair DE (the video device control block address it loads).
437B
Decrement Register B (the characters left) and loop back to 4376H while it is not zero.
437D
JUMP to itself, 437DH: the computer stops here until RESET is pressed.
437FH - Fetch the Next Byte of SYS0/SYS
Returns the next byte of the file in Register A, reading the next sector into 5300H-53FFH when the buffer is used up. The reading context is in the alternate registers: Register Pair HL' the buffer pointer, Register B' the sector within the cylinder, Register D' the cylinder; Index Register IX points to sector 2 at 5200H.
437F
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set: the reading context (buffer pointer HL, sector Register B, cylinder Register D) is now in the main registers, and the loader's registers are put aside.
4380
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 buffer at 5300H-53FFH has been used up (on the first call, 53FFH becomes 5300H).
4381
If the NZ FLAG is set (a byte of the buffer is left), JUMP to 43A2H to fetch it.
4383
PUSH HL E5
Save Register Pair HL (5300H, the start of the buffer) to the top of the stack.
4384
LD HL,43B3H 21 B3 43
Point Register Pair HL to 43B3H, the operand of the LD A,81H at 43B2H: the value the read routine sends to the drive select port F4H.
4387
RES 4,(HL) CB A6
Reset bit 4 of the byte at the address in Register Pair HL (43B3H): the drive select value is 81H, drive 0, double density, side 0. Self-Modifying Code
43B3H is the operand of LD A,81H at 43B2H; bit 4 of the value sent to port F4H selects side 1.
4389
LD E,B 58
Copy Register B (the sector within the cylinder, counted across both sides) into Register E, the sector for the read.
438A
LD A,E 7B
Copy Register E (the sector within the cylinder) into Register A.
438B
SUB (IX+05H) DD 96 05
Subtract the byte at Index Register IX+05H (5205H, the sectors per track of the drive control table copy: 12H) from Register A. The CARRY FLAG is set when the sector is on side 0.
438E
If the CARRY FLAG is set (the sector number is less than the sectors per track: side 0), JUMP to 4393H with Register E unchanged.
4390
SET 4,(HL) CB E6
Side 1: set bit 4 of the byte at the address in Register Pair HL (43B3H): the drive select value becomes 91H, drive 0, double density, side 1. Self-Modifying Code
The operand of LD A,81H at 43B2H.
4392
LD E,A 5F
Copy Register A (the sector number less the sectors per track) into Register E: the sector number on side 1.
4393
POP HL E1
Restore Register Pair HL from the top of the stack: 5300H, the buffer the sector is read into.
4394
GOSUB to 43A5H to read cylinder Register D, sector Register E into the buffer at Register Pair HL (5300H), two tries. On return the Z FLAG is set if a try succeeded.
4397
If the NZ FLAG is set (the sector could not be read), JUMP to 4371H to display DISK ERROR! and stop.
4399
INC B 04
Increment Register B, the sector within the cylinder, to the sector after the one just read.
439A
LD A,B 78
Copy Register B (the next sector within the cylinder) into Register A.
439B
SUB (IX+09H) DD 96 09
Subtract the byte at Index Register IX+09H (5209H, the sectors per cylinder of the drive control table copy: 12H) from Register A. The CARRY FLAG is set while the next sector is on the same cylinder.
439E
If the CARRY FLAG is set (the next sector is on this cylinder), JUMP to 43A2H.
43A0
LD B,A 47
Copy Register A (00H: the sector count wrapped) into Register B: the next sector is sector 0.
43A1
INC D 14
Increment Register D, the cylinder: the next sector is on the next cylinder.
43A2
LD A,(HL) 7E
Fetch the byte at the address in Register Pair HL (the buffer pointer, 5300H-53FFH) into Register A: the next byte of SYS0/SYS.
43A3
EXX D9
Exchange Register Pairs BC, DE and HL with the alternate set: the reading context is put aside again and the loader's registers come back.
43A4
RET C9
RETurn to the caller with the next byte of SYS0/SYS in Register A.
43A5H - Read a Sector, Two Tries
Reads cylinder Register D, sector Register E into the buffer at Register Pair HL. Register Pairs BC, DE and HL are kept. The bytes are taken with the CPU held in wait states, and the controller's interrupt at the end of the command ends the byte loop through the NMI. On return the Z FLAG is set if the read succeeded and Register A holds the status masked with 9CH.
43A5
GOSUB to 43A9H for the first try at reading cylinder Register D, sector Register E into the buffer at Register Pair HL.
43A8
RET Z C8
If the Z FLAG is set (the first try succeeded), RETurn to the caller. Otherwise execution falls into 43A9H for the second try, whose RETurn goes back to the caller of 43A5H.
43A9
PUSH BC C5
Save Register Pair BC to the top of the stack.
43AA
PUSH DE D5
Save Register Pair DE (cylinder Register D, sector Register E) to the top of the stack.
43AB
PUSH HL E5
Save Register Pair HL (the buffer address) to the top of the stack. The end of read routine at 43DDH takes these three back.
43AC
LD A,E 7B
Copy Register E (the sector) into Register A.
43AD
OUT (F2H),A D3 F2
Send Register A (the sector) to port F2H, the controller's sector register.
43AF
LD A,D 7A
Copy Register D (the cylinder) into Register A.
43B0
OUT (F3H),A D3 F3
Send Register A (the cylinder) to port F3H, the controller's data register, where the Seek command takes the cylinder to step to.
43B2
LD A,81H 3E 81
Load Register A with the drive select value: 81H in the sector (bit 7 double density, bit 0 drive 0, side 0); 91H while the byte fetch has set bit 4 for side 1. Self-Modifying Code
The operand at 43B3H is changed by RES 4,(HL) at 4387H and SET 4,(HL) at 4390H.
43B4
OUT (F4H),A D3 F4
Send Register A (the drive select value) to port F4H: drive 0 is selected in double density, on the side bit 4 gives, and its motor runs.
43B6
LD D,A 57
Copy Register A (the drive select value) into Register D, to be sent again for each byte of the read.
43B7
SET 6,D CB F2
Set bit 6 of Register D: the drive select value with wait state generation on (C1H or D1H), which holds the CPU at each IN from the data port until the controller has a byte.
43B9
LD E,02H 1E 02
Load Register E with 02H, the DATA REQUEST bit of the status, for the AND at 43D5H.
43BB
LD C,F3H 0E F3
Load Register C with F3H, the data port, for the INI at 43D8H.
43BD
LD A,13H 3E 13
Load Register A with 13H, the Seek command (0001 0011: no head load, no verify, step rate bits 11, the slowest).
43BF
GOSUB to 43EBH to send the command in Register A (13H) to port F0H and wait for the status to be valid.
43C2
IN A,(F0H) DB F0
Fetch the controller status from port F0H into Register A.
43C4
RRCA 0F
Rotate Register A right: bit 0 of the status, BUSY, goes into the CARRY FLAG.
43C5
Loop back to 43C2H while the CARRY FLAG is set (the controller is still busy with the Seek).
43C7
LD A,88H 3E 88
Load Register A with 88H, the Read Sector command (1000 1000: single sector, side compare off, no head load delay).
43C9
GOSUB to 43EBH to send the command in Register A (88H) to port F0H and wait for the status to be valid. Register B is 00H on return.
43CC
LD A,80H 3E 80
Load Register A with 80H, bit 7 of the NMI mask: the controller's interrupt request may raise an NMI.
43CE
OUT (E4H),A D3 E4
Send Register A (80H) to port E4H, the NMI mask: the end of the Read Sector command will now cause an NMI, which the vector at 4049H sends to 43DDH.
43D0
LD A,D 7A
Copy Register D (the drive select value with bit 6 set, C1H or D1H) into Register A.
43D1
OUT (F4H),A D3 F4
Send Register A (the drive select value with wait state generation on) to port F4H, keeping drive 0 selected and its motor running for each byte.
43D3
IN A,(F0H) DB F0
Fetch the controller status from port F0H into Register A.
43D5
AND E A3
Mask Register A with Register E (02H, DATA REQUEST). The Z FLAG is set while no byte is waiting.
43D6
If the Z FLAG is set (no byte waiting yet), JUMP back to 43D0H.
43D8
INI ED A2
Input a byte from the port in Register C (F3H, the data register) to the address in Register Pair HL, increment Register Pair HL and decrement Register B (Register B is not used as a count here).
43DA
JUMP back to 43D0H for the next byte. The loop ends only when the controller's interrupt at the end of the command raises the NMI.
43DDH - End of Read (NMI)
Reached through the NMI vector at 4049H (JP 43DDH, set at 4300H-4308H) when the Read Sector command ends. The stack holds the address the NMI interrupted, the three pushes of 43A9H-43ABH and the return address of the read.
43DD
POP AF F1
Restore Register Pair AF from the top of the stack: this throws away the address the NMI interrupted (inside the loop at 43D0H-43DAH), so the final RET goes back to the caller of the read.
43DE
LD BC,00E4H 01 E4 00
Load Register Pair BC with 00E4H: Register B = 00H, Register C = E4H, the NMI mask port.
43E1
OUT (C),B ED 41
Send Register B (00H) to the port in Register C (E4H): the NMI mask is cleared, so no further interrupt reaches the NMI.
43E3
IN A,(F0H) DB F0
Fetch the controller status from port F0H into Register A.
43E5
AND 9CH E6 9C
Mask Register A with 9CH to the error bits of the status: bit 7 NOT READY, bit 4 RECORD NOT FOUND, bit 3 CRC ERROR, bit 2 LOST DATA. The Z FLAG is set when the read succeeded.
43E7
POP HL E1
Restore Register Pair HL (the buffer address) from the top of the stack.
43E8
POP DE D1
Restore Register Pair DE (cylinder Register D, sector Register E) from the top of the stack.
43E9
POP BC C1
Restore Register Pair BC from the top of the stack.
43EA
RET C9
RETurn to the caller of 43A9H with the Z FLAG set if the read succeeded and Register A holding the masked status.
43EBH - Send a Command to the Controller
Sends the command in Register A to port F0H, then waits a short time for the status to be valid. Register B is 00H on return.
43EB
OUT (F0H),A D3 F0
Send Register A (the command) to port F0H, the controller's command register.
43ED
LD B,0EH 06 0E
Load Register B with 0EH, the count of a short delay before the status is valid.
43EF
Decrement Register B and loop to itself, 43EFH, while it is not zero: fourteen passes, giving the controller time to set BUSY.
43F1
RET C9
RETurn to the caller with the command issued and Register B = 00H.
43F2H - Sector 1 Data
The text of the error display and the last bytes of the sector.
43F2-43FC
DEFM "DISK ERROR!" 44 49 53 4B 20 45 52 52 4F 52 21
The eleven characters DISK ERROR!, displayed one by one by the loop at 4376H when a sector cannot be read or SYS0/SYS's directory entry is wrong.
43FD-43FF
DEFB 00H x 3 00 x 3
Bytes FDH-FFH of sector 1: three bytes of 00H, not read by any code of this sector.
Sector 2: Drive Control Table Copy and Boot Settings (at 5200H)
File offsets 0200H-02FFH, cylinder 0, sector 2. Read into 5200H-52FFH by the boot sector (430BH-4311H), which keeps Index Register IX at 5200H; SYS0/SYS's start-up reads the same buffer. Bytes 03H-0BH are this diskette's copy of the perishable part of its drive control table (DCT+0BH to DCT+13H); bytes 10H-18H are the boot settings the SYSTEM command keeps.
5200-5202
DEFM "DCT" 44 43 54
Bytes 00H-02H of sector 2: the three characters DCT that open the table. Neither the boot sector nor SYS0/SYS's start-up compares them.
5203
DEFB C0H C0
Byte 03H, the diskette flags (DCT+0BH): C0H, bit 7 set (double density) and bit 6 set (the directory is written with a protected data address mark). SYS0/SYS's start-up copies bytes 03H-0BH into drive 0's drive control table.
5204
DEFB 01H 01
Byte 04H, the surface count (DCT+0CH): 01H, a one sided diskette.
5205
DEFB 12H 12
Byte 05H, the sectors per track (DCT+0DH): 12H, eighteen sectors. The boot sector's byte fetch compares the sector within the cylinder with it at 438BH to choose the side.
5206
DEFB 12H 12
Byte 06H, the directory length (DCT+0EH): 12H, eighteen sectors (the whole directory cylinder).
5207
DEFB 06H 06
Byte 07H, the sectors per granule (DCT+0FH): 06H. The boot sector multiplies the starting granule of SYS0/SYS by it at 4339H.
5208
DEFB 03H 03
Byte 08H, the granules per cylinder (DCT+10H): 03H.
5209
DEFB 12H 12
Byte 09H, the sectors per cylinder (DCT+11H): 12H. The byte fetch moves to the next cylinder when the sector count reaches it (439BH).
520A
DEFB 14H 14
Byte 0AH, the directory cylinder (DCT+12H): 14H, cylinder 20. The boot sector reads sector 4 of this cylinder at 4319H-431FH.
520B
DEFB 28H 28
Byte 0BH, the cylinder count (DCT+13H): 28H, 40 cylinders.
520C-520F
DEFB 00H x 4 00 x 4
Bytes 0CH-0FH of sector 2: four bytes of 00H, which neither the boot sector nor SYS0/SYS's start-up reads.
5210
DEFB 00H 00
Byte 10H, the boot flags: 00H. Bit 3 clear: SYS0/SYS does not ask for the time; bit 2 clear: it does not ask for the date; bit 1 clear: it does not display the DOSPLUS logo; bit 0 clear: no alternate system driver to jump to.
5211-5212
DEFW 0000H 00 00
Bytes 11H-12H, the alternate system driver address: 0000H. SYS0/SYS jumps to it only when bit 0 of byte 10H is set, which it is not on this diskette.
5213
DEFB FFH FF
Byte 13H, the cursor blink switch: FFH, a blinking cursor. SYS0/SYS's start-up stores it to 401CH.
5214
DEFB 8CH 8C
Byte 14H, the cursor character: 8CH, a graphics character. SYS0/SYS's start-up stores it to 4023H.
5215
DEFB 00H 00
Byte 15H, the caps switch: 00H, unshifted letter keys give lower case letters. SYS0/SYS's start-up stores it to 4019H.
5216
DEFB 00H 00
Byte 16H, the default step rate code of the floppy drives: 00H. SYS0/SYS's start-up stores it into byte 04H of the drive control tables of drives 0-3.
5217
DEFB 00H 00
Byte 17H, the port to output to at boot: 00H. SYS0/SYS's start-up loads bytes 17H-18H into Register Pair BC and does OUT (C),B.
5218
DEFB 00H 00
Byte 18H, the value output to the port in byte 17H at boot: 00H.
5219-52FF
DEFB 00H x 231 00 x 231
Bytes 19H-FFH of sector 2: 231 bytes of 00H, which neither the boot sector nor SYS0/SYS's start-up reads.
Sector 3: Not Used on This Diskette
File offsets 0300H-03FFH, cylinder 0, sector 3. The manual gives sectors 3 and up of BOOT/SYS to an alternate system driver; bit 0 of byte 10H of sector 2 is clear, and the boot sector never reads this sector.
0300-03FF
DEFB 6CH x 256 6C x 256
All 256 bytes of sector 3 are 6CH: no alternate system driver is stored on this diskette.
Sector 4: Not Used on This Diskette
File offsets 0400H-04FFH, cylinder 0, sector 4. The boot sector never reads it.
0400-04FF
DEFB 6CH x 256 6C x 256
All 256 bytes of sector 4 are 6CH; nothing during the boot reads them.
Sector 5: Not Used on This Diskette
File offsets 0500H-05FFH, cylinder 0, sector 5, the last sector of BOOT/SYS (one granule of six sectors). The boot sector never reads it.
0500-05FF
DEFB 6CH x 256 6C x 256
All 256 bytes of sector 5 are 6CH; nothing during the boot reads them.