буй
Вид для печати
буй
вначале нужно сообщать - что имеется на входе в проблему, примеры ;)
JeRrS, приведи конкретный пример (выложи свой кодовый файл) - наугад советовать трудно
Я так понял, есть только кодовый блок? Это может стать очень интересным и весьма нетривиальным занятием, которое растянется на месяцы. Пример - обнаружил я у себя блок кода длинной 16 Кб, который я сделал в 1999 году. Состоял он из какого-то монитора, кучи полезных подпрограмм и, собственно, управляющей оболочки. Причём это всё было сращено в один массив байтов. Сейчас в 2014 году я напрочь позабыл адрес входной точки и адрес загрузки. При попытке грузить блок кода с круглых адресов, типа 35000, 45000 и т. д. с последующим запуском с этого же адреса всё виснет. Я то помню, что адрес запуска был глубоко в коде, только где? Дизассемблирование помогает слабо, т. к. надо знать верный адрес, с которого и должен располагаться код, иначе даже crossreference на строки и константы найти невозможно.
P.S.: А вот если у Вас есть Бейсик-загрузчик, то задача упрощается на несколько порядков.
А просто посмотреть в коде бейсика адрес перехода нет?
Не совсем понятен вопрос.
clear 24063
load "" code 24064
randomize usr 31927
Titus опередил.
я уже понял что это ремикс BD3.
а правильный адрес загрузки определил по настройкам для IM2
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 ей. А авторском виде оно есть у меня.