Форум

Пожалуйста или Регистрация для создания записей и тем.

ОС ВТ-МХТИ-128С (примеры работы в имитаторе)

В имитаторе Д3-28 наконец-то удалось найти и устранить (начиная с версии имитатора от 8-07-2019) неточность имитации нескольких машинных команд, связанную с битом знака R-регистров. Результат: наконец-то в имитаторе стал запускаться транслятор системы ВТ-МХТИ-128С, и теперь мы можем с этой системой познакомиться подробнее.

В разделе Архив программ Д3-28 есть pdf с подробным описанием ОС ВТ-МХТИ-128С (файл b__mhti128_opisanie_s_kassety-20.pdf в строке "кассета 20 В"), и есть pdf с описанием языка программирования ВТ-МХТИ (файл b__mhti128_qzyk_progr__k24b.pdf в строке "кассета 24 В"). Также там есть байт-коды для загрузки ОС ВТ-МХТИ-128С в имитатор - это файл k20a_mhti-128__KP-1431.txt (в строке "кассета 20 А") или файл k21a_mhti-128c__KP-5227.txt (в строке "кассета 21 А"), у них различны только загрузчики.

Для опытов возьмём, например, последний из них: k21a_mhti-128c__KP-5227.txt. Открываем его в свежезапущенном имитаторе и звгружаем систему "с МЛ в ОЗУ машины" - нажимаем по очереди клавиши <L>, <K>, <C>, <S>. Будут мигать индикаторы ОМ и ОП на табло машины - так загрузчик отображает чтение нужных блоков и пропуски дублей. (Кстати, файл k20a_mhti-128__KP-1431.txt загружается в имитаторе гораздо быстрее, но менее "зрелищно"; в повторных опытах лучше для быстроты загрузки брать его.)

В меню View > Display переходим к просмотру "экрана дисплея", сбрасываем в ноль параметры служебной строки (клавишами <F8>, <F9>, <F8>), включаем ДУП-ЛИН клавишей <F5>. По окончании загрузки система выводит на экран своё название и дату версии:

ОС ВТ-128-МХТИ 27.12.87

и затем в верхней строке печатает приглашение к вводу команд "Монитора Операционной Системы" - символы "МОС:".

Выполним опыт, не самый примитивный для машинки Д3-28, - скомпилируем и попробуем запустить многомодульную программу. Пример такой программы с исходным кодом, составленным в ОС ВТ-МХТИ-128С, имеется в Архиве программ Д3-28 на "кассете 24 А" - в раскодировке k24a_prg-4-17.txt.

В меню File закрываем предыдущий файл и открываем файл k24a_prg-4-17.txt. Список имеющихся в нём модулей можно увидеть по команде МОС: Мл: Каталог Т:Д. Для этого надо нажать латинскую <М>, затем <K> и <D>. Система читает заголовочные записи, выводит на экран информацию о файлах, найденных ею на "магнитной ленте", и, дойдя до записи "конец библиотеки", снова в верхней строке печатает приглашение "МОС:". Вот скриншот этой стадии, перед приглашением МОС:

1_katalog_k24a_p4-17.gif

Видим, что на "ленте" k24a_prg-4-17.txt имеется 14 записей исходных программок (ИП). Две последние ИП дублируют пару файлов из начала списка, поэтому мы будем "читать с ленты" в "библиотеку монитора" только первые 12 файлов. Для этого даём команду Мл:Чт:Группу прог номера:1-12, нажимаем пару раз <Пробел>, и затем <D>. Чтение файлов с ленты система отображает на экране так же, как и вывод каталога файлов.

Очистим экран клавишей <F9>. В имитаторе при этом снова устанавливаются начальные значения параметров служебной строки, и мы каждый раз сбрасываем их в ноль: <F8>, <F9>, <F8>.

Текущее содержимое "библиотеки монитора" смотрим командой Библ: Каталог, нажав латинские клавиши <B> и <K>

2_mos_bibl_p1-12.gif

