это 360 кб
я дизассемблировал только кусочки, чтобы понять в чем проблема
Code:
1 CPU T = 450 ns
MFM 32 mks/byte = 71 T
WRITE SECTOR CPU T
ROM:C060 loc_C060:
ROM:C060
ROM:C060 DB E4 10 in a, (0E4h) ; Read IRQ/DRQ Status, Apply Mask, Wait for DRQ
ROM:C062 A1 4 and c
ROM:C063 CA 60 C0 17 jp z, loc_C060 ; Read IRQ/DRQ Status, Apply Mask, Wait for DRQ
ROM:C066 7E 7 ld a, (hl) ; Next Data byte
ROM:C067 D3 E3 10 out (0E3h), a ; Load VG93 DR
ROM:C069 23 5 inc hl ; Next address in write buffer
ROM:C06A F2 60 C0 17 jp p, loc_C060 ; IRQ=Bit7=0 Repeat
ROM:C06D C9 ret
READ SECTOR
ROM:C7E6 loc_C7E6:
ROM:C7E6
ROM:C7E6 DB E4 10 in a, (0E4h)
ROM:C7E8 A1 4 and c
ROM:C7E9 CA E6 C7 17 jp z, loc_C7E6 ; Read IRQ/DRQ Status Register, Apply Mask, Repeat
ROM:C7EC DB E3 10 in a, (0E3h) ; Read VG93 DR
ROM:C7EE F8 3 ret m ; Return if IRQ=Bit7=1
ROM:C7EF 77 7 ld (hl), a ; Store in Read Buffer
ROM:C7F0 23 5 inc hl ; Next address in read buffer
ROM:C7F1 C3 E6 C7 10 jp loc_C7E6
программа записи менее эффективна, ее можно доработать и сократить на 4Т, но это не спасает.
можно еще заранее затолкать сектор в обратном порядке в стек и делать POP это дает еще 1Т, что тоже мало...
чтение работает, предположительно, за счет повторных попыток с попаданием на best case сценарий цикла.