МОНИТОР-3 - описание теневых сервис-мониторов для новых версий Монитора 3, Орион-128
Мониторы для ОР ДОС и других систем
Продаю платы и наборы микросхем, куплю микросхемы
Очередное письмо В. Чистякова с рекомендациями по Ориону
Авторский контроллер НГМД. Мы собираем именно такой и на нем работаем. Читайте про пакет Атлас. Также дискеты можно отформатировать из под ORDOS пакетом программ Атлас.
Теневой монитор представляет собой обыкновенную программу, которая отличается лишь тем, что в процессе своей работы она располагается в ПЗУ, по тем же адресам где "сидит" rom-bios (то есть вообще не занимает памяти компьютера). Это очень удобно для программы Монитор, т.к теперь пользователь имеет доступ ко всему обьему памяти компьютера, причем в отличие от антикварных мониторов, данный монитор использует архитектуру z80card-ii, что дает доступ и к "под-ПЗУ-шечному" ОЗУ (т.е доступ к полным 64К в каждой банке). При работе теневой монитор пользуется п/программами rom-bios, поэтому (как обычно) недопустимо портить системные ячейки rom-bios. Теневой монитор при своей работе остается для пользователя "невидимым", т.е создается впечатление, что этот монитор работает из rom-bios (а точнее располагается в "тени" rom-bios). Другой отличительной особенностью теневого сервис-монитора является его работа с ОЗУ в разных страницах памяти компьютера "напрямую", а не через ущербные п/п-ммы f836/39 (которые не обеспечивают доступ к подпзу-шечному ОЗУ). Для теневого монитора в каждой банке ОЗУ существуют полные 64 кило байтов (а не 60). В то же время ПЗУ и ВУ (т.есть то что выше f400) монитор вообще "в упор не видит" - при попытке доступа по адресам выше f400 "мы попадаем" в ОЗУ, расположенное по этим адресам (поэтому с помощью этого монитора Вы не увидите дамп ПЗУ f800, набрав команду df800<ВК>, а увидите кусок ОЗУ по этим адресам в 0-й банке). Естественно этим монитором так- же невозможно "работать" с портами в области f400-f7ff. Однако к системным портам (на вывод), т.е к портам f800 (f8), f900 (f9), fa00 (fa) и портам fb,fc, Вы можете "выводить" напрямую (командой o). Теневой монитор (который по английски называется shadowy) разработан на основе подпрограмм МОНИТОРА-ext (располагаемого в ОЗУ расширителя команд МОНИТОРА-3) - из него по сути только исключены все команды работы с магнитофоном (и добавлены команды o и z) - однако несмотря на исключение 6 команд оставшиеся возможности достаточны для жизни программиста
Примечание: Уже существует более 6 отличающихся версий теневого монитора, но все они имеют одно общее свойство - это именно "внешние" по отношению к bios программы (т.е rom-bios при работе не нуждается в теневом мониторе и не "знает" о его существовании). Это дает некоторую гибкость - т.е можно ставить вместо rom-bios ПЗУ РФ2 (2Кб), а также просто расширить систему напаяв "АЕадовК" сверху этой 573РФ2 - вторым этажом (методом "паФк Цп", как расширялось ОЗУ в РК86). Можно также имея общий rom-bios (2 К), иметь множество 2-х килобайтовых теневых мониторов переключая их переключателем. Однако такая "система" расширения возможностей резидентного ПО - ущербна по самой идее, хотя и обеспечивает большую гибкость и совместимость. Гораздо более совершенны единые большие rom-bios, т.е bios уже сразу при разработке, рассчитанные на работу не в одном 2-х килобайтовом сегменте (как это было с М-1, М-2, М-3), а во всем обьеме ПЗУ 27256. При этом такой rom-bios будет единым - его нельзя будет разделить на собственно п/п -ммы bios (ввода/вывода), монитор и "дополнительные" драйвера, располагаемые в других 2К-блоках ПЗУ. Такой rom-bios можно прошивать только сразу в одну 27256. К сожалению имеется информация, что вскоре появится новый "стандарт ОРИОН-СОФТ" на набор п/п-мм bios для ОРИОНА (ранее ОРИОН-СОФТ анонсировал МОНИТОР-3 с оверлеями, а теперь это будет МОНИТОР-4). Разработка мощного bios с набором мощных цветных драйверов - достаточно сложное дело и до уточнения упр.кодов для графического интерфейса - дело неблагодарное (выгоднее подождать "выхода стандартов от ОРИОН-СОФТ"). Пока таких "мощных" rom-bios - нет. Однако rom-bios, альтернативный m2/m3, занимающий уже 6К и представляющий единую программу (т.е прошиваемую только в 27256) уже опробован. Причем этот новый rom-bios именно альтернативен m2/m3, т.е несовместим по части стандартных п/п-мм. Поэтому реализованная в версиях shadowy-монитора, концепция использования "стандартного" первого 2К-блока в ПЗУ и передача управления в доп.блоки ПЗУ, является наиболее правильным вариантом позволяющим использовать и старое ПО и иметь новый альтернативный bios для новых программ. И очень важно, что на shadowy, Вы можете настроить саму доработку до ПЗУ 27256, не дожидаясь готовности альтернативного rom-bios. Директивы теневого монитора версий 1.003-1.004
После выполнения команды "`" из МОНИТОРА-3 (основного rom-bios) управление передается на адрес f800, но уже в блоке 1 (после выдачи 1 в порт fc). При этом экран очищается и выводится стартовое сообщение (и при первом старте - help): * shadowy-monitor * ; Примечание: маин-rom-bios М3 должен соответствовать * vers 1.00x/1995 * ; теневому монитору (это не обязательно для v1.000-2) После этого кроме команд резидентных в самом bios-М3 (а в версиях для РК86-клавиатур это команды d,m,t,g,i,`) становятся доступны следующие новые директивы (операнд в квадратных скобках - не обязателен). Если при наборе директивы:
- 1 - Какой либо параметр не введен (две запятые или пробела подряд), то
параметр принимается равным 0. В качестве разделителя, кроме запятой
можно использовать пробел. Строку команды можно редактировать клавишей
<курсор влево> и обязательно вводить все параметры (например, чтобы
посмотреть дамп в 3-й странице памяти с адреса 0 можно набрать "d,,3<ВК>"
- первые 2 параметра равны 0, а третий - 3) d<нач.адр>,{<кон.адр>},{<n
стр.ОЗУ>} - дамп ОЗУ (именно ОЗУ, а не ПЗУ). Если конечный адрес не
указан (или 0), то выводятся первые 128 байтов дампа. Выводится hex и
ascii представления байтов (ascii-коды "выше" 80Е выводятся точкой) f<нач.адр>,<кон.адр>,<байт>,{<n
стр>} - заполнение области памяти указанной страницы одинаковым кодом.
Но если кон.адрес = 0, то команда интерпретируется: f<n стр> -
форматирование "квази-диска" ordos. Запрашивается подтверждение. m<адр>,{<n
стр>} - модификация ячеек памяти указанной страницы. Набор удобный без
"излишнего" нажатия <ВК>. Переход вперед/назад - курс.клавишами
вверх/вниз. Дополнительно директива позволяет вводить текст: Для этого
надо нажать сначала <АР2>, затем на символьную клавишу (это часто
удобнее,чем искать таблицу ascii) Т<нач.адр.ист>,<кон.адр.ист>,<адр.пр-ка>,{<n
стр>} - пересылка блока данных в указанной странице ОЗУ. В отличие от
"малограмотных директив антикварных" мониторов, допускается копирование
с любым перекрытием и в любую сторону (!) k<нач.адр>,<кон.адр> - подсчет
контр.суммы блока. Но только в основной странице p<нач.адр>,<кон.адр>,<n
стр.ист>,<n стр.пр-к> - копирование блоков данных из одной страницы в
другую. При копировании ОЗУ выше f000, не портите ячеек 0f3xxЕ
c<нач.адр>,<кон.адр>,<обл.срвн>,{<n стр>} - сравнение областей ОЗУ (в
странице) x<нач.адр>,<кон.адр>,<байт>,{<n стр>} - поиск заданного байта.
В версии 1.004
4-й параметр - 2-й байт поиска (тут ищет 2 байта, но увы, только в
странице 0). o<порт>,<байт> - вывести байт в указанный порт (командой
out). Адрес порта -однобайтовый (например - f8, fa и т.п, а не
двухбайтовый, через bc, типа bffd). h<ЕеЛ1>,<ЕеЛ2> - шестнадцатеричная
арифметика. Выводит сумму и разность двух двухбайтовых чисел.
Исключельно полезная и нужная всем программистам директива. n<нач.адр>,<кон.адр>
- вычисление "байта паритета" указанной области памяти ОЗУ g<адр> -
запуск программы с указанного адреса (без задания точек останова)
a{0/1} - сделать текущим rom-диск ОРИОНА и выдать его каталог. Параметр
позволяет переключать банки по 64К (при наличии super-rom-диска, порт
упр-я - f504Е) b{<n стр>} - сделать ram-диск ordos текущим (вместо b,c,d
в ordos "квази-диски" называются по идеологии m3-ext - b1,b2,b3,b4...).
В отличие от ordos за признак конца "квази-диска" принимается не байт
0ffh, а любой байт больше 80 (в имени). l<имя файла> - считать файл из
текущего диска в ОЗУ. В отличие от ordos файл не запускается на
исполнение (даже с $ в имени) и выводятся адреса загрузки файла в ОЗУ
(можно грузить любой файл даже по адресам b800, чего ordos не может).
Дополнительным удобством является то, что имя файла можно указывать не
полностью - нужный файл будет найден даже по 1 букве имени (но если есть
2 файла с именами, начинающимися с этой буквы, то будет найден первый из
них по каталогу). Если имя файла вообще не указано, то вообще будет
найден самый первый по каталогу файл (поэтому удобно загрузчик НГМД
прошить в rom-диск первым: загрузка пробел) s<имя файла>,<нач.адр>,<кон.адр>
- запись файла на текущий "квази-диск" ordos
e<имя файла> - удаление файла. Запрашивается подтверждение. Если имя не
указано то будет удален самый первый файл по каталогу (а если на этом
диске файлов нет то будет удален самый первый файл на первом по номеру
диске b, где есть файлы). ПРОБЕЛ<имя файла> - запуск $-файла на
исполнение. В отличие от М3-ext можно запускать любой даже ordos-файл,
т.к если в "блоке 2" большого ПЗУ располагается ordos, то она
загружается в ОЗУ при первоначальном запуске теневого монитора. И если
Вы "специально не портили ее" (работая с директивами) то она там и
"хранится" все время работы монитора (хотя и не используется для работы
с файлами -т.к в этом просто нет смысла - все, что ordos "делает" за
счет 2-х килобайтов кода, легко размещается в 200 байтах кода теневого
монитора).
<ВК> - вывод каталога текущего "квази-диска" на экран (директива i - help). z<n зад) - запуск "прошиваемых" пользователем резидентных задач. n - число от 0 до 7. Работа этой команды различна в версиях 1.000-1.006. В версии 1.003 (рассчитанной на любителя, т.е без встроенного help), по запуску директивы выполняется следующее. Параметр 0-7 (т.е всего 8 задач пользователя) определяет номер задачи и одновременно смещение в "таблице задач". Эта таблица располагается в ПЗУ 27256 с абсолютным смещением 0fe0Е от начала, или по адресу 7e0Е в блоке n1 (то есть во втором по порядку блоке в 2К). Эта таблица содержит 8 записей, длиной по 4 байта каждый (в дампе сейчас там "сидят" ffЕ). Первые 2 байта каждой записи - это адрес загрузки и старта программы пользователя (например текст. редактор, загрузчик НГМД или отладчик). Следующий байт - это длина или обьем программы, выраженный в 2-х килобайтовых блоках (например при 8 Кб - число 4).
- 2 - Последний четвертых байт - это "адрес" программы в "большом ПЗУ
27256", а точнее номер 2-х килобайтового блока, начиная с которого
"зашит" код программы пользователя. Например, если Вы хотите запускать
какое-нибудь ПО командой z<ВК> (что кстати удобнее, чем прошивать его в
rom-диск, т.к "все приличные люди" имеют только два 55-х порта, т.е порт
f500 используется и для программатора и для rom диска и для принтера и
для мыши, - а на месте 3-го порта удобно расположить музыкалку ay-8912),
то можно прошить его в любой блок, начиная с 3-го (Монитор и
ordos занимают блоки 0-2, а дальше модули z), но запись о нем в таблице
сделать в ячейках fЕ0-fe3 (например: 00,00,08,03 - для загрузки basicа
размером в 16К).
Также монитор дополнительно (от дурака) "проконтролирует", чтобы
стартовый адрес Вашей программы не был выше 0f000Е (хотя разумеется
"концом" Вашей программы Вы все равно можете "грохнуть" область
служебных ячеек 0f3c0Е-0f3ffЕ), что кстати и использует спец.драйвер
букв 8*10, также размещаемый в теневом ПЗУ и запускаемый при старте
теневого монитора - чтобы не портить зрение работая с "мелко-шрифтом"
6*10, который обеспечивает "стандартный резидентный драйвер"). `<n) -
переход в альтернативный rom-bios. Управление передается на программу по
адресу f800, расположенную в блоках большого ПЗУ, начиная с блока n4
(т.е с адреса 2000Е в ПЗУ 27256). Предварительно проверяется наличие по
адресу f800 кода jp (0c3Е). Вы можете прошить в ПЗУ с адреса 2000
МОНИТОР-2 и передавать ему управление командой `<ВК>. n - число от 0 до
7 (n 2 Кб блока минус 4). Однако это не обязательно должна быть
программа rom-bios. Это может быть любая программа. В частности м.быть
z80-отладчик (Мon-2 или "аделаидский" monit-z80), или специальная
"хакерская" программа (например копирующая все 4 банки ОЗУ целиком в
дисковый cp/m-файл на дискете) - это облегчает взлом "убогих" программ
(то есть авторов, которые не научившись писать свои п/п-мы bios пытаются
делать защиты). l (без параметров или с параметром 0) - загрузка с НГМД
стандартным загрузчиком q - конец работы и возврат управления в основной
rom-bios. Исключительно полезная команда, так как иначе "отделаться" от
теневого монитора просто невозможно.
При старте теневой монитор выставляет "спец.флаг" и даже по сбросу
основной rom bios (версий М-3 с 4 значными номерами, напр: М3 v3.007)
будет передавать управление в shadowy-monitor (поэтому, если у Вас не
прошито в блоке 2 ПЗУ, системы ordos или другой программы пользователя и
нет ни одного файла ни в rom-диске, ни в дисках b, то Вы не сможете даже
передать управление в любую другую программу и без команды q будете
"сидеть" в теневом мониторе до выключения питания компьютера (можно лишь
будет ввести с помощью дир. М машинные коды и запустить это) При работе
с файлами в каждом "квази-диске", в отличие от ordos, теперь может быть
не 60 Кб, а 64 Кб (то есть при 256К ОЗУ, Вы получаете дополнительные 12
килобайт для хранения файлов ordos). При запуске файла на исполнение
(или при команде g), теневой монитор включает с помощью порта fc вместо
ПЗУ f800 блок n0 большого ПЗУ (то есть основной rom-bios) и стартует
программу. После выхода из этой программы, управление опять получает
теневой монитор. Так, что с этим "кошмаром 20 века", системой ordos
навсегда покончено. Ее можно хранить и загружать в память при
использовании ordos-программ, но пользоваться этим "мраком" уже не имеет
никакого смысла. Теневой монитор позволяет вообще не иметь rom-диска.
При этом можно будет даже использовать все ordos-программы не
считывающие ordos из rom-диска самостоятельно (есть такие
маразматические программы, полагающие, что rom-диск есть у всех и в нем
обязательно "сидит" ordos - это самые вредительские программы, так как
они навечно привязывают ОРИОН к ordos).
Версии 1.000-1.002 - некоммерческие (с ошибками), не содержат загрузчика
НГМД, хотя и могут работать с любым mОН-3 1994 года (3.000-.007) и
команды отличаются Версия 1.005 отличается наличием встроенного драйвера
"больших букв" (СИНКЛЕРА) Начиная с v1.003 контролируется контр. сумма:
при дохлоте пищат как недорезанные Теневые мониторы к М3 - это лишь
первые "убогие" попытки использовать большое ПЗУ 27256 (вместо РФ2). Все
6 версий теневых мониторов были "сляпаны" быстро и просто за счет
использования готовых п/п-мм от Мониторов СПЕЦИАЛИСТА и ext для М3
ОРИОНА (то есть данные теневые мониторы сделанные всего за 1 вечер - это
не "мировой шедевр", но лишь показывают способ использования большого
ПЗУ). Однако существенно улучшать теневые мониторы - бессмысленно.
Гораздо полезнее попросту иметь единый мощный rom-bios, включающий "супер-визорные"
возможности и более удобный набор директив. "Супер-визорные" возможности
следует вводить не только за счет программных прерываний, как это
делалось в ленинградских мониторах СПЕЦИАЛИСТА и ОРИОНА (то есть когда
вызов пр.прерывания возможен только когда программа пользуется п/п-ми
ПЗУ - а коммерческие программы не настолько "глупы", чтобы лазить в ПЗУ
f800 - так делают только "дилетанты", кстати именно поэтому недопустимо
существование схемы подключения МС7007 клавиатуры В.Сугоняко),
значительно эффектнее вводить "Супер-Визор" на основе nmi z80. При этом
"грохнуть" любую защиту будет не сложнее, чем получить копию игры
"волшебной"кнопкой на СИНКЛЕРЕ. Подобная разработка, под именем
fинал-cаЮд (аналогично та возможности по расширению системного ПО -
аппаратно отслеживаются вызовы п/п-м, а также дает возможность
"эмуляции" игр СПЕЦИАЛИСТА, ЛХВОВА и СИНКЛЕРА). кому же модулю к
cоммодоЮе-64/128) обдумывается и планируется (она даст широкие
- 3 -
В самом начале 1995 года уже будут разработаны первые версии "единого
большого" rom-bios ОРИОНА (пока задержки вызваны лишь нежеланием В.
Сугоняко предоставить нам информацию о стандартах, чтобы не плодить
несовместимость). Использованная в М-3 v3.00x концепция (автостарт
альтернативного bios при "выставленном флаге"), дает возможность удобно
"обкатывать" версии альтернативного bios без потери совместимости с М2
(который до сих пор должен считаться стандартом ОРИОНА, до появления
новых публикаций в р/любительской прессе). Просьба присылать замечания о
"глюках" в этих теневых мониторах, а также советы по совершенствованию.
Для установки ПЗУ 27256 вместо 573РФ2 в ОРИОНЕ-128 (только на z80) надо
сделать следующую доработку. На свободном месте платы (на месте 12-ти
вольтового преобразователя) надо установить 1 доп. ИМС - любой регистр.
Он должен сбрасываться в 0 по сбросу и записываться при обращении в порт
0fch. Платка z80card-ii уже формирует такой сигнал записи - pfc, так что
дополнительная логика не требуется. Удобно применить 555/1533 ИЕ7 или
ТМ9 (ИР18), т.к они имеют входы для сброса в 0. Полученный таким образом
доп.регистр и формирует адреса a11-a14 для ПЗУ 27256 (можно и 27512, но
их применять дорого, т.к в случае их "смерти" Вам будет гораздо обиднее,
чем при "смерти" 27256, да и программатор для 27512 - содержит десяток
ИМС, в то время как наш программатор для 27256 содержит всего лишь 1 ИМС
- 155ЛА3). Далее необходимо закрепить панельку на 28 ног. Это можно
сделать на отдельной платке, но если есть фирменная черная панелька (у
которой ноги можно отогнуть в стороны) удобнее впаять ее вместо 24-х
ногой панельки для РФ2. Для этого у панельки отгибают в стороны ноги 1,
2 и 27, 28 и надев на оставшиеся 24 ноги прокладку (толщиной в
полмиллиметра, чтобы выводы 1,2,27,28
были повыше над уровнем платы) запаивают вместо выкушенной панельки для
РФ2. Предварительно надо отрезать от печати контакты у 21 и 24 ног (по
нумерации для РФ2 - теперь это адреса у 27256). Далее к контактам
панельки 23, 26, 1, 2, 27 и 28 подпаивают проводники, отрезки провода
МГТФ-003. Это наиболее удобный и эстетичный способ переделки, хотя при
установке отдельной панельки остается возможность вставлять и ПЗУ РФ2
(например с тестом, а с одной панелькой тест придется перешить в 27256,
что несколько расточительно - зато какой тест можно засунуть в 32
килобайта!). Вот как выглядит дополнит. порт при использовании ИЕ7:
Сигнал reset это - d18.2/9. Сигнал pfc - 11 нога 555ИД7 на плате
z80card-ii.
d0, d1, d2, d3 - шина данных (можно взять прямо от ПЗУ). Если у Вас
какие-либо проблемы с прошивкой 27256, то Вы можете прислать их мне на
"прошивку" (но только исправные). Стоимость 27256 на с-петербугском радио-рынке - 1,3-1,5
доллара. 27512 я не прошиваю, т.к они плохо прошиваются и "дохнут как мухи".
При использовании 2-3 РФ2, необходимо применять доп.дешифратор ИД7,
формирующий чипселекты (18 или 20 ноги) в зависимости от адресов a11-А12 (от регистра
0fch),
как это было сделано в rom-диске. Вместо 27256 можно применять и
27128/2764, но
их покупать невыгодно, так как они стоят лишь на 10% дешевле, чем 27256.
Разумеется при применении 2-х 573РФ2, вторая ПЗУ напаивается сверху первой и
ставить более двух-трех РФ2 - некрасиво (и перегружает шину). Лучше купить
27256.
При покупке 27256 лучшими считайте ИМС с меньшими размерами кристалла
(93/94 г)
Чистяков Владимир, Санкт-Петербург, декабрь 1994 - март 1995
ps: На сегодняшний день разработано несколько пробных версий
альтернативного
rom-bios, с встроенным цветным (4/8/16 цв) драйвером, а также большим
количеством новых возможностей (в частности встроенная в bios простая система
для работы с файлами на эл. диске и дискетах- r-dos v1.0). Версии высылаются в
виде дампов и дискетами в конвертах. Для получения более подробной информации
пришлите
5 конвертов (один из них подписанный Вашим адресом). Возвращайте (если
это Вас
не затруднит) присылаемые мной, дампы и описания.
В.Чистяков, апрель 1995.
На предыдущую страницу На главную страницу На следующую страницу