Просмотр полной версии : поиск нужного адреса для вызова randomize usr
SAM style
19.04.2014, 11:55
как вообще по факту можно узнать какой нужен адрес для вызова/запуска игры для randomize usr? в Spectaculator'e есть debugger который показывает что в памяти записано, через него можно узнать?Отдебажить загрузчик игры. Нужен дебагер с дизассемблером и знание ассемблера. Найдёшь переход в основной цикл - это и будет адресом запуска игры.
вначале нужно сообщать - что имеется на входе в проблему, примеры ;)
JeRrS, приведи конкретный пример (выложи свой кодовый файл) - наугад советовать трудно
demetrius2003
19.04.2014, 12:05
Я так понял, есть только кодовый блок? Это может стать очень интересным и весьма нетривиальным занятием, которое растянется на месяцы. Пример - обнаружил я у себя блок кода длинной 16 Кб, который я сделал в 1999 году. Состоял он из какого-то монитора, кучи полезных подпрограмм и, собственно, управляющей оболочки. Причём это всё было сращено в один массив байтов. Сейчас в 2014 году я напрочь позабыл адрес входной точки и адрес загрузки. При попытке грузить блок кода с круглых адресов, типа 35000, 45000 и т. д. с последующим запуском с этого же адреса всё виснет. Я то помню, что адрес запуска был глубоко в коде, только где? Дизассемблирование помогает слабо, т. к. надо знать верный адрес, с которого и должен располагаться код, иначе даже crossreference на строки и константы найти невозможно.
P.S.: А вот если у Вас есть Бейсик-загрузчик, то задача упрощается на несколько порядков.
А просто посмотреть в коде бейсика адрес перехода нет?
Не совсем понятен вопрос.
Вот я и хочу понять как допустим через встроенный дебаггер спектакулятора это вынюхать но у другой игры
блин, выложи игру в которой тебе непонятен стартовый адрес.
самый простой способ поставить в отладчике BreakPoint на почти весь диапазон памяти.
я предположительно щас расставил где что должно быть и хочу выяснить какой должен быть rand usr
адрес блока неправильный, надо грузить с 24064
(и это какой-то BoulderDash)
clear 24063
load "" code 24064
randomize usr 31927
Titus опередил.
я уже понял что это ремикс BD3.
а правильный адрес загрузки определил по настройкам для IM2
Titus, ну вот теперь объясните почему старт именно с 24063 и как рассчитали что rand usr 31927? :)
24064 начало, а не старт. 24063 - это стек бейсика.
Эту цифру подсказал Гудбой.
А уж старт вычислить проще простого - ищешь установку вектора прерывания, и смотришь, кто вызывает эту подпрограмму. Потом смотришь, кто ее, и так находишь корневую программу.
Можно еще искать по установке стека (LD SP,xxxx).
поиск: i,a
#8117 явная процедура прерывания, по ней узнаем правильное начало загрузки: 24064
дизасмим, проверяем - все ок, адреса процедур/переходов совпали...
LL80F6 LD HL,#FD00
LD DE,#FD01
LD BC,#0100
LD (HL),#FE
LDIR
LD DE,#FEFE
LD HL,LL8117
LD BC,#0041
LDIR
DI
LD A,#FD
LD I,A
IM 2
EI
RET
;
LL8117 PUSH AF
двигаемся по процедурам на уровни выше:
поиск: LL80F6
LL7BFC CALL LL6FC1
LD (IY+#46),#50
...
CALL LL7BC8
CALL LL80F6
RET
;
LL7CA7 LD SP,LLD86D
поиск: LL7BFC
CALL LL7BC8
CALL LL80F6
RET
;
LL7CA7 LD SP,LLD86D
LD IY,#5B80
CALL LL7BFC
LL7CB1 CALL LL7B99
JP LL7CB1
;
DI
CALL LL7A8F
LD A,#01
LD (#5BB9),A
JP LL7CA7
;
LL7CC3 CALL LL78A7
поиск: LL7CA7 - оно там же
что за? LL7A8F
LL7A8F LD HL,#5B00
LD DE,#5B01
LD BC,#0200
LD (HL),#00
LDIR
RET
очистка экрана, ок, возможный старт:
#7cb7 / 31927
DI
CALL LL7A8F
LD A,#01
LD (#5BB9),A
JP LL7CA7
;)
Я знаком с авторами тех трех Boulder Dash ей. А авторском виде оно есть у меня.
т.е у вас есть скажем так оригинальные ленточные образы этих трех частей? было бы интересно взглянуть
Есть оригиналы, но не ленточные, а TR-DOSные, сделанные авторами. А так, да, делали они ещё на ленте, дисковод позднее был подключен.
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot