English Amiga Board


Go Back   English Amiga Board > Support > support.WinUAE

 
 
Thread Tools
Old 01 January 2017, 12:05   #1
thomas
Registered User
 
thomas's Avatar
 
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
Attached Files
File Type: lha test.lha (6.1 KB, 95 views)
thomas is offline  
Old 01 January 2017, 15:43   #2
Toni Wilen
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).
Toni Wilen is offline  
 


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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +2. The time now is 01:54.

Top

Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Page generated in 0.06790 seconds with 14 queries