BESM6: Reverted IO scheduling to model time; the time unit is 100 ns.
This commit is contained in:
parent
db44518808
commit
3ddb9e9929
7 changed files with 18 additions and 12 deletions
|
@ -1434,8 +1434,12 @@ void cpu_one_inst ()
|
||||||
|
|
||||||
/* Если периферия простаивает, освобождаем процессор
|
/* Если периферия простаивает, освобождаем процессор
|
||||||
* до следующего тика таймера. */
|
* до следующего тика таймера. */
|
||||||
|
if (vt_is_idle() &&
|
||||||
|
printer_is_idle() && fs_is_idle()) {
|
||||||
|
check_initial_setup ();
|
||||||
sim_idle (0, TRUE);
|
sim_idle (0, TRUE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -121,7 +121,7 @@ enum {
|
||||||
/*
|
/*
|
||||||
* Считаем, что моделируеммая машина имеет опорную частоту 10 МГц.
|
* Считаем, что моделируеммая машина имеет опорную частоту 10 МГц.
|
||||||
*/
|
*/
|
||||||
#define USEC 1 /* одна микросекунда - десять тактов */
|
#define USEC 10 /* одна микросекунда - десять тактов */
|
||||||
#define MSEC (1000*USEC) /* одна миллисекунда */
|
#define MSEC (1000*USEC) /* одна миллисекунда */
|
||||||
#define CLK_TPS 250 /* Fast Clock Ticks Per Second (every 4ms) */
|
#define CLK_TPS 250 /* Fast Clock Ticks Per Second (every 4ms) */
|
||||||
#define CLK_DELAY 4000 /* Uncalibrated instructions per clock tick */
|
#define CLK_DELAY 4000 /* Uncalibrated instructions per clock tick */
|
||||||
|
|
|
@ -519,7 +519,7 @@ void disk_ctl (int ctlr, uint32 cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ждём события от устройства. */
|
/* Ждём события от устройства. */
|
||||||
sim_activate_after (u, 20*USEC); /* Ускорим для отладки. */
|
sim_activate (u, 20*USEC); /* Ускорим для отладки. */
|
||||||
|
|
||||||
} else if (cmd & BBIT(11)) {
|
} else if (cmd & BBIT(11)) {
|
||||||
/* Выбора номера устройства и занесение в регистр маски КМД.
|
/* Выбора номера устройства и занесение в регистр маски КМД.
|
||||||
|
@ -614,7 +614,7 @@ void disk_ctl (int ctlr, uint32 cmd)
|
||||||
disk_read_header (u);
|
disk_read_header (u);
|
||||||
|
|
||||||
/* Ждём события от устройства. */
|
/* Ждём события от устройства. */
|
||||||
sim_activate_after (u, 20*USEC); /* Ускорим для отладки. */
|
sim_activate (u, 20*USEC); /* Ускорим для отладки. */
|
||||||
break;
|
break;
|
||||||
case 010: /* гашение PC */
|
case 010: /* гашение PC */
|
||||||
#if 0
|
#if 0
|
||||||
|
|
|
@ -346,8 +346,8 @@ void drum (int ctlr, uint32 cmd)
|
||||||
/* Ждём события от устройства.
|
/* Ждём события от устройства.
|
||||||
* Согласно данным из книжки Мазного Г.Л.,
|
* Согласно данным из книжки Мазного Г.Л.,
|
||||||
* даём 20 мсек на обмен, или 200 тыс.тактов. */
|
* даём 20 мсек на обмен, или 200 тыс.тактов. */
|
||||||
/*sim_activate_after (u, 20*MSEC);*/
|
/*sim_activate (u, 20*MSEC);*/
|
||||||
sim_activate_after (u, 20*USEC); /* Ускорим для отладки. */
|
sim_activate (u, 20*USEC); /* Ускорим для отладки. */
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -159,7 +159,7 @@ void printer_control (int num, uint32 cmd)
|
||||||
dev->feed = LINEFEED_SYNC;
|
dev->feed = LINEFEED_SYNC;
|
||||||
READY &= ~(PRN1_LINEFEED >> num);
|
READY &= ~(PRN1_LINEFEED >> num);
|
||||||
if (dev->rampup)
|
if (dev->rampup)
|
||||||
sim_activate_after (u, dev->rampup);
|
sim_activate (u, dev->rampup);
|
||||||
dev->rampup = 0;
|
dev->rampup = 0;
|
||||||
break;
|
break;
|
||||||
case 10: /* motor and ribbon off */
|
case 10: /* motor and ribbon off */
|
||||||
|
@ -208,7 +208,7 @@ t_stat printer_event (UNIT *u)
|
||||||
GRP |= GRP_PRN1_SYNC >> num;
|
GRP |= GRP_PRN1_SYNC >> num;
|
||||||
++dev->curchar;
|
++dev->curchar;
|
||||||
/* For next char */
|
/* For next char */
|
||||||
sim_activate_after (u, 1400*USEC);
|
sim_activate (u, 1400*USEC);
|
||||||
if (dev->feed && --dev->feed == 0) {
|
if (dev->feed && --dev->feed == 0) {
|
||||||
READY |= PRN1_LINEFEED >> num;
|
READY |= PRN1_LINEFEED >> num;
|
||||||
}
|
}
|
||||||
|
@ -219,7 +219,7 @@ t_stat printer_event (UNIT *u)
|
||||||
if (printer_dev.dctrl)
|
if (printer_dev.dctrl)
|
||||||
besm6_debug(">>> АЦПУ%d 'ноль'", num);
|
besm6_debug(">>> АЦПУ%d 'ноль'", num);
|
||||||
/* For first sync after "zero" */
|
/* For first sync after "zero" */
|
||||||
sim_activate_after (u, 1000*USEC);
|
sim_activate (u, 1000*USEC);
|
||||||
}
|
}
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,7 +168,7 @@ void fs_control (int num, uint32 cmd)
|
||||||
if (fs_state[num] == FS_IDLE)
|
if (fs_state[num] == FS_IDLE)
|
||||||
besm6_debug("<<< ФС1500-%d протяжка без мотора", num);
|
besm6_debug("<<< ФС1500-%d протяжка без мотора", num);
|
||||||
else if (fs_state[num] != FS_TAIL) {
|
else if (fs_state[num] != FS_TAIL) {
|
||||||
sim_activate_after (u, FS_RATE);
|
sim_activate (u, FS_RATE);
|
||||||
bytecnt++;
|
bytecnt++;
|
||||||
} else {
|
} else {
|
||||||
if (! isfifo[num]) {
|
if (! isfifo[num]) {
|
||||||
|
|
|
@ -161,7 +161,8 @@ t_stat tty_reset (DEVICE *dptr)
|
||||||
/* Готовность устройства в READY2 инверсная, а устройство всегда готово */
|
/* Готовность устройства в READY2 инверсная, а устройство всегда готово */
|
||||||
/* Провоцируем передачу */
|
/* Провоцируем передачу */
|
||||||
PRP |= CONS_CAN_PRINT[0] | CONS_CAN_PRINT[1];
|
PRP |= CONS_CAN_PRINT[0] | CONS_CAN_PRINT[1];
|
||||||
return sim_clock_coschedule (tty_unit, 5*tmr_poll);
|
return sim_activate (tty_unit, 1000*MSEC/300);
|
||||||
|
// return sim_clock_coschedule (tty_unit, 5*tmr_poll);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 19 р ГРП, 300 Гц */
|
/* 19 р ГРП, 300 Гц */
|
||||||
|
@ -224,7 +225,8 @@ t_stat vt_clk (UNIT * this)
|
||||||
/* Опрашиваем сокеты на передачу. */
|
/* Опрашиваем сокеты на передачу. */
|
||||||
tmxr_poll_tx (&tty_desc);
|
tmxr_poll_tx (&tty_desc);
|
||||||
|
|
||||||
return sim_clock_coschedule (this, 5*tmr_poll);
|
return sim_activate (tty_unit, 1000*MSEC/300);
|
||||||
|
// return sim_clock_coschedule (this, 5*tmr_poll);
|
||||||
}
|
}
|
||||||
|
|
||||||
t_stat tty_setmode (UNIT *u, int32 val, char *cptr, void *desc)
|
t_stat tty_setmode (UNIT *u, int32 val, char *cptr, void *desc)
|
||||||
|
|
Loading…
Add table
Reference in a new issue