Valerij Kozhevnikoff (2:5020/4040)
Гость
[2/3] немного инфы по теневику
FromNet: NET_Moscow_Russia_(245_02/09/2005) (commserv.rpb.ru)
Здравствуй, All!
82h, установка переменных монитора
Через эту подпрограмму программист получает доступ к
различным переменным монитора. Это позволяет изменять
некоторые режимы работы (это свойство используется в
проффесиональном расширении), изменять цвета меню и экранов
26
монитора, а также предоставляет возможность доступа к
переременным дисковой BIOS.
Перед вызовом этой подпрограммы в регистр DE
микропроцессора должен быть помещён код типа переменных (см.
ниже), а в регистр BC -- смещение к переменной. Бит CY
задаёт режим доступа, если он установлен -- запись
переменной, если сброшен -- чтение. Значение переменной
передаётся через аккумулятор.
Если необходимо изменить отдельный бит, то сначала нужно
прочитать значение переменной, изменить бит, а затем
записать изменённое значение.
Hиже приведены назначения некоторых переменных,
представляющих интерес для программистов. После указания
кода смещения приводится тип переменной (db -- байтовая; dw
количество байт).
DE=00, системные переменные монитора
BC=+12 (db)
отдельные биты этого байта позволяют управлять выводом
значений регистров на экран монитора. Запись 1
запрещает вывод:
бит, регистр
7, PC
6, SP
5, IX
4, IY
3, HL (HL')
2, DE (DE')
1, BC (BC')
0, AF (AF')
BC=+21 (db)
отдельные биты этого байта позволяют управлять выводом
на принтер.
бит, значение когда сброшен, значение когда установлен
7, данные выводятся в прямом виде, данные выводятся в
инверсном виде;
3, два стоповых бита, один стоповый бит;
2, 8 бит в байте данных, 7 бит в байте данных
1, скорость передачи 9600 бод, скорость передачи 1200
бод;
0, интерфейс Centronics, интерфейс RS232.
DE=02, переменные режимов, цвета
BC=+0 (db)
константа антидребезговой задержки монитора.
BC=+1 (db)
константа задержки перед автоповтором.
BC=+2 (db)
константа задержки между автоповторами.
BC=+5 (db)
цвет бордюра, устанавливаемый монитором, при подаче
звукового сигнала ошибки.
BC=+6 (db)
код символа "возврата каретки" для принтера.
27
BC=+7 (db)
код символа "перевода строки" для принтера.
BC=+8 (db)
код символа "перевода формата" для принтера.
BC=+9 (dw)
код, определяющий скорость передачи для
последовательного интерфейса (для 9600 бод -- 0bh).
BC=+0bh (dw)
код, определяющий скорость передачи для
последовательного интерфейса (для 1200 бод -- 6ah).
BC=+0dh (ds 11)
коды, служащие для перевода принтера в графический
режим (непосредственно за ними будет выдано 768 байт
графической информации при печати экрана из монитора).
Байт +0dh хранит количество управляющих кодов.
BC=+15h (ds 4)
коды, служащие для перевода принтера в текстовый режим,
завершающие печать экрана. Байт +015h хранит количество
управляющих кодов.
BC=+1dh (db)
число строк на странице при печати на принтере.
BC=+1eh (db)
число символов в строке при печати на принтере.
DE=04, переменные дисковой BIOS
BC=+4 (ds 4)
байты хранят максимальное число секторов на дорожке при
размере сектора 128, 256, 512 и 1024 байта
соответстевенно.
BC=+0ah (db)
номер текущего дисковода: 0 -- дисковод "a", 1 -- "b".
BC=+0bh (db)
число попыток считывания при ошибке, начальное значение
3.
BC=+0ch (ds 2)
коды, определяющие тип дисководов (спецификации) "a" и
"b" соответственно.
BC=+10h (ds 2)
коды, определяющие тип дискеты в дисководах "a" и "b"
соответственно.
BC=+18h (ds 2)
коды, time-out для дисководов "a" и "b" соответственно.
BC=+1dh (db)
код ошибки дискового интерпретатора.
83h, очистка экрана пользователя
Для внутреннего использования в мониторе была написана
программа оконного интерфейса. Hесмотря на более чем
скромные возможности она может оказаться полезной при
написании своих собственных программ. Каждое окно
описывается определённым дескриптором -- блоком состоящим из
13 байт. Местоположение окна на экране может выбираться
произвольно, можно также определить несколько окон
одновременно, адрес дескриптора текущего окна должен быть
28
помещён в регистр IX микропроцессора. Перекрывающиеся окна
не накладываются, а как бы "просвечивают" сквозь друг друга.
Прежде всего окно необходимо описать, задав в дескрипторе
начальные координаты окна и его размер. Все координаты
отсчитываются от верхнего левого угла окна, либо экрана.
Затем окно необходимо очистить функцией 83h, которая
инициализирует некоторые переменные в дескрипторе.
Hазначение байт в дескрипторе окна приведено ниже.
+0, +1
Координаты курсора в окне (Y, X) -- первоначально
устанавливаются в ноль программой очистки окна, затем
могут модифицироваться пользователем.
+2, +3
Координаты начала окна (Y, X). Эти координаты
измеряются в стандартных знакоместах размером 8*8
точек.
+4, +5
Размер окна в стандартных символах символах (8*8
точек), первое число размер по вертикали, второе -- по
горизонтали.
+6
Байт хранит цветовые атрибуты окна.
+7
Системные атрибуты окна, задаются отдельными битами.
бит, назначение
5, запрет вывода,, все выводимые символы игнорируются;
4, произвольный формат,, по достижению правого края окна
будут автоматически выполнены команды перевод строки и
возврат каретки (см. 84h, вывод символа в экран
пользователя);
3, выполнять автоматический возврат каретки при приходе
символа перевода строки;
2, выполнять автоматический переход строки при приходе
символа возврат каретки;
1, изменять атрибуды при выводе каждого символа (в
противном случае атрибуты устанавливаются только во
время очистки окна);
0, не выводить символ курсора.
+8, +9
Служебные байты.
+10
Размер символов в точках. Монитором поддерживается два
размера символов в 6 и в 8 точек.
+11
Размер окна в символах. Для символов в 8 точек этот
размер совпадает с шириной окна. Если размер символа 6
точек, то перед инициализацией (очисткой) необходимо
рассчитать размер окна и поместить в этот байт.
+12
Код символа курсора. Код с этим символом будет
выводится в месте отмечая положение курсора, если
сброшен 0 бит в системных атрибутах окна.
29
84h, вывод символа в экран пользователя
Код выводимого символа должен находиться в аккумуляторе,
а дескриптор используемого окна в регистре IX. Символы из
набора ASSCI (коды в диапазоне 32...127) непосредственно
печатаются в определённом окне экрана. Возможно
использование управляющих символов.
1
Установка атрибутов. Hепосредственно за управляющим
кодом должен следовать вывод в окно байта атрибутов,
текущие атрибуты окна запоминаются программой вывода в
специальной ячейке памяти.
2
Восстановление запомненных атрибутов.
7
Звонок. Программа отрабатывает короткий звуковой
сигнал. Бордюр получает при этом цвет, установленный в
специальной ячейке монитора (см. Переменные режимов,
цвета).
10
Перевод строки. Если курсор находится в последней
строке, то происходит "свиток".
13
Перевод каретки. Перемещение курсора в крайнюю левую
позицию строки в окне. Если установлен соответствующий
бит в дескрипторе окна, то совместно с возвратом
каретки вызывается и программа обслуживания символа
перевода строки.
27
Позиционирование курсора внутри окна. Hепосредственно
за управляющим кодом должны быть выведены два байта.
Первый определяет позицию курсора в строке, второй
номер строки. Отсчет ведётся от левого верхнего угла
окна начиная с нуля.
Приложение
Теневой сервис-монитор обладает большой и сложной
системой команд, а следовательно достаточно мощным
синтаксическим анализатором. В процессе разбора команд и их
исполнения могут быть обнаружены неточности и ошибки. В этом
случае монитор информирует пользователя и в большинстве
случаев предлагает выправить ситуацию. Приведённый ниже
список сообщений монитора поможет лучше разобраться в
причинах ошибки и исправить её.
Analyser error
Ошибка анализатора (возникает только в профессиональном
расширении). Во время работы программы анализатора
возникла ошибка связанная с переполненем стека,
делением на ноль или что-то другое. Вслед за сообщением
Analyser error выдаётся имя слова в котором возникла
ошибка и, возможно, содержимое стека. Конкретный вид
ошибки высвечивается в статусной строке.
30
Bad address breakpoint
Задан неверный адрес ловушки (точки останова)
программы. Для "физической" ловушки адрес не может быть
меньше 16384.
Bad disk
Ошибка чтения дискеты. Возникает, например, когда
сделана попытка посмотреть каталог неформатированной
дискеты.
Bad opcode
Ошибочный код операции. Во время трассировки программы
встретился код, который несоответствует ни одной
известной инструкции микропроцессора Z80.
Bad operand
Ошибочное значение операнда. Величина операнда команды
SLOW не может превышать 255.
Bad string
Ошибка в задании строкового аргумета (стринга), обычно
непарное число кавычек.
Blocks identifical
Сравниваемые (командой CHECK ) блоки памяти идентичны.
Breakpoint ###
При выполнении или трассировке программы встретилась
ловушка с номером ###.
Breakpoint undefined
Ловушка не определена. Ошибка возникает при попытке
включить (или выключить) ловушку, которая не была ранее
задана.
Command abandoned
Выполнение команды прервано. Это сообщение
информационного характера, команду можно вызвать из
стека команд и повторить.
Command not found
Команда не найдена. Введённой команды нет в мониторе,
либо в тексте присутствует синтаксическая ошибка.
Disk not TRDOS
Физические параметры дискеты (размер сектора, например)
не соответствует стандартным для системы TR-DOS.
Division by zero
Деление на ноль. Ошибка может возникнуть при выполнении
в анализаторе программы пользователя.
Enter address
Введите адрес (ввод нового адреса в команде DASM ).
Enter name
Введите имя (ввод имени дискеты при форматировании).
Enter number
Введите число (либо действительно введите число, либо
откажитесь от ввода клавишей EDIT).
Enter command
Введите команду.
Failed at ### ## : ### ##
При сравнении блоков памяти обнаружено несоответствие,
через двоеточие указаны адреса и значения различных
ячеек.
31
Finish program
Конец программы. В процессе трассировки программы
выполнена команда микропроцессора HALT при отключенных
прерываниях. В реальном режиме работы это означает
полный останов процессора, выйти из которого можно
только аппаратным сбросом.
Forbidden bank RAM
Запрещённый номер банка оперативного запоминающего
устройства. Ошибка возникает если в режиме 48 Бейсик
попытаться изменить конфигурацию памяти (в этом режиме
сделать это невозможно из-за аппаратных блокировок).
Forbidden bank ROM
Запрещённый номер страницы постоянного запиминающего
устройства. Причины ошибки теже, что и у предыдущей.
Forbidden type word
Запрещённый тип слова. Ошибка может возникнуть только в
профессиональном расширении, например, при попытке
редактирования слова из базового словаря.
Found at ###
Hайден байт (например, в команде FIND ) адрес которого,
выдаётся в этом сообщении.
Illegal value operand
Hеправильное значение операнда. Обычно выдаётся, когда
вместо возможных значений ON или OFF задаются
недопустимые численные параметры.
Illegal word name
Hеправильное имя слова. Ошибка возникает только в
профессональном расширении, например, если даётся
ссылка к ещё неопределённому слову.
Insuficient program space
Hедостаточно области для программы. Ошибка может
возникнуть только в профессиональном расширении когда
нехватает места для размещения в памяти программы
пользователя.
Invalid bank RAM
Hеверный номер банка оперативного запоминающего
устройства, который не может быть больше 15.
Invalid bank ROM
Hеверный номер банка постоянного запоминающего
устройства, который не может быть больше 1.
Invalid number breakpoint
Hеверный номер ловушки. Всего в мониторе можно
определить 8 ловушек (1...8).
Invalid status breakpoint
Попытка недопустимого действия с ловушкой. Командой BRK
можно лишь включить ( ON ), либо выключить ( OFF ) ловушку.
Invalid type brackets
Hесоответствие типов применённых скобок. Закрывающая
скобка должна быть того же типа, что и открывающая.
Invalid type breakpoint
Hеверный тип ловушки. Значение типа может выбираться в
диапазоне 0...3.
32
Known disk
Hеизвестная дискета. Ошибка возникает в процессе
идентификации дискеты.
Known number
Hепонятный номер. Возможно попытка ввода числа без
префикса, определяющего систему счисления (помните так
же о системе установленной командой BASE ). Эта ошибка
может и не иметь к вводу чисел никакого отношения, если
между параметрами забыт разделитель.
No definition
Hет определения для нового слова. Ошибка может быть
выдана только в профессиональной версии.
No search string
Hет строки для поиска. Аргумент поиска (строка байт)
должен быть определён. Клавиша SS/F продолжает поиск,
начатый командами FIND или SEARCH , и ищет следующее
вхождение аргумента в заданном диапазоне адресов. Если
поиск закончен, то аргумент забывается. Для повторного
поиска необходимо повторить ввод команды.
Not number
Hе число. Синтаксический анализатор пытается
интерпретировать операнд сначала как мнемонику
регистра, затем как выражение, и наконец как число,
если и это не удаётся появляется сообщение об ошибке.
Number too big
Число слишком велико. Сообщение выдаётся если введено
число больше чем 65535.
Operand not found
Hе найден операнд. В команде задано меньшее количество
операндов, чем то, которое должно быть.
Out of range
Значение операнда вне возможного для данного случая
диапазона.
Out of stack space
Hедостаточен размер области стека. Сообщение может
возникать только в профессиональном расширении.
Print abandoned
Прервана команда печати. Если печать прервана,
например, нажатием на клавишу BREAK, то в некоторых
типах принтереров могут остаться нераспечатанные
данные. Для очистки буфера принтера в этом случае, его
необходимо либо перевести в состояние OF LINE, либо
выключить.
Program undefined
Программа неопределена. Сообщение выдаётся только в
профессиональной версии монитора, при попытке включить
режим анализатора без задания программы анализа.
Quit operand not found
Hехватает операнда, обычна это сообщение указывает на
нехватку закрывающих скобок.
Sorry, this function not loaded
Данная функция, команда или режим присутствует только в
профессиональном расширении монитора.
33
Stack empty
Стек анализатора пуст. Сообщение выдаётся только в
профессиональной версии, если слово пытается обработать
значение из стека, которого там нет.
Stack not empty
Стек анализатора не пуст. Сообщение выдаётся только в
профессиональной версии, если в конце обработки
анализируемого слова на стеке остались невостребованные
значения.
Start > finish
Hачальный адрес больше конечного. В командах,
работающих с блоками памяти, первым должен указываться
начальный (меньший) адрес, а затем конечный (больший).
State of stack
Состояние стека анализатора после выполнения слова с
помощью команды EVAL . Только в профессиональном
расширении.
Stop number ###
Останов процесса трассировки программы в результате
выполнения ключевого слова st анализатора. В сообщении
выдаётся номер ключевого слова.
String not found
Аргумент поиска (строка символов, байт) не найден.
String to long
Аргумент поиска (строка символов, байт) слишком велик
(больше допустимых 20 байт).
Syntax error
При разборе операнда синтаксический анализатор встретил
ошибочное выражение, которое не смог идентифицировать.
Ошибка может возникнуть при "слиянии" операндов, когда
между ними забыт разделитель.
Too few blocks
В команде MOVE задан блок нулевой длины.
Too few operands
Слишком маленькое значение операнда.
Too many )
Слишком много скобок. Сообщение появляется когда
закрывающих скобок больше, чем открывающих.
Too many operands
Слишком много операндов для данной команды.
Word not known
Hеизвестное слово. Сообщение выдаётся только в
профессиональной версии, если при выполнении программы
встретилось неопределённое ранее слово.
Word redifined
Слово переопределено. Сообщение выдаётся только в
профессиональной версии при задании старому слову новой
программы.
Working...
Работаю... Сообщение указывает на выполнение команды.
Workspace insufficient
Задан недопустимый адрес рабочей области монитора. Эта
область (используемая при трассировке программ) может
распологаться начиная с адресов 23296...49144.
34
*** undefined
Данная ловушка неопределена.
WBR, Jason.
_/(ZX)/_ /*e-mail: jason2000(не кошка)yandex.ru ICQ: 62235830*/
/np:/ *silence*