; =============================================================================
; Disk driver: geometry 1434, read 14A8, errors 155D, unit 1600, low-level 1638/168B
; Source: VECTOR 4/8086 - V2_AC_Interleaved_XHE_XHO.bin
; CPU: Z80  |  base: 0000h  |  size: 8192
; Generated linear disassembly with fixed relative branch targets
; =============================================================================

; --- Drive geometry + restore 1434 ---
1434  fe03              CP 03h  ; GEOMETRY+RESTORE; A=unit, B=key
1436  320920            LD (2009h), A
1439  3846              JR C, 1481h
143B  79                LD A, C
143C  1f                RRA
143D  1f                RRA
143E  1f                RRA
143F  1f                RRA
1440  e603              AND 03h
1442  320e20            LD (200Eh), A
1445  213108            LD HL, 0831h  ; floppy table @0831 keys FA-FF
1448  0e06              LD C, 06h
144A  7e                LD A, (HL)
144B  b8                CP B
144C  23                INC HL
144D  280b              JR Z, 145Ah
144F  23                INC HL
1450  23                INC HL
1451  23                INC HL
1452  0d                DEC C
1453  20f5              JR NZ, 144Ah
1455  3e08              LD A, 08h
1457  0600              LD B, 00h
1459  c9                RET
145A  7e                LD A, (HL)
145B  320620            LD (2006h), A
145E  23                INC HL
145F  7e                LD A, (HL)
1460  e601              AND 01h
1462  320520            LD (2005h), A
1465  7e                LD A, (HL)
1466  1f                RRA
1467  e603              AND 03h
1469  320820            LD (2008h), A
146C  23                INC HL
146D  7e                LD A, (HL)
146E  320320            LD (2003h), A
1471  af                XOR A
1472  320420            LD (2004h), A
1475  3e01              LD A, 01h
1477  320720            LD (2007h), A
147A  4f                LD C, A
147B  3a0920            LD A, (2009h)
147E  c3de15            JP 15DEh  ; JP 15DE restore cmd
1481  23                INC HL
1482  23                INC HL
1483  23                INC HL
1484  23                INC HL
1485  23                INC HL
1486  7e                LD A, (HL)
1487  320620            LD (2006h), A
148A  23                INC HL
148B  5e                LD E, (HL)
148C  23                INC HL
148D  56                LD D, (HL)
148E  ed530320          LD (2003h), DE
1492  23                INC HL
1493  7e                LD A, (HL)
1494  320820            LD (2008h), A
1497  23                INC HL
1498  7e                LD A, (HL)
1499  b7                OR A
149A  2802              JR Z, 149Eh
149C  3e01              LD A, 01h
149E  320720            LD (2007h), A
14A1  4f                LD C, A
14A2  3a0920            LD A, (2009h)
14A5  c3de15            JP 15DEh

; --- Read N sectors 14A8 ---
14A8  320220            LD (2002h), A  ; READ SECTORS: A=count HL=buf DE/BC=LBA
14AB  ed531120          LD (2011h), DE
14AF  ed431320          LD (2013h), BC
14B3  220020            LD (2000h), HL
14B6  3a0620            LD A, (2006h)
14B9  cd2015            CALL 1520h
14BC  43                LD B, E
14BD  04                INC B
14BE  3a0920            LD A, (2009h)
14C1  fe03              CP 03h
14C3  3819              JR C, 14DEh
14C5  3a0e20            LD A, (200Eh)
14C8  fe01              CP 01h
14CA  2812              JR Z, 14DEh
14CC  0e00              LD C, 00h
14CE  3a0820            LD A, (2008h)
14D1  3d                DEC A
14D2  2807              JR Z, 14DBh
14D4  b7                OR A
14D5  cb1c              RR H
14D7  cb1d              RR L
14D9  cb11              RL C
14DB  eb                EX DE, HL
14DC  180f              JR 14EDh
14DE  ed5b0320          LD DE, (2003h)
14E2  0e00              LD C, 00h
14E4  b7                OR A
14E5  ed52              SBC HL, DE
14E7  0c                INC C
14E8  30fa              JR NC, 14E4h
14EA  19                ADD HL, DE
14EB  0d                DEC C
14EC  eb                EX DE, HL
14ED  3a0920            LD A, (2009h)
14F0  fe03              CP 03h
14F2  3804              JR C, 14F8h
14F4  210520            LD HL, 2005h
14F7  56                LD D, (HL)
14F8  2a0020            LD HL, (2000h)
14FB  cd3816            CALL 1638h  ; CALL 1638 low-level
14FE  b7                OR A
14FF  c0                RET NZ
1500  7e                LD A, (HL)
1501  110100            LD DE, 0001h
1504  2a1120            LD HL, (2011h)
1507  19                ADD HL, DE
1508  eb                EX DE, HL
1509  ed4b1320          LD BC, (2013h)
150D  3001              JR NC, 1510h
150F  03                INC BC
1510  2a0020            LD HL, (2000h)
1513  24                INC H  ; HL += 200h per sector
1514  24                INC H
1515  3a0220            LD A, (2002h)
1518  b7                OR A
1519  3d                DEC A
151A  320220            LD (2002h), A
151D  c8                RET Z
151E  1888              JR 14A8h
1520  b7                OR A
1521  c8                RET Z
1522  c5                PUSH BC
1523  d5                PUSH DE
1524  67                LD H, A
1525  3d                DEC A
1526  a3                AND E
1527  6f                LD L, A
1528  7c                LD A, H
1529  b7                OR A
152A  1f                RRA
152B  380b              JR C, 1538h
152D  cb18              RR B
152F  cb19              RR C
1531  cb1a              RR D
1533  cb1b              RR E
1535  c32915            JP 1529h
1538  b7                OR A
1539  2004              JR NZ, 153Fh
153B  eb                EX DE, HL
153C  c1                POP BC
153D  c1                POP BC
153E  c9                RET
153F  5c                LD E, H
1540  1600              LD D, 00h
1542  e1                POP HL
1543  c1                POP BC
1544  03                INC BC
1545  dd210000          LD IX, 0000h
1549  b7                OR A
154A  ed52              SBC HL, DE
154C  dd23              INC IX
154E  30f9              JR NC, 1549h
1550  0b                DEC BC
1551  78                LD A, B
1552  b1                OR C
1553  20f4              JR NZ, 1549h
1555  19                ADD HL, DE
1556  dd2b              DEC IX
1558  eb                EX DE, HL
1559  dde5              PUSH IX
155B  e1                POP HL
155C  c9                RET

