IBM 1130 - IBM 1130

IBM 1130
IBM 1130 (1) .jpg
Разработчик IBM Boca Raton
Производитель IBM
Тип миникомпьютер
Дата выхода 1965 г. ( 1965 )
Начальная цена ~ 1000 долларов США в месяц, что эквивалентно 8 200 долларов США в 2020 году.
Снято с производства начало 1980-х
Отгружено единиц 10 000 оц.
Операционная система Дисковый монитор 2 (DM2)
Процессор 16-битное, адресное слово, 15-битное адресное пространство
объем памяти магнитный сердечник
Место хранения Дисковод IBM 2310
Съемное хранилище Однодисковый картридж IBM 2515
Отображать Плоттер IBM 1627 Calcomp, IBM 2250 , дополнительно
Вход перфокарта , бумажная лента , консоль
Связь Адаптер синхронной связи IBM (SCA)
Габаритные размеры размер стола: ширина 58,5 дюйма, глубина 29 дюймов, высота 44,125 дюйма
Масса 660 фунтов
Маркетинговая цель небольшие инженерные компании, школы
Обратная
совместимость
через Фортран
Предшественник IBM 1620 , IBM 650
Преемник IBM серии / 1
IBM System / 7
Статьи по Теме Система управления процессами IBM 1800
Веб-сайт ibm1130 .org

IBM 1130 Computing System, введенный в 1965 году, был IBM наименее дорогой «s компьютер в то время. Бинарная 16-битная машина была продана на чувствительные к цене, требовательные к вычислениям технические рынки, такие как образование и инженерия, после десятичной системы IBM 1620 в этом сегменте рынка. Типичные установки включали диск объемом 1 мегабайт, на котором хранилась операционная система, компиляторы и объектные программы, а исходный код программы создавался и поддерживался на перфокартах . Фортран был наиболее распространенным языком программирования, но было доступно несколько других, включая APL .

Консоль IBM 1130

1130 также использовался как интеллектуальный интерфейс для подключения графического дисплея IBM 2250 или как рабочая станция удаленного ввода заданий (RJE), подключенная к мэйнфрейму System / 360 .

IBM 1130 с периферийными устройствами, включая перфорацию для считывания бумажной ленты, устройство для чтения / перфорации карт IBM 1442 (сзади) и плоттер IBM 1627 Calcomp.

Описание

Плата SLT двойной ширины от IBM 1130. Квадратные металлические банки содержат гибридные схемы.

Общий объем производства 1130 оценивается в 10 000 экземпляров. 1130 занимает свое место в истории вычислительной техники, потому что он (и его клоны сторонних производителей) дал многим людям первое прямое взаимодействие с компьютером. Его соотношение цены и качества было хорошим, и он, в частности, включал недорогой съемный диск с надежным, простым в использовании программным обеспечением, которое могло быть на нескольких языках высокого уровня. Низкая цена (от около $ 32000 или $ 41000 с диском) и хорошо сбалансированным набором функций включена интерактивным «открыт магазином» программа развития .

В IBM 1130 используется та же упаковка электроники, которая называется Solid Logic Technology (SLT), что и в System / 360 . Он имеет 16-битную двоичную архитектуру, как и более поздние миникомпьютеры, такие как PDP-11 и Data General Nova .

Адресное пространство составляет 15 бит, ограничивая 1130 до 32768 16-битовых слов ( 65536 байт ) памяти. В 1130 используется память с магнитным сердечником , к которой процессор обращается на границах слов, используя режимы прямой, косвенной и индексированной адресации.

Модели

IBM реализовала пять моделей центрального процессора 1131, основного компонента обработки IBM 1130. Модели с 1 по 5 описывают время цикла основной памяти, а также способность модели иметь дисковое хранилище. Буквы от A до D, добавленные к номеру модели, обозначают объем установленной основной памяти.

Центральный процессор IBM 1131 весит около 760/1050 фунтов (345/477 кг).

  Время цикла памяти
Основная память 3,6 мкс,
без внутреннего диска
3,6 мкс,
плюс диски
2,2 мкс,
плюс диски
5,6 мкс
(3,6 мкс: см. Ниже),
один диск
2,2 мкс,
без внутреннего диска
4096 слов Модель 1A Модель 2А  ———  Модель 4A  ——— 
8192 слова Модель 1B Модель 2B Модель 3B Модель 4B Модель 5B
16 384 слова Модель 1С Модель 2C Модель 3C  ———  Модель 5C
32 768 слов Модель 1D Модель 2D Модель 3D  ———  Модель 5D

Модель 4 была более дешевым продуктом с временем цикла 5,6 мкс. Некоторые покупатели обновлений производительности заметили, что регулировка в полевых условиях для достижения улучшения была на удивление тривиальной.

1132 IBM принтер основан на 1130 процессоре , а не внутренней логикой , чтобы определить , когда огонь печатающих колеса , как они повернуты. Принтеры для Model 4 работают медленнее, но более медленный процессор все равно не успевает за ним. В руководстве по аппаратному обеспечению раскрывается, что, когда Модель 4 обслуживала два прерывания самого высокого уровня ( прерывание столбца устройства чтения карт уровня 0 или прерывание принтера уровня 1), он работал с более коротким временем цикла 3,6 мкс. Некоторые пользователи Model 4 напишут фальшивый драйвер принтера, который не отключает прерывание принтера, чтобы извлечь выгоду из более высокой скорости процессора. Однако в течение этого интервала прерывания нижнего уровня запрещены, даже прерывание конца карты (уровень 4) от устройства чтения карт 1442.

Последующие продукты

IBM 1800 , объявили ноября 1964 года, является предшественником IBM 1130 для управления технологическими процессами приложений. Он использует аппаратную, а не базовую память для трех индексных регистров и имеет две дополнительные инструкции (CMP и DCM), а также дополнительные возможности прерывания и ввода-вывода . Это преемник IBM 1710 , так как IBM 1130 является преемником IBM 1620 .

IBM 1500 представляет собой многопользовательский система образования основана на либо IBM 1130 или IBM 1800. Он может подключаться до 32 студенческих рабочих станций, каждая из которых с различными аудиовизуальными возможностями.

Кроме них, IBM не производила совместимых систем-преемников 1130. IBM System / 7 - это система управления технологическим процессом и система реального времени, а IBM Series / 1 - 16-битный миникомпьютер общего назначения, оба имеют архитектуры, отличные от 1130 и друг от друга.

Хронология

  • 11 февраля 1965 г. - IBM представляет 1130 (модели 1A, 1B, 2A и 2B). Также анонсирован принтер IBM 1132, самый дешевый онлайн-принтер для компьютеров, когда-либо объявленный IBM в то время.
  • Четвертый квартал 1965 г. - первые поставки клиентам начинаются с завода в Сан-Хосе.
  • 31 марта 1966 г. - IBM представляет образовательную систему IBM 1500.
  • Апрель 1966 г. - корабли IBM 1800.
  • 9 августа 1966 г. - IBM выпускает адаптер синхронной связи 1130, который позволяет подключать небольшую систему 1130 с помощью обычных арендованных телефонных линий к любой модели IBM System / 360 и работать в качестве терминала связи для любой модели IBM System / 360.
  • 17 апреля 1967 г. - объявляется о четырехстороннем расширении 1130 (модели 2C, 2D, 3B, 3C и 3D), включая:
    • В пять раз больше дисковой памяти и в четыре раза больше основной памяти;
    • Дополнительная скорость обработки данных почти на 40 процентов выше, чем было доступно ранее;
    • Все больше и больше периферийного оборудования, включая оптический считыватель меток;
    • Улучшенный коммерческий программный пакет.
  • Январь 1968 - Начало поставок 1130 моделей 2C, 2D, 3B, 3C и 3D.
  • Июль 1968 г. - завод в Бока-Ратон начинает поставки модели 1130.
  • 22 июля 1971 г. - 1130 Модели 4А и 4В представлены на новом уровне экономики.
  • Сентябрь 1971 г. - Начало поставок 1130 Model 4 первым покупателям.
  • 31 мая 1972 г. - анонсированы модели 1C, 1D, 5B, 5C и 5D.
  • 1973 - Xerox 530 был продан как возможный преемник клиентов IBM 1130. По состоянию на январь 1974 года заказы на Xerox 530 были сочтены "обнадеживающими".

