Программирую на C++ эмулятор Своего 8 битного процессора.
#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
104 views
3199
1221
2 months ago 00:29:03 1
Как Hustle-Культура делает нас несчастными?
2 months ago 00:28:07 6
Женское счастье. Имрам о том, что лежит в основе женской гармонии
2 months ago 00:04:17 1
1 Знакомство с сервисом GREEN API и регистрация
2 months ago 00:06:04 1
5. Проверка аккаунта whatsapp по номеру телефона через API
2 months ago 00:03:16 1
2 Создание инстанса разработчика, обмен м/у 1C и WhatsApp
2 months ago 00:07:58 1
4. Отправка сообщения из 1C в группу WhatsApp
2 months ago 00:01:22 1
3. Отправка сообщений из 1С в личку собеседника Whatsapp
3 months ago 00:00:58 1
Энергия Бога Как Чувствовать Его за пределами своего понимания разума и логики?
3 months ago 00:30:02 1
Ваш прекрасный разум. Ричард Радд.
3 months ago 01:44:32 1
Философия поколений. Как Z живет в мире, построенном Y, управляемым X... и про Наруто
3 months ago 02:05:24 1
Как кино программирует будущее.
3 months ago 00:23:55 1
Скрытая причина ВСЕХ НЕУДАЧ и НЕСБЫВШИХСЯ ЖЕЛАНИЙ
3 months ago 00:32:17 1
Как программируют неграмотность наших детей. Людмила Ясюкова.
3 months ago 01:17:30 1
Как работает КАРМА на самом деле? (12 секретов которые вы о ней точно не знали)
3 months ago 00:09:43 1
НОВЫЙ Claude 3,5 Sonnet – Как использовать “Computer Use”?
3 months ago 01:16:21 10
Как программисту попасть в Яндекс в 24 года? Все корпорации зло или стартапы умерли?
3 months ago 00:42:12 1
ЖДАНОВ В. Г. Жить в трезвости!
3 months ago 00:15:21 1
КАК ТЕБЯ ПРОГРАММИРУЮТ‼️МОЩНОЕ ТРАНСФОРМИРУЮЩЕЕ ВИДЕО‼️#осознанность #духовность #медитация #деньги
3 months ago 00:27:53 1
ПОЧЕМУ МЫ НЕ МОЖЕМ ИЗБАВИТЬСЯ ОТ ТРЕВОЖНОСТИ. Проблемы, причины и РЕШЕНИЕ!
3 months ago 01:05:16 1
А Ракицкий. Установка на долгую и здоровую жизнь. Омоложение организма. Гипноз с переходом в сон.
3 months ago 00:41:47 1
Подсознание: Что скрывает твой ум?
3 months ago 00:17:43 1
Как выйти из матрицы? Научное объяснение астрологии и нумерологии.
3 months ago 02:39:57 1
ТЫ СОЗДАЛ ВЕСЬ ЭТОТ МИР
3 months ago 00:25:36 1
Просто слушай и худей / саблиминал для похудения / снижения веса / стройная фигура