; --- Hardware error printer 155D ---
155D  b7                OR A  ; HW ERROR table @098B
155E  c8                RET Z
155F  218b09            LD HL, 098Bh
1562  3d                DEC A
1563  87                ADD A, A
1564  85                ADD A, L
1565  6f                LD L, A
1566  3001              JR NC, 1569h
1568  24                INC H
1569  5e                LD E, (HL)
156A  23                INC HL
156B  56                LD D, (HL)
156C  eb                EX DE, HL
156D  c5                PUSH BC
156E  e5                PUSH HL
156F  217b09            LD HL, 097Bh
1572  cde403            CALL 03E4h
1575  e1                POP HL
1576  cde403            CALL 03E4h
1579  3e20              LD A, 20h
157B  cd4304            CALL 0443h
157E  c1                POP BC
157F  78                LD A, B
1580  b7                OR A
1581  2803              JR Z, 1586h
1583  cdf203            CALL 03F2h
1586  218809            LD HL, 0988h
1589  cde403            CALL 03E4h
158C  cddd03            CALL 03DDh
158F  3eff              LD A, FFh
1591  b7                OR A
1592  37                SCF
1593  c9                RET

; --- FDC pulse helper 1594 ---
1594  f5                PUSH AF
1595  3e30              LD A, 30h
1597  d313              OUT (13h), A
1599  3ed0              LD A, D0h
159B  d310              OUT (10h), A
159D  3e07              LD A, 07h
159F  d310              OUT (10h), A
15A1  db10              IN A, (10h)
15A3  db10              IN A, (10h)
15A5  3c                INC A
15A6  20f9              JR NZ, 15A1h
15A8  f1                POP AF
15A9  c9                RET

; --- Controller probe 15AA ---
15AA  af                XOR A  ; PROBE controller
15AB  d3a8              OUT (A8h), A
15AD  cd9415            CALL 1594h
15B0  f604              OR 04h
15B2  d3a8              OUT (A8h), A
15B4  dba7              IN A, (A7h)
15B6  47                LD B, A
15B7  e602              AND 02h
15B9  3e01              LD A, 01h
15BB  2011              JR NZ, 15CEh
15BD  cdbc16            CALL 16BCh
15C0  dba1              IN A, (A1h)
15C2  47                LD B, A
15C3  b7                OR A
15C4  2808              JR Z, 15CEh
15C6  fe06              CP 06h
15C8  3e07              LD A, 07h
15CA  3802              JR C, 15CEh
15CC  06fe              LD B, FEh
15CE  b7                OR A
15CF  f5                PUSH AF
15D0  2805              JR Z, 15D7h
15D2  af                XOR A
15D3  d3a8              OUT (A8h), A
15D5  f1                POP AF
15D6  c9                RET
15D7  3eb0              LD A, B0h
15D9  d3a6              OUT (A6h), A
15DB  f1                POP AF
15DC  47                LD B, A
15DD  c9                RET

; --- Restore/seek command 15DE ---
15DE  cd8b16            CALL 168Bh  ; RESTORE/SEEK class cmd
15E1  b7                OR A
15E2  3e10              LD A, 10h
15E4  2004              JR NZ, 15EAh
15E6  f603              OR 03h
15E8  1806              JR 15F0h
15EA  cb41              BIT 0, C
15EC  2802              JR Z, 15F0h
15EE  f606              OR 06h
15F0  d3a7              OUT (A7h), A
15F2  cdbc16            CALL 16BCh
15F5  3e00              LD A, 00h
15F7  28d5              JR Z, 15CEh
15F9  cd7016            CALL 1670h
15FC  3e05              LD A, 05h
15FE  18ce              JR 15CEh

