Создание tap-версии программы — Abzac


PeriodicalsAbzac2005 No. 22 → Создание tap-версии программы

Создание tap-версии программы

Для начала поясним, что же это за файлы. Итак, tap-файлы это «ленточные» (с магнитной ленты) образы каких-либо программ (файлов) для эмуляторов Спектрума на PC. В основном формат *.tap популярен у западных коллег-спектрумистов. Например, у русскоязычных спектрумистов, использующих эмулятор, популярны форматы *.TRD, *.SCL и некоторые другие.

Так вот, чтобы дать возможность посмотреть и оценить свои работы нашим коллегам, необходимо перевести свой проект в *.tap формат. С просьбой рассказать о тонкостях такой работы, мы обратились к Алексею Кравченко (автор HorrorWord и некоторых других программ на Спектруме), у которого уже был подобный опыт. Ему слово.

Сразу следует оговориться. Я не знаю всех тонкостей самого формата *.tap, поэтому прибегал к помощи некоторых программ на PC, в частности: «Spectrum Navigator» и «TAPER».

Если делать самый примитивный перевод своей программы в формат *.tap, то действия следующие.

1. Пишем программку на Бейсике, например:

1 LOAD «blok1» CODE 32768
2 RANDOMIZE USR 32768

2. Сохраняем ее на дискету, либо в файл *.trd.

3. Создаем при помощи Spectrum Navigator’а пустой файл *.tap (Клавиша F9, далее пункт меню - «TAP - Tap image»).

4. Копируем с дискеты либо из файла *.trd сохраненный ранее Бейсик-загрузчик в созданный файл *.tap.

5. Далее за Бейсик-загрузчиком записываем файл «blok1.C».

Собственно все.


* * *

С загрузкой блоков из ассемблера дело посложнее.

1. Пишем Бейсик-загрузчик:

0 REM необходимое количество пробелов под код загрузчика

1 CLEAR VAL «24499»: RANDOMIZE USR (PEEK VAL «23636»* VAL «256»+ PEEK VAL «23635» + VAL «5»): REM этим выражением мы вычисляем адрес кода после REM в нулевой строке.

2. В Alasm’е пишем что-то типа:

    ORG #5D40
Start    DI 
    LD HL,#5B00
    LD (HL),#C9
    CALL #5B00
Metka    DEC SP
    DEC SP
    POP HL
    LD DE,Loader-Metka
    ADD HL,DE    ;чтобы загрузчик 
        ;был релоцируемым.
    LD DE,#FF00
    LD BC,#FF
    LDIR 
    JP #FF00
Loader    DISP #FF00    ;какая-нибудь 
        ;свободная область
    DI
    LD DE,256
    LD IX,#5B00
    CALL TLoad    ;грузим первый блок 
        ;длинной 256 байт
        ;(у меня это     dehrust)
        ;по адресу #5B00
    LD DE,11347
    LD IX,#6400
    CALL TLoad    ;второй по адресу 
        ;#6400 длинной 11347
    LD HL,#6400
    LD DE,#6400
    CALL #5B00    ;распаковываем
    EI 
    JP #6400    ;запускаем
TLoad    LD A,255    ;процедура загрузки 
    SCF    ;блока без заголовка
    INC D
    EX AF,AF’
    DEC D
    LD A,8
    OUT (#FE),A
    CALL 1378
    LD A,0
    OUT (#FE),A
    JP NC,TLoadE
    RET 
TLoadE    EI    ;сюда мы попадаем 
    XOR A    ;при любой ошибке
    CALL Pause    ;чтения
    LD A,2    ;Я сделал мигание 
    CALL Pause    ;бордюра красным
    XOR A    ;далее - сброс. 
    CALL Pause    ;А вообще можно 
    JP 0    ;делать что угодно
Pause    OUT (#FE),A
    LD B,10
Pause1    HALT 
    DJNZ Pause1
    RET
DISPLAY /A,«длинна загр:»,$-#FF00
    ENT
DISPLAY /A,«общая длинна загр:»,$-Start

3. Ассемблируем, выписываем Бейсик с включенной в него подпрограммой на ассемблере на диск.

4. Далее в *.tap файл все тем же Spectrum Navigator’ом копируем сначала Бейсик, затем остальные два кодовых файла. Главное последовательность не перепутать.

5. Осталось у кодовых файлов убрать заголовки. Я это делал программой «TAPER». Ее можно найти на worldofspectrum.

Все, tap-версия готова.