OS DOS V2.30 Орион-128, CP/M-80, описание BIOS

Орион Софт OS-DOS V2.30

Продаю платы и наборы микросхем, куплю микросхемы Купить программы, микросхемы, готовые блоки запчастей ПК Орион-128

Все версии CP/M-80

Все версии ORDOS

Все программы ORDOS

CMP/80 авторская cpm/80 2.30

OS DOS от Орион СОФТ,  CP/M-80, дискеты 3,5 и 5,25 дюйма - 720 к, эмулятор Готек

 Авторский контроллер НГМД. Мы собираем именно такой и на нем работаем.  Читайте про пакет Атлас. Также дискеты можно работать из ORDOS с пакетом программ Атлас. Атлас понимает формат файлов BRU.

Дискеты должны быть отформатированы в OS DOS (CP/M-80) программой FORMAT.COM

OrionSoft - Disk Operating System "OS-DOS" Версия V2.30,  1992г

BIOS  (c) 1992 OrionSoft точки входа в bios

Вход в bios осуществляется через таблицу входов размещенной начиная с адреса 0ac00h для данной версии os-dos.
Таблица состоит из 17 векторов, каждый из которых передает управление отдельной подпрограмме bios. Количество входов не может быть увеличено без нарушения совместимости.
Подпрограммы bios могут быть "пустыми" для определенных  функций (т.е. содержать одну команду ret), но в  таблице входов должны присутствовать все вектора.

Таблица переходов имеет следующий вид :

0ас00н jmp boot ; холодный старт системы
0ас03н jmp wboot ; перезапуск системы
0ас06н jmp const ; состояние клавиатуры
0ас09н jmp conin ; ввод с клавиатуры
0ас0cн jmp conout ; вывод на дисплей
0ас0fн jmp list ; вывод на принтер
0ас12н jmp punch ; выв. на устр.вывода
0ас15н jmp reader ; ввод с устр.ввода
0ас18н jmp home ; уст. дорожки 00
0ас1bн jmp seldsk ; выбор диска
0ас1eн jmp settrk ; уст. номера дорожки
0ас21н jmp setsek ; уст. номера сектора
0ас24н jmp setdma ; уст.адреса буф.обмена
0ас27н jmp read ; чтение сектора
0ас2aн jmp write ; запись сектора
0ас2dн jmp listst ; состояние принтера
0ас30н jmp sectran ; перекодировка секторов

Каждый адрес перехода соответствует конкретной  подпрограмме, которая выполняет определенную функцию.

Таблица переходов делится на три основные части :
- реинициализация системы ( вызовы boot и wboot )
- ввод-вывод байтовой информации (вызовы const, conin, conout, list, punch, reader и listst )
- блочный ввод-вывод для обмена с диском (вызовы home, seldsk, settrk, setsec, setdma, read, write и sectran )
Все операции ввода/вывода с переферийными устройсвами (за исключением дисковых операций) выполняются в коде ascii (кои-7), со сброшеным в 0 битом четности (d7). Условием конца текстового файла в dos авляется включение в файл кода (1ah) t.e. - ~z в коде ascii. периферийные устройства воспринимаются в dos как "логические" устройства и отображаются на физические устройства только посредством модуля bios.

Обмен с диском всегда осуществляется с помощью вызова определенных подпрограмм доступа к диску, которые выбирают диск, дорожку, сектор на диске и устанавливают адрес буфера обмена с диском. После того как эти параметры установлены, осуществляется обращение к функциям read или write для выполнения собственно операции ввода-вывода  с диском. Подпрограммы read и write выполняют три попытки прежде, чем возвратить признак ошибочного завершения операции (повтор необходим только для работы с реальными дисковыми накопителями). Подпрограмма home и settrk может выполняться с параметром "0".
Следует иметь ввиду, что обращение к функциям bios по строго привязанному адресу, при написании программ пользователя, считается не корректным. дело в том, что dos не может размещаться в строго обозначенных адресах. Все зависит от того, какой размер озу имеет компьютер и как адаптирована операционная система. Чтобы программа пользователя не имела жесткой привязки к особенностям os-dos, и была переносима на другие типы компьютеров, работающих под управлением cp/m v2.2, необходимо:

1. выяснить начало bios (wboot) в данной реализации os-dos (ср/м).
2. добавить смещение.
3. передать управление по вычисленному адресу.

Пример: вывод символа на дисплей через функцию - conout.

tv:lhld 0001h ; чит. адрес начала bios
; (wboot - горячий старт ср/м)
lxi d,0ch-3 ; смещение с поправкой
dad d ; адрес функции
pchl ; передать управление

Описание точек входа

