From 96689d744e99079ac503cece7a56d94a4864bf4c Mon Sep 17 00:00:00 2001 From: Matt Harlum <955874+LIV2@users.noreply.github.com> Date: Fri, 31 Mar 2023 10:05:38 +0000 Subject: [PATCH] Test for drive fault as well as error --- Makefile | 2 +- ata.c | 5 +++-- ata.h | 1 + device.h | 2 +- liv2ride | Bin 17168 -> 9140 bytes 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index e49507e..8b6178d 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ PROJECT=liv2ride CC=m68k-amigaos-gcc -CFLAGS=-nostartfiles -nostdlib -noixemul -mcpu=68000 -Wall -Wno-multichar -Wno-pointer-sign -Wno-attributes -Wno-unused-value -s -O0 -fomit-frame-pointer -fno-delete-null-pointer-checks +CFLAGS=-nostartfiles -nostdlib -noixemul -mcpu=68000 -Wall -Wno-multichar -Wno-pointer-sign -Wno-attributes -Wno-unused-value -s -Os -fomit-frame-pointer -fno-delete-null-pointer-checks LDFLAGS=-lamiga -lgcc -lc AS=m68k-amigaos-as diff --git a/ata.c b/ata.c index fe5e029..a4e61b2 100644 --- a/ata.c +++ b/ata.c @@ -146,7 +146,7 @@ bool ata_identify(struct IDEUnit *unit, UWORD *buffer) *unit->drive->status_command = ATA_CMD_IDENTIFY; if (!ata_wait_drq(unit)) { - if (*unit->drive->status_command & ata_flag_error) { + if (*unit->drive->status_command & (ata_flag_error | ata_flag_df)) { Warn("IDENTIFY Status: Error\n"); Warn("last_error: %08lx\n",&unit->last_error[0]); unit->last_error[0] = *unit->drive->error_features; @@ -335,12 +335,13 @@ if (direction == READ) { *actual += unit->blockSize; } - if (*unit->drive->status_command & ata_flag_error) { + if (*unit->drive->status_command & (ata_flag_error | ata_flag_df)) { unit->last_error[0] = unit->drive->error_features[0]; unit->last_error[1] = unit->drive->lbaHigh[0]; unit->last_error[2] = unit->drive->lbaMid[0]; unit->last_error[3] = unit->drive->lbaLow[0]; unit->last_error[4] = unit->drive->status_command[0]; + unit->last_error[5] = unit->drive->devHead[0]; Info("ATA ERROR!!!"); Info("last_error: %08lx\n",unit->last_error); diff --git a/ata.h b/ata.h index 8e5522d..7cb925f 100644 --- a/ata.h +++ b/ata.h @@ -29,6 +29,7 @@ #define ata_flag_busy (1<<7) #define ata_flag_ready (1<<6) +#define ata_flag_df (1<<5) #define ata_flag_drq (1<<3) #define ata_flag_error (1<<0) diff --git a/device.h b/device.h index 5adf840..67f8671 100644 --- a/device.h +++ b/device.h @@ -31,7 +31,7 @@ struct IDEUnit { UBYTE unitNum; UBYTE channel; UBYTE device_type; - UBYTE last_error[5]; + UBYTE last_error[6]; BOOL primary; BOOL present; UWORD change_count; diff --git a/liv2ride b/liv2ride index a5f33c4360ac4eec2b8be5e2418234443a7ae523..30b07a5468836ed1ea26a88f974891f521ab1e8b 100755 GIT binary patch literal 9140 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 literal 17168 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

JuzkpP`jOvoO{kFU4-t7OfyZ?W{J@xYS z7h7my|2G4`*9;=L9(2|@qn-;y7YRw1?hpZ|$hAd@m5YUYt}QNe$EF{T{cs>Un+SBSI?s>HNb>BIB)vx)Wy1=}O;v`*yW{THY^LUay+1b$vnB z{`>z%?+>p>k_Z2es4(UYQvYhDt^ZX?Twj#bO|QcDf9JLiy*L!n`)#h5o({&weH?7Y z{ll+HY-aiT0=mF3W8KaE7bM3=HUK}t8xiB%U(}~vj$`gafCNlnbw`B!)H-8%3 zC))5x_(jOI1!>!IBOXC)=*2uO3UKQx$UJtUq0u4NV@jak1jo4?|)m4c{f+1-t!-SVtL8?qI+}Kti@MeI-hR+ zx8=<3;#{LSp4c^qsg{tPrgrFEQ?g^n3aC=f{y2&KgqU z_75h>qO>y)(o2bn1n? zzR#>ZTmSz2cjxyahWyzu*C