Драйверы устройств в системе Windows


Драйвер устройства в системе MS-DOS


     На  листинге  1  показана  программа  dostest.asm, представляющая собой обычный драйвер устройства для системы MS-DOS, который  общается с устройством. Несмотря  на простоту и  малый размер данная  программа содержит   основные    компоненты   драйвера    устройства,    который обрабатывает прерывания.

_____________________________________________________________________

page ,132

; masm tisr ; >err

    .286p

.xlist

include ..\..\include\bogus.inc

.list

 

Words struc

LoWord dw ?

HiWord dw ?

Words ends

 

EOI equ 020h            ; команда EOI для контроллера PIC

 

INTA00 equ 020h         ; управление главным контроллером PIC

INTA01 equ 021h         ; регистр маски главного контроллера PIC

INT_MASTER_0 equ 08h         ;номер INT  главн. контроллера PIC

INTB00 equ 0A0h         ; управление подчиненным контроллером PIC

INTB01 equ 0A1h         ;регистр маски подчиненного контроллера  PIC

INT_SLAVE_0 EQU 70h         ; номер INT подчиненного контроллера PIC

;

; Установить переменные для нашего номера прерывания

;

ife (FAKE_IRQ GE 8)

INT_DEV equ (INT_MASTER_0+(FAKE_IRQ AND 7))

PIC00 equ INTA00

PIC01 equ INTA01

else

INT_DEV equ (INT_SLAVE_0+(FAKE_IRQ AND 7))

INT_MASK equ 1 SHL (FAKE_IRQ AND 7)

PIC00 equ INTB00

PIC01 equ INTB01

endif

 

CONST SEGMENT DWORD PUBLIC 'DATA'

sdNoBogus db 'I do not see the bogus device.',Odh,Oah,'$'

sdPrompt db Odh,Oah,'S)tart, or Q)uit: ','$'

sdCRLF  db Odh,Oah,'$'

sdDot  db '.','$'

 

CONST ENDS

 

DATA SEGMENT DWORD PUBLIC 'DATA'

dwCount1 dw 0

dwCount2 dw 0

lpPrevISR dd 0           ; адрес предыдущей программы ISR

fStopping db 0           ; значение TRUE при завершении

DATA ENDS

 

STACK SEGMENT DWORD STACK 'STACK'

    db  512 dup (?)

STACK ENDS

 

DGroup GROUP CONST,DATA,STACK

 

;IP IntSvcRtn - The Interrupt Service Routine (Программа

обслуживания

;                                              прерывания)

;   WARNINGS (предупреждения)

;




- Начало -  - Назад -  - Вперед -