BESM6: Reverted IO scheduling to model time; the time unit is 100 ns.

This commit is contained in:
Leo Broukhis 2014-12-31 17:26:34 -08:00
parent db44518808
commit 3ddb9e9929
7 changed files with 18 additions and 12 deletions

View file

@ -1434,9 +1434,13 @@ 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);
} }
} }
}
/* /*
* Операция прерывания 1: внутреннее прерывание. * Операция прерывания 1: внутреннее прерывание.

View file

@ -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 */

View file

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

View file

@ -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); /* Ускорим для отладки. */
} }
/* /*

View file

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

View file

@ -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]) {

View file

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