PDA

Просмотр полной версии : unreal speccy ряд вопросов по monitor



Raider
11.08.2005, 18:08
Я жму Esc, эмулятор постоянно останаваливается на адресе 0038.
мне хотелось бы чтобы он останаваливался на текущей в данный момент команде, как будто в realtime остановили настоящий спектрум.
Я понимаю как эмулятор работает и что он z80 выполняет батчем, а не размазанно по времени. Но все равно как-то можно примерно аппроксимировать диапазон адресов на котором должен находиться процессор и воткнуть туда брекпоинт...

Также хотелось бы запрещать из монитора прерывания. Это можно сейчас как-то сделать?
У меня на спектруме была кнопка отключающая прервания. Очень удобно, нажал ее, потом жмешь NMI и никаких эксцессов, и знаешь заодним, где halt стоит - а это в 99% случаев Main Demo/Game Loop..)

В мониторе рядом с im1,i:00
я так понял это флажки iff0, iff1
а зачем их может понадобиться редактировать?

Можно ли как-нибудь сделать так, что запустить код как trace в STS, и смотреть в мониторе где он выполняется в realtime? (состояние регистров, памяти, итд?) - это очень полезно. Я в своем эмуляторе N64 иногда прямо "глазами" видел где и как идет выполнение программы, какие регистры не используются и другое...
пока что жму Alt-S и потом держу F8...

SMT
11.08.2005, 19:24
Я жму Esc, эмулятор постоянно останаваливается на адресе 0038.
мне хотелось бы чтобы он останаваливался на текущей в данный момент команде, как будто в realtime остановили настоящий спектрумF11 нажми после esc


Но все равно как-то можно примерно аппроксимировать диапазон адресов на котором должен находиться процессор и воткнуть туда брекпоинтзаранее предсказать, как поведёт себя программа без эмуляции - я так не умею :) вызывать обработку сообщений windows и GetKeyboardState внутри цикла z80 - будет очень медленно. по-хорошему, надо это хозяйство выносить в отдельный поток, заодно и привязка обновления клавы к инту пропадёт, и заедания звука при перетаскивании окна. но делать лениво ;)


Также хотелось бы запрещать из монитора прерывания. Это можно сейчас как-то сделать? У меня на спектруме была кнопка отключающая прерванияну это же была собственная довеска. вот и к эмулятору придётся её самому дописывать, благо делается в полпинка


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


пока что жму Alt-S и потом держу F8
тоже хорошо, но лучше F7


В мониторе нет команд copy memory и fill block with byte(s)?
copy специально нет, она должна выполнятся за 2 прохода (save to file, load from file). одновременно решается проблема копирования между банками. fill можно эмулировать через load (конечно, если человек копается в дампах, хекседитор просто обязан быть у него под рукой, чтобы сделать соотв. файл)

Raider
11.08.2005, 20:54
F11 Помогло.
спасибо.

А про trace как в STS ты забыл ответить. Особенно так трассировать здорово когда внутрь CALL'ов не заходишь. Помню как я натурально перся (как удав по стекловате), когда в таком режиме трассирования под STS запустил R-TYPE.
Это было нечто! Игра работает, и можно в любой момент прервать, или посмотреть как она там в Main game Loop крутится...

В анриле шибко такого нехватает..

Если б Stalker такое сделал в 1985-86 году, он бы наверное миллионером стал.... STS фирмы производители игрушек наверное с руками бы отрывали..

Кстати с чем связано, что когда в мониторе удерживаешь F8 нажатой, то из монитора через некоторое время вылетеает обратно в режм эмулятора?
F7 степать неудобно, потому что постоянно застреваешь в циклах..

Raider
11.08.2005, 21:10
заранее предсказать, как поведёт себя программа без эмуляции - я так не умею :) вызывать обработку сообщений windows и GetKeyboardState внутри цикла z80 - будет очень медленно. по-хорошему, надо это хозяйство выносить в отдельный поток, заодно и привязка обновления клавы к инту пропадёт, и заедания звука при перетаскивании окна. но делать лениво ;)


Я делал так. У меня процессор выполнялся довольно "большими кусками" циклов. Я думаю ты понял о чем я.

for(u64 i=0; i<BIG_VALUE; i++) {
fetch_opcode();
}

и меж этими кусками я сканил клаву обычным GetAsyncKeyState()
все работало. для GetAsyncKeyState() не надо ничего, она работает всюду.
Но только я не останавливался где попало с точностью до команды, но "примерно" где попало. С гранулярностью так в несколько млн. команд :-)

Dexus
11.08.2005, 21:42
Да, кстати, то что в эмуле постоянно "рвется" звук (это можно исправить только постановкой приоритета high), и _всегда_ рвется когда перетаскиваешь окошка - не есть хорошо.
Вообще, монитор достаточно скуден.
Очень сильно помог бы trace log. т.е. последние 10 (или сколько там в опциях будет) команд записаны в лог. адрес, код, дизассемблировка, и регистры все (и флаги).

И еще очень нужная штучка - это "спец значок" у команды условных переходов, если она при текущих флагах сработает (когда тыкнешь f7/f8).

И еще - когда тыкаешь F8 на каком нибудь DJNZ, а внутри цикла стоит комманда, "выходящая" за рамки цикла (дальше) - то он просто выходить из монитора вовсе.... Т.е. там не учитывается "промежуток" цикла, а просто ставится как бы автоматом точка остановки ровненько за этим DJNZ. Это конечно очень легко с точки зрения реализации, но ИМХО - не совсем корректно.
А отмазка "было лениво делать" - как то смотрится не очень красиво. :)

SMT
11.08.2005, 22:13
про trace как в STS ты забыл ответить. Особенно так трассировать здорово когда внутрь CALL'ов не заходишь. Помню как я натурально перся (как удав по стекловате), когда в таком режиме трассирования под STS запустил R-TYPE. Это было нечто! Игра работает, и можно в любой момент прервать, или посмотреть как она там в Main game Loop крутится... В анриле шибко такого нехватаетвсе есть! пускаешь STS и наслаждаешься ;) да и без него - прервать в любой момент можно? можно. а хочешь сильно замедлить? ну так поставь 20 int-ов в секунду вместо 50

Кстати с чем связано, что когда в мониторе удерживаешь F8 нажатой, то из монитора через некоторое время вылетеает обратно в режм эмулятораили call не вернулся, но скорее всего условный jp наверх (например, игровой цикл), при этом считается что этот F8 - попытка пройти цикл и break ставится после jp

У меня процессор выполнялся довольно "большими кусками" цикловне хочется переписывать главный цикл из-за сомнительной пользы этого эффекта

SMT, добавь меня в аську, поговорим насчет эмулятора
а нету :)

Очень сильно помог бы trace log. т.е. последние 10 (или сколько там в опциях будет) команд записаны в лог. адрес, код, дизассемблировка, и регистры все (и флаги).это значит, при обычной эмуляции обязательно вести лог? конечно, для современных процессоров пофиг, но что-то я сильно помешан на оптимизации

И еще очень нужная штучка - это "спец значок" у команды условных переходовсогласен, полезная штучка

F8 на каком нибудь DJNZнад этим надо подумать...

отмазка "было лениво делать" - как то смотрится не очень красивотогда придумай мне красивую :)

