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 ньюанса:
    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-ричной системе счисления
Description
Программная отладка процессора DP32
Readme 226 KiB
Languages
Python 100%