Эмуляция и история вычислительной техники. Файл конфигурации для монитора

Современные компьютеры и современные браузеры достигли серьезных высот производительности. Лет десять назад интерактивное веб-приложение казалось чудом, а теперь на JavaScript пишут не только игры или, скажем, но даже эмуляторы старых компьютеров. Мы выбрали несколько наиболее интересных эмуляторов, которые порадуют любителей старины и всех, кто интересуется историей вычислительной техники.

JSMESS

MESS (Multi Emulator Super System, часть проекта MAME) - один из старейших эмуляторов домашних компьютеров, игровых приставок и научных калькуляторов. Отличается он тем, что поддерживает не один процессор или архитектуру, а около 250 разных систем. JSMESS - это порт MESS на JavaScript, разработанный Джейсоном Скоттом по заказу Internet Archive. JSMESS доступен на archive.org вместе с внушительным каталогом игр и софта для разных старинных платформ. Интересно, что для эмуляции PC в качестве прослойки тут используется DOSBox. Но если это и сказывается на производительности, то незначительно: можешь хоть сейчас погонять в Prince of Persia , и работать он будет не хуже, чем когда-то на «двушке» у папы на работе.

PCjs



PCjs - это семейство эмуляторов старых процессоров, среди которых Intel 8080, x86, PDP-11 и одна из реализаций MOS 6502. На главной странице pcjs.org есть интересная подборка готовых конфигураций и образов, в том числе виртуалки с MS-DOS, PC-DOS, OS/2 и даже Windows. Windows 95 нам загрузить не удалось, а вот Windows 3.11 медленно, но завелась. Запустив одну из машин, не забудь заглянуть в список доступных образов дисков - там можно обнаружить подборки редкого софта и операционок (к примеру, Minix и SCO Xenix). Как вариант - можешь загрузить свой образ диска или дискеты в формате IMG.

PCE.js



Этот родственник PCjs отличается тем, что, помимо x86, эмулирует Mac Plus и Atari ST. Интереснее всего, пожалуй, демонстрация Mac OS System 7 - и не только потому, что автор не поленился добавить картинку с классическим «Макинтошем». По скорости работы система чуть ли не превосходит оригинал, а на диске HD 2 находится несколько папок с программами и играми. На том же сайте есть эмулятор IBM PC/XT с приложенными к нему демками Monkey Island, Civilization и Wolfenstein 3D.

Javatari



Если говорить о браузерных эмуляторах Atari, то Javatari - это, наверное, лучший из них. Он, в частности, используется на сайте Virtual Atari , где собрана коллекция из 550 игр. Если же ты вдруг захочешь развлечься программированием на ассемблере для Atari 2600 или просто решишь полюбопытствовать, как раньше делали игры, то обязательно загляни на сайт 8bitworkshop.com : он на одной странице позволяет править исходники и наблюдать за изменениями.

Virtual x86



Шумиха вокруг браузерных эмуляторов начала набирать обороты в 2011 году, когда Фабрис Беллар запустил проект JSLinux - эмулятор ПК с Linux, который работает на его домашней страничке. С тех пор идею Беллара неплохо развили: проект Virtual x86 предлагает на выбор список из семи дистрибутивов UNIX и Linux, а также Windows 1.01, Windows 95 и 98, Kolibri OS и Oberon. В отличие от PCjs, этот эмулятор не пытается стартовать Windows с нуля и ограничивается загрузкой образа оперативной памяти. Даже для Windows 98 это всего 12 Мбайт, так что процесс идет быстро. Увы, все операционки максимально урезаны и не имеют подключения к интернету.

Эмуляторы ZX Spectrum



Для тех, кто родился в СССР, компьютерная ностальгия часто связана с ZX Spectrum. Пока что лучший браузерный эмулятор «Спектрума» из того, что нам попадалось, - это уже упомянутый JSMESS. Помимо него, существуют

Здравствуйте, уважаемые хабарчане!
Я интересуюсь «древними» компьютерами и операционными системами. Несмотря на их древность, многие из них гораздо более продуманнее современных систем и лучше подходят в качестве примеров. Windows и Linux есть чему поучиться у многих устаревших ОС.
По-моему самые интересные из старых систем - мейнфреймы и поздние миникомпьютеры (супермини). В отличие от ранних миникомпьютеров, которые часто лепились на коленке конечного пользователя под его нужды, системы мейнфреймов и супермини с самого начала были предназначены для людей не имеющих ни полного представления о работе компьютера ни времени на разработку отдельной архитектуры для каждой задачи. При этом, в отличие от современных систем (4 гигабайта оперативки на набор этого поста), мейнфреймы и в особенности супермини были очень ограниченны в ресурсах и не как правило не разрастались.
В этом посте я опишу процесс установки операционной системы VM/370. VM/370 - операционная система IBM для компьютеров IBM System/370. Это многопользовательская ОС работающая по принципу гипервизора control program (CP): каждому пользователю предоставляется своя виртуальная машина, в которой он может запустить желаемую ОС, в частности сам гипервизор CP (немногие современные гипервизоры способны на такой трюк) и CMS - однопользовательскую ОС, бабушку MS-DOS. Прямой потомок VM - zVM до сих пор используется на мейнфреймах IBM System z. Подробнее о VM можно прочитать в Википедии .
Для тех кто хочет не красноглазить, а просто посмотреть конечный результат: есть готовые образы системы с подробными инструкциями (правда на английском). Остаток статьи можно не читать.

Материалы и инструменты

Для установки и работы нам понадобится:
  • Эмулятор S/370: Hercules . К сожалению, не могу дать советов по установке для Windows, тк сам пользуюсь Linux.
  • Эмулятор дисплея IBM 3270: x3270.
  • Эмулятор терминала (подойдет обычный Telnet).
  • Образы лент с www.cbttape.org :
  • По желанию:
  • По желанию: дополнительные программы , правда, я сам еще не понял как их устанавливать.
  • Документация отсюда. Необходима по крайней мере инструкция по установке . Все, естественно на английском, но лично для меня это было только стимулом его выучить. IBMовский английский считается образцом грамотного языка.

Подготовка.

Все фалы проекта я помещаю в папку /home/link/Programming/LEGACY/SYSTEMS/System360/vm370habr (далее просто vm370habr). Загруженные образы сохраняем в папку vm370habr/DISTR. В vm370habr создаю подпапку IO.
Создание образов дисков
link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr/DASD $ dasdinit -z VMREL6 3330-11 VMREL6 HHCDU044I Creating 3330 volume VMREL6: 808 cyls, 19 trks/cyl, 13312 bytes/track HHCDU041I 808 cylinders successfully written to file VMREL6 HHCDI001I DASD initialization successfully completed. link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr/DASD $ dasdinit -z CPR6L0 3330 CPR6L0 HHCDU044I Creating 3330 volume CPR6L0: 404 cyls, 19 trks/cyl, 13312 bytes/track HHCDU041I 404 cylinders successfully written to file CPR6L0 HHCDI001I DASD initialization successfully completed. link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr/DASD $
Диски в терминах System360 называются DASD . Программа dasdinit создает чистые образы дисков. Первый образ - диск модели 3330 с меткой VMREL6. На него мы запишем стартовую систему. Второй диск - CPR6L0, модели 3330-11 (в два раза большей емкости), на него установим гипервизор. Диски архивированы (опция -z), эту опцию лучше не применять на медленных компьютерах.
Файл конфигурации для монитора
Создаем в папке vm370habr текстовый файл hercules.cnf

