2374
0.6
2014-05-14
CARDIAC — компьютер из бумаги своими руками
Если взять листок бумаги, ручку принтер, ножницы и клей…
Введение
В летней компьютерной школе мы иногда предлагаем детям собрать «биокомьютер», то есть вычислительное устройство из того, что валяется в прямом смысле под ногами. Так как дети не очень хорошо знают, как устроены вычислительные устройства, то обычно получается что-то вроде картинки под спойлером. Но некоторые всё же делают счёты или абак.
Биокомпьютер
А недавно я натолкнулся на описание модели компьютера, сделанной из бумаги, разработанную в 1968 в лабораториях Белла. Компьютер называется CARDIAC (CARDboard Illustrative Aid to Computation), что приблизительно переводится как Картонное Наглядное Пособие по Вычислениям. То есть на самом деле это не совсем компьютер, так как проводником сигналов, а также арифметико-логическим устройством в нем выступает человек. Тем не менее, он позволяет понять некоторые принципы, лежащие в основе современной вычислительной техники. К тому же, после недолгих поисков, я нашёл описание и материалы для изготовления CARDIAC.
Как устроен компьютер
CARDIAC состоит из двух блоков — памяти и процессора. В процессорный блок вставлены несколько бумажных полосок с помощью которых нужно выбирать выполняющуюся инструкцию. Кроме этого, в блок памяти вставляется лента, куда происходит вывод, а в процессор — лента со входными данными.
Память
Компьютер имеет 100 ячеек памяти с адресами от 00 до 99. Каждая из них может быть использована для хранения одной инструкции или одного трехзначного числа. Любая из ячеек может быть перезаписана, так что при желании можно даже написать самомодифицирующуюся программу. Значения в ячейках заносятся с помощью карандаша, а модифицируются с помощью карандаша и ластика. При этом в ячейке 0 всегда «прошито» значение 001. Его очень удобно использовать для инкремента, так как команд с непосредственными значениями аргументов у компьютера нет.
Вот как выглядит оригинальный блок памяти:
Счетчик инструкций
В оригинале в качестве счетчика инструкций используются божья коровка, как на рисунке выше. Она вставляется в специальные отверстия, пробитые в каждой из ячеек памяти. Так как мне не хотелось делать 100 отверстий, то для обозначения счетчика команд я использовал другую божью коровку — просто выкладывал ее на нужную ячейку.
Аккумулятор
Единственный регистр в компьютере — это аккумулятор. Он используется для выполнения арифметических операций (сложение, вычитание, сдвиг), а также для условных переходов. В отличие от ячеек памяти, аккумулятор может хранить 4 десятичных разряда.
Система команд
Каждая инструкция кодируется с помощью трехзначного десятичного числа. Первая цифра — это всегда код операции. Остальные две цифры как правило представляют собой адрес ячейки, которой оперирует инструкция.
CARDIAC может «выполнять» 10 различных инструкций (с кодами от 0 до 9):
Изготовление компьютера
Я распечатал прилагаемые материалы на плотной бумаге, вырезал все нужные отверстия, вставил движущиеся полоски вовнутрь и склеил оба блока.
Как это всё работает?
Функционирование компьютера заключается в последовательном выполнении инструкций. Перед началом выполнения, необходимо посмотреть где находится божья коровка (то есть счетчик инструкций) и перемещая полоски набрать значение из этой ячейки памяти в окошке «Instruction Register».
Дальше необходимо следовать по стрелкам, начиная с надписи «Start» и выполнять все предписания. Например, на приведенной картинке нужно сначала переместить счетчик инструкций вперед, а затем добавить содержимое ячейки 41 к аккумулятору.
Конечно же вычисления (сложение, вычитание и сдвиг) придется выполнять вручную. Для этого рядом с надписью «Accumulator» есть несколько окошек, позволяющих выполнять сложение/вычитание в столбик.
Пример работы компьютера
Для начала я «ввел» (то есть вписал карандашом в ячейки памяти с 17 по 23) первую из программ, приведенных в руководстве:
Эта программа складывает два числа, считываемые со входной ленты, и записывает результат на выходную ленту.
Инструкция ввода считывает значение из входной ленты, записывает его в заданную ячейку, а затем передвигает входную ленту на один шаг вперед, чтобы в окошке «Input» появилось следующее значение. При этом придется воспользоваться карандашом (и, возможно, ластиком), чтобы записать значение в ячейку памяти.
После выполнения этой программы со входными значениями 42 и 128 состояние памяти стало следующим:
«Быстродействие» компьютера
Какой же обзор компьютера без бенчмарков? Я взял из руководства следующую программу, предназначенную для перемножения двух чисел.
Я прогнал эту программу для входных данных 5 и 3. При этом необходимо было выполнить 34 инструкции, на которые мне понадобилось немногим менее 15 минут. Следовательно частота следования инструкций для этого компьютера (в комплекте со мной) составила около 38 мГц (не путать с МГц).
Содержимое памяти и выходной ленты
Другие программы
Создатели CARDIAC подошли к вопросу серьёзно и разработали (не считая приведенных выше) следующие программы:
Ссылки
Видео с демонстрацией оригинала:
Источник: habrahabr.ru/post/222277/
Введение
В летней компьютерной школе мы иногда предлагаем детям собрать «биокомьютер», то есть вычислительное устройство из того, что валяется в прямом смысле под ногами. Так как дети не очень хорошо знают, как устроены вычислительные устройства, то обычно получается что-то вроде картинки под спойлером. Но некоторые всё же делают счёты или абак.
Биокомпьютер
А недавно я натолкнулся на описание модели компьютера, сделанной из бумаги, разработанную в 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 для загрузки программ со входной ленты
- Механизм вызова подпрограмм
- Программу для игры в Ним с одной кучкой (то есть, в игру Баше)
Ссылки
Видео с демонстрацией оригинала:
- Страница в Википедии: en.wikipedia.org/wiki/CARDboard_Illustrative_Aid_to_Computation
- Страница в Google+, посвященная компьютеру: plus.google.com/u/0/communities/105401067945055411018
- Материалы для самостоятельного изготовления компьютера: kylem.net/hardware/hardware.html
Источник: habrahabr.ru/post/222277/
Bashny.Net. Перепечатка возможна при указании активной ссылки на данную страницу.
Комментарии
Microsoft Surface 2 RT — мощный, классный, спорный
Отмена концерта "Behemoth". Россия - не светское государство?