Dexus
11.08.2005, 22:22
это значит, при обычной эмуляции обязательно вести лог? конечно, для современных процессоров пофиг, но что-то я сильно помешан на оптимизации
Ну нет. этот "ЛОГ" можно вести только во время f7/f8 (хотя бы). Очень знаете ли полезно изучать "предыдущие" комманды. Весь цикл. Его и распечатать (в файл слить) - было бы очень полезно. потом трасировку на бумаге изучать, выясняя глюки... Можно и при обычной эмуляции (если какой нибудь флажок выставлять - для многих ресурсов для этого хватит)... А логировать в кольцевой буфер, память целая будет.

тогда придумай мне красивую
"Эту мысль я обдумывал, она интересна, и я планирую ее воплотить, но сейчас до нее руки не доходят".
А "ЛЕНЬ" - это как то черезчур небрежно и неуважительно :)
Ведь если Вам правда эта идея кажется хорошей и полезной, то выразить это - значит уже "поощрить" автора идеи. А в реальность идея воплотится так или иначе, если идея Вам самим пришлась "по вкусу". Поэтому это скорее всего не будет "пустым обещанием".

Надеюсь, что описанные мной "фички", которые были бы весьма полезны, все же найдут воплощение в следующих версиях!

З.Ы. Вот еще вспомнил интересное место в дизасме во время трассировки - при коммандах с косвенной работой (не регистрами а памятью) - показывать где нибудь в скобочках значение, которое прописано в данный момент там где произойдет "доступ к памяти". Если оттуда берется, или если это значение затирается (Может было бы полезно даже и для push/call/pop/ret). В любом случае это не было бы бесполезно. Смореть в правый верхний угол где куски памяти по регистрам расположены - не всегда удобно (взглядом бегать), да и с IX/IY очень часто смещение далеко за пределами отображаемого "окошка".

З.З.Ы. Вот еще вспомнил что бы мне казалось уместным в дебагере (по крайней мере я не нашел или не заметил чтобы это было в US, или в каком то другом эмуле - это как-то показывать место где сейчас находится "луч". Когда тыкаешь F9 (например).
Вообще, насколько я понял, когда идет трассировка, и какое то байтик записывается в видео область, то при F9 он немедленно там отображается, хотя технически это не совсем верно. Он появится там только после того как луч его отобразит.
Т.е. наблюдать "мультиколор" потактово не получится, как и не видно эффектов "пропадания" курсоров и вообще подобные эффекты. Можно конечно сделать два вида "показывания" экрана спектрума текущего - с учетом луча, и без учета. в текущий момент работает только схема "без учета" (правда мультиколор на момент остановки все-таки есть, хотя при дальнейшей пошаговой трассировке изменений этих "мульти" эффектов не видно). А можно сделать еще и с учетом этого луча. Т.е. не отображать тех участков "экрана", которые физически лучем не нарисованы еще, старые же участки можно как нибудь "пригасить"(те, что чуть ниже луча) а сам луч отобразить какой-нибудь мерцающей бледной точечкой. Хочешь увидеть что реально в видеопамять закинуто и что на бордюре (текущий цвет) - тыкаешь обычную F9 (или ShiftF9 для доп. экрана №7). А хочешь увидеть "расширенный вид" - тыкаешь AltF9. В нем будет показано что в данный момент выводится лучом. С учетом и мультиколора на бордюре, и аттрибутами, и "переключениями" между 0 и 7 экранами. ВОт эта фича точно был абы ОЧЕНЬ нужной для демомейкеров, и не только для них, а для всех кто хочет _точно_ и _качественно_ отслеживать и трассировать весь вывод с учетом луча. :)
На фоне этого (если это вдруг найдет воплощение), очень уместным было бы иметь "отладчик" в отдельном от "вывода" окне. Трассируется в одном окошке, и визуально отображается в другом. Строго говоря, это разделение окон (которое в некоторых эмулях имеется) без этой "фичи" отображения луча, имеет лишь "половину" смысла - это показывать сразу то, что в видеопамять запихивается. А то что луч выводит - не показывает. Это уже сам додумывай, какое место картинки он (луч) нарисует. В этом смысле бы ДВА окна + окошко отладчика были бы идеальным случаем (правда, это уже совсем маловероятно, что это найдет свое воплощение :), хотя несомненно - уникальная и полезная фича ). Ведь после каждого f7/f8 тыкать на f9 не очень прикольно. часто хотелось бы видеть изменения сразу же. Кстати, сейас, когда входишь в отладчик - автоматом размер окошка ZX масштабируется под его (отладчика) размер, и потом уже не восстанавливается, поэтому независимое окошко - достаточно актуально.

Raider
12.08.2005, 00:03
или call не вернулся, но скорее всего условный jp наверх (например, игровой цикл), при этом считается что этот F8 - попытка пройти цикл и break ставится после jp


А как-нибудь сделать только для CALL'ов?

Raider
12.08.2005, 05:22
Да, кстати, то что в эмуле постоянно "рвется" звук (это можно исправить только постановкой приоритета high), и _всегда_ рвется когда перетаскиваешь окошка - не есть хорошо.
Вообще, монитор достаточно скуден.
Очень сильно помог бы trace log. т.е. последние 10 (или сколько там в опциях будет) команд записаны в лог. адрес, код, дизассемблировка, и регистры все (и флаги).

И еще очень нужная штучка - это "спец значок" у команды условных переходов, если она при текущих флагах сработает (когда тыкнешь f7/f8).

И еще - когда тыкаешь F8 на каком нибудь DJNZ, а внутри цикла стоит комманда, "выходящая" за рамки цикла (дальше) - то он просто выходить из монитора вовсе.... Т.е. там не учитывается "промежуток" цикла, а просто ставится как бы автоматом точка остановки ровненько за этим DJNZ. Это конечно очень легко с точки зрения реализации, но ИМХО - не совсем корректно.
А отмазка "было лениво делать" - как то смотрится не очень красиво. :)


2SMT:

Оконные сообщеня не обязательно выгребать слишком часто. Достаточно из процессорного цикла, если у тебя нет многопоточности делать изредка peekMessage() и если что выполнять getMessage() пока они не кончатся, а лучше делать cpu в отдельном потоке.

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

TraceLog хорошая вещь, не сказал бы что полезно иметь в стандартных возможностях, но эмуляторщикам без логгинга как-то сложно...

И есть еще пара прикольных херей, для хакинга игр/демок можно присобачить к эмулятору. У меня они были встроены в эмуль.

1. Это graph memory viewer, чтобы смотреть графические данные (отдельным окном - показывает просто память полоской в 1...N байт, водишь мышкой и в качестве хинта видишь адрес куда мышкой навелся).
и еще нужно клавиатурой смещать адрес на байтик вперед-назад, чтобы точно "встать" на граф. данные.

2. Память машины изображать в отдельном окне виде "ленты". периодически окно апдейтится (настраиваемо, в N прерываний или каждые несколько сотен тыс. тактов, или кнопкой).
В окне показывается память спектрума. Показывается тип памяти - выполнявшийся код. Записи. Чтения. Мертвая память (не было ни записей ни чтения, и проц сюда не заходил, не фетчил команды отсюда).

В наше время можно хоть на каждую ячейку памяти спектрума держать по 4 байта, на PC обычно такие объемы памяти не проблема :)
Я вообще-то такое делал для страниц памяти, но думаю для спека можно сделать для каждой ячейки.

