Turbo Assembler Version 2.51 11/21/96 15:03:04 Page 1 ACCTYPE.ASM 1 ; acctype.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:04 Page 2 ACCTYPE.ASM 1 58 *00E ACCESS_TYPE_STRUCT ENDS 1 59 1 60 1 61 ;**************************** MACROS ************************************** 1 62 1 63 64 65 PUBLIC acctype 66 67 0000 .CODE 68 69 0000 acctype PROC 70 71 ARG int_vect:WORD,access_type_ptr:FAR 72 LOCAL int_vect_addr:DWORD 73 USES bx,cx,dx,ds,es,si,di 74 1 75 0000 55 PUSH BP 1 76 0001 8B EC MOV BP,SP 1 77 0003 83 EC 04 SUB SP,0004h 1 78 0006 53 PUSH BX 1 79 0007 51 PUSH CX 1 80 0008 52 PUSH DX 1 81 0009 1E PUSH DS 1 82 000A 06 PUSH ES 1 83 000B 56 PUSH SI 1 84 000C 57 PUSH DI 1 85 000D 8B 46 04 mov ax,int_vect + 86 ; load interrupt vector number 87 0010 B1 02 mov cl,2H + 88 ; interrupt vect number * 4 89 0012 D3 E0 shl ax,cl 90 91 0014 8B D8 mov bx,ax + 92 ; offset into vector table 93 94 0016 BA 0000 mov dx,0000H 95 0019 8E C2 mov es,dx + 96 ; make ES point to segment of IVT 97 001B 26: 8B 0F mov cx,WORD PTR [es:bx] ; get + 98 offset 99 001E 89 4E FC mov WORD PTR [int_vect_addr],cx 100 0021 26: 8B 4F 02 mov cx,WORD PTR [es:bx+2] ; get segment 101 0025 89 4E FE mov WORD PTR [int_vect_addr+2],cx 102 103 0028 C4 5E 06 les bx,DWORD PTR [access_type_ptr] 104 002B 26: 8B 47 01 mov ax,WORD PTR [es:bx.if_type] 105 002F 50 push ax 106 0030 B4 02 mov ah,2H ; prepare to + 107 call access_type 108 0032 26: 8A 07 mov al,BYTE PTR [es:bx.if_class] 109 ; mov cx,WORD PTR [es:bx.typelen] 110 0035 B9 0000 mov cx,0H 111 0038 26: 8A 57 03 mov dl,BYTE PTR [es:bx.if_number] 112 003C 26: C5 77 04 lds si,DWORD PTR [es:bx.type_acc] 113 0040 26: C4 7F 0A les di,DWORD PTR [es:bx.receiver_ptr] 114 0044 5B pop bx Turbo Assembler Version 2.51 11/21/96 15:03:04 Page 3 ACCTYPE.ASM 115 116 0045 9C pushf 117 0046 FF 5E FC call DWORD PTR [int_vect_addr] 118 119 0049 73 05 jnc exit 120 004B F6 DE neg dh 121 004D 8A C6 mov al, dh 122 004F 98 cbw 123 124 0050 exit: 1 125 0050 5F POP DI 1 126 0051 5E POP SI 1 127 0052 07 POP ES 1 128 0053 1F POP DS 1 129 0054 5A POP DX 1 130 0055 59 POP CX 1 131 0056 5B POP BX 1 132 0057 8B E5 MOV SP,BP 1 133 0059 5D POP BP 1 134 005A C3 RET 0000h 135 005B ENDP 136 137 END Turbo Assembler Version 2.51 11/21/96 15:03:04 Page 4 Symbol Table Symbol Name Type Value ??DATE Text "11/21/96" ??FILENAME Text "ACCTYPE " ??TIME Text "15:03:04" ??VERSION Number 0205 @CODE Text _TEXT @CODESIZE Text 0 @CPU Text 0101H @CURSEG Text _TEXT @DATA Text DGROUP @DATASIZE Text 0 @FILENAME Text ACCTYPE @MODEL Text 2 @WORDSIZE Text 2 ACCESS_TYPE_PTR Number [DGROUP:BP+0006] ACCTYPE (_acctype) Near _TEXT:0000 BUFFER_SIZE Number 0800 BUSY Number 0001 DRIVER_FOUND Number 0001 DRIVER_NOT_FOUND Number 0000 EXIT Near _TEXT:0050 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:04 Page 5 Symbol Table Groups & Segments Bit Size Align Combine Class DGROUP Group _DATA 16 0000 Word Public DATA _TEXT 16 005B Word Public CODE