diff --git a/src/devices/cdrom/cdrom.c b/src/devices/cdrom/cdrom.c index 6ec3e62..112f999 100644 --- a/src/devices/cdrom/cdrom.c +++ b/src/devices/cdrom/cdrom.c @@ -9,7 +9,7 @@ * Implementation of the CD-ROM drive with SCSI(-like) * commands, for both ATAPI and SCSI usage. * - * Version: @(#)cdrom.c 1.0.15 2018/05/08 + * Version: @(#)cdrom.c 1.0.16 2018/09/21 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -145,7 +145,7 @@ const cdrom_speed_t cdrom_speeds[] = { #pragma pack(push,1) -static struct +typedef struct { uint8_t opcode; uint8_t polled; @@ -154,16 +154,16 @@ static struct uint8_t reserved3[2]; uint16_t len; uint8_t control; -} *gesn_cdb; +} gesn_cdb_t; #pragma pack(pop) #pragma pack(push,1) -static struct +typedef struct { uint16_t len; uint8_t notification_class; uint8_t supported_events; -} *gesn_event_header; +} gesn_event_header_t; #pragma pack(pop) @@ -401,6 +401,8 @@ static const mode_sense_pages_t cdrom_mode_sense_pages_changeable = } }; static mode_sense_pages_t cdrom_mode_sense_pages_saved[CDROM_NUM]; +static gesn_cdb_t *gesn_cdb; +static gesn_event_header_t *gesn_event_header; #ifdef ENABLE_CDROM_LOG @@ -2282,7 +2284,7 @@ cdrom_readtoc_fallback: case GPCMD_GET_EVENT_STATUS_NOTIFICATION: cdrom_set_phase(id, SCSI_PHASE_DATA_IN); - cdrom_buf_alloc(id, 8 + sizeof(gesn_event_header)); + cdrom_buf_alloc(id, 8 + sizeof(gesn_event_header_t)); gesn_cdb = (void *) cdb; gesn_event_header = (void *) cdbufferb; diff --git a/src/devices/floppy/fdc.c b/src/devices/floppy/fdc.c index 3012682..f752761 100644 --- a/src/devices/floppy/fdc.c +++ b/src/devices/floppy/fdc.c @@ -9,7 +9,7 @@ * Implementation of the NEC uPD-765 and compatible floppy disk * controller. * - * Version: @(#)fdc.c 1.0.14 2018/06/25 + * Version: @(#)fdc.c 1.0.15 2018/09/21 * * Authors: Miran Grca, * Sarah Walker, @@ -1233,8 +1233,8 @@ fdc_write(uint16_t addr, uint8_t val, void *priv) return; case 7: - if (! (fdc->flags & FDC_FLAG_AT)) - return; + if (!(fdc->flags & FDC_FLAG_AT) && + !(fdc->flags & FDC_FLAG_TOSHIBA)) return; fdc->rate = val & 3; return; } @@ -1341,13 +1341,22 @@ fdc_read(uint16_t addr, void *priv) case 7: /*Disk change*/ drive = real_drive(fdc, fdc->dor & 3); - if (fdc->dor & (0x10 << drive)) - ret = (fdd_changed[drive] || drive_empty[drive])?0x80:0; - else - ret = 0; - if (fdc->flags & FDC_FLAG_DISKCHG_ACTLOW) - ret ^= 0x80; - ret |= 0x01; + ret = 0x00; + + if (fdc->flags & FDC_FLAG_TOSHIBA) { + /* + * T1200 only has the DSCH bit set for the + * internal 3.5" drive, otherwise it is 0. + */ + if ((drive == 0) && (fdc->dor & (0x10 << drive))) + ret = (fdd_changed[drive] || drive_empty[drive]) ? 0x80 : 0x00; + } else { + if (fdc->dor & (0x10 << drive)) + ret = (fdd_changed[drive] || drive_empty[drive])?0x80:0; + if (fdc->flags & FDC_FLAG_DISKCHG_ACTLOW) + ret ^= 0x80; + ret |= 0x01; + } break; default: @@ -2076,6 +2085,8 @@ fdc_set_base(fdc_t *fdc, int base) io_sethandler(base+2, 1, NULL,NULL,NULL, fdc_write,NULL,NULL, fdc); io_sethandler(base+4, 1, fdc_read,NULL,NULL, NULL,NULL,NULL, fdc); io_sethandler(base+5, 1, fdc_read,NULL,NULL, fdc_write,NULL,NULL, fdc); + if (fdc->flags & FDC_FLAG_TOSHIBA) + io_sethandler(base+7, 1, fdc_read,NULL,NULL, fdc_write,NULL,NULL, fdc); } fdc->base_address = base; @@ -2101,6 +2112,8 @@ fdc_remove(fdc_t *fdc) fdc_read,NULL,NULL, NULL,NULL,NULL, fdc); io_removehandler(fdc->base_address+5, 1, fdc_read,NULL,NULL, fdc_write,NULL,NULL, fdc); + if (fdc->flags & FDC_FLAG_TOSHIBA) + io_removehandler(fdc->base_address+7, 1, fdc_read,NULL,NULL, fdc_write,NULL,NULL, fdc); } fdc_log("FDC: removed (%04X)\n", fdc->base_address); @@ -2229,6 +2242,15 @@ const device_t fdc_xt_device = { NULL }; +const device_t fdc_xt_toshiba_device = { + "Toshiba TC8565 Floppy Drive Controller", + 0, + FDC_FLAG_TOSHIBA, + fdc_init, fdc_close, fdc_reset, + NULL, NULL, NULL, NULL, + NULL +}; + const device_t fdc_pcjr_device = { "PCjr Floppy Drive Controller", 0, diff --git a/src/devices/floppy/fdc.h b/src/devices/floppy/fdc.h index 0d540e9..7e01a63 100644 --- a/src/devices/floppy/fdc.h +++ b/src/devices/floppy/fdc.h @@ -9,7 +9,7 @@ * Implementation of the NEC uPD-765 and compatible floppy disk * controller. * - * Version: @(#)fdc.h 1.0.3 2018/03/17 + * Version: @(#)fdc.h 1.0.4 2018/09/21 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -49,6 +49,7 @@ #define FDC_FLAG_START_RWC_1 0x20 /* W83877F, W83977F */ #define FDC_FLAG_MORE_TRACKS 0x40 /* W83877F, W83977F, PC87306, PC87309 */ #define FDC_FLAG_NSC 0x80 /* PC87306, PC87309 */ +#define FDC_FLAG_TOSHIBA 0x100 /* Toshiba TC8565 */ typedef struct { @@ -181,6 +182,7 @@ extern uint8_t fdc_ps1_525(void); #ifdef EMU_DEVICE_H extern const device_t fdc_xt_device; +extern const device_t fdc_xt_toshiba_device; extern const device_t fdc_pcjr_device; extern const device_t fdc_at_device; extern const device_t fdc_at_actlow_device; diff --git a/src/devices/scsi/scsi_bus.c b/src/devices/scsi/scsi_bus.c index e46d4ec..68f2c3c 100644 --- a/src/devices/scsi/scsi_bus.c +++ b/src/devices/scsi/scsi_bus.c @@ -11,7 +11,7 @@ * NOTES: For now ported from PCem with some modifications * but at least it's a start. * - * Version: @(#)scsi_bus.c 1.0.2 2018/05/06 + * Version: @(#)scsi_bus.c 1.0.3 2018/09/21 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -85,7 +85,7 @@ scsi_bus_log(const char *fmt, ...) /* get the length of a SCSI command based on its command byte type */ static int get_cmd_len(int cbyte) { - int len; + int len = -1; int group; group = (cbyte>>5) & 7; diff --git a/src/devices/video/vid_sdac_ramdac.c b/src/devices/video/vid_sdac_ramdac.c index e77a0d1..f9d112b 100644 --- a/src/devices/video/vid_sdac_ramdac.c +++ b/src/devices/video/vid_sdac_ramdac.c @@ -10,7 +10,7 @@ * * Misidentifies as AT&T 21C504. * - * Version: @(#)vid_sdac_ramdac.c 1.0.4 2018/05/06 + * Version: @(#)vid_sdac_ramdac.c 1.0.5 2018/09/21 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -138,7 +138,7 @@ void sdac_ramdac_out(uint16_t addr, uint8_t val, sdac_ramdac_t *ramdac, svga_t * uint8_t sdac_ramdac_in(uint16_t addr, sdac_ramdac_t *ramdac, svga_t *svga) { - uint8_t temp; + uint8_t temp = 0xff; switch (addr) { case 2: diff --git a/src/machines/m_xt_t1000.c b/src/machines/m_xt_t1000.c index 0e439e2..8a73b90 100644 --- a/src/machines/m_xt_t1000.c +++ b/src/machines/m_xt_t1000.c @@ -50,7 +50,7 @@ * * FIXME: The ROM drive should be re-done using the "option file". * - * Version: @(#)m_xt_t1000.c 1.0.13 2018/05/06 + * Version: @(#)m_xt_t1000.c 1.0.14 2018/09/21 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -1032,7 +1032,7 @@ machine_xt_t1200_init(const machine_t *model, void *arg) pit_set_out_func(&pit, 1, pit_refresh_timer_xt); device_add(&keyboard_xt_device); - t1000.fdc = device_add(&fdc_xt_device); + t1000.fdc = device_add(&fdc_xt_toshiba_device); nmi_init(); tc8521_init(&t1000.nvr, model->nvrsz); diff --git a/src/mem.c b/src/mem.c index c0669b8..2e14b36 100644 --- a/src/mem.c +++ b/src/mem.c @@ -12,7 +12,7 @@ * the DYNAMIC_TABLES=1 enables this. Will eventually go * away, either way... * - * Version: @(#)mem.c 1.0.20 2018/09/03 + * Version: @(#)mem.c 1.0.21 2018/09/19 * * Authors: Fred N. van Kempen, * Miran Grca, diff --git a/src/ui/lang/VARCem-EN.str b/src/ui/lang/VARCem-EN.str index f79b9ac..0cae447 100644 --- a/src/ui/lang/VARCem-EN.str +++ b/src/ui/lang/VARCem-EN.str @@ -79,9 +79,9 @@ #define STR_2303 "The configured machine:\n\n %ls\n\nis not available.\n\nWould you like to enter the Settings dialog?" #define STR_2304 "Configured video card:\n\n %ls\n\nis not available.\n\nWould you like to enter the Settings dialog?" #define STR_2305 "Selected renderer '%S' not available. Reset to default?" -#define STR_2306 "ST506 or ESDI CD-ROM drives never existed" +#define STR_2306 "ST506/ESDI CDROM drives never existed!" #define STR_2307 "USB is not yet supported" -#define STR_2308 "You must save your new settings first!" +#define STR_2308 "You must save your settings first!" /* Application messages (2400.) */ diff --git a/src/ui/ui_resource.h b/src/ui/ui_resource.h index 36488f3..f11a3f7 100644 --- a/src/ui/ui_resource.h +++ b/src/ui/ui_resource.h @@ -12,7 +12,7 @@ * they are not referenced outside of the platform UI. This * may change at some point. * - * Version: @(#)ui_resource.h 1.0.15 2018/09/03 + * Version: @(#)ui_resource.h 1.0.16 2018/09/21 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -221,7 +221,7 @@ #define IDS_ERR_NOMACH 2303 // "Configured machine not avai.." #define IDS_ERR_NOVIDEO 2304 // "Configured video card not.." #define IDS_ERR_NORENDR 2305 // "Selected renderer not avai.." -#define IDS_ERR_NOCDROM 2306 // "ST506 or ESDI CD-ROM driv.." +#define IDS_ERR_NOCDROM 2306 // "ST506/ESDI CDROM drives.." #define IDS_ERR_NO_USB 2307 // "USB is not yet supported" #define IDS_ERR_SAVEIT 2308 // "Must save new config first.."