ZX Review #5-6
04 ноября 1997

Этюды - Программа обработки @-бейсик файлов.

<b>Этюды</b> - Программа обработки @-бейсик файлов.
┌──────────────────────────────┐
│                              │
│            ЭТЮДЫ             │
│                              │
└──────────────────────────────┘

(c) Иван Рощин, г.Москва, 1997

   Предлагаю вашему вниманию не-
большую  программу  на  Бейсике,
которая пригодится любителям вы-
дирать картинки с помощью  кноп-
ки 'MAGIC'. Программа  обеспечи-
вает  автоматическое  извлечение
картинок из полученных  @-файлов
(которых может быть и несколько)
и сохранение  их  в  стандартном
формате (6912 байт). В  процессе
работы программы исходные @-фай-
лы удаляются и происходит уплот-
нение диска.

1   REM NNN... (зарезервировано 32 байта 
    для машинных кодов)
5   CLEAR 32767
7   LET i=1: LET j=1: GO SUB 1000
10  BORDER 1: PAPER 1: INK 7: CLS
20  PRINT "M-WIZARD v 1.0"
30  PRINT "(c) 1997 by Ivan Roshin"
40  PRINT: PRINT "Insert disk with @-file
    (s)"
50  PRINT "and press enter..."
60  PAUSE 0
70  CLS: PRINT "Loading screen..."
90  RANDOMIZE USR 15619: REM: LOAD "@" 
    CODE 32768,6912
95  LET e = PEEK (23823)
99  IF e=0 THEN GO TO 120
100 IF (i=1 AND j=1) THEN PRINT AT 0,0;
    "@-file(s) not found!": BEEP .25,0: 
    GO TO 500
101 CLS: PRINT "Deleting @-file(s)...": 
    PRINT: PRINT "---------"
102 FOR k=0 TO 8: LET a$ = "@" + STR$ k
103 RANDOMIZE USR 15619: REM: ERASE a$ 
    CODE
104 PRINT AT 2,k; "+": NEXT k
110 CLEAR 65535: PRINT
    "Moving files...   "
115 RANDOMIZE USR 15619: REM: MOVE
117 PRINT: PRINT "O.K.": BEEP .1,16: 
    GO TO 500
120 RANDOMIZE USR 23872
121 FOR k=1 TO 4: PRINT AT k,1;
    "                       ": NEXT k
125 PRINT AT 2,2; "Saving this screen":
    PRINT AT 3,2; "to file '";n$;"'..."
130 RANDOMIZE USR 15619: REM: SAVE n$ 
    CODE 32768,6912
131 LET e = PEEK (23823)
140 IF e = 0 THEN GO TO 200
150 IF e <> 2 THEN GO TO 170
155 LET j=j+1: GO SUB 1000: GO TO 121
170 PRINT "No space!": BEEP .25,0: 
    GO TO 500
200 LET i=i+1: GO SUB 1000
210 RANDOMIZE USR 15619: REM: NEW "bak",
    "@" CODE
220 RANDOMIZE USR 15619: REM: ERASE 
    "bak" CODE
230 GO TO 70
500 PRINT: PRINT "Press any key to call
    TR-DOS..."
510 PAUSE 0: CLS: PRINT "Press 'RETURN' 
    to continue...":
    RANDOMIZE USR 15616
520 GO TO 5
1000 LET n$ = "scr_" + STR$ j + "_" + 
     STR$ i: RETURN

   В строке 1 находится подпрог-
рамма в машинных кодах,  которая
выводит на экран картинку,  рас-
положенную по адресу  #8000.  Ее
вызов  осуществляется  в  строке
120. Конечно,  эту  подпрограмму
можно было  сделать  значительно
короче, но  приведенный  вариант
имеет  преимущество  -  картинка
появляется  на  экране "мгновен-
но".

   Текст на ассемблере:
140.
       HALT             ;ждем прерывания
       LD      HL,#5800
       LD      (HL),#00 ;или LD (HL),L
       LD      DE,#5801
       LD      BC,#02FF
       LDIR             ;обнулили атрибуты
       LD      HL,#8000 ;переносим содер-
       LD      DE,#4000 ;жимое дисплейного
       LD      BC,#1800 ;файла (при этом
       LDIR             ;экран черный),
       HALT             ;ждем прерывания
       LD      BC,#0300 ;и переносим
       LDIR             ;атрибуты картинки
       RET              ;выход в Бейсик

   Еще 3 байта можно сэкономить,
