Всe эти дни я усердно работал над своим RISC-процессором.
Упростил его до предела в рамках выбранной концепции.
Теперь основных групп команд сократилось до девяти, включая группу АЛУ.
Регистровый файл расширен с трёх до четырёх групп регистров общего назначения.
Четвёртая D-группа представляется внешними устройствами - Devices, что позволяет обращаться к устройствам типа клавиатура или джойстик непосредственно и в скором порядке, как кэш-периферия первого уровня с мгновенным доступом. Более медленные устройства требуется проецировать в адресное пространство памяти.
Тем самым, процессор теоретически пригоден для построения любого автомата, типа «Ну, Погоди!», «Тетриса» или «Лунохода».
Конечно, демонстрационный код довольно прост и скуден. Но он демонстрирует базовые возможности процессора и взаимодействие с периферией.
В архиве имеется также HTML-файл дизассемблера, который поможет поверхностно вникнуть в принципы кодирования команд.Код:Система команд процессорного устройства разрабатывалась максимально прозрачной для понимания на уровне машинного кода в своём шестнадцатеричном представлении как есть визуальным сочетанием своих нибблов в форме элементарных аббревиатур. Кодирование алгоритма малой степени сложности доступно пользователю с базовыми навыками редактирования таблиц дампа и не представляет особой сложности в силу максимально осмысленного кодирования всех инструкций в шестнадцатеричном виде. ------------------------------------------------------------------------------ |Код команд / диапазоны|Группа |Описания, замечания, комментарий -----------------------|----------|------------------------------------------- 00 |HLT |Прекращение счёта указателем команд IP 01-99 |ADD Ri,BCD|Двоично-десятичное накопление в регистр 0A-9F |ALU Ri,Tk |Операция АЛУ с комбинацией аргументов A0-A9 B0-B9 C0-C9 D0-D9|REG Rn |Установка индекса активного регистра группы AA-AD BA-BD CA-CD DA-DD|ARG Ri,Tj |Выбор комбинации аргументов операциям АЛУ AE BE CE DE |EXT Ri |Экстракция данных из внешнего ОЗУ в регистр AF BF CF DF |FIX Ri |Фиксация значения регистра во внешнее ОЗУ E0-E7 |EX0-7 |Переход на адрес 0xE000-0xE700 E8-EF |Ecnd |Выполнение следующей команды по условию F0 |FIN |Завершение с переходом на адрес Базы:Счёта F1-FF |FN1-15 |Переход на адрес 0xF000-0xFF00 ------------------------------------------------------------------------------ (n - устанавливаемый индекс, указанный битами команды) (i или j - индекс, установленный раннее) (k - индекс регистра временно берётся из старшего ниббла кода команды) Группы регистров A0-A9, B0-B9 и C0-C9 составляют внутренний регистровый файл с безусловным доступом к ним на программном уровне. Регистры B0-B9 хранят "Базу" для обращения к памяти блоком в 256 байт, а регистры C0-C9 - счёт байта блока. Инструкция с кодом F0 помещает текущий адрес указателя инструкций из IP в B0 и C0, а значения из Bi и Cj помещает в IP, производя переход на адрес Bi:Cj. Тем самым, можно обращаться к коду подпрограмм и знать адрес возврата через B0:C0. Группу регистров D0-D9 составляют внешние Device-устройства с непосредственным использованием в качестве операндов. Не рекомендуется активно использовать эту группу в любых вычислительных действиях, так как нет гарантии работы программ.




Ответить с цитированием