D000 D8                                      CLD
D001 20 BE D6                                JSR     reset_phases
D004 BD 8E C0                                LDA     $C08E,X
D007 EA                                      NOP
D008 EA                                      NOP
D009 20 D0 D6                                JSR     check_request
D00C B0 26                                   BCS     IO_error
D00E A0 05                                   LDY     #5
D010
D010                         loc_D010:
D010 0A                                      ASL     A
D011 2E 56 D3                                ROL     block_high
D014 88                                      DEY
D015 D0 F9                                   BNE     loc_D010
D017 0A                                      ASL     A
D018 90 02                                   BCC     loc_D01C
D01A 09 10                                   ORA     #$10
D01C
D01C                         loc_D01C:
D01C 4A                                      LSR     A
D01D 4A                                      LSR     A
D01E 4A                                      LSR     A
D01F 4A                                      LSR     A
D020 48                                      PHA
D021 20 38 D0                                JSR     process_request
D024 68                                      PLA
D025 B0 09                                   BCS     loc_D030
D027 E6 45                                   INC     $45
D029 69 02                                   ADC     #2
D02B 20 38 D0                                JSR     process_request
D02E C6 45                                   DEC     $45
D030
D030                         loc_D030:
D030 AD 58 D3                                LDA     error_code
D033 60                                      RTS

IO_error:
D034 A9 27                                   LDA     #$27
D036 38                                      SEC
D037 60                                      RTS

process_request:
D038 A0 01                                   LDY     #1
D03A 8C 6A D3                                STY     byte_D36A
D03D 8D 57 D3                                STA     req_sector
D040 A5 43                                   LDA     $43
D042 29 70                                   AND     #$70
D044 85 3E                                   STA     $3E
D046 20 9B D6                                JSR     locret_D69B
D049 20 DA D4                                JSR     check_spinning
D04C 08                                      PHP
D04D A9 E8                                   LDA     #$E8
D04F 8D 70 D3                                STA     byte_D370
D052 A5 43                                   LDA     $43
D054 CD 59 D3                                CMP     slot
D057 8D 59 D3                                STA     slot
D05A 08                                      PHP
D05B 0A                                      ASL     A
D05C BD 89 C0                                LDA     $C089,X ;turn on drive
D05F 90 01                                   BCC     loc_D062
D061 E8                                      INX
D062
D062                         loc_D062:
D062 BD 8A C0                                LDA     $C08A,X ;select drive
D065 28                                      PLP
D066 F0 0A                                   BEQ     loc_D072 ;same slot
D068 28                                      PLP ;discard spinning result
D069 A9 00                                   LDA     #0
D06B F0 04                                   BEQ     loc_D071
D06D 20 85 D3                                JSR     delay
D070 88                                      DEY
D071
D071                         loc_D071:
D071 08                                      PHP
D072
D072                         loc_D072:
D072 A5 42                                   LDA     $42
D074 F0 06                                   BEQ     loc_D07C ;status
D076 AD 56 D3                                LDA     block_high
D079 20 0C D1                                JSR     seek ;"seek"
D07C
D07C                         loc_D07C:
D07C 28                                      PLP
D07D D0 0F                                   BNE     loc_D08E
D07F F0 0D                                   BEQ     loc_D08E

D08E                         loc_D08E:
D08E A5 42                                   LDA     $42
D090 F0 6B                                   BEQ     loc_D0FD
D092 4A                                      LSR     A
D093 B0 03                                   BCS     loc_D098
D095 20 F0 D5                                JSR     locret_D5F0
D098
D098                         loc_D098:
D098 A0 40                                   LDY     #$40
D09A 8C 69 D3                                STY     retry_low
D09D
D09D                         loc_D09D:
D09D A6 3E                                   LDX     $3E
D09F 20 98 D3                                JSR     dummy2
D0A2 90 17                                   BCC     loc_D0BB ;always

D0BB                         loc_D0BB:
D0BB AC 6F D3                                LDY     req_track
D0BE CC 5A D3                                CPY     cur_track
D0C1 F0 12                                   BEQ     loc_D0D5
D0C3 20 46 D1                                JSR     sub_D146
D0C6 4C D5 D0                                JMP     loc_D0D5