со следующим содержанием:

ARCHMODE S/370 # Мы хотим эмулировать компьютер S/370, CPUMODEL 3158 # модели 3158. CPUSERIAL 000777 # Это поле не имеет значения. ECPSVM NO # Отключить ускорение виртуализации (пока я с ним не разобрался). MAXCPU 1 # Однопроцессорная система. NUMCPU 1 # С одним процессором включённым при старте (привет, кеп) OSTAILOR VM # Не оповещать нас о "странных" для многих ОС, но типичных для VM ошибках. LOADPARM 0120....# Если честно, я сам не понял что это. MAINSIZE 16 # 16 мегабайт оперативной памяти (по тем временам - роскошь). XPNDSIZE 0 # Без дополнительной памяти (CP её не использует). # Адрес папки с нашей системой. DEFSYM MyDir /home/link/Programming/LEGACY/SYSTEMS/System360/vm370habr # Номер TCP/IP порта для telnet. CNSLPORT 3270 ################################################## ## Устройства ## ################################################## # В System/370 устройства адресуются (в простейшем случае) # тремя шестнадцатеричными цифрами: # - Номером канала, # - Номером управляющего блока, # - Номером устройства. # На управляющем блоке должны висеть устройства сходных типов. # На первый канал имеет смысл подключать медленные устройства. # Первый столбец - адрес устройства. # Второй - тип. # Дальше идут настройки, для всех устройств разные. Их точное значение # можно посмотреть в руководстве Геркулеса. 008 3215-C NOPROMPT # Первый телетайп для оператора системы. 009 3215 NOPROMPT # Второй телетайп для управления установкой. 00C 3505 # Ввод перфокарт. 00D 3525 $(MyDir)/IO/punch ascii crlf # Вывод перфокарт. 00E 1403 $(MyDir)/IO/printer crlf # Принтер. 020-02F 3270 # Графические терминалы. ######## Диски 130 3330 $(MyDir)/DASD/CPR6L0 131 3330 $(MyDir)/DASD/VMREL6 ####### 180-18F 3420 * # Ленточные накопители.


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

Настройка дисков