Теперь дальше.
Мне еще требовалось "ручной сброс статистики по памяти", а не только автоматом.
И еще делал анализ hotspot-участков кода - в ячейках памяти выполняемых процессором я заводил счетчик с saturation, чтобы посмотреть как часто он сюда заходит - и это отображал на экране, на карте памяти в виде яркости (можно оранжево-синий градиент сделать а-ля FFT analysis в Cubic Player).
Чем чаще процессор исполнял эту команду, тем "ярче" отображался этот "hotspot". Таким образом мне удавалось увидеть где именно сосредоточена "работа" в игре.
Разумеется карту hotspot выполнения нужно время от времени >> 1.
Период подбирается экспериментальным путем, для достижения комфорта.

А если ты фанат скорости, так тоже делается просто.
Вводится #define и делается две сборки эмулятора - для простых людей чтобы порадовать их непритязытельностью к ресурсам. И для девелоперов, эмулятор собраный со всеми фичами.


p.s.
Я правильно понял, что на UnrealSpeccy breakpoint памяти возмжен только тупо на read/write access? Можно ли поставить breakpoint, но такой чтобы при write-access он срабатывал только если ячейка изменилась, т.е. туда записали значение не то что в ней было?

SMT
12.08.2005, 08:52
"ЛЕНЬ" - это как то черезчур небрежно и неуважительнозато честно :)


Ну нет. этот "ЛОГ" можно вести только во время f7/f8 (хотя бы). Очень знаете ли полезно изучать "предыдущие" комманды. Весь цикл. Его и распечатать (в файл слить) - было бы очень полезно10 команд никого не спасут, а вместо копания в 100 метровом логе полезнее подумать и установить правильные условные брейкпоинты



показывать где нибудь в скобочках значение, которое прописано в данный момент там где произойдет "доступ к памяти". Если оттуда берется, или если это значение затирается

это вместо ld (ix+12),e писать ld (a012),45?
а если ld e,(ix+12), что писать: ld e,45 или ld e,(a012)?
во втором случае всё равно смотреть в память


показывать место где сейчас находится "луч"это было в старых версиях, когда было мало видеофильтров. используй их, а сейчас в каждом фильтре "я планирую воплотить, но сейчас руки не доходят"(с)


при F9 он немедленно там отображается, хотя технически это не совсем верно

немедленно не отображается, и многим это не нравится. хотят наоборот, а мультиколоры говорят им пофигу. отображается только после shift-f9, f9. тогда всё, что нарисовано лучом, стирается и берётся видеопамять. вообще насчёт затемнения можно подумать


А как-нибудь сделать только для CALL'оввозьми старую версию. мне показалось удобным такое для jp cc, когда проходишь много расксорок подряд



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

я так и хотел, как в soft-ice'e. если перехода нет, то и стрелку не рисовать


TraceLog хорошая вещь, не сказал бы что полезно иметь в стандартных возможностях, но эмуляторщикам без логгинга как-то сложно

например, зачем?


graph memory viewer

для этого есть EmuzWin


Память машины изображать в отдельном окне виде "ленты". периодически окно апдейтится

в принципе, реально сделать такой индикатор. например, показывать за последний int столбиком 128x8 какой из 512-байтных кусков читался, писался, выполнялся. или по банкам (4 столбика высотой 128 пискелей). хотя второе менее наглядно, но больше разрешение (1 полоска - 128 байт)


в ячейках памяти выполняемых процессором я заводил счетчик с saturation, чтобы посмотреть как часто он сюда заходит - и это отображал на экране, на карте памяти в виде яркости
это нельзя. в большинстве фильтров и в мониторе цвет 8-битный


Вводится #define и делается две сборки эмулятора - для простых людей чтобы порадовать их непритязытельностью к ресурсам. И для девелоперов, эмулятор собраный со всеми фичами

оно уже и сейчас так. для обычных моделей zx своё ядро z80, а для профПЗУ или если активны брейкпоинты, свой медленный вариант. разные бинарники - не знаю... хотя есть вариант для девелоперов компилить самим (сейчас уже можно скомпилить себе короткий exe без GS, monitor'a, GUI-настроек, просто закомментировав define'ы в mods.h)

SMT
12.08.2005, 09:12
Можно ли поставить breakpoint, но такой чтобы при write-access он срабатывал только если ячейка измениласьможно усл. брейкпоинт типа "M(1234)-56"

Dexus
12.08.2005, 09:17
Цитата:


Ну нет. этот "ЛОГ" можно вести только во время f7/f8 (хотя бы). Очень знаете ли полезно изучать "предыдущие" комманды. Весь цикл. Его и распечатать (в файл слить) - было бы очень полезно

10 команд никого не спасут, а вместо копания в 100 метровом логе полезнее подумать и установить правильные условные брейкпоинты
Ну вот. Отмазка приляпана, а по сути не сказано.
Я же указал - РАССМАТРИВАТЬ РАСПЕЧАТКУ....
Как можно рассматривать распечатку брейкпоинтов и значений при проходе некоторых строк?
10 строк - это условно. Ничто не мешает это число сделать гибким. Хоть 1000. Backtrace ведь тоже отсутствует. Но если бы даже и был - лог с регистрами и флагами - намного полезнее.
Это когда мне нечего делать - сел за комп, и сидишь по 30 раз кусок один протресйиваешь, пытаясь на каждый момент обратить внимание, и все равно что-то, да упускаешь. Начинаешь заново - БЕСИТ. Куда эффективнее просто видеть строчку типа


74A3 DD 21 00 00 ld ix,0000 af=4000 bc=217C de=75DC hl=8D30 af'=....

И в этом духе. Строчка, конечно, длинная, но "распечатку" можно делать достаточно широкой. ПРосматривать-анализировать это дело "потом".
это вместо ld (ix+12),e писать ld (a012),45?
а если ld e,(ix+12), что писать: ld e,45 или ld e,(a012)?
во втором случае всё равно смотреть в память
Не, вместо ld (ix+12),e писать ld (ix+12),e (25)
вот это (25) - это и есть значение по адресу (ix+12).
И вместо ld e,(ix+12) писать ld e,(ix+12) (25).
Конечно, необходимость знать, ЧТО ИМЕННО затирается - не настолько велика, насколько желательно бы знать какое число достанется оттуда ДО выполнения операции.
это было в старых версиях, когда было мало видеофильтров. используй их, а сейчас в каждом фильтре "я планирую воплотить, но сейчас руки не доходят"(с)
Не понял - есть какой то видеофильтр который показывает отрисовку с лучом или как?

это нельзя. в большинстве фильтров и в мониторе цвет 8-битный
Причем тут фильтры вообще? Отладчик разве как-то связан с фильтрами и ограничениями цветовыми? (Монитором-экраном я по привычке называю дисплей, а дисплеем ничего не называю, потому что слово корявое, а отладчик - он отладчик. Debugger.)

SMT
12.08.2005, 10:05
целый час думал, куда растут адреса в ленте памяти: сверху вниз или снизу вверх. и решил: а ну его, пускай растут слева направо. хоть и некрасиво, привыкнуть можно

SMT
12.08.2005, 10:16
И в этом духе. Строчка, конечно, длинная, но "распечатку" можно делать достаточно широкой. ПРосматривать-анализировать это дело "потом".слушай! а ведь можно сразу печатать на рулончике туалетной бумаги. вот занимательное чтиво получится :)


Ну вот. Отмазка приляпана, а по сути не сказано
по сути. мне не нравится лог. если тебе нужен, добавь куда-нить в цикл z80 строчки
char disline[100];
disasm_line(cpu.pc, line);
fprintf(logfile, "%-40s af=%04X, bc=%04X, ...\n", disline, cpu.af, cpu.bc,...);

Не понял - есть какой то видеофильтр который показывает отрисовку с лучом или какесть. но в какой-то старой версии эмулятора

Причем тут фильтры вообще? Отладчик разве как-то связан с фильтрами и ограничениями цветовыми?да. так спроектирован эмулятор (да и в полноэкранном режиме ddraw физически только 8 бит, а переключаться долго - достаёт). вообще, я пока не теряю надежду сделать видеорежим как в us lite edition, тогда в мониторе может быть только 4-битный цвет и только текст

Dexus
12.08.2005, 10:18
целый час думал, куда растут адреса в ленте памяти: сверху вниз или снизу вверх. и решил: а ну его, пускай растут слева направо. хоть и некрасиво, привыкнуть можно
:) :) :)
"Верхом памяти" всегда называли "верхние адреса" :)
Круто завернуто..
В общем низ - это ПЗУ, а верх - это уже ближе к FFFF.
Но "верх" тут наверно не буквален.. А может и буквален.
У Вас внизу справа стоит "карта" памяти (постраничная) в перевернутом виде...
Можно было бы и скомбинировать как нибудь.
И кстати неплохо было бы как-нибудь "быстро" просматривать доп. странички не трогая 7FFD.

P.S. Слева направо - наиболее интуитивно.

Dexus
12.08.2005, 10:24
по сути. мне не нравится лог. если тебе нужен, добавь куда-нить в цикл z80 строчки
А то что он не только мне нужен? Запускать альтернативную ветку эмуля?

вообще, я пока не теряю надежду сделать видеорежим как в us lite edition, тогда в мониторе может быть только 4-битный цвет и только текст
А почему не использовать для отладчика консоль?
Я, откровенно говоря, вообще не понимаю для чего дос-консоль нужна... Иногда по запарке запускаю unreal.exe прям из Far'а, и он блокируется, поскольку консоль уже занята... Закрываю УС и перезапускаю его через start unreal.exe ..
Насколько я понял - приложение само win32 console...
А для чего консоль используется - правда?

SMT
12.08.2005, 10:41
Мне еще требовалось "ручной сброс статистики по памяти", а не только автоматомсразу не разглядел, перечитывал - увидел. такая штука уже давно есть, сброс в файл. но динамически как индикатор на главном zx-экране будет прикольнее, и ресурсов есть немного

SMT
12.08.2005, 10:48
Запускать альтернативную ветку эмуляа неплохо будет. так как лицензия открыта, можно будет перенимать удачные решения между ветками. так кто теперь на досуге подумает и сделает, когда руки дойдут? :)


А почему не использовать для отладчика консольв полноэкранном режиме неудобно, особенно в 640x480 и ниже


по запарке запускаю unreal.exe прям из Far'а, и он блокируется, поскольку консоль уже занятаc шифтом запусти


Far'а, и он блокируется, поскольку консоль уже занята... Закрываю УС и перезапускаю его через start unreal.exe век живи - век учись :cool: в фаре можно нажать alt-ctrl-tab (я себе переставил на alt-ctrl-X), чтобы отвязаться от блокированной консоли и взять новую


А для чего консоль используется - правда?
для диагностических сообщений и в процессе отладки самого эмулятора часто printf'ом балуюсь

Dexus
12.08.2005, 11:24
для диагностических сообщений и в процессе отладки самого эмулятора часто printf'ом балуюсь
Т.е. это чисто "авторское" решение своих личных вопросов, которое для других впринципе никак не требуется...

век живи - век учись в фаре можно нажать alt-ctrl-tab (я себе переставил на alt-ctrl-X), чтобы отвязаться от блокированной консоли и взять новую
Спасибо большое. Не знал :) Постараюсь не забыть.
в полноэкранном режиме неудобно, особенно в 640x480 и ниже
Это что - кто то работает в XP на разрешении 400х300 чтоли?
В полноэкранном режиме по-моему отлаживать смысла не имеет. В полноэкранном смотрят результаты :) Грех не использовать пространство более эффективно.
Ведь никто не мешает открывать окошки для лога отдельные, для дебагера, не трогая основного окошка эмулятора.

SMT
12.08.2005, 13:19
с подсказками для jp/ret/call/rst всё нормально, а для инструкций, обращающихся к памяти ничего не получается. в идеале для ld (1234),bc нужно писать 1234:4444<5555 - адрес, старое и новое значения. его писать надо справа от дизасма, и для всех команд подсказка не помещается (ширина окна подобрана по самой длинной set 5,a,(ix-17). увеличивать сейчас её уже нельзя). если писать только что-то одно, или только для некоторых команд, это будет непонятно. если вывести где-то в другом месте, будет неудобно переводить взгляд с точки трассировки куда-то ещё. нововведение пока будет работать только для команд передачи управления

SMT
12.08.2005, 13:20
это чисто "авторское" решение своих личных вопросов, которое для других впринципе никак не требуется
а мне "другие" не требуются

Ведь никто не мешает открывать окошки для лога отдельные, для дебагера, не трогая основного окошка эмулятора
никто не мешает пользоваться кучей эмуляторов, у которых эти окна разнесены

Dexus
12.08.2005, 13:32
в идеале для ld (1234),bc нужно писать 1234:4444<5555
Ну зачем же так сложно..
Это разве что на GUI отладчике такое можно уместить, с гибким размером окошка и где можно размеры все менять... Тут хватит и просто ld (1234),bc [4444<5555]
Адрес-то и так виден..
Хотя вообще-то да... Интересная мысля.
Переходи на ГУЁвый отладчик! :) Сразу куча проблем (принципиальных, завязанных на "отображении" решится..

SMT
12.08.2005, 13:46
Переходи на ГУЁвый отладчикнет, уж лучше вы к нам :)

SMT
12.08.2005, 13:49
в смысле, реализовывайте намерение октрыть новую ветку и сделать там "всё как надо" :)

SMT
12.08.2005, 13:50
Адрес-то и так виден
а если ld (ix-17),e ?

SMT
12.08.2005, 13:52
Тут хватит и просто ld (1234),bc [4444<5555]
не хватит, после bc всего 2 символа свободных

Dexus
12.08.2005, 14:23
не хватит, после bc всего 2 символа свободных
Ну вот. Это и есть минусы фиксированного размера окошка отладчика и размера шрифта.
ГУИ рулит.
А альтернативный если и буду делать, то фактически с нуля (не люблю в чужом копаться). А это - очень маловероятно.

SMT
12.08.2005, 15:03
любовь к gui - это понятно. но примерно половина спектрумистов (а не провести ли голосование :)) терпеть gui-отладчики не могут (например, среди них злостный эмуляторщик ;) Alone Coder). с учётом того, что отладчиков "старого образца" осталось совсем мало (R80 уже не актуален, только us и RS), мне противопоказано переходить на gui, чтобы у людей был выбор. в этой ситуации могу только посоветовать связаться с авторами эмуляторов, у которых gui-отладчики (а таких немало), чтобы они сделали именно те добавки, которые тебе жизненно необходимы