заменив команды LD HL,#8000,  LD
BC,#1800 и  LD  BC,#0300  на  LD
H,#80, LD B,#18 и LD B,#03 соот-
ветственно. Если хотите,  можете
произвести такую замену.

   Дамп памяти:

#76,#21,#00,#58,#36,#00,#11,#01
#58,#01,#FF,#02,#ED,#B0,#21,#00
#80,#11,#00,#40,#01,#00,#18,#ED
#B0,#76,#01,#00,#03,#ED,#B0,#C9
2

    Руководство пользователя

   После запуска программы необ-
ходимо вставить диск с  файлами,
сброшенными кнопкой  'MAGIC',  и
нажать  клавишу  'ENTER'.   Если
требуемые файлы не будут  найде-
ны, программа выдаст  "@-file(s)
not found!" и выйдет в TR-DOS. В
этом случае вы можете перезапус-
тить программу, нажав 'RETURN'.

   Если на диске  есть  хотя  бы
один @-файл, программа считывает
содержащуюся в нем картинку, по-
казывает ее на экране  и  сохра-
няет в файле.  Имя  этого  файла
также выводится  на  экран.  Оно
определяется  автоматически    и
имеет  вид  "scr_i_j", где i,j -
некоторые  числа, смысл  которых
станет ясен после просмотра раз-
дела "Пример использования".

   После обработки одной картин-
ки программа переходит к поиску,
считыванию и записи следующей, и
так до тех пор, пока все @-файлы
не будут  обработаны.  Затем  @-
файлы   удаляются,  производится
уплотнение  диска  и  выход    в
TR-DOS.

  Не  всякую  программу    можно
сбросить на диск с помощью кноп-
ки 'MAGIC'. Иногда после ее  на-
жатия  компьютер  зависает   или
сбрасывается, и нормальной запи-
си не происходит. При  этом  мо-
жет быть испорчен каталог диска.
В таком случае можно попробовать
нажать  'MAGIC' два раза подряд,
или нажать 'RESET' и сразу после 
этого 'MAGIC'. Хотя  на  работо-
способность программы после это-
го рассчитывать  не  приходится,  
из записанных на диск файлов все 
же можно будет извлечь картинку. 
Кстати, в  некоторых  программах 
вывод  изображения  производится
на второй экран, и картинка  на-
ходится  в  первых  27  секторах
файла "@7".


      Пример использования

   1. Возьмем чистый диск.

    ┌────────────────────────────────┐
    │Title: NO NAME                  │
    │0 File(s)                       │
    │0 Del. File                     │
    │                                │
    │                                │
    │2544 Free                       │
    │                                │
    └────────────────────────────────┘

   2. С помощью  кнопки  'MAGIC'
запишем  несколько  @-файлов   с
нужными нам картинками.

    ┌────────────────────────────────┐
    │Title: NO NAME                  │
    │26 File(s)                      │
    │0 Del. File                     │
    │                                │
    │A:@       <C>192:@7      <C> 64 │
    │A:@4      <C> 64:@3      <C> 64 │
    │A:@1      <C> 64:@8      <C>  1 │
    │A:@       <C>192:@4      <C> 64 │
    │A:@3      <C> 64:@1      <C> 64 │
    │A:@0      <C> 64:@8      <C>  1 │
    │A:@       <C>192:@6      <C> 64 │
    │A:@4      <C> 64:@3      <C> 64 │
    │A:@1      <C> 64:@0      <C> 64 │
    │A:@8      <C>  1:@       <C>192 │
    │A:@7      <C> 64:@6      <C> 64 │
    │A:@4      <C> 64:@3      <C> 64 │
    │A:@1      <C> 64:@8      <C>  1 │
    │                                │
    │620 Free                        │
    │                                │
    └────────────────────────────────┘

   3. Обработаем диск с  помощью
программы.

    ┌────────────────────────────────┐
    │Title: NO NAME                  │
    │4 File(s)                       │
    │0 Del. File                     │
    │                                │
    │A:scr_1_1 <C> 27:scr_1_2 <C> 27 │
    │A:scr_1_3 <C> 27:scr_1_4 <C> 27 │
    │                                │
    │2436 Free                       │
    │                                │
    └────────────────────────────────┘

   4.  Запишем   еще   несколько
