может кому будет интересно (github.com/rokkerruslan/i8080). Что за проект?
В институте писали под Intel 8080 (во многих институтах изучают это старьё, так как принципы не поменялись, а проц простой), но в эмуляторе была проблема, не работала инструкция JC (если знаете на базовом уровне как работает cpu то понимаете что многие алгоритмы писать не удобно, а для обучения удобство главное). Ну и я решил реализовать свой.
В целом он работал, но хреново (небыло многих нужных вещей). И тут опа, попадается мне на глаза (3 года как закончил институт). Я тут же расчехлил vue и typescript, быстро нарисовал интерфейс, несколько выходных и уже вышло что-то готовое.
Хоть и переписан был в быстром темпе, но всё же нашлось время на такую штуку как отладчик, так что можете заценить.
Итого, что есть:
- Ассемблер - связка лексического/синтаксического анализатора, вычислителя и кодогенератора.
- Эмулятор - тут особо нечего сказать, эмулятор как эмулятор, только имеется поддержка останова цикла выполния инструкций для точек останова (debugger).
- Редактор - связыват работу двух предыдущих компонент.
Всё работает очень просто, пишите программу, нажимаете Go, далее пройдёт цикл ассеблирования, загрузки исполняемого файла в память эмулятора и начнётся собственно выполнение. Можно выполнять программу по шагам или продолжить выполнение до следующей точки останова (частота выборки меняется в поле `frequency`).
Отладка - работает как в обычных gui редакторах - клик мышкой по области левее строки, как только выполнение дойдёт до этой инструкции cpu встанет (внутри работает достаточно сложно из-за необходимости поддержки со стороны всё трёх компонент, от ассемблера нужна генерация отладочной информации (какая инструкция на какой строке), от эмуторятора - способ остановки выполнения, от редактора - визуализаций брейкпоинтов и интерфейс для их переключения, но эти сложности упрятаны..
Интерфейс позволяет просматривать полное состояние CPU на всём этапе исполнения программы, значения регистров (program counter, stack pointer, accumulator etc), флагов состояния процессора, а как же любого участка памяти. При этом, когда выполнение приостановлено можно менять эти значения. Посылать прерывания можно и во время выполнения. Реализация интерфейса использует vue.
Бред? Да, бред, спросите зачем? Просто по фану. Много людей в институте обучается на i8080, может кому и пригодиться. Да и как пример hello-world приложения на vue которое чуть больше чем 10 строчек кода (суммарно весть проект без yarn.lock менее 10к строк кода).
На странице examples, есть примеры программ. Можете запустить локально, ничего не надо кроме node/yarn (всё работает в браузере).
have fun.
P.S. Ссылочка на github page - rokkerruslan.github.io
P.S.2. Переписывал в торопях (практически в одну итерацию), будет некое кол-во регрессий.
P.S.3. Мобилки нет (просто не представляю как такой интерфейс должен выглядеть на мобильных устройствах)
STC и CMC не работают. посмотрел в исходник - там ж-а. примерьі тоже г-о.
Обсуждают сегодня