View Single Post
Old 11 May 2015, 18:05   #7
Toni Wilen
WinUAE developer
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 45
Posts: 24,555
DataFlyer SCSI+ is now emulated, here is quick description how it works (My guess above was wrong):

Unused ATA Control block registers 0 to 5 are used to control DataFlyer hardware state.

Register 0: byte wide SCSI "fake dma" data port.
1 to 3: Used to check if ATA IRQ line is active. (See ".TimeoutNotExpired" in above disassembly). No idea how it really works and why the check is so complex.. Possibly have other uses?
4: Read access selects SCSI mode.
5: Read access selects ATA mode.
6 and 7: Normal ATA Alternate Status/Device Control and Drive Address registers.

DataFlyer ATA mode = ATA register space work normally.
DataFlyer SCSI mode = ATA register space replaced with 53C80 registers (ATA register 0 = 53C80 register 0 and so on)

Enabling either mode will also disconnect ATA IRQ line from Gayle/A4000 mainboard. DataFlyer does not use interrupts. (Any ATA IRQ would just hang the system because DataFlyer driver also kills original scsi.device interrupt handler)

Reverse-engineering by me and mark.k.
Toni Wilen is online now  
Page generated in 0.04655 seconds with 11 queries