Fixed CD-ROM, ZIP, and SCSI disk changeable page arrays to correctly contain only 0's and 0xFF's in addition to page number and page length, and added descriptive #define's for the pages that did not yet have them.

This commit is contained in:
OBattler
2018-10-07 00:35:37 +02:00
parent d067ce60aa
commit fd6cacc312
4 changed files with 54 additions and 46 deletions

View File

@@ -9,7 +9,7 @@
* Implementation of the CD-ROM drive with SCSI(-like) * Implementation of the CD-ROM drive with SCSI(-like)
* commands, for both ATAPI and SCSI usage. * commands, for both ATAPI and SCSI usage.
* *
* Version: @(#)cdrom.c 1.0.50 2018/10/02 * Version: @(#)cdrom.c 1.0.51 2018/10/06
* *
* Author: Miran Grca, <mgrca8@gmail.com> * Author: Miran Grca, <mgrca8@gmail.com>
* *
@@ -282,7 +282,7 @@ static const mode_sense_pages_t cdrom_mode_sense_pages_default_scsi =
static const mode_sense_pages_t cdrom_mode_sense_pages_changeable = static const mode_sense_pages_t cdrom_mode_sense_pages_changeable =
{ { { {
{ 0, 0 }, { 0, 0 },
{ GPMODE_R_W_ERROR_PAGE, 6, 0, 5, 0, 0, 0, 0 }, { GPMODE_R_W_ERROR_PAGE, 6, 0xFF, 0xFF, 0, 0, 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@@ -294,8 +294,8 @@ static const mode_sense_pages_t cdrom_mode_sense_pages_changeable =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ GPMODE_CDROM_PAGE, 6, 0, 1, 0, 60, 0, 75 }, { GPMODE_CDROM_PAGE, 6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
{ 0x8E, 0xE, 5, 4, 0,128, 0, 75, 1, 255, 2, 255, 0, 0, 0, 0 }, { 0x8E, 0xE, 0xFF, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@@ -323,7 +323,7 @@ static const mode_sense_pages_t cdrom_mode_sense_pages_changeable =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 1, 0, 0, 0, 2, 0xC2, 1, 0, 0, 0, 2, 0xC2, 0, 0, 0, 0 } { GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
} }; } };
uint8_t cdrom_read_capacity_cdb[12] = {0x25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; uint8_t cdrom_read_capacity_cdb[12] = {0x25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

View File

@@ -9,7 +9,7 @@
* Implementation of the Iomega ZIP drive with SCSI(-like) * Implementation of the Iomega ZIP drive with SCSI(-like)
* commands, for both ATAPI and SCSI usage. * commands, for both ATAPI and SCSI usage.
* *
* Version: @(#)zip.c 1.0.24 2018/10/02 * Version: @(#)zip.c 1.0.25 2018/10/07
* *
* Author: Miran Grca, <mgrca8@gmail.com> * Author: Miran Grca, <mgrca8@gmail.com>
* *
@@ -130,13 +130,13 @@ const uint8_t zip_command_flags[0x100] =
}; };
static uint64_t zip_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE | static uint64_t zip_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE |
GPMODEP_UNK_PAGE_02 | GPMODEP_DISCONNECT_PAGE |
GPMODEP_UNK_PAGE_2F | GPMODEP_IOMEGA_PAGE |
GPMODEP_ALL_PAGES); GPMODEP_ALL_PAGES);
static uint64_t zip_250_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE | static uint64_t zip_250_mode_sense_page_flags = (GPMODEP_R_W_ERROR_PAGE |
GPMODEP_UNK_PAGE_05 | GPMODEP_FLEXIBLE_DISK_PAGE |
GPMODEP_UNK_PAGE_08 | GPMODEP_CACHING_PAGE |
GPMODEP_UNK_PAGE_2F | GPMODEP_IOMEGA_PAGE |
GPMODEP_ALL_PAGES); GPMODEP_ALL_PAGES);
@@ -144,7 +144,7 @@ static const mode_sense_pages_t zip_mode_sense_pages_default =
{ { { {
{ 0, 0 }, { 0, 0 },
{ GPMODE_R_W_ERROR_PAGE, 0x0a, 0xc8, 22, 0, 0, 0, 0, 90, 0, 0x50, 0x20 }, { GPMODE_R_W_ERROR_PAGE, 0x0a, 0xc8, 22, 0, 0, 0, 0, 90, 0, 0x50, 0x20 },
{ 0x02, 0x0e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { GPMODE_DISCONNECT_PAGE, 0x0e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@@ -189,7 +189,7 @@ static const mode_sense_pages_t zip_mode_sense_pages_default =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x2f, 0x04, 0x5c, 0x0f, 0xff, 0x0f } { GPMODE_IOMEGA_PAGE, 0x04, 0x5c, 0x0f, 0xff, 0x0f }
} }; } };
static const mode_sense_pages_t zip_250_mode_sense_pages_default = static const mode_sense_pages_t zip_250_mode_sense_pages_default =
@@ -199,10 +199,10 @@ static const mode_sense_pages_t zip_250_mode_sense_pages_default =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x05, 0x1e, 0x80, 0, 0x40, 0x20, 2, 0, 0, 0xef, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0b, 0x7d, 0, 0 }, {GPMODE_FLEXIBLE_DISK_PAGE, 0x1e, 0x80, 0, 0x40, 0x20, 2, 0, 0, 0xef, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0b, 0x7d, 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x08, 0x0a, 4, 0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff }, { GPMODE_CACHING_PAGE, 0x0a, 4, 0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@@ -240,14 +240,14 @@ static const mode_sense_pages_t zip_250_mode_sense_pages_default =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x2f, 0x04, 0x5c, 0x0f, 0x3c, 0x0f } { GPMODE_IOMEGA_PAGE, 0x04, 0x5c, 0x0f, 0x3c, 0x0f }
} }; } };
static const mode_sense_pages_t zip_mode_sense_pages_default_scsi = static const mode_sense_pages_t zip_mode_sense_pages_default_scsi =
{ { { {
{ 0, 0 }, { 0, 0 },
{ GPMODE_R_W_ERROR_PAGE, 0x0a, 0xc8, 22, 0, 0, 0, 0, 90, 0, 0x50, 0x20 }, { GPMODE_R_W_ERROR_PAGE, 0x0a, 0xc8, 22, 0, 0, 0, 0, 90, 0, 0x50, 0x20 },
{ 0x02, 0x0e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { GPMODE_DISCONNECT_PAGE, 0x0e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@@ -292,7 +292,7 @@ static const mode_sense_pages_t zip_mode_sense_pages_default_scsi =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x2f, 0x04, 0x5c, 0x0f, 0xff, 0x0f } { GPMODE_IOMEGA_PAGE, 0x04, 0x5c, 0x0f, 0xff, 0x0f }
} }; } };
static const mode_sense_pages_t zip_250_mode_sense_pages_default_scsi = static const mode_sense_pages_t zip_250_mode_sense_pages_default_scsi =
@@ -302,10 +302,10 @@ static const mode_sense_pages_t zip_250_mode_sense_pages_default_scsi =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x05, 0x1e, 0x80, 0, 0x40, 0x20, 2, 0, 0, 0xef, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0b, 0x7d, 0, 0 }, {GPMODE_FLEXIBLE_DISK_PAGE, 0x1e, 0x80, 0, 0x40, 0x20, 2, 0, 0, 0xef, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0b, 0x7d, 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x08, 0x0a, 4, 0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff }, { GPMODE_CACHING_PAGE, 0x0a, 4, 0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@@ -344,14 +344,15 @@ static const mode_sense_pages_t zip_250_mode_sense_pages_default_scsi =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x2f, 0x04, 0x5c, 0x0f, 0x3c, 0x0f } { GPMODE_IOMEGA_PAGE, 0x04, 0x5c, 0x0f, 0x3c, 0x0f }
} }; } };
static const mode_sense_pages_t zip_mode_sense_pages_changeable = static const mode_sense_pages_t zip_mode_sense_pages_changeable =
{ { { {
{ 0, 0 }, { 0, 0 },
{ GPMODE_R_W_ERROR_PAGE, 0x0a, 0xc8, 22, 0, 0, 0, 0, 90, 0, 0x50, 0x20 },
{ 0x02, 0x0e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { GPMODE_R_W_ERROR_PAGE, 0x0a, 0xFF, 0xFF, 0, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF },
{ GPMODE_DISCONNECT_PAGE, 0x0e, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@@ -396,20 +397,20 @@ static const mode_sense_pages_t zip_mode_sense_pages_changeable =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x2f, 0x04, 0x5c, 0x0f, 0xff, 0x0f } { GPMODE_IOMEGA_PAGE, 0x04, 0xff, 0xff, 0xff, 0xff }
} }; } };
static const mode_sense_pages_t zip_250_mode_sense_pages_changeable = static const mode_sense_pages_t zip_250_mode_sense_pages_changeable =
{ { { {
{ 0, 0 }, { 0, 0 },
{ GPMODE_R_W_ERROR_PAGE, 0x06, 0xc8, 0x64, 0, 0, 0, 0 }, { GPMODE_R_W_ERROR_PAGE, 0x06, 0xFF, 0xFF, 0, 0, 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x05, 0x1e, 0x80, 0, 0x40, 0x20, 2, 0, 0, 0xef, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x0b, 0x7d, 0, 0 }, {GPMODE_FLEXIBLE_DISK_PAGE, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x08, 0x0a, 4, 0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff }, { GPMODE_CACHING_PAGE, 0x0a, 4, 0, 0xff, 0xff, 0, 0, 0xff, 0xff, 0xff, 0xff },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
@@ -448,7 +449,7 @@ static const mode_sense_pages_t zip_250_mode_sense_pages_changeable =
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0, 0 }, { 0, 0 },
{ 0x2f, 0x04, 0x5c, 0x0f, 0x3c, 0x0f } { GPMODE_IOMEGA_PAGE, 0x04, 0xff, 0xff, 0xff, 0xff }
} }; } };