D0D5                         loc_D0D5:
D0D5 AD 57 D3                                LDA     req_sector
D0D8 CD 6E D3                                CMP     cur_sector
D0DB D0 EF                                   BNE     loc_D0CC
D0DD
D0DD                         loc_D0DD:
D0DD A5 42                                   LDA     $42
D0DF 4A                                      LSR     A
D0E0 90 12                                   BCC     loc_D0F4
D0E2 20 FD D3                                JSR     read_sector
D0E5 B0 BD                                   BCS     loc_D0A4
D0E7
D0E7                         loc_D0E7:
D0E7 A9 00                                   LDA     #0
D0E9 D0                                      .BYTE $D0
D0EA
D0EA                         loc_D0EA:
D0EA 38                                      SEC
D0EB 8D 58 D3                                STA     error_code
D0EE A6 3E                                   LDX     $3E
D0F0 BD 88 C0                                LDA     $C088,X
D0F3 60                                      RTS
D0F4
D0F4                         loc_D0F4:
D0F4 20 00 D5                                JSR     write_sector
D0F7
D0F7                         loc_D0F7:
D0F7 90 EE                                   BCC     loc_D0E7
D0F9 A9 2B                                   LDA     #$2B
D0FB D0 ED                                   BNE     loc_D0EA
D0FD
D0FD                         loc_D0FD:
D0FD A6 3E                                   LDX     $3E
D0FF BD 8D C0                                LDA     $C08D,X
D102 BD 8E C0                                LDA     $C08E,X
D105 2A                                      ROL     A
D106 BD 8C C0                                LDA     $C08C,X
D109 4C F7 D0                                JMP     loc_D0F7

seek:
D10C 0A                                      ASL     A
D10D 8D 6F D3                                STA     req_track
D110 20 25 D1                                JSR     select_phase
D113 20 F1 D4                                JSR     slot_to_device
D116 BD 59 D3                                LDA     slot,X
D119 8D 5A D3                                STA     cur_track
D11C AD 6F D3                                LDA     req_track
D11F 9D 59 D3                                STA     slot,X
D122
D122                         loc_D122:
D122 20 33 D1                                JSR     sub_D133

select_phase:
D125 A0 03                                   LDY     #3
D127
D127                         loc_D127:
D127 98                                      TYA
D128 20 8A D1                                JSR     dummy
D12B 88                                      DEY
D12C 10 F9                                   BPL     loc_D127
D12E 4E 5A D3                                LSR     cur_track
D131 18                                      CLC
D132 60                                      RTS
D133
D133                         sub_D133:
D133 8D 72 D3                                STA     byte_D372
D136 8D 5A D3                                STA     cur_track
D139 4A                                      LSR     A
D13A 8D 6F D3                                STA     req_track
D13D A2 00                                   LDX     #0
D13F 8E 6E D3                                STX     cur_sector
D142 A6 3E                                   LDX     $3E
D144 D0 06                                   BNE     loc_D14C
D146
D146                         sub_D146:
D146 AD 5A D3                                LDA     cur_track
D149 8D 6F D3                                STA     req_track
D14C
D14C                         loc_D14C:
D14D 4A                                      LSR     A
D14E 4A                                      LSR     A
D14F 4A                                      LSR     A
D150 9D 82 C0                                STA     $C082,X
D153 AD 6E D3                                LDA     cur_sector
D156 29 0F                                   AND     #$F
D158 8D 6E D3                                STA     cur_sector
D15B AD 6F D3                                LDA     req_track
D15E 0A                                      ASL     A
D15F 0A                                      ASL     A
D160 0A                                      ASL     A
D161 0A                                      ASL     A
D162 0D 6E D3                                ORA     cur_sector
D165 9D 81 C0                                STA     $C081,X
D168 A9 00                                   LDA     #0
D16A 9D 80 C0                                STA     $C080,X
D16D 9D 83 C0                                STA     $C083,X
D170 60                                      RTS

dummy:
D18A A6 3E                                   LDX     $3E
D18C 60                                      RTS

block_high:
D356 00                      byte_D356:      .BYTE 0

req_sector:
D357 00                      byte_D357:      .BYTE 0

error_code:
D358 00                      byte_D358:      .BYTE 0

slot:
D359 00                      byte_D359:      .BYTE 0

cur_track:
D35A 00                      byte_D35A:      .BYTE 0

retry_low:
D369 00                      byte_D369:      .BYTE 0

retry_high:
D36A 00                      byte_D36A:      .BYTE 0
D36B 00                      byte_D36B:      .BYTE 0

cur_sector:
D36E 00                      byte_D36E:      .BYTE 0

req_track:
D36F 00                      byte_D36F:      .BYTE 0

D370 00                      byte_D370:      .BYTE 0

D372 00 01 30 28 24 20 1E 1D+byte_D372:      .BYTE 0, 1, $30, $28, $24, $20, $1E, $1D, $1C, $1C, $70, $2C, $26, $22, $1F, $1E, $1D
D372 1C 1C 70 2C 26 22 1F 1E+
D372 1D 1C 1C                                .BYTE $1C, $1C

