Код:
Все макросы при успехе очищают бит C, при ошибке устанавливают.
В последнем случае в байте @#52 может вернуться код ошибки.
Открытие существующего файла
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.LOOKUP AREA,CHAN,DBLK
AREA - 3-словный блок для хранения параметров EMT
CHAN - номер канала
DBLK - четырехсловный блок имени файла:
DBLK: .RAD50 /DK / ;ИМЯ УСТРОЙСТВА
.RAD50 /FILNAM/ ;ИМЯ ФАЙЛА
.RAD50 /EXT/ ;РАСШИРЕНИЕ
При успехе R0 вернется длина файла в блоках.
Таким способом можно открыть и устройство, в этом случае при успехе в R0
будет не длина, а 0. У макроса есть еще аргумент, но он интересен только
для лент.
Создание файла
~~~~~~~~~~~~~~
.ENTER AREA,CHAN,DBLK,LEN
AREA - 4-словный блок
LEN - запрашиваемая длина в блоках или
0 - половина максимального пустого места
-1 - максимальное пустое место
В R0 возвращается максимальный размер файла. Реальный размер определяется
или последним записанным блоком или через .CLOSZ.
Закрытие файла
~~~~~~~~~~~~~~
.PURGE CHAN
Закрывает файл. Если был открыт по .ENTER, файл не сохраняется.
.CLOSE CHAN
Закрывает файл, размер определяется последним записанным блоком (для .ENTER).
.CLOSZ AREA,CHAN,SIZE
Закрывает и устанавливает размер (для .ENTER) или работает
как .CLOSE (.LOOKUP).
AREA - 2-словный блок
SIZE - требуемый размер файла (в пределах выделенного через .ENTER)
Чтение файла
~~~~~~~~~~~~
.READ AREA,CHAN,BUF,WCNT,BLK
.READC AREA,CHAN,BUF,WCNT,CRTN,BLK
.READW AREA,CHAN,BUF,WCNT,BLK
AREA - 5-словный блок
BUF - адрес буфера в программе
WCNT - количество слов
BLK - номер блока
.READ запускает операцию чтения и продолжает выполнение. Дождаться завершения
можно далее в любом месте макросом .WAIT.
.READC аналогично .READ, по завершению вызывается подпрограмма CRTN. При входе
в нее R0 содержит слово состояния канала (CSW), R1 содержит номер канала.
Эти регистры можно портить в подпрограмме, другие нужно сохранять.
Биты CSW: 000001 - ошибка, 020000 - конейц файла.
.READW аналогично .READ, только ждет окончания операции.
Особое внимание на буфер - I/O выполняется прямо с ним, портить его пока
операция не завершилась нельзя.
Запись в файл
~~~~~~~~~~~~~
.WRITE AREA,CHAN,BUF,WCNT,BLK
.WRITC AREA,CHAN,BUF,WCNT,CRTN,BLK
.WRITW AREA,CHAN,BUF,WCNT,BLK
Записывает в файл. Остальное аналогично .READ/.READC/.READW.
При записи некратного 256 количества слов на блочное устройство, остаток последнего блока зануляется.
Ожидание завершения операции
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.WAIT CHAN
Ждет завершения операции на канале.