:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №22 (23.01.2005) Просмотров: 7507
Автор: Алексей Кравченко. Рубрика: Читатель читателю. Номер: №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-версия готова. |