Added more code for SCSI removable hard disk emulation, only the UI parts (and testing) are left now.
This commit is contained in:
@@ -61,7 +61,7 @@ BEGIN
|
|||||||
MENUITEM "&Mute", IDM_CDROM_1_MUTE
|
MENUITEM "&Mute", IDM_CDROM_1_MUTE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "E&mpty", IDM_CDROM_1_EMPTY
|
MENUITEM "E&mpty", IDM_CDROM_1_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_CDROM_1_RELOAD
|
MENUITEM "&Reload previous image", IDM_CDROM_1_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_CDROM_1_IMAGE
|
MENUITEM "&Image...", IDM_CDROM_1_IMAGE
|
||||||
END
|
END
|
||||||
@@ -70,7 +70,7 @@ BEGIN
|
|||||||
MENUITEM "&Mute", IDM_CDROM_2_MUTE
|
MENUITEM "&Mute", IDM_CDROM_2_MUTE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "E&mpty", IDM_CDROM_2_EMPTY
|
MENUITEM "E&mpty", IDM_CDROM_2_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_CDROM_2_RELOAD
|
MENUITEM "&Reload previous image", IDM_CDROM_2_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_CDROM_2_IMAGE
|
MENUITEM "&Image...", IDM_CDROM_2_IMAGE
|
||||||
END
|
END
|
||||||
@@ -79,7 +79,7 @@ BEGIN
|
|||||||
MENUITEM "&Mute", IDM_CDROM_3_MUTE
|
MENUITEM "&Mute", IDM_CDROM_3_MUTE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "E&mpty", IDM_CDROM_3_EMPTY
|
MENUITEM "E&mpty", IDM_CDROM_3_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_CDROM_3_RELOAD
|
MENUITEM "&Reload previous image", IDM_CDROM_3_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_CDROM_3_IMAGE
|
MENUITEM "&Image...", IDM_CDROM_3_IMAGE
|
||||||
END
|
END
|
||||||
@@ -88,121 +88,137 @@ BEGIN
|
|||||||
MENUITEM "&Mute", IDM_CDROM_4_MUTE
|
MENUITEM "&Mute", IDM_CDROM_4_MUTE
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "E&mpty", IDM_CDROM_4_EMPTY
|
MENUITEM "E&mpty", IDM_CDROM_4_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_CDROM_4_RELOAD
|
MENUITEM "&Reload previous image", IDM_CDROM_4_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_CDROM_4_IMAGE
|
MENUITEM "&Image...", IDM_CDROM_4_IMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 01"
|
POPUP "Removable disk 01"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_01_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_01_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_01_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_01_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_01_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_01_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_01_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 02"
|
POPUP "Removable disk 02"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_02_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_02_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_02_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_02_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_02_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_02_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_02_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 03"
|
POPUP "Removable disk 03"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_03_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_03_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_03_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_03_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_03_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_03_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_03_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 04"
|
POPUP "Removable disk 04"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_04_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_04_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_04_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_04_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_04_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_04_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_04_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 05"
|
POPUP "Removable disk 05"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_05_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_05_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_05_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_05_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_05_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_05_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_05_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 06"
|
POPUP "Removable disk 06"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_06_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_06_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_06_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_06_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_06_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_06_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_06_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 07"
|
POPUP "Removable disk 07"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_07_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_07_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_07_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_07_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_07_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_07_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_07_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 08"
|
POPUP "Removable disk 08"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_08_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_08_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_08_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_08_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_08_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_08_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_08_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 09"
|
POPUP "Removable disk 09"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_09_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_09_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_09_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_09_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_09_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_09_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_09_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 10"
|
POPUP "Removable disk 10"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_10_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_10_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_10_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_10_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_10_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_10_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_10_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 11"
|
POPUP "Removable disk 11"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_11_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_11_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_11_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_11_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_11_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_11_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_11_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 12"
|
POPUP "Removable disk 12"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_12_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_12_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_12_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_12_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_12_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_12_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_12_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 13"
|
POPUP "Removable disk 13"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_13_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_13_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_13_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_13_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_13_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_13_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_13_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 14"
|
POPUP "Removable disk 14"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_14_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_14_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_14_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_14_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_14_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_14_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_14_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 15"
|
POPUP "Removable disk 15"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_15_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_15_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_15_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_15_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_15_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_15_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_15_EIMAGE
|
||||||
END
|
END
|
||||||
POPUP "Removable disk 16"
|
POPUP "Removable disk 16"
|
||||||
BEGIN
|
BEGIN
|
||||||
MENUITEM "E&mpty", IDM_RDISK_16_EMPTY
|
MENUITEM "E&mpty", IDM_RDISK_16_EMPTY
|
||||||
MENUITEM "&Reload previous disc", IDM_RDISK_16_RELOAD
|
MENUITEM "&Reload previous image", IDM_RDISK_16_RELOAD
|
||||||
MENUITEM SEPARATOR
|
MENUITEM SEPARATOR
|
||||||
MENUITEM "&Image...", IDM_RDISK_16_IMAGE
|
MENUITEM "&New image...", IDM_RDISK_16_IMAGE
|
||||||
|
MENUITEM "&Existing image...", IDM_RDISK_16_EIMAGE
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|||||||
@@ -181,53 +181,69 @@
|
|||||||
#define IDM_CDROM_4_REAL 40195
|
#define IDM_CDROM_4_REAL 40195
|
||||||
|
|
||||||
#define IDM_RDISK_01_IMAGE 3200
|
#define IDM_RDISK_01_IMAGE 3200
|
||||||
#define IDM_RDISK_01_RELOAD 3216
|
#define IDM_RDISK_01_EIMAGE 3216
|
||||||
#define IDM_RDISK_01_EMPTY 3232
|
#define IDM_RDISK_01_RELOAD 3232
|
||||||
|
#define IDM_RDISK_01_EMPTY 3248
|
||||||
#define IDM_RDISK_02_IMAGE 3201
|
#define IDM_RDISK_02_IMAGE 3201
|
||||||
#define IDM_RDISK_02_RELOAD 3217
|
#define IDM_RDISK_02_EIMAGE 3217
|
||||||
#define IDM_RDISK_02_EMPTY 3233
|
#define IDM_RDISK_02_RELOAD 3233
|
||||||
|
#define IDM_RDISK_02_EMPTY 3249
|
||||||
#define IDM_RDISK_03_IMAGE 3202
|
#define IDM_RDISK_03_IMAGE 3202
|
||||||
#define IDM_RDISK_03_RELOAD 3218
|
#define IDM_RDISK_03_EIMAGE 3218
|
||||||
#define IDM_RDISK_03_EMPTY 3234
|
#define IDM_RDISK_03_RELOAD 3234
|
||||||
|
#define IDM_RDISK_03_EMPTY 3250
|
||||||
#define IDM_RDISK_04_IMAGE 3203
|
#define IDM_RDISK_04_IMAGE 3203
|
||||||
#define IDM_RDISK_04_RELOAD 3219
|
#define IDM_RDISK_04_EIMAGE 3219
|
||||||
#define IDM_RDISK_04_EMPTY 3235
|
#define IDM_RDISK_04_RELOAD 3235
|
||||||
|
#define IDM_RDISK_04_EMPTY 3251
|
||||||
#define IDM_RDISK_05_IMAGE 3204
|
#define IDM_RDISK_05_IMAGE 3204
|
||||||
#define IDM_RDISK_05_RELOAD 3220
|
#define IDM_RDISK_05_EIMAGE 3220
|
||||||
#define IDM_RDISK_05_EMPTY 3236
|
#define IDM_RDISK_05_RELOAD 3236
|
||||||
|
#define IDM_RDISK_05_EMPTY 3252
|
||||||
#define IDM_RDISK_06_IMAGE 3205
|
#define IDM_RDISK_06_IMAGE 3205
|
||||||
#define IDM_RDISK_06_RELOAD 3221
|
#define IDM_RDISK_06_EIMAGE 3221
|
||||||
#define IDM_RDISK_06_EMPTY 3237
|
#define IDM_RDISK_06_RELOAD 3237
|
||||||
|
#define IDM_RDISK_06_EMPTY 3253
|
||||||
#define IDM_RDISK_07_IMAGE 3206
|
#define IDM_RDISK_07_IMAGE 3206
|
||||||
#define IDM_RDISK_07_RELOAD 3222
|
#define IDM_RDISK_07_EIMAGE 3222
|
||||||
#define IDM_RDISK_07_EMPTY 3238
|
#define IDM_RDISK_07_RELOAD 3238
|
||||||
|
#define IDM_RDISK_07_EMPTY 3254
|
||||||
#define IDM_RDISK_08_IMAGE 3207
|
#define IDM_RDISK_08_IMAGE 3207
|
||||||
#define IDM_RDISK_08_RELOAD 3223
|
#define IDM_RDISK_08_EIMAGE 3223
|
||||||
#define IDM_RDISK_08_EMPTY 3239
|
#define IDM_RDISK_08_RELOAD 3239
|
||||||
|
#define IDM_RDISK_08_EMPTY 3255
|
||||||
#define IDM_RDISK_09_IMAGE 3208
|
#define IDM_RDISK_09_IMAGE 3208
|
||||||
#define IDM_RDISK_09_RELOAD 3224
|
#define IDM_RDISK_09_EIMAGE 3224
|
||||||
#define IDM_RDISK_09_EMPTY 3240
|
#define IDM_RDISK_09_RELOAD 3240
|
||||||
|
#define IDM_RDISK_09_EMPTY 3256
|
||||||
#define IDM_RDISK_10_IMAGE 3209
|
#define IDM_RDISK_10_IMAGE 3209
|
||||||
#define IDM_RDISK_10_RELOAD 3225
|
#define IDM_RDISK_10_EIMAGE 3225
|
||||||
#define IDM_RDISK_10_EMPTY 3241
|
#define IDM_RDISK_10_RELOAD 3241
|
||||||
|
#define IDM_RDISK_10_EMPTY 3257
|
||||||
#define IDM_RDISK_11_IMAGE 3210
|
#define IDM_RDISK_11_IMAGE 3210
|
||||||
#define IDM_RDISK_11_RELOAD 3226
|
#define IDM_RDISK_11_EIMAGE 3226
|
||||||
#define IDM_RDISK_11_EMPTY 3242
|
#define IDM_RDISK_11_RELOAD 3242
|
||||||
|
#define IDM_RDISK_11_EMPTY 3258
|
||||||
#define IDM_RDISK_12_IMAGE 3211
|
#define IDM_RDISK_12_IMAGE 3211
|
||||||
#define IDM_RDISK_12_RELOAD 3227
|
#define IDM_RDISK_12_EIMAGE 3227
|
||||||
#define IDM_RDISK_12_EMPTY 3243
|
#define IDM_RDISK_12_RELOAD 3243
|
||||||
|
#define IDM_RDISK_12_EMPTY 3259
|
||||||
#define IDM_RDISK_13_IMAGE 3212
|
#define IDM_RDISK_13_IMAGE 3212
|
||||||
#define IDM_RDISK_13_RELOAD 3228
|
#define IDM_RDISK_13_EIMAGE 3228
|
||||||
#define IDM_RDISK_13_EMPTY 3244
|
#define IDM_RDISK_13_RELOAD 3244
|
||||||
|
#define IDM_RDISK_13_EMPTY 3260
|
||||||
#define IDM_RDISK_14_IMAGE 3213
|
#define IDM_RDISK_14_IMAGE 3213
|
||||||
#define IDM_RDISK_14_RELOAD 3229
|
#define IDM_RDISK_14_EIMAGE 3229
|
||||||
#define IDM_RDISK_14_EMPTY 3245
|
#define IDM_RDISK_14_RELOAD 3245
|
||||||
|
#define IDM_RDISK_14_EMPTY 3261
|
||||||
#define IDM_RDISK_15_IMAGE 3214
|
#define IDM_RDISK_15_IMAGE 3214
|
||||||
#define IDM_RDISK_15_RELOAD 3230
|
#define IDM_RDISK_15_EIMAGE 3230
|
||||||
#define IDM_RDISK_15_EMPTY 3246
|
#define IDM_RDISK_15_RELOAD 3246
|
||||||
|
#define IDM_RDISK_15_EMPTY 3262
|
||||||
#define IDM_RDISK_16_IMAGE 3215
|
#define IDM_RDISK_16_IMAGE 3215
|
||||||
#define IDM_RDISK_16_RELOAD 3231
|
#define IDM_RDISK_16_EIMAGE 3231
|
||||||
#define IDM_RDISK_16_EMPTY 3247
|
#define IDM_RDISK_16_RELOAD 3247
|
||||||
|
#define IDM_RDISK_16_EMPTY 3263
|
||||||
|
|
||||||
#define IDM_IDE_TER_ENABLED 44000
|
#define IDM_IDE_TER_ENABLED 44000
|
||||||
#define IDM_IDE_TER_IRQ9 44009
|
#define IDM_IDE_TER_IRQ9 44009
|
||||||
|
|||||||
186
src/scsi_disk.c
186
src/scsi_disk.c
@@ -73,7 +73,9 @@ uint8_t scsi_hd_command_flags[0x100] =
|
|||||||
0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
IMPLEMENTED | ALLOW_UA, /* 0x12 */
|
IMPLEMENTED | ALLOW_UA, /* 0x12 */
|
||||||
IMPLEMENTED | CHECK_READY | NONDATA | SCSI_ONLY, /* 0x13 */
|
IMPLEMENTED | CHECK_READY | NONDATA | SCSI_ONLY, /* 0x13 */
|
||||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0,
|
||||||
|
IMPLEMENTED | CHECK_READY, /* 0x1B */
|
||||||
|
0, 0,
|
||||||
IMPLEMENTED | CHECK_READY, /* 0x1E */
|
IMPLEMENTED | CHECK_READY, /* 0x1E */
|
||||||
0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0,
|
||||||
IMPLEMENTED | CHECK_READY, /* 0x25 */
|
IMPLEMENTED | CHECK_READY, /* 0x25 */
|
||||||
@@ -475,6 +477,10 @@ static void scsi_hd_sense_clear(int id, int command)
|
|||||||
static void scsi_hd_cmd_error(uint8_t id)
|
static void scsi_hd_cmd_error(uint8_t id)
|
||||||
{
|
{
|
||||||
shdc[id].error = ((scsi_hd_sense_key & 0xf) << 4) | ABRT_ERR;
|
shdc[id].error = ((scsi_hd_sense_key & 0xf) << 4) | ABRT_ERR;
|
||||||
|
if (shdc[id].unit_attention)
|
||||||
|
{
|
||||||
|
shdc[id].error |= MCR_ERR;
|
||||||
|
}
|
||||||
shdc[id].status = READY_STAT | ERR_STAT;
|
shdc[id].status = READY_STAT | ERR_STAT;
|
||||||
shdc[id].phase = 3;
|
shdc[id].phase = 3;
|
||||||
shdc[id].packet_status = 0x80;
|
shdc[id].packet_status = 0x80;
|
||||||
@@ -482,6 +488,28 @@ static void scsi_hd_cmd_error(uint8_t id)
|
|||||||
scsi_hd_log("SCSI HD %i: ERROR: %02X/%02X/%02X\n", id, scsi_hd_sense_key, scsi_hd_asc, scsi_hd_ascq);
|
scsi_hd_log("SCSI HD %i: ERROR: %02X/%02X/%02X\n", id, scsi_hd_sense_key, scsi_hd_asc, scsi_hd_ascq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void scsi_hd_unit_attention(uint8_t id)
|
||||||
|
{
|
||||||
|
shdc[id].error = (SENSE_UNIT_ATTENTION << 4) | ABRT_ERR;
|
||||||
|
if (cdrom[id].unit_attention)
|
||||||
|
{
|
||||||
|
shdc[id].error |= MCR_ERR;
|
||||||
|
}
|
||||||
|
shdc[id].status = READY_STAT | ERR_STAT;
|
||||||
|
shdc[id].phase = 3;
|
||||||
|
shdc[id].packet_status = 0x80;
|
||||||
|
shdc[id].callback = 50 * CDROM_TIME;
|
||||||
|
scsi_hd_log("SCSI HD %i: UNIT ATTENTION\n", id);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void scsi_hd_not_ready(uint8_t id)
|
||||||
|
{
|
||||||
|
scsi_hd_sense_key = SENSE_NOT_READY;
|
||||||
|
scsi_hd_asc = ASC_MEDIUM_NOT_PRESENT;
|
||||||
|
scsi_hd_ascq = 0;
|
||||||
|
scsi_hd_cmd_error(id);
|
||||||
|
}
|
||||||
|
|
||||||
static void scsi_hd_invalid_lun(uint8_t id)
|
static void scsi_hd_invalid_lun(uint8_t id)
|
||||||
{
|
{
|
||||||
scsi_hd_sense_key = SENSE_ILLEGAL_REQUEST;
|
scsi_hd_sense_key = SENSE_ILLEGAL_REQUEST;
|
||||||
@@ -625,6 +653,11 @@ int scsi_hd_read_blocks(uint8_t id, uint32_t *len, int first_batch)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void scsi_disk_insert(uint8_t id)
|
||||||
|
{
|
||||||
|
shdc[id].unit_attention = (hdc[id].bus == 5) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*SCSI Sense Initialization*/
|
/*SCSI Sense Initialization*/
|
||||||
void scsi_hd_sense_code_ok(uint8_t id)
|
void scsi_hd_sense_code_ok(uint8_t id)
|
||||||
{
|
{
|
||||||
@@ -635,6 +668,8 @@ void scsi_hd_sense_code_ok(uint8_t id)
|
|||||||
|
|
||||||
int scsi_hd_pre_execution_check(uint8_t id, uint8_t *cdb)
|
int scsi_hd_pre_execution_check(uint8_t id, uint8_t *cdb)
|
||||||
{
|
{
|
||||||
|
int ready = 1;
|
||||||
|
|
||||||
if (((shdc[id].request_length >> 5) & 7) != hdc[id].scsi_lun)
|
if (((shdc[id].request_length >> 5) & 7) != hdc[id].scsi_lun)
|
||||||
{
|
{
|
||||||
scsi_hd_log("SCSI HD %i: Attempting to execute a unknown command targeted at SCSI LUN %i\n", id, ((shdc[id].request_length >> 5) & 7));
|
scsi_hd_log("SCSI HD %i: Attempting to execute a unknown command targeted at SCSI LUN %i\n", id, ((shdc[id].request_length >> 5) & 7));
|
||||||
@@ -649,6 +684,55 @@ int scsi_hd_pre_execution_check(uint8_t id, uint8_t *cdb)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hdc[id].bus == 5)
|
||||||
|
{
|
||||||
|
/* Removable disk, set ready state. */
|
||||||
|
if (wcslen(hdd_fn[id]) > 0)
|
||||||
|
{
|
||||||
|
ready = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ready = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Fixed disk, clear UNIT ATTENTION, just in case it might have been set when the disk was removable). */
|
||||||
|
shdc[id].unit_attention = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ready && shdc[id].unit_attention)
|
||||||
|
{
|
||||||
|
/* If the drive is not ready, there is no reason to keep the
|
||||||
|
UNIT ATTENTION condition present, as we only use it to mark
|
||||||
|
disc changes. */
|
||||||
|
shdc[id].unit_attention = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* If the UNIT ATTENTION condition is set and the command does not allow
|
||||||
|
execution under it, error out and report the condition. */
|
||||||
|
if (shdc[id].unit_attention == 1)
|
||||||
|
{
|
||||||
|
/* Only increment the unit attention phase if the command can not pass through it. */
|
||||||
|
if (!(scsi_hd_command_flags[cdb[0]] & ALLOW_UA))
|
||||||
|
{
|
||||||
|
/* scsi_hd_log("SCSI HD %i: Unit attention now 2\n", id); */
|
||||||
|
shdc[id].unit_attention = 2;
|
||||||
|
scsi_hd_log("SCSI HD %i: UNIT ATTENTION: Command %02X not allowed to pass through\n", id, cdb[0]);
|
||||||
|
scsi_hd_unit_attention(id);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (shdc[id].unit_attention == 2)
|
||||||
|
{
|
||||||
|
if (cdb[0] != GPCMD_REQUEST_SENSE)
|
||||||
|
{
|
||||||
|
/* scsi_hd_log("SCSI HD %i: Unit attention now 0\n", id); */
|
||||||
|
shdc[id].unit_attention = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Unless the command is REQUEST SENSE, clear the sense. This will *NOT*
|
/* Unless the command is REQUEST SENSE, clear the sense. This will *NOT*
|
||||||
the UNIT ATTENTION condition if it's set. */
|
the UNIT ATTENTION condition if it's set. */
|
||||||
if (cdb[0] != GPCMD_REQUEST_SENSE)
|
if (cdb[0] != GPCMD_REQUEST_SENSE)
|
||||||
@@ -656,6 +740,14 @@ int scsi_hd_pre_execution_check(uint8_t id, uint8_t *cdb)
|
|||||||
scsi_hd_sense_clear(id, cdb[0]);
|
scsi_hd_sense_clear(id, cdb[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Next it's time for NOT READY. */
|
||||||
|
if ((scsi_hd_command_flags[cdb[0]] & CHECK_READY) && !ready)
|
||||||
|
{
|
||||||
|
scsi_hd_log("SCSI HD %i: Not ready (%02X)\n", id, cdb[0]);
|
||||||
|
scsi_hd_not_ready(id);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
scsi_hd_log("SCSI HD %i: Continuing with command\n", id);
|
scsi_hd_log("SCSI HD %i: Continuing with command\n", id);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@@ -692,14 +784,56 @@ void scsi_hd_request_sense(uint8_t id, uint8_t *buffer, uint8_t alloc_length)
|
|||||||
|
|
||||||
buffer[0] = 0x70;
|
buffer[0] = 0x70;
|
||||||
|
|
||||||
|
if (shdc[id].unit_attention && (scsi_hd_sense_key == 0))
|
||||||
|
{
|
||||||
|
buffer[2]=SENSE_UNIT_ATTENTION;
|
||||||
|
buffer[12]=ASC_MEDIUM_MAY_HAVE_CHANGED;
|
||||||
|
buffer[13]=0;
|
||||||
|
}
|
||||||
|
|
||||||
/* scsi_hd_log("SCSI HD %i: Reporting sense: %02X %02X %02X\n", id, hdbufferb[2], hdbufferb[12], hdbufferb[13]); */
|
/* scsi_hd_log("SCSI HD %i: Reporting sense: %02X %02X %02X\n", id, hdbufferb[2], hdbufferb[12], hdbufferb[13]); */
|
||||||
|
|
||||||
|
if (buffer[2] == SENSE_UNIT_ATTENTION)
|
||||||
|
{
|
||||||
|
/* If the last remaining sense is unit attention, clear
|
||||||
|
that condition. */
|
||||||
|
shdc[id].unit_attention = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Clear the sense stuff as per the spec. */
|
/* Clear the sense stuff as per the spec. */
|
||||||
scsi_hd_sense_clear(id, GPCMD_REQUEST_SENSE);
|
scsi_hd_sense_clear(id, GPCMD_REQUEST_SENSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void scsi_hd_request_sense_for_scsi(uint8_t id, uint8_t *buffer, uint8_t alloc_length)
|
void scsi_hd_request_sense_for_scsi(uint8_t id, uint8_t *buffer, uint8_t alloc_length)
|
||||||
{
|
{
|
||||||
|
int ready = 1;
|
||||||
|
|
||||||
|
if (hdc[id].bus == 5)
|
||||||
|
{
|
||||||
|
/* Removable disk, set ready state. */
|
||||||
|
if (wcslen(hdd_fn[id]) > 0)
|
||||||
|
{
|
||||||
|
ready = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ready = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Fixed disk, clear UNIT ATTENTION, just in case it might have been set when the disk was removable). */
|
||||||
|
shdc[id].unit_attention = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ready && shdc[id].unit_attention)
|
||||||
|
{
|
||||||
|
/* If the drive is not ready, there is no reason to keep the
|
||||||
|
UNIT ATTENTION condition present, as we only use it to mark
|
||||||
|
disc changes. */
|
||||||
|
shdc[id].unit_attention = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Do *NOT* advance the unit attention phase. */
|
/* Do *NOT* advance the unit attention phase. */
|
||||||
|
|
||||||
scsi_hd_request_sense(id, buffer, alloc_length);
|
scsi_hd_request_sense(id, buffer, alloc_length);
|
||||||
@@ -772,6 +906,16 @@ void scsi_hd_command(uint8_t id, uint8_t *cdb)
|
|||||||
scsi_hd_command_complete(id);
|
scsi_hd_command_complete(id);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case GPCMD_PREVENT_REMOVAL:
|
||||||
|
if (hdc[id].bus != 5)
|
||||||
|
{
|
||||||
|
scsi_hd_illegal_opcode(id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
scsi_hd_command_complete(id);
|
||||||
|
break;
|
||||||
|
|
||||||
case GPCMD_REZERO_UNIT:
|
case GPCMD_REZERO_UNIT:
|
||||||
shdc[id].sector_pos = shdc[id].sector_len = 0;
|
shdc[id].sector_pos = shdc[id].sector_len = 0;
|
||||||
scsi_hd_seek(id, 0);
|
scsi_hd_seek(id, 0);
|
||||||
@@ -921,6 +1065,37 @@ void scsi_hd_command(uint8_t id, uint8_t *cdb)
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case GPCMD_START_STOP_UNIT:
|
||||||
|
if (hdc[id].bus != 5)
|
||||||
|
{
|
||||||
|
scsi_hd_illegal_opcode(id);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch(cdbufferb[4] & 3)
|
||||||
|
{
|
||||||
|
case 0: /* Stop the disc. */
|
||||||
|
case 1: /* Start the disc and read the TOC. */
|
||||||
|
break;
|
||||||
|
case 2: /* Eject the disc if possible. */
|
||||||
|
#ifndef __unix
|
||||||
|
#if 0
|
||||||
|
win_removable_disk_eject(id);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
case 3: /* Load the disc (close tray). */
|
||||||
|
#ifndef __unix
|
||||||
|
#if 0
|
||||||
|
win_removable_disk_reload(id);
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
scsi_hd_command_complete(id);
|
||||||
|
break;
|
||||||
|
|
||||||
case GPCMD_INQUIRY:
|
case GPCMD_INQUIRY:
|
||||||
max_len = cdb[3];
|
max_len = cdb[3];
|
||||||
max_len <<= 8;
|
max_len <<= 8;
|
||||||
@@ -985,7 +1160,14 @@ void scsi_hd_command(uint8_t id, uint8_t *cdb)
|
|||||||
|
|
||||||
memset(hdbufferb, 0, 8);
|
memset(hdbufferb, 0, 8);
|
||||||
hdbufferb[0] = 0; /*SCSI HD*/
|
hdbufferb[0] = 0; /*SCSI HD*/
|
||||||
hdbufferb[1] = 0; /*Fixed*/
|
if (hdc[id].bus == 5)
|
||||||
|
{
|
||||||
|
hdbufferb[1] = 0x80; /*Removable*/
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hdbufferb[1] = 0; /*Fixed*/
|
||||||
|
}
|
||||||
hdbufferb[2] = 0x02; /*SCSI-2 compliant*/
|
hdbufferb[2] = 0x02; /*SCSI-2 compliant*/
|
||||||
hdbufferb[3] = 0x02;
|
hdbufferb[3] = 0x02;
|
||||||
hdbufferb[4] = 31;
|
hdbufferb[4] = 31;
|
||||||
|
|||||||
Reference in New Issue
Block a user