home *** CD-ROM | disk | FTP | other *** search
- ; Packet driver interrupt hooks
-
- .MODEL MEMMOD,C
- %MACS
- extrn pkint:proc
-
- .DATA
- extrn Stktop
-
- .CODE
- sssave dw ?
- spsave dw ?
- axsave dw ?
- dbase dw @Data
-
- ; pkvec0 - Packet driver receive call handler #0
- public pkvec0
- label pkvec0 far
- pushf ; save his interrupt state
- cli ; no distractions
- mov cs:sssave,ss ; stash user stack context
- mov cs:spsave,sp
- mov cs:axsave,ax ; save our AX register
-
- mov ss,cs:dbase ; set up interrupt stack
- lea sp,Stktop
- push ds ; save for caller
-
- mov ax,ss
- mov ds,ax
- mov ax,0 ; device #0
- push ax
- mov ax,cs:axsave ; Restore AX
- pushf ; make it look like an INTERRUPT
- call pkint
- jmp pkret
-
- ; pkvec1 - Packet driver receive call handler #1
- public pkvec1
- label pkvec1 far
- pushf ; save his interrupt state
- cli ; no distractions
- mov cs:sssave,ss ; stash user stack context
- mov cs:spsave,sp
- mov cs:axsave,ax ; save our AX register
-
- mov ss,cs:dbase ; set up interrupt stack
- lea sp,Stktop
- push ds ; save for caller
-
- mov ax,ss
- mov ds,ax
- mov ax,1 ; device #1
- push ax
- mov ax,cs:axsave ; Restore AX
- pushf ; make it look like an INTERRUPT
- call pkint
- jmp pkret
-
- ; pkvec2 - Packet driver receive call handler #2
- public pkvec2
- label pkvec2 far
- pushf ; save his interrupt state
- cli ; no distractions
- mov cs:sssave,ss ; stash user stack context
- mov cs:spsave,sp
- mov cs:axsave,ax ; save our AX register
-
- mov ss,cs:dbase ; set up interrupt stack
- lea sp,Stktop
- push ds ; save for caller
-
- mov ax,ss
- mov ds,ax
- mov ax,2 ; device #2
- push ax
- mov ax,cs:axsave ; Restore AX
- pushf ; make it look like an INTERRUPT
- call pkint
- jmp pkret
-
- ; common return for all packet drivers
- label pkret near
- pop ax ; pop dev # arg
- pop ds ; restore for caller
-
- mov ss,cs:sssave
- mov sp,cs:spsave ; restore original stack context
- popf
- retf
-
- end
-