CARDIAC — компьютер из бумаги своими руками
Если взять листок бумаги, ручку принтер, ножницы и клей…В летней компьютерной школе мы иногда предлагаем детям собрать «биокомьютер», то есть вычислительное устройство из того, что валяется в прямом смысле под ногами. Так как дети не очень хорошо знают, как устроены вычислительные устройства, то обычно получается что-то вроде картинки под спойлером. Но некоторые всё же делают счёты или абак.Биокомпьютер А недавно я натолкнулся на описание модели компьютера, сделанной из бумаги, разработанную в 1968 в лабораториях Белла. Компьютер называется CARDIAC (CARDboard Illustrative Aid to Computation), что приблизительно переводится как Картонное Наглядное Пособие по Вычислениям. То есть на самом деле это не совсем компьютер, так как проводником сигналов, а также арифметико-логическим устройством в нем выступает человек. Тем не менее, он позволяет понять некоторые принципы, лежащие в основе современной вычислительной техники. К тому же, после недолгих поисков, я нашёл описание и материалы для изготовления CARDIAC.
CARDIAC состоит из двух блоков — памяти и процессора. В процессорный блок вставлены несколько бумажных полосок с помощью которых нужно выбирать выполняющуюся инструкцию. Кроме этого, в блок памяти вставляется лента, куда происходит вывод, а в процессор — лента со входными данными.Память Компьютер имеет 100 ячеек памяти с адресами от 00 до 99. Каждая из них может быть использована для хранения одной инструкции или одного трехзначного числа. Любая из ячеек может быть перезаписана, так что при желании можно даже написать самомодифицирующуюся программу. Значения в ячейках заносятся с помощью карандаша, а модифицируются с помощью карандаша и ластика. При этом в ячейке 0 всегда «прошито» значение 001. Его очень удобно использовать для инкремента, так как команд с непосредственными значениями аргументов у компьютера нет.Вот как выглядит оригинальный блок памяти:
Счетчик инструкций В оригинале в качестве счетчика инструкций используются божья коровка, как на рисунке выше. Она вставляется в специальные отверстия, пробитые в каждой из ячеек памяти. Так как мне не хотелось делать 100 отверстий, то для обозначения счетчика команд я использовал другую божью коровку — просто выкладывал ее на нужную ячейку.
Аккумулятор Единственный регистр в компьютере — это аккумулятор. Он используется для выполнения арифметических операций (сложение, вычитание, сдвиг), а также для условных переходов. В отличие от ячеек памяти, аккумулятор может хранить 4 десятичных разряда.Система команд Каждая инструкция кодируется с помощью трехзначного десятичного числа. Первая цифра — это всегда код операции. Остальные две цифры как правило представляют собой адрес ячейки, которой оперирует инструкция.CARDIAC может «выполнять» 10 различных инструкций (с кодами от 0 до 9):
0 — INP — ввод значения из входной ленты 1 — CLA — загрузка содержимого ячейки памяти в аккумулятор 2 — ADD — прибавление ячейки памяти к аккумулятору 3 — TAC — переход по заданному адресу, если значение аккумулятора отрицательное 4 — SFT — операция сдвига влево и вправо на заданное число десятичных разрядов 5 — OUT — вывод ячейки памяти в выходную ленту 6 — STO — запись аккумулятора в ячейку памяти 7 — SUB — вычитание ячейки памяти из аккумулятора 8 — JMP — безусловный переход по заданному адресу 9 — HRS — остановка и сброс Изготовление компьютера Я распечатал прилагаемые материалы на плотной бумаге, вырезал все нужные отверстия, вставил движущиеся полоски вовнутрь и склеил оба блока.
Как это всё работает? Функционирование компьютера заключается в последовательном выполнении инструкций. Перед началом выполнения, необходимо посмотреть где находится божья коровка (то есть счетчик инструкций) и перемещая полоски набрать значение из этой ячейки памяти в окошке «Instruction Register».
Дальше необходимо следовать по стрелкам, начиная с надписи «Start» и выполнять все предписания. Например, на приведенной картинке нужно сначала переместить счетчик инструкций вперед, а затем добавить содержимое ячейки 41 к аккумулятору.
Конечно же вычисления (сложение, вычитание и сдвиг) придется выполнять вручную. Для этого рядом с надписью «Accumulator» есть несколько окошек, позволяющих выполнять сложение/вычитание в столбик.
Для начала я «ввел» (то есть вписал карандашом в ячейки памяти с 17 по 23) первую из программ, приведенных в руководстве: Адрес Значение Расшифровка 17 034 Ввести значение в ячейку 34 18 035 Ввести значение в ячейку 35 19 134 Скопировать ячейку 34 в аккумулятор 20 235 Прибавить ячейку 35 к аккумулятору 21 636 Записать аккумулятор в ячейку 36 22 536 Вывести ячейку 36 23 900 Остановка и сброс Эта программа складывает два числа, считываемые со входной ленты, и записывает результат на выходную ленту.Инструкция ввода считывает значение из входной ленты, записывает его в заданную ячейку, а затем передвигает входную ленту на один шаг вперед, чтобы в окошке «Input» появилось следующее значение. При этом придется воспользоваться карандашом (и, возможно, ластиком), чтобы записать значение в ячейку памяти.
После выполнения этой программы со входными значениями 42 и 128 состояние памяти стало следующим:
«Быстродействие» компьютера Какой же обзор компьютера без бенчмарков? Я взял из руководства следующую программу, предназначенную для перемножения двух чисел.Адрес Значение Расшифровка 07 068 Ввести значения в ячейку 68 08 404 Обнулить аккумулятора с помощью сдвига на 4 вправо 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 20 900 Остановиться Я прогнал эту программу для входных данных 5 и 3. При этом необходимо было выполнить 34 инструкции, на которые мне понадобилось немногим менее 15 минут. Следовательно частота следования инструкций для этого компьютера (в комплекте со мной) составила около 38 мГц (не путать с МГц).
Содержимое памяти и выходной ленты
Создатели CARDIAC подошли к вопросу серьёзно и разработали (не считая приведенных выше) следующие программы: Программу для «переворачивания» разрядов числа Bootstrap для загрузки программ со входной ленты Механизм вызова подпрограмм Программу для игры в Ним с одной кучкой (то есть, в игру Баше) Видео с демонстрацией оригинала:[embedded content]