169 похожих чатов

В закромах нашёл старый институтский проект. Решил переписать на vue/ts,

может кому будет интересно (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. Мобилки нет (просто не представляю как такой интерфейс должен выглядеть на мобильных устройствах)

1 ответов

12 просмотров

STC и CMC не работают. посмотрел в исходник - там ж-а. примерьі тоже г-о.

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта