2SMT а как в дампе быстро перейти на нужный адрес?
Вид для печати
2SMT а как в дампе быстро перейти на нужный адрес?
Ctrl+GЦитата:
Сообщение от jerri
altlock=0 в ini?Цитата:
Сообщение от jerri
кнопку можно прописать в ini в строке mem.goto, окно дампа должно быть активноЦитата:
Сообщение от jerri
С #1FFD очень надо!Цитата:
Сообщение от SMT
Как и обещал пишу тебе как можно отвязать импорт меток от 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 и выше.
проверишь?Цитата:
Сообщение от Spectre
Код: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]
единственное, по этому способу поиск осуществляется в нижней (128k) памяти. так как АЛАСМ под банк выделяет только 1 ячейку, я считаю, что это значение, выводимое в #7FFD. как используется верхняя память скорпиона, пока не разбирался
память поддерживается любая но то что кидается в 1FFD задается СТСом
а АлКо переписал драйвер для Аласма и задает страницу для скорпиона 1 байтом
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
Проверил. Alasm 4.42,4.45,4.46,5.01 метки импортируются нормально. Нашел один глюк: если метки приходятся на область ПЗУ (0..#3fff) они не отображаются. У меня программа при помощи DISP 0 туда компилируется и там работает, а меток не видно. :(Цитата:
Сообщение от SMT
Насчет импорта из памяти >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
метки привязаны не к адресу, а к физической ячейке памяти. это сделано, чтобы в разных страницах были свои метки в области #C000-#FFFF и чтобы метки basic48/128/trdos не мешали друг другу. если у тебя программа ниже #4000 физически лежит в кеше или ПЗУ, то unreal это не поймёт, а если в нулевой банке, включенной вместо озу, должно работатьЦитата:
если метки приходятся на область ПЗУ (0..#3fff) они не отображаются
ну я так и думал, просто перестраховался. чтобы разблокировать поиски в верхней памяти, нужно по адресу #24BE3 в файле unreal.exe записать 16 (#10) вместо 8Цитата:
Насчет импорта из памяти >128К все правильно написал AlCo
У меня не отображаются метки в 0-ой странице подставленной вместо ПЗУ (при помощи OUT (#1FFD),1). Те метки что попадают выше #4000 отображаются нормально. Причем STS 6.2 отображает и те и другие метки правильно.Цитата:
Сообщение от SMT
Я так понял что это разблокирует поиск только в пентагоновской памяти? Очень хотелось бы поиск и в верхней памяти остальных клонов. Для этого всего-лишь надо добавить перевод (для 1Мб памяти):Цитата:
Сообщение от SMT
из:
[номер страницы] биты 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.
да, сейчас посмотрел, метки #C000-#FFFF привязываются к нулевой странице, независимо от того, куда её включить, а метки #0000-#3FFF игнорируются. с этими страницами неохота заморачиваться, тем более, что из таблицы меток ассемблера нельзя узнать, в какой странице лежит код, привязанный к метке, а то бы получилось самое то - разные страницы с разными меткамиЦитата:
У меня не отображаются метки в 0-ой странице подставленной вместо ПЗУ
нет, этот патч должен работать в любой 256-й (если записать не 16, а 32, то и в 512-й. 1024 не поддерживается). проверить я не смог - не знаю, где взять АЛАСМ, забирающийся в верхние страницы скорпионаЦитата:
Я так понял что это разблокирует поиск только в пентагоновской памяти?
Очень жаль, это как раз то, ради чего мне и нужен был импорт из скорпионовской памяти минуя STS. А можно ли сделать исключение для меток в области 0..#3FFF, чтобы они отображались независимо от того что включено в этой области? Ведь нередко для отладки программы помещают в теневое ОЗУ или нулевую страницу ПЗУ.Цитата:
Сообщение от SMT
У меня не импортировал. Вот тебе Alasm 5.01 со всеми драйверами. Сейчас он настроен на Scorpion 1Мб. Номера страниц по маске #D7. Сменить используемые страницы памяти и драйвер можно через конфиг (кнопка "F" в главном меню).Цитата:
Сообщение от SMT
это не важно, через STS или без него. чтобы появились метки ниже #4000, нужно ещё патчитьЦитата:
Сообщение от Spectre
хорошо, завтра посмотрюЦитата:
Сообщение от Spectre
СэМэТэ, зделай cheat console, типа как в эмулях NES.
ну там, задаешь искомую величину, она ищется. потом, после изменения данной величины найденные результаты отсеиваются. ну и т.д.
хотя, учитывая то, что великое множество спектрумовских гам уже обессмерчено, то наверное, это будет излишеством.
ну я бы напесал. хотя бы чтоб было.
и еще. где ты брал описание форматов всяких, типа там td0, fdi и прочие "нестандарты"?
да, можно и такое...Цитата:
Сообщение от Kpa3
кому нужна была поддержка этих форматов, сами искали и присылали :)Цитата:
Сообщение от Kpa3
ты просто везунчик. :) перешли их мне :)Цитата:
Сообщение от SMT
да, насчёт теледиска я поторопился. вспомнил, оказывается изучал формат по дизасму самого теледиска и утилит, а также исходники плагина к эмулятору Шалаева. но тебе сейчас проще - есть исходники фар-плагинов и моего эмулятора (будешь делать запись, обрати внимаине на проверку и установку всех контрольных сумм, чтобы теледиск не ругался на изменённый образ. это есть не во всех td0-писалках)Цитата:
Сообщение от Kpa3
насчёт импорта меток. не работает из-за того, что считаются значащие биты 6,7 то есть банк #40 - это 256-я память, а аласм считает значащими биты 5,6,7, то есть этот банк - в 512-й. надо, наверное, вообще от аласм/стс отвязаться и искать в памяти корректно составленные цепочки меток. в связи с этим вопрос к AlCo: какие символы могут быть в тексте метки?
Глянул я тоже, похоже ты прав, причина именно в этом. К Аласму прилагаются 9 драйверов, из которых только 2 удовлетворяют условию #40 = 256я память:Цитата:
Сообщение от SMT
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
Хорошая идея. Символы названий меток могут быть в диапазоне #11-#7F, исключая #22 и #3B.Цитата:
Сообщение от SMT
От аласма отказываться наверное не стоит, из него можно брать адрес начала меток, иначе можно ошибится. Хотя формат таблицы меток до того избыточный, что вряд-ли проскочит глюк...
главное знать, как нумеруются банки, а там уж код под это написать (хотя универсальный, совместимый с пентагоном, действительно, сложновато)Цитата:
Сообщение от Spectre
а как же +, -, ?, *, /, (), [], и т.п... или нужно отделять идентификаторы от операторов пробелами в арифметических выражениях?Цитата:
Сообщение от Spectre
да пускай... можно выводить все банки, где найдены метки в меню, с адресом и количеством меток, а там юзер пускай сам выберетЦитата:
Сообщение от Spectre
Hello Андрей!
11 Oct 05 07:18, Андрей Богданович wrote to All:
в 7FFD бит5 надо делать СТАРШЕ 7-го! См. DOS6.xE.Цитата:
АБ> всего-лишь надо добавить перевод (для 1Мб памяти):
АБ> из:
АБ> [номер страницы] биты 5,6,7
АБ> в:
АБ> - для #7FFD биты 5,6,7
- A.Coder [Wolf3d2004 InfoGuide7 ACEdit96 ACN42 PT3695 Chip13 HexFill HDDoct6]
[Ansi04 8col12 ZXRar27UnR59 Jpg042 CacVox1 Dbs07 Gluk61R PC21 Alasm50f2 Sts70i]
... ZX Spectrum today
Их использовать в метках тоже нельзя, я просто перестраховываюсь. ;) Вот кусок авторского исходника конвертера Alasm>text:Цитата:
Сообщение от SMT
(в 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
а коды #11-#1F зачем? их можно в аласме ввести?
тогда вотЦитата:
Сообщение от Spectre
Покопал я немного компилятор Аласма, пытался найти проверку которой он метки разбирает на правильные и неправильные, но там не все так просто, нахрапом найти не получилось. Может AlCo напишет, или позже я еще раз попробую.
На скорпионовской памяти отработало правильно, на пентагоне 256 и 512 выдает что метки не найдены...Цитата:
Сообщение от SMT
а исходник тот же самый? сейчас проверил на ace0.92, pent-128/256/512/1M - работает. если всего в цепочке 1 метка, я такие пропускаю, их слишком много в банках, где лежит сам ассемблерЦитата:
на пентагоне 256 и 512 выдает что метки не найдены
Нет исходник другой. Действительно, на другом исходнике метки все импортировались правильно. Осталось найти из-за чего метки не находяеся на исходнике Quick Commander (это 5 аласмовских страниц), по каким критериям ты их определяешь? Попробую найти где не срабатывает.Цитата:
Сообщение от SMT
цепочка меток, заканчивающаяся #00. адрес начала аласм показывает сам (если посмотреть хочешь в памяти). символы внутри могут быть буквы-цифры и @$_. попробуй последовательно подтирать программу, пока метки не начнут видется. где сотрёшь - там и багЦитата:
по каким критериям ты их определяешь
Пока не нашел закономерность появления этого глюка, но нашел попутно другой глюк: если в программе одна метка она не импортируется.Цитата:
Сообщение от SMT
я уже писал, почему. или лучше список из десятка найденных цепочек разгребать?Цитата:
Сообщение от Spectre
может, дело в размере (таблица не помещается в страницу?)Цитата:
Сообщение от Spectre
Отловил я этот глюк. Причина очень простая: неправильно определяется начало таблицы меток. Я компилирую разные исходники, смотрю какой адрес аласм передает в STS, сравниваю его с тем что показывает US по CTRL+A, иногда адреса совпадают, но часто различаются, тогда глюк и проявляется.
исходник вышлешь?
http://ob.scenosaurus.org/temp/bug.zipЦитата:
Сообщение от SMT
Бага нету на версиях аласма 4.47 и 5.01 (может еще на каких, я не проверял). Есть баг вот на этой версии (4.46) с этим куском исходника. Настроено под Pentagon 512. При компиляции выдаст кучу ненайденных меток, не обращай внимание. US не находит ни одной метки, STS 5.6 спокойно их находит.
Проверяю на US 0.32b4.
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
видимо, разные версии аласма по-разному заканчивают табдицу меток. в одном случае кодом #00 (по адресу #FDFF), в другом - строго по адресу #FE00, начиная с #FE00 - просто мусор. сейчас сделал оба условия. дополнительно сделал проверку корректности ещё не определённых меток (раньше их игнорировал, но ведь идентификатор для них уже сформирован, можно проверить). должно быть меньше ложных срабатыванийЦитата:
Сообщение от Spectre
тут ещё можно подумать с нулевым банком. для четвертинки #0000-#3fff указывать, в какой физической странице (пзу, кеш, банк 0, или что-то ещё) будет лежать этот код. для полной универсальности можно и на остальные чеивертинки жто сделать, например, для ATM можно банки перемещать, но слишком запутанно для пользователя будет...
Проверил на разных моделях памяти (Scorpion и Pentagon), импортирует отлично. Только появился баг: кое-где попадаются метки с мусором вместо названия (в этих местах меток вообще быть не должно), причем в одном месте есть JP на такую метку, так US вываливается в винду с ошибкой когда пытается напечатать этот JP.
Было бы просто великолепно иметь возможность выбора! Я думаю достаточно выбирать из 3 вариантов: ПЗУ (default), ОЗУ (0 bank) и кэш.Цитата:
Сообщение от SMT
странно, ведь содержимое меток проверяется на алфавитно-цифровые знаки. не можешь выслать пример файла?Цитата:
Сообщение от Spectre
Я пытаюсь вычленить кусок исходника на котором глюк заметен, но пока не получается. Есть у меня подозрение что это связано с такими командами как JR NZ,$-5, где имя метки не присутствует, но метка есть.Цитата:
Сообщение от SMT