/
run
executable file
·78 lines (60 loc) · 3.07 KB
/
run
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/bin/bash
########################################################################
# Скрипт для запуска эмулятора Сетунь-70 и периферии.
# (c) 2023 Станислав Масловский <stanislav.maslovski@gmail.com>
########################################################################
# Имя директории со скриптом
DIR=$(dirname "$0")
# Именованные очереди для обмена данных между процессами
DEV_TTY_I="/tmp/dev_tty_i"
DEV_TTY_O="/tmp/dev_tty_o"
CONSOLE_O="/tmp/console_o"
[ ! -e "$DEV_TTY_I" ] && mkfifo "$DEV_TTY_I"
[ ! -e "$DEV_TTY_O" ] && mkfifo "$DEV_TTY_O"
[ ! -e "$CONSOLE_O" ] && mkfifo "$CONSOLE_O"
# Файл регистра ключей консоли (ввод)
REGFILE="/tmp/register"
touch "$REGFILE"
# Файл для устройства ввода с перфоленты
TAPFILE="/tmp/tape_reader"
touch "$TAPFILE"
# Файл для устройства вывода на перфоленту
PUNFILE="/tmp/tape_punch"
# Лог ввода с консоли (в формате перфоленты)
CONSOLE_LOG="/tmp/console.log"
touch "$CONSOLE_LOG"
# Тот же самый лог, но через очередь
CONSOLE_LOG_FIFO="/tmp/console_log"
[ ! -e "$CONSOLE_LOG_FIFO" ] && mkfifo "$CONSOLE_LOG_FIFO"
# Конфигурация устройств ввода/вывода:
# формат: "<grp>,<dev>,<rd>,<wr>,'<path>'"
REGISTER="-1,-1,T,F,\'$REGFILE\'"
TAPE_I="0,-1,T,F,\'$TAPFILE\'"
TAPE_O="0,1,F,T,\'$PUNFILE\'"
CONSUL_I="1,3,T,F,\'$DEV_TTY_I\'"
CONSUL_O="1,3,F,T,\'$DEV_TTY_O\'"
# Имя файла с образом ПЗУ
ROM_FILE="$DIR/ROM.csv"
# Стартуем эмулятор
CMD="stty -icanon -echo noflsh susp 'S' intr 'A' && $DIR/setun70 $ROM_FILE $REGISTER $TAPE_I $TAPE_O $CONSUL_I $CONSUL_O"
xterm -title "Setun-70" -geometry "72x40" -class Setun70 -fa "DejaVu Sans Mono" -fs 12 -e "$CMD" &
PID1=$!
sleep 0.2
# Стартуем терминалку «Консул 254» с подключением к CON_FIFOs
CMD="stty -icanon -echo && (tee $CONSOLE_LOG $CONSOLE_LOG_FIFO <$CONSOLE_O >$DEV_TTY_I& $DIR/consul254 $DEV_TTY_O $CONSOLE_O T,T,T)"
xterm -title "Consul-254" -geometry "72x40" -class Setun70 -fa "DejaVu Sans Mono" -fs 12 -e "$CMD" &
PID2=$!
sleep 0.2
# Стартуем просмотр ввода с консоли (в формате перфоленты)
CMD="stty -echo && tail -F $CONSOLE_LOG"
xterm -title "Keyboard data (punched)" -geometry "72x10" -class Setun70 -fa "DejaVu Sans Mono" -fs 12 -e "$CMD" &
PID3=$!
sleep 0.2
# Стартуем просмотр ввода с консоли (в символьном виде)
CMD="stty -icanon -echo && $DIR/consul254 $CONSOLE_LOG_FIFO /dev/null T,T,F"
xterm -title "Keyboard data (as is)" -geometry "72x10" -class Setun70 -fa "DejaVu Sans Mono" -fs 12 -e "$CMD" &
PID4=$!
# Ждем завершения любого из первых двух процессов xterm
wait -n $PID1 $PID2
# Прибиваем процессы и выходим
kill $PID1 $PID2 $PID3 $PID4 >/dev/null 2>&1