Turbo Assembler Version 2.51 11/21/96 15:03:17 Page 1 SETRECV.ASM 1 ; setrecv.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:17 Page 2 SETRECV.ASM 1 58 *00E ACCESS_TYPE_STRUCT ENDS 1 59 1 60 1 61 ;**************************** MACROS ************************************** 1 62 1 63 64 65 PUBLIC set_recv 66 67 0000 .CODE 68 69 0000 set_recv PROC 70 71 ARG int_vect:WORD,handle:WORD,mode:WORD 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 ; load interrupt vector number 86 0010 B1 02 mov cl,2H ; interrupt vect number * 4 87 0012 D3 E0 shl ax,cl 88 89 0014 8B D8 mov bx,ax ; offset into vector table 90 91 0016 BA 0000 mov dx,0000H 92 0019 8E C2 mov es,dx ; make ES point to segment of IVT 93 001B 26: 8B 0F mov cx,WORD PTR [es:bx] ; get offset 94 001E 89 4E FC mov WORD PTR [int_vect_addr],cx 95 0021 26: 8B 4F 02 mov cx,WORD PTR [es:bx+2] ; get segment 96 0025 89 4E FE mov WORD PTR [int_vect_addr+2],cx 97 98 0028 B4 14 mov ah,14H ; prepare to call setrecv 99 002A 8B 5E 06 mov bx,handle 100 002D 8B 4E 08 mov cx,mode 101 102 0030 9C pushf 103 0031 FF 5E FC call DWORD PTR [int_vect_addr] 104 105 0034 exit: 1 106 0034 5F POP DI 1 107 0035 5E POP SI 1 108 0036 07 POP ES 1 109 0037 1F POP DS 1 110 0038 5A POP DX 1 111 0039 59 POP CX 1 112 003A 5B POP BX 1 113 003B 8B E5 MOV SP,BP 1 114 003D 5D POP BP Turbo Assembler Version 2.51 11/21/96 15:03:17 Page 3 SETRECV.ASM 1 115 003E C3 RET 0000h 116 003F ENDP 117 118 END Turbo Assembler Version 2.51 11/21/96 15:03:17 Page 4 Symbol Table Symbol Name Type Value ??DATE Text "11/21/96" ??FILENAME Text "SETRECV " ??TIME Text "15:03:16" ??VERSION Number 0205 @CODE Text _TEXT @CODESIZE Text 0 @CPU Text 0101H @CURSEG Text _TEXT @DATA Text DGROUP @DATASIZE Text 0 @FILENAME Text SETRECV @MODEL Text 2 @WORDSIZE Text 2 BUFFER_SIZE Number 0800 BUSY Number 0001 DRIVER_FOUND Number 0001 DRIVER_NOT_FOUND Number 0000 EXIT Near _TEXT:0034 FIRST_REQ Number 0000 HANDLE Number [DGROUP:BP+0006] IDLE Number 0000 INTVECT_SEG Number 0000 INT_VECT Number [DGROUP:BP+0004] INT_VECT_ADDR Number [DGROUP:BP-0004] MODE Number [DGROUP:BP+0008] PACKET_STR_SZ Number 0008 SECOND_REQ Number 0001 SET_RECV (_set_recv) Near _TEXT:0000 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:17 Page 5 Symbol Table Groups & Segments Bit Size Align Combine Class DGROUP Group _DATA 16 0000 Word Public DATA _TEXT 16 003F Word Public CODE