samstyle / Xpeccy

Multiplatform emulator of retro computers
MIT License
71 stars 13 forks source link

Лог выполнения #47

Open qboneteam opened 5 years ago

qboneteam commented 5 years ago

Записывать лог выполнения в файл: Addr: reg1: reg2: и так далее

samstyle commented 5 years ago

Практическое применение в чём?

Volutar commented 5 years ago

Пролистать вперёд и назад, отслеживая регистры и такты процессора. На самом деле было бы круто если бы можно было нажать на кнопку "логировать", и в какой-то момент "сохранить лог" ( с одновременной остановкой). Логировать в память, а не сразу на диск. Возможно формат типа csv. Pc,sp, regs,regsX,regs', tick Столбики подписаны в первой строке, в каждой строке без подписей, чтобы ширина была фиксированной, только последний столбец с тактами был расширяемым. Возможно, регистры и по выбору (не всегда вся куча нужна).

Само собой, буфер не безграничный, а, например, на два-три прерывания, или на секунду.

Volutar commented 3 years ago

А можно было бы кольцевой буфер иметь, например, в 100000 позиций, или сколько там в настройках впишут, и по ходу исполнения кода туда писать значения регистров (в шестнадцатиричном виде) и кое-чего еще (длительность - десятичная), возможно- положение луча, возможно - содержимое внутренних состояний AY, возможно - значения регистра #FE (или каких-то других,которые нужны, тот же covox).

Регистры можно без выбора - их не так и много PCPC, , SPSP, AFAF,BCBC,DEDE,HLHL, [AFAF,BCBC,DEDE,HLHL,] IXIX,IYIY, IRIR, cputime, XXX/YYY альтернативные регистры может быть даже и не показывать

Состояние рилтайм параметров типа входа с магнитофона, состояния клавиш, состояние AY (0 или 1 в каждом из каналов) - может быть архиполезно видеть в виде истории, по которой можно скролить назад-вперёд. Текущее состояние и прокатка допустим AY ещё возможна, но если это тот же вход с магнитофона (через line-in) - его невозможно трассировать как-то иначе. И невозможно отладить какой-нибудь альтернативный загрузчик.

Bedazzle commented 3 years ago

Лог выполнения нашёл только в SpecEmu, им и пользуюсь. Удобно для ковыряния в чужом бинарнике, чтобы понимать откуда куда идёт выполнение. По точке останова далеко не всегда сразу ясно, где была к примеру, процедура вызвана, особенно, если не через call, а просто jmp.

Volutar commented 3 years ago

Просто лог как файл мало кто сможет прочитать. Но вообще он конечно полезен. Круче гораздо вариант, когда этот же лог можно пролистывать в самом эмуле, туда-сюда трассированить, фактически как backtrace. Но для реализации backtrace все намного сложнее - надо еще и состояние портов сохранять, и каким-то образом памяти.

Volutar commented 1 year ago

Сейчас 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 или еще какого-то, кому-то координаты луча. Но кастомизация - дело такое... это уже нужен интерфейс для всех внутренних переменных, это примерно тот же уровень, что и с условными брейкпоинтами.

samstyle commented 1 year ago

Это всё потому что лог там малость устарел и его слегка крючит от новых фич. Надо будет поправить...