Работа с симулятором SIMH

Проект SIMH представляет собой семейство симуляторов исторических компьютеров 60х-80х годов. Основной сайт: simh.trailing-edge.com. Сборка и запуск SIMH для БЭСМ-6 описаны на отдельной странице.

Все симуляторы семейства SIMH имеют похожий командный интерфейс. Имеется общее описание в формате PDF. Здесь мы кратко опишем основные приёмы работы с симулятором.

Вызов симулятора

Бинарный файл симулятора имеет имя besm6 для ЭВМ БЭСМ-6 и svs для ЭВМ СВС.

При вызове без параметров симулятор вызывается в диологовом режиме. Командой help можно получить список команд и информацию о командах. Выйти можно командой q. Например:

$ besm6

БЭСМ-6 simulator V4.0-0 Beta        git commit id: 0169032c
sim> help
Help is available for the following commands:

    !              ASSERT         ASSIGN         ATTACH         BOOT
    BREAK          CALL           CAT            CD             CONTINUE
    DEASSIGN       DEPOSIT        DETACH         DIR            DO
    DUMP           ECHO           EVALUATE       EXAMINE        EXIT
    EXPECT         GO             GOTO           HELP           IDEPOSIT
    IEXAMINE       IF             IGNORE         LOAD           LS
    NEXT           NOBREAK        NOEXPECT       ON             PROCEED
    PWD            RESET          RESTORE        RETURN         RUN
    SAVE           SCREENSHOT     SEND           SET            SHIFT
    SHOW           STEP           TYPE
sim> q
Goodbye

При вызове симулятор ищет и выполняет скрипт инициализации $HOME/simh.ini, а при его отсутствии ./simh.ini. Общий вид вызова следующий:

besm6 [-флаги] [файл параметры...]

Если задано имя файла, он выполняется (с параметрами) после скрипта инициализации. Затем симулятор переходит в интерактивный режим.

Флаги:

  • -v — печатать команды скрипта перед выполнением
  • -e — прервать выполнение скрипта при ошибке команды
  • -q — сообщать менее подробную информацию о выполнении команд, а также не печатать имя и версию симулятора при старте
  • -o — вызываемый скрипт будет наследовать состояние on из вызывающего скрипта

Примеры скриптов

Пример 1: запуск теста арифметического устройства. Файл test_alu.b6 содержит код теста.

set mmu cache
load test_alu.b6
go 32000

Пример 2: запуск операционной системы Диспак. Из файла boot_dispak.b6 считывается код первичного загрузчика. В файлах sbor2048.bin и sbor2053.bin должны находиться образы системных дисков. Для дополнительного временного диска будет создан файл 2052.bin. Для барабанов будут созданы файлы drum1x.bin и drum2x.bin. Вывод АЦПУ будет направлен в файл output.txt. Протокол консольного терминала пишется в файл tty1.txt.

set cpu idle
attach -e disk0 sbor2048.bin
attach -e disk7 sbor2053.bin
attach -n disk6 2052.bin
attach -n drum0 drum1x.bin
attach -n drum1 drum2x.bin
attach -n prn0 output.txt
attach tty1 console
set tty1 qwerty,authbs
set -n tty1 log=tty1.txt
load boot_dispak.b6
run 2000

Содержимое памяти

Командами ex (examine) и d (deposit) можно просматривать и изменять содержимое памяти. Первый параметр задаёт диапазон адресов:

  • адрес
  • адрес-адрес
  • адрес/количество

Флагами можно задавать формат отображения:

  • -x — в шестнадцатеричном виде
  • -b — с разбивкой на байты
  • -f — в виде числа с плавающей точкой
  • -i — в виде машинных команд
  • -m — в мнемонике БЕМШ
  • -ml — в мнемонике MADLEN

По умолчанию используется восьмеричный формат. Например:

sim> ex 32000
32000:  0643 0000 0413 2011
sim> ex 32010-32017
32010:  0000 0000 0000 0000
32011:  0000 0100 0000 0001
32012:  0010 0000 0100 7766
32013:  0037 0000 0220 0000
32014:  0010 0000 0660 2016
32015:  0730 2014 0220 0000
32016:  0410 4412 0010 0000
32017:  0660 2020 0730 2016
sim> ex -x 32020/4
32020:  00800010890a
32021:  10a90a1b0413
32022:  1d8410090000
32023:  10890a00a000
sim> ex -b 32020/4
32020:  000 200 000 020 211 012
32021:  020 251 012 033 004 023
32022:  035 204 020 011 000 000
32023:  020 211 012 000 240 000
sim> ex -f 32020/4
32020:  2.7e-20
32021:  9.2e-18
32022:  -4.3e-16
32023:  7.4e-18
sim> ex -i 32020/4
32020:  00 010 0000 01 010 4412
32021:  01 012 4412 01 26 02023
32022:  01 33 02020 00 22 00000
32023:  01 010 4412 00 012 0000
sim> ex -m 32020/4
32020:  сч,
        сч 4412(1)
32021:  нтж 4412(1),
        по 2023(1)
32022:  стоп 2020(1),
        мода
32023:  сч 4412(1),
        нтж
sim> ex -ml 32020/4
32020:  xta,
        xta 4412(1)
32021:  aex 4412(1),
        uza 2023(1)
32022:  stop 2020(1),
        utc
32023:  xta 4412(1),
        aex

Второй параметр команды d - данные для занесения в память. Автоматически распознаются следующие форматы:

  • восьмеричный формат, до 16 цифр
  • формат машинных команд
  • команды в мнемонике БЕМШ
  • команды в мнемонике MADLEN

Данные помещаются в память с командной свёрткой. Например:

sim> d 1 1234567
sim> d 2 01 012 4412, 01 26 02023
sim> d 3 нтж 4412(1), по 2023(1)
sim> d 4 aex 4412(1), uza 2023(1)
sim> ex 1-4
1:      0000 0000 0123 4567
2:      0412 4412 0660 2023
3:      0412 4412 0660 2023
4:      0412 4412 0660 2023

Загрузка из файла

Содержимое памяти можно загрузить из файла в формате, аналогичном используемому в ОС Диспак. Пример файла с данными:

в 1
к сл  7,  зп   11
к вчп 11, зп   10
к умн 10, дел  10
к вч  10, слпа 145
к пе  6,  стоп
в 6
к сч  11, пб   1
в 7
ч 1.0
с 0
п 1

Загрузить такой файл можно командой load:

sim> load file.dat

Выгрузить всё содержимое памяти в файл в таком формате можно командой dump:

sim> dump output.dat

Команды симулятора

  • quit
  • set
  • !
  • echo
  • attach
  • do
  • load
  • dump
  • reset
  • examine
  • deposit
  • go
  • step
  • run
  • break

TODO