Dexus
12.08.2005, 15:59
этой ситуации могу только посоветовать связаться с авторами эмуляторов
короче меня вежливо послали на...
ладно. дело ваше.
прощевайте.

SMT
12.08.2005, 18:30
тема gui не интересна. если есть другие предолжения, you are welcome :)

Raider
12.08.2005, 23:39
:) :) :)
"Верхом памяти" всегда называли "верхние адреса" :)
Круто завернуто..
В общем низ - это ПЗУ, а верх - это уже ближе к FFFF.
Но "верх" тут наверно не буквален.. А может и буквален.
У Вас внизу справа стоит "карта" памяти (постраничная) в перевернутом виде...

Кто набивал HEX-дампы для своих первых компов, тот твердо знает,
что начальные адреса - это ВЕРХ :)
Да и мониторы показывают начальные адреса сверху.

SMT
13.08.2005, 02:07
уже всё, начало слева. правда, мельтешит эта штука сильно. поэтому скорее можно юзать как цветомузыку :)

Dexus
13.08.2005, 10:27
Кто набивал HEX-дампы для своих первых компов, тот твердо знает,
что начальные адреса - это ВЕРХ
Да и мониторы показывают начальные адреса сверху.
Да ясен перец.. смещение 0 оно всегда сверху... Дамп обычный..
Но почему вот это названо "низом памяти"... вот в чем вопрос :)
Я и предположил что нЕкогда был "отладчик-монитор", в котором верхние адреса были фактически наверху... Оттуда и терминология пошла уже.

thims
15.08.2005, 18:56
Но почему вот это названо "низом памяти"... вот в чем вопрос :)
Могу предположить, что корни уходят в английский язык. Там имеет место Low и High addresses. Очевидно, что 0 меньше любого положительного адреса. В этом и замес. Наши перевели Low, как низ, а High, как верх, соответственно. Что, в общем-то, правильно.

SMT
24.08.2005, 13:49
И еще - когда тыкаешь F8 на каком нибудь DJNZ, а внутри цикла стоит комманда, "выходящая" за рамки цикла (дальше) - то он просто выходить из монитора вовсехотел пофиксить, но увы, если внутри цикла вызывается подпрограмма, то это приведёт к тому, что она определится как выход из цикла

Dexus
24.08.2005, 17:05
хотел пофиксить, но увы, если внутри цикла вызывается подпрограмма, то это приведёт к тому, что она определится как выход из цикла
Ну да, технически она может быть выходом из цикла: внутри подпрограммы может быть POP стоять и переход на вообще другой кусок памяти..
Жаль...
Из-за подобных игр в стек вообще сложно определять где выход а где нет...

SMT
24.08.2005, 17:08
если детектить стек, то и без процедур будут сбои: есть циклы, которые пишут/читают стек

Spectre
02.10.2005, 12:52
Еще пожелания:

1. Или я не нашел, но как можно редактировать значение Extended port?
2. Пришлось перейти на STS 6.2 из-за возможности работать со скорпионовской памятью, а US0.32b2 не умеет из нее метки импортировать. Если автор напишет как метки импортируются сейчас (в общем виде), я напишу как изменить этот алгоритм для отвязки от STS (или отвязки от конкретной версии).

SMT
02.10.2005, 17:16
как можно редактировать значение Extended portесли речь о #1FFD, то пока никак. если надо, могу сделать аналогично #7FFD

как метки импортируются сейчас (в общем виде), я напишу как изменить этот алгоритм для отвязки от STSнужно найти адрес/банк начала меток. странно, но сам AlCo не знает, где они хранятся в аласме и советовал мне выдирать их из тела СТС, куда их сохраняет аласм при компиляции. поэтому прежде всего ищется страница СТС по 4-х байтной сигнатуре по адресу #FE84, которая как раз приходится на драйвер меток. чтобы уменьшить вероятность ложных срабатываний, проверяются не все страницы, а только #07,#47 (обычные для STS). адрес/банк выдираются из STS и по ним считывается таблица меток

jerri
03.10.2005, 10:46
Вчера попытался воспользоваться ACED под Unreal

экс + комманда не срабатывают - что я делаю не так?
экс забиндовал на LAlt

jerri
03.10.2005, 14:28
2SMT а как в дампе быстро перейти на нужный адрес?

Dexus
03.10.2005, 18:06
как в дампе быстро перейти на нужный адрес?
Ctrl+G

SMT
03.10.2005, 18:36
экс + комманда не срабатывают - что я делаю не так?
экс забиндовал на LAltaltlock=0 в ini?

в дампе быстро перейти на нужный адрескнопку можно прописать в ini в строке mem.goto, окно дампа должно быть активно

Spectre
04.10.2005, 23:00
если речь о #1FFD, то пока никак. если надо, могу сделать аналогично #7FFD нужно найти адрес/банк начала меток. странно, но сам AlCo не знает, где они хранятся в аласме и советовал мне выдирать их из тела СТС, куда их сохраняет аласм при компиляции. поэтому прежде всего ищется страница СТС по 4-х байтной сигнатуре по адресу #FE84, которая как раз приходится на драйвер меток. чтобы уменьшить вероятность ложных срабатываний, проверяются не все страницы, а только #07,#47 (обычные для STS). адрес/банк выдираются из STS и по ним считывается таблица меток

С #1FFD очень надо!

Как и обещал пишу тебе как можно отвязать импорт меток от STS'а.
Пересмотрел я все имеющиеся у меня версии Alasm (4.42-4.46 и 5.00). В них есть общая для всех версий процедура передачи адреса/банка (с началом меток) в STS. В зависимости от версии Alasm и STS меняются 2 адреса (см.ниже). Вот эта процедура для разных версий Alasm:


ALASM 4.42
B625:
LD HL,(9319) ;\
LD (FEFE),HL ; это не для меток
LD (FEE4),HL ;/
LD HL,(931B) ;тут лежит искомый адрес!
INC HL
LD (FE63),HL ;сохраняем его в STS
LD A,(IX+1D) ;страница с метками
AND C7 ;маска для этой страницы
LD (FE69),A ;помещаем и ее в STS
LD HL,...

ALASM 4.43
B5CF:
LD HL,(9321)
LD (FEFE),HL
LD (FEE4),HL
LD HL,(9323)
INC HL
LD (FE63),HL
LD A,(IX+1D)
AND (IX+32)
LD (FE69),A
LD HL,...

ALASM 4.44
B608:
LD HL,(9374)
LD (FEFE),HL
LD (FEE4),HL
LD HL,(9376)
INC HL
LD (FE63),HL
LD A,(IX+1D)
AND (IX+32)
LD (FE69),A
LD HL,...

ALASM 4.45
B608:
LD HL,(9351)
LD (FEFE),HL
LD (FEE4),HL
LD HL,(9353)
INC HL
LD (FE7C),HL
LD A,(IX+1D)
AND (IX+32)
LD (FE88),A
LD HL,...

ALASM 4.46
B56F:
LD HL,(934A)
LD (FEFE),HL
LD (FEE4),HL
LD HL,(934C)
INC HL
LD (FE7C),HL
LD A,(IX+1D)
AND (IX+32)
LD (FE88),A
LD HL,...