link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr $ hercules #...много текста Command ==>devinit 180 DISTR/starter-3330.aws HHCTA004I 0180: DISTR/starter-3330.aws is a AWS Format tape file HHCPN098I Device 0:0180 initialized
В другом терминале:
link@link-K73BY ~/Programming/LEGACY/SYSTEMS/System360/vm370habr $ telnet localhost 3270 Trying 127.0.0.1... Connected to localhost. Escape character is "^]". Hercules version 3.07 built on Jun 19 2011 04:29:21 running on link-K73BY (Linux-3.0.0-26-generic.#43-Ubuntu SMP Tue Sep 25 17:19:22 UTC 2012 x86_64 MP=2) Connected to device 0:0009
В окне с Геркулесом:
Command ==>ipl 180
(ipl, на мейнфреймовском жаргоне - то же самое что и boot).
В окне с телнетом появится следующее:
VM/370 FORMAT/ALLOCATE PROGRAM RELEASE 6 ENTER FORMAT OR ALLOCATE:
Форматирование дисков
В System/370 концепт данных на диске отличался от современного: размеры секторов мог быть различным даже на одной дорожке и часто определялись приложением, а не операционной системой. Подключенные к CP диски могут быть двух типов: резидентные диски CP (для системной информации и файлов подкачки) и диски пользователей, которые могут быть разбиты по цилиндрам на несколько минидисков. Оболочка CMS разбивает всё отведенное ей пространство диска на 800-байтные секторы и строит файловою систему по типу FAT.
Насколько я понял, диск стартовой системы (CPR6L0) - это диск данных с особой сборкой ядра в первых цилиндрах. В качестве резидентного диска стартовая система (и новая установка ядра) будут использовать диск VMREL6. Для этого нам надо выделить на томе VMREL6 пространство для файлов подкачки и временных дисков. Я также отформатировал CPR6L0, потому что не уверен в том, что образы сгенерированные dasdinit подходят VM.
На ленте с образом стартовой системы есть программа форматирования.

В окне с телнетом:

ENTER FORMAT OR ALLOCATE:FORMAT FORMAT FUNCTION SELECTED ENTER DEVICE ADDRESS (CCU):131 ENTER DEVICE TYPE:3330-11 ENTER START CYLINDER (XXX) OR "LABEL":000 ENTER END CYLINDER (XXX):807 ENTER DEVICE LABEL:VMREL6 FORMAT STARTED FORMAT DONE 000 NO. PAGE RECORDS WITH READ-CHECK ERRORS ENTER FORMAT OR ALLOCATE:ALLOC ALLOCATE FUNCTION SELECTED ENTER DEVICE ADDRESS (CCU):131 ENTER DEVICE TYPE:3330-11 ENTER DEVICE LABEL:VMREL6 ENTER ALLOCATION DATA FOR VOLUME VMREL6 TYPE CYL CYL .... ... ... PERM 000 012 DRCT 013 016 TEMP 017 201 PERM 202 202 TEMP 203 389 TDSK 390 402 PERM 403 807 END ALLOCATION RESULTS PERM 000 012 DRCT 013 016 TEMP 017 201 PERM 202 202 TEMP 203 389 TDSK 390 402 PERM 403 807 DEVICE 131 VOLUME VMREL6 ALLOCATION ENDED ENTER FORMAT OR ALLOCATE:FORMAT FORMAT FUNCTION SELECTED ENTER DEVICE ADDRESS (CCU):130 ENTER DEVICE TYPE:3330 ENTER START CYLINDER (XXX) OR "LABEL":000 ENTER END CYLINDER (XXX):403 ENTER DEVICE LABEL:CPR6L0 FORMAT STARTED FORMAT DONE 000 NO. PAGE RECORDS WITH READ-CHECK ERRORS


Здесь мы сначала форматируем будущий системный диск, затем выделяем на нем участки (выделение взято из инструкции по установке) и форматируем диск для стартовой системы.
Копирование стартовой системы
В окне с геркулесом вводим:
stop ipl 180
В телнете появляется:
VM/370 DASD DUMP/RESTORE PROGRAM RELEASE 6 ENTER CARD READER ADDRESS OR CONTROL STATEMENTS ENTER:
Вводим:
ENTER CARD READER ADDRESS OR CONTROL STATEMENTS ENTER: SYSPRINT 00E ENTER: INPUT 180 3420 ENTER: OUTPUT 130 3330 CPR6L0 ENTER: RESTORE ALL RESTORING CPR6L0
Подождите несколько минут и Геркулес начинает выдавать сообщения об ошибках. Дело в том, что в программе DDR есть ошибка, которая не влияла на поведение на реальном железе, но вешает эмуляторы.
Выйдите из Геркулеса командой quit и перезапустите Геркулес.

Запуск и настройка стартовой системы

Подключите к Геркулесу эмулятор дисплея (как это делать - см. мануал эмулятора). В Геркулесе наберите команду «ipl 130» и нажмите клавишу ввода в окне дисплея.

На дисплее появится следующая картинка:

В принципе, дисплей 3270 в исполнении CMS похож на обычную консоль. Единственное серьезное отличие - консоль не прокручивается автоматический, надо очищать экран кнопкой «Clear». Все остальное в принципе можно выяснить методом тыка.

Настройка стартовой системы
Сборка ядра стартовой системы отличается тем, что здесь адреса устройств не вшиты намертво в код, а задаются при каждом старте. Для моей конфигурации

ответы такие:

VM/370 STARTER SYSTEM RELEASE 6.0
ENTER PRINTER ADDRESS (CUU):
00e
ENTER DEVICE TYPE (1403,1443,3211,3203,3800):
1403
ENTER PUNCH ADDRESS (CUU):
00d
ENTER DEVICE TYPE (2540P,3525):
3525
ENTER READER ADDRESS (CUU):
00c
ENTER DEVICE TYPE (2501,2540R,3505):
3505
ENTER ADDRESS WHERE PID TAPE IS MOUNTED (CUU):
180

3420
ENTER ADDRESS WHERE SCRATCH TAPE IS MOUNTED (CUU):
181
ENTER DEVICE TYPE (2401,2415,2420,3420):
3420
===Нажмите клавишу Clear===
ENTER DEVICE ADDRESS WHERE SYSTEM RESIDENCE WILL BE BUILT (CUU):
131
ENTER DEVICE TYPE:
3330
===Повторение настроек===
ARE THE ABOVE SETTINGS CORRECT?
YES
===Экран очищается===
CHANGE TOD CLOCK (YES|NO):
13:36:14 NO
13:36:14 START ((COLD|WARM|CKPT|FORCE) (DRAIN))|(SHUTDOWN):
13:36:21 COLD
13:36:21 DMKLNK117E CPGEN 351 NOT LINKED; VOLID VMREL6 CONFLICT
13:36:21 DMKLNK117E CPGEN 352 NOT LINKED; VOLID VMREL6 CONFLICT
13:36:21 DMKLNK117E CPGEN 353 NOT LINKED; VOLID VMREL6 CONFLICT
13:36:21 AUTO LOGON *** CPGEN USERS = 001 BY SYSTEM
13:36:21

DMKCPI952I 0512K SYSTEM STORAGE

DMKCPI957I STOR 00512K, NUC 156K, DYN 00320K, TRA 008K, FREE 0028K, V=R 00000K
13:36:21 FILES: NO RDR, NO PRT, NO PUN


Теперь я настраиваю консоль:
spool console start terminal mode vm
Эти настройки нужны для того, чтобы при запуске CMS гипервизор передавал ей управление консолью. Но пока мы еще не запустили CMS, команды виртуальной машине уйдут в пустоту. Поэтому следите за надписью в правом нижнем углу экрана и вводить команды только по сигналу CP READ. Если в углу экрана надпись RUNNING, нужно нажать клавишу Enter, а если HOLDING - CLEAR.
Определение установки
Введите команду QUERY VIRTUAL DASD, чтобы проверить какие диски подключены. Результат должен быть таким:
13:52:55 DASD 190 3330 CPR6L0 R/O 085 CYL 13:52:55 DASD 191 3330 CPR6L0 R/W 001 CYL 13:52:55 DASD 194 3330 CPR6L0 R/W 027 CYL 13:52:55 DASD 350 3330 VMREL6 R/W 808 CYL
Теперь нужно подключить том VMREL6 к виртуальной машине под тем же номером что и в реальной:
define 350 as 131.
Подключение лент
Создайте в папке vm370habr пустой файл scratch.aws и введите в Геркулес следующие команды:
devinit 180 DISTR/ptf-616.aws devinit 180 scratch.aws
Первая лента - это патч системы, а вторая - пустая лента, на которую будет записано ядро.
Теперь подключаем эти ленты к виртуальной машине. В окне дисплея:
attach 180 to cpgen as 181 attach 181 to cpgen as 182
Загрузка CMS
Введите в окно дисплея команду: «ipl 190 parm seg=null». Появится сообщение: «RELEASE 6 CMS 12/25/78». Нажмите клавишу ввода. Теперь вы работаете под управлением CMS и можете не беспокоиться о потере команд.
Далее, создайте временный диск (он понадобиться для сборки ядра) командой «define t3330 192 11» и отформатируйте его командой format 192 d. (d - буква диска в CMS). Дальше все совсем как в DOSе. Метку можно назначить любую, я выбрал TMP192 (как в инструкции).
Пару слов о файлах CMS: в CMS имя файла записывается так: через пробел восемь символов имени, восемь символов расширения, буква диска. То есть как в ранних DOS, но с точностью до наоборот.

Применение патчей

Отключите защиту от записи на системном диске CMS: «link cmssys 190 190 w write».
Скопируйте содержимое диска a на диск d коммандой «copy * * a = = d» Символ «равно» в шаблонах CMS означает «без изменений».
Скопируйте файлы патчей на диск d: «vmfplc2 load * * d». VMFPLC2 выведет такой список файлов:
LOADING..... 5749010 061638 D1 VMSERV EXEC D1 5749010 EXEC D1 VMFPLC2 MODULE D2 END-OF-FILE OR END-OF-TAPE
Теперь применим патчи:
access 192 c release a vmserv nomemo noipl
VMSERV выведет приветствие и начнет спрашивать какие патчи надо применить. Нам нужен сервис «5749010» и патч CP VM/370. «CP BASE STAGING AREA DISK ADDRESS» - 194. Также, ответьте «yes» на вопрос «IS THIS THE INITIAL SYSGEN OF THIS SYSTEM?».
После этого, VMSERV применит патчи к CP и перезапустит CMS. Когда CMS выведет приветствие, подключите временный диск как диск a: «access 192 a».

Подготовка к сборке ядра

Введите «generate srvcpgm». Эта команда выведет перфокарты с сервисными программами (на эмуляторе они нам не понадобятся). Затем программа спросит печатать ли пример пользовательского каталога. Ответьте «yes» - в каталог может пригодиться. А карты с конфигурационными файлами не нужны - я приведу их ниже.

Конфигурация ядра

Ядро настраивается с помощью нескольких исходников на языке ассемблера и описания пользовательского каталога. Тем, кто хочет их настроить «по вкусу», придется долго копаться в мануалах, а я привожу

готовый вариант:

ID CPGEN:READ MYVM DIRECT * CHANGE THE NEXT ENTRY FOR YOUR SYSTEM RESIDENCE DEVICE DIRECTORY 131 3330 VMREL6 * USER OPERATOR OPERATOR 320K 1M ABCDEG ACCOUNT ACT1 OPERATOR CONSOLE 009 3215 SPOOL 00C 2540 READER A SPOOL 00D 2540 PUNCH P SPOOL 00E 1403 L MDISK 191 3330 008 005 CPR6L0 WR READ WRITE LINK MAINT 194 194 RR LINK MAINT 190 190 RR * USER CE CE 320K 1M EFG ACCOUNT ACT2 CE CONSOLE 009 3215 SPOOL 00C 2540 READER A SPOOL 00D 2540 PUNCH P SPOOL 00E 1403 L MDISK 191 3330 013 004 CPR6L0 WR READ WRITE LINK MAINT 194 194 RR LINK MAINT 190 190 RR * USER MAINT CPCMS 720K 16M BCEG ACCOUNT ACT3 MAINT OPTION ECMODE REALTIMER CONSOLE 009 3215 SPOOL 00C 2540 READER A SPOOL 00D 2540 PUNCH P SPOOL 00E 1403 L MDISK 190 3330 030 085 CPR6L0 MR READ MDISK 191 3330 017 007 CPR6L0 WR READ MDISK 194 3330 115 027 CPR6L0 MR READ MDISK 199 3330 029 001 CPR6L0 WR READ * MDISK 300 3330 000 808 VMREL6 MW * * THE ABOVE ENTRY SHOULD BE MODIFIED TO MATCH THE ADDRESS AND LABEL * OF YOUR SYSTEM RESIDENCE VOLUME. IT MAY THEN BE USED BY THIS ID * TO LOAD A DIRECTORY AND WRITE A CP NUCLEUS. * DELETE THE " * " (IN FRONT OF MDISK) ALSO. * CHANGE THE "404" TO A "808" IF YOURS IS A 3330-11 * ***** USER IVPM1 IVPASS 320K 16M G ACCOUNT ACT4 IVPM1 CONSOLE 009 3210 SPOOL 00C 2540 READER A SPOOL 00D 2540 PUNCH P SPOOL 00E 1403 L MDISK 191 3330 001 001 CPR6L0 WR READ WRITE LINK MAINT 194 194 RR LINK MAINT 190 190 RR * USER IVPM2 IVPASS 320K 1M G ACCOUNT ACT5 IVPM2 CONSOLE 009 3210 SPOOL 00C 2540 READER A SPOOL 00D 2540 PUNCH P SPOOL 00E 1403 L MDISK 191 3330 002 001 CPR6L0 WR READ WRITE LINK MAINT 194 194 RR LINK MAINT 190 190 RR * USER RSCS RSCS 512K ACCOUNT ACT6 RSCS OPTION ECMODE CONSOLE 009 3215 SPOOL 001 2540 READER A SPOOL 00C 2540 READER A SPOOL 00D 2540 PUNCH P SPOOL 00E 1403 L MDISK 191 3330 003 005 CPR6L0 WR READ WRITE LINK MAINT 190 190 RR DEDICATE 0B1 078 DEDICATE 0B2 079 DEDICATE 0B3 07A * USER ECMODE ECMODE 512K 1M G ACCOUNT ACT7 ECMODE OPTION ECMODE REALTIMER CONSOLE 009 3215 SPOOL 00C 2540 READER A SPOOL 00D 2540 PUNCH P SPOOL 00E 1403 L MDISK 191 3330 024 005 CPR6L0 WR READ WRITE LINK MAINT 194 194 RR LINK MAINT 190 190 RR * USER OPERATNS OPERATNS 512K 1M BCEG ACCOUNT ACT8 OPERATNS CONSOLE 009 3215 SPOOL 00C 2540 READER A SPOOL 00D 2540 PUNCH P SPOOL 00E 1403 L LINK MAINT 190 190 RR **************** * * THE FOLLOWING MINIDISK ENTRY IS PROVIDED AS AN EXAMPLE OF * THE SPACE RECOMMENDED FOR AN IPCS VIRTUAL MACHINE. * IF YOU INTEND TO USE THE OPERATNS USERID AS YOUR IPCS * VIRTUAL MACHINE, YOU SHOULD CHANGE THE FOLLOWING STATEMENT * TO ALLOCATE MINIDISK SPACE ON ONE OF YOUR SYSTEM DASD VOLUMES. * * MDISK 191 3330 XXX 015 YYYYYY WR READ WRITE * **************** * * * CYLINDERS 142 TO 403 ARE UNUSED AND MAY BE USED FOR * ANY OTHER VIRTUAL MINI DISK SPACE. IT CAN ALSO BE * USED FOR PAGING, SPOOLING OR T-DSK SPACE. * * * :READ DMKRIO ASSEMBLE DMKRIO CSECT ******** Device definitions: * ****** Teletype RDEVICE ADDRESS=008,DEVTYPE=3215 * ****** Card reader RDEVICE ADDRESS=00C,DEVTYPE=3505,CLASS=(R) * ****** Card punch RDEVICE ADDRESS=00D,DEVTYPE=3525,CLASS=(P) * ****** Printer RDEVICE ADDRESS=00E,DEVTYPE=1403,FEATURE=UNVCHSET,CLASS=(L) * ****** Terminals RDEVICE ADDRESS=(020,16),DEVTYPE=3277 * ****** DASDs: * **** System disks. RDEVICE ADDRESS=(130,2),DEVTYPE=3330,MODEL=11 * **** User disks. RDEVICE ADDRESS=(150,8),DEVTYPE=3330,MODEL=11 * ****** Tapes. RDEVICE ADDRESS=(180,16),DEVTYPE=3420,MODEL=8,FEATURE=DUALDENS * ******** Control unit definitions: * ****** Printer (I don"t know if this is requed): RCTLUNIT ADDRESS=000,CUTYPE=3811 * ****** Slow IO: RCTLUNIT ADDRESS=008,CUTYPE=2821 * ****** Terminals: RCTLUNIT ADDRESS=020,CUTYPE=3272,FEATURE=16-DEVICE * ****** System disks: RCTLUNIT ADDRESS=130,CUTYPE=3880,FEATURE=16-DEVICE * ****** User disks: RCTLUNIT ADDRESS=150,CUTYPE=3880,FEATURE=16-DEVICE * ****** Tapes: RCTLUNIT ADDRESS=180,CUTYPE=3803,FEATURE=16-DEVICE * ******** Channel definitions. RCHANNEL ADDRESS=0,CHTYPE=MULTIPLEXOR RCHANNEL ADDRESS=1,CHTYPE=BLKMPXR * RIOGEN CONS=008 END:READ DMKSYS ASSEMBLE SYS TITLE "DMKSYS FOR 3330 RELEASE 6" 00001000 DMKSYS CSECT 00002000 SYSOWN (VMREL6,TEMP) 00003000 SYSRES SYSVOL=VMREL6,SYSRES=131,SYSTYPE=3330, X00004000 SYSNUC=7,SYSWRM=10,SYSERR=11,SYSCKP=202 00005000 SYSMON AUTO=NO 00006000 SYSJRL 00007000 SYSCOR RMSIZE=16M,AP=NO 00008000 SYSOPR SYSOPER=OPERATOR,SYSDUMP=OPERATNS 00009000 SYSTIME ZONE=5,LOC=WEST,ID=EST 00010000 SYSLOCS 00011000 END 00012000:READ DMKSNT ASSEMBLE *. 00003000 * MODULE NAME - 00004000 * DMKSNT 00005000 * 00006000 * FUNCTION - 00007000 * 00008000 * THIS MODULE WILL BE ASSEMBLED BY THE INSTALLATION SYSTEM 00009000 * PROGRAMMER. IT WILL DESCRIBE THE THE SYSTEM TO BE SAVED VIA 00010000 * THE "SAVESYS" COMMAND AND TO BE IPL"ED BY NAME. SHARED SEG- 00011000 * MENTS MAY BE SPECIFIED. THESE SEGMENTS MUST CONSIST OF 00012000 * ALL REENTRANT CODE. 00013000 * 00014000 * 00015000 * INPUT TO THE NAMESYS MACRO IS SPECIFIED IN THE FOLLOWING 00016000 * FORMAT: 00017000 * 00018000 * LABEL NAMESYS SYSSIZE=NNNK,SYSNAME=CCCCCC,VSYSRES=CCCCCC, 00019000 * VSYSADR=XXX,SYSVOL=CCCCCC,SYSCYL=NNN, 00020000 * SYSSTRT=(CC,P),SYSPGCT=NN, 00021000 * SYSPGNM=(NN,NN,NN-NN,......), 00022000 * SYSHRSG=(N,N,...) 00023000 * 00024000 * WHERE: 00025000 * 00026000 * SYSSIZE - THIS IS THE MINUMUM STORAGE SIZE NEEDED TO 00027000 * OPERATE THE SAVED SYSTEM. 00028000 * SYSNAME - IS THE NAME GIVEN THE SYSTEM TO BE USED FOR 00029000 * IDENTIFICATION BY "SAVESYS" AND "IPL". 00030000 * VSYSRES - IS THE VOLUME SERIAL OF THE DASD CONTAINING THE 00031000 * SYSTEM TO BE SAVED 00032000 * VSYSADR - IS THE VIRTUAL ADDRESS OF THE DASD CONTAINING 00033000 * THE SYSTEM. 00034000 * SYSCYL - THE CYLINDER ADDRESS OF THE "MINI-DISK" 00035000 * FOR THE SYSTEM TO BE SAVED. 00036000 * SYSVOL - IS THE VOLUME SERIAL OF THE DASD DESIGNATED TO 00037000 * RECEIVE THE SAVED SYSTEM. THIS MUST BE A 00038000 * "CP-OWNED" VOLUME. 00039000 * SYSSTRT - THIS DESIGNATES THE STARTING CYLINDER AND PAGE 00040000 * ADDRESS ON "SYSVOL" THAT THIS NAMED SYSTEM IS TO 00041000 * BE SAVED. DURING THE SAVESYS AND IPL PROCESSING, 00042000 * THIS WILL BE USED TO MAKE UP THE "CCPD" ADDRESS 00043000 * FOR THE DASD OPERATIONS. THESE NUMBERS ARE TO 00044000 * SPECIFIED IN DECIMAL. 00045000 * SYSPGCT - IS THE TOTAL NUMBER OF PAGES TO BE SAVED. 00046000 * SYSPGNM - THESE ARE THE NUMBERS OF THE PAGES TO BE SAVED. 00047000 * SPECIFICATION MAY BE DONE AS GROUPS OF PAGES OR 00048000 * AS SINGLE PAGES. FOR EXAMPLE - IF PAGES 0,4, AND 00049000 * 10 THRU 13 ARE TO BE SAVED, USE THE FORMAT: 00050000 * SYSPGNM=(0,4,10-13). 00051000 * SYSHRSG - THESE ARE THE SEGMENT NUMBERS DESIGNATED AS 00052000 * SHARED. THE PAGES IN THESE SEGMENTS WILL BE SET 00053000 * UP AT IPL TIME TO BE USED BE ANY USER 00054000 * IPL"ING BY THIS NAME. 00055000 * 00056000 * THE FOLLOWING IS A SAMPLE OF INPUT FOR THIS MODULE: 00057000 * 00058000 * DMKSNTBL CSECT 00059000 * FSTNAME NAMESYS SYSSIZE=256K,SYSNAME=CMS,VSYSRES=CPDSK1, 00060000 * SYSVADR=190,SYSCYL=100,SYSVOL=CPDSK2, 00061000 * SYSSTRT=(400,1),SYSPGCT=10, 00062000 * SYSPGNM=(0-5,10-13),SYSHRSG=(1,2) 00063000 * 00064000 * ATTRIBUTES - 00065000 * 00066000 * PAGEABLE 00067000 * 00068000 * ENTRY POINTS - 00069000 * 00070000 * DMKSNTBL 00071000 * 00072000 * NOTES - 00073000 * 00074000 * THERE IS NO EXECUTABLE CODE IN THIS MODULE. 00075000 * 00076000 * 00077000 *. 00078000 EJECT 00079000 * 00080000 *********************************************************************** 00081000 * 00082000 * THE FOLLOWING ENTRIES ARE BASED ON THE INFORMATION INCLUDED 00083000 * IN THE SAMPLE DMKSYS PROVIDED WITH THE STARTER SYSTEM, 00084000 * AND THE SAMPLE ALLOCATIONS PROVIDED IN THE SYSTEM 00085000 * GENERATION PROCEDURE. 00086000 * 00087000 *********************************************************************** 00088000 * 00089000 SPACE 00090000 DMKSNTBL CSECT 00091000 SPACE 00092000 * 00093000 * THE SPACE FOR CMS IS ALLOCATED ON VMREL6, AS FOLLOWS: 00094000 * CYL 1, PAGE 01 TO CYL 1, PAGE 34 (34 PAGES) 00095000 * TOTAL = 34 PAGES 00096000 * 00097000 CMS NAMESYS SYSSIZE=256K,SYSNAME=CMS, X00098000 VSYSADR=190,SYSVOL=VMREL6,SYSCYL=030,SYSSTRT=(001,1), X00099000 SYSPGCT=33,SYSPGNM=(0-32),SYSHRSG=(1),VSYSRES=CPR6L0 00100000 EJECT 00101000 * 00102000 * THE SPACE FOR CMSSEG IS ALLOCATED ON VMREL6, AS FOLLOWS: 00103000 * CYL 1, PAGE 35 TO CYL 1, PAGE 51 (17 PAGES) 00104000 * TOTAL = 17 PAGES 00105000 * 00106000 CMSSEG NAMESYS SYSNAME=CMSSEG,SYSVOL=VMREL6,SYSCYL=, X00107000 SYSSTRT=(001,35),SYSPGCT=16,SYSHRSG=(16), X00108000 SYSPGNM=(256-271),SYSSIZE=64K,VSYSRES=,VSYSADR=IGNORE 00109000 EJECT 00110000 * 00111000 * THE SPACE FOR CMSVSAM IS ALLOCATED ON VMREL6, AS FOLLOWS: 00112000 * CYL 1, PAGE 52 TO CYL 1, PAGE 57 (6 PAGES) 00113000 * CYL 2, PAGE 01 TO CYL 2, PAGE 57 (57 PAGES) 00114000 * CYL 3, PAGE 01 TO CYL 3, PAGE 34 (34 PAGES) 00115000 * TOTAL = 97 PAGES 00116000 * 00117000 CMSVSAM NAMESYS SYSNAME=CMSVSAM,SYSVOL=VMREL6,SYSPGNM=(272-367), X00118000 SYSSTRT=(001,52),SYSPGCT=96,SYSSIZE=384K,SYSCYL=, X00119000 SYSHRSG=(17,18,19,20,21),VSYSRES=,VSYSADR=IGNORE 00120000 EJECT 00121000 * 00122000 * THE SPACE FOR CMSAMS IS ALLOCATED ON VMREL6, AS FOLLOWS: 00123000 * CYL 3, PAGE 35 TO CYL 3, PAGE 57 (23 PAGES) 00124000 * CYL 4, PAGE 01 TO CYL 4, PAGE 57 (57 PAGES) 00125000 * CYL 5, PAGE 01 TO CYL 5, PAGE 49 (49 PAGES) 00126000 * TOTAL = 129 PAGES 00127000 * 00128000 CMSAMS NAMESYS SYSNAME=CMSAMS,SYSVOL=VMREL6,SYSPGNM=(368-495), X00129000 SYSSTRT=(003,35),SYSPGCT=128,SYSSIZE=448K,SYSCYL=, X00130000 SYSHRSG=(23,24,25,26,27,28),VSYSRES=,VSYSADR=IGNORE 00131000 EJECT 00132000 * 00133000 * THE SPACE FOR CMSDOS IS ALLOCATED ON VMREL6, AS FOLLOWS: 00134000 * CYL 5, PAGE 50 TO CYL 5, PAGE 57 (8 PAGES) 00135000 * CYL 6, PAGE 01 TO CYL 6, PAGE 01 (1 PAGE) 00136000 * TOTAL = 9 PAGES 00137000 * 00138000 CMSDOS NAMESYS SYSNAME=CMSDOS,SYSVOL=VMREL6,SYSHRSG=(31), X00139000 SYSSTRT=(005,050),SYSPGCT=8,SYSSIZE=32K,SYSCYL=, X00140000 SYSPGNM=(496-503),VSYSRES=,VSYSADR=IGNORE 00141000 EJECT 00142000 * 00143000 * THE SPACE FOR INSTVSAM IS ALLOCATED ON VMREL6, AS FOLLOWS: 00144000 * CYL 6, PAGE 02 TO CYL 6, PAGE 10 (9 PAGES) 00145000 * TOTAL = 9 PAGES 00146000 * 00147000 INSTVSAM NAMESYS SYSNAME=INSTVSAM,SYSVOL=VMREL6,SYSHRSG=(254), X00148000 SYSSTRT=(006,002),SYSPGCT=8,SYSSIZE=32K,SYSCYL=, X00149000 SYSPGNM=(4064-4071),VSYSRES=,VSYSADR=IGNORE 00150000 * 00151000 EJECT 00152000 * 00153000 * THE SPACE FOR 3800 PRINTER IMAGES ON VMREL6 IS ALLOCATED: 00154000 * CYL 6, PAGE 11 TO CYL 6, PAGE 16 (6 PAGES) 00155000 * TOTAL = 6 PAGES 00156000 * 00157000 NAME3800 CPNAME=IMAG3800,SYSVOL=CPR6L0,SYSSTRT=(006,11), X00158000 SYSPGCT=5 00159000 EJECT 00160000 * 00161000 * THE FOLLOWING SPACE IS AVAILABLE FOR SAVED SYSTEMS ON VMREL6: 00162000 * CYL 6, PAGE 17 TO CYL 6, PAGE 57 (41 PAGES) 00163000 * TOTAL = 47 PAGES 00164000 * 00165000 END 00166000


Копируем весь этот текст в файл sysconf.txt.

Сборка ядра

Вводим в консоли Геркулеса: «devinit 00c sysconf.txt ascii eof».
И на дисплее: «generate vm370»
GENERATE спросит имя файла с каталогом (у меня это MYVM DIRECT). Затем откомпилируются файлы с настройками и GENERATE спросит собирамемся ли мы использовать многопроцессорную систему или опцию V=R. Отвечаем no. Дальше будет много текста и (если вам повезет) в конце появится надпись: «NUCLEUS LOADED ON VMREL6».
Сохраните карту памяти ядра и выключите стартовую систему:
close ptr 15:06:30 IPL 190 PARM SEG=NULL 15:06:30 PRT FILE 0019 TO CPGEN COPY 01 NOHOLD RELEASE 6 CMS 12/25/78 access 194 a CMSSEG SYSTEM NAME "NULL " NOT AVAILABLE. R; T=0.01/0.01 15:06:36 read cpipcs map a RECORD LENGTH IS "132" BYTES. R; T=0.25/1.24 15:06:50 drain all 15:08:18 RDR 00C DRAINED SYSTEM 15:08:18 PUN 00D DRAINED SYSTEM CLASS = A SEP 15:08:18 PRT 00E DRAINED SYSTEM CLASS = A SEP R; T=0.01/0.02 15:08:18 shutdown DMKCKP960I SYSTEM WARM START DATA SAVED DMKCKP961W SYSTEM SHUTDOWN COMPLETE

Разбиение диска

Для того, чтобы использовать диск CPR6L0, его нужно переразметить. Загрузите FORMAT/ALLOCATE так же, как при копировании системы.
VM/370 FORMAT/ALLOCATE PROGRAM RELEASE 6 ENTER FORMAT OR ALLOCATE:ALLOCATE ALLOCATE FUNCTION SELECTED ENTER DEVICE ADDRESS (CCU):130 ENTER DEVICE TYPE:3330 ENTER DEVICE LABEL:CPR6L0 ENTER ALLOCATION DATA FOR VOLUME CPR6L0 TYPE CYL CYL .... ... ... DRCT 000 000 PERM 001 403 END ALLOCATION RESULTS DRCT 000 000 PERM 001 403 DEVICE 130 VOLUME CPR6L0 ALLOCATION ENDED
Остановите программу командой stop.

Запуск новой системы

Загрузитесь с системного диска командой IPL 131. В окне Геркулеса появится приглашение:
NOW 14:14:40 EST MONDAY 08/26/13 CHANGE TOD CLOCK (YES NO)
Сейчас вы работаете в встроенной консоли. С точки зрения VM/CMS это такая же консоль, как и подключение через телнет. Для того, чтобы ввести текст во встроенную консоль, введите его в консоль Геркулеса через косую черту ("/"):
CHANGE TOD CLOCK (YES NO) : /(0008) no 14:17:49 START ((COLD WARM CKPT FORCE) (DRAIN)) (SHUTDOWN) : /(0008) cold 14:17:51 AUTO LOGON *** OPERATOR USERS = 001 BY SYSTEM DMKCPI957I STOR 16384K, NUC 224K, DYN 14900K, TRA 240K, FREE 1020K, V=R 00000K 14:17:51 FILES: NO RDR, NO PRT, NO PUN 14:17:51 FORMATTING ERROR RECORDING AREA
Форматирование минидисков
Тут все просто:
/(0008) ipl 190 parm seg=null 14:22:39 RELEASE 6 CMS 12/25/78 V /(0008) access (nodisk CMSSEG SYSTEM NAME "NULL " NOT AVAILABLE. DISK "A" NOT ACCESSED. DISK "A" NOT ACCESSED. R; T=0.01/0.01 14:22:49 /(0008) format 191 a DMSFOR603R FORMAT WILL ERASE ALL FILES ON DISK "A(191)". DO YOU WISH TO CONTINUE? (YES NO): /(0008) yes DMSFOR605R ENTER DISK LABEL: /(0008) OPR191 FORMATTING DISK "A". HHCCP048I 0130:CCW=07F06608 40100006=>00000FFF 00000000 00000000 000F8918 ..............i. HHCCP075I 0130:Stat=0E00 Count=0000 HHCCP076I 0130:Sense=80000000 380C1204 00000000 00000000 00000000 00000000 HHCCP077I 0130:Sense=CMDREJ "5" CYLINDERS FORMATTED ON "A(191)". R; T=0.01/0.11 14:23:13 /(0008) logoff 14:23:34 CONNECT= 00:05:42 VIRTCPU= 000:00.06 TOTCPU= 000:00.39 14:23:34 LOGOFF AT 14:23:34 EST MONDAY 08/26/13 VM/370 ONLINE /(0008) logon maint ENTER PASSWORD: XXXXXXXX /(0008) cpcms LOGON AT 14:23:45 EST MONDAY 08/26/13 /(0008) define storage 2m STORAGE = 02048K /(0008) ipl 190 parm seg=null RELEASE 6 CMS 12/25/78 /(0008) access (nodisk CMSSEG SYSTEM NAME "NULL " NOT AVAILABLE. DISK "A" NOT ACCESSED. DISK "A" NOT ACCESSED. R; T=0.01/0.01 14:25:26 /(0008) format 191 a DMSFOR603R FORMAT WILL ERASE ALL FILES ON DISK "A(191)". DO YOU WISH TO CONTINUE? (YES NO): /(0008) yes DMSFOR605R ENTER DISK LABEL: /(0008) MNT191 FORMATTING DISK "A". HHCCP048I 0130:CCW=07F07BB0 40100006=>00000FFF 00000000 00FFF280 000F6F38 ..........2...?. HHCCP075I 0130:Stat=0E00 Count=0000 HHCCP076I 0130:Sense=80000000 38171204 00000000 00000000 00000000 00000000 HHCCP077I 0130:Sense=CMDREJ "7" CYLINDERS FORMATTED ON "A(191)". R; T=0.02/0.26 14:26:30 /(0008) logout CONNECT= 00:02:49 VIRTCPU= 000:00.07 TOTCPU= 000:00.52 LOGOFF AT 14:26:35 EST MONDAY 08/26/13 VM/370 ONLINE /(0008) logon operator ENTER PASSWORD: XXXXXXXX /(0008) operator 14:28:10 LOGON AT 14:28:10 EST MONDAY 08/26/13 14:28:10 LINE 008 LOGON AS OPERATOR USERS = 002 /enable all ===Много сообщений о неподключенных устройствах===
Установка обновлений
Залогинтесь под пользователем MAINT через дисплей:
LOGON MAINT ENTER PASSWORD: DASD 190 LINKED R/W; R/O BY OPERATOR DASD 194 LINKED R/W; R/O BY OPERATOR LOGON AT 14:30:29 EST MONDAY 08/26/13 CP IPL 190 PARM SEG=NULL RELEASE 6 CMS 12/25/78 CMSSEG SYSTEM NAME "NULL " NOT AVAILABLE. R; T=0.01/0.01 14:30:54
Пароль - CPCMS.
Подключите ленту с обновлениями к машине MAINT (через консоль Геркулеса):
devinit 180 ./DISTR/ptf-616.aws HHCTA101I 0180: AWS Tape ./DISTR/starter-3330.aws closed HHCTA004I 0180: ./DISTR/ptf-616.aws is a AWS Format tape file HHCPN098I Device 0:0180 initialized /(0008) attach 180 to maint as 181 14:32:43 14:32:43 TAPE 180 ATTACH TO MAINT 181

Теперь в консоли администратора:
vmfplc2 rew R; T=0.01/0.01 14:33:26vmfplc2 load LOADING..... 5749010 061638 A1 VMSERV EXEC A1 5749010 EXEC A1 VMFPLC2 MODULE A2 END-OF-FILE OR END-OF-TAPE R; T=0.02/0.10 14:33:33 access 191 c "191 A " RELEASED R; T=0.01/0.01 14:34:16 vmserv restart 5749010 cp nomemo
Дальше будет много вопросов. Лично я отвечаю наугад - в результате, как и следовало ожидать, ошибка. Но это не критично.

Сохраняем CMS

В CP есть механизм, похожий на динамические библиотеки - Named Systems. Одно из частых его использований - ускорение работы с CMS. Для того чтобы сохранить CMS как именованную систему, нужно выполнить следующие команды:
define storage 2m STORAGE = 02048K CP ENTERED; DISABLED WAIT PSW "00020000 00000000" IPL 190 PARM SEG=NULL RELEASE 6 CMS 12/25/78 CMSSEG SYSTEM NAME "NULL µ" NOT AVAILABLE. R; T=0.01/0.01 14:42:14 access 190 B/A B (190) R/O 190 ALSO = S-DISK cmsxgen 100000 SYSTEM SAVED CMSXGEN COMPLETE define storage 960k STORAGE = 00960K CP ENTERED; DISABLED WAIT PSW "00020000 00000000" IPL 190 RELEASE 6 CMS 12/25/78 savesys cms SYSTEM SAVED RELEASE 6 CMS 12/25/78

Поздравляю, теперь у вас есть своя CP/CMS система. Чтобы выключить ее, введите в консоли оператора команду shutdown. Когда будете запускать ее снова, выберите warm start.
PS: Вообще-то, еще много что можно рассказать. Но и так уже простыня получилась.
Удачных вам IPL-ов!

PS: кто попробовал установить и не лень отписаться - отпишитесь, пожалуйста.

Проект моделирования истории компьютеров и SIMH

Я получил свой первый компьютер в конце 1978 года в качестве подарка на день рождения. Это был TRS-80 модели 1 с 4 Кбайт памяти и кассетным накопителем, который я позже заменил на флоппи-дисковод Exatron. За несколько недель мои навыки программирования на BASIC углубились настолько, что я превысил объем доступной памяти в своей еще не скомпилированной программе. Знай я тогда столько же, сколько знаю 30 лет спустя, будучи инженером по микропрограммному обеспечению, я все равно тратил бы большую часть времени на то, чтобы втиснуть как можно больше кода и данных в меньшее адресное пространство.

История вычислительной техники завораживает, как и некоторые из ранних моделей компьютеров. Многие из первых машин были простыми калькуляторами, такие как Z1, построенная Конрадом Цузе в 1931 году, а еще раньше ― механическая сортировочная машина Германа Холлерита, которая использовалась в переписи населения 1890 года; шесть лет спустя компания Холлерита стала одной из составляющих IBM. Цузе изобрел также первый алгоритмический язык программирования Plankalkül для своего компьютера Z4. Z4 был электромеханическим (на основе реле), поддерживал 64 слова памяти и работал с умопомрачительной скоростью 40 Гц (при потребляемой мощности 4 КВт). Профессор Джон Атанасов разработал первый цифровой компьютер, который начал строить в 1937 году и закончил в 1941 году ― он использовал двоичную систему счисления для расчетов в Колледже штата Айова. Идеи, положенные в основу компьютера Атанасова-Берри (ABC), были применены в первой ЭВМ общего назначения ENIAC. Программирование этих систем было бы чуждо большинству из нас, выросших с Pascal, C или LISP. Например, при программировании первого ENIAC, чтобы внести изменения в программу, требовалось физически переписать ее. Википедия содержит увлекательную информацию об эволюции компьютеров (см. раздел).

Проект моделирования истории ВТ

Как и мой старый TRS-80, который безжизненно покоится в заппыленной коробке, история вычислительной техники может легко уйти в небытие. К счастью, есть люди, такие как Боб Супник, которые тратят время и энергию на спасение наиболее важных моментов истории вычислительной техники. Супник создал Проект моделирования истории компьютера, чтобы восстановить значимые вычислительные системы с помощью моделирования. Проект Супника, в котором участвуют энтузиасты со всего мира, привел к созданию многосистемной структуры, называемой SIMH , имитирующей большое количество вычислительных систем. В их числе Nova от Data General, PDP и VAX от DEC, IBM 1401 и 7090/7094, системы Interdata и даже компьютеры Altair компании MITS (на процессорах 8080 и Z80). Другие моделируемые системы перечислены по ссылке, приведенной в разделе .

Архитектура SIMH

Давайте сначала рассмотрим общую архитектуру SIMH, а затем познакомимся с некоторыми примерами применения SIMH для загрузки моделируемого старого оборудования.

Архитектура SIMH

Описание SIMH можно найти в документе "Написание имитатора для системы SIMH". В нем представлены основные функции SIMH и характеристики различных машин, моделируемых системой (см. раздел ).

SIMH ― это среда, в которую встраиваются эмуляторы систем. Исследуя иерархию дерева исходного кода SIMH, вы найдете набор общих файлов имитатора с рядом подкаталогов, содержащих модели машин (или классов машин). Как показано на рисунке 1, имитатор состоит из пакета управления имитатором (содержащего такие элементы, как консоль имитатора, терминал и библиотеки файлов ввода/вывода, а также таймеры и сокеты) и набора устройств. Дух устройства ― это набор регистров для хранения состояния устройства (когда оно включено) и блоки, отображающие наборы данных (обычно, файлов, которые используются для представления устройства). Могут присутствовать не все устройства, например, сетевое оборудование не моделируется.

Рисунок 1. Базовая архитектура SIMH

Когда на имитаторе запускается виртуальная машина, пакет управления имитатором в первую очередь определяет особенности среды (массив устройств, программа двоичного загрузчика, имитатор набора команд и т.п.). Как вы скоро увидите, после запуска имитатора с ним можно взаимодействовать для загрузки виртуальной машины (или для упрощения процедуры разместить эту программу взаимодействия в файле). По существу, имитатор ― это отладчик, который позволяет устанавливать контрольные точки и работать с устройствами, процессором и памятью. Код легко читаем и не так велик, как можно было бы ожидать, учитывая количество функциональных возможностей, предоставляемых SIMH.

Настройка SIMH

Давайте посмотрим, каким образом SIMH возвращает нас к заре компьютерной эры. В этом разделе сначала объясняется, как установить и собрать SIMH, а затем рассматриваются пакеты программ.

Установка SIMH

Следующий сеанс иллюстрирует, как загрузить и построить SIMH. Он демонстрирует версию SIMH 38.1, и на сайте нужно проверить, не появилась ли новая версия пакета. Как отмечается в листинге 1, прежде чем составить пакет, мне пришлось создать подкаталог./BIN.

Листинг 1. Установка и сборка SIMH
$ mkdir simh ; cd simh $ wget http://simh.trailing-edge.com/sources/simhv38-1.zip $ unzip simhv38-1.zip $ mkdir BIN $ make -f makefile

Выполнив шаги, перечисленные в листинге 1, вы получаете набор двоичных файлов в подкаталоге./BIN, которые соответствуют отдельным имитаторам (например, ibm1130 и vax780).

Комплекты программного обеспечения

На предыдущем шаге мы построили имитатор SIMH. Однако чтобы он был полезен, необходимо программное обеспечение (операционные системы и приложения) для этого имитатора. Эти системы работали с перфолентами и магнитными лентами, но для простоты использования программное обеспечение, содержавшееся на этих носителях, было переупаковано в файлы. В рамках этих демонстраций мы расскажем о необходимых комплектах программного обеспечения и покажем, где их можно взять.

Навигация по имитатору

Запустив имитатор (по имени моделируемой машины, например, altairz80), вы увидите командную строку sim> . Это приглашение говорит о том, что вы находитесь в основном имитаторе, который нужно настроить на моделируемый объект. В этой статье рассматриваются лишь некоторые из многочисленных исполняемых команд. Чтобы увидеть обширный список, можно воспользоваться командой help . Важно также отметить, что во время эмуляции одной из поддерживаемых машин можно воспользоваться клавишей Ctrl-E, чтобы вернуться в имитатор. Здесь можно устанавливать контрольные точки, изучить регистры, посматривать очередь событий имитатора и т.п.

Использование SIMH

Теперь, имея общее представление о SIMH, можно поговорить о его применении с различными компьютерными системами. Мы рассмотрим работу LISP на системе IBM 1130, UNIX® на 32-разрядной системе Interdata, CPM на машине Altair от MITS и Focal на PDP-15.

IBM 1130

Система IBM 1130 была популярным компьютером на рынке не очень дорогих систем. Она опиралась на перфокарты и перфоленту, но также использовала дисковую память (общей емкостью 1 МБ). На диске хранились операционная система и данные.

Система 1130 появилась в 1965 году, когда основным языком программирования был Фортран (компилятор которого, написанный целиком на языке ассемблера, занимал всего 4000 слов в памяти). Система работала с адресным пространством на базе 15-разрядных слов, что ограничивало емкость оперативной памяти машины 64 Кбайт.

Один из интересных аспектов системы IBM 1130 заключался в поддержке альтернативных языков. Кроме Фортрана, 1130 можно было программировать на APL и RPG. Гай Стил, имевший доступ к 1130 в Латинской (средней) школе Бостона, написал интерпретатор LISP, который можно использовать и сегодня. Начнем с получения загрузки интерпретатора LISP с сайта, посвященного системе 1130 ibm1130.org (см. листинг 2). Заметьте, я предполагаю, что вы находитесь в подкаталоге./SIMH, где установлен SIMH.

Листинг 2. Установка ПО интерпретатора LISP
$ mkdir kits/ibm1130 ; cd kits/ibm1130 $ wget http://media.ibm1130.org/lisp.zip $ unzip lisp.zip

Это эмуляция скрывает многие детали работы с SIMH, но служит интересным историческим экскурсом в одну из областей применения 1130. Это пакетная обработка данных, когда имитатору ставится задача, а результат распечатывается в файле листинга. Задача ― очень простой пример использования интерпретатора LISP (результат можно видеть на выходе). Сеанс пакетной обработки приведен в листинге 3.

Листинг 3. Использование интерпретатора LISP с имитатором IBM 1130
$ ../../BIN/ibm1130 job lisptest IBM 1130 simulator V3.8-1 PRT: creating new file Loaded DMS V2M12 cold start card Wait, IAR: 0000002A (4c80 BSC I ,0028) sim> quit Goodbye $ more lisptest.lst PAGE 1 // JOB 1234 LOG DRIVE CART SPEC CART AVAIL PHY DRIVE 0000 1234 1234 0000 V2 M12 ACTUAL 32K CONFIG 32K ^L PAGE 1 // JOB LOG DRIVE CART SPEC CART AVAIL PHY DRIVE 0000 1234 1234 0000 V2 M12 ACTUAL 32K CONFIG 32K // XEQ LISP ***** 1130 LISP 1.6 ***** BOSTON LATIN SCHOOL ***** LITHP ITH LITHTENING... (SETQQ A (X Y Z)) (X Y Z) (CAR A) X (CDR A) (Y Z) (PLUS 1 2 3) 6 (QUIT) ***** 1130 LISP 1.6 ***** END OF RUN ***** THO LONG, COME AGAIN THOON $

Что дальше

В ретро-компьютерах есть что-то поистине захватывающее. Все, что мы имеем сегодня, произошло от старших поколений вычислительных систем, многие из которых уже не функционируют. Проект SIMH возвращает к жизни это оборудование (а также операционные системы и приложения), чтобы сделать их доступными для молодого поколения.