Дискование игр для TR-DOS: адаптация процедур SAVE/LOAD и уровней

Electra #02

KODĒŠANA

Эта статья является продолжением темы, начатой в предыдущем номере. На этот раз поговорим о дисковании игр. Первый и самый главный совет — производить все описанные ниже манипуляции с помощью встроенного монитора ZS 256 SCORPION. Но если у тебя нет 70 - 80 Ls, я советую тебе приобрести монитор, который занимает мало памяти, обладает отличными возможностями трассировки программ и достаточно удобен.

А теперь перейдём к делу — всё дискование игр можно разделить на два основных вида:

  1. Игры, где нужно дисковать процедуры SAVE и LOAD позиции;

  2. Игры с дополнительными уровнями.

В первом случае алгоритм следующий:

  1. Создать на диске файл с помощью дискового монитора или переписать с ленты какую-либо позицию.

  2. В программе вместо процедур ленточного 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. После того как вся программа записана, необходимо произвести следующие манипуляции:
    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, то в этом случае это практически невозможно.

Всё дискование можно разделить на следующие этапы:

  1. создаётся monoloader (см. ELECTRA N1);

  2. обеспечивается возврат к первому уровню, если игрок теряет все жизни или проходит игру.

При создании монолоадера необходимо учитывать следующие основные принципы:
1) все уровни должны располагаться подряд и сразу за последним записываемым блоком;
2) monoloader создаётся в зависимости от конкретных условий — используя переменную по адресу #5CF4.

Возврат к первому уровню можно обеспечить, записав по адресу #5CF4 значение, которое находилось там в самом начале.

Главная проблема, которая возникает, заключается в том, что TR DOS изменяет 112 байт по адресу #5CB6.
Эту проблему можно решить, сохранив эти 112 байт в памяти и затем восстановив их.

Поделитесь вашим мнением о статье