KODĒŠANA
Эта статья является продолжением темы, начатой в предыдущем номере. На этот раз поговорим о дисковании игр. Первый и самый главный совет — производить все описанные ниже манипуляции с помощью встроенного монитора ZS 256 SCORPION. Но если у тебя нет 70 - 80 Ls, я советую тебе приобрести монитор, который занимает мало памяти, обладает отличными возможностями трассировки программ и достаточно удобен.
А теперь перейдём к делу — всё дискование игр можно разделить на два основных вида:
-
Игры, где нужно дисковать процедуры SAVE и LOAD позиции;
-
Игры с дополнительными уровнями.
В первом случае алгоритм следующий:
-
Создать на диске файл с помощью дискового монитора или переписать с ленты какую-либо позицию.
-
В программе вместо процедур ленточного LOAD и SAVE необходимо установить процедуры дискового LOAD и SAVE.
Тексты этих процедур следующие:
LOAD PUSH IX ;адрес
POP HL ;записи
DATA1 LD DE,0
DATA2 LD BC,#0005
CALL #3D13
SAVE PUSH IX
POP HL
DATA3 LD DE,0
DATA4 LD BC,#0006
CALL #3D13
Эти процедуры составлены с расчётом на то, что адрес всегда записан в IX.
- После того как вся программа записана, необходимо произвести следующие манипуляции:
1) Считать с диска местоположение позиции на диске и длину позиции в секторах;
2) Занести считанные значения в процедуры LOAD и SAVE:
LD HL,FADR ; местополож.
LD (DATA1+1),HL
LD (DATA3+1),HL
LD A,LEN ; длина, сект.
LD (DATA2+2),A
LD (DATA4+2),A
Это примерно всё.
Ещё можно упомянуть, что позицию, если она короткая, можно сохранить также в определённом месте на диске — на последних дорожках или на нулевой дорожке после названия диска.
Теперь рассмотрим случай, когда у игры есть загружаемые с ленты дополнительные уровни. Если в первом случае ещё можно обойтись без монитора ZS 256, то в этом случае это практически невозможно.
Всё дискование можно разделить на следующие этапы:
-
создаётся monoloader (см. ELECTRA N1);
-
обеспечивается возврат к первому уровню, если игрок теряет все жизни или проходит игру.
При создании монолоадера необходимо учитывать следующие основные принципы:
1) все уровни должны располагаться подряд и сразу за последним записываемым блоком;
2) monoloader создаётся в зависимости от конкретных условий — используя переменную по адресу #5CF4.
Возврат к первому уровню можно обеспечить, записав по адресу #5CF4 значение, которое находилось там в самом начале.
Главная проблема, которая возникает, заключается в том, что TR DOS изменяет 112 байт по адресу #5CB6.
Эту проблему можно решить, сохранив эти 112 байт в памяти и затем восстановив их.
Поделитесь вашим мнением о статье