diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index 0e2b8d09c..77ec2d8ad 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -1140,7 +1140,7 @@ void writeide(int ide_board, uint16_t addr, uint8_t val) { cdrom[atapi_cdrom_drives[ide->channel]].error = 0; } - if ((val >= WIN_SEEK) && (val <= 0x7F)) + if (((val >= WIN_RESTORE) && (val <= 0x1F)) || ((val >= WIN_SEEK) && (val <= 0x7F))) { if (ide_drive_is_zip(ide)) { @@ -1152,18 +1152,18 @@ void writeide(int ide_board, uint16_t addr, uint8_t val) } else { - ide->atastat = READY_STAT; + ide->atastat = BUSY_STAT; } timer_process(); if (ide_drive_is_zip(ide)) { - zip[atapi_zip_drives[ide->channel]].callback = 100LL*IDE_TIME; + zip[atapi_zip_drives[ide->channel]].callback = 40000LL * TIMER_USEC /*100LL*IDE_TIME*/; } if (ide_drive_is_cdrom(ide)) { - cdrom[atapi_cdrom_drives[ide->channel]].callback = 100LL*IDE_TIME; + cdrom[atapi_cdrom_drives[ide->channel]].callback = 40000LL * TIMER_USEC /*100LL*IDE_TIME*/; } - idecallback[ide_board]=100LL*IDE_TIME; + idecallback[ide_board]=40000LL * TIMER_USEC /*100LL*IDE_TIME*/; timer_update_outstanding(); return; } @@ -1195,32 +1195,6 @@ void writeide(int ide_board, uint16_t addr, uint8_t val) timer_update_outstanding(); return; - case WIN_RESTORE: - if (ide_drive_is_zip(ide)) - { - zip[atapi_zip_drives[ide->channel]].status = READY_STAT; - } - else if (ide_drive_is_cdrom(ide)) - { - cdrom[atapi_cdrom_drives[ide->channel]].status = READY_STAT; - } - else - { - ide->atastat = READY_STAT; - } - timer_process(); - if (ide_drive_is_zip(ide)) - { - zip[atapi_zip_drives[ide->channel]].callback = 100LL*IDE_TIME; - } - if (ide_drive_is_cdrom(ide)) - { - cdrom[atapi_cdrom_drives[ide->channel]].callback = 100LL*IDE_TIME; - } - idecallback[ide_board]=100LL*IDE_TIME; - timer_update_outstanding(); - return; - case WIN_READ_MULTIPLE: /* Fatal removed in accordance with the official ATAPI reference: If the Read Multiple command is attempted before the Set Multiple Mode @@ -1917,24 +1891,21 @@ void callbackide(int ide_board) zip_id = atapi_zip_drives[cur_ide[ide_board]]; zip_id_other = atapi_zip_drives[cur_ide[ide_board] ^ 1]; - if ((ide->command >= WIN_SEEK) && (ide->command <= 0x7F)) + if (((ide->command >= WIN_RESTORE) && (ide->command <= 0x1F)) || ((ide->command >= WIN_SEEK) && (ide->command <= 0x7F))) { if (ide_drive_is_zip(ide) || ide_drive_is_cdrom(ide)) { goto abort_cmd; } - if (ide_drive_is_zip(ide)) + if ((ide->command >= WIN_SEEK) && (ide->command <= 0x7F)) { - zip[zip_id].status = READY_STAT | DSC_STAT; - } - else if (ide_drive_is_cdrom(ide)) - { - cdrom[cdrom_id].status = READY_STAT | DSC_STAT; - } - else - { - ide->atastat = READY_STAT | DSC_STAT; + full_size /= ide->t_hpc; + full_size /= ide->t_spt; + + if ((ide->cylinder >= full_size) || (ide->head >= ide->t_hpc) || !ide->sector || (ide->sector > ide->t_spt)) + goto id_not_found; } + ide->atastat = READY_STAT | DSC_STAT; ide_irq_raise(ide); return; } @@ -1969,11 +1940,6 @@ void callbackide(int ide_board) } return; - case WIN_RESTORE: - if (ide_drive_is_zip(ide) || ide_drive_is_cdrom(ide)) - { - goto abort_cmd; - } case WIN_NOP: case WIN_STANDBYNOW1: case WIN_IDLENOW1: diff --git a/src/machine/m_at_t3100e.c b/src/machine/m_at_t3100e.c index ca350dfd9..3b9e2933e 100644 --- a/src/machine/m_at_t3100e.c +++ b/src/machine/m_at_t3100e.c @@ -384,7 +384,6 @@ void t3100e_turbo_set(uint8_t value) t3100e_ems.turbo = value; if (!value) { - int c = cpu; cpu_dynamic_switch(0); /* 286/6 */ } else diff --git a/src/machine/m_xt_t1000.c b/src/machine/m_xt_t1000.c index 61301dc70..0301fcedb 100644 --- a/src/machine/m_xt_t1000.c +++ b/src/machine/m_xt_t1000.c @@ -622,6 +622,8 @@ void machine_xt_t1000_init(machine_t *model) nmi_init(); nvr_tc8521_init(); /* No gameport, and no provision to fit one device_add(&gameport_device); */ + + device_add(&t1000_device); } @@ -668,4 +670,6 @@ void machine_xt_t1200_init(machine_t *model) nmi_init(); nvr_tc8521_init(); /* No gameport, and no provision to fit one device_add(&gameport_device); */ + + device_add(&t1200_device); } diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 8a78890da..bdf5f38b2 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -11,7 +11,7 @@ * NOTES: OpenAT wip for 286-class machine with open BIOS. * PS2_M80-486 wip, pending receipt of TRM's for machine. * - * Version: @(#)machine_table.c 1.0.22 2018/03/02 + * Version: @(#)machine_table.c 1.0.23 2018/03/02 * * Authors: Sarah Walker, * Miran Grca, @@ -47,7 +47,7 @@ machine_t machines[] = { { "[8088] Schneider EuroPC", ROM_EUROPC, "europc", {{"Siemens",cpus_europc}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_HDC | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 0, machine_europc_init, NULL, NULL }, { "[8088] Tandy 1000", ROM_TANDY, "tandy", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 128, 640, 128, 0, machine_tandy1k_init, tandy1k_get_device, NULL }, { "[8088] Tandy 1000 HX", ROM_TANDY1000HX, "tandy1000hx", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 256, 640, 128, 0, machine_tandy1k_init, tandy1k_hx_get_device, NULL }, - { "[8088] Toshiba 1000", ROM_T1000, "t1000", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 512, 1280, 768, 0, machine_xt_t1000_init, t1000_get_device, NULL }, + { "[8088] Toshiba 1000", ROM_T1000, "t1000", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO, 512, 1280, 768, 0, machine_xt_t1000_init, t1000_get_device, NULL }, #if defined(DEV_BRANCH) && defined(USE_LASERXT) { "[8088] VTech Laser Turbo XT", ROM_LTXT, "ltxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 512, 512, 256, 0, machine_xt_laserxt_init, NULL, NULL }, #endif @@ -60,7 +60,7 @@ machine_t machines[] = { { "[8086] Amstrad PC20(0)", ROM_PC200, "pc200", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 63, machine_amstrad_init, NULL, nvr_at_close }, { "[8086] Olivetti M24", ROM_OLIM24, "olivetti_m24", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 128, 640, 128, 0, machine_olim24_init, NULL, NULL }, { "[8086] Tandy 1000 SL/2", ROM_TANDY1000SL2, "tandy1000sl2", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 512, 768, 128, 0, machine_tandy1k_init, NULL, NULL }, - { "[8086] Toshiba 1200", ROM_T1200, "t1200", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 1024, 2048,1024, 0, machine_xt_t1200_init, t1200_get_device, NULL }, + { "[8086] Toshiba 1200", ROM_T1200, "t1200", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO, 1024, 2048,1024, 0, machine_xt_t1200_init, t1200_get_device, NULL }, #if defined(DEV_BRANCH) && defined(USE_LASERXT) { "[8086] VTech Laser XT3", ROM_LXT3, "lxt3", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 256, 512, 256, 0, machine_xt_laserxt_init, NULL, NULL }, #endif diff --git a/src/video/vid_oak_oti.c b/src/video/vid_oak_oti.c index d35145f33..b7c7425a2 100644 --- a/src/video/vid_oak_oti.c +++ b/src/video/vid_oak_oti.c @@ -8,7 +8,7 @@ * * Oak OTI037C/67/077 emulation. * - * Version: @(#)vid_oak_oti.c 1.0.6 2018/03/02 + * Version: @(#)vid_oak_oti.c 1.0.7 2018/03/02 * * Authors: Sarah Walker, * Miran Grca, @@ -301,10 +301,11 @@ oti037c_available(void) return(rom_present(BIOS_37C_PATH)); } + static int -oti067_available(void) +oti067_077_available(void) { - return(rom_present(BIOS_67_PATH)); + return(rom_present(BIOS_77_PATH)); } @@ -330,13 +331,6 @@ static device_config_t oti067_config[] = }; -static int -oti077_available(void) -{ - return(rom_present(BIOS_77_PATH)); -} - - static device_config_t oti077_config[] = { { @@ -380,7 +374,7 @@ device_t oti067_device = DEVICE_ISA, 2, oti_init, oti_close, NULL, - oti067_available, + oti067_077_available, oti_speed_changed, oti_force_redraw, oti_add_status_info, @@ -393,7 +387,7 @@ device_t oti077_device = DEVICE_ISA, 5, oti_init, oti_close, NULL, - oti077_available, + oti067_077_available, oti_speed_changed, oti_force_redraw, oti_add_status_info, diff --git a/src/video/video.c b/src/video/video.c index 5b46a4c72..19a3a7efc 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -40,7 +40,7 @@ * W = 3 bus clocks * L = 4 bus clocks * - * Version: @(#)video.c 1.0.17 2018/03/02 + * Version: @(#)video.c 1.0.18 2018/03/02 * * Authors: Sarah Walker, * Miran Grca, @@ -346,6 +346,7 @@ static video_timings_t timing_pc1512 = {VIDEO_BUS, 0,0,0, 0,0,0}; /*PC1512 vid static video_timings_t timing_pc1640 = {VIDEO_ISA, 8,16,32, 8,16,32}; static video_timings_t timing_pc200 = {VIDEO_ISA, 8,16,32, 8,16,32}; static video_timings_t timing_m24 = {VIDEO_ISA, 8,16,32, 8,16,32}; +static video_timings_t timing_t1000 = {VIDEO_ISA, 8,16,32, 8,16,32}; static video_timings_t timing_pvga1a = {VIDEO_ISA, 6, 8,16, 6, 8,16}; static video_timings_t timing_wd90c11 = {VIDEO_ISA, 3, 3, 6, 5, 5,10}; static video_timings_t timing_vga = {VIDEO_ISA, 8,16,32, 8,16,32}; @@ -385,6 +386,10 @@ video_update_timing(void) case ROM_PC3086: timing = &timing_pvga1a; break; + case ROM_T1000: + case ROM_T1200: + timing = &timing_t1000; + break; case ROM_MEGAPC: case ROM_MEGAPCDX: timing = &timing_wd90c11;