; --- Select unit 1600 ---
1600  0e00              LD C, 00h  ; SELECT UNIT A (3=floppy)
1602  cd8b16            CALL 168Bh
1605  f5                PUSH AF
1606  cd9415            CALL 1594h
1609  3eb0              LD A, B0h
160B  d3a6              OUT (A6h), A
160D  cd9415            CALL 1594h
1610  f1                POP AF
1611  113075            LD DE, 7530h
1614  2602              LD H, 02h
1616  2ef0              LD L, F0h
1618  b7                OR A
1619  2006              JR NZ, 1621h
161B  2ed0              LD L, D0h
161D  118813            LD DE, 1388h
1620  24                INC H
1621  08                EX AF, AF'
1622  d3a6              OUT (A6h), A
1624  08                EX AF, AF'
1625  cd7816            CALL 1678h
1628  3e00              LD A, 00h
162A  d2ce15            JP NC, 15CEh
162D  cd9415            CALL 1594h
1630  1b                DEC DE
1631  7a                LD A, D
1632  b3                OR E
1633  20ec              JR NZ, 1621h
1635  7c                LD A, H
1636  1896              JR 15CEh

; --- Low-level read 1638 (INIR x2 = 512B) ---
1638  cd8b16            CALL 168Bh  ; LOW-LEVEL READ
163B  e5                PUSH HL
163C  2ef0              LD L, F0h
163E  b7                OR A
163F  2002              JR NZ, 1643h
1641  2ed0              LD L, D0h
1643  cd7816            CALL 1678h
1646  e1                POP HL
1647  3817              JR C, 1660h
1649  3e20              LD A, 20h
164B  d3a7              OUT (A7h), A
164D  cdbc16            CALL 16BCh
1650  2813              JR Z, 1665h
1652  cd7016            CALL 1670h
1655  78                LD A, B
1656  fe08              CP 08h
1658  3e04              LD A, 04h
165A  c2ce15            JP NZ, 15CEh
165D  cd7616            CALL 1676h
1660  3e06              LD A, 06h
1662  c3ce15            JP 15CEh
1665  0ea0              LD C, A0h
1667  0600              LD B, 00h
1669  edb2              INIR  ; INIR x2 from port A0
166B  edb2              INIR
166D  c3ce15            JP 15CEh
1670  0e0d              LD C, 0Dh
1672  dba1              IN A, (A1h)
1674  1809              JR 167Fh
1676  2ef0              LD L, F0h
1678  dba7              IN A, (A7h)
167A  a5                AND L
167B  ee50              XOR 50h
167D  0e16              LD C, 16h
167F  b7                OR A
1680  0608              LD B, 08h
1682  17                RLA
1683  3804              JR C, 1689h
1685  0d                DEC C
1686  10fa              DJNZ 1682h
1688  48                LD C, B
1689  41                LD B, C
168A  c9                RET

; --- Program disk address regs 168B + wait 16BC ---
168B  08                EX AF, AF'  ; OUT address A2-A6
168C  7b                LD A, E
168D  d3a4              OUT (A4h), A
168F  7a                LD A, D
1690  d3a5              OUT (A5h), A
1692  78                LD A, B
1693  d3a3              OUT (A3h), A
1695  3e01              LD A, 01h
1697  d3a2              OUT (A2h), A
1699  3d                DEC A
169A  08                EX AF, AF'
169B  fe03              CP 03h
169D  380e              JR C, 16ADh
169F  d603              SUB 03h
16A1  87                ADD A, A
16A2  f638              OR 38h
16A4  47                LD B, A
16A5  79                LD A, C
16A6  e601              AND 01h
16A8  b0                OR B
16A9  d3a6              OUT (A6h), A
16AB  08                EX AF, AF'
16AC  c9                RET
16AD  87                ADD A, A
16AE  87                ADD A, A
16AF  87                ADD A, A
16B0  f6a0              OR A0h
16B2  47                LD B, A
16B3  79                LD A, C
16B4  e607              AND 07h
16B6  b0                OR B
16B7  d3a6              OUT (A6h), A
16B9  08                EX AF, AF'
16BA  3d                DEC A
16BB  c9                RET
16BC  118813            LD DE, 1388h  ; wait ready on A7
16BF  dba7              IN A, (A7h)
16C1  cb7f              BIT 7, A
16C3  2812              JR Z, 16D7h
16C5  cd9415            CALL 1594h
16C8  1b                DEC DE
16C9  7b                LD A, E
16CA  b2                OR D
16CB  20f2              JR NZ, 16BFh
16CD  cd7616            CALL 1676h
16D0  3e02              LD A, 02h
16D2  21ce15            LD HL, 15CEh
16D5  e3                EX (SP), HL
16D6  c9                RET
16D7  cb47              BIT 0, A
16D9  c0                RET NZ
16DA  af                XOR A
16DB  c9                RET

