Black Crow #02
01 ноября 1998

Программистам - Заначка: как делать догрузку уровней в ТR-DОS.

<b>Программистам</b> - Заначка: как делать догрузку уровней в ТR-DОS.
   МЕТОД ЗАГРУЗКИ УРОВНЕЙ ПРИ   
     АДАПТАЦИИ ИГР К TR-DOS.    
                                          
(C) MAX                         
------------------------------------------
   В своё время я, как и многие начинающие
хаккеры, страдал дискованием кассетных игр
к системе TR-DOS. Занятие, скажу я вам, не
из  приятнейших  - то RAMTOP подпирает, то
системные бейсика "грохаются", то уровни с
ленты догружает. Уже не говоря о так назы-
ваемых фирменных защитах от Билла Гилберта
и  прочих  восточносоцлагерных  братьях по
разуму.  И со всем этим дерьмецом приходи-
лось бороться.                            
                                          
   Здесь я расскажу о том, как делать дог-
рузку  уровней  применительно  к TR-DOS. А
зачем?   Встретилось  мне  одно  рекламное
объявление  на  тему адаптации таких игр к
дискам.  Год выхода 1998. Если до этих пор
кто-то  нуждается  в  таких услугах, то не
спешите  платить  каким-то левым ломателям
свои  кровные  денежки  -  лучше проверьте
свои возможности в данном направлении. Ес-
ли  не получится - тогда пусть треснет ваш
семейный бюджет...                        
                                          
   Вкратце расскажу о структуре игры с до-
полнительными  уровнями.  После выполнения
очередной  миссии  игра  предложит сделать
Start  таре  and load level xx. После заг-
рузки обычно идёт проверка качества и если
всё  ОК,  тогда играешь дальше. Если лента
лажанулась - мотай кассету на начало уров-
ня. Прикинь, если уровень 30000 и более...
Так вот - найди в программе это место, где
печатает сообщения и грузит с кассеты блок
и посмотри что там делается. Обычно ничего
особенного.  Если увидишь, что загрузка не
ПЗУ`шной  процедурой  делается, а какой-то
своей,  тогда  считай, что наполовину тебе
повезло. Иначе прийдётся искать лишние 150
байт  места для твоей процедуры загрузки с
диска.   Можно  пожертвовать  каким-нибудь
текстовым  сообщением или парой строчек на
экране.  Но  не  желательно, т.к. возможна
загрузка экранного файла вместе с уровнем.
Ну  да  ладно  - это уже дебри. Вернёмся к
нашим  баранам: полдела сделано, если най-
дено  место  для  дискового лоадера. Но не
спеши  ксорить - проверь наличие системных
переменных  бейсика и по возможности - до-
совских тоже. Тебе вдвойне везёт, если они
никем  не  убиты.  Но если их пот present,
тогда слушай меня.                        
                                          
   Не  будем изобретать велосипед - поедем
на  автомобиле.  Напрягая  все  извилины и
нервные  окончания рук найди 768 байт сво-
бодного  или  служебного  места  в памяти.
Поясняю  -  служебное  место предназначено
для  каких-либо действий, связанных с гра-
фикой,  игровым состоянием и т.д. и приме-
няется  постоянно  для  создания чего-либо
без  длительной надобности. Т.е. отработал
с ним - и до свидания! Так вот найди такой
фрагмент.  Только учти - 768 нулей или ещё
каких-либо одинаковых байт вовсе не значат
или могут не значить свободное или служеб-
ное  пространство. По мере возможности или
навыков  работы  с ассемблером проверь - а
не используется ли этот фрагмент кем-либо?
                                          
   Теперь  едем,  собственно,  к алгоритму
создания жизненноважных системных TR-Dos и
загрузке  файла  с диска. Предположим, что
имеется  вводный  параметр  в  виде номера
уровня.  Как ни крути, а где-то это всё же
есть.  Так вот преврати его в обычное чис-
ловое значение от нуля до xx. Теперь найди
место  для следующего (если есть процедура
загрузки кассетная, тогда наложи сверху): 
                                          
         ORG  address  ;см. выше          
         DI                               
         IM   1                           
         ADD  A,#30    ;поправка к коду   
         LD   (NOMER),A;числа             
         LD   HL,23752                    
         LD   ВС,#5200                    
         LD   (HL),#83 ;дис-вод А 80 трек.
M_1      INC  HL                          
         LD   (HL),С                      
         DJNZ M_1                         
         LD   IY,23610 ;следи за восстано-
         LD   (IY+0),#FF;влением!         
         LD   (IY+1),С                    
         LD   A,#08                       
         LD   (23802),A                   
         INC  A                           
         LD   С,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   С,#0Е                       
         CALL 15635                       
         DI                               
                                          
   Здесь, при надобности, восстановить об-
ласть  системных  TR-DOS`а  и значение ре-
гистровой пары IY.                        
                                          
