From de2347bf7cc56120b28d4e8225f9230eb2f8cb3c Mon Sep 17 00:00:00 2001 From: OBattler Date: Wed, 10 Aug 2016 01:14:22 +0200 Subject: [PATCH] Fixed even more errors and implemented IDE command 00. --- src/ide.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/src/ide.c b/src/ide.c index f65f77efc..7714036c0 100644 --- a/src/ide.c +++ b/src/ide.c @@ -40,6 +40,7 @@ #define MCR_ERR 0x08 /* Media change request */ /* ATA Commands */ +#define WIN_NOP 0x00 #define WIN_SRST 0x08 /* ATAPI Device Reset */ #define WIN_RECAL 0x10 #define WIN_RESTORE WIN_RECAL @@ -917,16 +918,16 @@ void resetide(void) ide_set_signature(&ide_drives[d]); - if (ide->type == IDE_HDD) + if (&ide_drives[d]->type == IDE_HDD) { - ide->dma_identify_data[0] = 7; - ide->dma_identify_data[1] = 7 | (1 << (val + 8)); - ide->dma_identify_data[2] = 0x3f; + &ide_drives[d]->dma_identify_data[0] = 7; + &ide_drives[d]->dma_identify_data[1] = 7 | (1 << (val + 8)); + &ide_drives[d]->dma_identify_data[2] = 0x3f; } - else if (ide-.type == IDE_CDROM) + else if (&ide_drives[d]->type == IDE_CDROM) { - ide->dma_identify_data[0] = ide->dma_identify_data[1] = 7; - ide->dma_identify_data[2] = 0x3f; + &ide_drives[d]->dma_identify_data[0] = &ide_drives[d]->dma_identify_data[1] = 7; + &ide_drives[d]->dma_identify_data[2] = 0x3f; } } @@ -945,6 +946,12 @@ void resetide(void) } ide_set_signature(&ide_drives[d]); + + if (&ide_drives[d]->type == IDE_CDROM) + { + &ide_drives[d]->dma_identify_data[0] = &ide_drives[d]->dma_identify_data[1] = 7; + &ide_drives[d]->dma_identify_data[2] = 0x3f; + } } /* REMOVE WHEN SUBMITTING TO MAINLINE - END */ #endif @@ -1274,6 +1281,7 @@ void writeide(int ide_board, uint16_t addr, uint8_t val) case WIN_PIDENTIFY: /* Identify Packet Device */ case WIN_SET_MULTIPLE_MODE: /*Set Multiple Mode*/ // output=1; + case WIN_NOP: case WIN_STANDBYNOW1: case WIN_SETIDLE1: /* Idle */ case WIN_CHECKPOWERMODE1: @@ -1582,6 +1590,7 @@ void callbackide(int ide_board) pclog("WIN_RESTORE callback on CD-ROM\n"); goto abort_cmd; } + case WIN_NOP: case WIN_STANDBYNOW1: case WIN_SETIDLE1: // pclog("WIN_RESTORE callback\n");