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:
waltje
2018-03-20 17:13:12 -05:00
parent 110070466a
commit 1cf45a9724
55 changed files with 1887 additions and 1414 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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];

View File

@@ -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]);
}
}
}

View File

@@ -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];