Open qboneteam opened 5 years ago
Практическое применение в чём?
Пролистать вперёд и назад, отслеживая регистры и такты процессора. На самом деле было бы круто если бы можно было нажать на кнопку "логировать", и в какой-то момент "сохранить лог" ( с одновременной остановкой). Логировать в память, а не сразу на диск. Возможно формат типа csv. Pc,sp, regs,regsX,regs', tick Столбики подписаны в первой строке, в каждой строке без подписей, чтобы ширина была фиксированной, только последний столбец с тактами был расширяемым. Возможно, регистры и по выбору (не всегда вся куча нужна).
Само собой, буфер не безграничный, а, например, на два-три прерывания, или на секунду.
А можно было бы кольцевой буфер иметь, например, в 100000 позиций, или сколько там в настройках впишут, и по ходу исполнения кода туда писать значения регистров (в шестнадцатиричном виде) и кое-чего еще (длительность - десятичная), возможно- положение луча, возможно - содержимое внутренних состояний AY, возможно - значения регистра #FE (или каких-то других,которые нужны, тот же covox).
Регистры можно без выбора - их не так и много
PCPC,
Состояние рилтайм параметров типа входа с магнитофона, состояния клавиш, состояние AY (0 или 1 в каждом из каналов) - может быть архиполезно видеть в виде истории, по которой можно скролить назад-вперёд. Текущее состояние и прокатка допустим AY ещё возможна, но если это тот же вход с магнитофона (через line-in) - его невозможно трассировать как-то иначе. И невозможно отладить какой-нибудь альтернативный загрузчик.
Лог выполнения нашёл только в SpecEmu, им и пользуюсь. Удобно для ковыряния в чужом бинарнике, чтобы понимать откуда куда идёт выполнение. По точке останова далеко не всегда сразу ясно, где была к примеру, процедура вызвана, особенно, если не через call, а просто jmp.
Просто лог как файл мало кто сможет прочитать. Но вообще он конечно полезен. Круче гораздо вариант, когда этот же лог можно пролистывать в самом эмуле, туда-сюда трассированить, фактически как backtrace. Но для реализации backtrace все намного сложнее - надо еще и состояние портов сохранять, и каким-то образом памяти.
Сейчас Xpeccy умеет писать лог, но только из режима дебага, т.е. очень медленно.
Пишется подобное:
LD L,A PC:88CE AF:2502 BC:6055 DE:CE04 HL:6F25 SP:B9F8 AF':2320 BC':6E45 DE':6D06 HL':8F28 IX:7802 IY:0001 I:B8 R:B8 A:B8 F: A':B8 F':
Тут как минимум не хватает Tt(длительность в тактах текущей команды), Ti(такты с начала прерывания) и X,Y луча.
И непонятно для чего A/F/A'/F' по отдельности, со странными значениями,
Это уже лучше чем ничего, но логирование в таком "оффлайн" режиме не сильно юзабельно.
Вообще идеальный логгер должен наверное быть кастомизируемым. Кому-то нужно видеть значения AY, кому-то вход с порта FE или еще какого-то, кому-то координаты луча. Но кастомизация - дело такое... это уже нужен интерфейс для всех внутренних переменных, это примерно тот же уровень, что и с условными брейкпоинтами.
Это всё потому что лог там малость устарел и его слегка крючит от новых фич. Надо будет поправить...
Записывать лог выполнения в файл: Addr: reg1: reg2: и так далее