[an error occurred while processing this directive]
─PE ─CE|Вызовы Операционной Системы| Машинные подпрограммы должны вызывать ОС в точках, расположенных в адресах с &FF00 до &FFFF. От этих точек управление передается дальше к различным подпрограммам ОС, расположение которых может меняться от весрии к версии. Адреса некоторых подпрограмм ОС хранятся в области с &200 до &2FF. Таким образом пользователь может перехватывать некоторые вызовы ОС. Так, подпрограмма "Вывод символа в аккумуляторе на экран" во всех версиях ОС вызывается по адресу &FFEE. Эта подрограмма может быть также вызвана по вектору &20E,&20F. Содержимое вектора может изменяться в зависимости от версии ОС. Параметры подпрограмм ОС передаются в регистрах A, X и Y 6502, нулевой странице или в блоках параметров. Все подпрограммы вызываются командой JSR с очищенным десятичным флагом слова состояния 6502. ─PE30 │..........*....*.....*...*.........................................< ----------------------------------------------------------------- Вызов Вектор Функция Имя адр. Имя адр. ----------------------------------------------------------------- UPTV 222 Драйвер принтера. FSCV 21E Вызов файловой системы (ФС). OSFIND FFCE FINDV 21C Открыть или закрыть файл. OSGBPB FFD1 GBPBV 21A Записать или считать блок памяти в файл. OSBPUT FFD4 BPUTV 218 Записать байт в файл из A. OSBGET FFD7 BGETV 216 Считать байт из файла в A. OSARGS FFDA ARGSV 214 Прочитать или записать информацию о файле. OSFILE FFDD FILEV 212 Прочитать или записать файл. OSRDCH FFE0 RDCHV 210 Прочитать символ с клавиатуры в A OSASCI FFE3 - - Вывести символ из A на экран плюс LF (&0A) если (A)=&0D. OSNEWL FFE7 - - Ввести LF, CR (&0A, &0D) на экран. OSWRCH FFEE WRCHV 20E Вывести символ из A на экран. OSWORD FFF1 WORDV 20C Набор различных вызовов ОС, использующих блок памяти для передачи параметров. OSBYTE FFF4 BYTEV 20A Набор различных вызовов ОС, использующих регистры для передачи параметров. OSCLI FFF7 CLIV 208 Интерпретатор командной строки. IRQ2V 206 Вектор неопознанного прерывания. IRQ1V 204 Вектор IRQ. BRKV 202 Вектор системного сброса. USERV 200 Зарезервирован. ----------------------------------------------------------------- ─PE │.......*......*..............*.............*.......................< ─CE/Файлы/ Файлы являются последовательностями байтов. Их можно использовать целиком (используя OSFILE), по блокам (используя OSGPB) или по байтам (используя OSBGET и OSBPUT). Каждый файл обладает следующими атрибутами: |Адрес загрузки| - адрес памяти, с которого файл грузится по умолчанию. Если необходимо, во время загрузки может быть задан другой адрес. |Адрес выполнения| имеет смысл только для файлов, содержащих программы в машинных кодах. |Длина| - количество байт в файле. Оно может быть равно нулю. |Указатель| - указывает на следующий обрабатываемый байт файла. Значение "Указателя" может быть прочитано или изменено (с помощью OSARGS). Указатель автоматически инкрементируется после вызовов OSBGET и OSBPUT. /OSFIND/ Открывает файл для чтения и (или) записи. Аккумулятор содержит тип операции. A=0 Закрыть файл или файлы A=&40 Открыть файл для чтения A=&80 Открыть файл для записи A=&C0 Открыть файл для чтения и записи Если A=&40,&80 или &C0, то Y (старший байт) и X (младший байт) должны содержать адрес области памяти, содержащей имя файла, заканчивающееся CR (&0D). На выходе Y содержит |номер| файла для дальнешего доступа к нему. Если Y=0, ОС не смогла открыть файл. Если A=0 то файл (или файлы) должен быть закрыт. При Y=0 закрываются все файлы, в противном случае закрывается файл с соответствующим номером. На выходе C,N,V и Z неопределены и D=0. /OSBPUT/ Записывает (помещает) байт из A в предварительно открытый файл. На входе Y должен содержать номер файла сообщенный OSFIND. На выходе A,X и Y сохранены, N,V и Z неопределены и D=0. /OSBGET/ Читает (берет) байт из файла в A. Файл должен быть предварительно открыт с использованием OSFIND и номер файла должен находится в Y. На выходе C=1 означает наличие ошибки а в A находится код ошибки. A=&FE означает достижение конца файла. X и Y сохраняются, N,V и Z неопределены и D=0. /OSGBPB/ Читает или записывает группу байт. Кроме того, читает служебную информацию о файлах и структуре диска. На входе X и Y указывают блок параметров. A задает тип операции. ─PE22 Блок параметров имеет следующий формат: │.........*.......*.......*.......*.......*.......*.......*.< --------------------------------------------------------- 00 Номер файла сообщенный OSFIND --------------------------------------------------------- 01 Адрес данных 02 (начиная с младшего байта) 03 04 --------------------------------------------------------- 05 Длина группы байт 06 (начиная с младшего байта) 07 08 --------------------------------------------------------- 09 Указатель позиции в файле, используемый 0A во время операции 0B (начиная с младшего байта) 0C --------------------------------------------------------- │.........*.......*.......*.......*.......*.......*.......*.........< Особенно важное значение эта подпрограмма имеет при работе в локальной сети, где значительное время тратится на передачу каждого отдельного массива данных. Если в локальной сети передавать данные через вызовы OSBPUT и OSBGET, очень много времени будет тратится на захват сети для передачи каждого байта; один только вызов OSGBPB может заменить вызов OSARGS и множество вызовов OSBGET или OSBPUT. Перед вызовом OSGBPB аккумулятор может иметь следующие значения: А=1 Запись группы байт в файл с использованием нового значения указателя. А=2 Запись группы байт в файл игнорируя новое значение указателя. А=3 Чтение группы байт из файла с использованием нового значения указателя. А=4 Чтение группы байт из файла игнорируя новое значение указателя. А=5 Чтение имени диска. Возвращается: Байт с длиной имени диска. Имя диска в ASCII кодах. А=6 Чтение текущей директории и устройства. Байт длины имени устройства. Имя устройства. Байт длины имени директории. Имя директории. В ДФС именем устройства является номер драйва; в локальной сети имени устройства нет, поэтому длина имени устройства равна нулю. А=7 Чтение текущей библиотеки. Параметры и действие аналогично А=6. А=8 Чтение имен из текущей директории. При этом 00-й байт в блоке параметров не использыуется, а указатель позиции после выполнения вызова устанавливается на начало следующего имени. На входе длина группы байт интерпретируется как количество считываемых имен; для первого вызова указатель позиции должен быть равен нулю. Данные возвращаются в формате: Длина 1-го имени 1-е имя Длина 2-го имени 2-е имя .... Вызванная операция не может быть закончена, если достигнут конец файла или в директории больше нет имен. В этом случае, флаг С на выходе равен "1". Если операция не была завершена, число байт или количество имен, котрые не были считаны записывается в блок параметров в поле 'длина группы байт'. Поле адреса всегда указывает на следующий полсле последнего адрес, также как и указатель позиции в файле. На выходе X, Y и А сохранены. N, V и Z неопределены. С устновлен, если операция не была завершена. /OSARGS/ Эта подпрограмма позволяет читать и писать служебную информацию о файлах и файловой системе. На входе X должен указывать на блок из четырех байт нулевой страницы, а Y содержать номер открытого файла. Если Y не равен нулю, A определяет операцию с файлом: A=0 чтение указателя файла A=1 запись указателя файла A=2 чтение длины файла A=&FF запись изменений в файле на диск Если Y=0, содержимое A определяет следующие операции: A=0 в A возвращается тип файловой системы: 0 нет файловой системы 1 кассетная ФС 1200 бод (зарезервировано) 2 кассетная ФС 300 бод (зарезервировано) 3 (зарезервировано) 4 ДФС 5 Локальная сеть (зарезервировано) 6 (зарезервировано) A=1 Возвращает адрес последней командной строки A=&FF запись изменений всех открытых файлов на диск. На выходе X и Y сохранены, C,N,V и Z неопрделены и D=0. /OSFILE/ Запись или чтение файла целиком. На входе A содержит тип операции. X и Y указывают на 18-ти байтный длок параметров, располагающийся в любой области памяти. X содержит малдаший байт адреса, а Y - старший. Ниже показана структура блока параметров: │......*.......*....................................................< ─PE26 --------------------------------------------------------- 00 Адрес начала имени файла, которое должно оканчиваться 01 &0D --------------------------------------------------------- 02 Адрес загрузки 03 04 05 --------------------------------------------------------- 06 Адрес запуска 07 08 09 --------------------------------------------------------- 0A Адрес начала для операций записи 0B или длина для операций чтения 0C 0D --------------------------------------------------------- 0E Адрес конца данных. 0F 10 11 --------------------------------------------------------- Следующая таблица показывает функции, предоставляемые OSFILE с учетом содержимого A: A=0 Записать область память как файл. Так же записываются атрибуты файла в каталог. A=1 Запись информации о файле в каталог. A=2 Запись только адреса загрузки файла. A=3 Запись только адреса запуска файла. A=4 Запись только атрибутов файла. A=5 Чтение информации о файле. В A помещается тип файла A=6 Удалить файл. A=&FF Загрузить файл в память и считать информацию о файле. При загрузке файла байт XY+6 обозначает, каким адресом воспользоваться для определения начала загрузки. Если указанный байт равен нулю, то в качестве начального адреса берется адрес, укзанный в блоке параметров. В противном случае выбирается стандартный адрес загрузки файла из каталога. Атрибуты файла хранятся в одном байте, биты которого имеют следующее значение: Бит Значение 0 не читается Вами 1 не пишется Вами 2 не запускается Вами 3 не стирается Вами 4 не читается другими 5 не пишется другими 6 не запускается другими 7 не стирается другими В качестве типов файла имеются следующие варианты: 0 ничего не найдено 1 файл найден 2 директория найдена В случае возникновения ошибки в процессе выполнения OSFILE происходит прерывание по BRK. На выходе X и Y сохранены, C,N,V и Z неопределны и D=0. /OSFSC/ Разнообразные операции файловой системы. Аккумулятор на входе имеет следующие значения: А=0 Зарезервировано А=1 Контроль EOF (конец файла). На входе X содержит указатель проверяемого файла. На выходе, X=&FF если конец файла достигнут, X=0 в противном случае. А=2 Выполнение команды '*/'. ДФС попытается запустить файл, чье имя расположено после символа '/'. Это дает возможность запускать файлы типа "L.FORM80". Если просто ввести: "*L.FORM80" это будет воспринято ОС как "*LOAD FORM80". Поэтому в данном случае будет правильно: "*/L.FORM80", что эквивалентно "*RUN L.FORM80" (запустить файл FORM80 из директории L). А=3 Если была введена команда, которую ОС не может распознать, она по цепочке передается всем загруженным резидентным модулям, включая и ДФС. Если команда и после этого никем не опознана, ДФС пытается запустить файл с таким именем из текущей системной библиотеки. Если файл не найден, ДФС выдает сообщение об ошибке: "Bad Command". На входе X и Y указывают на начало команды. А=4 Выполнение команды *RUN. Загружает и выполняет файл, имя которого указано в X и Y. А=5 Выполнение команды *CAT. Выдает каталог. X и Y указывают на первый байт после команды, т.к. там может находится имя подкаталога. А=6 Зарезервировано А=7 Запрос о максимально- и минимально возможных значениях указателей файлов. А=8 Зарезервировано На выходе значения всех регистров неопределены. /OSRDCH/ Эта подпрограмма читает с текущего устройства ввода (обычно с клавиатуры) символ в A. На выходе C=0 указывает на удачное завершение операции. C=1 указывает на наличие ошибки в процессе чтения символа, при этом в A помещается тип ошибки. C=1 и A=&1B означает наличие события выхода (например в слдествии нажатия РЕД), которое должно быть обработано пользователем вызовом OSBYTE с A=&7E; Бейсик делает это автоматически. X и Y сохранены, N,V и Z неопределены и D=0. /OSASCI/ Эта подпрограмма производит вывод символа на текущее устройство вывода используя OSWRCH. Однако, если A=&0D, вместо OSWRCH вызывается OSNEWL. OSASCI имеет точку входа в &FFE3: │....*......*....*.........*........*...............................< ─PE8 FFE3 C9 0D OSASCI CMP #&0D FFE5 D0 07 BNE OSWRCH FFE7 A9 0A OSNEWL LDA #&0A FFE9 20 EEFF JSR OSWRCH FFEC A9 0D LDA #&0D FFEE 6C 0E02 OSWRCH JMP(WRCHV) На выходе A,X и Y сохранены, C,N,V и Z неопределены и D=0. /OSNEWL/ Посылает символы LF и CR (&0A, &0D) текущему устройству вывода. На выходе X и Y сохранены, C,N,V и Z неопределены и D=0. /OSWRCH/ Эта подпрограмма посылает символ из A текущему устройству вывода. На выходе A,X и Y сохранены, C,N,V и Z неопределены и D=0. Вся печать символов из Бейсика, ОС и любой другой программы должна идти через этот вызов. Следовательно, Вам будет легко перехватить вывод символов поместив по вектору WRCHV (&20E) адрес своей подпрограммы. Однако Вы должны помнить, что некоторые символы имеют специфическое значение. Например символ &1C и следующие за ним четыре байта определяют границы текстового окна. Смотрите описание VDU для получения подробной информации об управляющих символах. /OSWORD/ Вход OSWORD объединяет разнообразные подпрограммы, требующие значительно большее количество параметров, чем можно передать через регистры 6502. Как следствие OSWORD использует блок параметров располагаемый в памяти компьютера. Адрес блока параметров сообщается в регистрах X (младший байт) и Y (старший байт). Содержимое A определяет выбор конкретной подпрограммы. Таблица ниже содержит список подпрограмм OSWORD. Некоторые подпрограммы помечены символом "*", это означает, что они зарезервированы для дальнейших модификаций ПЭВМ АГАТ, а на серийной модели недоступны. ─PE17 --------------------------------------------------------- A= Функция --------------------------------------------------------- 0 Чтение строки из текущего устройства ввода 1 * Чтение часов 2 * Установка часов 3 * Чтение внутреннего таймера 4 * Установка внутреннего таймера 5 * Чтение байта из памяти основного процессора 6 * Запись байта в паять основного процессора 7 * Генерация звукового сигнала 8 * Определение формы звукового сигнала 9 Чтение цвета точки в позиции экрана X,Y A Чтение матрицы заданного символа B * Чтение палитры --------------------------------------------------------- /OSWORD с A=0/ Эта подпрограмма читает сиволы с текущего устройства ввода и помещает их в укзанную область памяти. Во время ввода символ УДАЛИТЬ (ASCII 127) удаляет последний введенный символ, а УПР+U (ASCII 21) удаляет из памяти все считанные до него символы. Выход из подпрограммы происходит после ввода символа ВВОД (ASCII &0D) или выполнения условия выхода (ASCII &1B). ─PE13 Блок парметров состоит из 5-ти байт: --------------------------------------------------------- 00 Адрес буфера вводимой строки 01 02 Максимальная длина строки 03 Минимальное допустимое ASCII значение 04 Максимальное допустимуе ASCII значение --------------------------------------------------------- Сиволы вводятся, если они находятся в диапазоне, заданном XY+3 и XY+4. На выходе C=0 что был введен символ ВВОД (CR; ASCII код 13 или &0D). Если C=1, это означает наличие состяния выхода. Y содержит длину введенной строки включая CR, если C=0. /OSWORD с A=9/ чтение пиксела. Эта подпрограмма позволяет программисту на ассемблере читать состояние любой точки графического экрана. На входе X и Y указывают на блок из 5-ти байт: ─PE7 XY X координата (младший байт) XY+1 X координата (старший байт) XY+2 Y координата (младший байт) XY+3 Y координата (старший байт) На выходе XY+4 содержит цвет указанной точки или &FF, если точка находится за пределами экрана. X и Y неопределены. /OSWORD с A=&0A/ чтение матрицы символа. В графических режимах 3 и 4 символы имеют размеры 6х8 точек. Матрица каждого символа занимает в памяти компьютера 8 байт, по одному байту на каждый ряд. Эта подпрогамма позволяет поместить матрицу символа в память начиная с адреса, заданного в X и Y. ─PE11 На выходе блок параметров имеет следующую структуру: XY Код символа XY+1 Верхний ряд матрицы XY+2 Второй ряд матрицы . . . XY+8 Нижний ряд матрицы[an error occurred while processing this directive]