ZX Review
#5-6
04 ноября 1997 |
|
Этюды - Программа обработки @-бейсик файлов.
┌──────────────────────────────┐ │ │ │ ЭТЮДЫ │ │ │ └──────────────────────────────┘ (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 │ │ │ └────────────────────────────────┘ * * *
Другие статьи номера:
Похожие статьи:
В этот день... 30 октября