|
|
1.1 root 1: / (lgl-
2: / COHERENT Driver Kit Version 1.1.0
3: / Copyright (c) 1982, 1990 by Mark Williams Company.
4: / All rights reserved. May not be copied without permission.
5: / -lgl)
6: ////////
7: /
8: / Tiac Network Assembler Support
9: /
10: / tngetc( np ) -- get a character from a tiac network buffer
11: / tnputc( np, c) -- put a character into a tiac network buffer
12: / tucopy( np, up, n) -- copy n bytes from tiac buffer to user space
13: / utcopy( up, np, n) -- copy n bytes from user space to tiac buffer
14: /
15: ////////
16:
17: .globl tngetc_
18: .globl tnputc_
19: .globl tucopy_
20: .globl utcopy_
21:
22: ////////
23: /
24: / Tngetc ( np )
25: /
26: / Input: np = pointer to seg:offset pair for tiac network buffer
27: /
28: / Action: Read character from network buffer, increment offset.
29: /
30: / Return: Character.
31: /
32: ////////
33:
34: tngetc_: / tngetc( np )
35: push si / char **np;
36: push bp / {
37: mov bp, sp / register char c; /* AX */
38: mov bx, 6(bp) / register char *cp; /* SI */
39: push ds /
40: lds si, (bx) / cp = *np;
41: cld /
42: lodsb / c = *cp++;
43: pop ds /
44: mov (bx), si / *np = cp;
45: subb ah, ah /
46: pop bp / return( c );
47: pop si / }
48: ret
49:
50: ////////
51: /
52: / Tnputc ( np, c )
53: / char **np;
54: / char c;
55: /
56: / Input: np = pointer to seg:offset pair for tiac network buffer
57: / c = character to transfer
58: /
59: / Action: Transfer character C to network buffer, increment offset.
60: /
61: / Return: Character C.
62: /
63: ////////
64:
65: tnputc_: / tnputc( np, c )
66: push di / char **np; /* BX */
67: push bp / char c; /* AX */
68: mov bp, sp / {
69: mov ax, 8(bp) / register char *cp; /* DI */
70: mov bx, 6(bp) /
71: push es /
72: les di, (bx) / cp = *np;
73: cld /
74: stosb / *cp++ = c;
75: pop es /
76: mov (bx), di / *np = cp;
77: pop bp /
78: pop di / return c;
79: ret / }
80:
81: ////////
82: /
83: / utcopy( up, np, n )
84: / char * up;
85: / char **np;
86: / unsigned n;
87: /
88: / Input: up = offset in user data space for source data
89: / np = pointer to seg:offset pair for tiac network buffer
90: / n = number of bytes to transfer
91: /
92: / Action: Copy N bytes from user data space to network data space.
93: / Add N to network data space offset.
94: /
95: / Return: None.
96: /
97: ////////
98:
99: utcopy_: / utcopy( up, np, n )
100: push si /
101: push di / register char * up; /* SI */
102: push bp / register char ** np; /* BX */
103: mov bp, sp / register unsigned n; /* CX */
104: push ds /
105: push es / {
106: mov bx, 10(bp) / register char * cp; /* DI */
107: /
108: les di, (bx) / cp = *np;
109: /
110: mov si, 8(bp) / up;
111: mov ds, uds_ /
112: /
113: mov cx, 12(bp) / n;
114: /
115: cld /
116: clc /
117: rcr cx, $1 /
118: rep / for ( ; n != 0; --n )
119: movsw / *cp++ = *up++;
120: rcl cx, $1 /
121: rep /
122: movsb /
123: /
124: pop es /
125: pop ds /
126: mov (bx), di / *np = cp;
127: pop bp / }
128: pop di
129: pop si
130: ret
131:
132: ////////
133: /
134: / tucopy( np, up, n )
135: / char **np;
136: / char * up;
137: / unsigned n;
138: /
139: / Input: np = pointer to seg:offset pair for tiac network buffer
140: / up = offset in user data space for destination
141: / n = number of bytes to transfer
142: /
143: / Action: Copy N bytes from network data space to user data space.
144: / Add N to network data space offset.
145: /
146: / Return: None.
147: /
148: ////////
149:
150: tucopy_: / tucopy( np, up, n )
151: push si /
152: push di / register char ** np; /* BX */
153: push bp / register char * up; /* DI */
154: mov bp, sp / register unsigned n; /* CX */
155: push ds /
156: push es / {
157: mov bx, 8(bp) / register char * cp; /* SI */
158: /
159: mov di, 10(bp) / up;
160: mov es, uds_ /
161: /
162: lds si, (bx) / cp = *np;
163: /
164: mov cx, 12(bp) / n;
165: /
166: cld /
167: clc /
168: rcr cx, $1 /
169: rep / for ( ; n != 0; --n )
170: movsw / *up++ = *cp++;
171: rcl cx, $1 /
172: rep /
173: movsb /
174: /
175: pop es /
176: pop ds /
177: mov (bx), si / *np = cp;
178: pop bp / }
179: pop di
180: pop si
181: ret
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.