Эмулятор 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
48 views
3378
1272
5 hours ago 00:34:49 4
Sub-Terrania
12 hours ago 00:29:28 7
The Addams Family
1 day ago 00:06:01 25
150 Open Orbit ✦ Сайлус во второй половине
1 day ago 00:03:47 1
file:///storage/emulated/0/DCIM/ScreenRecorder/
1 day ago 00:00:09 1
file:///storage/emulated/0/DCIM/ScreenRecorder/
1 day ago 00:01:15 1
file:///storage/emulated/0/DCIM/ScreenRecorder/
1 day ago 00:08:49 565
[Fan PDA] ТОП 20 ЛУЧШИХ ИГР НА АНДРОИД (2020-2024)
2 days ago 00:55:59 1K
[GAMER NO 1] ShadPS4 | Test In 60 Games | PS4 Emulator On PC
2 days ago 00:36:21 271
Творим очередной эмулятор Dendy/Nes/Famicon. Процессор. 01
3 days ago 00:47:50 1
file:///storage/emulated/0/Movies/youcut/
3 days ago 00:07:19 1
file:///storage/emulated/0/DCIM/Screenshots/
4 days ago 00:09:07 1
file:///storage/emulated/0/DCIM/ScreenRecorder/
4 days ago 02:50:26 51
Эмулятор своего 16 битного процессора на С++ и ассемблер в придачу.
4 days ago 00:44:13 54
Aaahh!!! Real Monsters
5 days ago 00:03:42 1
file:///storage/emulated/0/DCIM/Screenshots/
6 days ago 00:00:34 10
Игровая консоль Trimui SMART Pro 64G (Предзаказ)
1 week ago 00:00:48 12
Игровая консоль powkiddy X55 16+64 (Предзаказ)
1 week ago 02:35:19 1.6K
Как ТАЩИТ игры Asus ROG Flow z13 в сравнении с OnexPlayer x1 и Эмуляция PS3/PS4 🔥Bloodborne🔥ShadPs4
1 week ago 00:00:58 1
file:///storage/emulated/0/DCIM/ScreenRecorder/
1 week ago 00:29:02 753
Гитарный процессор HOTONE Ampero One (много пресетов и драм-машина)