4.9 KiB
4.9 KiB
DP32-proto
Прототип эмулятора процессора DP32
Описание
Это проект программной эмуляции и отладки процессора DP32 на языке python. В этом проекте можно найти 2 компонента - отладчик dp32dbg и эмулятор dp32emu. Первый полностью опирается на отладочную информацию в следующем формате. Это очень простой отладчик и очень нестабильный, поскольку писался с упором на скорость, а не на качество.
{
"src": "absolute/path/to/source"
"labels" : {
"label1": 1
"label2": 2
...
},
"instructions" : {
"<offset-in-words>" : {
"lenght": 2,
"srcline": 3
}
...
}
}
Установка
Стяните данный репозиторий и выполните в корне проекта команду pip install .
Использование
После установки у вас появятся 2 программы:
- dp32emu - программный эмулятор процессора dp32. Принимает на вход бинарный файл с командами dp32, выполняет их и в результате своей работы выдает дамп памяти процессора после завершения работы
- dp32dbg - отладчик, опирающийся на вышеуказанный эмулятор. Позволяет выполнять действия пошаговой отладки и предоставляет базовую функциональность точек останова (но с ньюансами)
Посмотреть инструкцию по запуску проще всего передав флаг -h каждой из этих программ
Использование отладчика
help не встроен в отладчик, поскольку до этого его функционал не был документирован. Приведу здесь основной набор команд отладчика
step/s- выполняет одну инструкцию, на которую сейчас указывает регистр pc виртуальной машиныbreakpoint <lineno>- устанавливает точку останова на определенной строке исходного кода. С точками останова 2 ньюанса:- Они они не могут быть установлены на комментарии или пустые строки. Если на строке больше одной операции, точка будет установлена на самую раннюю
- Когда виртуальная машина встретит точку останова, временно она не сможет выполнять команду continue, поскольку не предусмотрено ротации точек останова. Если нужно продолжить выполнение программы дальше - выполните одну команду step
continue/c- выполняет программу до ближайшей точки остановаreset- сбрасывает состояние виртуальной машины и ее память, но не точки остановаrun- сбрасывает состояние виртуальной машины и запускает выполнение кодаcbp- очищает все точки остановаprint/p <reg>- печатает содержимое регистров. Регистры записываются в форматеr1-r255, позволяет также посмотреть адреса меток (указав название меток в качестве параметра) и системные регистры: pc, ccinspect/i <size> <amount> <place>- печатает содержимое памяти по определенному адресу в определенном формате (строчная - знаковые, заглавная - беззнаковые): b/B - байт, h/H - полуслова - 16 бит, w/W - слова - 32 бита.amount- количество подряд идущих ячеек, содержимое которых нужно прочитать.place- место, с которого следует начать печать. Можеть представлять собой либо имя метки, либо полный адрес в десятичной или 16-ричной системе счисления