AltairZ80: Fix reset routine for DJ2D device

This commit is contained in:
Peter Schorn 2021-08-31 08:48:35 +02:00
parent eadf12699b
commit 105975feb4

View file

@ -1014,9 +1014,19 @@ static t_stat dj2d_reset(DEVICE *dptr)
uint8 i;
DJ2D_INFO *pInfo = (DJ2D_INFO *)dptr->ctxt;
for (i = 0; i < DJ2D_UNITS; i++) {
if (dj2d_info->uptr[i] == NULL) {
dj2d_info->uptr[i] = &dj2d_dev.units[i];
}
}
if (dptr->flags & DEV_DIS) { /* Disconnect I/O Ports */
sim_map_resource(pInfo->prom_base, pInfo->prom_size, RESOURCE_TYPE_MEMORY, &dj2dprom, "dj2dprom", TRUE);
sim_map_resource(pInfo->mem_base, pInfo->mem_size, RESOURCE_TYPE_MEMORY, &dj2dmem, "dj2dmem", TRUE);
/* Cancel timers */
sim_cancel(dj2d_info->uptr[0]);
sim_cancel(dj2d_info->uptr[DJ2D_SIO_UNIT]);
} else {
if (sim_map_resource(pInfo->prom_base, pInfo->prom_size, RESOURCE_TYPE_MEMORY, &dj2dprom, "dj2dprom", FALSE) != 0) {
sim_debug(ERROR_MSG, &dj2d_dev, DJ2D_SNAME ": Error mapping PROM resource at 0x%04x\n", pInfo->prom_base);
@ -1026,12 +1036,22 @@ static t_stat dj2d_reset(DEVICE *dptr)
sim_debug(ERROR_MSG, &dj2d_dev, DJ2D_SNAME ": Error mapping MEM resource at 0x%04x\n", pInfo->mem_base);
return SCPE_ARG;
}
/* Start timer for unit 0 (we only need 1 timer for all drive units) */
dj2d_info->indexTimeout = DJ2D_ROTATION_MS;
sim_activate_after(dj2d_info->uptr[0], DJ2D_TIMER * 1000);
/* Start timer for SIO unit */
sim_activate_after(dj2d_info->uptr[DJ2D_SIO_UNIT], 500); /* activate 500 us timer */
/* Disable clockFrequency if it's set */
if (getClockFrequency()) {
setClockFrequency(0);
sim_printf(DJ2D_SNAME ": CPU CLOCK register not supported. Use THROTTLE.\n");
}
for (i = 0; i < DJ2D_UNITS; i++) {
if (dj2d_info->uptr[i] == NULL) {
dj2d_info->uptr[i] = &dj2d_dev.units[i];
}
/* Configure the serial interface */
dj2d_config_line();
}
/* Reset Registers */
@ -1066,22 +1086,6 @@ static t_stat dj2d_reset(DEVICE *dptr)
dj2d_info->headLoaded[i] = FALSE;
}
/* Start timer for unit 0 (we only need 1 timer for all drive units) */
dj2d_info->indexTimeout = DJ2D_ROTATION_MS;
sim_activate_after(dj2d_info->uptr[0], DJ2D_TIMER * 1000);
/* Start timer for SIO unit */
sim_activate_after(dj2d_info->uptr[DJ2D_SIO_UNIT], 500); /* activate 500 us timer */
/* Disable clockFrequency if it's set */
if (getClockFrequency()) {
setClockFrequency(0);
sim_printf(DJ2D_SNAME ": CPU CLOCK register not supported. Use THROTTLE.\n");
}
/* Configure the serial interface */
dj2d_config_line();
sim_debug(STATUS_MSG, &dj2d_dev, DJ2D_SNAME ": reset controller.\n");
return SCPE_OK;