samstyle / Xpeccy

Multiplatform emulator of retro computers
MIT License
73 stars 14 forks source link

Debugger - состояние портов и бордюра. #33

Closed Volutar closed 5 years ago

Volutar commented 5 years ago

Хотелось бы чтобы в дебаггере, в том же табе, где экран, показывать цвет бордюра текущий (там виден только сам PAPER). Когда луч за кадром, или внутри папера - даже непонятно какой последний out 254 был сделан.

Также хотелось иметь возможность доступа к состоянию портов, тому же 254, на ввод и вывод (динамик/магнитофон, бордюр), всяким портам TR-DOS, кемпстону/мыши, с возможностью как-то влиять на те, которые завязаны на input.

По 254 порту, из которого считывается состояние клавиатуры, кстати, непонятно как поменять состояния нажатости кнопок. ZX Keyboard, похоже, не передаёт в дебаггер ничего (зафиксировать нажатые кнопки вроде можно по ПКМ, но их состояние считывается только когда дебаггер закрываешь), то есть нельзя сделать так, чтобы они во время действия сканера клавиатуры считывались такими, какие надо в ходе пошаговой отладки. Надо продебажить сканер клавиатуры, джойстик, а не получается.

samstyle commented 5 years ago

Протестировано - зажатие кнопок на виртуальной клавиатуре во время дебага (и с трейсом, и без) вполне себе меняют состояние портов xxFE. Так что утверждение "ZX Keyboard, похоже, не передаёт в дебаггер ничего" мягко говоря ложно. Хранить вывод в порты можно, но это будет 65536 значений, т.к. из-за неполной дешифрации к одному и тому же эффекту приводят множество портов - например, в оригинальном ZX48K порт FE - это все чётные. Ввод из портов во-первых составляется только в момент чтения. Во-вторых некоторые порты при чтении вызывают побочные эффекты, такие как сброс DRQ у ВГ93 в режиме передачи данных, и читать их не во время эмуляции не представляется возможным.

Volutar commented 5 years ago

Протестировано - зажатие кнопок на виртуальной клавиатуре во время дебага (и с трейсом, и без) вполне себе меняют состояние портов xxFE. Так что утверждение "ZX Keyboard, похоже, не передаёт в дебаггер ничего" мягко говоря ложно.

В том числе и в build 20190113 (виндовая, новее нету) - из порта #fe всегда считывается #bf в режиме трассировки. Какие кнопки бы в zx keyboard голубым цветом не выделялись. Заметил, что значения считываются только если непосредственно перед считыванием из регистра #fe прожать все кнопки на Zx keyboard, но на следующей итерации чтения из #fe их уже там не будет (хотя зажатость кнопок осталась, они продолжают быть выделенными голубыми). Видимо проблема в том, что нет понятия "зажатости", и их состояние будто постоянно сбрасывается, игнорируя что они там во всю горят голубым (переключены по ПКМ, т.к ЛКМ их сразу отключает, что во время пошаговой трассировки немного не логично).

Хранить вывод в порты можно, но это будет 65536 значений, т.к. из-за неполной дешифрации к одному и тому же эффекту приводят множество портов - например, в оригинальном ZX48K порт FE - это все чётные.

Зачем хранить все? Есть известный фиксированный набор портов, известна их дешифрация. Известно как эти значения туда попадают. Речь о том, чтобы в дебаге иметь возможность посмотреть, что считается при обращении туда. Речь главным образом про input devices, типа kempston/keyboard, что зависит не от аппаратуры, а от пользователя, поэтому ВГ93 как бы и не надо.

читать их не во время эмуляции не представляется возможным.

Да никто же не говорит о "легальном" чтении. Речь о предоставлении возможности просмотра содержимого, которое БЫ прочиталось, если бы был соответствующий "in".

Во вкладке дискетки куча параметров дисковода отображается, хардварная инфа по ВГ93 вроде. И примерно также, как показывается содержимое AY. Но, кстати, как я понял, там справа должен отображаться текущий уровень вывода AY - и это как-то не работает. Показывает постоянно либо 0 либо 1 (будто это бипер). И не обновляется во время трассировки (обновляется только при выходе из дебагера).

samstyle commented 5 years ago

Есть известный фиксированный набор портов, известна их дешифрация

У каждого клона свой набор портов и своя дешифрация. Подключаемых устройств много.

текущий уровень вывода AY - и это как-то не работает. Показывает постоянно либо 0 либо 1 (будто это бипер)

AY генерирует квадратные волны "есть сигнал - нет сигнала", тон-шум миксуется ими. И только потом на это всё накладывается громкость либо канала, либо огибающей.

Да никто же не говорит о "легальном" чтении. Речь о предоставлении возможности просмотра содержимого, которое БЫ прочиталось, если бы был соответствующий "in".

Предлагаешь для каждого порта в каждом клоне дублировать процедурину считывания? Для кучи портов тсконф? И на нес. И на гамбое... И на процах без i/o, где порты замаплены в память? 2055687

Volutar commented 5 years ago

У каждого клона свой набор портов

Клавиатура - абсолютный стандарт. Бордюр - тоже. Кемпстон джойстик можно сказать тоже. Вот абсолютный стандарт хотя бы и показывать.

