С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Самостоятельно перегнал Nether Earth (Защитник Земли). Кто хочет, может скачивать. Это перевод от студии КИС.
Итого, совместными c Prusak усилиями, осталось две игрухи: Ninja Massacre и BallBreaker. Че-то никак их не осилю.
Прикрепляю их тоже. Все файлы уже скопированы в tr-dos, однако оригинальные пусковые файлы (бэйсиковские) не правлены - они так и остались для запуска с ленты. Плюс эти же пусковые файлы лежат отдельно в формате hobeta.
Собственно, все что нужно - это написать загрузчик. Кто сможет?
Немного помощи по Ball Breaker:
Отключив автостарт Бейсик-загрузчика, находим в нем такой кусок:
Скрытый текст
Код:5D81 DI LD HL,(#5C53) LD DE,#005A ADD HL,DE LD DE,#5B00 PUSH DE LD BC,#0106 LDIR JP #5B00[свернуть]
как с проверкой переменной начала Бейсик-программы 5C53, так и с точкой останова в 5B00 (или логически) можно выяснить, что далее с 5B00 будет выполняться кусок кода - загрузчик,- лежащий в Бейсик-файле сразу за этим куском выше, с 5D95. Предполагаемые изменения отмечены в тексте:
Скрытый текст
Код:5B00 POP HL ; тот же адрес, куда перемещен код, #5B00 LD DE,#004E ADD HL,DE ; HL указывает на данные о грузимых блоках LD E,(HL) INC HL LD D,(HL) ; стартовый адрес первого блока INC HL LD SP,#5C80 ; стек слишком низко для DOS, еще ниже ; он снова перемещается, так что ; безболезненно поднимаем на #5E80 ; т.к. блоки грузятся намного выше PUSH DE ;1 --- 1 --- этот кусок надо переделать LD E,(HL) ;1 достаточно старшего байта INC HL ;1 только помещаемого в B, т.к. грузить LD D,(HL) ;1 будем секторами, только для длины #416A POP IX ;2 выйдет #42 сектора. Старт-ад надо в HL, PUSH HL ;1 а не IX. Еще надо LD C,5 и LD DE,(#5CF4) XOR A ;1 это все не нужно, и даст нам место DEC A ;1 SCF ;1 EX AF,AF' ;1=11 байт CALL #056C ; --- 1 --- а вызывать надо будет #3D13 DI POP HL INC HL ; хотя адрес-длина блока вынесены, и все LD E,(HL) ; похоже на подпрограмму, второй блок INC HL ; грузится уже этим местом программы LD D,(HL) INC HL PUSH DE ;1 --- 2 --- отсюда начнем переделку куска LD E,(HL) ;1 аналогично первому INC HL ;1 LD D,(HL) ;1 POP IX ;2 XOR A ;1 DEC A ;1 SCF ;1 EX AF,AF' ;1=10 байт CALL #056C ; --- 2 --- DI ; дальше все оставляем, код можно изменить LD DE,#004C ; так, чтоб даже данные старт-длины не LD HL,#5B00 ; менять (судя по копирующей процедуре ADD HL,DE ; слева, они куда-то еще переносятся, LD DE,#4000 ; вдруг нужны в неизменном виде? LD A,#06 ; :) хотя вряд ли) LD BC,#0020 LDIR INC D LD E,#00 DEC A JR NZ,$-#09 LD SP,#401F JP #4200 5B4C NOP DEC DE 5B4E JR NZ,$+#80 ; но это данные, байты DB #20, #7E, #6A, #41 LD L,D LD B,C 5B52 ADC DD ; DB #8A, #BF, #77, #40 CP A LD (HL),A LD B,B[свернуть]
Наши правки приводят к чему-то такому (изменения отмечены комментариями):
Скрытый текст
Код:5D95 POP HL LD DE,#004E ADD HL,DE LD E,(HL) INC HL LD D,(HL) INC HL LD SP,#5E80 ; стек повыше для DOS INC HL ;1 LD B,(HL) ;1 INC B ;1 LD C,#05 ;2 PUSH HL ;1 LD HL,(#5CF4) ;3 XOR A ;1 EX DE,HL ;1=11 байт CALL #3D13 ; DI POP HL INC HL LD E,(HL) INC HL LD D,(HL) INC HL INC HL ;1 LD B,(HL) ;1 INC B ;1 LD C,#05 ;2 LD HL,(#5CF4) ;3 XOR A ;1 EX DE,HL ;1=10 байт CALL #3D13 ;[свернуть]
Теперь исправленный загрузчик можно сохранить с тем же LINE-автостартом, который мы убрали. Такой метод посекторной подгрузки, естественно, работает, когда подгружаемые файлы лежат за загрузчиком всегда в одинаковом заданном порядке.
И все, что остается для получения красивой версии в едином файле - в каком-нибудь дисковом редакторе увеличить длину файла загрузчика в секторах, чтобы она была равна сумме длин в секторах всех трех файлов игры. Затем с этой дискеты можно скопировать только новый "длинный" Бейсик-файл, и кодовые блоки будут уже копироваться вместе с ним, "охваченные" его длиной. В то же время грузиться программа будет, как обычно, т.к. параметры старт-длина у Бейсик-файла не менялись. Теперь порядок файлов перепутать не удастся.
Загрузчик мог бы приложить, но думаю, что для тренировки это лучше сделать другим.
---------- Post added at 16:57 ---------- Previous post was at 16:55 ----------
(тему действительно надо бы переместить в соответствующий раздел)
Последний раз редактировалось TomCaT; 03.07.2010 в 18:10.
Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
Власть людей сильнее, чем люди у власти.
Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)
Скрытый текст
Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
Мы все немного режем по дереву, а потом собираем корабли в бутылках.
Is it the same old story you are going to tell me
or is it the old story telling me and you we are the same?
http://www.sky.od.ua/~ptsk[свернуть]
а по Ninja Massacre что скажете?
По Ninja Massacre:
Весь загрузчик в code1, выдержки из которого приводить не буду, но где с самого начала видно, что:
1) сразу портиться IY. Исследование загрузки с стоп-точками показывает, что он используется в своем нестандартном загрузчике, которым грузяться 2 блока (почти с начала файла идут LD IX , LD DE, CALL <нестандартный загрузчик>). Так что от этого изменения IY смело отказываемся.
2) первый блок = картинка + немалый кусок, с адреса #4000, длиной #2400 - это code2. Кусок перекроет и буфер принтера (смертельно для не 48к), и Бейсик, и DOS
Его придется разрезать на блоки #1B и 9 секторов длиной, и, если как попроще, не упаковывая игру и не делая 128-версию с загрузкой в другую страницу - грузить вторую часть блока - последней по порядку; наверное, на картинку, с адреса #4700 или другого. На картинке много подсказок по русской раскладке и паролям, и этого жаль. Хотя бы надо еще добавить паузу при загрузке, позволив это немного рассмотреть.
3) второй нестандартно загружается с #6400, длину загрузчик хитро берет по адресу (#4104) - т.е. с картинки (но это настоящая длина файла, #9600, как и у code3. К счастью, защита касается способа загрузки, а не зашифровки файлов).
4) После этого уже стандартно с помощью ПЗУ загружается остаток code4 по адресу #FA00 (64000, где лежал нестандартный загрузчик), с правильной длиной #600. На стеке загрузчик оставляет адрес #4000, куда после загрузки будет переход из подпрограммы LOAD-BYTES ПЗУ.
5) Там лежит что-то вроде выхода из MAGIC - восстановление всех регистров со стека и переход в игру тоже на стеке. Это немного портит картинку поверху.
Так что в Бейсик-загрузчике с дискеты можно выставить CLEAR ниже 25600, загрузить по нужным адресам первую часть code1 (не забыть и паузу, например тут), весь code3 и code4, потом загрузить обломок code2 и, т.к. картинка безвозвратно попорчена, туда же поместить код (из DATA в Бейсике, или еще лучше, заранее приписать эти полтора десятка байт ко второй части code2) :
а) ОБЯЗАТЕЛЬНОЕ DI, т.к. затираем не только буфер принтера, нужный при 128-прерываниях, но даже и стек. Стек будет сразу перемщен кодом с #4000
б) перемещение подгруженной части code2 на свое место за картинкой
в) переход на 4000.
Последний раз редактировалось TomCaT; 03.07.2010 в 18:58.
Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
Власть людей сильнее, чем люди у власти.
Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)
Скрытый текст
Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
Мы все немного режем по дереву, а потом собираем корабли в бутылках.
Is it the same old story you are going to tell me
or is it the old story telling me and you we are the same?
http://www.sky.od.ua/~ptsk[свернуть]
Мда. Че-то все слишком страшно. Ассемблер для меня и так дебри. Попытаюсь, конечно, но по-видимому, не справлюсь.
Может, кто-нибудь все же возьмется, да и переведет, наконец, эти две игрушки?!
Последний раз редактировалось fwmakc; 04.07.2010 в 11:28. Причина: отчаяние
Спасибо, послал вопрос...
Э-эх. Но дело стоило изучения ассемблера, пусть и с нуля.
Ну, да ладно.
Кстати, игра 89-го, а все-таки использует рамку с картинки слева прямо в игре, не восстанавливая ее. Здесь она портится, так что этот спецэффект, требующий для устранения бОльшего мозговарения, придется убирать самому, если необходимо.
+
Помни. Только на компьютере можно семь раз Cut, а один - Format. В реале все иначе. (c)
Власть людей сильнее, чем люди у власти.
Чем меньше мы смотрим на мир, тем больше задумываемся о нем. (c)
Скрытый текст
Can you help Robin in his quest for the silver arrow? (c) Odin "Robin of the Wood"
Мы все немного режем по дереву, а потом собираем корабли в бутылках.
Is it the same old story you are going to tell me
or is it the old story telling me and you we are the same?
http://www.sky.od.ua/~ptsk[свернуть]
Спасибо. На самом деле, спасибо огромное!
TomCaT, а ты его к себе на курсы по дисковёртингу игр пригласи...![]()
Мои интры: [Kukarachess][Super boot rmx][tRUSHE MOSAIc][BLAZE]
Мои игры: [Overload][Removal]
Список игр для ZX-Spectrum: [2015] [2014]
Заманчиво, конечно, но слишком много времени. Мне ж ассемблер с нуля учить придется! Так что я бы все равно отказался. Статус уверенного пользователя меня устраивает. Каждому свое. Тем более, что мне важны были только эти игрушки
TomCaT, еще раз большое человеческое спасибо.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)