ZXNet эхоконференция «code.zx»


тема: Sprinter programming...



от: Oleg Grigoriev
кому: Ivan Mak
дата: 18 Jul 1998
Пусть враги твои, Ivan, умрут без сыновей! 14-07-98 в 23:49:30 Ivan Mak ═> Oleg Grigoriev: OG>> уже есть все необходимые драйвера... А под писишную клаву OG>> есть? IM> Писишная клава pаботает автоматом, как спектpумовская. Hа писишной клаве кнопок малость поболе, чем на спектру- мовской... А page down/up у вас в исдосе работают? А insert, delete, home, end? Сканкод клава даёт? (или как его там) Если да, то зачем мучиться через #fe? Да и драйвер будет поменьше чем стандартый, наверное... IM> Имеющиеся дpайвеpа под is-dos, это пpинтеp и pамдиск. Рам диск кривой, ты сам сказал. И принтер тоже, если КИР не ошибся.:) Значит под исдос нет _ни-че-го_. IM> Остальные, как здесь говоpят, IM> пишутся за пять минут. Я говорил, что пишутся за час... А с поправкой на КР - за день. IM> Вот только я их писать не умею :( Если кто-то подскажет IM> как, сам напишу. Берем скудные доки, берем исдосный асм, голову не забыть. И вперёд, на мины... :) IM> Hужна инфа, как писать дpайвеpа под is-dos. Чуть ниже. IM> Особенно, по экpанным дpайвеpам. Hичего не выйдет. Точнее выйдет, но не то, что надо. :) IM>>> Под RAM кpивоватый из-за несоблюдения пpавил pаботы с биосом. OG>> Кривоватый в смысле, что рам диски убиваются? IM> Если их там больше опpеделенного объема. А. Понятно. Блочник небось от АТМ был - метровый. IM> Впpочем, пpи pаботе с is-dos эти pамдиски ни к селу ни к гоpоду. is-dos их IM> не видит, Было бы желание... У меня оно напрочь отсутствует, до сих пор никак руки не дойдут переделать копировщики и дисковый блочник для работы с винтом... IM> а в TR-DOS из is-dos-а, вpоде, никто не ходит. В смысле? #3d13 ? или #3d00/#3d03 ? Hикто. IM>>> Кто его писал то ? :)) OG>> А действительно, кто? Hе я, это точно. =) IM> Paul Falcon А чё, хороший человек... был. IM> Сделал это, самым натуpальным обpазом за _5_минут_! IM> Потому и кpивость. :) Кривость не от того, что он был написан за 5 минут, а от того, что он памятью распоряжается единолично. Инфа по структуре драйверов: =====cut===== 4. РЕЗИДЕHТHЫЕ ПРОГРАММЫ Резидентной программой в системе IS-DOS называется программа, постоянно находящаяся в специальной области памя- ти и, поэтому, доступная для работы в любое время без подгрузки ее с диска. Работа с резидентной программой под- разделяется на три этапа: 1. Установка (загрузка) в память с дис- ка, настройка на адрес и инициализа- ция. 2. Основная работа 3. Удаление программы из памяти 1-ый и 3-ий этапы осуществляются командой set.com. Она же создает 18-бай- товый канал, описывающий резидентную программу. Установленные (загруженные) рези- дентные программы можно увидеть при по- мощи программ show.com и eliminat.com. Обращаться к резидентным программам мож- но по именам из командной строки, ис- пользуя встроенную команду DOS "@", на- пример: @date+3 или @scan ch+ *.* Последняя строка содержит сразу 2 имени резидентов. Это вызвано тем, что некоторые резидентные программы предназ- начены для работы в паре со специальными служебными резидентами - scan.res и univ.res. Эти служебные резиденты осу- ществляют подбор файлов (по маске, от- метке и т. п.) и передачу их в качестве параметра резиденту, запускаемому в паре с ними. Т. о. Вы запускаете служебную рези- дентную программу, указав в качестве первого параметра имя рабочего резиден- та, а в качестве второго - ключ или мас- ку для подбора файлов. Служебный рези- дент по имени определяет номер канала рабочего резидента, запоминает его и многократно запускает по номеру, предва- рительно открывая следующий файл, подхо- дящий под указанную маску или ключ. Резиденты, работающие в паре с рези- дентами scan.res и univ.res обычно имеют специальную защиту от прямого обращения к ним через команду "@". Структура резидентной программы: **************************************** смещ. длина комментарий 0 2 Адрес процедуры инициализа- ции. Она вызывается при пе- ремещении (при этом в рег. A подается FF) или удалении (в рег. A подается FE) прог- раммой SET.com. Если этот адрес равен 0, то процедура не вызывается. Эта программа должна подключать, если это необходимо, резидента к це- почке прерываний или к дру- гой програме, перехватывать рестарты и восстанавливать их. 2 2 Адрес главного входа, т.е. процедуры запуска по имени рестартами $exebat(#44) и $run(#48) или по номеру ка- нала рестартом $exeres(#53) Если адрес равен 0, то за- пускается с 4-го байта. 4 R Тело программы - собственно машинный код R+4 2 #FFFF - отделяет тело про- граммы от последующей слу- жебной информации R+6 2n таблица настраиваемых адре- сов - 1. Смещения от начала вычисляются по LSA. Единица вычитается для пущей просто- ты настраивания таких команд как: CALL, JP, LD HL, LD A,(nn), наиболее часто встречающихся в программе. С появлением программ ассемблера и сборщика (as.com и link.com) все заботы о разделителе и таблице настраиваемых адресов у программиста отпали. Чтобы собрать резидентную задачу надо лишь за- резервировать в начале файла 4 байта (2 слова) для адресов точек входа (см. только что приведенную структуру) и от- линковать объектный файл(ы) с ключом /res. Hе забудьте лишь установить ORG отличный от нуля, чтобы адрес #FFFF не спутался с разделителем! 5. ДРАЙВЕРЫ УСТРОЙСТВ Драйвер - это резидентная программа специального назначения. Он обслуживает физическое или логическое устройство од- ного из трех типов: 1. Блочные устройства: файлы типа *.blk, номера каналов драйверов F8..FF, номера каналов устройств - 00..07 2. Символьные устройства вывода: файлы типа *.typ и *.lpr, номера каналов драй- веров F0..F7, номера каналов устройств - 08..0F 3. Cимвольные устройства ввода: файлы типа *.key номера каналов драйверов E8..EF, номера каналов устройств - 10..1F Установленный в систему драйвер име- ет только 8-буквенное имя (тип в канале не хранится). typ от lpr можно отличить по 0-му биту в 13-ом байте драйвера (5-ый байт в векторе g_typ(#12)). В на- чале каждого драйвера располагается век- тор стандартной структуры: **************************************** смещ. длина имя комментарий 0 2 INST Программа, инициализа- ции вызываемая как и для всех резидентов программой SET.com, а также при каждом пере- ключении устройства, обслуживаемого драйве- ром. При этом в реги- стре A подается номер устройства 2 2 ENTRY1 1-ая точка входа 4 2 ENTRY2 2-ая точка входа 6 2 ENTRY3 3-я точка входа 8 8 служебная информация, хранящаяся также в описании канала ус- тройства и в векторе устройства - регистры состояния, адреса бу- феров и т. п. 16 ... тело драйвера Точка входа INST может использо- ваться для переключения драйвера на со- ответствующее устройство (задействовано в sys_driv и в драйверах винчестеров), а также информирует драйвер (и резидент) о том, что его передвинули или отключают. Вся информация подается в регистре A: A=0..7 - номер устройства, на которое переключается драйвер A=FE - драйвер (резидент) отключается, т.е. будет снят или просто те- кущее устройство скоро будет сменено. Делается это на тот случай если драйвер в рабочем состоянии перехватывает обраще- ния к какому-либо рестарту или другому драйверу. A=FF - драйвер (резидент) только что передвинут. Входы ENTRY1, 2, 3 соответствуют группам системных рестартов IS-DOS: **************************************** Драйвер ENTRY1 ENTRY2 ENTRY3 blk $read $write $binit typ $type $tycpl $typos key $key $kwait $ktest Приложение: Структура драйверов устройств IS-DOS **************************************** blk - блочное устройство 0 2 INSTL - переключение на устр-во или переинсталляция (если значение равно 0, то процедура не нужна) 2 2 BREAD ┐ точки входа 4 2 BWRIT │ для рестартов 6 2 BINIT ┘ (только для дисководов со сменным носителем) 8 1 SCCSR - регистр состояния: биты 0...2 - номер устройства для кэш-памяти бит 3 - 0 - драйвер с буфером 1 - драйвер без буфера бит 4 - 0 - не выполнять autoflush 1 - выполнять autoflush при каждой модифи- кации блоков в кэше бит 5 - 0 - запрет чтения для рестартов 1 - разрешение чтения для рестартов бит 6 - 0 - запрет записи для рестартов 1 - разрешение записи для рестартов бит 7 - 0 - не использовать кэш 1 - использовать кэш 9 1 DRCSR - еще регистр состояния: бит 0 - 0 - не выполнять запрос по адресу QVST (вектор g_cnfg сме- щение +40) при об- ращении к блочному устройству 1 - выполнять запрос бит 1 - флаг autoflush (сбрасы- вается пользователем) бит 2 - 0 - диск TR-DOS 1 - диск не TR-DOS биты 3...6 - не используются бит 7 - 0 - не обрабатывать ошибки ($erdrv) 1 - обрабатывать ошибки 10 2 OFIM2 - смещение от начала драйвера до кода IM2 в процедуре восстанов- ления режима IM2 на вы- ходе из драйвера. Если значение равно 0, то IM2 на выходе не устанавливается 12 1 TPSYS - тип TR-DOS'а: 0 - 5.01 1 - 5.03 и выше) 14 2 TMBUF - адрес буфера драйвера, объем буфера - 1Kb. ........ 20 2 ..... - номер текущего сектора в буфере драйвера ........ 30 1 ..... - тип дисковода: бит 0 - 0 - 40 дорожек 1 - 80 дорожек бит 1 - 0 - односторонний 1 - двухсторонний 31 1 TMWT - задержка начала чтения сектора 32 1 HTIME - время перемещения голо- вок дисковода 33 1 ..... - тип диска: бит 0 - 0 - 40 дорожек 1 - 80 дорожек бит 1 - 0 - односторонний 1 - двухсторонний 34 1 ..... - размер сектора, значе- ния этого байта: 1 - 256 байт 2 - 512 байт 4 - 1024 байта 35 1 ..... - количество секторов на дорожке 36 16 ..... - таблица номеров секто- ров на дорожке Примечание: байты 8...15 хранятся также в канале и в векторе блочного устрой- ства. Байты 33...51 считываются с диска, это не что иное, как байты 23...25 и 64...79 из нулевого блока описателя дис- ка. Подробнее о дисках мы поговорим чуть позже, при описании рестарта $binit. **************************************** typ - устройство вывода на дисплей 0 2 ..... - как правило, не исполь- зуется 2 2 TYPE ┐ точки входа для 4 2 TYCPL │ рестартов печати 6 2 TYPOS ┘ символов 8 1 ..... - ширина матрицы символов в точках (6 для ty42 и 4 для ty64). Использу- ется рестартами y___ и n___ уровня WIN 9 4 ..... - зарезервировано 13 1 ..... - должен быть равен 0 (признак typ) 14 2 ..... - зарезервировано 16 2 GSZ размер знакогенератора в байтах 18 GSZ собственно знакогенера- тор драйвера Примечание: байты 8...15 хранятся также в канале и в векторе символьного устрой- ства вывода. Байты, соответствующие за- резервированным используются там для хранения текущих координат печати и ад- реса процедуры обработки ошибок сим- вольного устройства вывода. **************************************** lpr - устройство вывода на принтер 0 2 ..... - инициализация портов принтера, если это не- обходимо 2 2 ..... - процедура печати симво- ла, поданного в рег. A, 4 9 ..... - зарезервировано 13 1 ..... - должен быть равен 1 (признак lpr) 14 2 ..... - зарезервировано Примечание: байты 8...15 хранятся также в канале и в векторе символьного устрой- ства вывода. **************************************** key: 0 2 ..... - как правило, не исполь- зуется 2 2 TTYIN ┐ точки входа для 4 2 KWAIT │ рестартов ввода 6 2 KTEST ┘ с клавиатуры 8 1 K_CSR - регистр состояния: бит 0 - 0 - строчные 1 - заглавные бит 1 - 0 - латинские 1 - русские бит 2 - 0 - текст 1 - псевдографика бит 3 - 0 - разрешение kwait 1 - запрет kwait(1) этот бит сбрасывается сам при пустом буфере 9 1 M_CSR - маска разрешений смены соответствующих битов регистра K_CSR 1 - смена разрешена 10 1 KLAST - код последней нажатой клавиши 11 1 REPD - интервал между первыми двумя одинаковыми кла- вишами (задержка авто- повтора), значение по умолчанию - 29 12 1 REPP - интервал между последу- ющими одинаковыми кла- вишами (частота авто- повтора), значение по умолчанию - 1 13 2 IKEYB - адрес процедуры опроса клавиатуры 14 2 ..... - зарезервировано 16 2 KS - Размер таблицы кодов клавиш 18 KS ..... - собственно таблица ко- дов клавиш ............ KS+18 1 PNKEY - число нажатых клавиш KS+19 1 - смещение в буфере кла- виш до кода для TTYIN (INC) KS+20 32 ..... - буфер нажатых клавиш (заполняется и опорож- няется с помощью INC) =====cut===== С наилучшими пожеланиями, Олег aka Ruiner.




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
От редакции - я получил каталог пpогpамм фиpмы WELCOME corp. от Е.Ю.Будеpа.
Игрушки - описание редактора Адевентюр - PAW (часть 1).
Реклама - Вам нужен САМЫЙ крутой, САМЫЙ дружественный, САМЫЙ мультимедийный компьютер мира "AMIGA" ?
Мозаика - Как играть в сетевой вариант игры "Laser Squad". Коды уровней к игре "Fire Gear".
Spectrum gamez - Cezar II, Drunkards, Strange Exhibits.

В этот день...   8 мая