Версии DOS V2.04, 2.05 (R1-R9), ACPM/80, Орион-128, CP/M-80
АCPM - Чистякова SP-Computer club
Продаю платы и наборы микросхем, куплю микросхемы
Авторский контроллер НГМД. Мы собираем именно такой и на нем работаем. Читайте про пакет Атлас.
Организация файловой структуры CP/M и проблемы развития CP/M ОРИОНА, от Чистякова
Версии DOS V2.04, 2.05 (R1-R9) являются промежуточными
Версии DOS V2.04, 2.05 (R1-R9) являются промежуточными , на которых
опробованы механизмы подключения драйверов стандартных и доп.устройств,
работа с
именами юзеров (чтение и запись), улучшенный модуль CCP (но
не-совместимый с SUB/SUBMIT от CP/M V2.2), введены доп.функции BDOS и BIOS для поддержки
новых устройств и функций. Впервые встроена функция МЕНЕДЖЕРА ПАМЯТИ, -
как функция BDOS (но требующая загрузки внешнего загружаемого драйвера BIOS
RSX.SYS
аналогично CP/M 3.0 Plus). Однако аппаратные прерывания V2.0X не
поддерживают
В версиях 2.04/Beta R4 (Records 4) и выше дополнительно встроен "ТИККЕР"
на
функциях BDOS. Это простейшее устройство позволяет иметь СИСТЕМНЫЙ
ТАЙМЕР,
даже не имея в системе 580ВИ53 (адрес F740, канал 2). Поэтому функция
TIMER
BIOS работает независимо от того, загружен или нет драйвер TIMER или
CLOCK.
Практически это реализовано следующим простейшим образом: При вызове
каждой
из функции DOS-BIOS автоматически происходит увеличение счетчика
системного
времени (SYSTEM TIME), разумеется для каждой функции на разное кол-во
"ТИКОВ"
Например вызов функций READ, WRITE, RESET (флажков настройки на формат
диска)
увеличивает системное время на 1, при вызове функции STATUS СИСТЕМНОЕ
ВРЕМЯ
изменяется только на 1/256 (т.е надо 256 вызовов BDOS, чтобы был 1 ТИК),
а
функции CONOUT, CONIN увеличивают SYSTEM TIMER на 1/10 за каждый вызов.
Таким образом работа любой программы CP/M приводит к непрерывной работе
ТИККЕРА
хотя "скорость работы" зависит от конкретной программы (т.е от того,
какие
конкретные функции DOS-BIOS работают в программе). При работе CCP такт
TIMERa получается примерно равным 5-10 Герц, но при работе других
программ может быть другим (естественно не-CP/M-программы, т.е не пользующиеся функциями
BDOS
дают нулевой такт TIMER-а). С помощью функции TIMER нельзя замерить
быстродействие ЭВМ (т.к это программный, а не аппаратный TIMER). Прикладная
программа
легко может определить какой вид TIMER-а работает в данный момент -
аппаратный или программный. Для работы программ это не особо важно.
Важно, что можно определять "реальное время", пусть и достаточно примерно... но для большинства случаев этого вполне достаточно (например что лучше: чтобы программа навечно "подвисла" ожидая готовность флопа, или все-же подождав 2-3 секунды выдала соответствующее сообщение). Естественно для тех, кто использует новые ROM-BIOS SP-Computer Club-a данная возможность не интересна, т.к наличие встроенной в ПЗУ F800 поддержки прерываний дает возможность иметь точный 50-ти герцовый такт ТИККЕРА на прерываниях. Аналогично для тех, кто имеет часы на БИС 512ВИ1 или системный TIMER на базе 580ВИ53 данная возможность будет излишней.
Но для большинства "жертв творчества"
В. Сугоняко,
запуганных им НЕСОВМЕСТИМОСТЬЮ с ОРИОН-СОФТ-ом, т.е "отвращенных" от любых доработок "базового
железа",
даже такая имитация будет весьма приятна (Не стоит забывать, что люди по
природе своей ленивы и как показывает опыт даже готовы сидеть без ПО, лишь
бы не
брать лишний раз в руки паяльник).
Итак, что нового имеется в ACP/M V2.0X?
Введено около 15 доп.функций BDOS, например: TIMER, DATE, CLOCK, MOUSE, DEVICE, NAME DSK (42), NAME FIL, XTMEM, CAT. Первые 4 из этих функций - это просто новые доп.устройства поддерживаемые DOS (ранее были только ФЛОПЫ, КОНСОЛЬ, ЛИСТЕР и ПУНЧЕР с РИДЕРОМ). Они есть в системе всегда (хотя и без загрузки соответствующие драйвера эти функции BDOS возвращают лишь "символические", бутафорские значения, т.е одну и ту-же дату, время и отсутствие "сдвига/нажатия" мыши и SYSTEM TIMER работает за счет ТИККЕРА BDOS). Функция DEVICE служит для загрузки 7 драйверов устройств поддерживаемых DOS (в некоторых "релизах" заглушены РИДЕР, ПУНЧЕР и ЛИСТЕР, и загрузка их драйверов осуществляется аналогично ACP/M V1.50-2.03). Функция XTMEM имеется также всегда, но работает только при наличии в системе файла-расширения DOS-RSX (он загружается автоматически, при загрузке DOS, перед обработкой CONFIG.SYS, а пользователь не имеет возможности его загрузить сам, в V2.10), а без этого возвращает ФЛАГ ошибки. Функции NAME и CAT предназначены для работы с именами юзеров, диска и "подкаталогами". Функция NAME позволяет получать/устанавливать имена для 14 юзеров и одного имени для всего диска. Функция CAT предназначена для управления вложенностью юзеров друг в друга. Однако большинство функций вообще заглушены и не работают вообще или частично (например во всех релизах есть функции чтения имен диска и юзеров, но запись есть только в версиях без поддержки электронного диска (в стандартном размере CP/M много не разметишь, нужен внешний RSX) - т.е стандартными ф-ями можно узнать имена юзеров и диска, но для записи надо использовать соотв.транзитные команды. Общее кол-во доп.ф-й BDOS - более 15, функций, но знать их все, а также доп.функции BIOS-а прикладному программисту не требуется. Впрочем есть одна новая функция BDOS, которая также может быть полезна программисту. Это фукция SYSINFO (41). Эта функция имеет много возможностей, но для прикладного программиста достаточно знать, что она удобно дает информацию о состоянии КОНСОЛИ: русск/латинск, верхн/нижн, шрифт, MODE, т.е режим вывода видеоадаптера (цвет 4/цвет 8/цвет 16/монохром), номер версии стандартного драйвера и даже положение курсора (и работает даже без RSX).
Интерфейс программиста со всеми старыми функциями BDOS оставлен без изменений, т.е функции 0-40 работают также, как и раньше в CP/M V2.2 (это и обеспечивает совместимость). То есть, как и принято в традиционной CP/M: при вызове BDOS регистр C содержит номер функции, передаваемый параметр в регистрах DE, а при возврате из BDOS возвращаемый параметр возвращается в регистре HL, а ФЛАГ возврата (т.е флаг ошибки или код каталога) возвращается в регистре А. Все остальные регистры (DE,BC) при возврате из ф.BDOS 0-40 не сохраняются !!!
Новые же функции работают по другому, теперь при вызове BDOS можно не только передавать любые доп.параметры в регистрах Z80, но и сохраняются регистры BC. Например в доп.устройства передаются номера подфункций (0,1,2... например установить время, сбросить секунды и т.п). Все доп.регистры Z80, кроме IXh также не портятся. Также и ФЛАГ ошибки в новых функциях другой, не аккумулятор равный 0FFh, а как положено в системном ПО информация о "успехе" передается в флажке CY. Наример функции DEVICE, XTMEM и другие подпрограммы передают входные выходные параметры не только в паре регистров (как в CP/M V2.2), но и в любых других регистрах. Теперь немножко информации о новых функциях BDOS.
XTMEM - без наличия в системе расширителя RSX.SYS вызов функции бесполезен. (но сама функция присутствует, поэтому достаточно только загрузить расширение DOS и сразу будет поддержка расширенной ПАМЯТИ ЭВМ). Включает нужный СЕГМЕНТ дополнительной памяти. Номер СЕГМЕНТА передается (традиционно) в регистре E. Если указанный номер превышает максимальный, то возвращается ФЛАГ ОШИБКИ (рег.A = FF) и текущий СЕГМЕНТ не переключается. При этом H содержит номер последнего СЕГМЕНТА дополнительной ПАМЯТИ, а регистр C - номер текущего СЕГМЕНТА (это для информации программе, т.е чтобы узнать обьем ПАМЯТИ или текущий СЕГМЕНТ, надо вызвать XTMEM с параметром FF). СЕГМЕНТЫ доп. нумеруются начиная с 1 (т.е 1,2,3...). СЕГМЕНТ 0 - это основное ОЗУ DOS (0-3FFF) NAME - Функция 43 - записать имя текущего юзера. Вход: HL - указатель на 8 байтов имени. Операция выполняется для текущего диска и приводит к непосредственной записи на диск. Выход: CY=1 когда все O'Kay, или 0, если попытка была неудачной (например дохлота диска или "заклейка").
Для юзеров 0 и 15 смена имен невозможна (0 - имя диска, 15 - SYSTEM). При записи имени 0-го юзера записывается также 14, а не 8 байт. Расположение на диске имени диска совместимо с ACP/M V2.0 и OS-DOS V2.60 Функция 42 - считать имя текущего юзера. При выходе HL указывает на 14 байтов имени и CY=1, и CY=0, если имени нет (HL неопределенно).
MOUSE - мышь или джойстик. Всегда возвращает значение. "Смещение" мыши передается в регистрах H и L. При отсутствии смещений биты D7 равны 1 a биты D0-D6 равны 0. Биты D0-D7 в регистре A дают информацию о кнопках мыши и джойстике. Взведенные биты в р.A информирует о том, что на кнопку нажимали с момента последнего опроса мыши. Регистр H и L отвечает за горизонтальные координаты. Регистр L соответственно за вертикальные перемещения крысы/мыши. Стоит заметить, что мыши и драйвера могут быть самыми разными (например мышь БК010 и ПОИСКА дает только один отсчет +/-1, корветовская/COMMODORE и "эпловская" мыши дают +/-7 а майкрософтовские мыши на RS232 имеют +/- 128. Естественно наибольший вес имеют старшие биты D6 (в HL). Программы должны настраиваться также на чувствительность мышей, т.е у одной мыши смещение на 5 СМ вызовет 100 отсчетов, а у другой только 20). На дискете записан "имитатор мыши" на курсорных клавишах, а также драйвер джойстика (СИНКЛЕРОВСКИЙ порт 1F). Естественно имеется полное соответствие битов D0-D4 синклеровскому джойстику, а левая кнопка крысы соответствует биту D7.
TIMER - Подфункция 0 возвращает в HL значение системного времени. Подфункция 1 сбрасывает счетчик до нуля. Стоит однако заметить, что счетчик в резидентном ТИККЕРЕ/TIMER-e сбрасывается не сразу, а только при наступлении очередного ТИКА (без потерь времени, это не во всех версиях) CLOCK - возвращает в HL время в IBM-мовском формате. Два байта - D0-D15. Назначение битов следующее: D0-D4 секунды (0-31) в 2-х секундных единицах. D5-D9,DA - минуты (0-63). DB,DC-DF - часы (0-31). При отсутствии аппаратных часов выдается постоянное время (время инсталяции версии DOS).
DATE - возвращает в HL дату в IBM-овском формате. D0-D4 - день (0-31). D5-D8 - месяц (0-15). D9-DF - год (текущий год - 1980).
DEVICE - Подфункция 0 - инсталляция драйвера. Подфункция 1 - выгрузка драйвера (с заменой его на резидентную заглушку).
Рег.А = 0. Инсталляция драйвера. Рег.Е - номер устройства для которого грузится драйвер. Рег.D - номер банки, где он "сидит". B регистрах
пары HL - адрес входа в драйвер (лучше если это и его начальный адрес !).
Рег.А = 1. В регистре E передается номер устройства, драйвер которого
отключается от системы. Параметров не возвращается (чтобы и все).
Стоит заметить, что сам модуль RSX исталирует себя функцией DEVICE. И
поэтому, чтобы исключить ошибочные ситуации и по ошибке не "грохнуть"
расширение BDOS, при обращении к устройsтву N5 (это DOS-RSX) дополнительно осуществляется проверка на "синхронизацию" версий RSX.
После инсталляции драйвера, при вызове соответствующей функции BDOS
управление
будет автоматически передаваться по адресу заданному при инсталляции (естественно в нужной банке ОЗУ). О том, чтобы "лазить" по наглому в ячейки
F300 надо
полностью забыть (а ячейки F200-F3FF вообще никакая наглая программа
использовать не должна - эти ячейки используются системой и векторами прерывания
INT).
ACP/M V2.0X содержат нестандартный CCP, поэтому не работают SUBMIT и
XSUB.
Этот CCP не содержит доп.команды VOL и имеет модифицированный редактор
командной строки, имеющий тимплет символов (т.е стрелки влево-вправо при
наборе,
причем работающие как с драйвером 480CNF, так и без него), работает
забой без
"эхо-печати", работает АР2 (ESC), и имеет буфер ввода с памятью на одну
предыдущую команду (клавиша <курсор вверх>. При выводе каталога выводятся
имена дисков и CCP поддерживает стандартный драйвер 480CNF3. Еще более лучший
редактор
командных строк имеет версия ACP/M V2.10 (использующий оверлейный модуль
CCP),
а в 2К стандартного размера CCP сделать больше функций достаточно
сложно.
В качестве доп.сервиса ACP/M V2.06/Beta (R1) имеет ЧАСЫ при работе в CCP.
То
есть при выходе в CCP автоматически включается вывод "бутафорских
часов". Они
показывают время в часах, минутах и секундах. При запуске программ вывод
часов
выключается (но время идет). При работе в CCP и текстовом редакторе,
часы идут
с точностью +/- 10-15 процентов, что несет достаточно информации для
пользователя (естественно, что при загрузке драйвера аппратных часов на 580ВИ53 часы
идут
абсолютно точно). Для установки времени этих "импровизированных"
программных
часов (а также часов на ВИ53 и др) служит простенькая программка
SETCLOCK.COM.
Входящая в дистрибутив ACP/M V2.05 программа DATE.SYS запрашивает при
старте
дату, устанавливает ее и записывает на дискету (при нажатии <ВК>
"берется" дата последней загрузки, а при нажатии <пробел> эта дата
увеличивается на 1 день). Несмотря на то, что DOS V2.0X не поддерживает XFCB с датами файлов,
даже
такая "примитивная" дата всей дискеты, весьма полезна для программиста.
И в
заключение несколько замечаний о "релизах". Если Beta-версии 2.04
распространились в незначительных количествах модификаций и имели лишь слегка
"угробленный" CCP (т.е отличный от фирменного), и чуть "поковырянный" BDOS, то
версии
2.05 разошлись в неимоверном количестве релизов, причем все имеют
совершенно
различный набор модулей CCP, BDOS и BIOS. Особенно следует опасаться "полудохлого релиза" 2.04/Beta R3. Дохлая версия отличается "ускоренным ходом"
системного тиккера, наличием в CCP команды VOL и "дохлотой" в BDOS...
Исправленная
версия этого "релиза" имеет улучшенную команду TYPE, стандартный BDOS
(т.е полное отсутствие доп.функций BDOS, хотя в BIOS есть большинство новых
функций)
и вместо команды VOL выводит имена дисков и юзеров по команде DIR, а
также
имеет доп.команду @ (причем в отличие от релиза 2, без "рестарта" при
@).
Опасайтесь дохлой версии R3 с командой VOL. Эта версия разошлась в Санкт-Петербурге и нескольких других городах. По характеру "дохлоты" она напоминает поведение первых "дохлых" версий М. Бриджиди (2.21,2.40,2.41) и причина "дохлоты" аналогичная (ошибка при "перемещении" BDOS на другие адреса). Дохлота проявляется в том, что регулярно "дохнет каталог" (примерно при 40-50 записи на диск, особенно при использовании малограмотных программ, т.е не делающих RESET при замене дисков). Для версии ACP/M 2.04/06 рекомендуется пользоваться улучшенной версией драйвера 480CNF V1.2-1.3 (но годятся любые драйвера 480C и даже монохромные "древние" драйвера 480 - они естественно не обеспечивают управление переключением шрифта 6*10/8*10). 480CNF2 имеет отличия в работе упр.кода ESC, 'N' (он "заплющен" и выкидывает координаты курсора в яч.F3D6/D7). Это важно для работы СИСТЕМНОГО ТАЙМЕРА. Все версии 2.04/6 отличаются всеми 3-мя модулями, и более ранние версии имеют совершенно отличающиеся "входы" и "стандарты". V2.04 и v2.05 выполнены полностью аналогично CP/M V2.2, т.е имеются в наличии все 3 модуля DOS: CCP, BDOS, BIOS, имеющие тот-же размер (естественно коды полностью отличаются - "уплющено" примерно на 10% и на свободное место встроено расширение и улучшения). Возможно, что ACP/M V2.04/6 без драйвера работоспособны даже без Z80CARD-II. Все последующие версии имеют оверлейные CCP и BDOS, "подкачивающие" оверлеи через диспетчер ОЗУ 16К и не могут поэтому работать без Z80- CARD-II. Модуль RSX.SYS V1.11 не может работать с версиями ACP/M ниже V2.05/R4 Но по драйверам "наблюдается" полная совместимость, хотя в некоторых "релизах" даже системные "заглушки" драйверов имеют "глюки", т.к версии ACP/M улучшаются.
Чистяков Владимир, Санкт-Петербург, декабрь 1995
На предыдущую страницу На главную страницу На следующую страницу