BESM6: Removed tabs, reindented, removed GNU extensions.
This commit is contained in:
parent
b4eeaa77de
commit
cc33257836
15 changed files with 5776 additions and 5782 deletions
|
@ -447,15 +447,16 @@ static void cmd_002 ()
|
||||||
besm6_debug ("*** рег %03o", Aex & 0377);
|
besm6_debug ("*** рег %03o", Aex & 0377);
|
||||||
#endif
|
#endif
|
||||||
switch (Aex & 0377) {
|
switch (Aex & 0377) {
|
||||||
case 0 ... 7:
|
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
|
||||||
/* Запись в БРЗ */
|
/* Запись в БРЗ */
|
||||||
mmu_setcache (Aex & 7, ACC);
|
mmu_setcache (Aex & 7, ACC);
|
||||||
break;
|
break;
|
||||||
case 020 ... 027:
|
case 020: case 021: case 022: case 023:
|
||||||
|
case 024: case 025: case 026: case 027:
|
||||||
/* Запись в регистры приписки */
|
/* Запись в регистры приписки */
|
||||||
mmu_setrp (Aex & 7, ACC);
|
mmu_setrp (Aex & 7, ACC);
|
||||||
break;
|
break;
|
||||||
case 030 ... 033:
|
case 030: case 031: case 032: case 033:
|
||||||
/* Запись в регистры защиты */
|
/* Запись в регистры защиты */
|
||||||
mmu_setprotection (Aex & 3, ACC);
|
mmu_setprotection (Aex & 3, ACC);
|
||||||
break;
|
break;
|
||||||
|
@ -468,8 +469,12 @@ static void cmd_002 ()
|
||||||
/* нехранящие биты невозможно погасить */
|
/* нехранящие биты невозможно погасить */
|
||||||
GRP &= ACC | GRP_WIRED_BITS;
|
GRP &= ACC | GRP_WIRED_BITS;
|
||||||
break;
|
break;
|
||||||
case 0100 ... 0137:
|
case 64: case 65: case 66: case 67: case 68: case 69: case 70: case 71:
|
||||||
/* Бит 1: управление блокировкой режима останова БРО.
|
case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79:
|
||||||
|
case 80: case 81: case 82: case 83: case 84: case 85: case 86: case 87:
|
||||||
|
case 88: case 89: case 90: case 91: case 92: case 93: case 94: case 95:
|
||||||
|
/* 0100 - 0137:
|
||||||
|
* Бит 1: управление блокировкой режима останова БРО.
|
||||||
* Биты 2 и 3 - признаки формирования контрольных
|
* Биты 2 и 3 - признаки формирования контрольных
|
||||||
* разрядов (ПКП и ПКЛ). */
|
* разрядов (ПКП и ПКЛ). */
|
||||||
if (Aex & 1)
|
if (Aex & 1)
|
||||||
|
@ -485,12 +490,8 @@ static void cmd_002 ()
|
||||||
else
|
else
|
||||||
RUU &= ~RUU_CONVOL_LEFT;
|
RUU &= ~RUU_CONVOL_LEFT;
|
||||||
break;
|
break;
|
||||||
case 0140 ... 0177:
|
case 0200: case 0201: case 0202: case 0203:
|
||||||
/* TODO: управление блокировкой схемы
|
case 0204: case 0205: case 0206: case 0207:
|
||||||
* автоматического запуска */
|
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
|
||||||
break;
|
|
||||||
case 0200 ... 0207:
|
|
||||||
/* Чтение БРЗ */
|
/* Чтение БРЗ */
|
||||||
ACC = mmu_getcache (Aex & 7);
|
ACC = mmu_getcache (Aex & 7);
|
||||||
break;
|
break;
|
||||||
|
@ -499,6 +500,11 @@ static void cmd_002 ()
|
||||||
ACC = GRP;
|
ACC = GRP;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
if ((Aex & 0340) == 0140) {
|
||||||
|
/* TODO: управление блокировкой схемы
|
||||||
|
* автоматического запуска */
|
||||||
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
|
}
|
||||||
/* Неиспользуемые адреса */
|
/* Неиспользуемые адреса */
|
||||||
besm6_debug ("*** %05o%s: РЕГ %o - неправильный адрес спец.регистра",
|
besm6_debug ("*** %05o%s: РЕГ %o - неправильный адрес спец.регистра",
|
||||||
PC, (RUU & RUU_RIGHT_INSTR) ? "п" : "л", Aex);
|
PC, (RUU & RUU_RIGHT_INSTR) ? "п" : "л", Aex);
|
||||||
|
@ -520,32 +526,32 @@ static void cmd_033 ()
|
||||||
/* Точно неизвестно, что это такое, но драйвер МД
|
/* Точно неизвестно, что это такое, но драйвер МД
|
||||||
* иногда выдает команду "увв 0". */
|
* иногда выдает команду "увв 0". */
|
||||||
break;
|
break;
|
||||||
case 1 ... 2:
|
case 1: case 2:
|
||||||
/* Управление обменом с магнитными барабанами */
|
/* Управление обменом с магнитными барабанами */
|
||||||
drum (Aex - 1, (uint32) ACC);
|
drum (Aex - 1, (uint32) ACC);
|
||||||
break;
|
break;
|
||||||
case 3 ... 4:
|
case 3: case 4:
|
||||||
/* Передача управляющего слова для обмена
|
/* Передача управляющего слова для обмена
|
||||||
* с магнитными дисками */
|
* с магнитными дисками */
|
||||||
disk_io (Aex - 3, (uint32) ACC);
|
disk_io (Aex - 3, (uint32) ACC);
|
||||||
break;
|
break;
|
||||||
case 5 ... 7:
|
case 5: case 6: case 7:
|
||||||
/* TODO: управление обменом с магнитными лентами */
|
/* TODO: управление обменом с магнитными лентами */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 010 ... 011:
|
case 010: case 011:
|
||||||
/* управление устройствами ввода с перфоленты */
|
/* управление устройствами ввода с перфоленты */
|
||||||
fs_control (Aex - 010, (uint32) (ACC & 07));
|
fs_control (Aex - 010, (uint32) (ACC & 07));
|
||||||
break;
|
break;
|
||||||
case 012 ... 013:
|
case 012: case 013:
|
||||||
/* TODO: управление устройствами ввода с перфоленты по запаянной программе */
|
/* TODO: управление устройствами ввода с перфоленты по запаянной программе */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 014 ... 015:
|
case 014: case 015:
|
||||||
/* Управление АЦПУ */
|
/* Управление АЦПУ */
|
||||||
printer_control (Aex - 014, (uint32) (ACC & 017));
|
printer_control (Aex - 014, (uint32) (ACC & 017));
|
||||||
break;
|
break;
|
||||||
case 023 ... 024:
|
case 023: case 024:
|
||||||
/* Управление обменом с магнитными дисками */
|
/* Управление обменом с магнитными дисками */
|
||||||
disk_ctl (Aex - 023, (uint32) ACC);
|
disk_ctl (Aex - 023, (uint32) ACC);
|
||||||
break;
|
break;
|
||||||
|
@ -560,7 +566,7 @@ static void cmd_033 ()
|
||||||
PC, (RUU & RUU_RIGHT_INSTR) ? "п" : "л", ACC << 24);*/
|
PC, (RUU & RUU_RIGHT_INSTR) ? "п" : "л", ACC << 24);*/
|
||||||
GRP |= (ACC & BITS(24)) << 24;
|
GRP |= (ACC & BITS(24)) << 24;
|
||||||
break;
|
break;
|
||||||
case 032 ... 033:
|
case 032: case 033:
|
||||||
/* TODO: имитация сигналов из КМБ в КВУ */
|
/* TODO: имитация сигналов из КМБ в КВУ */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
|
@ -574,15 +580,13 @@ static void cmd_033 ()
|
||||||
* с МБ и МЛ, имитация обмена */
|
* с МБ и МЛ, имитация обмена */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 040 ... 057:
|
case 040: case 041: case 042: case 043:
|
||||||
|
case 044: case 045: case 046: case 047:
|
||||||
|
case 050: case 051: case 052: case 053:
|
||||||
|
case 054: case 055: case 056: case 057:
|
||||||
/* Управление молоточками АЦПУ */
|
/* Управление молоточками АЦПУ */
|
||||||
printer_hammer (Aex >= 050, Aex & 7, (uint32) (ACC & BITS(16)));
|
printer_hammer (Aex >= 050, Aex & 7, (uint32) (ACC & BITS(16)));
|
||||||
break;
|
break;
|
||||||
case 0100 ... 0137:
|
|
||||||
/* Управление лентопротяжными механизмами
|
|
||||||
* и гашение разрядов регистров признаков
|
|
||||||
* окончания подвода зоны. Игнорируем. */
|
|
||||||
break;
|
|
||||||
case 0140:
|
case 0140:
|
||||||
/* Запись в регистр телеграфных каналов */
|
/* Запись в регистр телеграфных каналов */
|
||||||
tty_send ((uint32) ACC & BITS(24));
|
tty_send ((uint32) ACC & BITS(24));
|
||||||
|
@ -599,7 +603,7 @@ static void cmd_033 ()
|
||||||
/* Запись в регистр управления электропитанием, */
|
/* Запись в регистр управления электропитанием, */
|
||||||
/* не оказывает видимого эффекта на выполнение */
|
/* не оказывает видимого эффекта на выполнение */
|
||||||
break;
|
break;
|
||||||
case 0150 ... 0151:
|
case 0150: case 0151:
|
||||||
/* TODO: управление вводом с перфокарт */
|
/* TODO: управление вводом с перфокарт */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
|
@ -607,19 +611,19 @@ static void cmd_033 ()
|
||||||
/* гашение аппаратуры сопряжения с терминалами */
|
/* гашение аппаратуры сопряжения с терминалами */
|
||||||
/* besm6_debug(">>> гашение АС: %08o", (uint32) ACC & BITS(24));*/
|
/* besm6_debug(">>> гашение АС: %08o", (uint32) ACC & BITS(24));*/
|
||||||
break;
|
break;
|
||||||
case 0154 ... 0155:
|
case 0154: case 0155:
|
||||||
/* TODO: управление выводом на перфокарты */
|
/* TODO: управление выводом на перфокарты */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 0160 ... 0167:
|
case 0160: case 0167:
|
||||||
/* TODO: управление электромагнитами пробивки перфокарт */
|
/* TODO: управление электромагнитами пробивки перфокарт */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 0170 ... 0171:
|
case 0170: case 0171:
|
||||||
/* TODO: пробивка строки на перфоленте */
|
/* TODO: пробивка строки на перфоленте */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 0174 ... 0175:
|
case 0174: case 0175:
|
||||||
/* Выдача кода в пульт оператора */
|
/* Выдача кода в пульт оператора */
|
||||||
consul_print (Aex & 1, (uint32) ACC & BITS(8));
|
consul_print (Aex & 1, (uint32) ACC & BITS(8));
|
||||||
break;
|
break;
|
||||||
|
@ -627,11 +631,11 @@ static void cmd_033 ()
|
||||||
/* управление табло ГПВЦ СО АН СССР */
|
/* управление табло ГПВЦ СО АН СССР */
|
||||||
/* besm6_debug(">>> ТАБЛО: %08o", (uint32) ACC & BITS(24));*/
|
/* besm6_debug(">>> ТАБЛО: %08o", (uint32) ACC & BITS(24));*/
|
||||||
break;
|
break;
|
||||||
case 04001 ... 04002:
|
case 04001: case 04002:
|
||||||
/* TODO: считывание слога в режиме имитации обмена */
|
/* TODO: считывание слога в режиме имитации обмена */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 04003 ... 04004:
|
case 04003: case 04004:
|
||||||
/* Запрос статуса контроллера магнитных дисков */
|
/* Запрос статуса контроллера магнитных дисков */
|
||||||
ACC = disk_state (Aex - 04003);
|
ACC = disk_state (Aex - 04003);
|
||||||
break;
|
break;
|
||||||
|
@ -645,16 +649,16 @@ static void cmd_033 ()
|
||||||
* в запаянной программе ввода с перфоленты */
|
* в запаянной программе ввода с перфоленты */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 04014 ... 04015:
|
case 04014: case 04015:
|
||||||
/* считывание строки с устройства ввода с перфоленты */
|
/* считывание строки с устройства ввода с перфоленты */
|
||||||
ACC = fs_read (Aex - 04014);
|
ACC = fs_read (Aex - 04014);
|
||||||
break;
|
break;
|
||||||
case 04016 ... 04017:
|
case 04016: case 04017:
|
||||||
/* TODO: считывание строки с устройства
|
/* TODO: считывание строки с устройства
|
||||||
* ввода с перфоленты */
|
* ввода с перфоленты */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 04020 ... 04023:
|
case 04020: case 04021: case 04022: case 04023:
|
||||||
/* TODO: считывание слога в режиме имитации
|
/* TODO: считывание слога в режиме имитации
|
||||||
* внешнего обмена */
|
* внешнего обмена */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
|
@ -685,7 +689,7 @@ static void cmd_033 ()
|
||||||
/* besm6_debug("Reading punchcard/punchtape READY @%05o", PC);*/
|
/* besm6_debug("Reading punchcard/punchtape READY @%05o", PC);*/
|
||||||
ACC = READY2;
|
ACC = READY2;
|
||||||
break;
|
break;
|
||||||
case 04103 ... 04106:
|
case 04103: case 04104: case 04105: case 04106:
|
||||||
/* Опрос состояния лентопротяжных механизмов.
|
/* Опрос состояния лентопротяжных механизмов.
|
||||||
* Все устройства не готовы. */
|
* Все устройства не готовы. */
|
||||||
ACC = BITS(24);
|
ACC = BITS(24);
|
||||||
|
@ -699,20 +703,12 @@ static void cmd_033 ()
|
||||||
* группами по 8 штук каждые несколько секунд. */
|
* группами по 8 штук каждые несколько секунд. */
|
||||||
ACC = 0;
|
ACC = 0;
|
||||||
break;
|
break;
|
||||||
case 04140 ... 04157:
|
case 04170: case 04171: case 04172: case 04173:
|
||||||
/* TODO: считывание строки перфокарты */
|
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
|
||||||
break;
|
|
||||||
case 04160 ... 04167:
|
|
||||||
/* TODO: контрольное считывание строки перфокарты */
|
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
|
||||||
break;
|
|
||||||
case 04170 ... 04173:
|
|
||||||
/* TODO: считывание контрольного кода
|
/* TODO: считывание контрольного кода
|
||||||
* строки перфоленты */
|
* строки перфоленты */
|
||||||
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
break;
|
break;
|
||||||
case 04174 ... 04175:
|
case 04174: case 04175:
|
||||||
/* Считывание кода с пульта оператора */
|
/* Считывание кода с пульта оператора */
|
||||||
ACC = consul_read (Aex & 1);
|
ACC = consul_read (Aex & 1);
|
||||||
break;
|
break;
|
||||||
|
@ -720,13 +716,26 @@ static void cmd_033 ()
|
||||||
/* чтение табло ГПВЦ СО АН СССР */
|
/* чтение табло ГПВЦ СО АН СССР */
|
||||||
ACC = 0;
|
ACC = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default: {
|
||||||
|
unsigned val = Aex & 04177;
|
||||||
|
if (0100 <= val && val <= 0137) {
|
||||||
|
/* Управление лентопротяжными механизмами
|
||||||
|
* и гашение разрядов регистров признаков
|
||||||
|
* окончания подвода зоны. Игнорируем. */
|
||||||
|
} else if (04140 <= val && val <= 04157) {
|
||||||
|
/* TODO: считывание строки перфокарты */
|
||||||
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
|
} else if (04160 <= val && val <= 04167) {
|
||||||
|
/* TODO: контрольное считывание строки перфокарты */
|
||||||
|
longjmp (cpu_halt, STOP_UNIMPLEMENTED);
|
||||||
|
} else {
|
||||||
/* Неиспользуемые адреса */
|
/* Неиспользуемые адреса */
|
||||||
/* if (sim_deb && cpu_dev.dctrl)*/
|
/* if (sim_deb && cpu_dev.dctrl)*/
|
||||||
besm6_debug ("*** %05o%s: УВВ %o - неправильный адрес ввода-вывода",
|
besm6_debug ("*** %05o%s: УВВ %o - неправильный адрес ввода-вывода",
|
||||||
PC, (RUU & RUU_RIGHT_INSTR) ? "п" : "л", Aex);
|
PC, (RUU & RUU_RIGHT_INSTR) ? "п" : "л", Aex);
|
||||||
ACC = 0;
|
ACC = 0;
|
||||||
break;
|
}
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1245,7 +1254,12 @@ transfer_modifier: M[Aex & 037] = M[reg];
|
||||||
M[0] = 0;
|
M[0] = 0;
|
||||||
delay = 6;
|
delay = 6;
|
||||||
break;
|
break;
|
||||||
case 050 ... 077: /* э50...э77 */
|
case 050: case 051: case 052: case 053:
|
||||||
|
case 054: case 055: case 056: case 057:
|
||||||
|
case 060: case 061: case 062: case 063:
|
||||||
|
case 064: case 065: case 066: case 067:
|
||||||
|
case 070: case 071: case 072: case 073:
|
||||||
|
case 074: case 075: case 076: case 077: /* э50...э77 */
|
||||||
case 0200: /* э20 */
|
case 0200: /* э20 */
|
||||||
case 0210: /* э21 */
|
case 0210: /* э21 */
|
||||||
stop_as_extracode:
|
stop_as_extracode:
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
#define _BESM6_DEFS_H_ 0
|
#define _BESM6_DEFS_H_ 0
|
||||||
|
|
||||||
#include "sim_defs.h" /* simulator defns */
|
#include "sim_defs.h" /* simulator defns */
|
||||||
|
#include "scp.h"
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -123,11 +124,6 @@ enum {
|
||||||
#define USEC 10 /* одна микросекунда - десять тактов */
|
#define USEC 10 /* одна микросекунда - десять тактов */
|
||||||
#define MSEC (1000*USEC) /* одна миллисекунда */
|
#define MSEC (1000*USEC) /* одна миллисекунда */
|
||||||
|
|
||||||
extern uint32 sim_brk_types, sim_brk_dflt, sim_brk_summ; /* breakpoint info */
|
|
||||||
extern int32 sim_interval, sim_step;
|
|
||||||
extern FILE *sim_deb, *sim_log;
|
|
||||||
extern int32 sim_switches;
|
|
||||||
|
|
||||||
extern UNIT cpu_unit;
|
extern UNIT cpu_unit;
|
||||||
extern t_value memory [MEMSIZE];
|
extern t_value memory [MEMSIZE];
|
||||||
extern t_value pult [8];
|
extern t_value pult [8];
|
||||||
|
|
|
@ -261,7 +261,7 @@ void mmu_flush_by_age()
|
||||||
switch (FLUSH) {
|
switch (FLUSH) {
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
case 1 ... 8:
|
case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
|
||||||
set_wins (OLDEST);
|
set_wins (OLDEST);
|
||||||
mmu_update_oldest ();
|
mmu_update_oldest ();
|
||||||
mmu_flush (OLDEST);
|
mmu_flush (OLDEST);
|
||||||
|
@ -279,7 +279,7 @@ void mmu_flush_by_number()
|
||||||
switch (FLUSH) {
|
switch (FLUSH) {
|
||||||
case 0:
|
case 0:
|
||||||
break;
|
break;
|
||||||
case 1 ... 8:
|
case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8:
|
||||||
mmu_flush (FLUSH-1);
|
mmu_flush (FLUSH-1);
|
||||||
set_wins (FLUSH-1);
|
set_wins (FLUSH-1);
|
||||||
if (FLUSH-1 == OLDEST)
|
if (FLUSH-1 == OLDEST)
|
||||||
|
|
|
@ -114,7 +114,7 @@ static SDL_Surface *sprite_from_data (int width, int height,
|
||||||
*/
|
*/
|
||||||
SDL_LockSurface (sprite);
|
SDL_LockSurface (sprite);
|
||||||
for (y=0; y<height; ++y) {
|
for (y=0; y<height; ++y) {
|
||||||
s = (unsigned*) (sprite->pixels + y * sprite->pitch);
|
s = (unsigned*) ((char*)sprite->pixels + y * sprite->pitch);
|
||||||
for (x=0; x<width; ++x) {
|
for (x=0; x<width; ++x) {
|
||||||
r = *data++;
|
r = *data++;
|
||||||
g = *data++;
|
g = *data++;
|
||||||
|
|
|
@ -204,8 +204,7 @@ t_stat printer_event (UNIT *u)
|
||||||
int num = u - printer_unit;
|
int num = u - printer_unit;
|
||||||
struct acpu_t * dev = acpu + num;
|
struct acpu_t * dev = acpu + num;
|
||||||
|
|
||||||
switch (dev->curchar) {
|
if (dev->curchar < 0140) {
|
||||||
case 0 ... 0137:
|
|
||||||
GRP |= GRP_PRN1_SYNC >> num;
|
GRP |= GRP_PRN1_SYNC >> num;
|
||||||
++dev->curchar;
|
++dev->curchar;
|
||||||
/* For next char */
|
/* For next char */
|
||||||
|
@ -213,8 +212,7 @@ t_stat printer_event (UNIT *u)
|
||||||
if (dev->feed && --dev->feed == 0) {
|
if (dev->feed && --dev->feed == 0) {
|
||||||
READY |= PRN1_LINEFEED >> num;
|
READY |= PRN1_LINEFEED >> num;
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
case 0140:
|
|
||||||
/* For "zero" */
|
/* For "zero" */
|
||||||
dev->curchar = 0;
|
dev->curchar = 0;
|
||||||
GRP |= GRP_PRN1_ZERO >> num;
|
GRP |= GRP_PRN1_ZERO >> num;
|
||||||
|
@ -222,7 +220,6 @@ t_stat printer_event (UNIT *u)
|
||||||
besm6_debug(">>> АЦПУ%d 'ноль'", num);
|
besm6_debug(">>> АЦПУ%d 'ноль'", num);
|
||||||
/* For first sync after "zero" */
|
/* For first sync after "zero" */
|
||||||
sim_activate (u, 1000*USEC);
|
sim_activate (u, 1000*USEC);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -204,13 +204,11 @@ t_stat fs_event (UNIT *u)
|
||||||
{
|
{
|
||||||
int num = u - fs_unit;
|
int num = u - fs_unit;
|
||||||
again:
|
again:
|
||||||
switch (fs_state[num]) {
|
if (fs_state[num] == FS_STARTING) {
|
||||||
case FS_STARTING:
|
|
||||||
/* По первому прерыванию после запуска двигателя ничего не читаем */
|
/* По первому прерыванию после запуска двигателя ничего не читаем */
|
||||||
FS[num] = 0;
|
FS[num] = 0;
|
||||||
fs_state[num] = FS_RUNNING;
|
fs_state[num] = FS_RUNNING;
|
||||||
break;
|
} else if (fs_state[num] == FS_RUNNING) {
|
||||||
case FS_RUNNING: {
|
|
||||||
int ch;
|
int ch;
|
||||||
/* переводы строк игнорируются */
|
/* переводы строк игнорируются */
|
||||||
while ((ch = utf8_getc (u->fileref)) == '\n');
|
while ((ch = utf8_getc (u->fileref)) == '\n');
|
||||||
|
@ -228,9 +226,7 @@ again:
|
||||||
ch = (ch & 0x0F) + ((ch >> 4) & 0x0F);
|
ch = (ch & 0x0F) + ((ch >> 4) & 0x0F);
|
||||||
if (ch & 1); else FS[num] |= 0x80;
|
if (ch & 1); else FS[num] |= 0x80;
|
||||||
}
|
}
|
||||||
break;
|
} else if (FS_IMAGE <= fs_state[num] && fs_state[num] <= FS_IMAGE_LAST) {
|
||||||
}
|
|
||||||
case FS_IMAGE ... FS_IMAGE_LAST: {
|
|
||||||
int ch = utf8_getc (u->fileref);
|
int ch = utf8_getc (u->fileref);
|
||||||
if (ch < 0) {
|
if (ch < 0) {
|
||||||
/* обрыв ленты */
|
/* обрыв ленты */
|
||||||
|
@ -253,9 +249,7 @@ again:
|
||||||
if (ch & 1); else FS[num] |= 0x80;
|
if (ch & 1); else FS[num] |= 0x80;
|
||||||
++fs_state[num];
|
++fs_state[num];
|
||||||
}
|
}
|
||||||
break;
|
} else if (fs_state[num] == FS_TOOLONG) {
|
||||||
}
|
|
||||||
case FS_TOOLONG: {
|
|
||||||
/* дочитываем до конца строки */
|
/* дочитываем до конца строки */
|
||||||
int ch;
|
int ch;
|
||||||
besm6_debug("<<< too long???");
|
besm6_debug("<<< too long???");
|
||||||
|
@ -266,15 +260,12 @@ again:
|
||||||
fs_state[num] = FS_TAIL;
|
fs_state[num] = FS_TAIL;
|
||||||
} else
|
} else
|
||||||
goto again;
|
goto again;
|
||||||
break;
|
} else if (FS_FILLUP <= fs_state[num] && fs_state[num] <= FS_FILLUP_LAST) {
|
||||||
}
|
|
||||||
case FS_FILLUP ... FS_FILLUP_LAST:
|
|
||||||
FS[num] = 0;
|
FS[num] = 0;
|
||||||
if (++fs_state[num] == FS_ENDA3) {
|
if (++fs_state[num] == FS_ENDA3) {
|
||||||
fs_state[num] = FS_IMAGE;
|
fs_state[num] = FS_IMAGE;
|
||||||
}
|
}
|
||||||
break;
|
} else if (FS_ENDA3 <= fs_state[num] && fs_state[num] <= FS_ENDA3_LAST) {
|
||||||
case FS_ENDA3 ... FS_ENDA3_LAST:
|
|
||||||
if ((fs_state[num] - FS_ENDA3) % 5 == 0)
|
if ((fs_state[num] - FS_ENDA3) % 5 == 0)
|
||||||
FS[num] = 0200;
|
FS[num] = 0200;
|
||||||
else
|
else
|
||||||
|
@ -282,11 +273,8 @@ again:
|
||||||
if (++fs_state[num] == FS_TAIL) {
|
if (++fs_state[num] == FS_TAIL) {
|
||||||
fs_state[num] = FS_RUNNING;
|
fs_state[num] = FS_RUNNING;
|
||||||
}
|
}
|
||||||
break;
|
} else if (fs_state[num] == FS_IDLE || fs_state[num] == FS_TAIL) {
|
||||||
case FS_IDLE:
|
|
||||||
case FS_TAIL:
|
|
||||||
FS[num] = 0;
|
FS[num] = 0;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
GRP |= GRP_FS1_SYNC >> num;
|
GRP |= GRP_FS1_SYNC >> num;
|
||||||
return SCPE_OK;
|
return SCPE_OK;
|
||||||
|
|
|
@ -73,7 +73,7 @@ const char *besm6_opname (int opcode)
|
||||||
if (opcode & 0200)
|
if (opcode & 0200)
|
||||||
return opname_long_bemsh [(opcode >> 3) & 017];
|
return opname_long_bemsh [(opcode >> 3) & 017];
|
||||||
return opname_short_bemsh [opcode];
|
return opname_short_bemsh [opcode];
|
||||||
};
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Выдача кода инструкции по мнемонике (UTF-8).
|
* Выдача кода инструкции по мнемонике (UTF-8).
|
||||||
|
|
|
@ -615,9 +615,9 @@ void tt_print()
|
||||||
*/
|
*/
|
||||||
static int unicode_to_koi7 (unsigned val)
|
static int unicode_to_koi7 (unsigned val)
|
||||||
{
|
{
|
||||||
switch (val) {
|
if ('_' <= val) return val;
|
||||||
case '\0'... '_': return val;
|
else if ('a' <= val && val <= 'z') return val + 'Z' - 'z';
|
||||||
case 'a' ... 'z': return val + 'Z' - 'z';
|
else switch (val) {
|
||||||
case 0x007f: return 0x7f;
|
case 0x007f: return 0x7f;
|
||||||
case 0x0410: case 0x0430: return 0x61;
|
case 0x0410: case 0x0430: return 0x61;
|
||||||
case 0x0411: case 0x0431: return 0x62;
|
case 0x0411: case 0x0431: return 0x62;
|
||||||
|
@ -1146,7 +1146,7 @@ void vt_receive()
|
||||||
vt_receiving |= mask;
|
vt_receiving |= mask;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 1 ... 7:
|
case 1: case 2: case 3: case 4: case 5: case 6: case 7:
|
||||||
/* need inverted byte */
|
/* need inverted byte */
|
||||||
TTY_IN |= (tty_typed[num] & (1 << (tty_instate[num]-1))) ? 0 : mask;
|
TTY_IN |= (tty_typed[num] & (1 << (tty_instate[num]-1))) ? 0 : mask;
|
||||||
tty_instate[num]++;
|
tty_instate[num]++;
|
||||||
|
@ -1155,7 +1155,7 @@ void vt_receive()
|
||||||
TTY_IN |= odd_parity(tty_typed[num]) ? 0 : mask; /* even parity of inverted */
|
TTY_IN |= odd_parity(tty_typed[num]) ? 0 : mask; /* even parity of inverted */
|
||||||
tty_instate[num]++;
|
tty_instate[num]++;
|
||||||
break;
|
break;
|
||||||
case 9 ... 11:
|
case 9: case 10: case 11:
|
||||||
/* stop bits are 0 */
|
/* stop bits are 0 */
|
||||||
tty_instate[num]++;
|
tty_instate[num]++;
|
||||||
break;
|
break;
|
||||||
|
|
0
BESM6/formatdisk.c
Executable file → Normal file
0
BESM6/formatdisk.c
Executable file → Normal file
|
@ -7,7 +7,6 @@ load test_pprog05.b6
|
||||||
ex -ml 1-6
|
ex -ml 1-6
|
||||||
ex 7-11
|
ex 7-11
|
||||||
echo
|
echo
|
||||||
go
|
|
||||||
echo Должно быть четыре останова с числами на сумматоре: 1.0 2.0 3.0 4.0.
|
echo Должно быть четыре останова с числами на сумматоре: 1.0 2.0 3.0 4.0.
|
||||||
br 2
|
br 2
|
||||||
go
|
go
|
||||||
|
|
Loading…
Add table
Reference in a new issue