Эмулятор своего 16 битного процессора на С++ и ассемблер в придачу.
#MinePcProcessor
#СвойПроцессор
#C
#Programming
#Программирование
Как то раз я играл в майнкрафт, и внезапно понял как работают процессоры... Сначала сделал несколько схем в игре, а потом понял, что хочу больше. Решил пойти с верху вниз.
1)Сначала разработать систему команд и ассемблер
2)Смоделировать процессор в эмуляторе с возможностью отладки программ, отладить и обкатать систему команд.
3)Смоделировать на основе процессора эмулятор компьютера, тоже все обкатать и отладить
4)Разработать логическую схему в точности по эмулятору. Добиться 100% совместимости с эмуляцией
5) Разработать электрическую схему просимулировать ее работу
6) Попытаться собрать руками
Так как я нуб в схемотехнике, то нужно разрабатывать максимально простую архитектуру, чтобы было как можно меньше элементов, поэтому я начал с 8бит. Но 8битное все, без всяких хаков и усложнений логики оказалось сложно превратить во что-то реальное, поэтому после реализации 8битного быстро понял, что нужно переходить на 16бит.
На данный момент обстановка такая:
Есть эмулятор процессора на С с возможностью отладки программы\ Точки останова\ выполнение кода по шагам
Есть компилятор асемблера на С с генерацией отладочных символов.
Процессор:
2 регистра 16бит 1 регистр чисто флаговый для обработки переполнения
ra - рабочий регистр, все активное взаимодействие происходит через него.
rb - буферный регистр, для временного хранения данных
rc - 0x00\0xff - при сложении двух чисел в регистр записывается 0xffff если произошло переполнение, аналог cary out
16битная адресация, что дает 65кб озу
все числа 16битные - что немного усложняет кодинг, но значительно упрощает реализацию. При желании мы можем программно реализовать работу с более широкими числами.
Числа пока в littleEndian, что мне не очень нравится, так как периодически ломает мозг. Я пока не занимался портированием компилятора и эмулятора на другие архитектуры, поэтому оставил родной для amd64 эндиан.
Работа с памятью происходит по два байта за раз. То есть читаем и пишем мы содержимое 16битного регистра.
16 команд процессора в основном однобайтовые, но две из них 3 байтовые, по факту они тоже одно байтовые, просто они читают следующие за собой 2 байта в качестве аргумента
hlt - стоп программы
8бит
swp - меняет местами значение регистров ra и rb
8бит
ld - загружает в регистр ra по адресу находящемуся в нем же два байта
8бит
rast - устанавливает в регистр ra константное значение
8бит аргумент 16бит
pt - записывает содержимое регистра ra по адресу
8бит аргумент 16бит
ptrb - записывает содержимое регистра ra по адресу в регистре rb
8бит
sum - суммирует содержимое ra и rb, если произошло переполнение в регистр rc выставляется 0xffff
8бит
cmp - сравнивает значения ra и rb , если значения равны то в ra записывает 0x0000, иначе 0xffff
8бит
jmp - условный переход, если в регистре ra = 0 то ничего не происходит, и переходит к следующей команде, иначе прыжок в адрес из регистра
8бит
and - логическое бинарное И между ra & rb результат сохраняется в ra
8бит
or - логическое бинарное ИЛИ ra | rb результат в ra
8бит
not - логическое бинарное отрицание значение в регистре rb, результат пишется в ra
8бит
rsh - бинарный сдвиг в право на 1 бит содержимого ra
8бит
lsh - левый сдвиг
8бит
cout - загружает в ra значение rc. значение rc - не меняется
8бит
nop - no operation - пропустить шаг и перейти к следующей команде
8бит
Компилятор и язык ассемблера:
Полное описание смотрите в посте, сюда не влезло:)
@-227502614-samodelnyi-processor
28 views
2793
859
7 hours ago 00:07:22 1
file:///storage/emulated/0/Download/Telegram/
9 hours ago 03:19:06 28
Эмулятор своего 16 битного процессора на С++ и ассемблер в придачу.
11 hours ago 00:24:24 1
file:///storage/emulated/0/DCIM/Camera/
11 hours ago 00:00:24 1
file:///storage/emulated/0/Movies/KineMaster/
12 hours ago 00:25:21 19
Плагин для электрогитары Neural DSP Archetype Nolly. Возможно лучший
3 days ago 12:17:14 21
Spyro: a hero’s tail (6+)
4 days ago 00:16:50 249
Игровая приставка Game Box
5 days ago 00:00:21 24
file:///storage/emulated/0/Download/Telegram/
5 days ago 00:00:35 18
file:///storage/emulated/0/Download/Telegram/
5 days ago 00:08:36 1
Взял 1ю отметку на Драконья Кавалерия
7 days ago 00:00:03 1
Турбосушка Через эту постоянную рубрику я экономлю твоё время и делаю выжимку по важным крипто-активностям и событиям
1 week ago 00:13:54 1
Assassins Creed Bloodlines PC
1 week ago 00:28:24 96
[Nazo’s Refuge] Обзор на Sonic x Shadow Generations
1 week ago 00:02:09 3
Как зарабатывать на бк 🔴 Секреты заработка на домашнем компьютере
1 week ago 00:02:13 26
[Salys] КАКОЙ ЭМУЛЯТОР ЛУЧШЕ? BLUESTACKS ИЛИ LD PLAYER!!!
1 week ago 00:58:26 415
Десятки ТЫСЯЧ игр в ретро монстре с OLED экраном а так же PS2/Switch/Стриминг игр с ПК👉Anbernic RG55
1 week ago 00:07:01 784
“Я НЕНАВИЖУ ТЕБЯ 🤬“ Super Mario world I HATE YOU
2 weeks ago 00:03:21 12
[Kennik Play] НАСТРОЙКА ИГРЫ LifeAfter Night falls НА ЭМУЛЯТОР БЛЮСТАК !
2 weeks ago 00:11:57 1
Killzone — ВСЁ. Воскрешение DriveClub. Sony проиграла читерам. Новости PlayStation за неделю.
2 weeks ago 00:03:36 1
Выбиваю модификацию на ИС-4 #СЕРГУНЯ40RUS #tankcompany #танккомпани
2 weeks ago 00:09:41 8
Взял Маршал-герой на AMX 10 RC
2 weeks ago 00:52:47 2
file:///storage/emulated/0/Movies/
2 weeks ago 02:36:06 1
Silent Hill 3 (2003) (PS2)➤7 серия➤Завершение истории
2 weeks ago 00:01:20 7
ПРОСТОЙ ЗАРАБОТОК ВИДЕО 🔔 ЗАРАБОТОК НА ДОМУ С ЕЖЕДНЕВНЫМИ ВЫПЛАТАМИ БЕЗ ВЛОЖЕНИЙ С ВЫВОДОМ