Введение

ZEBRA (Zeer Eenvoudige Binaire Reken Automaat, что переводится как Очень простой автоматический двоичный калькулятор) был одним из первых компьютеров, спроектированных в Нидерландах (первым был "ARRA") и одним из первых голландских компьютеров, поступивших в коммерческую продажу. Он был разработан Виллемом ван дер Поэлем из Нидерландской почты, телеграфа и телефонии и впервые поставлен в 1958 году. Серийный выпуск составил пятьдесят пять машин, изготовленных и продаваемых британской компанией Standard Telephones and Cables, Ltd. ZEBRA был двоичным компьютером с двумя адресами и 33-битной разрядностью слова. Память обеспечивалась магнитной барабанной памятью объемом 8К слов, организованной в 256 дорожек по 32 инструкции; аккумуляторы также были реализованы в виде циклических дорожек барабана, аналогично использованному в Bendix G 15. Периферийные устройства включали в себя считыватель и перфоратор бумажной ленты, а также телетайп. В 1967 году шесть компьютеров Zebra использовались в университетах и технических колледжах Великобритании.

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

Большая часть кода и операционных систем для ZEBRA была написана глухонемым математиком Герритом ван дер Меем. В отличие от большинства процессоров, ZEBRA не имела различных типов инструкций. Вместо этого, выполнение инструкции контролировалось пятнадцатью битами в поле операции. Также, в ней не было счетчика программ в традиционном понимании. Инструкция ZEBRA состоит из 33 бит, включающих 13-битный адрес барабана, указывающий на один из 256 треков, содержащих 32 записи на барабане памяти, 5-битный адрес регистра (или ввода-вывода) и 15-битное поле операции. Каждый бит поля операции имел четкое значение и мог использоваться в практически любой комбинации, что позволяло реализовать множество элегантных приемов, которые сегодня можно отнести к области микропрограммирования. Биты операции определяли, например, знак используемых данных, очистку аккумулятора (преобразующую сложение в загрузку), необходимость выполнения вращения и так далее. Кроме того, существовали биты операции, определяющие, откуда будет взята следующая инструкция – из регистра, памяти или их суммы. Некоторые биты делали выполнение инструкции зависимым от состояния аккумулятора, как в машинах Zuse Z22 или Electrologica X1. Умножение, деление, извлечение квадратного корня, а также все операции с плавающей точкой выполнялись подпрограммами, использующими базовые арифметико-логические примитивы последовательного компьютера: сложение, вычитание, сдвиг вправо, сдвиг влево и инкремент. Благодаря продуманной конструкции, для умножения требовалось всего одно машинное действие на бит, а для деления – два, что обеспечивало относительно высокую скорость умножения и деления при минимальном объеме аппаратных средств. В качестве средств поддержки программирования предоставлялись Нормальный код (ассемблер), утилита трассировки, интерпретационная система с плавающей точкой, Простой код, Интерпретационная схема матриц и компилятор Algol. Поскольку магнитный барабан не поддерживает прямой доступ, некоторое время тратилось впустую в ожидании поступления инструкции или данных. В неоптимизированной программе среднее время ожидания могло составлять половину времени оборота барабана, но существовали способы его сократить. Одной из особенностей ZEBRA был счетчик, измерявший долю времени, в течение которого машина находилась не в состоянии ожидания; он назывался "измерителем эффективности". При работе с интерпретационной системой с плавающей точкой измеритель эффективности обычно показывал около 50%, но при посещении потенциальных клиентов загружалась более эффективная программа для демонстрации.