Deja Vu #07
31 декабря 1997
  TR-DOS  

CODING - Адаптация программ к TR-DOS (загрузка уровней)

<b>CODING</b> - Адаптация программ к TR-DOS (загрузка уровней)
AY-Track: (C) Mitchell/Mitchell House     
__________________________________________


(C) Колесников Сергей
__________________________________________


   Своей небольшой заметкой я хочу воспол-
нить  пробел: начинающие  или  малоопытные
синклеристы  зачастую хотят что-то сделать
на своем любимом SPECCY, но просто не зна-
ют, а  КАК  это  сделать... Литературы  по
"Спектрум" мало, а в провинции вообще нет,
остаются только электронные журналы.
   Я остановлюсь на проблеме полных диско-
вых  версий  игр, особенно адвентюрных. Уж
сколько  гуляет  по  стране так называемых
"дисковых"  версий адвентюр, которые прек-
расно  грузятся с диска, а захочешь сохра-
нить  состояние,  получаешь оплеуху в виде
"START TAPE AND PRESS ANY KEY"! И особенно
возмущает  то, что  в  заставке  красуется
"DISKED BY ..."! -((
   Прежде всего предупреждаю: если вы счи-
таете себя крутым кодером или опытным про-
граммистом,то дальше можете не читать. Вам
это не нужно и не интересно. Я адресую сей
материал малоопытным (вроде  меня) любите-
лям  и  фанатикам  SPECCY, и призываю всех
принять активное участие в обмене  опытом.
Я думаю, это будет интересно очень и очень
многим. Все-таки большинство спектрумистов
- это не крутые кодеры,а обыкновенные юзе-
ры...
   Мне  неоднократно уже доводилось делать
полные  дисковые версии, причем мне всегда
нравились игры, выполненные единым бейсик-
блоком с отгрузкой состояния "в тело прог-
раммы". Можно, конечно, сделать отгрузку в
разные файлы с заданием имени перед сохра-
нением, но  это  немного сложнее и требует
более-менее  неплохого  знания  ассемблера
(т.к. придется искать в программе процеду-
ру ввода строки).
   Если  кто-то не знает, с чего конкретно
начать, подскажу: начать  надо с  поиска в
программе  процедур записи на ленту и заг-
рузки с ленты. Точки входа в процедуру за-
писи чаще всего CALL #04C2, CALL #04C6 или
CALL #04D0. Таким  образом, вам надо с по-
мощью диск-доктора или теневика SCORPION'а
(если  у  вас SCORPION), найти в программе
последовательность байтов :

     #CD #C2 #04, или
     #CD #C6 #04, или
     #CD #D0 #04.


   Если  вы  нашли одну из этих последова-
тельностей, вы сможете определить парамет-
ры отгружаемого блока кодов. В регистре IX
будет  начальный  адрес  отгрузки, а в ре-
гистре DE - длина блока кодов.
   Для  LOAD  чаще всего применяется точка
входа  в  ПЗУ  CALL #0556, бывает еще CALL
#0802, CALL #0562 и CALL #0761.
   Здесь последовательности для поиска та-
кие:

     #CD #56 #05, или
     #CD #02 #08, или
     #CD #62 #05, или
     #CD #61 #07.


   Теперь, когда вы нашли в программе про-
цедуры  сохранения и загрузки, внимательно
просмотрите программу. Если она загружает-
ся  и работает с адреса как минимум 24500,
то все  в  порядке: можно  воспользоваться
процедурой  ПЗУ с точкой входа #3D13. Если
же  программа  грузится с меньшего адреса,
или  после  загрузки перебрасывает себя на
меньший  адрес, то  необходимо  воспользо-
ваться специальным драйвером дисковых опе-
раций, т.к. обращение к системным перемен-
ным, при  использовании точки входа #3D13,
будет невозможно.
   Их  достаточно много, но я обычно поль-
зуюсь драйвером А.Алексеева(ZX-РЕВЮ 4/1995
г.). И  хотя у него есть недостаток (рабо-
тает только с дисководом "А"), он занимает
всего 131 байт, и я им давно успешно поль-
зуюсь.
   Вам  надо  найти  в программе место для
размещения драйвера, записать туда его ко-
довый  блок  и  запомнить адрес для после-
дующего обращения к нему. Процедура записи
на диск будет выглядеть так :

     LD HL,адрес загрузки
     LD BC,#NN06
     LD DE,(TREK/SEKTOR); куда писать
     CALL  #3D13;  (или  адрес  размещения
                  драйвера)

где NN - количество секторов, которое  бу-
         дет сохраняться или загружаться.
   По поводу TREK/SEKTOR:как вам известно,
при  загрузке  программы в системной пере-
менной  #5CF4 сохраняются значения первого
сектора и дорожки на диске, с которого за-
грузили  программу, следующего сразу же за
ней.
   Я делаю так. В кодовом загрузчике прог-
раммы, непосредственно перед ее стартом, я
встраиваю такую конструкцию:

     .......
     LD HL,(#5CF4)
     LD (#nnnn),HL
     JP ...  - старт программы.

где nnnn - адрес, где  сохраняются  значе-
            ния первого свободного  секто-
            ра/дорожки  (уж  найдите  пару
            байт свободного места  где-ни-
            будь в программе).
   Допустим,  у  вас  будет сохраняться на
диске  250  байтов, т.е. 1 сектор. Значит,
сразу  же  за  программой запишите на диск
кодовый  блок длиной 1 сектор. Таким обра-
зом, когда  вы  будете  записывать на диск
состояние  игры, его  месторасположение на
диске  вы всегда можете взять из ячеек па-
мяти  с адресом #nnnn. Просто, как все ге-
ниальное!-))
   Процедура записи на диск аналогична вы-
шеприведенной, только  в  регистр  BC надо
загружать не #NN06, а #NN05.
   А  теперь  хочу  рассказать  конкретный
случай из  практики. Я делал дисковую вер-
сию  игры "ADVENTURE  B - INCA CURSE". Что
интересно:там сохраняются два кодовых бло-
ка  длиной 49 и 41 байт. Я записал на диск
сразу за программой два кодовых блока дли-
ной по 1 сектору. Возникла тема для разду-
мий: ну ладно, адрес первого блока я узнаю
из  тех  ячеек, что  сохранил при загрузке
программы, а как узнать адрес второго бло-
ка? Ответ  оказался прост. Вот каким обра-
зом я сохраняю/загружаю второй блок:

     ...........
     LD DE,(#9900) ;это адрес ячеек, где
                   ;сохранено значение
                   ;#5CF4 для первого бл.
     INC DE        ;увеличиваю  на едини-
                   ;цу,  т.к. длина блока
                   ;кодов 1 сектор.
     LD HL,#7724   ;адрес загр. 2 блока.
     LD BC,#0106   ;запись 1 сектора
     CALL DRIVER   ;обращение к драйверу
     ..........


   Ну  вот и все! Желаю всем успехов и пе-
редаю привет всем, кто меня знает!

            Сергей Колесников


          355042, г.Ставрополь,
           ул.Доваторцев 53/2-8



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

Аперативчик - Об управлении в оболочке DEJA VU

Аперативчик - Новогодний выпуск DEJA VU...

Тема - Реальное положение дел в ассоциации AMAZING MAKING SOFT.

Тема - Мой выбор - PC.

Тема - Заочный виртуальный фестиваль В Польше - Complex Compo.

Тема - Хронология развития Спектрума в СССР/СНГ.

Капля припоя - Резервы ZX-Spectrum.

Капля припоя - Подключение SIMM к ZX-Spectrum-у.

Капля припоя - Схема подключения 1Mb pin SIMM к компьютеру типа Пентагон.

Капля припоя - Дополнительные ОЗУ: кэш.

Капля припоя - Эмулятор ПЗУ для компьютера ZX-Spectrum v1.0.

Капля припоя - Доработка Пентагона для работы с дисками высокой плотности.

SOFTWARE - Новинки демосцены: ENTER the MIND, LOST MEMORY , PARANOIA, GARLIC RESPIRATION, CRAZY LOVE, MORBID VISION, AIR SPACE, REFRESH, TV-X, HIGHER STSTE.

SOFTWARE - Новинки игровых программ : АДМИРАЛ demo , KOLOBOK ZOOM 2, HOMER SIMPSON В РОССИИ, ЧЕРНЫЙ ВОРОН 2, BOOVIE 2.

SOFTWARE - Новинки системных программ: UNIVERSAL VIEWER v1.0 , MODERN WORD v1, GLOBAL COMMANDER v1.21, BEST VIEW v2.4 , REFRESH OPTIMIZER.

SOFTWARE - Полное прохождение игры "Зеркало".

SOFTWARE - планы по созданию ELITE с залитой графикой.

CODING - DITHERING - дизеринг как он есть.

CODING - Процедура печати группы тектстовых строк из Бейсика.

CODING - Адаптация программ к TR-DOS (загрузка уровней)

ANOTHER WORLD - PENTIUM II Xeon - быстродействующая версия процессора.

ANOTHER WORLD - Перепалка (о журнале AMIGA RULES).

ANOTHER WORLD - Дело московского хаккера.

Доска почета - Отрывки из разговоров на втором дне Fun Top-98: Alex(R), Kano, Boss, Mitchell, Daniel, Serzh.

Доска почета - Интервью с XPEh.

Доска почета - Чем создатель Тетриса занимается в MicroSoft.

Доска почета - Криминал - о наезде на Triumph: история Спектрума в Челябинске.

Доска почета - Презумпция невиновности: о нелегальном распространении журнала.

Доска почета - Ирландское рагу (о демоверсиях программ).

Доска почета - VIRTUAL TR-DOS - что это? (о сайте в Интернете). Новости.

Доска почета - Без комментариев.

Доска почета - Об интрах и демах и т.п., которые не удается сделать крутыми.

Доска почета - О CD-ROM проекте из города Кемерово.

Семь и 1/2 - Приколы русского радио.

Семь и 1/2 - Анекдоты про программистов.

Семь и 1/2 - VIRTUAL-но AMIG-ный синдром VI или сибирские самородки: приключения Кемеровских спектрумистов.

Проба пера - Отрывок из романа: Лабиринт отражений.

Проба пера - Стихи А. Баженова: Наболело, понимаеш-ш-шь..., Причин для радости немного,Уже октябрь дождем холодным...,REMEMBER!, Одиночество, Волны плещут за кормой..., ождаясь, мы тут и умираем... На перекретке двух миров.

Проба пера - Записки редактора.

Проба пера - Девять жизней Клэр.

Реклама - Реклама и объявления ...


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

Похожие статьи:
Письмо №291
Система - Обзор системных программ: ассемблер TASM v 4.12
Анекдоты - 16 анекдотов.
Реклама - Реклама и объявления ...
ZXNet - Как использовать ZXNet для связи с другими сетями.

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