delay:
D385 A2 11                                   LDX     #$11
D387
D387                         loc_D387:
D387 CA                                      DEX
D388 D0 FD                                   BNE     loc_D387
D38A EE 6F D3                                INC     byte_D36F
D38D D0 03                                   BNE     loc_D392
D38F EE 70 D3                                INC     byte_D370
D392
D392                         loc_D392:
D392 38                                      SEC
D393 E9 01                                   SBC     #1
D395 D0 EE                                   BNE     loc_D385
D397 60                                      RTS

dummy2:
D398 18                                      CLC
D399 60                                      RTS

read_sector:
D3FD A0 00                                   LDY     #0
D3FF
D3FF                         loc_D3FF:
D3FF BD 8C C0                                LDA     $C08C,X
D402 91 44                                   STA     ($44),Y
D404 C8                                      INY
D405 D0 F8                                   BNE     loc_D3FF
D407 18                                      CLC
D408 60                                      RTS

check_spinning:
D4DA A6 3E                                   LDX     $3E
D4DC A0 00                                   LDY     #0
D4DE
D4DE                         loc_D4DE:
D4DE BD 8C C0                                LDA     $C08C,X
D4E1 20 F0 D4                                JSR     nullsub_4
D4E4 48                                      PHA
D4E5 68                                      PLA
D4E6 DD 8C C0                                CMP     $C08C,X
D4E9 D0 05                                   BNE     nullsub_4
D4EB A9 28                                   LDA     #$28
D4ED 88                                      DEY
D4EE D0 EE                                   BNE     loc_D4DE
D4F0
D4F0                         nullsub_4:
D4F0 60                                      RTS

slot_to_device:
D4F1 48                                      PHA
D4F2 A5 43                                   LDA     $43
D4F4 4A                                      LSR     A
D4F5 4A                                      LSR     A
D4F6 4A                                      LSR     A
D4F7 4A                                      LSR     A
D4F8 C9 08                                   CMP     #8
D4FA 29 07                                   AND     #7
D4FC 2A                                      ROL     A
D4FD AA                                      TAX
D4FE 68                                      PLA
D4FF 60                                      RTS

write_sector:
D500 38                                      SEC
D501 EA                                      NOP
D502 EA                                      NOP
D503 EA                                      NOP
D504 BD 8E C0                                LDA     $C08E,X
D507 10 03                                   BPL     loc_D50C
D509 4C DF D5                                JMP     loc_D5DF
D50C
D50C                         loc_D50C:
D50C BD 8F C0                                LDA     $C08F,X
D50F A0 00                                   LDY     #0
D511
D511                         loc_D511:
D511 B1 44                                   LDA     ($44),Y
D513 9D 8D C0                                STA     $C08D,X
D516 BD 8C C0                                LDA     $C08C,X
D519 C8                                      INY
D51A D0 F5                                   BNE     loc_D511
D51C BD 8E C0                                LDA     $C08E,X
D51F 18                                      CLC
D520 60                                      RTS

D5DF
D5DF                         loc_D5DF:
D5DF BD 8E C0                                LDA     $C08E,X
D5E2 EA                                      NOP
D5E3 EA                                      NOP
D5E4 EA                                      NOP
D5E5 60                                      RTS

D5F0                         locret_D5F0:
D5F0 60                                      RTS

D69B                         locret_D69B:
D69B 60                                      RTS

reset_phases:
D6BE A5 43                                   LDA     $43
D6C0 29 7F                                   AND     #$7F
D6C2 AA                                      TAX
D6C3 BD 80 C0                                LDA     $C080,X
D6C6 BD 82 C0                                LDA     $C082,X
D6C9 BD 84 C0                                LDA     $C084,X
D6CC BD 86 C0                                LDA     $C086,X
D6CF 60                                      RTS

check_request:
D6D0 A5 42                                   LDA     $42
D6D2 C9 04                                   CMP     #4
D6D4 B0 10                                   BCS     loc_D6E6
D6D6 A5 46                                   LDA     $46
D6D8 A6 47                                   LDX     $47
D6DA 8E 56 D3                                STX     block_high
D6DD F0 09                                   BEQ     loc_D6E8
D6DF CA                                      DEX
D6E0 18                                      CLC
D6E1 60                                      RTS

D6E6                         loc_D6E6:
D6E6 38                                      SEC
D6E7 60                                      RTS
D6E8                         loc_D6E8:
D6E8 18                                      CLC
D6E9 60                                      RTS
