samstyle / Xpeccy

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

Человекопонятная нумерация страниц в сохранениях-переключениях #79

Open ShadowMaker opened 4 years ago

ShadowMaker commented 4 years ago

Мы уже про это говорили, ты сказал, что это нельзя сделать, потому что там другие есть кроме спектрумов. Давай может ключ/сеттинг сделаем или типа того. Ну не получается нормально пользоваться :(

kolnogorov commented 4 years ago

Полностью поддерживаю!

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

Нужно сделать (сознательно избегаю словосочетания "как в анриле") сплошной поток памяти с меняющейся в зависимости от страницы областью #C000-#FFFF, и понятную нумерацию страниц.

alexanderk23 commented 4 years ago

Присоединяюсь, переключалка - это было бы здорово. У xpeccy самый приятный дебаггер среди известных мне эмуляторов, но такая вот адресация доставляет некоторые неудобства.

samstyle commented 4 years ago

Видится мне, лучшее решение - убрать режимы ram/rom - хотя бы для дизасма - и сделать ручную смену страниц во всех 4 окнах для группы спектрумов, а для остальных просто убирать этот блок (хотя, msx и gb тоже имеют 16Кб окна, но у картриджей они могут быть разные).

ShadowMaker commented 4 years ago

То есть всё будет работать от текущей активной страницы, включая сохранение, и меняешь страницу - сохранение/показ той страницы, на которую поменял? Так нормально вроде.

Только надо еще контрол со сменой банки и значением в порту (ты это наверное и имел ввиду под ручной сменой страниц).

samstyle commented 4 years ago

В текущем билде всё устраивает?

kolnogorov commented 4 years ago

Нет :) Вообще не понятно, что изменилось.

Судя по всему добавилась вот эта вкладка: image но вообще непонятно, как ей пользоваться, и это очень неудобно.

Мы имели в виду вот это: image если в дампе пишешь #C000, то он переходит на #C000 текущей банки. То есть, в дампе должна быть вся память с #0000 по #FFFF, где #C000-#FFFF находится актуальная банка из порта #7FFD (она тоже должна отображаться там).

То есть, память в дампе должна быть непрерывной, с #0000 и до #FFFF, и адресация страницы должна быть честная и удобная - с #C000, а не с #0000.

samstyle commented 4 years ago

Так включи режим CPU, там как раз и показывается то, что видит проц. В режиме RAM показываются 16К страницы RAM. Вкладка, которой "непонятно как пользоваться" меняет страницы памяти во всех 4 банках, видимых CPU, чтобы дизасм и дамп по заданным адресам показывали именно их.

kolnogorov commented 4 years ago

@samstyle mea culpa, теперь всё хорошо!

ShadowMaker commented 4 years ago

В текущем билде всё устраивает?

Не совсем. Состояние не сохраняется при выходе из отладчика (наставил маппингов, вернулся, назад в дебуггер - все потеряно опять).

Нужна возможность как-то переключить реальную текущую страницу.

samstyle commented 4 years ago

"когда софт меняет страницы выводом в порт - они меняются" (с) якобы конфуций можно проверить в бейсике 48к, он по идее не должен выводить в 7ffd

ShadowMaker commented 4 years ago

"когда софт меняет страницы выводом в порт - они меняются" (с) якобы конфуций можно проверить в бейсике 48к, он по идее не должен выводить в 7ffd

Я вроде вообще не про это говорил.

samstyle commented 4 years ago

тогда что такое "наставил маппингов"?

ShadowMaker commented 4 years ago

тогда что такое "наставил маппингов"?

на вкладке https://user-images.githubusercontent.com/8288103/85288849-1ac2df80-b49f-11ea-8b5e-708119933f19.png поставил какие мне надо страницы, вернулся назад в программу, потом назад в дебугу - всё сбросилось на дефолтовые значения. зачем так, если это виртуальные всё равно переключалки и показываются только в дебуггере?

samstyle commented 4 years ago

Это карта памяти машины. Если при выполнении кода был вывод в 7ffd, эта карта меняется в соответствии с битами, которые туда выводится. Так что не удивительно, что она поменялась.

ShadowMaker commented 4 years ago

Это карта памяти машины. Если при выполнении кода был вывод в 7ffd, эта карта меняется в соответствии с битами, которые туда выводится. Так что не удивительно, что она поменялась.

Всё, понятно. Я забыл, что у 128k в меню на прерываниях постоянно 7 страницу фигачит. Тогда всё хорошо, спасибо.

Volutar commented 2 years ago

Если попытаться разделить просматриваемую карту памяти и фактическую, которую видит CPU, то как тогда вообще отлаживать по шагам, например, если код выполняется в пространстве, которая вне "просмотра"? Это только больше путаницы внесет. Так что текущий вариант наименее ущербный.

Ещё не очень ущербный был бы, если все-таки сделать разделение просматриваемых и фактических областей памяти, и галку "keep page layout", но при просмотре другой страницы как-то визуализировать что CPU видит что-то другое. Но вот визуализацию этой "многослойности" даже сложно представить, чтобы она была интуитивно понятной и простой в использовании. Ненужное усложнение.

Volutar commented 1 year ago

Такие мысли:

  1. То что поменяется в маппинге в отладчике - по факту должно влиять на то что видит CPU. Это единственный способ подсунуть процессору данные из другого банка по ходу выполнения.
  2. В просмотре дампа и дебагера сделать "шовный" переход из текущей области CPU в область вне CPU (включая банки ROM). Не переключалкой с дропдауном (cpu/ram/rom) как сейчас, а пристыкованный один общий шматок с префиксами в столбце адреса что это ram:07:0000 или rom:00:3ff0. Может просто двумя табами cpu/all.