boot - получает управление от загрузчика начального старта системы и отвечает за инициализацию  основной системы, включая выдачу сообщения о  запуске os-dos. После начальной инициализации параметров системы управление передается по  адресу 9600h ( в начальный адрес ccp) для  дальнейшей работы. Перед передачей управления b ccp, в регистр "c" заносится "0" для
выбора дисковода "а".

wboot - получает управление, при повторном старте системы, или когда программа пользователя передает управление в ячейку с адресом 0000h (стандартный способ окончания программ  пользователя в среде cp/m). При повторном старте os-dos должна загружаться в озу с системных дорожек диска вплоть до, но не включая bios. Параметры системы при повторном старте должны устанавливаться следующим образом:

- ячейки 0,1,2 - установить jmp wboot { 0ас03н }
- ячейки 5,6,7 - установить jmp bdos { 9е06н }

По завершении инициализации программа wboot  должна передать управление в сср (9600н)  устанавливается номер текущего дисковода для выбора после инициализации системы.

const - производит опрос активности клавиатуры и  возвращает в регистре а - 0ffh, если клавиша клавиатуры нажата, и 00h в противном случае (по выполняемой функции аналогична программе
0f812h из таблицы переходов программы "монитор").

conin - считывает символ с клавиатуры в регистр а, а до этого ожидает факта нажатия клавиши ( по выполняемой функции аналогична подпрограмме 0f803h из таблицы переходов "монитора").

conout - выводит символ из регистра с на экран дисплея ( по выполняемой функции аналогична подпрограмме 0f809h из таблицы переходов "монитора").

list - выводит символ из регистра с на печать.

pupnch - посылает код из регистра с на дополнительное устройства вывода.

reader - возвращает в регистре а код, считанный с дополнительного устройства ввода. признак конца файла - ctrl+z (1ah).

home - помещает головку выбранного дисковода на дорожку с номером 0. можно использовать подпрограмму settrk с параметром равным 0.

seldsk - выбирает дисковод, номер которого определяется содержимым регистра c, для  последующих операций ввода-вывода (c=0 - выбран дисковод "a", c=1 - выбран дисковод "b"  и т.д. До дисковода "р"). При каждом вызове, подпрограмма seldsk должна возвращать в регистровой паре hl адрес 16-ти байтовой таблицы, называемой таблицей описания диска ( disk parameter header). если делается попытка выбора несуществующего дисковода, то seldsk должна возвратить hl=0000h.

settrk - выбирает дорожку на диске по содержимому  регистровой пары вс ( обычно номер дорожки не превышает 80).

setsec - выбирает сектор на выбранной дорожке по содержимому регистровой пары bc ( обычно номер сектора не превышает 26).

setdma - устанавливает адрес буфера обмена с памятью для последующих операций ввода-вывода с диском по содержимому регистровой пары bc.

read - подпрограмма считывает один сектор с диска в озу начиная с адреса, установленного в  последней операции setdma и заканчивая этим адресом + 128 байт. Подпрограмма  возвращает следующие параметры :
a=00 - нет ошибок
a>0 - ошибка при считывании

write - подпрограмма записывает один сектор из озу (с адреса, определенного в последней операции setdma по этот адрес + 128 байт) на выбранный сектор выбранной дорожки выбранного диска (операции setdsk, settrk, setsec). Возвращаемые параметры аналогичны команде read.

listst - должна возвращать в а байт равный 00h

sectran - осуществляет преобразование логического номера сектора на диске в физический (используется для убыстрения доступа к информации на реальном диске ). Логический номер сектора должен передаваться подпрограмме в регистровой паре вс, а адрес таблицы перекодировки номеров секторов в регистровой паре de. результирующий номер физического сектора должен возвращаться подпрограммой в регистровой паре hl.

Распределение служебной области os-dos

в адресах 0000h - 0100h

0000-0002 jmp wboot ; горячий старт
0004 ds 1 ; номер текущего диска
0005-0007 jmp bdos ; системные вызовы
0038-003a jmp monitor ; обычно 0f800h
005c-007c fcb ; блок описания файла
0080-00ff dmabuf ; буфер обмена с диском

Описание дисковых накопителей в os-dos

Каждый дисковод должен иметь сопутствующий заголовок  параметров диска dph ( 16 байт ), который содержит информацию о данном дисководе и обеспечивает адрес сверхоперативного участка памяти для служебных целей bdos при обмене с диском.

Формат заголовка параметров диска

-------------------------------------------------------
i xlt i 0000 i 0000 i 0000 i dirbuf i dpb i csv i alv i
i 16b i 16b i 16b i 16b i 16b i 16b i 16b i 16b i
-------------------------------------------------------

