Абзац
:: Поиск
:: Поддержка проекта
Webmoney:
  • Z610389805629
  • R427996570517
  • E023541002978
  • :: №22 (23.01.2005) Просмотров: 7250

    Автор: Алексей Кравченко.

    Рубрика: Читатель читателю.

    Номер: №22 (23.01.2005).



    Создание 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-версия готова.

    © 2004-2013 Perspective group