vak: (Default)
[personal profile] vak
Хочу представить вашему вниманию новый проект: симулятор операционной системы "Дубна". Он позволяет запускать из командной строки задания мониторной системы "Дубна" ровно в виде, как они описаны в книжке Мазного. На выходе получаете распечатку. Это похоже на то, как работает наш старый симулятор dispak. Но не нужно никаких паспортов.

Из всех бэсмовских дисков симулятор dubna использует только ленточку monsys.9. Она по умолчанию подключается на 30 направление (только чтение) и на неё переназначается барабан 21. Так называемый режим физ.обмена.

Установка

Для сборки из текстов нужно иметь компилятор C++ и CMake. Их можно установить на Ubuntu командой "sudo apt install build-essential cmake", на маке - командой "xcode-select --install; brew install cmake".

Собираем симулятор из текстов и устанавливаем в /usr/local:
git clone https://github.com/besm6/dubna.git
cd dubna
make
sudo make install
Вызов симулятора выглядит так:
$ dubna
Dubna Simulator, Version 0.1.45-b6d3248
Usage:
dubna [options...] filename
Input files:
filename Job file in MS Dubna format
Options:
-h, --help Display available options
-V, --version Print the version number and exit
-v, --verbose Verbose mode
-l NUM, --limit=NUM Stop after so many instructions (default 100000000000)
-t Trace extracodes to stdout
--trace=FILE Redirect trace to the file
-d MODE, --debug=MODE Select debug mode, default irm
Debug modes:
i Trace instructions
e Trace extracodes
f Trace fetch
r Trace registers
m Trace memory read/write

Пример: фортран

В папке examples есть несколько примеров. К примеру, возьмём простейшую программу на Фортране, файл fortran.dub:
*name фортран
*fortran
program hello
print 1000
stop
1000 format('Hello, World!')
end
*execute
*end file
Запускаем:
$ cd dubna/examples
$ dubna fortran.dub
Read job 'fortran.dub'
Mount image '/Users/vak/.besm6/9' as disk 30
Redirect drum 21 to disk 30
------------------------------------------------------------
3 000 00.00
ЙОКСЕЛ БЭСМ-6/5 ШИФР-12
МОНИТОРНАЯ СИСТЕМА ′Д У Б Н А′ - 20/10/88







Ж ЖЖЖ ЖЖЖЖ ЖЖЖЖЖ ЖЖЖЖ ЖЖЖ Ж Ж
ЖЖЖЖЖ Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж
Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж ЖЖЖЖЖ
Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж
ЖЖЖЖЖ Ж Ж ЖЖЖЖ Ж ЖЖЖЖ Ж Ж Ж Ж
Ж Ж Ж Ж Ж Ж ЖЖЖЖЖ Ж Ж
Ж ЖЖЖ Ж Ж Ж Ж Ж Ж Ж








*NАМЕ ФОРТРАН
*FОRТRАN
3 000 00.00
Ф О Р Т Р А Н
/16.07.73/
РRОGRАМ НЕLLО
РRINТ 1000
2 SТОР
1000 FОRМАТ(′НЕLLО, WОRLD!′)
ЕND



ТАБЛИЦА ОТНОСИТЕЛЬНЫХ АДРЕСОВ

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
000 :00001 00003
*ЕХЕСUТЕ

НЕLLО 01000 IОСОNТ* 01622 FТ*723 Е 01674 ISОТСОS1 Е 04025
РRОGRАМ Е 01000 IОАС* Е 01653 FТ*003 Е 01674 FМRТАРЕ 04045
ВСDWRIТ* 01017 FТ*722 Е 01666 SТОР* 02662 ОСТТDЕС 04774
FТ*621 Е 01017 FТ*642 Е 01666 ЕХIТ Е 02663 LUNМUN С 05027
ВСDЕNС* Е 01023 FТ*002 Е 01666 ВСDВЕG* 02711 JЕRRIО* С 05030
FТ*611 Е 01023 FD*642 Е 01667 FТ2* Е 03216 САRD2 С 05031
FТ*571 Е 01025 FD*722 Е 01667 КОNV1* Е 03231 ISОIСТТR 05056
FТ*561 Е 01030 FС*722 Е 01667 РRINТ8 03325 RЕVСАRD 05113
NЕХТLЕТ* Е 01035 FС*642 Е 01667 ТТРRINТ 03506 *IСНЕСК* С 05140
RК* Е 01077 FС*002 Е 01667 ВСDРUN 03545 *ПЕРФОРА 05146
WSУ* Е 01335 IОЕND* Е 01674 ЕВСDРUN Е 03571 КОД*СDС Е 05147
I/О*ЕRR Е 01575 FТ*643 Е 01674 ISОТСОSУ 03754 СВОБОДНО 05207

НЕLLО, WОRLD!
------------------------------------------------------------
Elapsed time: 0.017 seconds
Simulated: 1365269 instructions
Simulation rate: 82289735 instructions/sec

Пример: ассемблер

Попробуем ассемблер, файл assem.dub:
*name ассемблер
*assem
program: ,name,
,*64 , inf64
,*74 ,
inf64: , , text
, , text
,001 ,
8, ,
text: ,gost, 18h Hello, World!'214'
,gost, 6h'231'
,end ,
*execute
*end file
Получаем:
$ dubna assem.dub 
Read job 'assem.dub'
Mount image '/Users/vak/.besm6/9' as disk 30
Redirect drum 21 to disk 30
------------------------------------------------------------
3 000 00.00
ЙОКСЕЛ БЭСМ-6/5 ШИФР-12
МОНИТОРНАЯ СИСТЕМА ′Д У Б Н А′ - 20/10/88