ALASM 5.00
B58E:
LD HL,(9362)
LD (FEFE),HL
LD (FEE4),HL
LD HL,(9364)
INC HL
LD (FE7C),HL
LD A,(IX+1D)
AND (IX+32)
LD (FE88),A
LD HL,...

Алгоритм будет следующий:
1. Ищем во всех страницах памяти сигнатуру (если откинуть Alasm 4.42)
LD HL,(nn)
LD (FEFE),HL
LD (FEE4),HL
LD HL,(adr)
INC HL
LD (nn),HL
LD A,(IX+1D)
AND (IX+32)
LD (nn),A
LD HL,nn
2. Можно дополнительно проверить что сигнатура лежит в диапазоне #B400..#B7FF и это именно страница с Аласмом (у него есть ряд фиксированных адресов).
3. В найденной странице берем интересующие нас сведения. Искомый адрес начала меток лежит в (adr). Учитывая что во всех версиях IX=80BF, но Alasm переносит себя из С000 в 8000 где и работает, делаем на это поправку: искомая страница: (C0DC) AND (C0F1).

Этот алгоритм будет работать на версиях Alasm'а 4.43 и выше.

SMT
05.10.2005, 17:39
Как и обещал пишу тебе как можно отвязать импорт меток от STS'а [...] skipped
проверишь?
version 0.32b3 05 oct 2005

+ monitor: Alt-M to edit model-specific high memory port [sb Spectre]
+ monitor: reading ALASM labels without STS [thanks to Spectre]

SMT
05.10.2005, 17:55
единственное, по этому способу поиск осуществляется в нижней (128k) памяти. так как АЛАСМ под банк выделяет только 1 ячейку, я считаю, что это значение, выводимое в #7FFD. как используется верхняя память скорпиона, пока не разбирался

jerri
05.10.2005, 19:02
память поддерживается любая но то что кидается в 1FFD задается СТСом
а АлКо переписал драйвер для Аласма и задает страницу для скорпиона 1 байтом

Dima Bystrov (2:5029/77.48)
08.10.2005, 06:06
Hello Guest!

05 Oct 05 19:10, Guest from forum zx pk ru wrote to All:


Gr> единственное, по этому способу поиск осуществляется в нижней (128k)
Gr> памяти. так как АЛАСМ под банк выделяет только 1 ячейку, я считаю, что
Gr> это значение, выводимое в #7FFD. как используется верхняя память
Gr> скорпиона, пока не разбирался

используй драйвер скорповой памяти с пентагоновской нумерацией страниц
(ZSKAY512), старый - давить, ибо несовместимость.
Hомера страниц #40..#47 - со включенным 4 битом #1ffd, а номера #00..#07 - с
выключенным.

- A.Coder [Wolf3d2004 InfoGuide7 ACEdit96 ACN42 PT3695 Chip13 HexFill HDDoct6]
[Ansi04 8col12 ZXRar27UnR59 Jpg042 CacVox1 Dbs07 Gluk61R PC21 Alasm50f2 Sts70i]

... ZX Spectrum today

Spectre
09.10.2005, 22:04
проверишь?
version 0.32b3 05 oct 2005

+ monitor: Alt-M to edit model-specific high memory port [sb Spectre]
+ monitor: reading ALASM labels without STS [thanks to Spectre]

Проверил. Alasm 4.42,4.45,4.46,5.01 метки импортируются нормально. Нашел один глюк: если метки приходятся на область ПЗУ (0..#3fff) они не отображаются. У меня программа при помощи DISP 0 туда компилируется и там работает, а меток не видно. :(

Насчет импорта из памяти >128К все правильно написал AlCo (Dima Bystrov) - номер банка это не совсем число которое заносится в #7FFD. Биты 0,1,2 заносятся в #7FFD, а 6-ой и 7-ой биты надо занести в Extended port. Я так понимаю соответствие следующее (лучше чтобы AlCo подтвердил):

#7FFD биты 6,7 - Pentagon
#1FFD биты 4,6 - Scorpion/KAY
#DFFD биты 0,1 - Profi
#FDFD биты 0,1 - ATM1

SMT
09.10.2005, 22:56
если метки приходятся на область ПЗУ (0..#3fff) они не отображаютсяметки привязаны не к адресу, а к физической ячейке памяти. это сделано, чтобы в разных страницах были свои метки в области #C000-#FFFF и чтобы метки basic48/128/trdos не мешали друг другу. если у тебя программа ниже #4000 физически лежит в кеше или ПЗУ, то unreal это не поймёт, а если в нулевой банке, включенной вместо озу, должно работать
Насчет импорта из памяти >128К все правильно написал AlCoну я так и думал, просто перестраховался. чтобы разблокировать поиски в верхней памяти, нужно по адресу #24BE3 в файле unreal.exe записать 16 (#10) вместо 8

Spectre
10.10.2005, 22:14
Цитата:
если метки приходятся на область ПЗУ (0..#3fff) они не отображаются

метки привязаны не к адресу, а к физической ячейке памяти. это сделано, чтобы в разных страницах были свои метки в области #C000-#FFFF и чтобы метки basic48/128/trdos не мешали друг другу. если у тебя программа ниже #4000 физически лежит в кеше или ПЗУ, то unreal это не поймёт, а если в нулевой банке, включенной вместо озу, должно работать

У меня не отображаются метки в 0-ой странице подставленной вместо ПЗУ (при помощи OUT (#1FFD),1). Те метки что попадают выше #4000 отображаются нормально. Причем STS 6.2 отображает и те и другие метки правильно.


Цитата:
Насчет импорта из памяти >128К все правильно написал AlCo

ну я так и думал, просто перестраховался. чтобы разблокировать поиски в верхней памяти, нужно по адресу #24BE3 в файле unreal.exe записать 16 (#10) вместо 8
Я так понял что это разблокирует поиск только в пентагоновской памяти? Очень хотелось бы поиск и в верхней памяти остальных клонов. Для этого всего-лишь надо добавить перевод (для 1Мб памяти):

из:
[номер страницы] биты 5,6,7
в:
- для #7FFD биты 5,6,7
- для #1FFD биты 4,6,7
- для #DFFD биты 0,1,2
- для #FDFD биты 0,1,2


Ну и разумеется: [номер страницы] биты 0,1,2 в #7FFD биты 0,1,2.

SMT
10.10.2005, 22:36
У меня не отображаются метки в 0-ой странице подставленной вместо ПЗУда, сейчас посмотрел, метки #C000-#FFFF привязываются к нулевой странице, независимо от того, куда её включить, а метки #0000-#3FFF игнорируются. с этими страницами неохота заморачиваться, тем более, что из таблицы меток ассемблера нельзя узнать, в какой странице лежит код, привязанный к метке, а то бы получилось самое то - разные страницы с разными метками
Я так понял что это разблокирует поиск только в пентагоновской памяти?нет, этот патч должен работать в любой 256-й (если записать не 16, а 32, то и в 512-й. 1024 не поддерживается). проверить я не смог - не знаю, где взять АЛАСМ, забирающийся в верхние страницы скорпиона

Spectre
11.10.2005, 14:53
да, сейчас посмотрел, метки #C000-#FFFF привязываются к нулевой странице, независимо от того, куда её включить, а метки #0000-#3FFF игнорируются. с этими страницами неохота заморачиваться, тем более, что из таблицы меток ассемблера нельзя узнать, в какой странице лежит код, привязанный к метке, а то бы получилось самое то - разные страницы с разными метками

Очень жаль, это как раз то, ради чего мне и нужен был импорт из скорпионовской памяти минуя STS. А можно ли сделать исключение для меток в области 0..#3FFF, чтобы они отображались независимо от того что включено в этой области? Ведь нередко для отладки программы помещают в теневое ОЗУ или нулевую страницу ПЗУ.


нет, этот патч должен работать в любой 256-й (если записать не 16, а 32, то и в 512-й. 1024 не поддерживается). проверить я не смог - не знаю, где взять АЛАСМ, забирающийся в верхние страницы скорпиона

У меня не импортировал. Вот тебе Alasm 5.01 со всеми драйверами. Сейчас он настроен на Scorpion 1Мб. Номера страниц по маске #D7. Сменить используемые страницы памяти и драйвер можно через конфиг (кнопка "F" в главном меню).

SMT
11.10.2005, 19:15
Очень жаль, это как раз то, ради чего мне и нужен был импорт из скорпионовской памяти минуя STSэто не важно, через STS или без него. чтобы появились метки ниже #4000, нужно ещё патчить
Вот тебе Alasm 5.01 со всеми драйверами. Сейчас он настроен на Scorpion 1Мбхорошо, завтра посмотрю

Kpa3
11.10.2005, 20:49
СэМэТэ, зделай cheat console, типа как в эмулях NES.
ну там, задаешь искомую величину, она ищется. потом, после изменения данной величины найденные результаты отсеиваются. ну и т.д.
хотя, учитывая то, что великое множество спектрумовских гам уже обессмерчено, то наверное, это будет излишеством.
ну я бы напесал. хотя бы чтоб было.
и еще. где ты брал описание форматов всяких, типа там td0, fdi и прочие "нестандарты"?

SMT
11.10.2005, 21:37
cheat consoleда, можно и такое...
и еще. где ты брал описание форматов всяких, типа там td0, fdi и прочие "нестандарты"?кому нужна была поддержка этих форматов, сами искали и присылали :)

Kpa3
11.10.2005, 22:21
кому нужна была поддержка этих форматов, сами искали и присылали
ты просто везунчик. :) перешли их мне :)

SMT
12.10.2005, 07:43
ты просто везунчик. :) перешли их мне :)
да, насчёт теледиска я поторопился. вспомнил, оказывается изучал формат по дизасму самого теледиска и утилит, а также исходники плагина к эмулятору Шалаева. но тебе сейчас проще - есть исходники фар-плагинов и моего эмулятора (будешь делать запись, обрати внимаине на проверку и установку всех контрольных сумм, чтобы теледиск не ругался на изменённый образ. это есть не во всех td0-писалках)

