55 lines
4.9 KiB
Markdown
55 lines
4.9 KiB
Markdown
# DP32-proto
|
||
|
||
Прототип эмулятора процессора DP32
|
||
|
||
## Описание
|
||
|
||
Это проект программной эмуляции и отладки процессора DP32 на языке python. В этом проекте можно найти 2 компонента - отладчик dp32dbg и эмулятор dp32emu. Первый полностью опирается на отладочную информацию в следующем формате. Это очень простой отладчик и очень нестабильный, поскольку писался с упором на скорость, а не на качество.
|
||
|
||
```json
|
||
{
|
||
"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 ньюанса:
|
||
1. Они они не могут быть установлены на комментарии или пустые строки. Если на строке больше одной операции, точка будет установлена на самую раннюю
|
||
2. Когда виртуальная машина встретит точку останова, временно она не сможет выполнять команду continue, поскольку не предусмотрено ротации точек останова. Если нужно продолжить выполнение программы дальше - выполните одну команду step
|
||
- `continue/c` - выполняет программу до ближайшей точки останова
|
||
- `reset` - сбрасывает состояние виртуальной машины и ее память, но не точки останова
|
||
- `run` - сбрасывает состояние виртуальной машины и запускает выполнение кода
|
||
- `cbp` - очищает все точки останова
|
||
- `print/p <reg>` - печатает содержимое регистров. Регистры записываются в формате `r1-r255`, позволяет также посмотреть адреса меток (указав название меток в качестве параметра) и системные регистры: pc, cc
|
||
- `inspect/i <size> <amount> <place>` - печатает содержимое памяти по определенному адресу в определенном формате (строчная - знаковые, заглавная - беззнаковые): b/B - байт, h/H - полуслова - 16 бит, w/W - слова - 32 бита. `amount` - количество подряд идущих ячеек, содержимое которых нужно прочитать. `place` - место, с которого следует начать печать. Можеть представлять собой либо имя метки, либо полный адрес в десятичной или 16-ричной системе счисления
|
||
|