Адаптация в систеие TR-DOS игр с отгрузкой состояния
(с) Клииус Владимир, г.Львов,199*
тттгтттттттттттттттгтттттттттттгттт
Предисловие.
Написать эту стать* иеия побудила стать* А.Десятничеико "Адаптация к систеие ТВ-DOS програии с
подгружаемыми уровнями'' ("IX Ревю
Украина" NN3.4 за этот год), а ииеиио та часть, • которой описана адаптация игр с отгрузкой состояния. Мне очень ие понравилось то, что гм. Десятничеико обдели* ной любимые адвентюры, оставив ии практически один отгрузочный файл. Теоретически все выглядит просто: на диске иожет быть сколько угодно файлов-отгрузок с одииаковыии ииеиаии и, если иы хотии загрузить какой-то определенный файл, но ои и* первый, то должны стереть или переииеновать псе предыдущие файлы. Но на практике все может дойти до абсурда. Представьте себе такую ситуацию: Вы играете в сложнейшую адяеитюру и сделали три различных отгрузки. Теперь для того, чтобы загрузить третью отгрузку Ваи нувио проделать следующие действия: нажать RESET, выйти в TR-DOS, стереть или переииеновать две первые отгрузки, загрузить свою адвентюру и только после всей этой волокиты загрузить отгрузку. А если теперь Вы хотите загрузить вторую отгрузку. то все придется повторять снова. Дуиаю многие опытные Поль-г'йшш' 'i1 'аивдпггчгшг
11 1111 It 111111III f 11 П П I П 111111
быстрее. Поэтому в своей статье я хочу заполнить пробелы, допущенные господином Десятничеико. и рассказать о способе адаптации, при которой пользователь ииеет | возможность сохранять на диске отгрузочные файлы с произвольными именами. Также приведу несколько конкретных примеров (внутренности ииогих адвеитюр очень похожи и модифицируя отгруэчик одной программы иожно переделать несколько подобных) и отдельно остановлюсь на отгрузке состояния в моноблок.
Ввод ииени отгружаемого файла.
Итак, перед наии стоит следующая задача: как обеспечить пользователю ввод ииени отгружаемого файла, а после ввода перебросить его а дескриптор. Некотрые игры дают воэиожиость ввода ииени файла и в таких играх иожно обойтись однии единственный LDIR'oh. Но что делать в играх, которые не дают такой возможности и вообще выгружают файлы без заголовка?
Решение этой задачи достаточно простое, но сначала неиного теории . Что из себя представляют команды. которые иы вводим, играя в адвеитюру? Грубо говоря, это строка символов, которая при вводе попадает в специальный буфер. А что из себя представляет иня файла? Это тоже строка смиаолов. Значит решение следующее: пусть пользователь а(едет имя файла как обычную команду, а потом мы перебросим его из буфера в дескриптор. Ревая эту задачу, мы новей использовать средства саиой программы для ввода строки в буфер и печати сообщений-подсказок. Используя средства програииы, иы сразу убиваем двух зайцев: экоис-иии кучу паияти и теперь иаи ие надо заботиться о выводе текста иа экран. Об этой позаботится сама программа: сдеядет где надо скроллинг, правильно среагирует на нажатие клавиш ENTER и DELETE, осуществит вывод на экран нестандартным сиивольныи набором или сииволаии нестандартных размеров. И еще нужно учесть следующие ню-
тттттттт,,тт,а'а,,1,,мтп]
Г TTTT 111 II11II11II111ТТП I П IП IIП1 •нем:
первым делом нушно вывести подсказку типа "ENTER FILE NAME", которая по стил» должна напоминать все остальные сообщения программы.
пользователь иокет ввести
иеиьше восьми символов и остальные нужно забить пробелани;
пользователь иокет вообще ничего не вводить и сразу нажать
FNANE
! ШШттттт 11 in III п mil 11 г» I rm
ENTER, в таком случае нукно заставить пользователя ввести имя еще раз;
поскольку в адвентюрах можно вводить строки длиной более 8 символов (обычно 32 или 2SS) то при вводе сяишкои длинного мненм нужно перебрасывать в дескриптор нз буфера только в символов
И вот как будет выглядеть подпрограмма-решение:
LD |
HL.HTEXT |
;адрес строки-подсказки |
CALL |
MESS |
;печать подсказки |
CALL |
INPUT |
;ввод инени файла |
LD |
DE.BUFFER |
.адрес буфера введенной строки |
LD |
HL,NAME |
.адрес дескриптора файла |
LD |
A, (DE) |
;если первый введеный символ |
CP |
13 |
;ENTER, то повторить ввод имени |
JR |
Z.FNAME |
|
LD |
B,6 |
.количество символов в имени файла |
LD |
A.(DE) |
;4слм введено меньше Ч символов. |
CP |
13 |
;то переход на забой остальных |
JR |
г.17 |
.символов в дескрипторе пробелаим |
LD |
<HL),A |
;переброска из буфера в дескриптор |
INC |
HL |
|
INC |
DE |
|
D1NZ |
LI |
|
RET |
|
|
LD |
(HL),32 |
|
INC |
HL |
|
DJNZ |
L2 |
|
RET |
|
|
Эта подпрограмма является универсальной: без принципиальных изменений ее можно использовать в 99.99% программ. Бели подпрограмма ввода команд не допускает ввода пустой строки, то иовио выбросить проверку первого сиивола.
Подпрограммы MESS м INPUT -подпрограммы печати сообщений иа экран и ааода команд соответственно. Для каждой отдельной програичы их придется разыскивать ' заново. Основным признаком подп-рогроииы MESS является обращение * подпрограмме печати символов, а INPUT - к подпрограмме опроса клавиатуры. В этих подпрограммах необходимо будет найти коды маркеров, которые должны стоять в конце сообщений и команд (в моем примере это 13, но может быть 0,31,25) или еще что-нибудь).
Отгруэка/эагруэка состояния
с использованном подпрограммы (3D13.
Теперь я дескрипторе у нас есть имя файла, и нушно этот файл выгрузить на диск (загрузить с диска). Саиый простой способ »то сделать - использовать подпрограмму «3013 из ПЗУ TR-DOS и функции »0В и *0Б. Об использовании этой подпрограммы было написано уже достаточно, и поэтоиу сразу приведу подпрограмму выгрузки/ загрузки из игры SECRET MISSION:
s -
|
|
мне |
|
|
;дескриптор |
BUPPER |
ZQU |
>60C6 |
/адрес буфера ваедеииой строки |
HESS |
EOU |
>6EEB |
;подпрограмма вывода сообщений |
ШРОТ |
EQU |
>6CP9 |
.подпрограмма ввода |
|
ORG |
>6P64 |
|
LOAD |
CALL |
PREP |
.-подготовка дескриптора |
|
LD |
C.«OE |
|
|
CALL |
DOS |
;чтение файла |
|
JP |
NZ,»6PD8 |
, если возникла оатбка, то выход |
|
LD |
HL,BUPPER |
;компоновка загруженного файла • памяти |
|
LD |
DE,<6482 |
|
LD |
ВС,«46 |
|
|
LD1R |
|
|
|
LD |
DE,(#6476) |
|
|
LD |
ВС,(#64SA) |
|
|
INC |
ВС |
|
|
LOIR |
|
|
|
JP |
>6Г08 |
/выход а основную программу |
PREP |
LD |
HL,REPORT |
.-подготовка дескриптора |
|
CALL |
MESS |
|
|
CALL |
INPUT |
|
|
LD |
DE,BUPPER |
|
|
LD |
HL,NAME |
|
|
LD |
A, (DE) |
|
|
CP |
13 |
|
|
JR |
Z,PREP |
|
|
LD |
B,8 |
|
LI |
LD |
A,(DE) |
|
|
CP |
13 |
|
|
JR |
Z,L2 |
|
|
LD |
(HL),A |
|
|
IMC |
HL |
|
|
I КС |
DE |
|
|
DJNZ |
LI |
|
|
JR |
L3 |
|
L2 |
LD |
(HL)/32 |
|
|
INC |
HL |
|
|
DJNZ |
L3 |
|
L3 |
LD |
(HL),>43 |
;тип файла С |
|
XOR |
A |
;установка некоторых жизненно важных |
|
LD |
(>SDOF),A |
;систеимых переменных |
|
LD |
(>5D10 ) , A |
|
|
DEC |
A |
|
|
LD |
(>iC3AJ,A |
|
|
LD |
A,9 |
|
|
LD |
(>SD06),A |
|
|
RET |
|
|
|
ORG |
>76C0 |
|
SAVE |
CALL |
PREP |
;подготовка дескриптора |
|
LO |
DE,BUPPER |
;компоновка файла для отгрузки |
|
LD |
HL,>6482 |
|
LD |
ВС,>46 |
|
|
LDIR |
|
|
|
LD |
HL,(>6476) |
|
|
LD |
ВС,(>645A) |
|
11.11.. 11 n. i т^отт^гш'а'г^'^тт^н
IIIIIHII
1^11^111111 |
LOIR |
|
LD |
C,«0B |
CALL |
DOS |
RET |
|
PUSH |
IY |
LD |
IY,•5C ЗА |
LO |
HL.BUFFER |
LD |
DE.>0100 |
XOR |
A |
CALL |
• 3013 |
LO |
A, (fSDOF) |
AND |
A |
POP |
IT |
RET |
|
DEFM |
"---ENTER |
DKFH |
" FILE " |
DEFT4 |
"NAME >" |
DBF* |
0 |
;запись файла
;выполнение функции, код которой ;находится я регистре С ;код ошибки
;сбросить флаг нуля, если возникла .ошибка при работе с дискои
.-текст подсказка "Введите имя файла* ;маркер конца сообце шя
Использование подпрограммы
• 3D13 имеет одно ограничение: основная програииа не долкна использовать память от «SC00 м до RAMTOP, который должен быть установлен не ниве (SFB3.
И еше хочу обратить Ваше вни-иание на один важный иомент -компоновка отгружаеиого файла. Часто встречается такая ситуация, что в оригинале програииа отгру-вает на ленту не один, а несколько блоков, причеи из разных нест памяти. При отгрузке на диск этих блоков их иожно отгружать, как отдельные файлы, ио если блоки очень короткие, то это будет только пустой тратой дискового пространства. Поэтоиу лучше перед отгрузкой отдельные блоки перебросить в свободное иесто паияти, выстроить один за другии и потои отгрузить как один файл (в приведенной примере блоки перебрасывается в буфер введенной строки, который после ввода имени не используется). После загрузки состояния нужно сделать противоположное : поочередно перебросить блоки из буфера в соответствующие места паияти.
Отгрузка/загрузка состояния путей пряного программирования контроллера.
Выше был рассиотрен способ адаптации с использованием подпрограммы t3D13, но для некоторых програин. которые затирают сметенные переиеииые, он не подходит. Господин Десятничеико для таких програим предложил сохранять область паияти под систеины-ии переменными, а их каждый раз переустанавливать. Но и этот способ непригоден для програии, в которых саио состояние ишходится а области систеиных переменных. Я предлагаю универсальную программу чтения/записи файлов длиной 1 сектор (большинство адвонтюр иие-ют отгрузки длиной менее 2&6 байт) с произвольный именем. Для работы с файлами длиной более одного сектора программу придется немного доработать, но «то иелочь и на ней останавливаться не буду. Этой програиие не нужны системные переменные и работает она при любом режиме прерывания Работа программы основана ма прямом программировании контроллера. Вот ее влриамт ДЛЯ игры HAMPSTKAD
гттттттпип
|
|
|
• |
|
|
* ••
• |
|
HAMPSTEAD |
* |
|
|
|
■ * |
Save |
and Load |
* A |
|
|
|
(С) |
1994 |
Eel 1рае Soft • • |
|
|
|
#
mess |
equ |
• 07A6 |
|
|
|
|
input |
kqu |
• 67CC |
|
|
|
|
sbufp |
equ |
■ seoo |
; адрес |
буфера. |
а который загружается |
|
|
|
;сектор из каталога |
диска |
И BUFF |
equ |
• 6000 |
;адрес |
буфера |
■•еденной строки |
FILE |
KQU |
• ъвоо |
;адрес |
информации о |
состоянии игры |
Далее следует адреса служебных байтов 8-го сектора
0-й дороякм. |
|
|
FDISK |
KQU |
SBUFF»«Kl |
;начало свободной области иа диске |
PILES |
кои |
SBUFF»fM |
количество файлов иа диске |
FREE |
EQll |
SMIPF«tKS |
;количество свободных секторов |
|
ORC |
• SD ЬЪ |
|
SAVE |
CALL |
PRKP |
подготовить дескриптор |
|
LO |
HL.SBUFF |
;считать служебный |
|
LD |
DR.«0008 |
;сектор |
|
CALL |
LS |
|
|
LD |
A.(riLKS) |
;количество файлов иа диске |
|
CP |
128 |
|
|
JR |
X,EXIT |
|
|
LD |
C,A |
{сохранить кол-во файлов |
|
LD |
HL,(FREE) |
{количество свободных секторов |
|
LD |
A,L |
|
|
OR |
H |
|
|
JR |
Z,EX IT |
j если* 0, то такие выход |
|
DEC |
HL |
;уиеиьаить на единицу (длина |
|
LD |
(FREE),HL |
;отгруааеиого файла) |
|
LD |
А,С |
|
|
INC |
A |
;общее количество файлов увеличить |
|
LO |
(FILES).A |
|
|
LO |
HL.(FDISK) |
|
|
LD |
D,H |
|
|
LD |
E.L |
|
|
INC |
E |
{иачало свободной области |
|
BIT |
4.1 |
;сдвинуть иа один сектор |
|
JR |
Z.LI |
|
|
LD |
E.O |
|
|
INC |
0 |
|
LI |
LD |
(ADRES).HL |
{установить новый адрес файла иа диске |
|
EX |
DE.HL |
|
|
LO |
(FDISK) HL |
{новый адрес свободной области диска |
|
PUSH |
DE |
|
|
PUSH |
ВС |
|
|
LO |
DE.Я0008 |
|
|
LO |
HL.SBUFF |
|
|
CALL |
SS |
{записать измененный служебный сектор |
T^iiiiHHiiHiiiiiiiiiimiiiiiiiiiHMiiiiiiiiiniiiin
L.C L L L L
H,SBUFF/256 С С
с с
Е.С 0.0 ОЕ HL
KL.SBUIT LS ОЕ
HL,NAME
ВС.16
ОЕ
HL.SBUFF
SS
DE
HL.riLI SS
;записать измененный каталог ,восстановить адрес свободной области
;записать файл
ТТТГПГТТЩ1
LD
SLA
SLA
SLA
SLA
LD
SRL
SRL
SRL
SRL
L0
LD
PUSH PUSH LO
CALL
POP
LO
LO
LOIR
POP
LO
CALL
POP
LO
CALL EI RET
;no номеру файла определить ,смещение его дескриптора ,от начала сектора
.определить сектор, а которой должен ;находиться дескриптор
.-считать необходимый .сектор каталога
;добавить информацию о файл* • каталог
- в -
цмппптт1 ''1 ГГТГПТ|
подготовить дескриптор .-начать с нулевого сектора ;нулевой дорояки
;считать сектор каталога ;количество файлов в одной секторе
;если иия следующего файла начинается ;с 0, то это конец каталога и файл ие ;найден
.-восстановить стек ;выйти из подпрограммы ;иия файла из каталога будет .сравниваться С введенным именем
.-сравнение по 11-ти байтам
;имена совпали и
.в (HL) адрес файла на диске
PUSH LO
PUSH
CALL
LO
POP
LO
AND
JR
POP
JR
LO
PUSH
PUSH
LO
LO
CP
JR
INC
INC
DJNZ
LD
ADD
LD
JR
DE
HL.SBUFF HL LS в.16 HL
A,<HL) A
NZ.L4 ВС
EXIT DE.NAME HL ВС
B.11 A.(DE) (HL) NX.L6 HL
OR
LS
А.Э
A.L
L.A
17
гггггггттттттг
1_ |
гтттттттттт'А'Атттт] |
|
|
|
|
|
111 II 1 II111111111 11 11111111111II1II1111 1 1111 111 11II 1111 111 |
|
POP |
HL |
|
|
LO |
A,16 |
;если имена не соапали, то перейти |
|
ADD |
A,L |
;на следующий файл |
|
LD |
L, A |
|
|
DJNZ |
L3 |
|
|
POP |
DE |
|
|
INC |
E |
;если это нее файлы иа данном секторе. |
|
BIT |
3.1 |
,-то перейти к следующему сектору |
|
JR |
Z.L2 |
|
|
JR |
EXIT |
;если нее сектора каталога просмотрены |
|
|
|
;и файл не найден- выход |
L7 |
LD |
B.(HL) |
;в DE адрес файла на диске |
|
INC |
HL |
|
|
LD |
O.(HL) |
|
|
•D |
HL,FILE |
|
|
i ALL |
LS |
;считать файл |
|
POP |
DE |
{восстановить стек |
|
POP |
DE |
|
|
POP |
DE |
|
|
JR |
EXIT |
|
|
ORG |
• 5F2B |
|
PREP |
LD |
HL,NAME |
|
|
LO |
В, В |
|
|
LD |
(HL),32 |
|
|
INC |
HL |
|
|
DJNZ |
PREP»* |
|
LS |
LD |
HL,REPORT |
{подготовка дескриптора |
|
CALL |
MESS |
|
|
LD |
HL,NRUFF |
|
|
CALL |
INPUT |
|
|
LO |
A.(HL) |
|
|
CP |
13 |
|
|
JR |
Z, LB |
|
|
LD |
C.O |
|
|
LD |
B.8 |
|
L9 |
LD |
A.(HI.) |
|
|
AND |
A |
|
|
JR |
Z.L10 |
|
|
INC |
С |
|
|
INC |
HL |
|
|
DJNt |
L9 |
|
L10 |
LD |
B.O |
|
|
LD |
HL.NBUFF |
|
|
LD |
DE,NAME |
|
|
LDIR |
|
|
|
DI |
|
|
|
LD |
IX,H2F6S |
{запуск дисковода |
|
CALL |
DOS |
|
|
RET |
|
|
Далое идут подпрограммы чтеиик .1 записи одного сектора. Входные данные для этих подпрограим сло-дукщие: HL - адрес загрузки сектора, D - логический нонер дорожки, с которой необходимо загрузить сектор, В - нонер эагруаае-иого сектора.
LS LD А,О {определить физический
рТТПТТТТ ГТте^Т$ТГГГТТ TTTTTTTj
тттттт |
|
IjTIIIIIII |
"«ЧШ|АШШтт,,тт,итт |
ПТГТТП |
|
RRA |
|
|
|
|
LD |
C.A |
|
|
|
JR |
NC.L11 |
|
|
|
LO |
A,»2C |
|
|
|
JR |
LI 2 |
;установка регистров |
|
L11 |
LD |
A.*3C |
;контроллера в соответствии |
|
L12 |
LO |
IX,(2F4D |
;с входиыии даиныии |
|
|
CALL |
DOS |
|
|
|
LO |
IX,»2F1B |
;чт«иие сектора |
|
|
CALL |
DOS |
|
|
|
RET |
|
|
|
DOS |
PUSH |
IX |
;переход в иеобходиную точку |
|
|
JP |
f 3D2F |
;ПЗУ TR-DOS |
|
SS |
LD |
A.O |
;запись сектора, подпрограмма |
|
|
OR |
A |
аналогична подпрограмм»» LS |
|
|
RRA |
|
|
|
|
LD |
C.A |
|
|
|
JR |
NC.L14 |
|
|
|
LD |
A, #2C |
|
|
|
JR |
LIS |
|
|
LI 4 |
LD |
A,»3C |
|
|
LIS |
L0 |
IX,»2F4D |
|
|
|
CALL |
DOS |
|
|
|
LD |
IX,«2073 |
|
|
|
CALL |
DOS |
|
|
|
RET |
|
|
|
NAME |
0ЕГМ |
И |
С" ;дескриптор файла |
|
|
DEFB |
7.0 |
;м* адрес загрузки, а контрольный код |
|
Поскольку |
при чтении поиск pax задавать разные коды. |
тогда |
файла ведется по ииени, типу и контрольному коду, то неплохо было бы при адаптациг в разных иг -
на одном диск* не отгрузки разных игр, ковыни именаии.
перепутаются но с одмна-
DEFE 0.0
овгв о
ACRES DEPB 0,0
REPORT ГЕГМ "ENTER DEFM "PILE " DEKH "HAKE: 0EFB «1Г
.-стандартно тут разиецеиы данные про .длину файла, но иоя програииа ;их игнорирует
,при записи сюда подставляется ;адрес файла и* диск* ;сообщение-подсказка
Многие программа покажется слишком громоздкой и возникнет законный вопрос: поместиться ли подобней ярограмм• в паияти какой-нибудь серьезной адвентюры с кучей текстов и графмхиТ Отвечая: поместится) Если ив поиестится вэлмость*. ТО е* мовно разместить • разных участках паияти, понас-глпляа где надо инструкций JR и JP К тому яе во многих играх бы аает полно "мусора", который ио-вет заминать килобайты! A w некоторые игры ииоют свои собственные подпрограииы для работы с лентой, они такяе могут заминать порядочно паияти, которой обычно достаточно для разие«ения подпрограммы работы с диском. Еце мовно сэкономить на той, что подпрограииы LS и SS отличаются только адресами подпрограмм чтения и заик и « ПВ и (2073 соответственно И можно написать руо будет передаваться адрес не-обходиной процедуры:
L& |
LD |
1Х.Я2Р1В |
|
JR |
S/L |
SS |
LD |
IX,f 2П7 3 |
S/L |
PUSH |
IX |
|
LD |
A.D |
|
OR |
A |
|
RRA |
|
|
LD |
С, A |
|
JR |
NC.L1 |
|
-D |
A,«2C |
|
JP |
L2 |
L1 |
LD |
A,«3C |
L2 |
LD |
IX,*2P4D |
|
CALL |
DOS |
|
РОГ |
IX |
|
CALL |
DOS |
|
RET |
|
Прогреми* имеет ряд достоинств, но у нее есть один недостаток связанный с различными версиями TR-DOS: она не работает с TR-DOS vS.Ol. Кокно. конечно, сдеяать проверку версии TR-DOS и в соответстони с версией иэиеиять адреса подпрограмм ПЗУ. Но я считаю, что это бучет ливней тратой памяти и сия программиста. к тому яе сейчас TR-DOS vS.Ol почти исчезла и большинство пользователей далее. А всей владельцам TR-DOS vS.Ol, которые ие удовлетворены работой адаптированных иною программ обещаю лично переделать любую игру.
Отгоуэка состояния а иоиоблок.
Отгрузку в моноблок лучше использовать в деловых и стратегических играх, в адвентюра* желательно использовать ее только а крайней случае, когда ие хватает памяти для всех иных вариантов загрузчиков. Но так, как отгрузка ■ моноблок в классической исполнении оставляет только один отг-зрузочмыИ блок, то я предлагаю иеиного иной вариант отгрузчика, который перед отгрузкой (загрузкой ) запрашивает иоиер блока в который будет произведена отгрузка (загрузка). Такой вариант реализован В игре ЗВЕЗДНОЕ НАСЛЕДИЕ. Исаи длина одного блока около че-тырехпяти дорожек, то можно ограничиться тремя блскаии, а если длина блока всего 8-16 секторов, то иокно дать и десять блоков. Вот, как выглядит вариант такой программы ДМ игры MULT I-PLAYER SOCCER MANAGER:
дтаттттгт,тттгатттттггттгтт1
РШЧВДЩШКТВШ'1 'UUJ'U.'tt! •14!U! "ИЯРГЧпч
Multi-Player Soccer Manaeer • ,я е
I* Save and Load *
•
(С) 199S Eclipse Soft •
;о«~сткж зкрана ,вы-од а основную программу
MESS |
EQU |
•D73C |
|
ORG |
•DB02 |
SAVE |
D! |
|
|
CALL |
PREP |
|
CALL |
SS |
|
EI |
|
|
CALL |
• D34F |
|
JR |
■ DAD1 |
|
ORG |
• DB2D |
LOAD |
DI |
|
|
CALL |
PREP |
- 12
ггпгт|ттттгггтп 1 'm'm1 1!"""1' ч
шш
PRKP
L1
JR |
•0813 |
ORG |
■DC03 |
LD |
HL.REPORT |
CALL |
NESS |
LD |
А ,»P7 |
IN |
A,(«FB> |
AND |
7 |
XOR |
7 |
JR |
J.LI |
LD |
DE ,0 |
LD |
HL.O |
RRCA |
|
JR |
C,L2 |
LD |
HL,«030F |
RRCA |
|
JR |
C.L2 |
LD |
HL,f070E |
ADD |
HL.Dr |
BIT |
4.1 |
JR |
X.L3 |
RES |
4.L |
INC |
H |
POSH |
HL |
POP |
DB |
LO |
HL,»SB03 |
LO |
В.'ЗР |
RET |
|
LD |
IX,>2P65 |
CALl |
DOS |
PUSH |
ВС |
PUSH |
DE |
LO |
A,D |
OR |
A |
RRA |
|
LO |
C.A |
JR |
NC.LS |
LO |
A,»2C |
JR |
L6 |
LO |
A, f ЭС |
LD |
IX,V2F4D |
CALL |
DOS |
POP |
DE |
POP |
ВС |
TUSH |
ВС |
PUSH |
DE |
LD |
IX,«2P1B |
CALL |
DOS |
POP |
DE |
INC |
H |
INC |
r |
BIT |
4.E |
JR |
Z,L« |
LO |
«,0 |
itt 111 м 111 JTFJTiTATlTi1!™ ТЖЧРТОТ,тгп"^ттп
-—
;управляющие коды ;текст сообщения-подсказки
ГГТТТПТЩГ |
IJTIUini |
|
POP |
ВС |
|
DJNZ |
L4 |
|
RET |
|
L8 |
POP |
ВС |
|
DJNZ |
17 |
|
RET |
|
DOS |
PUSH |
IX |
|
JP |
• 3D2F |
SS |
LD |
IX,'2F6S |
|
CALL |
DOS |
L10 |
PUSH |
ВС |
|
PUSH |
DE |
|
LD |
A.D |
|
OR |
A |
|
RRA |
|
|
LD |
C.A |
|
JR |
NC.L1I |
|
LD |
A, 02C |
|
JR |
L12 |
LI 1 |
LD |
A, ®3C |
L12 |
LD |
IX,*2P4D |
|
CALL |
DOS |
|
POP |
DE |
|
POP |
ВС |
L14 |
PUSH |
ВС |
|
PUSH |
DE |
|
LD |
IX.B2D73 |
|
CALL |
DOS |
|
POP |
DE |
|
INC |
H |
|
INC |
E |
|
SIT |
*.t |
|
JR |
Z.L1S |
|
LD |
*.o |
|
INC |
D |
|
POP |
ВС |
|
DJNZ |
L10 |
|
RET |
|
LIS |
POP |
ВС |
|
DJNZ |
L14 |
|
RET |
|
|
ORG |
• DBD1 |
REPORT |
DEFB |
5,3 |
|
DEFM |
"Enter " |
|
DEFM |
"version |
|
DEFM |
"nuaber " |
|
DEFM |
"(1-3)" |
|
DKF8 |
•OD |
;эались группы секторов
пппппптпмппппптпптпмпмппип
■;выход в основную програмну
адрес сообщения-подсказки печать сообщения опросить подурад клавиатуры отвечающий за кдааиюи 1, 2. 3, 4, Ь оставить битм отвечающие за клавиши 1,2,3 (бит включен- клавиша нажата) есаи ие одна из трех каавию ие нажата, тс повторить опрос кдавиатурм при загрузке игры сюда помещается адрес первого блока иа диске смещение для первого блока: Н- дорожки, L- сектора
переход вперед, если нажата клавиаа 1 смещение для второго блока
перевод вперед, если нажата клавиаа 2 сиещение для третьего кяока определение абсолютного адреса блока
.установка параиетров для подпрограииы ;чтения (записи)
;чтение группы секторов
Как видите объем используемой программой памяти минимален и если подпрограммы чтения и записи группы секторов организовать в одну подпрограмму, то его можно уменьшить еще, примерно иа треть.
Заключение.
Напоследок хочу сказать пару слов о внешнем виде адаптированных программ. Эти слова относятся а первую очередь к теи, ктс серьезно занимается адаптацией игр.
да при отгрузке на диск, аидияь огромное изображение кассеты, с надписью START ТАРЕ. Неувел»; так сложно, исподьэуа кота бы простейшую программу типа SCE найти спрайт-кассету и перерисовать его. превратив в спрайт-дискету?! В крайнем случае, если Вы не представлдете себв в роди художника, превратите кассету в надпись типа SAVE t LOAD Постарайтесь сделать так, чтобы адаптированная Вани програииа выглядела более-иеиее фирменно.
Ь, что излояеииые идеи помогут Вам переделать свои любммые лдвентюры и стрлтегички для работы с дисководом и Вы навсегда забудете о магнитофоне и кнопке MAGIC. Если Ваи чтолибо не ясно в иоей статье, то можете написать мне лично. Также хотелось бы услышать иноние опытных игроков о работе адаптированных мною игр. Постараюсь ответить на любое письио. Мой адрес
290052 г.Львов. ул.Сяйво, л.15. кв.44 Кяммусу Владимиру