16b - шестнадцать бит ( два байта )

xlt - адрес вектора пересчета номеров логических секторов в физические.

0000 - два байта для служебных целей bdos (начальное значение неважно ).

dirbuf - адрес 128-байтного участка озу для работы с оглавлением в bdos. Все dph адресуются к одному и тому же участку.

dpb - адрес блока параметров диска для данного дисковода. Дисководы с идентичными  характеристиками адресуются к одному и тому  же блоку параметров диска.

csv - адрес сверхоперативного участка озу, используемого для проверки контрольной суммы оглавления при смене диска в дисководе.  Размер этого участка должен быть 8 байт. Этот  участок памяти должен быть отдельным для каждого dph.

alv - адрес сверхоперативного участка озу, используемого bdos для сохранения информации о занятости диска. размер этого участка должен быть 32 байта для дисков емкостью до 255k байт. Этот участок должен быть различным для каждого dph.

Если в bios описано n дисководов, то все dph  располагаются в таблице, причем первая строка таблицы ( 16  байт ) соответствует дисководу 0 (a), а последняя - дисководу n-1 (...). Подпрограмма seldsk ответственна за возврат базового адреса dph для выбранного дисковода.

Блок параметров диска (dpb)

блок параметров диска имеет следующий формат :
-------------------------------------------------------------
i spt i bsh i blm i exm i dsm i drm i al0 i al1 i cks i off i
i 16b i 8b i 8b i 8b i 16b i 16b i 8b i 8b i 16b i 16b i
-------------------------------------------------------------
16b - шестнадцать бит
8b - восемь бит
spt - полное число секторов, расположенных на одной дорожке диска.
bsh - коэфицент сдвига блока распределения данных на диске.
значения bsh и blm , определяют размер группы данных bls , который не является элементом в  блоке параметров диска. при условии, что bls  выбрано, приводятся значения bsh и blm :

bls bsh blm
1024 3 7
2048 4 15
4096 5 31
8192 6 63
16384 7 127

exm - маска поля памяти
dsm - полный об'ем дисковода ( в группах ) значение exm зависит как от bls, так и от  того, превышает ли dsm число 255 :

bls dsm<255 dsm>255
1024 0 -
2048 1 0
4096 3 1
8192 7 3
16384 15 7

Значение dsm - на 1 меньше, чем максимальное  число групп данных на данном диске, измеряемое в единицах bls. bls*(dsm+1) - общее число байтов на данном диске, за исключением области для размещения операционной системы (системных дорожек).
drm - полное число записей в оглавлении. al0,al1  определяют зарезервированные блоки оглавления. элемент drm - на 1 меньше, чем общее число 32-x байтных элементов оглавления. Значения al0 и al1 определяются drm. их можно рассматривать как цепочку из 16 битов, как показано ниже :
-------------------------------------------------
i al0 i al1 i
i00 01 02 03 04 15 06 07i08 09 0a 0b 0c 0d 0e 0fi
-------------------------------------------------

Позиции 00 соответствует старший бит байта al0, а позиции 0f - младший бит байта al1. Каждый бит резервирует группу для записей оглавления - t.e. максимальный размер оглавления - 16 групп. каждая запись в оглавлении занимает 32 байта. ниже приведена  таблица зависимости числа записей от размера
группы :

bls число записей на 1 группу
1024 32
2048 64
4096 128
8192 256
16384 512

Таким образом, если drm=127 (128 записей оглавления), и bls=1024 (обычно), то на группу приходится 32-e записи, т.е. требуется зарезервировать 4 блока. В этом случае устанавливают 4 старших бита al0, следовательно: al0=f0 , al1=00.
cks - размер вектора проверки оглавления (обычно 8 байт). Значение cks определяется так: если среда дисковода сменная, то cks=(drm+1)/4, где drm - номер последней записи оглавления.  Если среда постоянная, то cks=0, и в этом случае никакие записи оглавления не проверяются.
off - число дорожек под размещение системы, резервируемых в начале физического диска. Это значение автоматически добавляется системой каждый раз, когда вызывается подпрограмма settrk , и может использоваться для пропуска дорожек с кодами операционной системы.

В. СУГОНЯКО 142440 Московская обл. п.Обухово, а/я 13. "ОРИОНСОФТ"

    

Купить платы, готовые блоки, наборы микросхем, прошитые ПЗУ, микропроцессоры на Орион-128, КР565РУ5В, КР565ру7В, к565ру5г AU, к565ру7г Au в позолоте, куплю микросхемы

 

Полезные и интересные статьи

На предыдущую страницу  На главную страницу  На следующую страницу