Замечаем, что здесь десять ИП имеют имя с "кодом" - с номером после символа /, а две ИП такого кода не имеют. Уважаемый Виталий любезно предоставил скан пояснений из письма уважаемого автора программ, где говорится, что все программы с кодом надо компилировать, а программы без кода система ВТ-МХТИ-128С вызывает по ходу компиляции сама.

Даём команду МОС:Компиляция:Группы ИП номера:1-9 :12 . На предложение указать номера программ, вызываемых при компиляции, отвечаем клавишей <Пробел> - тогда система сама их определит, по тексту исходного кода программ. Тип вывода информации (Т:) указываем клавишей <Пробел> (если же указать дисплей, нажав <D>, то на экране начнёт печататься листинг исходного кода; это в имитаторе занимает много времени, так как программки довольно большие. Листинг, в том числе с выводом на ТПУ, можно сделать потом).

По ходу компиляции надо обратить внимание на значения параметра АМ (это "адрес массивов") в различных модулях, и для дальнейших целей запомнить наибольшее значение АМ. Ход компиляции система отображает на экране дисплея:

3_kompil_1-3.gif

Заполнив 24 строки экрана, система приостанавливает вывод; для продолжения надо нажимать <Пробел> (либо надо ещё до того клавишей <F> вызвать настройку формата вывода и задать большее количество строк). Продолжение и окончание компиляции:

4_kompil_3-5.gif

5_kompil_end.gif

Образующиеся при компиляции рабочие программы (РП) система вносит в "библиотеку монитора", и присваивает им номера, следующие подряд за номерами уже имеющихся в библиотеке программ. На экране это отображается так: РП -> библ 13, РП -> библ 14, и т. д. В нашем примере ИП имеют номера от 1 до 12, а РП имеют номера от 13 до 22.

Запишем все десять РП на "новую кассету", чтобы, если потребуется, в дальнейших опытах не компилировать исходные модули заново, а загружать готовые РП в машину с МЛ. Для этого в меню File имитатора закрываем файл k24a_prg-4-17.txt и открываем заранее созданный пустой txt-файл; в нашем примере пусть это будет файл с именем my_rp_k24a.txt.

Чтобы старые строки на экране не мешали наблюдать появление новых, по мере надобности очищаем экран, как рассказано выше.

Чтобы на "новой кассете" нумерация записей не продолжала нумерацию записей предыдущей кассеты, а началась с единицы, даём команду МЛ, затем Пр:0, и нажимаем <Пробел>. Клавишами <Z>, <G> и т. д. даём команду Зп:Группу прог номера:13-22: <Пробел> Т:Д

6_zp_rp_13-22.gif

После окончания записи программ даём клавишами <M>, <Z>, <K> команду записи признака "конец библиотеки": Зп:КБ.

Итак, компиляция многомодульного проекта прошла успешно - без сообщений об ошибках, результат сохранён, приступаем к его испытанию.

В упомянутом рукописном пояснении говорится, что в этом примере запускать на исполнение следует РП с именем ОПИС/1. Даём команду "исполнить", подтверждая клавишей <Пробел> запуск указанной РП с номером билиотечной версии 1:

МОС:Исполнить:РП имя:ОПИС/1 в= 1:

Принимая эту команду, система печатает на экране начальное значение "адреса массивов" АМ = 6480. С ним мы не станем соглашаться. В описании системы говорится, если я правильно понял, что в многомодульном проекте адрес массивов должен быть единым для всех модулей. Поэтому следует ввести наибольшее значение АМ (и нажать <Пробел>). В нашем примере это есть установленное в ходе компиляции программки СТАТ/35 значение АМ = 16352; его и вводим. Система печатает принятое значение АМ и просит подтвердить наш выбор. Вот так выглядит эта командная строка "на экране дисплея" в имитаторе перед нажатием подтверждающего <Пробела>:

7_ispoln_opis-1.gif

