Turbo Assembler Version 2.51 11/21/96 15:03:21 Page 1 RELTYPE.ASM 1 ; reltype.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:21 Page 2 RELTYPE.ASM 1 58 *00E ACCESS_TYPE_STRUCT ENDS 1 59 1 60 1 61 ;**************************** MACROS ************************************** 1 62 1 63 64 65 PUBLIC reltype 66 67 0000 .CODE 68 69 0000 reltype PROC 70 71 ARG int_vect:WORD,handle: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 03 mov ah,3H ; prepare to call release_type 99 002A 8B 5E 06 mov bx,handle 100 101 002D 9C pushf 102 002E FF 5E FC call DWORD PTR [int_vect_addr] 103 104 0031 B8 0000 mov ax, 0H ; set error status 105 0034 73 05 jnc exit 106 0036 F6 DE neg dh 107 0038 8A C6 mov al, dh 108 003A 98 cbw 109 110 003B exit: 1 111 003B 5F POP DI 1 112 003C 5E POP SI 1 113 003D 07 POP ES 1 114 003E 1F POP DS Turbo Assembler Version 2.51 11/21/96 15:03:21 Page 3 RELTYPE.ASM 1 115 003F 5A POP DX 1 116 0040 59 POP CX 1 117 0041 5B POP BX 1 118 0042 8B E5 MOV SP,BP 1 119 0044 5D POP BP 1 120 0045 C3 RET 0000h 121 0046 ENDP 122 123 END Turbo Assembler Version 2.51 11/21/96 15:03:21 Page 4 Symbol Table Symbol Name Type Value ??DATE Text "11/21/96" ??FILENAME Text "RELTYPE " ??TIME Text "15:03:20" ??VERSION Number 0205 @CODE Text _TEXT @CODESIZE Text 0 @CPU Text 0101H @CURSEG Text _TEXT @DATA Text DGROUP @DATASIZE Text 0 @FILENAME Text RELTYPE @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:003B 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] PACKET_STR_SZ Number 0008 RELTYPE (_reltype) 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:21 Page 5 Symbol Table Groups & Segments Bit Size Align Combine Class DGROUP Group _DATA 16 0000 Word Public DATA _TEXT 16 0046 Word Public CODE