┌──────────────────────────────┐
│ │
│ ЭТЮДЫ │
│ │
└──────────────────────────────┘
(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 │
│ │
└────────────────────────────────┘
* * *