NAME     DEFM "NAMELESS";имя файла на дис.
NOMER    DEFM "1"       ;номер уровня     
         DEFM "С"       ;тип файла уровня 
                                          
   Напоследок  скажу для тех, кто не знает
или  уже забыл, что точки входа в ПЗУ`шную
процедуру  загрузки  две: 1366 и 1386. Для
"цветной"  загрузки используется следующий
прибамбас:                                
                                          
         DI                               
         INC  D                           
         ЕХ   AF,AF`                      
         DEC  D                           
         LD   С,xx    ;номер цвета 0-7    
         CALL 1386                        
         EI                               
         RET          ;или по условию...  
                                          
   На этом пока всё. Пишите письма:)      
                                          
                                          
   УПЛОТНЕНИЕ ДИСКА В iS-DOS    
                                          
(C) 1995 IskraSoft              
(C) Алексей Леонтьев            
------------------------------------------
MAX> Анализируя рынок программного обеспе-
чения  в Донецке я пришёл к выводу, что во
многих  случаях нет и в помине тех важных,
а  самое главное - ценных, программ, кото-
рые  давно  уже кем-то написаны, но по ка-
ким-то  причинам  до  сих пор не попали на
рынок  того  или иного региона. Так мы все
понятия  не  имели, что существует возмож-
ность делать уплотнение iS-DOS`овских дис-
ков  при помощи модифицированной программы
arzt+.сом,  которая находится в приложении
моего   журнала.   Поэтому  для  таких  же
"отсталых"  глубинок, как Донбасс, я решил
разместить  этот  файл  в  приложении. На-
деюсь,  ты  знаешь как его записать на iS-
DOS... Прислал в редакцию этот файл госпо-
дин Вячеслав Панин - СПАСИБО!             
                  -----                   
                                          
   Программа  "Arzt+"  представляет  собой
модернизированный  вариант старого доброго
Айболита "der Arzt". (Произносится "арцт".
Слово  немецкое, означает: "лекарь"). Вза-
мен  индикации  последнего  файла на диске
"LAST" реализовано сообщение числа сегмен-
тированных  файлов на устройстве и сегмен-
тов в них в нижней строке экрана. Z.B.:   
                                          
" 13 segments in  9 files"                
                                          
   НО  САМОЕ  ГЛАВНОЕ:  в  меню  программы
появилась  строка  "SQUEEZE".  Это  ни что
иное как уплотнение устройства. Вся инфор-
мация  на  диске поджимаетья к его началу,
т.о. все свободное пространство диска ста-
новится непрерывным.                      
                                          
              +-----------+               
              |  SQUEEZE  |               
              | blk: 3200 |               
              +-----------+               
                                          
   ("VERIFY"  -  тоже  что  "Start" у "der
alte  Arzt", т.е. только проверка файловой
структуры устройства.)                    
                                          
   Уплотнение  устройства (SQUEEZE) прохо-
дит в два этапа:                          
                                          
 1. Проверка устройства (VERIFY). Занимает
около 40 секунд.                          
                                          
 2. Собственно  "SQUEEZE".  До  9 минут на
флоппи-диске  в  зависимости  от состояния
диска.  (В среднем около 6 минут). Индика-
ция  второго этапа представляет собой окно
во  весь  экран  с  картой диска. Условные
обозначения  те  же,  что  и  в программах
"freenes", "fileshow" и им подобных:      
                                          
"ь" - пустая область                      
                                          
"#" - частично заполненная                
                                          
"#","@"  - сплошная заполненная. Символами
"@"  обозначена  область диска, которая не
будет уплотняться, т.к. на сбор информации
об  этой  области не хватило памяти. Такое
может случиться при большом количестве ма-
лых  или сильно сегментированных файлов на
устройстве  и  низко  расположенном CACHE.
Программа использует лишь память над собой
под  CACHE. При небольшой недостаче памяти
программа  может  слегка  уменьшить размер
CACHE.   При   сильной   недостаче  памяти
произойдет  аварийный выход с ошибкой 130.
Программа активно использует CACHE, посему
не  рекомендуется уменьшать его размер пе-
ред  запуском. Для нормальной работы жела-
тельно, чтобы между программой и CACHE бы-
ло  не  менее 6000 байт, т.е. CACHE должен
располагаться не ниже 33000, хотя програм-
ма будет работать и с CACHE на 30000.     
                                          
   В  отличие от "speedisk" Arzt+ не изме-
няет  структуру  файлов:  сегментированные
остаются  сегментированными, непрерывные -
непрерывными.  Поэтому перед употреблением
советуем    воспользоваться    программами
"contig.res"  и "filecopy /m" для преобра-
зования  сегментированных  файлов в непре-
рывные.                                   
                                          
   ОСТОРОЖНО! Программа Arzt+ покаместь не
умеет   обходить   стороной   файлы   типа
"fileO.bad".  Не уплотняйте плохо читаемые
диски! Пользуйтесь программой "doctor" пе-
ред "arzt+"! Если Arzt+ напорется на нечи-
таемый  сектор  и  на  предложение системы
"Retry  Abort  Ignor" Вы ответите "Abort",
часть информации "успешно" уплотненной не-
задолго  до  облома с большой вероятностью
будет испорчена.                          
                                          
   Для  100% гарантии сохранности информа-
ции:                                      
                                          
1.  Запаситесь  идентичной копией диска. В
этом  вам  помогут:  abba, copy_all, соса,
filecopy.                                 
                                          
2.  Перед уплотнением сосчитайте контроль-
ные  суммы всех файлов. Проверьте их после
уплотнения. Обычно такая операция занимает
около   5   минут.   (canc.res,  scan.res,
ch.res,   univ.res).  Пользуйтесь  возмож-
ностью автоматической проверки контрольной
суммы  при запуске сом-файлов. (см. описа-
ние check.сом)                            
                                          
3.  На  уплотняемом  диске  не должно быть
сбойных участков (doctor).                
                                          
               ПРИМЕЧАНИЯ:                
                                          
1. Обладатели 2 дисководов могут уплотнять
диски,  копируя  их  программой  соса.сом.
После  копирования не забывайте про boot и
соп!                                      
                                          
2.  Arzt+  следит  за  перемещением загру-
жаемого файла is_dos.sys и сам переподклю-
чает  его, так что обладателям стандартной
системы  "iS-DOS  Classic" не о чем беспо-
коиться.   Диск   останется   загружаемым.
Счастливых  же  владельцам  новинки сезона
"iS-DOS  Chic"  придется  заново запустить
свой специфический boot.                  
                                          
3.  Очень повезло, как всегда, обладателям
Sinclair-PROFI  с мегабайтной памятью. Ко-
пирование  всей  дискетщ на RAM-диск и об-
ратно   с  помощью  программы  "асса"  или
"adbc"  займет  не  более  2  минут. Arzt+
расправится с RAM-диском и того быстрее.  
                                          
4.   Функция  SQUEEZE  работает  на  любых
устройствах  размером  не более 1 MB (4096
блоков).  Т.о.  счастливым владельцам вин-
честеров  придется  пока лишь надеяться на
скорое  появление  следующей  более мощной
версии Arzt+.                             
                                          
  А всем остальным: Счастливого уплотнения
и приятного сжатия !                      
                                          
             НАСТРОЙКА ЦВЕТОВ             
             -----------------            
                                          
   Цвета  программы настраиваются програм-
мой UniColor:                             
                                          
Color 0  - окно главного меню             
Color 1  - тень главного меню             
Color 2  - курсор главного меню           
Color 3  - рабочий курсор главного меню   
Color 4  - верхнее левое окно с именем    
           сканируемого файла             
Color 5  - тень верхнего левого жкна      
Color 6  - верхнее правое окно с сообще-  
           нием                           
Color 7  - тень верхнего правого окна     
Color 8  - нижнее правое окно со статис-  
           тикой                          
Color 9  - тень нижнего правого окна      
Color 10 - окно пути файла                
Color 11 - окно "SQUEEZE"                 



Другие статьи номера:

Игровой автомат - Зеркало.

Очумелые_ручки - схема турибирования процессора Z80.

Программистам - Быстрый поиск в текстовом файле.

Игровой автомат - Черный Ворон: новые игровые уровни.

Программистам - Мини Windows`98

