Pull to refresh

Программируем «Мегапроцессор»

Abnormal programming *Assembler *Programming microcontrollers *
Tutorial
На Geektimes летом была статья про Megaprocessor — процессор из дискретных транзисторов и светодиодов, который весит полтонны и занимает всю гостиную в обычном таунхаусе под Кембриджем. Я решил воспользоваться своей географической близостью к этому мегапроекту, и запрограммировать для него что-нибудь презентабельное — например, спортировать для Megaprocessor мою предыдущую хабрапрограммку «Digital Rain».

Система команд Megaprocessor описана на сайте разработчика.

Большинство команд состоят из одного байта, за которым может следовать непосредственный операнд (один или два байта). Регистров общего назначения всего четыре (R0-R3), при этом они не равноправны: например, для команд доступа к памяти адрес должен быть либо в R2, либо в R3; а операнд — в одном из двух оставшихся регистров.

Программистам, привыкшим к системе команд x86 или ARM, набор команд Megaprocessor покажется крайне бедным: нет ни косвенной адресации «база+смещение», ни непосредственных операндов у арифметических команд (за исключением addq ±1, addq ±2). Зато есть пара неожиданных возможностей: отдельная команда sqrt, и режим .wt для команд сдвига, который заменяет результат суммой выдвинутых битов. Таким образом можно, например, парой команд ld.b r1, #15; lsr.wt r0, r1 вычислить количество единичных битов в r0 (вопрос, столь любимый собеседователями на работу!). Мнемоника ld для команды, загружающей в регистр непосредственное значение (вместо привычной по x86 или ARM мнемоники mov) указывает на способ её выполнения: фактически, с точки зрения процессора, выполняется ld.b r1, (pc++).

Итак, приступим.
Total votes 78: ↑76 and ↓2 +74
Views 16K
Comments 5

Британский инженер построил 500-килограммовый процессор из дискретных элементов. Этапы работы и интервью с создателем

Computer hardware DIY
Megaprocessor — это 16-битный процессор с четырьмя регистрами общего назначения. На отдельных панелях размещены схемы различного назначения, включая память, арифметический блок, ввод/вывод и другие. В системе используется 16-разрядный блок АЛУ и 16-разрядный сумматор. Megaprocessor оснащен 10 000 светодиодов, мигание которых демонстрирует каждый этап процесса вычислений, показывая направление движение данных по схеме. Объем памяти составляет 256 байт. Блок памяти включает 27000 транзисторов. Общее число транзисторов в системе превышает 40 тысяч. Масса процессора — 500 кг. Процессор работает на частоте 20 килогерц.


Читать дальше →
Total votes 43: ↑40 and ↓3 +37
Views 36K
Comments 55