В.Ивинских первым в стране адаптировал ВСЕ игры КООП SP-580 для стандартного
СПЕЦИАЛИСТА (в т.числе Jet-Set) и сделал кучу системных программ. За пару дней, даже не имея НГМД, адаптировал для КР580 Manic-Miner от ZX-48. 80% игр сезона 1991-92 составляли игры
СПЕЦИАЛИСТА, что были адаптированы им для
ОРИОНА. Но самое смешное, что для
ОРИОНА он делал программы всего 1 месяц, причём даже не имея личного
ОРИОНА. Если бы с такой же эффективностью работали остальные программисты
ОРИОНА, то сейчас для него было бы 50 тысяч программ.
М3 стал известен раньше, чем был опубликован М2. Монитор М2 мы имели на месяц раньше, чем он был опубликован в ж.РАДИО 01.1991. Т.к М3 делал грамотный программист, то за счет более умелого программирования с'экономлено 150 байт (!) при одновременном улучшении параметров подпрограмм. В освободившееся место встроена подпрограмма ввода строки, CCP резидентного монитора и векторизация). К сожалению, не добавлена п/программа инициализации (это сделано в 1995, когда уже не было смысла).
Что касается версии М3 для МС7007, то она использует совместимую схему включения (что снимает проблему несовместимости с играми для РК-клавиатуры).
МОНИТОРЫ-3 работают по нажатию клавиш, а не по отпусканию (что в М2 - просто идиотизм, это единственный случай в мире, другого такого нет). Процедура сканирования клавиш в М3 - в 3 раза быстрее (а если бы не было диодов, то было бы в 15 раз быстрее, два считывания - и результат).
В М3 есть векторизация клавиатурных подпрограмм. Можно загрузить свой драйвер, любой своей клавиатуры (что я и делал загружая драйвер аппаратной клавиатуры
APPLE-II, дающей готовый ASCII-код, т.к моя клавиатура от РК86 была низкого качества на кнопках МП16).
Вывод символов происходит быстрее. Причём выводится символ 6*9, а не 6*8 (отчего маркировка строки инверсией в М2 выглядит глупо, т.к текст не по центру инверсии).
Смысл М3 был в М3-EXT, т.к тогда почти ни у кого еще не было ROM-дисков, а слово ORDOS считалось матерным. Т.е это даёт возможности МОНИТОРА-1, при сохранении подпрограмм ROM-BIOS от МОНИТОРА-2. Причём набор команд монитора может оперативно меняться - команды подгружаются. Например в 1991 были догружаемые команды HELP (выдает справочник по командам М3-EXT) и два мини-дизассемблера (для КР80 и Z80 запускаемые командой точка '.АДРЕС'). А после загрузки RAMDOS для ЭД, команды монитора также меняются - теперь часть команд для ОЗУ работает иначе: D-DIR, W-SAVE, X-EXE...
МОНИТОРЫ-3 для Z80 отличаются тем, что у них большой сплошной курсор, не перепутаешь.
МОНИТОРЫ-3 для Z80 имеют средства для автовозврата по сбросу. Достаточно заменить пару байтов и по сбросу ни в какую ORDOS Вы уже никогда не вернётесь. Будет стартовать тот код, что должен. Например программа "взломщика" или снимок экрана.
Код:
COLDST: LD HL, (0F3C1H) ; обслуживание автостарта
LD SP, 0F3BFH
POP BC
PUSH HL
SCF
ADC HL, BC
RET Z
Но главное, во всех МОНИТОРАХ-3 есть вектор INTA 0F3DFH, на который загружаются клавиатурные прерывания. Что позволяет иметь в драйверах управление сочетанием клавиш УС+СС + клавиша (удерживая УС и СС нажать клавишу). Тогда драйвер получается универсальным для МС и РК клавиатур, т.е драйверу не надо лезть в матрицу клавиш, чтобы реализовать управление (не занимая кодов клавиатуры). Драйверу и любой программе не надо знать какой конкретно тип клавиатуры у пользователя. От этого CP/M-драйвер получается универсальным. Сочетание УС+СС при М3 работает как одна доп.клавиша АЛЬТ в PC. Например, часто по УС+СС+K переключаются кодировки в драйверах КОИ-8 -> АЛЬТ -> КОИ-7.
Это даёт как бы кучу дополнительных клавиш, используемых в программах. В некоторых драйверах для банки 2, а впоследствии для ACP/M 1.6x встроен резидентный SHELL. Его работа выглядит так. В абсолютно любой программе (что пользуется для ввода клавиатурой) по нажатию УС+СС + М, в середине экрана открывается окно (объёмом в пол-экрана), включается цвет и Вы оказываетесь в RAM-мониторе с помощью которого можете "шариться" по всем банкам ОЗУ, менять байты. Закончив работу командой 'Q' Вы возвращаетесь в прерванную программу в ту же точку и продолжаете её использовать.
SHELL имеет оверлеи, которые может загрузить сам пользователь. В частности так грузится справочник по входам ROM-BIOS, по функциям BDOS CP/M, таблица ASCII и вообще любые справочные данные, которые Вам оперативно нужны в ходе работы. Шлите Ваш E-mail адрес - скину скрин-шоты, чтобы увидели как это выглядит.
SHELL полезен когда дохнет каталог. Без SHELL - ценному листингу в 100 кило на Вашей дискете при дохлоте каталога - "кранты". Все данные пропали.
Но с SHELL, Вы копируете дисковый буфер 2 Кб, содержащий каталог, ставите новую дискету, ^C, затем 'SAVE 8 DIR.DAT' Затем грузите DU, читаете уцелевшие сектора каталога, пишете их в файл. Из уцелевших секторов и считанного блока в 2К с помощью отладчика компонуете новый каталог. Теперь этот полностью восстановленный каталог можно записать как на обычное место каталога, так и на любой недохлый трек.
Для начала пробуем восстановить каталог на родном месте. Делаем быстрый формат, чтобы отформатировать каталог. Если это получилось, то с помощью DU.COM просто заносим восстановленный каталог туда, где он и был. И копируем нужный файл на хорошую дискету, а эту дискету сразу выбрасываем.
Но если трек каталога сдох насмерть, то и это не беда. C помощью DU.COM можно записать каталог в начало любого ненужного трека (например трек 2 (физически это трек 1 сторона 0). Если у Вас нет варианта CP/M не настраивающего формат дискеты по DPB из BOOT-сектора, то надо откорректировать DPB-диска, что находится в байтах 3...1F BOOT-сектора. Надо изменить число системных треков. При этом придётся пересчитать и контр.сумму (это арифм.сумма байтов DPB плюс 66H). Если у Вас нет калькулятора с HEX-режимом, то вручную складывать HEX-числа Вам будет сложно - но простенькая программка в 10 байт сделает это за миг. После изменения DPB любая CP/M
ОРИОНА будет читать каталог уже не с 4-го трека, а со 2-го, где Вы и разместили восстановленный каталог.
Но это не всё. Каталог на новом месте надо откорректировать. Так как номера блоков увеличатся на 2*5/2=5. То есть, во всех экстентах всех файлов надо увеличить номера блоков на 5. Если Вам нужен только один Ваш ценный файл исходника, над которым Вы работали 2 месяца, то достаточно откорректировать только его экстенты с помощью DU.COM. Это делается за 30 секунд труда. После этого Ваш ценный файл можно копировать. Ценные данные спасены.
Все вышеперечисленные работы, при некотором опыте, выполняются не более, чем за 5 минут. Это небольшая цена, чтобы спасти труд 2-х месяцев работы. Впрочем, преимущества М3 может оценить только тот, кто тратил 10 часов, чтобы из кучи фрагментов на диске восстановить погибший исходник (и это не всегда удавалось целиком).
Код:
Отрывки реального кода:
TXT: defb 13,10
defb 'SHELL-EXTENT vers 1.02 loaded at B0: B800..C3FF.',10,24H
BADDRV: RST 18H
defb 13,10
defb 'RAM conflict with current DRIVER !',13,10
defb 'Need free RAM B800...CFFF in Bank 0',13,10,0
RET
M80, если строка начинается с цифры или апострофа понимает строку как DEFB,
так что DEFB не обязателен. Т.е ниже это реально транслируемый кусок.
TXHELP: defb 0CH
' * Резидентный SHELL-MONITOR V1.03 (12.1990) *',13,10
' G<адрес> - старт (под)-программы (вып-ся CALL)',13,10
' D<нач.адр>,<кон.адр>,<банк> - дамп памяти ЭВМ',13,10
' M<нач.адрес>,<банк> - модификация ячеек ОЗУ',13,10
' F<нач.адр>,<кон.адр>,<байт> - заполнение ОЗУ',13,10
' T<нач.а>,<кон.а>,<адр.цели>,<банк> - пересылка',13,10
' P<н.а>,<к.а>,<исх.банк>,<пр.банк> копир.банок',13,10
' X<нач.а>,<кон.а>,<байт>,<банк> - поиск байта',13,10
' C<нач.а1>,<кон.а1>,<нач.а2> - сравнение ячеек',13,10
' K<нач.адр>,<кон.адр> - подсчет контрольн.суммы',13,10
' N<нач.адр>,<кон.адр> - подсчет RARITY-байта',13,10
' H<число1>,<число2> - выч. HEX-суммы и разности',13,10
' Y0/1 - цвет SHELL. E<F> - вызов функц.экстента',13,10
' V<мл.нбл:фон,ст.нбл:сим> - цвет в CP/M (или 0)',13,10
' ? - вывод этого HLP текста. Q - возврат в CP/M',0
Текст из одного загружаемого экстента справочника.
' Служебные ячейки ACP/M 1.6X',13,10,10
'RUSLAT 0F30EH а RUSLAT монитора (F3E5) это LOCK',13,10
'C_MODE 0F30FH COLOR FLAG (0-mono, FF-color)',13,10
'STRLEN 0F310H длина строки терминала',13,10
'TKODIR 0F311H кодировка: К7=0, К8=1, АЛЬТ=2',13,10
'DUBLFA 0F312H дубль порта FA',13,10
'DUBLF8 0F313H дубль порта F8',13,10
'IDENT 0F314H номер др-ра. Ст.нибл: шир.симв',13,10
'SYSTIM 0F315H 3 байта инкрементa пo STATUS',13,10 ; RANDOMIZE и программный счёт времени
'@ARDK 0F318H исходная копия яч. F3C7',13,10
'@ACOUT 0F31AH исходная копия яч. F3CD',13,10
'@AINT 0F31CH исходная копия яч. F3DF',13,10
'CHK 0F31EH к.сумма F318...F31D (+1)',13,10
'ACPM_F 0DCB7H опознаватели ACP/M (06,19,92)',0
[свернуть]