Программное обеспечение

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

Большая часть пользовательского программирования выполняется на Фортране . Компилятор 1130 Fortran может работать на машине, имеющей всего 4096 слов ядра, хотя скомпилированная программа может не поместиться на такой машине. В этом многопроходном компиляторе каждая «фаза» обрабатывает всю исходную программу и делает еще один шаг к машинному коду. Например, первая фаза считывает исходные операторы в память, отбрасывает строки комментариев, удаляет пробелы, за исключением текстовых литералов, объединяет строки продолжения и идентифицирует метки. Компилятор доступен как в резидентной версии, так и на 8-канальной перфоленте или перфокартах.

Наиболее широко используемой операционной системой для 1130 является Disk Monitor System Version 2 (DM2), представленная в 1967 году. DM2 - это система, ориентированная на выполнение отдельных задач в пакетном режиме . Для размещения системы требуется система с объемом оперативной памяти не менее 4 КБ и одним встроенным дисковым накопителем 2310. Supervisor - крошечный по современным стандартам, содержащий различные системные детали, такие как процедуры прерывания первого уровня, называемые подпрограммами уровня прерывания , а также драйвер диска и процедуры для загрузки интерпретатора команд управления заданиями и драйвера устройства чтения карт. Драйверы устройств для других устройств ввода-вывода, требуемые заданием, включаются как часть загрузки этого задания, что также может включать замену базового драйвера диска более продвинутым драйвером. Во время выполнения задания в памяти находится только резидентный монитор , называемый Skeleton Supervisor . Этому супервизору требуется всего 1020 байт, поэтому первая доступная память задачи начинается с адреса / 01FE (шестнадцатеричный) или слова 510. Когда задание завершается или прерывается, супервизор загружает анализатор контрольной записи монитора ( MCRA ), чтобы прочитать контрольную запись задания для следующий. Пока задание выполняется, Супервизор неактивен. Помимо драйверов устройств и обработки прерываний, все процессорное время полностью посвящено работе. Другие программы, распространяемые как часть операционной системы, - это утилита дампа ядра , DUMP , и программа дисковой утилиты , DUP .

Система программирования карт / бумажных лент была доступна для поддержки систем без диска.

Существует иерархия драйверов устройств: драйверы с именами, заканчивающимися на Z, предназначены для Fortran, например DISKZ, в то время как программисты на ассемблере могут использовать DISK0, а DISK1 был даже быстрее при чтении нескольких секторов диска. Но DISKZ начинает адресацию своего сектора с первого доступного неиспользуемого сектора, в то время как остальные начинаются с нулевого сектора диска, что позволяет программисту, незнакомому с организацией диска, случайно перезаписать загрузчик начальной загрузки.

Другие языки программирования, доступные на 1130, включают:

Есть даже компилятор ALGOL , написанный на французском языке, так что " Debut ...Fin;" заменяет " Begin ... End;". Все сообщения на французском языке, так что цель - "Bonne compilation".

Университет Восточного Мичигана разработал компилятор Fortran IV для 1130, известный как Fortran-EMU, в качестве альтернативы компилятору Fortran IV (подмножество), предоставленному IBM. Он добавляет многие функции Fortran IV, не поддерживаемые компилятором IBM, включая тип данных LOGICAL, шестибуквенные имена переменных и расширенную диагностику. Компилятор Fortran-EMU распространялся в виде набора перфокарт в формате файла образа диска с удалением всей оставшейся системной области, чтобы предотвратить копирование других модулей, которые обычно находятся на том же диске, например ассемблера или компиляторов.

Государственный университет Оклахомы разработал компилятор ALGOL 68 , написанный на ANSI Fortran 1966.

FOCAL переводчик был разработан в Университете штата Мичиган.

IBM также распространила большую библиотеку программ, как поддерживаемых IBM (Типы I и II), так и неподдерживаемых (Типы III и IV).

Поскольку 1130 год был ориентирован в первую очередь на научный рынок, преобладали научные и инженерные программы:

  • Пакет научных подпрограмм
  • Подпрограммы Draw и Plot
  • Программа распределения нагрузки электроэнергетической системы
  • Множественная регрессия
  • Расчет аварийных токов системы распределения электроэнергии
  • Анализ труб
  • Координатная геометрия COGO
  • Непрерывное моделирование системы (CSMP)
  • Система подпрограмм математической оптимизации линейного программирования
  • Решатель систем проектирования конструкций (СТРЕСС)
  • Статистическая система

1130 также занял свою нишу в качестве машины обработки данных для небольших организаций:

  • Пакет коммерческих подпрограмм 1130
  • Информационная система для студентов
  • CPM / PERT

Также существует специализированное программное обеспечение:

  • Удаленный ввод вакансий (RJE)
  • Верстка

Контроль работы

Пакетная работа 1130 управляется контрольными записями в первичном входном потоке (устройство чтения карт или бумажных лент). Есть два типа контрольных записей: контрольные записи монитора и контрольные записи супервизора.

Контрольные записи мониторинга

Контрольные записи монитора обозначаются //␢следом за «кодом псевдооперации» в столбцах 4–7. «␢» представляет собой одиночный пробел.

1130 Контрольные записи монитора
Контрольная запись Функция
//␢* comments Предоставляет комментарий для печати в списке вакансий в столбцах с 5 по 80.
//␢JOB Определяет начало работы
//␢ASM Вызывает ассемблер
//␢FOR Вызывает компилятор FORTRAN
//␢PAUS Останавливает систему до тех пор, пока не будет нажата клавиша СТАРТ на консоли.
//␢TYP Переключение на консоль для управления вводом и выводом записи
//␢TEND Отменяет эффект //␢TYP
//␢DUP Вызывает программу Disk Utility
//␢XEQ Читает и передает управление основной программе

JOBЗапись может иметь «Т» в колонке 8 , чтобы указать , что файлы , добавленные в User Area этой работы должны быть удалены в конце. Столбцы с 11 по 15 могут содержать этикетку картриджа; система проверяет, установлен ли указанный картридж, прежде чем продолжить.

XEQЗапись может содержать имя программы , которая будет работать в столбцах с 8 по 12. Если это не указано, программа в настоящее время в оперативной памяти будет выполняться. Если столбец 14 содержит «L» и программа находится в формате дисковой системы (не в образе ядра), Core Load Builder распечатает карту ядра. Если за этим оператором следует LOCAL NOCALили FILESSupervisor Control Records, столбцы 16 и 17 содержат количество этих записей. В столбце 19 необязательно указывается, какая процедура драйвера диска должна быть связана. «0», «1» или «N», запрос DISK1, DISK2 или DISKN, любой другой символ, включая пробел, запрашивает DISKZ, дисковую процедуру FORTRAN.

Контрольные записи супервизора

Записи супервизора управления начинается с «*» в колонке 1, сразу после команды псевдо-операции в колонке 2. Они LOCAL, NOCALи FILESдля основного Load Builder. Контрольные записи DUP имеют аналогичный формат. Эти записи управляют связыванием программ либо для // XEQоператора , либо для команды DUP *STORECI.

