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 для загрузки программ со входной ленты
    • Механизм вызова подпрограмм
    • Программу для игры в Ним с одной кучкой (то есть, в игру Баше)


    Ссылки


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


    Поделиться публикацией
    Комментарии 35
      +69
      Это явно лучший бумажный ПК, что я видел.
      Моим прошлым фаворитом был: image
        +8
        Точняк, это и мои предыдущий бумажный ПК. Прям ностальгнуло, до дыр зачитывали с братом.
          +15
          Главное не забыть диплом сделать.
          image
            +1
            Aww, та самая книга! Перечитать, что-ли… :)
              +1
              Я как раз вспомнил об этом. Такая же книга была =)
            • НЛО прилетело и опубликовало эту надпись здесь
                0
                Русский не помешает точно.
                  +7
                  Совершенно не факт что речь только о детях. Эта модель позволяет наглядно объяснить особенности вычислительных машин, которые не понимают многие взрослые, доселе не знакомые с программированием.

                  Например, ограниченность «внимания» машины. Для человека задание вроде «в заданной строке посчитать количество букв А, идущих следом за Б, но перед В» может выглядеть возмутительно легким («что тут сложного, смотри да считай!»). Он может не понимать, что в один момент времени машина может смотреть только на одну букву.

                  Поэтому, когда внимание самого человека ограничивают такими окошечками, все становится на свои места. Потом уже можно поговорить на тему размеров окошек и почему нельзя/не выгодно сделать машину, которая «смотрела» бы на всю строку.
                  • НЛО прилетело и опубликовало эту надпись здесь
                      +4
                      К сожалению, да. Мне кажется, одна пара в институте, потраченная на вырезание, склейку и баловство с таким компьютером, была бы куда полезнее семестров бездумного перепечатывания и списывания программ. Многие студенты не переваривают программирование просто потому, что не понимают, зачем все это и почему выглядит именно так.
                      • НЛО прилетело и опубликовало эту надпись здесь
                    +2
                    При помощи этого устройства можно было бы обучить ребёнка ассемблеру.
                    • НЛО прилетело и опубликовало эту надпись здесь
                        +15
                        Объективно говоря, ассемблер проще, чем языки высокого уровня. Именно потому, что не вносит абстракций. Дети вполне успешно играют в настольные игры, где значение регистра команд задается фишкой, приращение выпавшей на костях суммой, а сама программа написана в клеточках доски.

                        Хотелось бы услышать комментарий Milfgard. Чисто теоретически, Мосигра могла бы выпустить отечественный вараинт подобной штуковины, но представленный в виде игры? Заменить «программу» на «задание», «регистры» на «ячейки», придумать осмысленный сюжет и детей можно будет увлечь.
                        • НЛО прилетело и опубликовало эту надпись здесь
                            +3
                            Все индивидуально. Мы с отцом в таком же возрасте делали светофор на 86м процессоре (ага, хардкор, тогда еще контроллеров не было; отдельно процессор, отдельно память, и т. д.), который программировал я. Ничего непостижимого нет, если правильно описать «что» и главное «зачем».
                            • НЛО прилетело и опубликовало эту надпись здесь
                          +2
                          Ну, я начал изучать ассемблер в 13 лет, это был мой первый ЯП… Признаюсь, по началу было сложно, перечитывал первые страницы книги по нескольку раз, особенно учитывая, что компа у меня не было, но буквально через 3-4 раза перечитывания как-будто осенило и понеслось :) Эх, ностальгия… :'(
                          • НЛО прилетело и опубликовало эту надпись здесь
                              0
                              Ассемблер? По нескольку раз? Ну тупой ребёнок, чо. Я вот, взрослый дядя, раз сто перечитывал мануалы по монадам в ФП, до сих пор не понял ни хрена
                                +2
                                Эх ). Помню писал в 13 лет программы на листочке на ассемблере Z80, потом вводил в комп и они работали.
                                  +4
                                  Аналогично, только компа у меня не было очень долго) Была куча исписанных исходниками тетрадок, все компилировалось и исполнялось в голове)) Однажды даже писал письмо (бумажное) в журнал Мир ПК, в котором в одном из номеров был опубликован по результатам конкурса самый короткий код на асме, рисующий фрактал Мандельброта, мне удалось его сократить на пару байт (еще мне не понравилось использование сопроцессора, что я считал не тру, но не суть, условия допускали), только я не мог проверить его работоспособность, отправил его им, а взамен попросил прислать мне или опубликовать в журнале инфу по работе то ли с мышью, то ли каким-то другим железом, уже точно не помню (интернета то не было, да и в печати хрен что найдешь), в итоге ответили письмом с распечатками того, что я просил, я был дико счастлив :)))
                                    +3
                                    Да у вас голове свой компьютер ))
                          +1
                          Эх, ностальгия. А у меня фотоаппарат был бумажный)
                            +1
                            Из спичечного коробка можно сделать неплохую пинхол камеру.
                            +3
                            Напомнило :) (смотреть с 4:20)
                              +1
                              Можно написать короче: бумажный компьютер реализует простейшую архитектуру фон-Неймана. Все остальные подробности — для тех, кому еще предстоит понять асм. Статья отличная (наверное? только для кого?), но многабукаф.

                              Кстати, в вышеупомянутой книжке про фортрана тоже было что-то подобное, что нужно было вырезать и идти по блок-схеме. Я как раз благодаря той схемке открыл для себя в 8 лет, что такое алгоритм.
                                –6
                                Кстати, для raspberry pi есть бумажный кейс :)

                                (кликабельно)
                                  +2
                                  Это большое достижение, очень хорошее
                                    –1
                                    Ребята, если вам не понравился комментарий, то это не повод сливать мне карму.
                                    0
                                    ИХМО, более полезным было бы что-то вроде ДЛМ (детской логической машины) с состояниями.
                                      +4
                                      Кто прикрутит сюда ардуину, карандаш и распознавание символов через вебкамеру?

                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                    Самое читаемое