Если необходимо взять лист бумагиРучка … принтер, ножницы, клей …
В летних компьютерных школах мы иногда предлагаем детям построить "биокомпьютер", то есть вычислительное устройство буквально из того, что у них под ногами. Поскольку дети не знакомы с тем, как устроены вычислительные устройства, в итоге мы обычно получаем что-то вроде изображения под спойлером. Однако некоторые люди строят калькуляторы и абакусы.
А недавно я наткнулся на рассказ о бумажной модели компьютера, разработанной в Bell Labs в 1968 году. Этот компьютер называется CARDIAC (Cardboard Illustrative Aid to Computation) и примерно переводится как "Картонная иллюстративная помощь в вычислениях". Поэтому на самом деле это не компьютер, так как проводник сигнала и арифметический логический блок в нем — человеческие. Тем не менее, она дает представление о некоторых принципах, определяющих современные вычисления. Кроме того, в результате быстрого поиска были найдены описания и документация по созданию CARDIAC.
КАРДИАК состоит из двух блоков: памяти и процессора. В процессорный блок вставляется несколько листов бумаги для выбора команд для выполнения. Кроме того, лента вставляется в блок памяти, где должен происходить вывод, а лента с входными данными вставляется в процессор.
Память
Компьютер имеет 100 ячеек памяти с адресами от 00 до 99. Каждый из них может использоваться для хранения инструкций или трехзначных чисел. Любая ячейка может быть заменена, так что при необходимости можно создать самомодифицирующуюся программу. Значения ячеек вводятся карандашом, а изменяются карандашом и ластиком. Значение 001 всегда "вшивается" в ячейку 0. Команды с прямыми значениями аргументов недоступны на компьютерах и поэтому очень полезны при использовании для приращений.
Оригинальный блок памяти выглядит следующим образом
Счетчик инструкций
В прототипе в качестве счетчика команд используется божья коровка, как показано на изображении выше. Он помещается в специальные отверстия, просверленные в каждой ячейке памяти. Поскольку мы не хотели сверлить 100 отверстий, мы использовали другую божью коровку для отображения счетчика команд. Он просто помещается в нужную ячейку.
Аккумулятор
Единственный регистр в компьютере — это аккумулятор. Они используются для выполнения арифметических операций (сложение, вычитание, сдвиг) и для условных переходов. В отличие от ячеек памяти, аккумуляторы могут хранить четыре десятичных знака.
Система команд
Каждая команда кодируется в виде трехзначного десятичного числа. Первая цифра всегда является кодом режима. Оставшиеся две цифры обычно представляют собой адрес ячейки, в которой работает команда.
- 0-INP — входное значение с входной ленты.
- 1CLA-Загружает содержимое ячейки памяти в аккумулятор
- 2ADD-ADD-ячейка памяти аккумулятора
- 3-TAC- Если значение аккумулятора отрицательное, он перемещается по указанному адресу
- 4-SFT-Сдвиг влево или вправо на указанное количество десятичных знаков
- 5-OUT-Выход ячейки памяти на выходную ленту
- 6-STO — запись накопителя в ячейку памяти
- 7-SUB-Удаляет ячейку памяти из аккумулятора
- 8-JMP- безусловный переход по указанному адресу
- 9-Время остановки и сброса
Изготовление компьютера
Приставка была распечатана на картоне, все необходимые отверстия были вырезаны, вставлены подвижные полоски и два блока склеены вместе.
Как это всё работает?
Работа компьютера — это последовательное выполнение команд. Перед началом выполнения посмотрите, где находится божья коровка (т.е. счетчик команд), и введите значение этой ячейки памяти в окне ‘Instruction Register’, перемещая полоску.
Следующий шаг — следовать по стрелкам, начиная с "Start" и выполняя все указания. Например, на изображении выше сначала нужно переместить счетчик команд вперед, а затем добавить содержимое ячейки 41 в аккумулятор.
Конечно, расчеты (добавление, удаление и перемещение) должны выполняться вручную. Для этого рядом с надписью ‘Battery’ есть различные поля, в которых можно выполнять добавления/удаления в колонках.
Сначала "я набрал" (т.е. написал карандашом в ячейке памяти 17-23) первую ручную программу:…
17 | 034 | Введите значение в ячейку 34 |
18 | 035 | Запишите значение в ячейку 35 |
19 | 134 | Скопируйте ячейку 34 в тесто |
20 | 235 | Добавьте элемент 35 в батарею |
21 | 636 | Запишите аккумулятор в ячейку 36 |
22 | 536 | Отделение 36 |
23 | 900 | Прерывание и сброс |
Эта программа складывает два числа, считанные из входного фильма, и записывает результат в выходной фильм. Команда ввода считывает значение с ленты ввода, записывает его в указанную ячейку, перемещает ленту ввода на один шаг и выводит следующее значение в поле ввода. Это требует использования карандаша (и, возможно, ластика) для записи значения в ячейку памяти.
После выполнения этой программы со значениями входов 42 и 128 состояние памяти будет следующим
«Быстродействие» компьютера
Что такое компьютерный обзор без сравнения? Следующая программа была получена из руководства. Он предназначен для перемножения двух чисел.
07 | 068 | Введите значение в ячейку 68 |
08 | 404 | Сбросьте аккумулятор, сдвинув его вправо |
09 | 669 | Запишите батарею в ячейку 69 |
10 | 070 | Значение нагрузки в ячейке 70 |
11 | 170 | Загрузите ад 70 в аккумулятор |
12 | 700 | Извлеките элемент 0 (т.е. значение 1) из батареи |
13 | 670 | Запишите батарею в ячейку 70 |
14 | 319 | Если аккумулятор содержит отрицательное значение, перейдите по адресу 19 |
15 | 169 | Нагрузочный элемент 69 в батарею |
16 | 268 | Добавьте элемент 68 в батарею |
17 | 669 | Запишите батарею в ячейку 69 |
18 | 811 | Перейти к адресу 11 |
19 | 569 | Ячейка 69 покидает ячейку 69 |
20 | 900 | Остановитесь. |
Я выполнил эту программу в подъездах 5 и 3. Для этого потребовалось 34 инструкции. Результирующая частота команд этого компьютера (в работе которого я также принимал участие) составила около 38 МГц (не путать с МГц).