@-файлов на тот же диск.

    ┌────────────────────────────────┐
    │Title: NO NAME                  │
    │22 File(s)                      │
    │0 Del. File                     │
    │                                │
    │A:scr_1_1 <C> 27:scr_1_2 <C> 27 │
    │A:scr_1_3 <C> 27:scr_1_4 <C> 27 │
    │A:@       <C>192:@7      <C> 64 │
    │A:@6      <C> 64:@3      <C> 64 │
    │A:@0      <C> 64:@8      <C>  1 │
    │A:@       <C>192:@7      <C> 64 │
    │A:@6      <C> 64:@3      <C> 64 │
    │A:@1      <C> 64:@8      <C>  1 │
    │A:@       <C>192:@4      <C> 64 │
    │A:@3      <C> 64:@1      <C> 64 │
    │A:@0      <C> 64:@8      <C>  1 │
    │                                │
    │1089 Free                       │
    │                                │
    └────────────────────────────────┘

  5. Снова используем программу.

    ┌────────────────────────────────┐
    │Title: NO NAME                  │
    │7 File(s)                       │
    │0 Del. File                     │
    │                                │
    │A:scr_1_1 <C> 27:scr_1_2 <C> 27 │
    │A:scr_1_3 <C> 27:scr_1_4 <C> 27 │
    │A:scr_2_1 <C> 27:scr_2_2 <C> 27 │
    │A:scr_2_3 <C> 27                │
    │                                │
    │2355 Free                       │
    │                                │
    └────────────────────────────────┘

            *   *   *





Другие статьи номера:

Adventure Project - Проектирование и разработака Адвентюрных и RPG игр.

Adventure Project - Русификация адвентюр.

TR-DOS для начинающих - Продолжение.

Авторская разработка - Scorpion 2000 (С.Зонов).

Авторская разработка - Трамплин (С.Веремеенко).

Визитная карточка - новый электронный юмористический журнал "SpectrofUn".

Перекресток драконов - Раскрутка игры Finders Keepers.

Перекресток драконов - Раскрутка игры Knight Tyme.

Перекресток драконов - Раскрутка игры Spellbound.

Перекресток драконов - Раскрутка игры Stormbringer.

Ретро - 40 лучших процедур: Слияние картинок, Вращение символа по часовой стрелке, Инвертирование символов, Изменение атрибута, Закрашивание контура, Построение шаблонов (Дж.Хардман, Э.Хьюзон.).

Советы экспертов - Total Eclipse 2.

Советы экспертов Super League.

Форум-игры - Описание игры Страна Мифов.

Форум-игры - Прохождение Renegade.

Форум-игры - Тонкости торговли в игре Elite

Форум - Изучение и отладка @-файлов с помощью STS 5.1. Особенности отладки программ с помощью монитора STS. Исправление ошибки STS 5.1.

Форум - Компрессия программ.

форум - О сокращении времени форматирования. О записи секторов одновременно с форматированием. Перестроение экрана за одно прерывание.

Форум - Особенности ассемблера ZX ASM 3.0.

Форум - По поводу компилятора бейсика "Blast".

Форум - По поводу релоцируемых программ.

Форум - Программы "Пламя" и "Дракон".

Читатель-читателю - TR-DOS: как не допустить ошибки?

Читатель-читателю - Эффективная работа с дисководом .

Этиды - Расчет адреса в файле атрибутов. Программа скроллирования заданного окна на 1 пиксел вправо. Программа очистки заданного окна. Процедура вывода картинки из буфера.

Этюды - Индикатор каналов музыкального процессора. Процедура очистки экрана. Предложение по стандартизации.

Этюды - Набор из восьми программ "расширения" экрана. Две процедуры проявления экрана.

Этюды - Новые темы для разработок.

Этюды - Программа воспроизведения инструмента от редакторов оцифрованной музыки.

Этюды - Программа обработки @-бейсик файлов.

Этюды - Процедура поворота символа на 90 градусов по часовой стрелке.

Этюды - Процедура поиска текстовых файлов.

Этюды - Экранная процедура "UP HL".


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Анкета - Alеx Иikifоrоv.
Демопати - Правила второго ежегодного виртуального фестиваля компьютерного искусства Artcomp'99.
Guide - Alone Coder дивится количеству написанного кода.
Реклама - двигатель торговли!
Внимание - Памятка пользователю сети SPbZXNet.

В этот день...   21 ноября