From 5e5e1ed70e1dacc22add797145b56b58b118013d Mon Sep 17 00:00:00 2001 From: OBattler Date: Tue, 30 Oct 2018 15:17:48 +0100 Subject: [PATCH] Slight fixes to Intel Flash, CD-ROM, and ZIP. --- src/disk/zip.c | 6 ++++-- src/intel_flash.c | 15 ++++++++++----- src/scsi/scsi_cdrom.c | 4 ++-- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/disk/zip.c b/src/disk/zip.c index 6c44cdac0..d8c45740c 100644 --- a/src/disk/zip.c +++ b/src/disk/zip.c @@ -9,7 +9,7 @@ * Implementation of the Iomega ZIP drive with SCSI(-like) * commands, for both ATAPI and SCSI usage. * - * Version: @(#)zip.c 1.0.34 2018/10/28 + * Version: @(#)zip.c 1.0.35 2018/10/30 * * Author: Miran Grca, * @@ -1871,11 +1871,13 @@ zip_command(scsi_common_t *sc, uint8_t *cdb) dev->buffer[1] = 0x80; /*Removable*/ dev->buffer[2] = (dev->drv->bus_type == ZIP_BUS_SCSI) ? 0x02 : 0x00; /*SCSI-2 compliant*/ dev->buffer[3] = (dev->drv->bus_type == ZIP_BUS_SCSI) ? 0x02 : 0x21; - dev->buffer[4] = 31; + // dev->buffer[4] = 31; + dev->buffer[4] = 0; if (dev->drv->bus_type == ZIP_BUS_SCSI) { dev->buffer[6] = 1; /* 16-bit transfers supported */ dev->buffer[7] = 0x20; /* Wide bus supported */ } + dev->buffer[7] |= 0x02; ide_padstr8(dev->buffer + 8, 8, "IOMEGA "); /* Vendor */ if (dev->drv->is_250) { diff --git a/src/intel_flash.c b/src/intel_flash.c index 371d91ed8..6c72ff339 100644 --- a/src/intel_flash.c +++ b/src/intel_flash.c @@ -8,7 +8,7 @@ * * Implementation of the Intel 1 Mbit 8-bit flash devices. * - * Version: @(#)intel_flash.c 1.0.17 2018/10/02 + * Version: @(#)intel_flash.c 1.0.18 2018/10/30 * * Authors: Sarah Walker, * Miran Grca, @@ -55,6 +55,7 @@ typedef struct flash_t uint8_t command, status; uint8_t flash_id; int invert_high_pin; + uint32_t program_addr; mem_mapping_t mapping[8], mapping_h[8]; uint32_t block_start[4], block_end[4], block_len[4]; uint8_t array[131072]; @@ -114,7 +115,7 @@ static void flash_write(uint32_t addr, uint8_t val, void *p) switch (flash->command) { case CMD_ERASE_SETUP: - if (val == CMD_ERASE_CONFIRM) { + if (val == CMD_ERASE_CONFIRM) { for (i = 0; i < 3; i++) { if ((addr >= flash->block_start[i]) && (addr <= flash->block_end[i])) memset(&(flash->array[flash->block_start[i]]), 0xff, flash->block_len[i]); @@ -127,7 +128,7 @@ static void flash_write(uint32_t addr, uint8_t val, void *p) case CMD_PROGRAM_SETUP: case CMD_PROGRAM_SETUP_ALT: - if ((addr & 0x1e000) != (flash->block_start[3] & 0x1e000)) + if (((addr & 0x1e000) != (flash->block_start[3] & 0x1e000)) && (addr == flash->program_addr)) flash->array[addr] = val; flash->command = CMD_READ_STATUS; flash->status = 0x80; @@ -137,8 +138,12 @@ static void flash_write(uint32_t addr, uint8_t val, void *p) flash->command = val; switch (val) { case CMD_CLEAR_STATUS: - flash->status = 0; - break; + flash->status = 0; + break; + case CMD_PROGRAM_SETUP: + case CMD_PROGRAM_SETUP_ALT: + flash->program_addr = addr; + break; } } } diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c index a9028e1cd..44897777e 100644 --- a/src/scsi/scsi_cdrom.c +++ b/src/scsi/scsi_cdrom.c @@ -9,7 +9,7 @@ * Implementation of the CD-ROM drive with SCSI(-like) * commands, for both ATAPI and SCSI usage. * - * Version: @(#)scsi_cdrom.c 1.0.64 2018/10/28 + * Version: @(#)scsi_cdrom.c 1.0.65 2018/10/30 * * Author: Miran Grca, * @@ -2275,7 +2275,7 @@ scsi_cdrom_command(scsi_common_t *sc, uint8_t *cdb) dev->buffer[0] = 5; /*CD-ROM*/ dev->buffer[1] = 0x80; /*Removable*/ dev->buffer[2] = (dev->drv->bus_type == CDROM_BUS_SCSI) ? 0x02 : 0x00; /*SCSI-2 compliant*/ - dev->buffer[3] = (dev->drv->bus_type == CDROM_BUS_SCSI) ? 0x12 : 0x21; + dev->buffer[3] = (dev->drv->bus_type == CDROM_BUS_SCSI) ? 0x02 : 0x21; dev->buffer[4] = 31; if (dev->drv->bus_type == CDROM_BUS_SCSI) { dev->buffer[6] = 1; /* 16-bit transfers supported */