From 090c4c95455b2a14cc7f945e8fcff1da561bf0e9 Mon Sep 17 00:00:00 2001 From: Melissa Goad Date: Thu, 15 Sep 2016 01:08:45 -0500 Subject: [PATCH] Add busmastering DMA for ATAPI drives --- src/ide.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/ide.c b/src/ide.c index 1902cadec..c0ade838d 100644 --- a/src/ide.c +++ b/src/ide.c @@ -1631,12 +1631,15 @@ void callbackide(int ide_board) case WIN_READ_DMA: if (IDE_DRIVE_IS_CDROM(ide)) { - goto abort_cmd; + atapi->readsector(ide->buffer, ide_get_sector(ide)); + } + else + { + addr = ide_get_sector(ide) * 512; + fseeko64(ide->hdfile, addr, SEEK_SET); + fread(ide->buffer, 512, 1, ide->hdfile); + ide->pos=0; } - addr = ide_get_sector(ide) * 512; - fseeko64(ide->hdfile, addr, SEEK_SET); - fread(ide->buffer, 512, 1, ide->hdfile); - ide->pos=0; if (ide_bus_master_read_sector) { @@ -1731,9 +1734,15 @@ void callbackide(int ide_board) else { /*DMA successful*/ - addr = ide_get_sector(ide) * 512; - fseeko64(ide->hdfile, addr, SEEK_SET); - fwrite(ide->buffer, 512, 1, ide->hdfile); + /*if(IDE_DRIVE_IS_CDROM(ide)) + { + } + else + {*/ + addr = ide_get_sector(ide) * 512; + fseeko64(ide->hdfile, addr, SEEK_SET); + fwrite(ide->buffer, 512, 1, ide->hdfile); + //} ide->atastat = DRQ_STAT | READY_STAT | DSC_STAT;