ГЛАВА 14
НЕПОСРЕДСТВЕННОЕ ЧТЕНИЕ И ЗАПИСЬ СЕКТОРОВ
В дополнение к трем типам файлов данных TR DOS поддерживает не-
посредственное чтение и запись секторов файла.
КОМАНДА ЧТЕНИЯ - РЕЕК
Команда РЕЕК позволяет читать любую часть файла с диска в ОЗУ. За
одну операцию можно прочесть только один сектор и поместить его в любое
место ОЗУ. Синтаксис команды следующий.
РЕЕК "имя файла" адрес буфера, номер сектора т.е.:
PEEK "RECORD" 30023,5
В этом примере сектор 5 файла RECORD считывается в ОЗУ с адреса
30023.
КОМАНДА ЗАПИСИ - РОКЕ
Эта команда позволяет записать сектор данных из ОЗУ в любое место
файла на диске. Синтаксис аналогичен команде РЕЕК:
РОКЕ "имя файла" адрес буфера, номер сектора, т.е.:
POKE "B:OLD" 30024,10
В этом примере данные размером в один сектор, начиная с адреса ОЗУ
30024, записываются в сектор 10 файла OLD в дисководе В. Так как эта ко-
манда изменяет содержимое файла на диске, пользоваться ею следует осто-
рожно.
ГЛАВА 15
ПРОГРАММИРОВАНИЕ В МАШИННЫХ КОДАХ
Включение процедур TR DOS в программу в машинных кодах имеет
строгую и однозначную последовательность.
Программа должна содержать три элемента:
• 1. Эквивалент команды BASIC'a TR DOS в машинных кодах.
• 2. Процедуру в машинных кодах, выполняющую пункт 1.
• 3. Процедуру в машинных кодах, восстанавливающую
первоначальное состояние системы перед выполнением команды.
Используемые адреса зависят от программы в целом. В данном приме-
ре адреса процедур для записи (SAVE) и чтения (LOAD) будут соответствен-
но 49000 и 49599, а для команд, и их вызывающих - 50000. Таким образом
пункт 1 будет в адресах 49000 или 49500, а пункты 2 и 3 - в 50000.
Пример:
АДРЕС |
код |
BASIC |
ПРИМЕЧАНИЕ |
49000 |
234 |
REM |
см. коды в руководстве |
49001 |
58 |
|
по SPECTRUM, приложение |
49002 |
248 |
SAVE |
|
4900г3 |
34 |
" |
|
49004 |
69 |
Б |
|
49005 |
120 |
X |
|
49006 |
97 |
А |
имя Файла - "EXAMPLE" |
49007 |
109 |
М |
|
49008 |
112 |
Р |
|
49009 |
108 |
L |
|
49010 |
101 |
Е |
|
49011. |
34 |
» |
|
49012 |
13 |
ENTER |
заканчиваем всегда (ВК) |
Команды для чтения, начинающиеся с адреса 49500, в точности такие
же, за исключением адреса 49502, который содержит 239 (LOAD) вместо 23Г
(SAVE). Эти две процедуры могут находиться в любом месте памяти, но г
инициирующей программе, расположенной с адреса 50000, величины в ад
ресах 50007-50008 (адрес процедуры записи) и 50025-50026 (адрес процеду
ры чтения) должны соответствовать их положениям. Для того, чтобь
переместить инициирующую программу, ее необходимо перетранслировать
По этой причине приводится только мнемоника команд Z80.
CHADD EQO 23645 АДРЕС СИСТЕМНОЙ ПЕРЕМЕННОЙ CHADD
ORG ХХХХХ ХХХХХ - АДРЕС ЭТОЙ ПРОГРАММЫ
LD HL, (CHADD) ВРЕМЕННО СОХРАНИМ CHADD
LD (TEMP), HL
LD HL, 49000 АДРЕС ПРОЦЕДУРЫ ЗАПИСИ
LD (CHADD), HL (CHADD) УКАЗЫВАЕТ НА НАШУ ПРОЦЕДУРУ
CALL 15363 ВЫЗЫВАЕМ TR DOS ЧЕРЕЗ CHADD
JP BACK ВОЗВРАЩАЕМСЯ ТУДА, ОТКУДА ВЫЗВАЛИ
LD HL, (CHADD) ПРОЦЕДУРА ПОВТОРЯЕТ ПРЕДЫДУЩУЮ, ЗА
LD (TEMP), HL ИСКЛЮЧЕНИЕМ АДРЕСА ПРОЦЕДУРЫ ЧТЕНИЯ
LD HL, 49500
LD (CHADD), HL CHADD УКАЗЫВАЕТ НА НАШУ ПРОЦЕДУРУ
CALL 15363 ВЫЗЫВАЕМ TR DOS ЧЕРЕЗ CHADD
BACK LD HL, (TEMP) ВОССТАНОВИМ ПЕРЕМЕННУЮ CHADD
LD (CHADD), HL
RET ВОЗВРАТ В MAIN-PROGRAM
TEMP БУФЕР ДЛЯ ВРЕМЕННОГО ХРАНЕНИЯ
Вся эта программа, включающая процедуры записи, чтения и возврата в
основную программу, занимает всего 47 байтов.