Turbo Assembler Version 2.51 11/21/96 15:03:08 Page 1 DRVRINFO.ASM 1 ; drvrinfo.asm 2 3 0000 .MODEL SMALL,C 4 5 INCLUDE snoop.inc 1 6 ; snoop.inc 1 7 1 8 ;*************************** EQUATES ************************************** 1 9 1 10 ;-------- DRVRINFO.ASM ------ 1 11 = 0000 DRIVER_NOT_FOUND EQU 0 1 12 = 0001 DRIVER_FOUND EQU 1 1 13 1 14 ;-------- PKTFIND.ASM ------- 1 15 = 0000 INTVECT_SEG EQU 0000h 1 16 = 0180 SWI_START EQU 0180h ; Start searching addrs at this offset 1 17 = 0200 SWI_END EQU 0200h ; Quit searching addrs at this offset 1 18 = 0008 PACKET_STR_SZ EQU 0008h ; Size of string 1 19 = 0003 SKIP_BYTES EQU 0003h ; Number of bytes to skip in string 1 20 1 21 ;-------- RECEIVER.ASM ------ 1 22 = 0800 BUFFER_SIZE EQU 2048 ; 2K buffer, ignoring length in CX 1 23 = 0000 IDLE EQU 0 ; receiver is IDLE 1 24 = 0001 BUSY EQU 1 ; receiver is BUSY 1 25 = 0000 FIRST_REQ EQU 0 ; which request is this: 1-fill buf 1 26 = 0001 SECOND_REQ EQU 1 ; 2-display buf 1 27 1 28 1 29 1 30 ;**************************** STRUCTURES ********************************* 1 31 1 32 ; linked list buffer structure 1 33 1 34 *000 PKTBUF_STRUCT STRUC 1 35 *000 01*(????) pktsize_flag dw ? 1 36 *002 01*(????????) buffer dd ? 1 37 *006 01*(????????) next dd ? 1 38 *00A PKTBUF_STRUCT ENDS 1 39 1 40 ;------ DRVRINFO.ASM ------ 1 41 *000 DRVR_INFO_STRUCT STRUC 1 42 *000 01*(??) drvr_functionality db ? 1 43 *001 01*(????) drvr_version dw ? 1 44 *003 01*(??) drvr_class db ? 1 45 *004 01*(??) drvr_number db ? 1 46 *005 01*(????) drvr_type dw ? 1 47 *007 01*(????????) drvr_name dd ? 1 48 *00B DRVR_INFO_STRUCT ENDS 1 49 1 50 ;------ ACCTYPE.ASM ------- 1 51 *000 ACCESS_TYPE_STRUCT STRUC 1 52 *000 01*(??) if_class db ? 1 53 *001 01*(????) if_type dw ? 1 54 *003 01*(??) if_number db ? 1 55 *004 01*(????????) type_acc dd ? 1 56 *008 01*(????) typelen dw ? 1 57 *00A 01*(????????) receiver_ptr dd ? Turbo Assembler Version 2.51 11/21/96 15:03:08 Page 2 DRVRINFO.ASM 1 58 *00E ACCESS_TYPE_STRUCT ENDS 1 59 1 60 1 61 ;**************************** MACROS ************************************** 1 62 1 63 64 65 PUBLIC drvrinfo 66 67 0000 .CODE 68 0000 drvrinfo PROC 69 ARG int_vect:WORD,drvr_info_ptr:FAR 70 LOCAL int_vect_addr:DWORD 71 USES ax,bx,cx,dx,ds,es,si 72 1 73 0000 55 PUSH BP 1 74 0001 8B EC MOV BP,SP 1 75 0003 83 EC 04 SUB SP,0004h 1 76 0006 50 PUSH AX 1 77 0007 53 PUSH BX 1 78 0008 51 PUSH CX 1 79 0009 52 PUSH DX 1 80 000A 1E PUSH DS 1 81 000B 06 PUSH ES 1 82 000C 56 PUSH SI 1 83 000D 8B 46 04 mov ax,int_vect ; load interrupt vector number 84 0010 B1 02 mov cl,2H ; interrupt vect number * 4 85 0012 D3 E0 shl ax,cl 86 87 0014 8B D8 mov bx,ax ; offset into vector table 88 89 0016 BA 0000 mov dx,0000H 90 0019 8E C2 mov es,dx ; make es point to segment of IVT 91 001B 26: 8B 0F mov cx,WORD PTR [es:bx] ; get offset 92 001E 89 4E FC mov WORD PTR [int_vect_addr],cx 93 0021 26: 8B 4F 02 mov cx,WORD PTR [es:bx+2] ; get segment 94 0025 89 4E FE mov WORD PTR [int_vect_addr+2],cx 95 96 0028 B4 01 mov ah,1H ; prepare to call pktdrvr 97 002A B0 FF mov al,0FFH 98 002C BB 0000 mov bx,0H 99 100 002F 9C pushf 101 0030 FF 5E FC call [int_vect_addr] 102 103 0033 53 push bx 104 0034 C4 5E 06 les bx,DWORD PTR [drvr_info_ptr] 105 106 0037 26: 88 07 mov BYTE PTR [es:bx.drvr_functionality],al 107 003A 58 pop ax 108 003B 26: 89 47 01 mov WORD PTR [es:bx.drvr_version],ax 109 003F 26: 88 6F 03 mov BYTE PTR [es:bx.drvr_class],ch 110 0043 26: 88 4F 04 mov BYTE PTR [es:bx.drvr_number],cl 111 0047 26: 89 57 05 mov WORD PTR [es:bx.drvr_type],dx 112 004B 26: 8C 5F 09 mov WORD PTR [es:bx.drvr_name+2],ds 113 004F 26: 89 77 07 mov WORD PTR [es:bx.drvr_name],si 114 Turbo Assembler Version 2.51 11/21/96 15:03:08 Page 3 DRVRINFO.ASM 115 0053 26: 8A 07 mov al,BYTE PTR [es:bx.drvr_functionality] 116 0056 3C FF cmp al,0FFH 117 0058 75 06 jne continue 118 005A B8 0000 mov ax,DRIVER_NOT_FOUND ; return 0 if al==255 119 005D EB 04 90 jmp exit 120 0060 continue: 121 0060 B8 0001 mov ax,DRIVER_FOUND ; return 1 if al!=255 122 0063 exit: 1 123 0063 5E POP SI 1 124 0064 07 POP ES 1 125 0065 1F POP DS 1 126 0066 5A POP DX 1 127 0067 59 POP CX 1 128 0068 5B POP BX 1 129 0069 58 POP AX 1 130 006A 8B E5 MOV SP,BP 1 131 006C 5D POP BP 1 132 006D C3 RET 0000h 133 006E ENDP 134 135 END Turbo Assembler Version 2.51 11/21/96 15:03:08 Page 4 Symbol Table Symbol Name Type Value ??DATE Text "11/21/96" ??FILENAME Text "DRVRINFO" ??TIME Text "15:03:08" ??VERSION Number 0205 @CODE Text _TEXT @CODESIZE Text 0 @CPU Text 0101H @CURSEG Text _TEXT @DATA Text DGROUP @DATASIZE Text 0 @FILENAME Text DRVRINFO @MODEL Text 2 @WORDSIZE Text 2 BUFFER_SIZE Number 0800 BUSY Number 0001 CONTINUE Near _TEXT:0060 DRIVER_FOUND Number 0001 DRIVER_NOT_FOUND Number 0000 DRVRINFO (_drvrinfo) Near _TEXT:0000 DRVR_INFO_PTR Number [DGROUP:BP+0006] EXIT Near _TEXT:0063 FIRST_REQ Number 0000 IDLE Number 0000 INTVECT_SEG Number 0000 INT_VECT Number [DGROUP:BP+0004] INT_VECT_ADDR Number [DGROUP:BP-0004] PACKET_STR_SZ Number 0008 SECOND_REQ Number 0001 SKIP_BYTES Number 0003 SWI_END Number 0200 SWI_START Number 0180 Structure Name Type Offset ACCESS_TYPE_STRUCT IF_CLASS Byte 0000 IF_TYPE Word 0001 IF_NUMBER Byte 0003 TYPE_ACC Dword 0004 TYPELEN Word 0008 RECEIVER_PTR Dword 000A DRVR_INFO_STRUCT DRVR_FUNCTIONALITY Byte 0000 DRVR_VERSION Word 0001 DRVR_CLASS Byte 0003 DRVR_NUMBER Byte 0004 DRVR_TYPE Word 0005 DRVR_NAME Dword 0007 PKTBUF_STRUCT PKTSIZE_FLAG Word 0000 BUFFER Dword 0002 NEXT Dword 0006 Turbo Assembler Version 2.51 11/21/96 15:03:08 Page 5 Symbol Table Groups & Segments Bit Size Align Combine Class DGROUP Group _DATA 16 0000 Word Public DATA _TEXT 16 006E Word Public CODE