From bd50637b18bb5e35c8c07016cbfc9905654d4abb Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 1 Jan 2015 20:08:23 -0800 Subject: [PATCH] BESM6: Working calibrated clock which also supports idling BESM6: Single instruction calibration and step cleanup --- BESM6/besm6_cpu.c | 11 ++--------- BESM6/besm6_defs.h | 2 +- BESM6/besm6_tty.c | 13 +++++++------ BESM6/dispak.ini | 10 ++++------ 4 files changed, 14 insertions(+), 22 deletions(-) diff --git a/BESM6/besm6_cpu.c b/BESM6/besm6_cpu.c index 0b0aad80..dc1ffd12 100644 --- a/BESM6/besm6_cpu.c +++ b/BESM6/besm6_cpu.c @@ -1494,7 +1494,6 @@ t_stat sim_instr (void) /* Restore register state */ PC = PC & BITS(15); /* mask PC */ - sim_cancel_step (); /* defang SCP step */ mmu_setup (); /* copy RP to TLB */ /* An internal interrupt or user intervention */ @@ -1688,13 +1687,7 @@ t_stat sim_instr (void) redraw_panel = 0; } - if (delay < 1) - delay = 1; - sim_interval -= delay; /* count down delay */ - if (sim_step && (--sim_step <= 0)) { /* do step count */ - besm6_draw_panel(); - return SCPE_STOP; - } + sim_interval -= 1; /* count down instructions */ } } @@ -1729,7 +1722,7 @@ t_stat fast_clk (UNIT * this) } UNIT clocks[] = { - { UDATA(fast_clk, 0, 0), CLK_DELAY }, /* 40 р, 50 Гц */ + { UDATA(fast_clk, UNIT_IDLE, 0), CLK_DELAY }, /* 40 р, 50 Гц */ }; t_stat clk_reset (DEVICE * dev) diff --git a/BESM6/besm6_defs.h b/BESM6/besm6_defs.h index 96fb27cb..a933664a 100644 --- a/BESM6/besm6_defs.h +++ b/BESM6/besm6_defs.h @@ -121,7 +121,7 @@ enum { /* * Считаем, что моделируеммая машина имеет опорную частоту 10 МГц. */ -#define USEC 10 /* одна микросекунда - десять тактов */ +#define USEC 1 /* одна микросекунда - десять тактов */ #define MSEC (1000*USEC) /* одна миллисекунда */ #define CLK_TPS 250 /* Fast Clock Ticks Per Second (every 4ms) */ #define CLK_DELAY 4000 /* Uncalibrated instructions per clock tick */ diff --git a/BESM6/besm6_tty.c b/BESM6/besm6_tty.c index c59d2f5a..729fb714 100644 --- a/BESM6/besm6_tty.c +++ b/BESM6/besm6_tty.c @@ -161,8 +161,8 @@ t_stat tty_reset (DEVICE *dptr) /* Готовность устройства в READY2 инверсная, а устройство всегда готово */ /* Провоцируем передачу */ PRP |= CONS_CAN_PRINT[0] | CONS_CAN_PRINT[1]; - return sim_activate (tty_unit, 1000*MSEC/300); - // return sim_clock_coschedule (tty_unit, 5*tmr_poll); + //return sim_activate_after (tty_unit, 1000*MSEC/300); + return sim_clock_coschedule (tty_unit, tmr_poll); } /* 19 р ГРП, 300 Гц */ @@ -225,8 +225,8 @@ t_stat vt_clk (UNIT * this) /* Опрашиваем сокеты на передачу. */ tmxr_poll_tx (&tty_desc); - return sim_activate (tty_unit, 1000*MSEC/300); - // return sim_clock_coschedule (this, 5*tmr_poll); + // return sim_activate_after (tty_unit, 1000*MSEC/300); + return sim_clock_coschedule (this, tmr_poll); } t_stat tty_setmode (UNIT *u, int32 val, char *cptr, void *desc) @@ -996,8 +996,9 @@ int vt_getc (int num) } else { /* Ввод с клавиатуры. */ c = sim_poll_kbd(); - if (c == SCPE_STOP) + if (c == SCPE_STOP) { return 0400; /* прерывание */ + } if (! (c & SCPE_KFLAG)) return -1; } @@ -1136,7 +1137,7 @@ void vt_receive() } if (tty_typed[num] < 0) { /* TODO: обработать исключение от "неоператорского" терминала */ - sim_interval = 0; +// sim_interval = 0; break; } if (tty_typed[num] <= 0177) { diff --git a/BESM6/dispak.ini b/BESM6/dispak.ini index c812b662..078a6c12 100644 --- a/BESM6/dispak.ini +++ b/BESM6/dispak.ini @@ -1,5 +1,4 @@ -! rm -f log.txt -set console log=log.txt +set -n console log=log.txt set console debug=log ;set cpu debug ;set mmu debug @@ -9,9 +8,8 @@ set console debug=log ; ; Приводим барабаны в исходное состояние. ; -! rm -f drum1x.bin drum2x.bin -attach drum0 drum1x.bin -attach drum1 drum2x.bin +attach -n drum0 drum1x.bin +attach -n drum1 drum2x.bin ; ; Создаем рабочий диск. @@ -43,7 +41,7 @@ attach tty1 /dev/tty ; ;set tty1 jcuken,authbs set tty1 authbs -set tty1 log=tty1.txt +set -n tty1 log=tty1.txt ; ; Разрешаем подключение пользователей по telnet, порт 4199.