После нажатия <Пробела> командная строка очищается, и в ней система печатает приглашение уже от "монитора рабочих программ" - это символы "МРП:" Нажимаем латинскую клавишу <P>, означающую команду Пуск. С этого момента ОС ВТ-МХТИ-128С начинает исполнение рабочих программ, входящих в данный многомодульный комплекс.

На экране появляется "меню" комплекса программ:

8_menu_complex_program.gif

Выполним какие-нибудь из предлагаемых действий для иллюстрации работоспособности получившихся РП (правда, не всё работает; например, зависают запись и считывание с МЛ. Но автор программ предупреждал в пояснении: эти пользовательские программы не доделаны).

Выберем, для эксперимента, пункт "1. Начальный запуск". Появляется вопрос:

ВЫ УВЕРЕНЫ, ЧТО ЭТО НУЖНО ? (ДА, НЕТ)

(Хороший вопрос... и впрямь задумаешься 🙂 ... Не уверены, но жмём <D>, т. е. "да".

Повторяется вывод того же меню. Тогда пробуем выбрать пункт 2. На вопрос об изменении размеров массива отвечаем "да". В ответ на предложение ввести количество строк и столбцов вводим для примера 8 и 8, подтверждая ввод чисел нажатием <Enter> (на реальном терминале это была бы клавиша ПС). Введённые значения появляются в информационной таблице.

На повторный вопрос об изменении размера массива отвечаем <N>, т. е. "нет". Очистить массив соглашаемся. Экран очищается, и система рисует таблицу 8х8. В правом верхнем углу виден текущий формат чисел "F1.3", слева внизу - приглашение смотреть "Справку":

9_tabl_massiv_8x8.gif

Ясное дело, "справку" надо посмотреть. Нажимаем <S>. Появляется таблица с пояснениями и приглашение выбрать команду:

10_spravka.gif

Здесь видно, что команды в этой программе задаются не только буквенными клавишами, но и специальными клавишами терминала 15ИЭ-00-013.

Выберем команду Ф (нажмём <F>). Появляется запрос количества цифр в целой и в дробной частях числа; вводим для примера 1 и 1. Система умная - снова рисует изображение таблицы 8х8, но теперь её горизонтальный размер уменьшился в соответствии с "укоротившимся" форматом чисел:

11_tabl_8x8_format1-1.gif

"Справка" подсказывает, что перед вводом числа в ячейку таблицы надо нажимать клавишу терминала с изображением "стрелка вниз с точкой". На клавиатуре ПК нет такой клавиши. Но из документации к терминалу известен байт-код этой клавиши: 0002. Этот код терминал выдаёт также при нажатии СУ Б. В имитаторе нажатие СУ имитируется нажатием (с отпусканием) <CapsLock>; затем нажимаем латинскую <B>, и ещё раз (с отпусканием) <CapsLock> - тем самым отпускаем СУ. В ячейке с курсором появляется двоеточие, это приглашаение к вводу числа. Вводим цифру целой части какого-нибудь числа, точку, цифру дробной части, и нажимаем <Enter> - это как бы ПС. Таким путём можем заполнить всю таблицу массива:

12_tabl_8x8_numbers.gif

Заполнив таблицу, пробуем вывести её на печать - на ТПУ. В имитаторе ТПУ включается клавишей <Home>. И, как учит "Справка", даём команду В, т. е. <W>. Задаём "вывод фрагмента со строки" 1, "количество строк" 20 - чтобы охватить большую часть экрана, с запасом, так как вывод на ТПУ здесь, по-видимому, реализован блочной передачей строк с экрана. В txt-файле появляется наша табличка с массивом:

13_tabl_8x8_numbers_tpu.gif

Завершение работы в этом пользовательском комплексе тоже работает нормально: нажатием <K> попадаем в исходное меню, и затем после нажатия ВК, т.е. <Backspace>, возвращаемся к приглашению МРП. Для возврата в "Монитор Операционной Системы" нажимаем <М>; появляется приглашение "МОС:".

Посмотрим, работает ли листинг. (В прежних версиях имитатора, до 8.07.2019, система МХТИ-128С вместо листинга выводила на экран сообщение "ошибка: не описано имя программы"; из-за неправильной имитации работы с битом знака в некоторых командах система воспринимала любую ИП как "вложенную" и требовала упоминания её имени в "основной" программе). Для примера даём команду листинга ИП УПРА/2, библиотечный номер версии "в=1". Вот начало этого листинга:

15_list_upra-2.gif

Всё нормально, листинг работает.

Листинг всех 12 исходных программ данного примера (включая примеры редактирования ИП) приведён в

k24a_list_12prg.pdf

Для проверки работоспособности записанных на ленту ранее скомпилированных рабочих программ (РП) выполняем сначала рестарт имитатора (клавишей <Escape>) и новый запуск ОС ВТ-МХТИ-128С. Затем "читаем с МЛ" десять РП из ранее записанного файла my_rp_k24a.txt:

16_load_rp.gif

Как и раньше, запускаем на исполнение РП ОПИС/1 со значением АМ = 16352 (а можно и побольше взять значение АМ, например 17000). Всё нормально: система работает так же, как непосредственно после компиляции ИП. Например, можем выбрать пункт 2 в меню комплекса программ, ответить "нет" на предложения об изменении размеров массива и о его очистке, и затем перейти к просмотру "Справки".

Можно выполнить опыт, подтверждающий, что "комплекс программ" здесь работает действительно как многомодульная система. Для этого после рестарта имитатора и нового запуска ОС ВТ-МХТИ-128С прочтём из файла my_rp_k24a.txt не десять, а девять РП, т. е. не будем загружать в ОЗУ файл РП СПРА/32. Тогда по ходу исполнения РП ОПИС/1 и пункта 2 в меню комплекса программ мы не сможем как раньше перейти к просмотру "Справки" - она осталась в незагруженном файле. А если не загружать (или удалить командой МОС "библиотека, чистка") файл УПРА/2, то и меню комплекса программ будет недоступным, - машинка зависнет сразу после запуска РП ОПИС/1.

Ещё один пример многомодульной пользовательской разработки - вариант этого же "комплекса программ" на кассете "108 сторона А", раскодировка имеется в файле k108a_p1-8.txt.Там два раза записаны четыре исходных модуля, так что загружать в библиотеку монитора достаточно четыре первые записи: МАСС/1, ВЫЗО/2, ВЫЧИ/3, ВЕМА. Компилировать (как группу исходных программ) можно первые три из них; затем запускать на исполнение - РП МАСС/1. Листинги исходных модулей и скриншоты запуска приведены в

k108a_list_4prg.pdf

Интересно также, что "загрузчик" в файле k21a_mhti-128c__KP-5227.txt содержит и "генератор" системы ВТ-МХТИ-128С. В реальности он выполнял резервную запись системы (включая такого же "загрузчика") на новую МЛ. В имитаторе такая генерация системы тоже работает (но, конечно, не на МЛ, а в новый txt-файл). Инструкция, имеющаяся в рукописном пояснении к кассете "24 А", гласит:

Для запуска ОС ВТ-МХТИ-128С (загруженной загрузчиком с контрольной суммой = 5227) с последующей генерацией надо:

. на пульте машины вместо S нажать два раза кнопку с "треугольником" (в имитаторе - два раза нажать клавишу <T>),
. ввести в регистр Х желаемое количество дублей блоков в блочной записи,
. поставить чистую кассету (в имитаторе - открыть заранее созданный пустой txt-файл),
. нажать S. Машина выполнит запись.
. для выхода из режима генерации в режим работы нажать на пульте машины кнопку "треугольник" и затем кнопку СК (в имитаторе - нажать клавишу <T> и затем клавишу <X>).

(Конечно, помимо проверки этой системы в имитаторе такое копирование раскодировки не имеет смысла; на компьютере создать копию txt-файла проще без имитатора :- )

Nikolay Kimlik отреагировал на эту запись.
Nikolay Kimlik