Из журнала 'Чёрная Ворона 2' Украина, Донецкая область, г.Дмитров-1, 08.1998 МЕТОД ЗАГРУЗКИ УРОВНЕЙ ПРИ АДАПТАЦИИ ИГР К TR-DOS. (C) MAX ------------------------------------------ В своё время я, как и многие начинающие хаккеры, страдал дискованием кассетных игр к системе TR-DOS. Занятие, скажу я вам, не из приятнейших - то RAMTOP подпирает, то системные бейсика "грохаются", то уровни с ленты догружает. Уже не говоря о так назы- ваемых фирменных защитах от Билла Гилберта и прочих восточносоцлагерных братьях по разуму. И со всем этим дерьмецом приходи- лось бороться. Здесь я расскажу о том, как делать дог- рузку уровней применительно к TR-DOS. А зачем? Встретилось мне одно рекламное объявление на тему адаптации таких игр к дискам. Год выхода 1998. Если до этих пор кто-то нуждается в таких услугах, то не спешите платить каким-то левым ломателям свои кровные денежки - лучше проверьте свои возможности в данном направлении. Ес- ли не получится - тогда пусть треснет ваш семейный бюджет... Вкратце расскажу о структуре игры с до- полнительными уровнями. После выполнения очередной миссии игра предложит сделать Start tape and load level xx. После заг- рузки обычно идёт проверка качества и если всё ОК, тогда играешь дальше. Если лента лажанулась - мотай кассету на начало уров- ня. Прикинь, если уровень 30000 и более... Так вот - найди в программе это место, где печатает сообщения и грузит с кассеты блок и посмотри что там делается. Обычно ничего особенного. Если увидишь, что загрузка не ПЗУ'шной процедурой делается, а какой-то своей, тогда считай, что наполовину тебе повезло. Иначе прийдётся искать лишние 150 байт места для твоей процедуры загрузки с диска. Можно пожертвовать каким-нибудь текстовым сообщением или парой строчек на экране. Но не желательно, т.к. возможна загрузка экранного файла вместе с уровнем. Ну да ладно - это уже дебри. Вернёмся к нашим баранам: полдела сделано, если най- дено место для дискового лоадера. Но не спеши ксорить - проверь наличие системных переменных бейсика и по возможности - до- совских тоже. Тебе вдвойне везёт, если они никем не убиты. Но если их not present, тогда слушай меня. Не будем изобретать велосипед - поедем на автомобиле. Напрягая все извилины и нервные окончания рук найди 768 байт сво- бодного или служебного места в памяти. Поясняю - служебное место предназначено для каких-либо действий, связанных с гра- фикой, игровым состоянием и т.д. и приме- няется постоянно для создания чего-либо без длительной надобности. Т.е. отработал с ним - и до свидания! Так вот найди такой фрагмент. Только учти - 768 нулей или ещё каких-либо одинаковых байт вовсе не значат или могут не значить свободное или служеб- ное пространство. По мере возможности или навыков работы с ассемблером проверь - а не используется ли этот фрагмент кем-либо? Теперь едем, собственно, к алгоритму создания жизненноважных системных TR-Dos и загрузке файла с диска. Предположим, что имеется вводный параметр в виде номера уровня. Как ни крути, а где-то это всё же есть. Так вот преврати его в обычное чис- ловое значение от нуля до xx. Теперь найди место для следующего (если есть процедура загрузки кассетная, тогда наложи сверху): ORG address ;см. выше DI IM 1 ADD A,#30 ;поправка к коду LD (NOMER),A;числа LD HL,23752 LD BC,#5200 LD (HL),#83 ;дис-вод А 80 трек. M_1 INC HL LD (HL),C DJNZ M_1 LD IY,23610 ;следи за восстано- LD (IY+0),#FF;влением! LD (IY+1),C LD A,#08 LD (23802),A INC A LD C,A LD (23814),A LD A,201 ;выход в ПЗУ'48 LD (23746),A LD A,#F4 LD (23734),A LD HL,23847 LD (23653),HL LD (23641),HL LD HL,NAME ;имя level'а LD DE,23773 LDIR XOR A ;размеры из загол. LD C,#0E CALL 15635 DI Здесь, при надобности, восстановить об- ласть системных TR-DOS'а и значение ре- гистровой пары IY. NAME DEFM "NAMELESS";имя файла на дис. NOMER DEFM "1" ;номер уровня DEFM "C" ;тип файла уровня Напоследок скажу для тех, кто не знает или уже забыл, что точки входа в ПЗУ'шную процедуру загрузки две: 1366 и 1386. Для "цветной" загрузки используется следующий прибамбас: DI INC D EX AF,AF' DEC D LD C,xx ;номер цвета 0-7 CALL 1386 EI RET ;или по условию... На этом пока всё. Пишите письма:) ------------------------------------------