Программистам - The hacker club: Обзор защит.

Программистам - The hacker club: Mortal combat описание жащиты.

Программистам - The hacker club: Снятие защит с игр.

Программистам - Заначка: как делать догрузку уровней в ТR-DОS.

Очумелые_ручки - Схема подключения внутреннего Hayеs модема.

Очумелые_ручки - схема турбирования ВГ93.

Очумелые_ручки - схема 512 точек на экране.

Белый попугай - 9600 бод.

Белый попугай - Агент 008.

Белый попугай - Советский маразм.

Белый попугай - Конспект крутого студента.

Всякая всячина - Funtop`98

Всякая всячина - FIDO и Spectrum.

Всякая всячина - Почтовый ящик.

Всякая всячина - Внимание! Розыск!

Всякая всячина - Разговор на тему.

Всякая всячина - От автора.

Всякая всячина - Реклама.

Всякая всячина - Post scriptum.

Презентация - ZX-winword v2.01

Презентация - Melon v1.79

Презентация - FUT v2.01

Презентация - Mickey mouse.

Презентация - Zed cache v1.01


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
От редакции - о переделках в газете.
Планета шелезяка - схема RS-232 интерфейса.
Что-где-почем - Пpогpамм у меня пpибавилось довольно-таки много...
Последнее слово в номер - главная идея этого номера генза - убедить вас поддержать перепись.
Beatles - ходики.

В этот день...   18 апреля