[3/4] CP/M for Spectrum-128
ZXNet echo conference «zx.spectrum»
From Michael Markowsky → To All 24 October 1997
Hello, All!
Консоль CP/M BIOS.
Для упрощения обмена текстовыми файлами с IBM PC
внутренней кодировкой CP/M BIOS'a является альтернативная,
хотя в качестве внешней кодировки для вывода пользователь
может выбрать одну из 4-x реализованных (см. ниже).
Управляющие коды CP/M BIOS Сonsole совместимы с
терминалом Health/Zenith и являются подмножеством кодов
консоли SYSCOC (Sinclair PROFI). Все ESC-последовательности и
большинство СTRL-кодов управления консолью можно использовать
не только в операторах вывода внутри программ, но и при работе
с командным процессором, вводя их непосредственно с клавиатуры
в ответ на приглашение системы >. В отличие от командного
процесора SP-DOS (Sinclair PROFI MicroDOS), который просто
проглатывает все управляющие коды, командный процессор СP/M 2.2
считает их неправильной командой и ругается на них. Hо при этом
он распечатывает неправильную команду со знаком вопроса, и
поэтому все управляющие коды попадают к драйверу консоли и он
производит все требуемые действия.
Управляющие коды консоли
╔══════І════І═══════І════════════════════════════════════════╗
║ │код │ │ ║
║символ│HEX │функция│ описание ║
╠══════╪════╪═══════╪════════════════════════════════════════╣
║ ^A │ 01 │ GRAF │ Псевдографика, следующий байт отобра- ║
║ │ │ │ жается на экране ║
║ ^G │ 07 │ BELL │ Звуковой сигнал ║
║ ^H │ 08 │ BS │ Возврат на шаг назад ║
║ ^I │ 09 │ TAB │ Табуляция на позицию кратную восьми ║
║ ^J │ 0A │ LF │ Перевод на строку вниз ║
║ ^K │ 0B │ HOME │ Установка маркера в начало экрана ║
║ ^L │ 0C │ FF │ Очистка экрана ║
║ ^M │ 0D │ CR │ Возврат в начало строки ║
║ ^N │ 0E │ STO0 │ Переход в русский алфавит для вывода ║
║ ^O │ 0F │ STO1 │ Переход в латинский алфавит для вывода ║
║ ^V │ 16 │ CLSTR │ Очистка строки от текущей позиции ║
║ │ │ │ маркера до правой границы экрана ║
║ ^X │ 18 │ CVP │ Маркер на позицию вправо ║
║ ^Y │ 19 │ CVV │ Маркер на позицию вверх ║
║ ^Z │ 1A │ CVN │ Маркер на позицию вниз ║
║ ^[ │ 1B │ ESC │ Первый символ многобайтных управляющих ║
║ │ │ │ последовательностей ║
╚══════╧════╧═══════╧════════════════════════════════════════ў
УПРАВЛЯЮЩИЕ ПОСЛЕДОВАТЕЛЬHОСТИ (за ESC)
╔════І═════І═════════════════════════════════════════════════╗
║ │ код │ ║
║сим.│(HEX)│ описание ║
╠════╪═════╪═════════════════════════════════════════════════╣
║ @ │ 40 │ Переход в русский алфавит для вывода на экран ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ A │ 41 │ Маркер позиции вверх ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ B │ 42 │ Маркер позиции вниз ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ C │ 43 │ Маркер позиции вправо ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ D │ 44 │ Маркер позиции влево ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ E │ 45 │ Сброс консоли. Выполняет установки: ║
║ │ │ -стирание с экрана; ║
║ │ │ -координаты текущей позиции 0,0 ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ H │ 48 │ Установка маркера в начало экрана ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ J │ 4A │ Очистка экрана от текущей позиции маркера ║
║ │ │ до конца экрана ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ K │ 4B │ Очистка строки от текущей позиции маркера ║
║ │ │ до конца строки ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ L │ 4C │ Вставить пустую строку над маркером ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ M │ 4D │ Удалить строку, в которой находится маркер ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ P │ 50 │ Управление цветом экрана, D0-D2 следующего ║
║ │ │ байта - цвет (см. таблицу ниже) ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ V │ 56 │ Инверсный или прямой вывод символов, D0 следу- ║
║ │ │ ющего байта определяет наличие инверсии ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ Y │ 59 │ Прямое позиционирование маркера. Следующий ║
║ │ │ байт - позиция Y+20h, затем X+20h. ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ Z │ 5A │ Переход в латинский алфавит для вывода на экран ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ [ │ 5B │ Возврат в ALT-кодировку ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ \ │ 5C │ Установка кода КОИ-7 для вывода на экран ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ ] │ 5D │ Установка кода КОИ-8 для вывода на экран ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ j │ 6A │ Быстpый вывод стpоки. Длина стpоки помещается ║
║ │ │ адpесу 80h, сама стpока pасполагается с адpеса ║
║ │ │ 81h. Пpовеpок на упpавляющие символы не пpоиз- ║
║ │ │ водится, положение куpсоpа не меняется. ║
╟────┼─────┼─────────────────────────────────────────────────Є
║ │ 7F │ Вызывает инвеpсию байта по адpесу 80h и обнуле- ║
║ │ │ ние байтов по адpесам 81h и 82h. Инвеpсия байта ║
║ │ │ по адpесу 80h сообщает о наличии быстpого выво- ║
║ │ │ да стpоки (ESC+'j') ║
╚════╧═════╧═════════════════════════════════════════════════ў
Комбинации цветов:
╔═════════І══════════І═════════І═════════════════════════════╗
║ D0 │ D1 │ D2 │ ║
╠═════════╪══════════╪═════════╪═════════════════════════════╣
║ 0 │ 0 │ 0 │ черный по белому ║
║ 1 │ 0 │ 0 │ синий по желтому ║
║ 0 │ 1 │ 0 │ красный по голубому ║
║ 1 │ 1 │ 0 │ сиреневый по зеленому ║
║ 0 │ 0 │ 1 │ зеленый по сиреневому ║
║ 1 │ 0 │ 1 │ голубой по красному ║
║ 0 │ 1 │ 1 │ желтый по синиму ║
║ 1 │ 1 │ 1 │ белый по черному ║
╚═════════╧══════════╧═════════╧═════════════════════════════ў
Дополнительно существует 4 комбинации "горячих клавиш"
(hot keys), которые можно ввести только с клавиатуры (если
прерывания разрешены) :
^2 - Caps Lock - Включение/выключение режима
фиксирования больших букв;
^SS (Extended) - RUS/LAT - Переключение ввода русских или
латинских букв;
^Enter - NOCONTROL - Отмена/разрешение обработки
управляющих символов;
^Space (BREAK) - Status Line - Показать в верхней строке
состояние консоли.
При отмене обработки управляющих символов все коды,
передаваемые консоли сразу отображаются на экране без
проверки на их значение. Так продолжается до ввода следующего
^Enter. Эта возможность введена для того, чтобы определить
визуально, какие управляющие коды использует работающая в
данный момент программа.
Hаличие наскольких режимов работы консоли потребовало
создания средств для визуального определения текущего режима.
Для этого используется Status Line. При нажатии ^Space (BREAK)
верхняя строка экрана сохраняется в буфере, а на ее месте
отображается состояние консоли. Для ввода (CONIN) фиксируется
наличие или отсутствие Caps Lock и алфавит ввода (RUS/LAT).
Для вывода (CONOUT) фиксируется текущая кодировка
(Альтернативная, KOI8, KOI7, RUS) и наличие или отсутствие
обработки управляющих кодов ( CONTROLS / NOCONTROLS ).
При отображении Status Line прерывания запрещаются и
система ожидает нажатия любой клавиши (обращаясь к портам
клавиатуры). Таким образом нажатие ^Space (BREAK) можно
использовать для приостановки работы программы (pause). После
того, как на клавиатуре будет нажата любая клавиша,
восстанавливается первая строка экрана, разрешаются
прерывания и приостановленная программа продолжает свою
работу.
Следует еще раз заметить, что внутренняя кодировка
CP/M BIOS - альтернативная, и весь ввод ведется в этой
кодировке. Однако для отображения на экране пользователь может
выбрать с помощью управляющих кодов одну из 4-х кодировок -
ALT, KOI8, KOI7, KOI7 SI/SO. Таким образом, ввести с
клавиатуры текст Вы сможете только в альтернативной кодировке,
а распечатать на экране - в любой из 4-х.
Michael Markowsky (C) 1992,1993.