...

понедельник, 12 мая 2014 г.

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) первую из программ, приведенных в руководстве:










































АдресЗначениеРасшифровка
17034Ввести значение в ячейку 34
18035Ввести значение в ячейку 35
19134Скопировать ячейку 34 в аккумулятор
20235Прибавить ячейку 35 к аккумулятору
21636Записать аккумулятор в ячейку 36
22536Вывести ячейку 36
23900Остановка и сброс

Эта программа складывает два числа, считываемые со входной ленты, и записывает результат на выходную ленту.

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


После выполнения этой программы со входными значениями 42 и 128 состояние памяти стало следующим:



«Быстродействие» компьютера




Какой же обзор компьютера без бенчмарков? Я взял из руководства следующую программу, предназначенную для перемножения двух чисел.













































































АдресЗначениеРасшифровка
07068Ввести значения в ячейку 68
08404Обнулить аккумулятора с помощью сдвига на 4 вправо
09669Записать аккумулятор в ячейку 69
10070Ввести значения в ячейку 70
11170Загрузить ячейку 70 в аккумулятор
12700Вычесть ячейку 0 (то есть значение 1) из аккумулятора
13670Записать аккумулятор в ячейку 70
14319Если в аккумуляторе отрицательное значение, то перейти на адрес 19
15169Загрузить ячейку 69 в аккумулятор
16268Прибавить ячейку 68 к аккумулятору
17669Записать аккумулятор в ячейку 69
18811Перейти по адресу 11
19569Вывести ячейку 69
20900Остановиться

Я прогнал эту программу для входных данных 5 и 3. При этом необходимо было выполнить 34 инструкции, на которые мне понадобилось немногим менее 15 минут. Следовательно частота следования инструкций для этого компьютера (в комплекте со мной) составила около 38 мГц (не путать с МГц).


Содержимое памяти и выходной ленты





Создатели CARDIAC подошли к вопросу серьёзно и разработали (не считая приведенных выше) следующие программы:


  • Программу для «переворачивания» разрядов числа

  • Bootstrap для загрузки программ со входной ленты

  • Механизм вызова подпрограмм

  • Программу для игры в Ним с одной кучкой (то есть, в игру Баше)




Видео с демонстрацией оригинала:


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий