![]() | |
![]() Часть первого компьютера IBM 650 в Норвегии (1959), известного как «EMMA». 650 Console Unit (справа, открыта внешняя боковая панель), 533 Card Read Punch unit (в середине, ввод-вывод). 655 Power Unit отсутствует. Сортировщик перфокарт (слева, не является частью 650). Сейчас находится в Норвежском музее науки и техники в Осло . | |
Тип | Цифровой компьютер |
---|---|
Дата выпуска | 1954 ( 1954 ) |
Предшественник | IBM CPC ( 604 , 605) |
Преемник | IBM 7070 (высокопроизводительный) IBM 1620 (низкопроизводительный) |
Связанный | IBM 701 , IBM 702 ; IBM 608 |
Машина обработки данных с магнитным барабаном IBM 650 — ранний цифровой компьютер, выпущенный IBM в середине 1950-х годов. [2] [3] Это был первый в мире компьютер массового производства. [4] [5] Было выпущено почти 2000 систем, последняя в 1962 году, [6] [7] и это был первый компьютер, который принес значительную прибыль. [7] Первый был установлен в конце 1954 года, и это был самый популярный компьютер 1950-х годов. [8]
Модель 650 предлагалась деловым, научным и инженерным пользователям как более медленная и менее дорогая альтернатива компьютерам IBM 701 и IBM 702 , которые предназначались для научных и деловых целей соответственно. [7] Она также предназначалась для пользователей машин с перфокартами , которые переходили с вычислительных перфораторов , таких как IBM 604 , на компьютеры. [1] : 5 [9]
Благодаря своей относительно низкой стоимости и простоте программирования , 650 использовался для создания широкого спектра приложений, от моделирования работы экипажа подводной лодки [10] до обучения программированию студентов старших классов и колледжей. IBM 650 стал очень популярен в университетах, где целое поколение студентов впервые изучало программирование. [11]
Он был анонсирован в 1953 году и в 1956 году улучшен как IBM 650 RAMAC с добавлением до четырех дисковых накопителей. [12] Цена покупки чистой консоли IBM 650, без блока считывания и перфорации, составляла 150 000 долларов в 1959 году [13] или примерно 1 500 000 долларов по состоянию на 2023 год. Поддержка 650 и ее компонентов была прекращена в 1969 году.
650 был двухадресным , би -квинарно-кодированным десятичным компьютером (и данные, и адреса были десятичными), с памятью на вращающемся магнитном барабане . Поддержка символов обеспечивалась блоками ввода/вывода, преобразующими алфавитные и специальные кодировки символов перфокарт в/из двузначного десятичного кода.
650 работал на частоте 125 кГц. [14] Он мог складывать или вычитать за 1,63 миллисекунды, умножать за 12,96 мс и делить за 16,90 мс. Средняя скорость 650 оценивалась примерно в 27,6 мс на инструкцию, или примерно 40 инструкций в секунду. [15]
Серия книг Дональда Кнута «Искусство программирования» посвящена процессору 650. [15]
Первая модель 650 была установлена 8 декабря 1954 года в отделе контролеров компании John Hancock Mutual Life Insurance Company в Бостоне. [16]
IBM 7070 (знаковые 10-значные десятичные слова), анонсированный в 1958 году, как ожидалось, станет «общим преемником, по крайней мере, 650 и [IBM] 705 ». [17] IBM 1620 (переменная длина десятичных слов), представленный в 1959 году, был адресован нижнему сегменту рынка. UNIVAC Solid State (двухадресный компьютер, знаковые 10-значные десятичные слова) был анонсирован Sperry Rand в декабре 1958 года в качестве ответа на 650. Ни один из них не имел набора инструкций, совместимого с 650.
Базовая система 650 состояла из трех блоков: [18]
Вес: 5400–6263 фунтов (2,7–3,1 коротких тонны; 2,4–2,8 т). [24] [25]
Дополнительные единицы: [18]
Вращающаяся барабанная память обеспечивала 1000, 2000 или 4000 слов памяти по адресам от 0000 до 0999, 1999 или 3999 соответственно. Каждое слово имело 10 двоично-кодированных десятичных цифр , представляющих знаковое 10-значное число или пять символов. (Считая двоично-кодированную цифру как семь бит, 4000 слов будут эквивалентны 35 килобайтам.) [31] [32] Слова на барабанах были организованы в полосы вокруг барабана, пятьдесят слов на полосу и 20, 40 или 80 полос для соответствующих моделей. Доступ к слову мог быть получен, когда его местоположение на поверхности барабана проходило под головками чтения/записи во время вращения (при вращении со скоростью 12 500 об/мин неоптимизированное среднее время доступа составляло 2,5 мс ). Из-за этого времени второй адрес в каждой инструкции был адресом следующей инструкции. Программы затем можно было оптимизировать , помещая инструкции по адресам, которые были бы немедленно доступны после завершения выполнения предыдущей инструкции. IBM предоставила форму с десятью столбцами и 200 строками, чтобы позволить программистам отслеживать, куда они помещают инструкции и данные. Позже был предоставлен ассемблер SOAP (Symbolic Optimal Assembly Program), который выполнял грубую оптимизацию. [33] [34]
Компьютеры LGP-30 , Bendix G-15 и IBM 305 RAMAC также использовали электронные лампы и барабанную память, но они существенно отличались от IBM 650.
Считываемые с барабана инструкции отправлялись в программный регистр (в современной терминологии — регистр инструкций ). Считываемые с барабана данные проходили через 10-разрядный распределитель. У 650 был 20-разрядный аккумулятор , разделенный на 10-разрядные нижние и верхние аккумуляторы с общим знаком. Арифметика выполнялась одноразрядным сумматором. Консоль (10-разрядные переключатели, один знаковый переключатель и 10 би-квинарных индикаторных ламп), распределитель, нижние и верхние аккумуляторы были адресуемыми; 8000, 8001, 8002, 8003 соответственно.
Дополнительный блок хранения данных IBM 653 был представлен 3 мая 1955 года и в конечном итоге обеспечивал до пяти функций: [35]
650 инструкций состояли из двухзначного кода операции , четырехзначного адреса данных и четырехзначного адреса следующей инструкции. Знак игнорировался на базовой машине, но использовался на машинах с дополнительными функциями. Базовая машина имела 44 кода операций. Дополнительные коды операций были предоставлены для опций, таких как плавающая точка, хранилище на ядре, индексные регистры и дополнительные устройства ввода-вывода. Со всеми установленными опциями было 97 кодов операций. [35]
Инструкция поиска по таблице (TLU) могла сравнивать по принципу высокого равенства указанное 10-значное слово с 48 последовательными словами на той же полосе барабана за один оборот в 5 мс, а затем переключаться на следующую полосу вовремя для следующих 48 слов. Этот подвиг был примерно в треть скорости в тысячу раз более быстрой двоичной машины в 1963 году (1500 микросекунд на IBM 7040 против 5000 микросекунд на 650) для поиска 46 записей, если обе были запрограммированы на ассемблере. Существовала дополнительная инструкция поиска по таблице Equal с той же производительностью.
Команда Read (RD) считывала 80-колоночную карту числовых данных в десять слов памяти; распределение цифр по словам определялось проводкой панели управления считывателя карт . При использовании с алфавитным устройством считывающего устройства Punch 533 можно было считывать комбинацию числовых и буквенно-цифровых столбцов (максимум 30 буквенно-цифровых столбцов). [1] Функция расширения позволяла считывать больше буквенно-цифровых столбцов, но определенно не более 50, поскольку только десять слов (пять символов на слово) сохранялись на барабане при операции чтения карты. [ требуется ссылка ]
Базовые коды операций машины были: [36]
17 | ААБЛ | Добавить абсолютное значение к нижнему аккумулятору |
15 | АЛ | Добавить в нижний аккумулятор |
10 | AU | Добавить в верхний аккумулятор |
45 | БРНЗ | Переход по аккумулятору, отличному от нуля |
46 | БРМИН | Ветвь на минусовом аккумуляторе |
44 | БРНЗУ | Переход по ненулевому значению в верхнем аккумуляторе |
47 | БРОВ | Ветвление при переполнении |
90-99 | ФРГ | Ответвление на 8 в позициях распределителя 1-10 [a] |
14 | ДИВ | Разделять |
64 | ДИВРУ | Разделить и сбросить верхний аккумулятор |
69 | ЛД | Распределитель нагрузки |
19 | МУЛЬТ | Умножить |
00 | НЕТ-ОП | Нет операции |
71 | ПЧ | Пробить карту |
70 | РД | Прочитать карту |
67 | РААБЛ | Сбросить аккумулятор и добавить абсолютное значение к нижнему аккумулятору |
65 | РАЛ | Сбросить аккумулятор и добавить к нижнему аккумулятору |
60 | РАУ | Сбросить аккумулятор и добавить к верхнему аккумулятору |
68 | РСАБЛ | Сбросить аккумулятор и вычесть абсолютное значение из нижнего аккумулятора |
66 | РГБ | Сбросить аккумулятор и вычесть из нижнего аккумулятора |
61 | РСУ | Сбросить аккумулятор и вычесть из верхнего аккумулятора |
35 | СЛТ | Сдвиг аккумулятора влево |
36 | СКТ | Сдвинуть аккумулятор влево и посчитать [b] |
30 | СТО | Сдвиг аккумулятора вправо |
31 | СРД | Сдвиг аккумулятора вправо и круглый аккумулятор |
01 | ОСТАНАВЛИВАТЬСЯ | Остановитесь, если переключатель консоли установлен в положение «Остановка», в противном случае продолжите работу как NO-OP |
24 | ЗППП | Сохранить дистрибьютор в памяти |
22 | СТДА | Сохраните адрес данных нижнего аккумулятора в распределителе Затем сохраните дистрибьютор в памяти. |
23 | СТИА | Сохраните адрес инструкции нижнего аккумулятора в распределителе Затем сохраните дистрибьютор в памяти. |
20 | СТЛ | Сохранить нижний аккумулятор в памяти |
21 | СТЮ | Сохраните верхний аккумулятор в памяти. [c] |
18 | САБЛ | Вычесть абсолютное значение из нижнего аккумулятора |
16 | СЛ | Вычесть из нижнего аккумулятора |
11 | СУ | Вычесть из верхнего аккумулятора |
84 | ВЛУ | Поиск в таблице |
Примечания:
Опции IBM 653 могли реализовывать дополнительные коды инструкций. [35]
Эта однокарточная программа, взятая из 650 Programming Bulletin 5, IBM, 1956, 22-6314-0 , установит большую часть памяти барабана на минус нули. Программа включает примеры инструкций, выполняемых с переключателей консоли и с аккумулятора.
Для начала на загрузочную карту наносятся 80 последовательных цифр (второй столбец ниже), так что при считывании содержимое ячеек барабана с 0001 по 0008 будет таким, как показано на рисунке. [37]
0001 0000010000 0002 0000000000- 0003 1000018003 0004 6100080007 0005 2400008003 0006 0100008000 0007 6900060005 0008 2019990003
Цифровые переключатели консоли (адрес 8000) вручную устанавливаются на инструкцию чтения с адресом данных 0004.
loc-op|data|next ation |addr|инструкция | |адрес
8000 RD 70 0004 xxxx Прочитайте загрузите карту в первую зону считывания полосы
Каждая полоса барабана имеет область чтения; эти области чтения находятся в позициях 0001-0010, 0051-0060, 0101-0110 и так далее. Любой адрес в полосе может быть использован для идентификации этой полосы для инструкции чтения; адрес 0004 идентифицирует первую полосу. Затем начинается выполнение с консоли со считывания восьми слов на карте загрузки в позициях 0001-0008 первой полосы памяти. В случае считывания карты загрузки «адрес следующей инструкции» берется из поля адреса данных, а не из поля адреса следующей инструкции (показано выше как xxxx). Таким образом, выполнение продолжается с 0004
0004 RSU 61 0008 0007 Сбросить весь аккумулятор, вычесть из верхнего (8003) значение 2019990003 0007 LD 69 0006 0005 Распределитель нагрузки с 0100008000 0005 STD 24 0000 8003 Сохраните распределитель в ячейке 0000, следующая инструкция в 8003 (верхний аккумулятор) Примечание: перемещение данных или инструкций из одного места на барабане в другое. требуются две инструкции: LD, STD.
Теперь выполняется цикл из двух инструкций:
8003 STL 20 1999 0003 Сохранить нижний аккумулятор (этот аккумулятор был сброшен в 0 инструкцией RSU выше) Адрес данных «1999» уменьшается ниже при каждой итерации. Эта инструкция была помещена в верхний аккумулятор инструкцией RSU выше. Примечание: эта инструкция, которая сейчас находится в верхнем аккумуляторе, будет уменьшена, а затем выполняется снова, пока он находится в аккумуляторе.
0003 AU 10 0001 8003 Уменьшить адрес данных инструкции в аккумуляторе на 1 (путем прибавления 10000 к отрицательному числу)
Адрес данных STL в конечном итоге будет уменьшен до 0003, а инструкция AU ... по адресу 0003 будет перезаписана нулями. Когда это произойдет (адрес следующей инструкции STL останется 0003), выполнение продолжится следующим образом:
0003 NOOP 00 0000 0000 Инструкция без операции, адрес следующей инструкции 0000 0000 HALT 01 0000 8000 Остановка, следующий адрес инструкции — консоль (эта инструкция Halt была сохранена в 0000 инструкцией STD выше)
Набор инструкций 650 был достаточно прост, чтобы можно было писать небольшие программы на машинном языке, и это было обычным делом для студенческих упражнений. [38] Существовал формат «одна инструкция на карту», который можно было загрузить непосредственно в машину и выполнить.
Машинный язык был неудобен для больших программ, и со временем для IBM 650 были написаны различные языки программирования и инструменты. К ним относятся:
Это перепечатка IBM 650 Technical Newsletter No. 11, March 1956, form 31-6822. В настоящем справочном руководстве содержится следующий отчет, в котором отмечается, что по своим внешним характеристикам система интерпретации, описанная в этом отчете, во многом обязана системе IBM Speedcoding System для 701. Волонтис, В. М. Полная система интерпретации с плавающей десятичной дробью для калькулятора IBM 650 Magnetic Drum Calculator . Bell Laboratories, Inc., Мюррей-Хилл, Нью-Джерси.
Описанная здесь интерпретирующая процедура представляет собой фиксированную десятичную трехадресную систему, которая обеспечивает математические, логические и операции ввода-вывода. Логика для этой системы была получена из
Complete Floating Decimal Interpretive System для 650
, разработанной Bell Laboratories, Murray Hill, New Jersey.