Пользователь
0,0
рейтинг
1 сентября 2013 в 13:50

Добываем исходный код VM/370

Здравствуйте, уважаемые хабарчане!
Почти неделю назад я написал свой первый пост о VM/370. Первым комментарием к нему было совершенно справедливое замечание:
Весело, конечно, но «полотно» состоит в основном из выводов команд. Если честно, гораздо интереснее прочитать не только про саму установку системы, но и про её «кишки», как, что, да почему.
Исследовать исходники VM/370, к примеру.

Да, действительно, туториал по установке мягко говоря устаревшей ОС интересен только в общепознавательном плане как демонстрация ее возможностей. А вот описание принципов работы с цитатами из исходников — другое дело. Тем более, что исходники доступны. Проблема только в том, что подобное описание — дело серьезное.
Принципы работы VM/370 описаны в этом трехтомнике. Сам исходный код — сравнительно небольшой, «всего» двести тысяч строк на ассемблере — CP и примерно столько же — CMS. Но работа все равно предстоит капитальная.
В этой статье я не ставлю перед собой задачу даже начать цикл о внутренностях VM/370. Я только объясню как я извлек исходный код VM/370 в читабельном формате. В процессе извлечения я узнал кое-что интересное про работу с VM/370.


Распаковка ленты в CMS


Объем ленты с исходниками — около тридцати мегабайт. Будучи совершенно уверенным что файлы хранятся на ленте в несжатом виде, я просто разделил этот объем на емкость цилиндра 3330 и вычислил, что для сохранения всех исходников мне понадобиться 130 цилиндров. Потом это конечно оказалось не так (видимо, какое-то сжатие все-таки происходит, размер распечаток — ок. 40 мегабайт), но к счастию лента состояла из нескольких томов, и я просто распечатал их один за другим.
Итак, добавим в каталог, в описание пользователя MAINT, строку:
 MDISK 192 3330 200 130 CPR6L0 WR READ * SOURCES

Примечание: весь процесс я выполнял под пользователем MAINT. Вообще говоря, это — злостное нарушение правила «не работай под рутом» и так делать нельзя.
Запустим VM, залогинимся как MAINT, запустим CMS. введем перфокарты с описанием каталога и обновим его командой «DIRECT MYVM». Перелогинимся (чтобы изменения учетной записи вступили в силу). Подключим диск 192 (командой «access 192 b») и ленту с исходниками. Загрузим первый том архива (исходники CP) командой «VMFPLC2 LOAD * * B».

Распечатка