View File

@@ -8,7 +8,7 @@
* *
* Definitions for the generic SCSI device command handler. * Definitions for the generic SCSI device command handler.
* *
* Version: @(#)scsi_device.h 1.0.9 2018/10/02 * Version: @(#)scsi_device.h 1.0.10 2018/10/07
* *
* Authors: Miran Grca, <mgrca8@gmail.com> * Authors: Miran Grca, <mgrca8@gmail.com>
* Fred N. van Kempen, <decwiz@yahoo.com> * Fred N. van Kempen, <decwiz@yahoo.com>
@@ -92,23 +92,30 @@
/* Mode page codes for mode sense/set */ /* Mode page codes for mode sense/set */
#define GPMODE_R_W_ERROR_PAGE 0x01 #define GPMODE_R_W_ERROR_PAGE 0x01
#define GPMODE_DISCONNECT_PAGE 0x02 /* Disconnect/reconnect page */
#define GPMODE_FORMAT_DEVICE_PAGE 0x03
#define GPMODE_RIGID_DISK_PAGE 0x04 /* Rigid disk geometry page */
#define GPMODE_FLEXIBLE_DISK_PAGE 0x05
#define GPMODE_CACHING_PAGE 0x08
#define GPMODE_CDROM_PAGE 0x0d #define GPMODE_CDROM_PAGE 0x0d
#define GPMODE_CDROM_AUDIO_PAGE 0x0e #define GPMODE_CDROM_AUDIO_PAGE 0x0e
#define GPMODE_CAPABILITIES_PAGE 0x2a #define GPMODE_CAPABILITIES_PAGE 0x2a
#define GPMODE_IOMEGA_PAGE 0x2f
#define GPMODE_UNK_VENDOR_PAGE 0x30
#define GPMODE_ALL_PAGES 0x3f #define GPMODE_ALL_PAGES 0x3f
/* Mode page codes for presence */ /* Mode page codes for presence */
#define GPMODEP_R_W_ERROR_PAGE 0x0000000000000002LL #define GPMODEP_R_W_ERROR_PAGE 0x0000000000000002LL
#define GPMODEP_UNK_PAGE_02 0x0000000000000004LL #define GPMODEP_DISCONNECT_PAGE 0x0000000000000004LL
#define GPMODEP_UNK_PAGE_03 0x0000000000000008LL #define GPMODEP_FORMAT_DEVICE_PAGE 0x0000000000000008LL
#define GPMODEP_UNK_PAGE_04 0x0000000000000010LL #define GPMODEP_RIGID_DISK_PAGE 0x0000000000000010LL
#define GPMODEP_UNK_PAGE_05 0x0000000000000020LL #define GPMODEP_FLEXIBLE_DISK_PAGE 0x0000000000000020LL
#define GPMODEP_UNK_PAGE_08 0x0000000000000100LL #define GPMODEP_CACHING_PAGE 0x0000000000000100LL
#define GPMODEP_CDROM_PAGE 0x0000000000002000LL #define GPMODEP_CDROM_PAGE 0x0000000000002000LL
#define GPMODEP_CDROM_AUDIO_PAGE 0x0000000000004000LL #define GPMODEP_CDROM_AUDIO_PAGE 0x0000000000004000LL
#define GPMODEP_CAPABILITIES_PAGE 0x0000040000000000LL #define GPMODEP_CAPABILITIES_PAGE 0x0000040000000000LL
#define GPMODEP_UNK_PAGE_2F 0x0000800000000000LL #define GPMODEP_IOMEGA_PAGE 0x0000800000000000LL
#define GPMODEP_UNK_PAGE_30 0x0001000000000000LL #define GPMODEP_UNK_VENDOR_PAGE 0x0001000000000000LL
#define GPMODEP_ALL_PAGES 0x8000000000000000LL #define GPMODEP_ALL_PAGES 0x8000000000000000LL
/* SCSI Status Codes */ /* SCSI Status Codes */

View File

@@ -6,7 +6,7 @@
* *
* Emulation of SCSI fixed disks. * Emulation of SCSI fixed disks.
* *
* Version: @(#)scsi_disk.c 1.0.22 2018/10/02 * Version: @(#)scsi_disk.c 1.0.23 2018/10/07
* *
* Author: Miran Grca, <mgrca8@gmail.com> * Author: Miran Grca, <mgrca8@gmail.com>
* *
@@ -126,22 +126,22 @@ const uint8_t scsi_disk_command_flags[0x100] = {
}; };
uint64_t scsi_disk_mode_sense_page_flags = (GPMODEP_UNK_PAGE_03 | uint64_t scsi_disk_mode_sense_page_flags = (GPMODEP_FORMAT_DEVICE_PAGE |
GPMODEP_UNK_PAGE_04 | GPMODEP_RIGID_DISK_PAGE |
GPMODEP_UNK_PAGE_30 | GPMODEP_UNK_VENDOR_PAGE |
GPMODEP_ALL_PAGES); GPMODEP_ALL_PAGES);
/* This should be done in a better way but for time being, it's been done this way so it's not as huge and more readable. */ /* This should be done in a better way but for time being, it's been done this way so it's not as huge and more readable. */
static const mode_sense_pages_t scsi_disk_mode_sense_pages_default = static const mode_sense_pages_t scsi_disk_mode_sense_pages_default =
{ { [0x03] = { 0x03, 0x16, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { [GPMODE_FORMAT_DEVICE_PAGE] = { GPMODE_FORMAT_DEVICE_PAGE, 0x16, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
[0x04] = { 0x04, 0x16, 0, 0x10, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10, 0, 0, 0 }, [GPMODE_RIGID_DISK_PAGE ] = { GPMODE_RIGID_DISK_PAGE, 0x16, 0, 0x10, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10, 0, 0, 0 },
[0x30] = { 0xB0, 0x16, '8', '6', 'B', 'o', 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' } [GPMODE_UNK_VENDOR_PAGE ] = { 0xB0, 0x16, '8', '6', 'B', 'o', 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }
} }; } };
static const mode_sense_pages_t scsi_disk_mode_sense_pages_changeable = static const mode_sense_pages_t scsi_disk_mode_sense_pages_changeable =
{ { [0x03] = { 0x03, 0x16, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { { [GPMODE_FORMAT_DEVICE_PAGE] = { GPMODE_FORMAT_DEVICE_PAGE, 0x16, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0, 0 },
[0x04] = { 0x04, 0x16, 0, 0x10, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10, 0, 0, 0 }, [GPMODE_RIGID_DISK_PAGE ] = { GPMODE_RIGID_DISK_PAGE, 0x16, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0, 0 },
[0x30] = { 0xB0, 0x16, '8', '6', 'B', 'o', 'x', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' } [GPMODE_UNK_VENDOR_PAGE ] = { 0xB0, 0x16, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }
} }; } };