Эмулятор своего 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
63 views
3604
1185
3 hours ago 00:16:50 87
Игровая приставка Game Box
10 hours ago 00:06:22 1
file:///storage/emulated/0/Download/Обзор на новинку (Warhammer 40,000_ Space Marine 2).mp4
18 hours ago 03:56:57 63
Эмулятор своего 16 битного процессора на С++ и ассемблер в придачу.
23 hours ago 00:00:21 4
file:///storage/emulated/0/Download/Telegram/
23 hours ago 00:00:35 4
file:///storage/emulated/0/Download/Telegram/
2 days ago 00:08:36 1
Взял 1ю отметку на Драконья Кавалерия
3 days ago 00:00:03 1
Турбосушка Через эту постоянную рубрику я экономлю твоё время и делаю выжимку по важным крипто-активностям и событиям
3 days ago 00:13:54 1
Assassins Creed Bloodlines PC
3 days ago 00:28:24 45
[Nazo’s Refuge] Обзор на Sonic x Shadow Generations
5 days ago 00:02:09 3
Как зарабатывать на бк 🔴 Секреты заработка на домашнем компьютере
6 days ago 00:02:13 20
[Salys] КАКОЙ ЭМУЛЯТОР ЛУЧШЕ? BLUESTACKS ИЛИ LD PLAYER!!!
6 days ago 00:58:26 403
Десятки ТЫСЯЧ игр в ретро монстре с OLED экраном а так же PS2/Switch/Стриминг игр с ПК👉Anbernic RG55
6 days ago 00:07:01 549
“Я НЕНАВИЖУ ТЕБЯ 🤬“ Super Mario world I HATE YOU
7 days ago 00:03:21 12
[Kennik Play] НАСТРОЙКА ИГРЫ LifeAfter Night falls НА ЭМУЛЯТОР БЛЮСТАК !
1 week ago 00:11:57 1
Killzone — ВСЁ. Воскрешение DriveClub. Sony проиграла читерам. Новости PlayStation за неделю.
1 week ago 00:03:36 1
Выбиваю модификацию на ИС-4 #СЕРГУНЯ40RUS #tankcompany #танккомпани
1 week ago 00:09:41 8
Взял Маршал-герой на AMX 10 RC
1 week ago 00:52:47 2
file:///storage/emulated/0/Movies/
1 week ago 02:36:06 1
Silent Hill 3 (2003) (PS2)➤7 серия➤Завершение истории
1 week ago 00:01:20 6
ПРОСТОЙ ЗАРАБОТОК ВИДЕО 🔔 ЗАРАБОТОК НА ДОМУ С ЕЖЕДНЕВНЫМИ ВЫПЛАТАМИ БЕЗ ВЛОЖЕНИЙ С ВЫВОДОМ
1 week ago 00:00:15 4
ГТА 4 Мусор какой-то жест показывает пальчонками своими. Ролик-коротыш
1 week ago 00:09:23 1
Quarth (Last Life # 122)
6 days ago 04:16:06 40
Silent Hill | PlayStation 32-bit | Прохождение на ХОРОШУЮ КОНЦОВКУ +
2 weeks ago 02:06:16 1
Silent Hill 3 (2003) (PS2)➤6 серия➤Леонард, Дуглас и Воспоминание Алессы