CARDboard Illustrative Aid to Computation (CARDboard Illustrative Aid to Computation)
CARDIAC (англ. CARDboard Illustrative Aid to Computation — «Картонное Наглядное Пособие по Вычислениям») — учебная модель компьютера, сделанная из бумаги, разработанная Дэвидом Хагельбаргером и Солом Фингерманом в 1968 для Bell Telephone Laboratories в целях обучения студентов принципам работы компьютера.
То есть на самом деле это не совсем компьютер, так как проводником сигналов, а также АЛУ в нем выступает человек. Тем не менее, он позволяет понять некоторые принципы, лежащие в основе современной вычислительной техники.
Компьютер «функционирует» с помощью карандаша и бумажных полос. Любые вычисления происходят в голове пользователя данного компьютера. Компьютер использует десятичную систему счисления. Значения хранятся в 100 ячейках памяти, которые хранят вписанные цифры от 0 до ± 999. Используется набор из 10 команд, которые позволяют CARDIAC складывать, вычитать, проверять, сдвигать, вводить, выводить и перескакивать ячейки памяти.
Устройство
[править | править код]CARDIAC состоит из двух блоков — памяти и процессора. В процессорный блок вставлены 4 бумажные полоски, с помощью которых нужно выбирать выполняющуюся инструкцию. Кроме этого, в блок памяти вставляется лента, куда происходит вывод, а в процессор — лента со входными данными.
Компьютер имеет 100 ячеек памяти с адресами от 00 до 99. Каждая из них может быть использована для хранения одной инструкции или одного трехзначного числа. Любая из ячеек может быть перезаписана, так что при желании можно даже написать самомодифицирующуюся программу. Ячейка 0 принадлежит к «ПЗУ», всегда содержит «1». Ячейки с 1 по 98 принадлежат к «ЗУПД», в них хранятся инструкции и данные. Ячейка 99 наиболее похожа на «EEPROM».
Значения в ячейки заносятся в десятичной системе счисления от 0 до ±999 с помощью карандаша, а модифицируются с помощью карандаша и ластика. В качестве счетчика инструкций используются «божья коровка». Она вставляется в специальные отверстия, пробитые около каждой из ячеек памяти.
Программирование
[править | править код]CARDIAC может «выполнять» 10 различных инструкций машинного языка (с кодами от 0 до 9). Каждая инструкция кодируется с помощью трехзначного десятичного числа. Первая цифра (O) — это всегда код операции. Остальные две цифры (A) представляют собой адрес ячейки, которой оперирует инструкция. Инструкции позволяют переносить содержимое аккумулятора в ячейку, содержимое ячейки в аккумулятор, вводить информацию с входной ленты в ячейку памяти и выводить информацию из ячейки памяти в выходную ленту.
OAA
Для CARDIAC не существует высокоуровневых языков программирования, так как цель проекта показать работу простейшего процессора.
Программы пишутся вручную и записываются карандашом в ячейки памяти.
Система команд
[править | править код]Код операции | Сокращение | Инструкция | Описание |
---|---|---|---|
0 | INP | Ввод | запись содержимого входной ленты в ячейку памяти. |
1 | CLA | Загрузить | очищает аккумулятор и переносит в него содержимое ячейки памяти. |
2 | ADD | Сложение | прибавление содержимого ячейки памяти к аккумулятору. |
3 | TAC | Условие | проверка значения содержимого аккумулятора; переход по заданному адресу, если значение аккумулятора отрицательное. |
4 | SFT | Сдвиг | операция сдвига аккумулятора влево и вправо на заданное число десятичных разрядов |
5 | OUT | Вывод | запись содержимого ячейки памяти в выходную ленту. |
6 | STO | Сохранить | очищает ячейку памяти и переносит в неё содержимое аккумулятора. |
7 | SUB | Вычитание | вычитание содержимого ячейки памяти из аккумулятора. |
8 | JMP | Прыжок | безусловный переход по заданному адресу. Номер активной ячейки хранится в ячейке 99. Это позволяет выполнять возврат из подпрограмм. |
9 | HRS | Остановка и сброс | переход по заданному адресу, затем следует завершение программы. |
Операции
[править | править код]Человек последовательно выполняет инструкции, в чем и заключается функционирование компьютера. Перед началом выполнения, необходимо посмотреть где находится «божья коровка» (то есть счетчик инструкций) и перемещая полоски набрать значение из этой ячейки памяти в окошке «Instruction Register». Дальше необходимо следовать по стрелкам, начиная с надписи «Start» и выполнять все предписания. Вычисления (сложение, вычитание и сдвиг) придется выполнять вручную. Для этого рядом с надписью «Accumulator» есть несколько окошек, позволяющих выполнять сложение/вычитание в столбик.
Сообщество
[править | править код]Сообщество пользователей CARDIAC в Facebook и Google+
См. также
[править | править код]- Little man computer (иной набор основных инструкций)
Ссылки
[править | править код]- http://habrahabr.ru/post/222277/
- http://www.sourceforge.net/projects/cinc/ - симулятор на Java.
- http://www.kaleberg.com/software/cardiac/ - симулятор для Macintosh, Windows (не протестирован), и Linux (не протестирован). В наличии редактор, простой ассемблер, и примеры.
- https://www.youtube.com/watch?v=CW96m7R0u-s
- https://web.archive.org/web/20140904060142/http://www.drdobbs.com/embedded-systems/cpu-design-on-paper/240153480
- https://web.archive.org/web/20140904050728/http://www.drdobbs.com/embedded-systems/paper-to-fpga/240155922