Контрольные записи супервизора
Контрольная запись Описание
*LOCAL Предоставляет список подпрограмм, которые будут загружены как наложения во время выполнения, а не включены в основную программу.
*NOCAL Предоставляет список подпрограмм для связывания с основной программой, даже если они никогда не вызываются. Обычно это либо процедуры отладки, к которым оператор может вручную перейти с консоли, либо процедуры обслуживания прерывания.
*FILES Приравнивает идентификационные номера файлов из DEFINE FILEоператора FORTRAN или FILEоператора Assembler к именованным файлам на диске.

Порядок работы

Перфокарта, содержащая самозагружающуюся программу 1130, которая копирует колоду карт, помещенную после нее во входной лоток.

Неизменные воспоминания об IBM 1130, возможно, возникли из-за необходимости постоянного вмешательства человека. Обычно он выполнял «задания», указанные в колоде перфокарт . Человек-оператор загружал задания в устройство для чтения карт и разделял их обратно на задания для возврата, возможно, вместе с распечаткой, отправителю. Оператор также должен будет следить за 1130 на предмет обнаружения неисправности или остановки задания и вмешиваться, нажимая INT REQклавишу на клавиатуре, чтобы перейти к началу следующего задания.

Отметка начала работы была перфокартой, которая начиналась с // JOB. Любая карта, с которой начиналась, //была командой супервизору и не могла использоваться в качестве пользовательской программы или данных. Другие команды включены // DUPдля выполнения программы Disk Utility (для удаления файлов или добавления файла во временную область в коллекцию файлов) и // XEQдля выполнения именованной программы с диска. Если пользовательская программа попытается прочитать командную карту, стандартная процедура считывания карт будет сигнализировать об окончании ввода в программу и сохранить содержимое этой карты для Супервизора.

Начальная загрузка программы (IPL)