ЖЖЖ ЖЖЖЖ ЖЖЖЖ ЖЖЖЖ Ж Ж ЖЖЖЖЖ ЖЖЖ ЖЖЖЖ ЖЖЖЖ
Ж Ж Ж Ж Ж ЖЖ ЖЖ Ж Ж Ж Ж Ж Ж
Ж Ж Ж Ж ЖЖЖ Ж Ж Ж ЖЖЖЖ Ж Ж ЖЖЖ Ж Ж
Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж
Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж ЖЖЖЖ
ЖЖЖЖЖ Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж Ж
Ж Ж ЖЖЖЖ ЖЖЖЖ ЖЖЖЖЖ Ж Ж ЖЖЖЖ Ж Ж ЖЖЖЖЖ Ж








*NАМЕ АССЕМБЛЕР
*АSSЕМ
3 000 00.00
АВТОКОД МАDLЕN
(1.10.72)
РRОGRАМ : , NАМЕ,
0000 , *64 ,INF64
-
0001 , *74 ,
-
0002 INF64 : , ,ТЕХТ
- , ,ТЕХТ
0003 , 001 ,
- 8, ,
0004 ТЕХТ : , GОSТ,18Н НЕLLО, WОRLD!′214′
0007 , GОSТ,6Н′231′
, ЕND ,
ЧИСЛО ПЕРФ. 0010 ЧИСЛО ОШИБ. ОПЕРАТОРОВ 0000
*ЕХЕСUТЕ

РRОGRАМ 01000 СВОБОДНО 01010

НЕLLО, WОRLD!

------------------------------------------------------------
Elapsed time: 0.010 seconds
Simulated: 880205 instructions
Simulation rate: 84005058 instructions/sec

Пример: *edit

У Мазного в четвёртой главе "Работа с текстами во внешней памяти" описан пакетный редактор текста *EDIT. Запустим небольшой пример с ним, edit.dub:
*name Edit
*edit
*RO
*W:27001,2
Варкалось. Хливкие шорьки
Пырялись по наве,
И хрюкотали зелюки,
Как мюмзики в мове.
*EE
*
*edit
*R:270001
*LL
*EE
*end file
Результат:
$ dubna edit.dub 
Read job 'edit.dub'
Mount image '/Users/vak/.besm6/9' as disk 30
Redirect drum 21 to disk 30
------------------------------------------------------------
3 000 00.00
ЙОКСЕЛ БЭСМ-6/5 ШИФР-12
МОНИТОРНАЯ СИСТЕМА ′Д У Б Н А′ - 20/10/88







ЖЖЖЖ ЖЖЖ ЖЖЖ ЖЖЖЖЖ
Ж Ж Ж Ж Ж
ЖЖЖ Ж Ж Ж Ж
Ж Ж Ж Ж Ж
Ж Ж Ж Ж Ж
Ж Ж Ж Ж Ж
ЖЖЖЖЖ ЖЖЖЖ ЖЖЖ Ж








*NАМЕ ЕDIТ
*ЕDIТ
3 000 00.00
РЕДАКТОР ТЕКСТОВ
(01.06.82)
*RО
*W:27001,2
ВАРКАЛОСЬ. ХЛИВКИЕ ШОРЬКИ
ПЫРЯЛИСЬ ПО НАВЕ,
И ХРЮКОТАЛИ ЗЕЛЮКИ,
КАК МЮМЗИКИ В МОВЕ.
ФАЙЛ 27001 :ЗАПИСАНО 4 КАРТ (0001 ТР.)
*ЕЕ
*
*ЕDIТ
3 000 00.00
РЕДАКТОР ТЕКСТОВ
(01.06.82)
*R:270001
*LL
ВАРКАЛОСЬ. ХЛИВКИЕ ШОРЬКИ
ПЫРЯЛИСЬ ПО НАВЕ,
И ХРЮКОТАЛИ ЗЕЛЮКИ,
КАК МЮМЗИКИ В МОВЕ.
ФАЙЛ 270001 :СЧИТАНО 4 КАРТ (0001 ТР.)
*ЕЕ
*ЕND FILЕ
------------------------------------------------------------
Elapsed time: 0.009 seconds
Simulated: 738930 instructions
Simulation rate: 79199357 instructions/sec

Дальнейшее развитие

Приглашаются желающие развить функционал симулятора. Возможные направления:
  • Сделать нужные экстракоды для динамического подключения лент командой *TAPE.
  • Разобраться, как подключить стандартные библиотеки *LIBRARY:1 и *LIBRARY:2.
  • Сделать ввод-вывод стандартных массивов.
  • Научиться подключать внешние трансляторы: *MADLEN, *BEMSH, Паскаль, другие фортраны.
Работа подразумевает экспериментирование, создание новых примеров, поиск разъяснений в книжке Мазного, копание в исходных текстах Дубны (здесь) и дописывание экстракодов в файле extracode.cpp. Цифровая археология в лучшем виде. 😀

Date: 2023-04-01 14:50 (UTC)
ufm: (Default)
From: [personal profile] ufm
Очередной раз обратил внимание на использование слова "приказ" вместо привычного "команда"...

Date: 2023-04-02 07:31 (UTC)
ufm: (Default)
From: [personal profile] ufm
Интересно, чем в военном деле отличается приказание он команды? Военные, вроде, и тот и другой термин используют.

Date: 2023-04-01 18:17 (UTC)
vinsent_ru: (Default)
From: [personal profile] vinsent_ru

почему бы не добавить это в SIMH?