Turbo Assembler Version 2.51 11/21/96 15:03:12 Page 1 PKTFIND.ASM 1 ; pktfind.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:12 Page 2 PKTFIND.ASM 1 58 *00E ACCESS_TYPE_STRUCT ENDS 1 59 1 60 1 61 ;**************************** MACROS ************************************** 1 62 1 63 64 65 PUBLIC pkt_find 66 67 0000 .DATA 68 0000 50 4B 54 20 44 52 56+ packet_str DB 'PKT DRVR' 69 52 70 71 0008 .CODE 72 0000 pkt_find PROC 73 USES bx,cx,dx,ds,es,di,si 74 1 75 0000 53 PUSH BX 1 76 0001 51 PUSH CX 1 77 0002 52 PUSH DX 1 78 0003 1E PUSH DS 1 79 0004 06 PUSH ES 1 80 0005 57 PUSH DI 1 81 0006 56 PUSH SI 1 82 0007 B8 0000 mov AX,0H 83 84 000A BB 0180 mov bx,SWI_START ; move ISR offset ptr to bx 85 000D continue: 86 000D B9 0000 mov cx,INTVECT_SEG ; move ISR segment ptr to ds 87 0010 8E D9 mov ds,cx 88 ASSUME ds:INTVECT_SEG 89 90 0012 8B 3F mov di,[ds:bx] ; move ISR offset to di 91 0014 83 C3 02 add bx,2H 92 0017 8B 0F mov cx,[ds:bx] ; move ISR segment to es 93 0019 83 C3 02 add bx,2H 94 001C 8E C1 mov es,cx 95 96 001E BA 0000s mov dx,SEG packet_str 97 0021 8E DA mov ds,dx 98 ASSUME ds:SEG packet_str 99 0023 BE 0000r mov si,OFFSET packet_str 100 101 0026 83 C7 03 add di,SKIP_BYTES ; skip first 3 bytes 102 103 0029 B9 0008 mov cx,PACKET_STR_SZ ; length of string 104 105 002C F3> A6 repe cmpsb 106 107 002E 74 08 jz found 108 109 0030 81 FB 0200 cmp bx,SWI_END 110 0034 74 0B je exit 111 112 0036 EB D5 jmp continue 113 0038 found: 114 0038 8B C3 mov ax,bx Turbo Assembler Version 2.51 11/21/96 15:03:12 Page 3 PKTFIND.ASM 115 003A 2D 0004 sub ax,4H 116 003D B1 02 mov cl,2H 117 003F D3 E8 shr ax,cl 118 119 0041 exit: 1 120 0041 5E POP SI 1 121 0042 5F POP DI 1 122 0043 07 POP ES 1 123 0044 1F POP DS 1 124 0045 5A POP DX 1 125 0046 59 POP CX 1 126 0047 5B POP BX 1 127 0048 C3 RET 0000h 128 129 0049 pkt_find ENDP 130 131 END Turbo Assembler Version 2.51 11/21/96 15:03:12 Page 4 Symbol Table Symbol Name Type Value ??DATE Text "11/21/96" ??FILENAME Text "PKTFIND " ??TIME Text "15:03:12" ??VERSION Number 0205 @CODE Text _TEXT @CODESIZE Text 0 @CPU Text 0101H @CURSEG Text _TEXT @DATA Text DGROUP @DATASIZE Text 0 @FILENAME Text PKTFIND @MODEL Text 2 @WORDSIZE Text 2 BUFFER_SIZE Number 0800 BUSY Number 0001 CONTINUE Near _TEXT:000D DRIVER_FOUND Number 0001 DRIVER_NOT_FOUND Number 0000 EXIT Near _TEXT:0041 FIRST_REQ Number 0000 FOUND Near _TEXT:0038 IDLE Number 0000 INTVECT_SEG Number 0000 PACKET_STR Byte DGROUP:0000 PACKET_STR_SZ Number 0008 PKT_FIND (_pkt_find) Near _TEXT:0000 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:12 Page 5 Symbol Table Groups & Segments Bit Size Align Combine Class DGROUP Group _DATA 16 0008 Word Public DATA _TEXT 16 0049 Word Public CODE