page 60, 132 .386 title DOS Driver DGROUP group _DATA, CONST, _BSS, _TEXT _DATA segment word public 'DATA' assume ds:DGROUP ; DEVICE HEADER public _deviceheader org 0 _deviceheader label word next_dev dd -1 attribute dw 0e000h strategy dw DGROUP:_strategy interrupt dw DGROUP:_interrupt dev_name db 'ASAD ' ; REQUEST HEADER public _rhptr _rhptr equ $ rh_ofs dw ? rh_seg dw ? ; BIG STACK stack_ptr dw ? stack_seg dw ? newstack db 100h dup(?) newstacktop label word _DATA ends CONST segment word public 'CONST' assume ds:DGROUP CONST ends _BSS segment word public 'BSS' assume ds:DGROUP _BSS ends _TEXT segment word public 'CODE' assume cs:DGROUP,ds:DGROUP public _strategy _strategy proc far mov cs:rh_seg, es mov cs:rh_ofs, bx ret _strategy endp public _interrupt _interrupt proc far cld pusha ; new big stack cli mov cs:stack_ptr, sp mov cs:stack_seg, ss mov ax, cs mov ss, ax mov sp, newstacktop sti mov ax, cs:rh_seg mov es, ax mov bx, cs:rh_ofs mov ax, 0 mov al, es:[bx]+2 ; request hdr command push ax call _isr_in_c ; put old stack back cli mov ss, cs:stack_seg mov sp, cs:stack_ptr sti popa ret EXTRN _isr_in_c:near _interrupt endp _TEXT ends end