AY генерирует квадратные волны "есть сигнал - нет сигнала", тон-шум миксуется ими. И только потом на это всё накладывается громкость либо канала, либо огибающей.

Понятно. Но тем не менее, это значение заморожено в пошаговом режиме трассировки.

Предлагаешь для каждого порта в каждом клоне дублировать процедурину считывания?

Нет. Только стандартные порты, описанные в вики (31,254). С 128к пока не было нужды, 7ffd порт почти в каждом эмуляторе есть возможность посмотреть значенияе, включая текущий экран на вывод.

samstyle commented 5 years ago

Клавиатура - абсолютный стандарт. Бордюр - тоже.

Даже среди спектрумов - у профи клава расширена. У АТМ2 в бордюре 16 цветов и свой контроллер клавиатуры. У msx своя клавиатура. У nes и gb клавиатуры нет... Клоны с подключением ps/2 клавиатуры могут забить на этот FE и читать чисто кодами.

Понятно. Но тем не менее, это значение заморожено в пошаговом режиме трассировки.

Посмотрим, исправим.

Volutar commented 5 years ago

Зачем клоны? Порты классики хотя бы показывать... экзотика с клонами не нужна.

samstyle commented 5 years ago

По бордюру так нормально будет? screenshot_20190127_104118

экзотика с клонами не нужна

я тут решаю, что нужно, а что нет :dagger:

Volutar commented 5 years ago

По бордюру так нормально будет?

Да и меньше бы хватило, 4 пикселя рамки уже было бы достаточно (если что). А так - конечно, более чем нормально :)

я тут решаю, что нужно, а что нет 🗡

Я к тому, что экзотики навпихивали много всякой (у меня была профи там обычная клавиатура, расширение которой было просто комбинированием стандартных 40 клавиш). Эмулятор носит название [b]Xpeccy[/b], что намякивает на спектрумовское ядро, потому и логично поддерживать в дебагере ЯДЕРНЫЕ возможности (по портам). Что рисуется AY - отлично, за это большое спасибо.

А GB/NES - ну это уже не спекки, это вообще вне моих интересов.

samstyle commented 5 years ago

что намякивает на спектрумовское ядро

Изначально он эмулировал спектрумы. Но потом эволюционировал и вырос. Ядро там никакое, всё железо присобачивается к нему модулями, эмулятор только управляет связями между ними.

А GB/NES - ну это уже не спекки, это вообще вне моих интересов.

А мне вот приходится учитывать ВСЁ что там есть, а не только чьи-то интересы

Volutar commented 5 years ago

А мне вот приходится учитывать ВСЁ что там есть, а не только чьи-то интересы

Вроде там все варианты железа конфигурятся. Как и порты. Почему бы эти же конфигурации портов в дебаггере и не обслуживать для вывода? Если он их эмулирует то и нарисовать тем более можно. По логике.

samstyle commented 5 years ago

Уровень бипера и входа/выхода мофона screenshot_20190128_211607

Volutar commented 5 years ago

уровень тейпа с микрофона берётся? просто если это допустим загрузка тап файла экзотического с загрузчиком, он же будет показывать содержимое из тап файла?

что сподвигло меня писать - это трассировка сканера клавиатуры. то что он постоянно сбрасывает состояние и невозможно промоделировать ситуацию когда сначала нажимается 6 а потом шифт, чтобы проследить кнопку вниз. состояние клавиатуры уже не сбрасывается? ну и по поводу не обновления 0/1 всех этих аушных.. так то конечно выглядит круто :) особенно если бипер показывает "демпфированную" диафрагму динамика.

samstyle commented 5 years ago

уровень тейпа с микрофона берётся? просто если это допустим загрузка тап файла экзотического с загрузчиком, он же будет показывать содержимое из тап файла?

Нет "содержимого тап файла". Есть очень много пар "длина сигнала + уровень сигнала". При воспроизведении мофон "скользит" по этому массиву и выдаёт уровень сигнала на данный момент, старший бит этого значения попадает в результат чтения с порта FE. И это не график сигнала по времени, это текущий уровень.

что сподвигло меня писать - это трассировка сканера клавиатуры

нашёл где заковырка.

ну и по поводу не обновления 0/1 всех этих аушных..

уже обновляются

samstyle commented 5 years ago

Закоммитил. Проверяй.

Volutar commented 5 years ago

Проверю, как только под винду будет сборка. Запустить QT самому не получилось. Буду надеяться что все ок:)

samstyle commented 5 years ago

xpeccy_0.6.20190130_win32.zip

Volutar commented 5 years ago

Клавиатура не сбрасывается. Бордюрчик рисуется, текущие значения АУ и бипера обновляются (было бы прикольно если бы бипер рисовался бы со скроллом, как форма волны - чтобы было видно как именно диффузор двигался. В в общем этот Issue можно закрыть - всё круто. :+1: :) Но обнаружились побочные эффекты (от других исправлений). Опишу их в другом issue

Volutar commented 5 years ago

Прошу прощения если зря обращаюсь, но цвет бордюра меняется не после команды out, а через одну. Это нормально? По логике бордюр меняется не в тот момент когда луч уже нарисовал кусочек, а с началом этого кусочка.

samstyle commented 5 years ago

Ога, пнятненько. Причины ясны.