Я долго не мог найти способ распечатать несколько файлов одной командой. Дело в том, что команды PRINT и PUNCH ругаются на звездочки в имени файла. А печатать пятьсот штук файлов вручную что-то не хотелось. В конце-концов я решил, что проще всего будет написать программу распечатки на ассемблере, но роясь в мануалах по ассемблеру, нашел более легкий способ.
У команды LISTFILE (аналог DIR/ls) есть опция (EXEC. Если запустить LISTFILE с этой опцией, LISTFILE создаст файл (файлы EXEC — это аналог bat/sh), со строками вида &1 &2 . &1 &2 — это параметры скрипта.
Теперь внимание! При запуске команды CMS PUNCH, в каждой строке файла CMS EXEC вместо &1 будет подставлен PUNCH, а затем строка выполнена. По-моему, это самое лучшее решение инженеров IBM в области пользовательского интерфейса (хотя и ненужное в Linux при наличии awk).
Я поэкспериментировал с различными распечатками и решил, что PUNCH лучше чем PRINT.
Примечание: геркулесовский вывод перфокарт настроен на формат EBCDIC. Чтобы получить читабельный код, надо перенастроить его на ASCII командой «ATTACH D ./sources/DMK.txt ascii».
Итак, создаем список файлов:
L * * B (EXEC

И выводим их:
CMS PUNCH
...длинный список файлов.

Уже когда все закончилось, я догадался, что имело смысл добавить в CMS EXEC первую строчку &CONTROL OFF (аналог echo off). Да, не застал я не то что VM/370, но даже и элементарный MS-DOS.

Разделение файлов


В результате предыдущих манипуляций, я получил файл DMK.txt со склеенными вместе исходниками. Теперь их надо разделить. Для этого я применил такой скрипт на awk:
/^MAINT    MAINT    MAINT    MMMM  AAAA  IIII  NNNN  TTTT$/ {next}
/^USERID/ {next}

$1==":READ"{
    MYFILE="./DMK/"$2 "_" $3
    next
  }

{
  print $0 > MYFILE
}

Прошу прощения за г-код, писалось на коленке и не с целью читабельности/эффективности.

Теперь таким же образом можно вывести исходники CMS (условный код DMS), RSCS (условный код DMT, название Remote Spooling Communication Subsystem немного путает, но это в каком-то смысле аналог fido) и IPCS (условный код DMM, системные тесты).

Ссылки


@valplo
карма
–25,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (13)

  • +1
    Комментарий: в coreutils для манипуляций с пайпом и командной строкой есть xargs — принимает данные на stdin, подставляет как аргументы командной строки (то есть cat filellist|xargs cat). В бонусах — параллельность выполнения, контролируемое число вызовов, контроль ошибок, подстановка в любое место сложного выражения и т.д.
    • 0
      Да, но в CMS (в те времена) не было даже pipes.
      • +1
        Это не к тому, как это надо делать в CMS, это к упоминанию awk'а, как современного решения.
        • 0
          Просто я тот же awk использовал для разделения вот и пришел в голову пример.
  • –3
    Да не, имхо если нет ни одной рабочей машины в мире, то всякое ковыряние софта бессмысленно. Эмуль и бинарники естть — все, посмотреть немножка можно. А так — умерла так умерла.
    • 0
      Давайте вообще забудем всю историю IT, ведь оно ни к чему не применимо и многие рабочие машинки канули в Лету! А рабочую машину похожей архитектуры можно и создать при всём желании, но кому это нужно? Компаниям явно невыгодно, а энтузиасты не имеют инструментов.
      • 0
        И вообще, всем раздать по Intel Core i5 с запароленым UEFI, Windows 8 с отключенным администратором, TPM и все приложения — под виртуальную машину типа NET с отправкой дампа памяти в RIAA и ESA каждые пять минут, чтобы не запускали SIMH или QEMU. Или лучше каждые три. Ибо нех.
      • 0
        Я бесконечно рад, что именно ВЫ не забываете историю ИТ, и поддерживаете ее! И я даже не заглядывая в ВАШ профиль больше чем уверен, что ВЫ являетесь обладателем небольшой коллекции старых мейнфреймов или если брать ниже, хотя бы персональных компьютеров типа спектрум. Ведь так? Или мне придется в ВАС разочароваться?
    • 0
      Одну минуту, а как же это? Тут вообще никогда рабочей машины не было.
    • +1
      Что из нее умерло? Реализация? Технологии? Архитектура? Или идеи, лежащие в основе?
  • 0
    3330 — это скорее тип девайса. (сейчас используется только 3390)
    hansen-family.com/mvs/3330_ref.htm

    Сильно удивлен таким выбором хобби. Из какого города молодое пытливое дарование?
    • 0
      «Молодое пытливое дарование» родом из Питера, но сейчас изображает поросенка Петра. А насчет хобби — все-таки по-моему лучше Minecraft.
      А фразой под «емкость цилиндра 3330» я имел ввиду емкость одного цилиндра диска (тк минидиски состоят из целого количества цилиндров).
      • 0
        А поросенок школу закончил? Это студенческое полу-хобби или на работе такая тоска? Могу в Питере показать людей которые серьёзно сидят в таких системах. Я тебе в личку мыло бросил. Пиши. Проведу экскурсию. Может свои силы попробуешь.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.