Applied relevant upstream commits.
Converted AT NVR to be a device, so it gets auto-closed. Added new machine_close() function which calls optional machine-custom close, updated machine table. Small fixes here and there. Re-wored the CDROM code to have a 'speeds' table instead of ugly hard-coding.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Handling of the SCSI controllers.
|
||||
*
|
||||
* Version: @(#)scsi.c 1.0.3 2018/03/15
|
||||
* Version: @(#)scsi.c 1.0.4 2018/03/19
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -186,7 +186,7 @@ scsi_card_init(void)
|
||||
|
||||
for (i=0; i<SCSI_ID_MAX; i++) {
|
||||
for (j=0; j<SCSI_LUN_MAX; j++) {
|
||||
if (scsi_hard_disks[i][j] != 0xff) {
|
||||
if (scsi_disks[i][j] != 0xff) {
|
||||
SCSIDevices[i][j].LunType = SCSI_DISK;
|
||||
} else if (scsi_cdrom_drives[i][j] != 0xff) {
|
||||
SCSIDevices[i][j].LunType = SCSI_CDROM;
|
||||
@@ -227,7 +227,7 @@ SCSIReset(uint8_t id, uint8_t lun)
|
||||
{
|
||||
uint8_t cdrom_id = scsi_cdrom_drives[id][lun];
|
||||
uint8_t zip_id = scsi_zip_drives[id][lun];
|
||||
uint8_t hdd_id = scsi_hard_disks[id][lun];
|
||||
uint8_t hdd_id = scsi_disks[id][lun];
|
||||
|
||||
if (hdd_id != 0xff) {
|
||||
scsi_hd_reset(hdd_id);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* SCSI controller handler header.
|
||||
*
|
||||
* Version: @(#)scsi.h 1.0.2 2018/03/15
|
||||
* Version: @(#)scsi.h 1.0.3 2018/03/19
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -320,7 +320,7 @@ extern void scsi_mutex(uint8_t start);
|
||||
extern void scsi_card_init(void);
|
||||
extern void scsi_card_reset(void);
|
||||
|
||||
extern uint8_t scsi_hard_disks[16][8];
|
||||
extern uint8_t scsi_disks[16][8];
|
||||
|
||||
extern int scsi_hd_err_stat_to_scsi(uint8_t id);
|
||||
extern int scsi_hd_phase_to_scsi(uint8_t id);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* The generic SCSI device command handler.
|
||||
*
|
||||
* Version: @(#)scsi_device.c 1.0.3 2018/03/08
|
||||
* Version: @(#)scsi_device.c 1.0.5 2018/03/19
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -111,7 +111,7 @@ scsi_device_target_save_cdb_byte(int lun_type, uint8_t id, uint8_t cdb_byte)
|
||||
shdc[id].request_length = cdb_byte;
|
||||
}
|
||||
else if (lun_type == SCSI_CDROM) {
|
||||
cdrom[id].request_length = cdb_byte;
|
||||
cdrom[id]->request_length = cdb_byte;
|
||||
}
|
||||
else if (lun_type == SCSI_ZIP) {
|
||||
zip[id].request_length = cdb_byte;
|
||||
@@ -127,11 +127,11 @@ scsi_device_get_callback(uint8_t scsi_id, uint8_t scsi_lun)
|
||||
|
||||
switch (lun_type) {
|
||||
case SCSI_DISK:
|
||||
id = scsi_hard_disks[scsi_id][scsi_lun];
|
||||
id = scsi_disks[scsi_id][scsi_lun];
|
||||
return shdc[id].callback;
|
||||
case SCSI_CDROM:
|
||||
id = scsi_cdrom_drives[scsi_id][scsi_lun];
|
||||
return cdrom[id].callback;
|
||||
return cdrom[id]->callback;
|
||||
case SCSI_ZIP:
|
||||
id = scsi_zip_drives[scsi_id][scsi_lun];
|
||||
return zip[id].callback;
|
||||
@@ -151,11 +151,11 @@ scsi_device_sense(uint8_t scsi_id, uint8_t scsi_lun)
|
||||
|
||||
switch (lun_type) {
|
||||
case SCSI_DISK:
|
||||
id = scsi_hard_disks[scsi_id][scsi_lun];
|
||||
id = scsi_disks[scsi_id][scsi_lun];
|
||||
return shdc[id].sense;
|
||||
case SCSI_CDROM:
|
||||
id = scsi_cdrom_drives[scsi_id][scsi_lun];
|
||||
return cdrom[id].sense;
|
||||
return cdrom[id]->sense;
|
||||
case SCSI_ZIP:
|
||||
id = scsi_zip_drives[scsi_id][scsi_lun];
|
||||
return zip[id].sense;
|
||||
@@ -175,7 +175,7 @@ scsi_device_request_sense(uint8_t scsi_id, uint8_t scsi_lun, uint8_t *buffer, ui
|
||||
|
||||
switch (lun_type) {
|
||||
case SCSI_DISK:
|
||||
id = scsi_hard_disks[scsi_id][scsi_lun];
|
||||
id = scsi_disks[scsi_id][scsi_lun];
|
||||
scsi_hd_request_sense_for_scsi(id, buffer, alloc_length);
|
||||
break;
|
||||
case SCSI_CDROM:
|
||||
@@ -201,7 +201,7 @@ scsi_device_type_data(uint8_t scsi_id, uint8_t scsi_lun, uint8_t *type, uint8_t
|
||||
|
||||
switch (lun_type) {
|
||||
case SCSI_DISK:
|
||||
id = scsi_hard_disks[scsi_id][scsi_lun];
|
||||
id = scsi_disks[scsi_id][scsi_lun];
|
||||
*type = 0x00;
|
||||
*rmb = (hdd[id].bus == HDD_BUS_SCSI_REMOVABLE) ? 0x80 : 0x00;
|
||||
break;
|
||||
@@ -228,7 +228,7 @@ scsi_device_read_capacity(uint8_t scsi_id, uint8_t scsi_lun, uint8_t *cdb, uint8
|
||||
|
||||
switch (lun_type) {
|
||||
case SCSI_DISK:
|
||||
id = scsi_hard_disks[scsi_id][scsi_lun];
|
||||
id = scsi_disks[scsi_id][scsi_lun];
|
||||
return scsi_hd_read_capacity(id, cdb, buffer, len);
|
||||
case SCSI_CDROM:
|
||||
id = scsi_cdrom_drives[scsi_id][scsi_lun];
|
||||
@@ -268,7 +268,7 @@ scsi_device_valid(uint8_t scsi_id, uint8_t scsi_lun)
|
||||
|
||||
switch (lun_type) {
|
||||
case SCSI_DISK:
|
||||
id = scsi_hard_disks[scsi_id][scsi_lun];
|
||||
id = scsi_disks[scsi_id][scsi_lun];
|
||||
break;
|
||||
case SCSI_CDROM:
|
||||
id = scsi_cdrom_drives[scsi_id][scsi_lun];
|
||||
@@ -294,7 +294,7 @@ scsi_device_cdb_length(uint8_t scsi_id, uint8_t scsi_lun)
|
||||
switch (lun_type) {
|
||||
case SCSI_CDROM:
|
||||
id = scsi_cdrom_drives[scsi_id][scsi_lun];
|
||||
return cdrom[id].cdb_len;
|
||||
return cdrom[id]->cdb_len;
|
||||
case SCSI_ZIP:
|
||||
id = scsi_zip_drives[scsi_id][scsi_lun];
|
||||
return zip[id].cdb_len;
|
||||
@@ -314,7 +314,7 @@ scsi_device_command_phase0(uint8_t scsi_id, uint8_t scsi_lun, int cdb_len, uint8
|
||||
|
||||
switch (lun_type) {
|
||||
case SCSI_DISK:
|
||||
id = scsi_hard_disks[scsi_id][scsi_lun];
|
||||
id = scsi_disks[scsi_id][scsi_lun];
|
||||
break;
|
||||
case SCSI_CDROM:
|
||||
id = scsi_cdrom_drives[scsi_id][scsi_lun];
|
||||
@@ -363,7 +363,7 @@ void scsi_device_command_phase1(uint8_t scsi_id, uint8_t scsi_lun)
|
||||
|
||||
switch (lun_type) {
|
||||
case SCSI_DISK:
|
||||
id = scsi_hard_disks[scsi_id][scsi_lun];
|
||||
id = scsi_disks[scsi_id][scsi_lun];
|
||||
break;
|
||||
case SCSI_CDROM:
|
||||
id = scsi_cdrom_drives[scsi_id][scsi_lun];
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Emulation of SCSI fixed and removable disks.
|
||||
*
|
||||
* Version: @(#)scsi_disk.c 1.0.4 2018/03/16
|
||||
* Version: @(#)scsi_disk.c 1.0.4 2018/03/19
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -45,8 +45,8 @@
|
||||
#include "../version.h"
|
||||
#include "../timer.h"
|
||||
#include "../device.h"
|
||||
#include "../nvr.h"
|
||||
#include "../intel_piix.h"
|
||||
#include "../nvr.h"
|
||||
#include "../cdrom/cdrom.h"
|
||||
#include "../disk/hdd.h"
|
||||
#include "../disk/hdc.h"
|
||||
@@ -77,10 +77,10 @@
|
||||
#define scsi_hd_ascq shdc[id].sense[13]
|
||||
|
||||
|
||||
scsi_hard_disk_t shdc[HDD_NUM];
|
||||
FILE *shdf[HDD_NUM];
|
||||
scsi_disk_t shdc[HDD_NUM];
|
||||
FILE *shdf[HDD_NUM];
|
||||
|
||||
uint8_t scsi_hard_disks[16][8] = {
|
||||
uint8_t scsi_disks[16][8] = {
|
||||
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
|
||||
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
|
||||
{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
|
||||
@@ -255,7 +255,7 @@ scsi_loadhd(int scsi_id, int scsi_lun, int id)
|
||||
{
|
||||
if (! hdd_image_load(id)) {
|
||||
if (hdd[id].bus != HDD_BUS_SCSI_REMOVABLE) {
|
||||
scsi_hard_disks[scsi_id][scsi_lun] = 0xff;
|
||||
scsi_disks[scsi_id][scsi_lun] = 0xff;
|
||||
}
|
||||
} else {
|
||||
scsi_disk_insert(id);
|
||||
@@ -296,15 +296,15 @@ build_scsi_hd_map(void)
|
||||
uint8_t i, j;
|
||||
|
||||
for (i=0; i<16; i++)
|
||||
memset(scsi_hard_disks[i], 0xff, 8);
|
||||
memset(scsi_disks[i], 0xff, 8);
|
||||
|
||||
for (i=0; i<16; i++) {
|
||||
for (j=0; j<8; j++) {
|
||||
scsi_hard_disks[i][j] = find_hdd_for_scsi_id(i, j);
|
||||
if (scsi_hard_disks[i][j] != 0xff) {
|
||||
memset(&(shdc[scsi_hard_disks[i][j]]), 0, sizeof(shdc[scsi_hard_disks[i][j]]));
|
||||
if (wcslen(hdd[scsi_hard_disks[i][j]].fn) > 0) {
|
||||
scsi_loadhd(i, j, scsi_hard_disks[i][j]);
|
||||
scsi_disks[i][j] = find_hdd_for_scsi_id(i, j);
|
||||
if (scsi_disks[i][j] != 0xff) {
|
||||
memset(&(shdc[scsi_disks[i][j]]), 0, sizeof(shdc[scsi_disks[i][j]]));
|
||||
if (wcslen(hdd[scsi_disks[i][j]].fn) > 0) {
|
||||
scsi_loadhd(i, j, scsi_disks[i][j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Emulation of SCSI fixed and removable disks.
|
||||
*
|
||||
* Version: @(#)scsi_disk.h 1.0.1 2018/02/14
|
||||
* Version: @(#)scsi_disk.h 1.0.2 2018/03/19
|
||||
*
|
||||
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -81,10 +81,10 @@ typedef struct {
|
||||
int block_descriptor_len;
|
||||
|
||||
uint8_t *temp_buffer;
|
||||
} scsi_hard_disk_t;
|
||||
} scsi_disk_t;
|
||||
|
||||
|
||||
extern scsi_hard_disk_t shdc[HDD_NUM];
|
||||
extern scsi_disk_t shdc[HDD_NUM];
|
||||
extern FILE *shdf[HDD_NUM];
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user