SMT
12.10.2005, 17:44
насчёт импорта меток. не работает из-за того, что считаются значащие биты 6,7 то есть банк #40 - это 256-я память, а аласм считает значащими биты 5,6,7, то есть этот банк - в 512-й. надо, наверное, вообще от аласм/стс отвязаться и искать в памяти корректно составленные цепочки меток. в связи с этим вопрос к AlCo: какие символы могут быть в тексте метки?

Spectre
13.10.2005, 18:53
насчёт импорта меток. не работает из-за того, что считаются значащие биты 6,7 то есть банк #40 - это 256-я память, а аласм считает значащими биты 5,6,7, то есть этот банк - в 512-й.

Глянул я тоже, похоже ты прав, причина именно в этом. К Аласму прилагаются 9 драйверов, из которых только 2 удовлетворяют условию #40 = 256я память:

Scorpion256/KAY1024(only 512): mask #C7 (11000111)
PENTAGON 512: #C7 (11000111)

Еще 2 не подходят по описанной тобой проблемме:

SCORPION 1M: mask #D7 (11010111)
PENTAGON 1M: mask #E7 (11100111)

Остальные 5 драйверов используют плоскую нумарацию страниц и поддержать их не выйдет никак:

PROFI
SCORPION
ATM
KAY
Scorpion ZS 512


надо, наверное, вообще от аласм/стс отвязаться и искать в памяти корректно составленные цепочки меток. в связи с этим вопрос к AlCo: какие символы могут быть в тексте метки?

Хорошая идея. Символы названий меток могут быть в диапазоне #11-#7F, исключая #22 и #3B.

От аласма отказываться наверное не стоит, из него можно брать адрес начала меток, иначе можно ошибится. Хотя формат таблицы меток до того избыточный, что вряд-ли проскочит глюк...

SMT
13.10.2005, 21:06
Остальные 5 драйверов используют плоскую нумарацию страниц и поддержать их не выйдет никакглавное знать, как нумеруются банки, а там уж код под это написать (хотя универсальный, совместимый с пентагоном, действительно, сложновато)
Хорошая идея. Символы названий меток могут быть в диапазоне #11-#7F, исключая #22 и #3Bа как же +, -, ?, *, /, (), [], и т.п... или нужно отделять идентификаторы от операторов пробелами в арифметических выражениях?
От аласма отказываться наверное не стоит, из него можно брать адрес начала меток, иначе можно ошибитсяда пускай... можно выводить все банки, где найдены метки в меню, с адресом и количеством меток, а там юзер пускай сам выберет

Dima Bystrov (2:5029/77.48)
13.10.2005, 21:52
Hello Андрей!

11 Oct 05 07:18, Андрей Богданович wrote to All:


АБ> всего-лишь надо добавить перевод (для 1Мб памяти):

АБ> из:
АБ> [номер страницы] биты 5,6,7
АБ> в:
АБ> - для #7FFD биты 5,6,7

в 7FFD бит5 надо делать СТАРШЕ 7-го! См. DOS6.xE.

- A.Coder [Wolf3d2004 InfoGuide7 ACEdit96 ACN42 PT3695 Chip13 HexFill HDDoct6]
[Ansi04 8col12 ZXRar27UnR59 Jpg042 CacVox1 Dbs07 Gluk61R PC21 Alasm50f2 Sts70i]

... ZX Spectrum today

Spectre
14.10.2005, 10:57
а как же +, -, ?, *, /, (), [], и т.п... или нужно отделять идентификаторы от операторов пробелами в арифметических выражениях?

Их использовать в метках тоже нельзя, я просто перестраховываюсь. ;) Вот кусок авторского исходника конвертера Alasm>text:

(в C длина метки)

S2T2
DEC C
JR Z,S2TEND
LD A,(HL)
INC HL
CP #10
JR C,S2T5
JR Z,S2T7
CP #80
JR NC,S2T3
CP #22 ;"
JR Z,S2T9
CP ";"
JR Z,S2T8
LD (DE),A
INC DE
JR S2T2

То есть ничего не мешает в следующей версии Аласма сделать например "!" в названиях меток.


да пускай... можно выводить все банки, где найдены метки в меню, с адресом и количеством меток, а там юзер пускай сам выберет

Почему бы и нет?

SMT
14.10.2005, 17:22
а коды #11-#1F зачем? их можно в аласме ввести?

SMT
16.10.2005, 18:37
Почему бы и нет?тогда вот

Spectre
16.10.2005, 19:42
Покопал я немного компилятор Аласма, пытался найти проверку которой он метки разбирает на правильные и неправильные, но там не все так просто, нахрапом найти не получилось. Может AlCo напишет, или позже я еще раз попробую.

