
Сообщение от
Ewgeny7
Я про этот механизм даже не слышал.
Код:
в мониторе-3 изменена процедура обработки
сброса: после сброса (cold start) осущ-ся инициализация портов, устанавливаются стандартные
значения системных переменных (см.далее) и управление передается на теплый старт (f86c). при
теплом старте (warm start) выполняются по порядку:
1. проверяется нажатие <сс> или <ус>
(только одной из них!) и если нажата, то управление передается резидентному ccp. (это
позволяет блокировать автоматическую загрузку ordos из rom-диска в мониторе-2 для этого
приходилось отключать rom-диск).
2. подсчитывается байт паритета (xor) области b800...bfff.
если он равен 0e6h (а это сигнализирует о наличии <и исправности> ранее загруженной системной
программы - напр: cp/m boot или загружаемого монитора), то управление передается на 0bffdh.
3.если байт паритета не равен 0e6h, анализируется наличие rom-диска или хотя бы 2k пзу по адре-
су интерфейса rom-диска -0f500h. если пзу есть, то его коды (первые 2к) загружаются в озу b800
- bfff и управление передается на bffd.
4. если и rom-диска нет, то осуществляется выход в
резидентный командный процессор - ccp с двумя доступными командами (g, i).
Также, монитор расширен за счет организации доп.векторов системных подпрограмм - так
теперь наряду с п/п ввода/вывода символов сделаны програмно-определяемыми и подпрограммы
ldbyte и svbyte - п/п ввода/вывода байтов с магнитофона, что позволяет без переделки прикладных
программ (напр. редактора) применять другой (более надежный) формат записи данных на мг.
ленту.
Но наверное самым интересным расширением монитора является введение так.наз.
системных програмных прерываний. теперь не имея в самом компьютере аппаратных прерываний,
можно прервать исполнение прикладной программы, исполнить другую программу и вернуться в пер-
вую программу (в том же состоянии, что было на момент прерывания). теперь монитор перед
выполнением сист. функций (rdkey,cout,inkey, beep) осуществляет проверку на програмное
прерывание - осуществляется проверка на одновременное нажатие клавиш <сс> и <ус>. если эти
клавиши не нажаты, то все как и ранее - выполняется сист. функция. если-же эти клавиши нажаты
то выполняется проверка на наличие прерывания.
В самом мониторе зашиты всего 3 прогр.
прерывания, однако как и для директив монитора кол-во програмных прерываний может быть
значительно расширено путем подключения доп.таблицы прерываний. резидентны же в мониторе - три
програмных прерывания: <ус/сс> + <с> - break, горячий старт системы (яч.f86c) <ус/сс> + <s> -
pause, пауза до нажатия клавиши <вк> <ус/сс> + <space> - выход в монитор из любой программы
резидентные прерывания нельзя програмно блокировать, что дает возможность вскрытия защит
коммерческих программ (использующих системные функции пзу f800).
Для желающих расширить
количество програмных прерываний надо знать, что после обнаружения одновременного нажатия
клавиш <ус> и <сс> (при выполнении п/п-м f800) проверяется нажатие клавиш <с>, <s> и пробела.
если ни одна из этих клавиш не нажата то управление передается по адресу из ячеек f3df/e0.
это позволяет вам расширять систему програмных прерываний. но !!! если вы хотите чтобы был
возврат в точку прерывания - сохранять регистры !!!

Сообщение от
Ewgeny7
А сохранять номер выбранной страницы для после включения где?

Дык, нигде. 
Хотя ежели для любителей странного, то можно и в памяти часов, например.
В Орион-ПРО для этого целый ДИП-переключатель впендюрили, испохабив для этой цели порт ВВ55 (вот нельзя же ж было одну АП6 поставить, надо были именно порт кастрировать на восемь разрядов).