Эмулятор своего 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
51 view
2607
717
2 days ago 00:02:05 1
file:///storage/emulated/0/Download/ДОМ В БЫКОВО./ОТЗЫВ. ДОМ В БЫКОВО.mp4
2 days ago 00:01:04 1
📢 КАК ЗАРАБОТАТЬ 300 РУБЛЕЙ В ИНТЕРНЕТЕ ⛔ КАК МОЖНО ЗАРАБОТАТЬ 5000 РУБЛЕЙ 🚫
2 days ago 00:09:17 18
О Nintendo и эмуляторах
2 days ago 00:36:21 270
Творим очередной эмулятор Dendy/Nes/Famicon. Процессор. 01
3 days ago 00:01:10 4
[TPG I Trey Plays Games] ❓ Как быстро и просто установить заменить поставить аватарку Standoff 2 в эмуляторе Bluestacks 2020
3 days ago 00:01:54 9
ГТА 4 прикольный случай с Эдди Лоу. Русская озвучка
3 days ago 00:28:56 7
МОЙ ПЕРВЫЙ ДОМ В МОБИЛЬНОМ РАСТЕ (RUST MOBILE) ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:32:42 433
РЕЙД МНОГОЭТАЖНОЙ КРЕПОСТИ И МОТОЦИКЛ - УБИЙЦА ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:20:21 358
НОВОЕ ВЫЖИВАНИЕ С НУЛЯ ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:27:59 22
ВЗОРВАЛ СОСЕДА И УГНАЛ ТАЧКУ ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:14:19 15
РЕШИЛ ДОРЕЙДИТЬ И НЕ ОШИБСЯ ➤ Last Day Rules Mobile / Мобильный РАСТ на Андроид
3 days ago 00:16:59 35
БОГАТЫЕ ДОМИШКИ ВОЗЛЕ РТ ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:13:13 22
ПРОЖИЛИ ОДИН ДЕНЬ ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:20:28 265
ЗАЧЕМ ФАРМИТЬ КОГДА МОЖНО ОТНЯТЬ ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:18:39 33
РЕЙД НАГЛОГО КЛАНА ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:25:59 3
ВЗОРВАЛИ ХАТЫ В ПЕРВЫЙ ДЕНЬ ВАЙПА ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:18:32 4
ВОЙНА ТРЕХ КЛАНОВ ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:23:29 284
ВОРВАЛИСЬ НА ВЕРТОЛЕТЕ И ЗАРЕЙДИЛИ В ОНЛАЙНЕ! ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:36:57 27
ЗАРЕЙДИЛ НАРУШИТЕЛЕЙ ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:20:15 155
СОРВАЛИ КУШ В ПЕРВЫЕ ДНИ ВАЙПА ! ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:16:25 5
ОНИ ЗАБЫЛИ ВКЛЮЧИТЬ ТУРЕЛИ! ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:19:51 12
РЕЙД БУНКЕРОВ И ДОМОВ ОБМАНОК ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:24:19 222
РЕЙДЫ С ВЕРТУШКИ! ➤ Last Island of Survival #LIOS #LDRS #RustMobile
3 days ago 00:30:09 27
НАШ РАЙОН! ➤ Last Island of Survival #LIOS #LDRS #RustMobile