Spectre
16.10.2005, 19:54
тогда вот

На скорпионовской памяти отработало правильно, на пентагоне 256 и 512 выдает что метки не найдены...

SMT
16.10.2005, 23:10
на пентагоне 256 и 512 выдает что метки не найденыа исходник тот же самый? сейчас проверил на ace0.92, pent-128/256/512/1M - работает. если всего в цепочке 1 метка, я такие пропускаю, их слишком много в банках, где лежит сам ассемблер

Spectre
17.10.2005, 10:42
а исходник тот же самый? сейчас проверил на ace0.92, pent-128/256/512/1M - работает. если всего в цепочке 1 метка, я такие пропускаю, их слишком много в банках, где лежит сам ассемблер

Нет исходник другой. Действительно, на другом исходнике метки все импортировались правильно. Осталось найти из-за чего метки не находяеся на исходнике Quick Commander (это 5 аласмовских страниц), по каким критериям ты их определяешь? Попробую найти где не срабатывает.

SMT
17.10.2005, 16:45
по каким критериям ты их определяешьцепочка меток, заканчивающаяся #00. адрес начала аласм показывает сам (если посмотреть хочешь в памяти). символы внутри могут быть буквы-цифры и @$_. попробуй последовательно подтирать программу, пока метки не начнут видется. где сотрёшь - там и баг

Spectre
17.10.2005, 18:25
цепочка меток, заканчивающаяся #00. адрес начала аласм показывает сам (если посмотреть хочешь в памяти). символы внутри могут быть буквы-цифры и @$_. попробуй последовательно подтирать программу, пока метки не начнут видется. где сотрёшь - там и баг

Пока не нашел закономерность появления этого глюка, но нашел попутно другой глюк: если в программе одна метка она не импортируется.

SMT
17.10.2005, 18:37
если в программе одна метка она не импортируетсяя уже писал, почему. или лучше список из десятка найденных цепочек разгребать?
Пока не нашел закономерность появления этого глюкаможет, дело в размере (таблица не помещается в страницу?)

Spectre
17.10.2005, 18:47
Отловил я этот глюк. Причина очень простая: неправильно определяется начало таблицы меток. Я компилирую разные исходники, смотрю какой адрес аласм передает в STS, сравниваю его с тем что показывает US по CTRL+A, иногда адреса совпадают, но часто различаются, тогда глюк и проявляется.

SMT
17.10.2005, 20:29
исходник вышлешь?

Spectre
19.10.2005, 11:27
исходник вышлешь?

http://ob.scenosaurus.org/temp/bug.zip

Бага нету на версиях аласма 4.47 и 5.01 (может еще на каких, я не проверял). Есть баг вот на этой версии (4.46) с этим куском исходника. Настроено под Pentagon 512. При компиляции выдаст кучу ненайденных меток, не обращай внимание. US не находит ни одной метки, STS 5.6 спокойно их находит.

Проверяю на US 0.32b4.

Dima Bystrov (2:5029/77.48)
19.10.2005, 16:35
FromNet: Ryazan (Ryazan_Net)

Hello Андрей!

16 Oct 05 21:52, Андрей Богданович wrote to All:


Покопал я немного компилятор Аласма, пытался найти проверку которой он
метки разбирает на правильные и неправильные, но там не все так
просто, нахрапом найти не получилось. Может AlCo напишет, или позже я
еще раз попробую.

я слабо разбираюсь в исходнике аласма :(
видимо, в srclbl просто проходятся все символы идентификатора, а выход
происходит на неметочных символах. после этого ошибка выдаётся не здесь, а при
анализе следующего символа (если он не арифметический, не команда, не
комментарий, не табуляция.... одним словом, неожиданный).

- A.Coder [Wolf3d2004 InfoGuide7 ACEdit96 ACN42 PT3695 Chip13 HexFill HDDoct6]
[Ansi04 8col12 ZXRar27UnR59 Jpg042 CacVox1 Dbs07 Gluk61R PC21 Alasm5.01 Sts70i]

... ZX Spectrum today

SMT
19.10.2005, 23:06
Бага нету на версиях аласма 4.47 и 5.01 (может еще на каких, я не проверял)видимо, разные версии аласма по-разному заканчивают табдицу меток. в одном случае кодом #00 (по адресу #FDFF), в другом - строго по адресу #FE00, начиная с #FE00 - просто мусор. сейчас сделал оба условия. дополнительно сделал проверку корректности ещё не определённых меток (раньше их игнорировал, но ведь идентификатор для них уже сформирован, можно проверить). должно быть меньше ложных срабатываний

тут ещё можно подумать с нулевым банком. для четвертинки #0000-#3fff указывать, в какой физической странице (пзу, кеш, банк 0, или что-то ещё) будет лежать этот код. для полной универсальности можно и на остальные чеивертинки жто сделать, например, для ATM можно банки перемещать, но слишком запутанно для пользователя будет...

Spectre
20.10.2005, 15:13
Проверил на разных моделях памяти (Scorpion и Pentagon), импортирует отлично. Только появился баг: кое-где попадаются метки с мусором вместо названия (в этих местах меток вообще быть не должно), причем в одном месте есть JP на такую метку, так US вываливается в винду с ошибкой когда пытается напечатать этот JP.


тут ещё можно подумать с нулевым банком. для четвертинки #0000-#3fff указывать, в какой физической странице (пзу, кеш, банк 0, или что-то ещё) будет лежать этот код. для полной универсальности можно и на остальные чеивертинки жто сделать, например, для ATM можно банки перемещать, но слишком запутанно для пользователя будет...

Было бы просто великолепно иметь возможность выбора! Я думаю достаточно выбирать из 3 вариантов: ПЗУ (default), ОЗУ (0 bank) и кэш.

SMT
20.10.2005, 17:46
--------------------------------------------------------------------------------

Проверил на разных моделях памяти (Scorpion и Pentagon), импортирует отлично. Только появился баг: кое-где попадаются метки с мусором вместо названия (в этих местах меток вообще быть не должно), причем в одном месте есть JP на такую метку, так US вываливается в винду с ошибкой когда пытается напечатать этот JPстранно, ведь содержимое меток проверяется на алфавитно-цифровые знаки. не можешь выслать пример файла?

Spectre
21.10.2005, 16:52
странно, ведь содержимое меток проверяется на алфавитно-цифровые знаки. не можешь выслать пример файла?

Я пытаюсь вычленить кусок исходника на котором глюк заметен, но пока не получается. Есть у меня подозрение что это связано с такими командами как JR NZ,$-5, где имя метки не присутствует, но метка есть.

SMT
21.10.2005, 20:45
Есть у меня подозрение что это связано с такими командами как JR NZ,$-5, где имя метки не присутствует, но метка естья думаю, что такая метка не пишется в таблицу, так как никогда в другом месте не понадобится, а вычислить её можно всегда в момент ассемблирования этой строчки

Spectre
24.10.2005, 22:52
2SMT: я сейчас в отпуске, а дома у меня Athlon, на котором не работают беты 4-6 (ругается на отсуствие SSE2). Все еще хочу отловить глюк с метками, не можешь скомпилить версию под AMD?

Dexus
25.10.2005, 00:51
Бери версию для p1.

Spectre
25.10.2005, 00:59
Бери версию для p1.

Где? Обрати внимание что я прошу беты 4-6.