В отличие от IBM 360, где загрузочное устройство можно выбрать из системной консоли, IBM 1130 может быть «загружен» (IPL'd: начальная загрузка программы) только с внешнего устройства: устройства чтения карт или устройства чтения бумажных лент.

Процедура начальной загрузки считывает одну карту из устройства чтения карт. Загрузочная карта содержит двоичный код для чтения содержимого нулевого сектора дисковода, который, в свою очередь, обрабатывает прерывание «завершение операции» от дисковода и выполняет дополнительные чтения с диска, чтобы подготовить 1130 к первому заданию перфокарты. Весь процесс занимает около секунды.

Процедуры восстановления

Когда IBM 1130 запущен, супервизор все еще находится в памяти и, вероятно, не поврежден, поскольку основная память сохраняет свое состояние без питания. Если оператор приходит к выводу, что программа пользователя остановилась, супервизор может уловить нажатие клавиши, чтобы прервать выполнение программы и перейти к следующей // карте. Супервизор не защищен от модификации плохо написанным заданием, что может потребовать от оператора перезагрузки 1130. Также не было защиты от записи на диск. Если копия системного программного обеспечения на диске была изменена, ее можно восстановить, перезагрузив ее примерно с 4000 перфокарт с двоичным кодом (примерно две коробки).

Дисковая организация

Картридж для диска IBM 2315
2315 совместимый дисковый картридж (размеры 1 3/8 x 15 дюймов)

Дисковод IBM 2310 хранит сектора из 320 слов (640 байтов) плюс адрес сектора из одного слова. Цилиндр состоит из двух дорожек на верхней и нижней поверхностях 2315, или одной тарелке на упаковке 1316 диска , используемого в 2311. Каждый цилиндр диск содержит восемь секторов. Сектор логически делится монитором на шестнадцать дисковых блоков по 20 слов (40 байт) каждый. Дисковый блок - это единица размещения файлов.

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

Системная область присутствует на системных картриджах. Он содержит программу Disk Monitor и, необязательно, компилятор FORTRAN, Ассемблер и буфер основного образа, используемый для компоновки перемещаемых программ. Он также содержит каталоги файлов пользователя - Таблица эквивалентности фиксированного местоположения (FLET) и Таблица эквивалентности местоположения (LET),

После системной области картридж содержит до трех логических подразделений: фиксированную область , пользовательскую область и рабочую память . И в фиксированной, и в пользовательской области хранятся невременные программы и данные. Фиксированный размер области определяется DUP и хранит данные и программы только в формате основного изображения. Не перепаковывается при удалении файлов. В пользовательской области хранятся данные и программы в любом формате. Граница между пользовательской областью и рабочим хранилищем «плавает» - пользовательская область расширяется по мере добавления файлов и сжимается по мере ее переупаковки, чтобы освободить пространство из удаленных файлов. Если файл необходимо изменить, обычный процесс заключается в использовании // DUPкоманд для его удаления, которые перемещают все последующие файлы обратно, чтобы закрыть пробел, а затем присваивают это имя временному файлу в качестве новой версии файла. Таким образом, редко изменяемые файлы перемещаются к началу диска по мере добавления новых файлов или новых версий, а часто изменяемые файлы сохраняются в конце диска.

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

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

Из-за ограниченного дискового пространства исходные файлы программ обычно хранятся в виде колоды карточек. Пользователи с более высокими требованиями могут иметь собственный диск, содержащий операционную систему, но только свои файлы, и им придется заменить системный диск «пула» своим и перезапустить систему, когда их программы должны быть запущены. Система со вторым диском, который может быть полностью посвящен коду и данным одного пользователя, дает некоторое облегчение.

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

Дисковая утилита (DUP)

Программа Disk Utility (DUP) предоставляет команды для передачи программ, подпрограмм и данных. Он вызывается // DUPкартой управления заданием , за которой следуют одна или несколько карт управления:

Общие команды DUP
Командование Функция
*ХРАНИТЬ Сохраните программу в формате дисковой системы
(перемещаемый объект)
* STORECI Сохраните программу в формате Core Image
(полностью связанная и перемещенная)
* СОХРАНЕННЫЕ ДАННЫЕ Сохраните файл данных на диск
* STOREDATACI Перезагрузите программу дампа основного образа
* STOREMOD Заменить или создать файл на диске
*СВАЛКА Дамп файла данных с диска
* DUMPDATA Дамп произвольных секторов с диска
* ДЕМПЛЕТ Распечатайте таблицу эквивалентности расположения на диске (LET)
и таблицу эквивалентности фиксированного расположения (FLET), если существует фиксированная область.
*УДАЛЯТЬ Удалить программу или файл данных

Другие команды, в основном для использования системным администратором, определяют или расширяют фиксированную область, удаляют компилятор FORTRAN и / или ассемблер из системы и восстанавливают правильные адреса секторов в рабочем хранилище, если они были изменены.

Операнды должны быть помещены в фиксированные столбцы. Код исходного устройства помещается в столбцы 13 и 14, а устройство назначения - в столбцы 17 и 18. Эти коды устройств:

  • UA - Зона пользователя
  • FX - фиксированная область (без "экстентов" в соответствии с 360; только непрерывное пространство)
  • WS - рабочее хранилище
  • CD - перфокарта / основное устройство ввода (может быть PT : Paper Tape)
  • PR - Принтер

По желанию, имя программы может быть закодировано в столбцах с 21 по 25, а поле счетчика - в столбцах с 27 по 30. Интерпретация этих полей зависит от запрошенной функции DUP.

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

Следующая карта управления инструктирует DUP взять текущее содержимое рабочей памяти и переместить его в пользовательскую область, назвав ее PROGZ. DUP знает размер файла в рабочем хранилище. Размер пользовательской области будет увеличен на размер файла, а размер рабочего хранилища будет соответственно уменьшен.

Пример платы управления IBM 1130 DUP

Периферийные устройства

Кардридер / перфоратор IBM 1442
Барабанный плоттер IBM 1627 .

Дисковая память используется для хранения операционной системы, объектного кода и данных, но исходный код хранится на перфокартах.

Базовый 1130 поставлялся с приводом IBM 2310, приводимым в действие звуковой катушкой, названным «Ramkit», от подразделения IBM General Products в Сан-Хосе. Их однопластинные картриджи IBM 2315 размером с коробку для пиццы вмещают 512 000 слов или 1 024 000 байт (меньше 1,44 МБ для 3,5 -дюймовой HD-дискеты или даже для 5,25-дюймовой HD-дискеты 1,2 МБ).

В пишущей машинке консоли IBM 1053 используется механизм IBM Selectric , что означает, что можно изменить гарнитуру или набор символов, заменив полый элемент шрифта размером с мяч для гольфа. Для APL , мощного языка программирования, ориентированного на массивы и использующего специальную символьную нотацию, доступен специальный элемент типа . Ряд из 16 тумблеров на консольной пишущей машинке можно индивидуально протестировать из программ, например, используя специальный оператор Fortran . IF (SENSE SWITCH i)

Другие доступные периферийные устройства:

  • Принтеры - линейные принтеры IBM 1132 и IBM 1403
  • Перфорированные-карты - IBM 1442 для чтения карт / пуансон и IBM 2501 для чтения карт
  • Бумажная лента - перфоратор для бумажной ленты IBM 1055, устройство для чтения бумажной ленты IBM 1054 и устройство для чтения бумажной ленты IBM 1134
  • Диск - Дисковый накопитель IBM 2311
  • Магнитная лента. С 1968 года накопители на магнитной ленте IBM 2415 были доступны в виде RPQ .
  • Графика - Графический дисплей IBM 2250 .
  • Color Pen Plotter - ударный плоттер IBM 1627 .
  • Устройство чтения оптических меток - Устройство чтения страниц оптических меток IBM 1231
  • Связь - Адаптер синхронной связи (SCA). IBM 1130 MTCA для адаптера управления несколькими терминалами , анонсированный в 1970 году, позволял подключать до четырех терминалов 2741 к IBM 1130 для использования с APL.

Чтобы упростить конструкцию периферийных устройств, они полагаются на процессор. Устройство чтения карт не имеет буферов памяти, но вместо этого выдает ЦП прерывание нулевого уровня (наивысший приоритет) после чтения каждого отдельного столбца карты. Если ЦП не отвечает и сохраняет двенадцать битов данных до того, как другое такое прерывание указывает, что следующий столбец был прочитан, данные будут потеряны. Точно так же принтер 1132 полагается на программное обеспечение 1130. Когда буква, такая как, Aвходит в позицию, ЦП должен проанализировать буферизованную строку текста и собрать массив битов, который будет указывать на 1132, какие позиции печати должны быть напечатаны с A. Если ЦП не может ответить до того, как Aвращается из своего положения, скорость печати может сильно снизиться.

Другие периферийные устройства принимают текст в коде устройства, удобном для его оборудования. ЦП должен преобразовать его в код EBCDIC или из него, в котором ЦП обрабатывает текст.

Обзор набора инструкций

Инструкции имели краткий (одно слово) и длинный (два слова) форматы. Большинство инструкций по вычислениям, загрузке и сохранению ссылаются на один регистр (обычно ACC) и ячейку памяти. Ячейка памяти была идентифицирована в кратком формате 8-битным смещением со знаком либо от текущего адреса, либо от одного из индексных регистров; или в длинном формате - полным 15-битным адресом, который можно индексировать и указывать косвенное обращение. К памяти обращались в единицах слов.

1130 изначально поддерживал только двоичные данные с одинарной и двойной точностью (16 и 32 бита), хранящиеся в формате big-endian . Данные с плавающей запятой стандартной и повышенной точности (32 и 48 бит) и десятичные данные поддерживались с помощью подпрограмм.

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

Main Registers:
IAR = Instruction Address Register
ACC = Accumulator
EXT = Extension Register
XRx = Index Registers: x = 1,2,3
      Implemented as memory words 1,2,3, not as hardware registers.

Condition tests:
Z  Accumulator zero
-  Accumulator negative
+  Accumulator positive
E  Accumulator even
C  Carry indicator off
O  Overflow indicator off

1130 Instruction Set Mnemonics:
LD   = Load ACC                   STO  = Store ACC
LDD  = Load Double (ACC & EXT)    STD  = Store Double (ACC & EXT)
LDX  = Load Index                 STX  = Store Index
LDS  = Load Status                STS  = Store Status
A    = Add ACC                    AD   = Add Double
S    = Subtract ACC               SD   = Subtract Double
M    = Multiply                   D    = Divide
AND  = Boolean AND                OR   = Boolean OR
XOR  = Boolean Exclusive OR
SLA  = Shift Left ACC             SLT  = Shift Left ACC & EXT
SLCA = Shift Left and Count ACC   SLC  = Shift Left and Count ACC & EXT
SRA  = Shift Right ACC            SRT  = Shift Right ACC & EXT
RTE  = Rotate Right ACC & EXT
BSC  = Branch or Skip on Condition (Modifier dependent)
       i.e. BP BNP BN BNN BZ BNZ BC BO BOD
BOSC - Branch Out or Skip Conditionally (alternate for BSC with bit 9 set)
       Exits current interrupt level.
BSI  = Branch and Store IAR
MDX  = Modify Index and Skip (Increment IAR one if a sign change or becomes zero)
WAIT = Halt                       NOP  = No Operation (alternate for SLA 0)
XIO  = Execute I/O

1800 Additional Instruction Mnemonics:
CMP  = Compare ACC                DCM  = Double Compare ACC & EXT

Equivalent Mnemonics
The disk assembler introduced several mnemonics equivalent to existing
instructions intended to make the programmer's intent clearer:
SKP - Skip on condition, equivalent to a short BSC
B   - Branch unconditionally, equivalent to BSC with no conditions specified
BP  - Branch Accumulator Positive, equivalent to BSC specifying '+' condition
BNP - Branch Accumulator not Positive
BN  - Branch Accumulator Negative
BNN - Branch Accumulator not Negative
BZ  - Branch Accumulator Zero
BNZ - Branch Accumulator not Zero
BC  - Branch on Carry
BO  - Branch on Overflow
BOD - Branch Accumulator Odd
MDM - Modify Memory, equivalent to unindexed long-format MDX
XCH - Exchange Accumulator and Extension, equivalent to RTE 16

Short instruction format (one 16 bit word):
                       1
Bits    0...45678......5
        OP---FTTDisp----

OP    is Operation
F     is format 0 = Short
TT    is Tag
Disp  is Displacement

Long instruction format (two 16 bit words):
                       1               1
Bits    0...456789.....50..............5
        OP---FTTIMod----Address---------

OP    is Operation
F     is format 1 = Long
TT    is Tag
I     is Indirect bit
Mod   is Modifier

Effective Address Calculation (EA):
          F = 0            | F = 1, I = 0     | F = 1, I = 1
          Direct Addressing| Direct Addressing| Indirect Addressing
-------------------------------------------------------------------
TT = 00 | EA = Displ + IAR | EA = Add         | EA = C/Add
TT = 01 | EA = Displ + XR1 | EA = Add + XR1   | EA = C/Add + XR1
TT = 10 | EA = Displ + XR2 | EA = Add + XR2   | EA = C/Add + XR2
TT = 11 | EA = Displ + XR3 | EA = Add + XR3   | EA = C/Add + XR3
-------------------------------------------------------------------
    Disp = Contents of displacement field
     Add = Contents of address field of instruction
       C = Contents of location specified by Add or Add + XR
Зарезервированная память

Самые низкие адреса основной памяти использовались в зависимости от оборудования или по соглашению:

Адрес использование
/ 0000 По соглашению, он содержал инструкцию B *-1, которая будет переходить сама к себе на неопределенное время, пока оператор не заметит, что все индикаторы IAR консоли погасли, и сбросит задание либо путем нажатия Int Req, либо путем перезагрузки.
/ 0001 XR1. Адреса памяти индексных регистров допускали прямое перемещение между ними, например, сLDX I1 2
/ 0002 XR2.
/ 0003 XR3.
/ 0008 Адрес обработчика прерывания уровня 0 (наивысший приоритет) - прерывание 1442 считыватель карт / перфорация «готовность столбца».
/ 0009 Адрес обработчика прерывания уровня 1 - принтер 1132 и адаптер синхронной связи. Обработчики этого и более низких прерываний должны будут проверить слово состояния, чтобы определить, какое устройство было прервано.
/ 000A = 10 Адрес обработчика прерывания уровня 2 - дисковое хранилище, канал доступа к хранилищу.
/ 000B = 11 Адрес обработчика прерывания уровня 3 - плоттер 1627, канал доступа к памяти.
/ 000C = 12 Адрес обработчика прерывания уровня 4 - устройство чтения с бумажной ленты 1134, перфоратор для бумажной ленты 1055, консоль, перфоратор для чтения карт 1442, устройство чтения карт 2501, принтер 1403, устройство чтения оптических меток 1231, устройство канала доступа к хранилищу.
/ 000D = 13 Адрес обработчика прерывания уровня 5 (самый низкий приоритет) - переключатели остановки и прерывания консоли, канал доступа к хранилищу.
/ 0020 = 32 Первое слово поля сканирования для принтера 1132 (/ 0020– / 0027).
/ 0026 = 38 Последнее полное слово поля сканирования.
/ 0027 = 39 Используется половина: 120 столбцов = 120 бит = семь 16-битных слов плюс 8 бит.
/ 0038 = 56 ВЫХОД к супервизору / возврат к монитору (ВЫХОД ВЫЗОВА)

Программирование

Подпрограммы

1130 не имеет аппаратной поддержки стека . Большинство подпрограмм вызывается с помощью инструкции BSI (Branch and Store IAR). Это помещает значение IAR (обратный адрес) в адрес назначения и передает управление получателю + 1. Подпрограммы возвращаются туда, где они были вызваны в этом случае, используя косвенный переход через это первое слово подпрограммы. Размещение обратного адреса в строке было распространенной техникой в ​​компьютерах того времени, таких как Hewlett-Packard HP 2100 , DEC PDP-8 и Scientific Data Systems SDS 920 .

Таким образом, подпрограмма с именем SIMPL может быть организована следующим образом (комментарии следуют за операндом инструкции):

SIMPL: DC     *-*    This is the entry point, filled with a zero initially.
       (whatever the routine does)
       B    I SIMPL  Return by an Indirect branch, to the address found in location SIMPL.
       END    SIMPL  Instructs the assembler that the source for routine SIMPLE is complete.

Подпрограмма будет называться следующим образом:

       BSI  L SIMPL  Call SIMPL. L (Long) is needed if SIMPL is more than -128 or +127 words away.

Обычно используется псевдооперация CALL.

Как показано, точкой входа в подпрограмму является DC *-*псевдооперация ассемблера, которая используется для определения константы (занимающей одно слово памяти) со значением, указанным в выражении. * Обозначает текущий адрес сборки, поэтому * - * приводит к нулю. Запись этого, а не 0, дает визуально отличительную заметку о том, что значимое значение (адрес возврата) будет помещено туда во время выполнения. Точкой входа не обязательно должно быть первое слово подпрограммы. Действительно, предыдущее слово может быть началом инструкции прямого перехода из двух слов, адресное поле которой находится в SIMPL. Тогда возврат может производиться там однословными ветвями:B SIMPL-1

Когда вызывается SIMPL, инструкция BSI заменяется *-*текущим значением IAR, которое является адресом сразу после инструкции BSI. После того, как SIMPL выполняет то, для чего написано, B I SIMPLпереходит не к SIMPL, а косвенно через него, таким образом продолжая выполнение инструкции, следующей за инструкцией BSI, которая вызвала SIMPL.

Без дополнительных мер по защите обратного адреса рекурсия невозможна: если SIMPL вызывает саму себя или вызывает подпрограмму, которая вызвала его, его исходный адрес возврата перезаписывается. Повторный вход проблематичен по той же причине: подпрограмма обслуживания прерывания должна воздерживаться от вызова любой подпрограммы, которая могла быть прерванным кодом.

Вызывающий SIMPL может передать ему параметры, которые могут быть значениями или адресами значений. Параметры могут быть закодированы в строке (сразу после инструкции BSI) или могут быть помещены в индексные регистры XR1 и XR2. Если параметры помещаются в строку, SIMPL изменяет свой собственный адрес возврата, поэтому его конечная непрямая ветвь возвращается за пределы параметров.

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

Соглашение о кодировании 0 в качестве начального значения в точке входа означает, что если ошибка программирования приводит к возврату SIMPL до того, как он был впервые вызван, выполнение переместится в ячейку памяти 0. Как упоминалось выше , обычно имеет место местоположение 0 содержит ответвление к местоположению 0. 1130 застрянет в местоположении 0, и индикаторы IAR на консоли будут полностью темными, что дает понять, что программа потерпела неудачу.

Связь с библиотечными подпрограммами

Для подпрограмм, которые будут вызываться много раз (например, подпрограмм для арифметики с плавающей запятой), важно уменьшить размер каждого вызова до одного слова. Такие «библиотечные подпрограммы» используют протокол LIBF. Он более сложен, чем протокол CALL, описанный в предыдущем разделе, но LIBF скрывает сложность от автора программы на языке ассемблера.

Подпрограммы библиотеки адресуются через индексный регистр XR3. (Подпрограммы Fortran используют индексный регистр XR1 для адресов параметров и адреса возврата, но регистр XR2 не используется.) XR3 указывает на последовательность векторов передачи из трех слов , так что первая запись составляет -128 слов из значения XR3. Программист вызывает библиотечную подпрограмму, используя LIBFпсевдооперацию, которая собирает не прямую BSIподпрограмму, а однословную индексированную инструкцию ветвления ( ), смещение которой (-128, -125 и т. Д.) Идентифицирует начало передачи подпрограммы. вектор. BSI 3 disp

Вектор передачи подготавливается загрузчиком связей, когда он собирает программу. Запись вектора передачи в библиотечную функцию с именем SIMPL принимает следующую форму:

      DC       *-*            A word into which BSI stores the return address.
      B    L   SIMPL          Branch to the start of the library function.

SIMPL узнал, где находится его адрес возврата, так это то, что если бы SIMPL был объявлен процедурой LIBF, загрузчик связей изменил бы код SIMPL, поместив адрес записи вектора передачи SIMPL в SIMPL + 2. Подпрограммы LIBF, в отличие от подпрограмм CALL, начинаются не с директивы DC для хранения адреса возврата (он находится в векторе передачи), а с фактического кода, как показано ниже:

SIMPL STX   1  RCVR1+1        Save the caller's value of XR1 at a nearby location.
      LDX  I1  *-*            The linkage loader changes the address word to point to the transfer vector.

Размещение адреса вектора передачи SIMPL в SIMPL + 2 оставляет место для однословной инструкции по сохранению выбранного индексного регистра, здесь XR1. Затем косвенная инструкция LDX указывает XR1 не на вектор передачи, а через него на адрес возврата или на любые параметры, хранящиеся в строке после BSI. Затем SIMPL выполняет то, для чего было написано, получая доступ к любым встроенным параметрам через XR1 (в этом случае он должен увеличить XR1 для адреса возврата) и возвращает следующее:

      STX   1  RETN+1         Store XR1 to prepare to use it as a return address.
RCVR1 LDX  L1  *-*            SIMPL's first instruction modified this address.  Now,
*                              restore the original value of XR1.
RETN  B    L   *-*            This instruction was modified two instructions ago; return.
Пример

Предположим, что вызов SIMPL в стиле LIBF был по адресу 100. Тогда адрес возврата будет 101, потому что это инструкция из одного слова. XR3 указывает на группу векторов передачи. Если вектор передачи для SIMPL начинается с адреса 2000, то BSI будет скомпонован с таким образом, чтобы XR3 + disp = 2000. Выполнение BSI сохраняет 101 в ячейке 2000 и переходит в ячейку 2001. В 2001 выполняется переход в длину из двух слов. к точке входа в SIMPL, которую загрузчик связей мог бы разместить по адресу 300. BSI 3 dispdisp

Прыжок в длину передает управление SIMPL. После того, как инструкция на 300 сохраняет XR1, инструкция на 301 означает , что загрузчик связи поместил 2000 в положение 302. Это не загружает 2000 в XR1; это косвенная инструкция, которая загружает содержимое 2000, то есть 101, адрес возврата для этого вызова SIMPL. LDX I1 2000

В последовательности возврата, показанной выше, когда элемент управления достигает RETN, есть инструкция B L 101, которая возвращается вызывающей стороне. (Если есть один или несколько встроенных параметров в 101, SIMPL будет увеличивать XR1 до 102 или выше, и это будет адресатом Bинструкции.)

Вариации

Если SIMPL принимает параметры, закодированные в строке после инструкции BSI, SIMPL получает к ним доступ с индексированной адресацией от XR1. Первый может быть получен LD 1 0, второй - LD 1 1и так далее. Если второй параметр является адресом фактического параметра, то получает его значение. Перед возвратом SIMPL увеличивает XR1 после n параметров с помощью такой инструкции, чтобы поместить правильное значение в RETN + 1. LD I1 1MDX 1 n

Подпрограмма LIBF, которая отказалась восстанавливать исходное значение XR1, может пропустить вышеуказанные шаги и вернуться, просто пропустив n встроенных параметров. Однако такая подпрограмма не может быть вызвана другими подпрограммами LIBF, поскольку она нарушает использование вызывающим абонентом XR1 для доступа к его собственным параметрам и адресу возврата. B 1 n

Сложность LIBF экономит память для часто вызываемых подпрограмм: для связывания LIBF требуется одно слово на вызов, плюс три слова для записи вектора передачи и дополнительный код в самой подпрограмме, тогда как для связи CALL требуется два слова на вызов, потому что большинство Вызовы будут поступать на адрес за пределами диапазона от -128 до +127 слов однословного кода операции.

Регистр XR3 должен указывать на записи вектора передачи для библиотечных подпрограмм, а не на таблицу диспетчеризации только их адресов, потому что последняя требует, чтобы подпрограммы LIBF вызывались с косвенной инструкцией BSI. Эти инструкции состоят из двух слов, поэтому такая конструкция свела бы на нет экономию размера кода LIBF. Восьмибитный предел для поля disp кода инструкции из одного слова ограничивает использование подпрограмм LIBF не более чем 85 отдельными записями.

Модификация кода

В предыдущих разделах показано, что код и данные перемешаны. В программировании 1130 принято изменять адресные поля инструкций и, фактически, модифицировать инструкции целиком.

Компилятором Fortran

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

Когда программа Fortran вызывает подпрограмму, адреса любых параметров появляются в строке после вызова. Например, оператор Fortran CALL SIMPL (X) может компилироваться в:

  BSI L  SIMPL
  DC     X      The address of X, on which SIMPL is to operate

Внутри подпрограммы к параметрам можно получить доступ с помощью косвенной индексированной адресации, как показано выше в разделе « Варианты» , поэтому, учитывая, что XR1 был соответствующим образом подготовлен, целочисленный параметр может быть загружен в аккумулятор с помощью такой инструкции:

  LD  I1 0      Load the value of the first parameter (offset 0) into the accumulator

Компилятор вместо этого использовал прямую адресацию. Когда SUBIN запускается, он получает адрес X и исправляет адресное поле инструкции, чтобы оно стало:

  LD  L  X      Load the value of X into the accumulator

Преимущества СУБИНа следующие:

  • Чтобы получить адрес операнда, косвенно проиндексированной инструкции требуется три цикла памяти (индексный регистр находится в памяти), в то время как для инструкции прямого доступа требуется только один.
  • Если SIMPL должен был передать один из своих параметров любой подпрограмме, которая ожидала получить адрес своего параметра (включая все процедуры LIBF для арифметики с плавающей запятой), SUBIN требуется для предоставления фактического адреса исходного параметра.

Недостатками SUBIN являются время, необходимое для запуска, и память, необходимая для таблицы ссылок. Размер этой таблицы - это сумма 5, количества параметров и количества ссылок; если эта сумма превышает 511, компиляция завершится неудачно. Для подпрограмм со многими ссылками на параметр автор подпрограммы может скопировать параметр в локальную переменную.

Со стороны пользователя

В то время изменение целых инструкций было обычным делом. Например, хотя в 1130 есть инструкция OR, синтаксис Fortran не дает возможности ее записать. Может быть определена целочисленная функция IOR, позволяющая логическому OR быть частью выражения Fortran, например:

   M = 3*IOR(I,J) + 5

Компилятор Fortran помещает адреса I и J в строку и ожидает результата в аккумуляторе. Использование IOR (I, J) в выражении Фортрана приводит к компиляции следующих четырех слов:

  BSI  L IOR    Two-word jump to the start of the IOR function.
  DC     I      A one-word in-line parameter: The address of I.
  DC     J      A one-word in-line parameter: The address of J.

Фактически, ассемблерная функция IOR вообще не вычисляет I или J. Вместо этого он заменяет приведенные выше четыре слова следующим:

  LD   L I      Load accumulator with I (two-word instruction)
  OR   L J      OR accumulator with J   (two-word instruction)

После выполнения этого преобразования он не возвращается после конца блока из четырех слов (который он только что изменил). Вместо этого он переходит к точному адресу, с которого он был первоначально вызван. Инструкции BSI больше нет; теперь есть две инструкции, которые он только что написал. Они объединяют два целых числа с помощью машинной инструкции OR и оставляют результат в аккумуляторе, если требуется.

Вызов IOR и преобразование блока из четырех слов происходит не более одного раза за выполнение программы. Если показанная выше строка Fortran выполняется снова, она выполняется быстрее, чем в первый раз. Подобные функции могут быть разработаны для других полезных операций.

Функция, которая самоизменяется, как это делает IOR, не может использоваться в подпрограмме Fortran для любого из параметров этой подпрограммы (хотя ее можно использовать для объединения локальных переменных), поскольку она несовместима с подпрограммой SUBIN, описанной выше. Преобразование IOR своей вызывающей последовательности из четырех слов, показанное выше, перемещает местоположение адреса переменной I. При последующих вызовах подпрограммы Fortran таблица ссылок на параметры будет ошибочной, и SUBIN исправит неправильное слово в в этом случае новый адрес I помещается поверх кода операции ИЛИ.

Повышенная точность

1130 FORTRAN предлагает два формата с плавающей запятой: 32-битный формат «стандартной точности» и 40-битный формат «расширенной точности».

Стандартный формат точность содержит 24-битное дополнение до два мантиссы в то время расширенной точность использует 32-битное дополнение до два мантиссы . Этот формат полностью использует 32-битные целочисленные операции ЦП. Расширенный формат занимает три 16-битных слова, причем восемь старших битов первого слова не используются. Характеристика в обеих форматах представляет собой 8-битовое поле , содержащее силу два смещено от 128. с плавающей запятой арифметических операций выполняется с помощью программного обеспечения.

Дополнительная *EXTENDED PRECISIONкарта компилятора сообщает компилятору FORTRAN использовать 40 бит вместо 32 бит для всех данных с плавающей запятой, нет никаких условий для смешивания форматов.

Большие программы на Фортране

Данные, которыми нужно манипулировать, и инструкции, которые ими управляют, должны находиться вместе в основной памяти. Ключевым ограничением является объем установленной памяти (от 4096 до 32768 слов). Несмотря на это ограничение, Фортран предоставляет несколько методов для написания больших программ.

ЛОКАЛЬНЫЕ подпрограммы

В Фортране любая подпрограмма может быть обозначена как «ЛОКАЛЬНАЯ» (Load-on-Call). Каждая ЛОКАЛЬНАЯ подпрограмма - это наложение ; он является частью резидентной исполняемой программы на диске, но загружается в оперативную память (если еще не там) во время вызова. Так, например, шесть ЛОКАЛЬНЫХ подпрограмм потребуют столько же основной памяти, сколько самая большая, а не общий объем для всех шести. Однако ни одна из шести не может вызывать другую ни напрямую, ни через промежуточные подпрограммы.

Программы по этапам

Вся программа на Фортране может передать управление следующей фазе с выходом к супервизору с инструкцией загрузить следующую фазу в основную память. Большая программа может быть разделена на три части, компилируемые отдельно, которые называются PART1, PART2 и PART3. Выполнение начинается с // XEQ PART1подходящей точки, и в подходящей точке PART1 выполнит оператор Fortran CALL LINK(PART2)и так далее. Имя программы-преемника в CALL не может быть переменным, но логика программы может определять, передается ли управление на другую фазу и какой CALL LINKоператор выполняется. Как упоминалось выше , сам компилятор Fortran был написан таким образом, и каждая фаза компиляции выполнялась отдельной программой.

ОБЩЕЕ хранилище данных

Программы, такие как программы на Фортране, располагаются по низким адресам памяти ядра (чуть выше супервизора). Фортран выделяет место по высшим адресам для любых переменных и массивов, объявленных ОБЩИМИ. Если последующая фаза программы содержит соответствующее ОБЩЕЕ объявление, то информация в этой общей области может быть разделена между фазами. Фазы могли без проблем опускать объявление COMMON, при условии, что эти фазы не были настолько большими, чтобы их программный код вторгался в общую область. ОБЩЕЕ хранилище не только разделяет данные между фазами; ОБЩИЕ переменные нижней памяти могут использоваться для передачи данных между основной программой и подпрограммами в рамках одной фазы, хотя данные могут быть потеряны при переходе к следующей фазе.

Примеры программирования

Примеры могут быть выполнены в эмуляторе IBM 1130, доступном на IBM 1130.org .

Пример колоды ассемблерной программы

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

 // JOB
 // ASM
 *LIST
                     * LCARD.ASM - LIST A DECK OF CARDS TO LINE PRINTER
                     *
                     * PROGRAM
                     *    NEW PAGE ON PRINTER
                     * A  READ A CARD
                     *    CONVERT FORMAT
                     *    PRINT A LINE ON PRINTER
                     *    GOTO A
                     *
                     START LIBF    PRNT1    GOTO NEW PAGE ON 1132
                           DC      /3100    PRINTER CHANNEL 1-NEW PAGE
                     *
                     NEXTC LIBF    CARD0    READ FROM 1442 CARD READER
                           DC      /1000    CONTROL TO READ
                           DC      CBUFF    STORE 80 COLUMNS
                     CINP  LIBF    CARD0
                           DC      0
                           B       CINP     LOOP UNTIL CARD IS READ
                     *
                           LIBF    ZIPCO    CONVERT CARD TO PRINTER
                           DC      /1100    UNPACKED IN, PACKED OUT
                           DC      CBUFF+1  INPUT BUFFER
                           DC      PBUFF+1  OUTPUT BUFFER
                           DC      80       CHARACTER COUNT
                           CALL    HLEBC    HOLLERITH TO EBCDIC
                     *
                           LIBF    PRNT1    PRINT 80 CHARACTERS
                           DC      /2000    CONTROL CODE TO PRINT
                           DC      PBUFF    PRINT BUFFER
                           DC      PERR     PRINT ERROR
                     POUT  LIBF    PRNT1    CHECK FOR PRINT COMPLETE
                           DC      0
                           B       POUT     LOOP UNTIL COMPLETE
                     *
                           B       NEXTC    READ NEXT CARD
                     *
                     * DATA
                     *
                     CBUFF DC      80       80 COLUMNS PER CARD
                           BSS     80
                     *
                     PBUFF DC      40       40 WORDS 80 CHARACTERS
                           BSS     40
                     *
                     PERR  DC      0
                           B    I  PERR     THIS RETURNS TO THE
                     *                       PRINTER ERROR HANDLER
                     *                       WHICH WILL TERMINATE THE PROGRAM
                     *
                           END     START    PROGRAM ENTRY POINT
 // XEQ
 TEST DATA 1
 HELLO WORLD
 TEST DATA 2

В этом задании ассемблер оставляет результат своей сборки во временной области системного диска, а команда XEQ выполняет содержимое временной области. Странно выглядящий END STARTимеет два значения: конец исходного кода ассемблера и имя точки входа подпрограммы, имеющей метку START.

Исходный код ассемблера начинается с 21-го столбца карты, а не с первого столбца. В системах без дисковода ассемблер вставлял код в начало только что прочитанной карты (устройство считывания карт было на самом деле устройством для считывания и перфорации, а перфоратор находился после станции чтения), а затем считывал следующую карту. Для обработки передних ветвей и т.п. второй проход ассемблера буквально включал в себя второй проход карт через считыватель / перфоратор. Если потребовались изменения исходного кода, программист дублировал карты, чтобы получить колоду с пустыми столбцами 1-20, готовую для следующего прогона через ассемблер.

По соглашению перед буферами указывается количество слов. В DC(Определить константы) компонует количество слов и следующее BSS(блок созданных Symbol) оставляет необходимое количество слов для буфера. Буфер карты требует 80 слов, по одному на каждый столбец карты. Драйвер CARD0 считывает каждый столбец карты буквально, используя 12 из 16 бит в слове буфера, с битом , установленным на по для каждого отверстия пробитого в соответствующей строке для этого столбца. Образец штрихов обычно описывает текстовый символ с использованием кода Холлерита . Клавиатура консоли также дает входные данные программе в коде Холлерита, что является единственным случаем, когда два устройства используют одинаковую кодировку символов.

Однако подпрограмма принтера работает с текстом в 8-битном формате EBCDIC с двумя символами на слово, для чего требуется буфер на 40 слов. Программа использует библиотечную подпрограмму ZIPCO для выполнения преобразования. Несмотря на внешний вид, оператор CALL HLEBCне выполняется, потому что HLEBC - это не подпрограмма, а таблица преобразования Холлерита в EBCDIC, поставляемая IBM. Оператор CALL предоставляет адрес таблицы в ZIPCO и гарантирует, что связывающий загрузчик включает таблицу в программу, таким образом, это пятый параметр для ZIPCO, хотя он занимает два слова памяти: кодовое слово операции BSI для CALL - неиспользуемые и, следовательно, обычно тратятся впустую, но второе слово расширения CALL HLEBC- это адрес таблицы HLEBC, необходимой для ZIPCO. После преобразования программа отправляет преобразованный вывод, теперь уже в буфере PBUFF, на принтер через драйвер PRNT1. Снова программа повторяется до тех пор, пока драйвер принтера не сообщит о завершении, затем программа считывает следующую карту.

Этот пример не содержит кода, чтобы решить, когда остановиться. Более полная программа будет проверять наличие карточек, которые начинаются с //, что означает начало следующего задания. Чтобы остановить устройство чтения карт как можно скорее, программа может проверить код Холлерита /до того, как преобразовать карту в EBCDIC.

Асинхронный ввод-вывод и производительность

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

В примерах подпрограмм устройства ввода-вывода не работают на максимальной скорости. Примечательно, что считыватель карт, всего через несколько миллисекунд после сообщения о завершении чтения карты, начнет свою последовательность остановки, после чего новая команда чтения должна будет ждать, чтобы инициировать другой цикл чтения. Считыватель IBM 1442 мог читать 400 карт в минуту на полной скорости, но даже небольшая неуверенность в командах чтения снизила бы его пропускную способность вдвое или даже хуже. Программа Fortran не могла вовремя завершить даже простейшую обработку ввода, и поэтому не могла читать карты на полной скорости. Один распространенный DOцикл Fortran для чтения карт заставлял двигатель останавливаться и запускаться так часто, что это ускоряло износ. При буферизации управление считывателем карт могло бы перекрываться с обработкой, и считыватель мог бы работать на полной скорости через большие колоды данных, но память для более сложной программы и для буферов часто была в избытке.

Даже с ассемблером и двойной буферизацией программа для вывода колоды карт из считывающего устройства IBM 2501 (1000 карт в минуту) на линейном принтере не могла успевать, поскольку преобразование шаблонов отверстий для карт в EBCDIC для принтера, выполненное EBPRT была слишком медленной; Вместо этого потребовались более сложные ZIPCO и HLEBC, как в примере.

Пример сеанса APL \ 1130

На следующем изображении показан простой сеанс APL \ 1130. Этот сеанс был выполнен с помощью симулятора 1130, доступного на IBM 1130.org . Вышеупомянутый сеанс показывает вход в систему, сложение целых чисел от 1 до 100, создание таблицы сложения для целых чисел 1..5 и выход.
apl \ 1130 apl \ 1130 образец сеанса

Конкурирующие системы

В том же году, когда был выпущен 1130, Digital Equipment Corporation представила меньший, более дешевый и более продаваемый 12-битный PDP-8 , признанный первым успешным мини-компьютером.

Влияние 1130 г.

  • Брайан Атли был менеджером проекта 1130-х годов во время его разработки и внедрения. Брайан сказал на третьей вечеринке 11/30, что до того, как IBM Marketing назвала 1130, она была известна как Small Engineering Computer System или SECS. Первоначальная архитектура была 18-битной, но была изменена на 16-битную из-за влияния разработки System / 360 . Полный диалог его презентации 2005 года доступен на IBM1130.org .
  • Известный разработчик программного обеспечения Грэди Буч впервые познакомился с программированием на IBM 1130:

... Я стучал в двери местного офиса продаж IBM, пока продавец не сжалился надо мной. После того, как мы немного поболтали, он вручил мне [руководство] по Фортрану. Я уверен, что он дал мне его, думая: «Я больше никогда не получу весточку от этого ребенка». Я вернулся на следующей неделе и сказал: «Это действительно круто. Я прочитал все и написал небольшую программу. Где я могу найти компьютер?» Этот парень, к моему удовольствию, нашел у меня время для программирования на IBM 1130 по выходным и поздним вечером. Это был мой первый опыт программирования, и я должен поблагодарить анонимного продавца IBM за начало моей карьеры. Спасибо, IBM.

  • Гуру LISP Гай Стил написал интерпретатор LISP для IBM 1130, когда учился в старшей школе ( Бостонская латинская школа , в которой учащиеся использовали IBM 1130). Его код и документация для LISP 1.6, а также краткое изложение текущей работы по его запуску в режиме моделирования доступны на IBM1130.org .
  • Чак Мур хотел назвать свой новый язык «Четвертым», но операционная система IBM 1130 была ограничена пятисимвольными именами, поэтому в итоге он получил название FORTH .
  • Дэн Бриклин , создатель программы VisiCalc , начал заниматься программированием, когда изучил и использовал IBM 1130 в рамках Летнего проекта по компьютерной математике и компьютерной математике Национального научного фонда для старшеклассников, проведенного в Университете Пенсильвании в 1966 году.
  • IBM 1130 с ядром 8 киловордов использовался для первого в мире постоянного исследования в области поиска внеземного разума в радиообсерватории Университета штата Огайо . Это оборудование обнаружило Wow! сигнал .
  • Чарльз Гольдфарб , отец SGML , описывает работу по установке системы набора на базе IBM 1130, которая «в конечном итоге изменила мою карьеру», подтолкнув его к универсальной разметке:

Система представляла собой компьютер IBM 1130, машину размером с рабочий стол с 8 КБ оперативной памяти, дисковым накопителем на 512 КБ, устройством чтения бумажных лент Teletype CX и перфоратором для бумажных лент BRPE, а также фотомеханическим наборным устройством Photon 713. Это задание было моим первым опытом управления базой данных машиночитаемых документов: я научился аккуратно катить перфоленту, чтобы ее можно было аккуратно хранить в цилиндрических корзинах для макулатуры.
Тем временем, хотя я не знал об этом, корни обобщенной разметки закладывались. Исторически электронные рукописи содержали управляющие коды или макросы, которые заставляли документ форматироваться определенным образом («определенное кодирование»). Напротив, универсальное кодирование, начавшееся в конце 1960-х годов, использует описательные теги (например, «заголовок», а не «формат-17»).

  • Алан Кей использовал IBM 1130 на ранних этапах работы с графическим пользовательским интерфейсом для своей докторской степени. защитил диссертацию в 1969 году.
  • Центральная техническая средняя школа Хатчинсона («Hutch Tech») в Буффало, штат Нью-Йорк, использовала IBM 1130 в первой в стране четырехлетней программе по информатике для старших классов средней школы в 1969 году. Роберт Сантучи был руководителем программы по информатике и преподавал уроки программирования и индуктивной логики. .
  • Инженер из IBM был нанят Signetics и включил ряд архитектурных особенностей IBM 1130 в однокристальный процессор Signetics 2650 .

1130-е годы сегодня

Известно, что из примерно 10 000 произведенных систем на 2021 год существуют следующие:

Апокриф

Рассуждения о том, почему продукту был присвоен номер 1130, основывались на следующих возможностях:

  • Поскольку 1130 был маленькой научной машиной, число было выбрано умножением 360 (как в IBM 360 ) на π .
  • Это 11:30 было временем дня, когда планировщики продукта зашли в тупик, не решая, как называть продукт.
  • Что 1130 был 11-м компьютерным проектом IBM, и в нем было 30 инструкций.

Другие предположили, что существование IBM 1130 объясняет, почему ни один компьютер с обозначением «11/30» никогда не появлялся в семействе машин PDP-11 .

Смотрите также

Примечания

использованная литература

внешние ссылки