|
Глава 20,21 - внешняя память на магнитной ленте. Устройство печати.
|
Глава 20
Внешняя память на магнитной ленте
Краткое содержание: LOAD, SAVE, VERIFY, MERGE
Основные команды работы с магнитофоном SAVE, LOAD и VERIFY
уже рассматривались во вводном описании. Вы могли видеть, что
LOAD затирает старую программу в памяти компьютера при загрузке
новой программы с ленты, есть другая команда MERGE, не делающая
этого. Эта команда стирает лишь те строки программы или перемен-
ные, которые совпадают с номерами строк новой программы или
именами новых переменных. Программу "DICE" ("игральная
кость") из главы 11 запишем на ленту под именем "DICE", а
теперь введем и выполним следующую программу:
1 PRINT 1
2 PRINT 2
10 PRINT 10
20 LET X
Осуществим ее проверку, заменив команду VERIFY "DICE"
на команду MERGE "DICE", вы увидите, что строки 1 и 2 сохра-
няются, а строки 10 и 20 заменяются на строки с этими номерами их
программы "DICE", переменная X тоже сохраняется (проверте PRINT X).
Теперь вы знаете четыре оператора для работы с кассетным
магнитофоном:
SAVE - записывает программу и переменные на магнитофон;
VERIFY - проверяет программу и переменные в памяти
компьютера по их копии на ленте;
LOAD - очищает память компьютера от всех программ и
загружает в нее новые, считанные с магнитофона;
MERGE - подобна LOAD, только не очищает всю память, а лишь
заменяет те строки программы или переменные, у
которых совпадают номера или имена с такими же на
магнитной ленте.
За каждой из этих команд следует ключевое слово - имя програм-
мы, определенное первоначально в команде SAVE, пока компьютер
ищет указанную программу, он выводит имена всех программ, уже
прочитанные с ленты, имеется две возможности для снятия справки с
ленты.
Вариант 1, в операторах VERIFY, LOAD и MERGE вместо имени
можно указать пустую строку, тогда будет взят первый встретивший-
ся файл.
Вариант 2, с использованием оператора SAVE:
SAVE STRING LINE NUMBER
программа запишется на ленту так, что когда она будет вновь
считана по команде LOAD (но не MERGE), она автоматически устано-
вится на строку с указанным номером и сама инициирует свое выпол-
нение.
Кроме текстов программ на ленту можно записывать также масси-
вы или данные.
Записать на ленту массив вы можете, используя команду SAVE с
DATA таким образом:
SAVE STRING DATA ARRAU NAME()
здесь "STRING" - имя, присваиваемое файлу данных, которое
может состоять из букв или букв и символа "$" (перечеркнутая
буква "S"). Для строковых данных это требование здесь не
важно. Загружаются такие данные по команде:
LOAD STRING DATA ARRAY NAME()
Нельзя использовать оператор MERGE.
Если загружается строковый массив, то после обнаружения его
на ленте, компьютер выдает: "CHARAUTER ARRAY:" и далее имя
второго массива.
Существует возможность записи на магнитную ленту и отдельных
байтов информации, так например, это может быть телевизионная
картинка или определенные ползователем графические символы и т.д.
Для этого используется ключевое слово CODE, например:
SAVE "PICTURE" CODE 16384,6912
здесь первое число - адрес первого байта в области памяти где
расположены данные, а второе число - количество байтов, которые
нужно записать на ленту (6912 -обьем в байтах одного экрана,
16384 - адрес экрана в памяти). Загружаются эти данные по команде:
LOAD "PICTURE" CODE
после CODE можно указать числа:
LOAD "PICTURE" CODE START, LENGTH
LENGTH (длина) - определяет сколько данных (байтах) надо
загрузить с ленты, если длина больше, чем записано на ленту, то
выдается сообщение "R TAPE LOADING ERROR" (ошибка загрузки с
ленты). Этот параметр можно опустить и тогда компьютер считает
все данные, которые записаны на ленте.
START (начало) - указывает адрес,с которого должны загружаться
данные и может быть отличным от адреса,
указанного в SAVE, вы можете опустить этот па-
раметр в команде LOAD.
выражение CODE 16364,6912 можно заменить на SKREEN$:
SAVE "PICTURE" SCREEN$ и затем
LOAD "PICTURE" SCREEN$
Это тот случай когда VERIFY не работает, в остальных случаях
VERIFY$ можно использовать везде где используется SAVE.
В заключение, везде, где указывается имя файла на ленте,
используются только первые 10 символов, существует четыре типа
информации, которые могут быть записаны на ленту:
- программы и переменные ( совместно);
- числовые массивы;
- строковые массивы;
- непосредственно байты
Когда команды VERIFY, LOAD, и MERGE осуществляют поиск данных
на ленте, они выводят на экран все считанные ими с ленты имена с
укажанием типа в виде:
" PROGRAM:", " NAMBER ARRAY:", " CHARACTER ARRAY:",
" BYTES:"
Если имя - пустая строка, эти команды берут первый встретив-
шийся файл с указанным типом.
Команда SAVE служит для записи информации на ленту под задан-
ным именем, сообщение об ошибке F выдается если вместо имени
указана пустая строка или число символов в имени 11 и более, SAVE
всегда выдает сообщение.
" START TAPE, THEN PRESS ANY KEY"
( "запусти магнитофон инажми любую клавишу"),
и ждет нажатия, после всего записывает данные на ленту.
1. Программа и переменные,
SAVE NAME LINE LINE NUMBER
Записывает программу на ленту таким образом, что последующая
команда LOAD автоматически вставляет в программу
GOTO LINE NUMBER выполнять .
2. Байты.
SAVE NAME CODE START, LENGHT
Записывает на ленту "LENGHT" байт, начиная с адреса START
SAVE NAME SCREEN$
эквивалентно SAVE NAME CODE 16384,6912
и записывает один телевизионный экран.
3. Массивы
SAVE NAME DATA LETTER () или
SAVE NAME DATA LETTER()
записывают числовой или строковый массив (требование $ не
относится к "NAME").
Команда VERIFY проверяет (сравнивает) информацию в памяти и
на ленте, может выдавать сообщение
"R TAPE LOADING ERROR",
1. Программа и переменные,
VERIFY NAME
2. Байты,
VERIFY NAME CODE START LENGTH
Если данных в файле "NAME" более чем указано в
"LENGHT" то выдается сообщение об ошибке "R"
VERIFY NAME CODE START
Здесь осуществляется сравнение данных на ленте с данными в памя-
ти, начиная с адреса, с которого записывается на ленту первым
байт данных.
VERIFY NAME SCREEN$
эквивалентно VERIFY NAME CODE 16384,6912
Однако это будет проверка уже проверенного файла.
3. Массивы.
VERIFY NAME DATA LETTER()
VERIFY NAME DATA LETTER$()
Команда LOAD загружает новые данные с ленты, стирая старые
данные в памяти.
1. Программа и переменные.
Команда - LOAD NAME
может выдавать сообщение "4 OUT OF MEMORY", если нет места для
новой программы. В этом случае старая программа не уничтожается
2. Байты.
Команда - LOAD NAME CODE START, LENGTH
Если данных в файле "NAME" больше, чем указано в "LENGTH", то
выдается сообщение R.
Команда - LOAD NAME CODE START
производит загрузку данных из "NAME" в память, начиная с адреса
"START"
Команда - LOAD NAME CODE
загружает прграмму по адресу, с которого записывались данные на
ленту в файл "NAME".
3. Массивы
Команда - LOAD NAME DATE LETTER() или
LOAD NAME DATE LETTER$()
уничтожает в памяти массив с именем "LETTER" или "LETTER$",
формирует новый массив и переписывает туда данные из файла
"NAME", может выдать сообщение "4 OUT OF MEMORY" при нехват-
ке памяти под массив, в этом случае старый массив не уничтожается.
Команда MERGE загружает новые данные с ленты, не уничтожая старые.
1. Программа и переменные.
Команда - MERGE NAME
дописывает программу "NAME" к некоторой программе, находящейся
в памяти, может выдать сообщение
"4 OUT OF MEMORY"
2. Байты.
не поддерживается.
3. Массивы.
не поддерживается.
Пример: записать на ленту информайию о 21-м определенном
пользователем символе.
SAVE "CHESS" CODE USR "A", 21*8
Обратная загрузка
LOAD "CHESS" CODE
LOAD "CHESS" CODE USR "A"
Глава 21
У С Т Р О Й С Т В О П Е Ч А Т И
Краткое содержание: LPRINT, LLIST, COPY.
Эта глава описывает операторы бейсика, необходимые для работы
с принтером ZX SPECTRUM.
Два оператора LPRINT и LLIST подобны операторам PRINT и LIST
но с той разницей, что они работают не с телевизором, а с
принтером, попробуйте для примера выполнить следующую программу:
10 LPRINT ' " THIS PROGRAM." '
20 LLIST
30 LPRINT ' " PRINTS OUT THE CHARACTER SET." '
40 FOR N=32 TO 255
50 LPRINT CHR$ N
60 NEXT N
Оператор COPY позволяет распечатать экран телевизора,
например по LIST текст программы будет выведен на экран, а затем
по COPY его можно распечатать на принтере.
Вы всегда можете прекратить вывод на печать выдав BREAK (CAPS
SHIFT и SPASE).
Если вы задали операторы управления принтером без подключения
реального устройства, то вывода просто не будет и выполнение
программы продолжится до следующего оператора.
Теперь ппробуйте изменятить следующую программу:
10 FOR N=31 TO 0 STEP -1
20 PRINT AT 31-N,N; CHR$(CODE"0"+N);
30 NEXT N
Вы получите последовательность символов расположенных по
диагонали экрана, начиная с правого верхнего угла, теперь заменим
в строке 20 PRINT AT 31-N,N' на 'TAB N' программа будет работать
также как и прежде, теперь заменим в строке 20 PRINT на LPRINT.
заметим, что развертки по диагонали не получится, а заменив
теперь 'TAB N' на 'AT 31-N,N' и сохранив LPRINT получим по одному
символу на строку, что и требовалось получить.
Вообще при печати перевод строки осцществляется в следующих
случаях:
а) при заполнении буфера строки;
б) после LPRINT, если это не конец оператора и в нем
встретилась запятая или точка с запятой;
в) если запятая, апостроф или TAB требуют новой строки;
г) при окончании программы, если остались невыведенные данные.
|
|