|
|
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.