01 January 2017, 12:05 | #1 |
Registered User
Join Date: Jan 2002
Location: Germany
Posts: 7,021
|
IDE emu: corrupted inquiry data after CMD_READ more than 16 sectors
If I do a CMD_READ from IDE scsi.device with more than 16 sectors (8 KB) at once, a subsequent HD_SCSICMD with INQUIRY or READ CAPACITY returns completely corrupted data. And a following CMD_READ crashes the Amiga.
This started in 3.2.0, 3.1.0 is ok. And of course it does not happen on a real Amiga. To reproduce use the attached test program: - select a4000 quickstart - add test.lha as boot drive - add just any HDF or VHD to IDE:0 - set serial port to tcp::1234/wait - start - run telnet localhost 1234 in a DOS window. - at the AmigaDOS prompt enter test_ser scsi.device 0 cache 16 to see a successful test and enter test_ser scsi.device 0 cache 17 or any other number higher than 16 to see the problem. (test_con writes to the CLI window, test_ser uses kprintf to write to the serial port, otherwise they are identical) If you are lucky and the emulated Amiga does not crash, you can "repair" it by running the test again with 16 sectors. Example output: Code:
begin of test try 1 of 2 do_scsi_cmd: Actual = 36 do_scsi_cmd: CmdActual = 6 do_scsi_cmd: SenseActual = 0 scsi_inquiry: Vendor = <UAE-IDE > scsi_inquiry: Product = <wb31.vhd > scsi_inquiry: Revision = <0.7 > do_scsi_cmd: Actual = 8 do_scsi_cmd: CmdActual = 10 do_scsi_cmd: SenseActual = 0 scsi_capacity: BlockAddress = 2047751 scsi_capacity: BlockLength = 512 cache size = 17 * 512 = 8704 cmd_read: offset = 0; length = 8704; data = 78791AC 0: < > 1: < > 2: <RDSK> 3: <PART> 4: <PART> 5: <PART> 6: <FSHD> 7: <LSEG> try 2 of 2 do_scsi_cmd: Actual = 36 do_scsi_cmd: CmdActual = 6 do_scsi_cmd: SenseActual = 0 scsi_inquiry: Vendor = gl,( > scsi_inquiry: Product = <>■R" > scsi_inquiry: Revision = <g@"> do_scsi_cmd: Actual = 8 do_scsi_cmd: CmdActual = 10 do_scsi_cmd: SenseActual = 0 scsi_capacity: BlockAddress = 4294967295 scsi_capacity: BlockLength = 512 cache size = 17 * 512 = 8704 cmd_read: offset = 0; length = 8704; data = 78791AC |
01 January 2017, 15:43 | #2 |
WinUAE developer
Join Date: Aug 2001
Location: Hämeenlinna/Finland
Age: 49
Posts: 26,546
|
Fixed (and thanks for perfect instructions. This is how it should be always done!), multiple transfer offset counter was not reset causing identify to return some previously loaded data block if previous transfer size was larger than multiple transfer count (which KS3.x at least sets to 16 by default).
|
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests) | |
Thread Tools | |
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
ASMOne: Sectors and Tracks | Vortex | Coders. General | 19 | 03 December 2009 08:31 |
C64 Boulder Dash: any online emu ? or standalone emu? | keropi | Retrogaming General Discussion | 5 | 13 November 2007 13:03 |
Drive does not support the SCSI inquiry command! | oldpx | support.Hardware | 13 | 30 August 2006 13:42 |
How many emu's can be run within an emu? | Fissuras | Retrogaming General Discussion | 3 | 11 July 2002 16:55 |
Bad Sectors on IDE Amiga Drives | Enverex | support.Hardware | 2 | 16 May 2002 16:03 |
|
|