|
|
1.1 root 1:
2: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
3:
4: rciolx Page 1-1
5:
6:
7: ;************************************************************************
8: ;* *
9: ;* rciol: direct 8250 communications interface for C *
10: ;* *
11: ;* prototypes: int rioini(int,int); initialize com,irq *
12: ;* int setbaud(int); set baud rate *
13: ;* *n/a int rioctl(int); remote i/o control *
14: ;* void dtr(char); set/reset dtr *
15: ;* int outcom(int); send character *
16: ;* int incom(void); receive character *
17: ;* *n/a int rioifc(int); local i/o redirection *
18: ;* *
19: ;************************************************************************
20:
21: ; this source file is lacking _rioctl and _rioifc
22:
23: 0000 biosda segment at 40h ;bios data area
24: 0000 biosda ends
25:
26: setmod %mm
27:
28: ; 8259 interrupt controller register equates
29:
30: = 0020 icr1 equ 20h ;interrupt command register (master)
31: = 0021 imr1 equ 21h ;interrupt mask register (master)
32: = 0008 ivb1 equ 8 ;vector base 0-7: cannot be read, assumed
33: = 00A0 icr2 equ 0a0h ;interrupt command register (slave)
34: = 00A1 imr2 equ 0a1h ;interrupt mask register (slave)
35: = 0070 ivb2 equ 70h ;vector base 8-f: cannot be read, assumed
36:
37: ; 8250 uart register equates
38:
39: = 0002 iir equ 2 ;interrupt identification register
40: = 0001 ier equ 1 ;interrupt enable register
41: = 000B ierd equ 0bh ;enable: rxd, thre, msr
42:
43: = 0006 msr equ 6 ;modem status register
44: = 0004 mcr equ 4 ;modem control register
45: = 000B mcrd equ 0bh ;irq enable, rts on, dtr on
46:
47: = 0005 lsr equ 5 ;line status register
48: = 0003 lcr equ 3 ;line control register
49: = 0003 lcrd equ 3 ;N,8,1 mode
50:
51: ; buffer pointer structure
52:
53: dstruc bufp,0
54: dss 2,bcnt ;character count
55: dss 2,bput ;next character to buffer
56: dss 2,bget ;next character from buffer
57: dss 1,ovfl ;overflow flag
58: dss 1
59: dss 2,bofst ;buffer offset
60: dss 2,bsize ;buffer size
61: dstruc bufp
62:
63: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
64:
65: rciolx Page 1-2
66:
67:
68: .data
69: public _plst
70:
71: align 2
72:
73: 0000 0001C200 brdd dd 115200 ;baud rate dividend
74:
75: 0004 00000000 iv16h dd 0 ;saved interrupt vector for int 16h
76: 0008 00000000 iv29h dd 0 ;saved interrupt vector for int 29h
77: 000C 00000000 ivsio dd 0 ;saved serial i/o vector
78:
79: 0010 0000 buart dw 0 ;uart base address
80: 0012 0000 lsrad dw 0 ;line status register port address
81: 0014 00 irqn db 0 ;interrupt request line
82: 0015 00 ircr db 0 ;saved interrupt controller mask
83: 0016 00 siovn db 0 ;serial i/o vector number
84:
85: = 0001 ic29h equ 1 ;int 29h is being intercepted
86: = 0003 ic29d equ 3 ;int 29h is being diverted
87: = 0010 ic16h equ 10h ;int 16h is being intercepted
88: 0017 00 intcp db 0 ;intercepted interrupt code
89:
90: 0018 00 opera db 0 ;operational (port defined, baud set)
91:
92: 0019 00 mode db 0 ;function enable (incl pause/abort cycles)
93: 001A 00 state db 0 ;operational state (must follow mode)
94: = 0002 hold equ 2 ;stop transmission
95: = 0004 abort equ 4 ;aborting
96: = 0010 ctsck equ 10h ;check clear to send signal (mode only, fixed)
97:
98: 001B 00 txintp db 0 ;transmit interrupt pending
99: 001C 00 status db 0 ;communications status
100: = 0001 rxlost equ 1 ;received characters lost
101:
102: 001D 00 align 2
103: = 0400 txbmx equ 1024 ;receive buffer maximum size
104: = 0400 rxbmx equ 1024 ;transmit buffer maximum size
105:
106: 001E _plst label word
107:
108: dv rxbp bufp,0 ;receive buffer pointers
109: dv txbp bufp,0 ;transmit buffer pointers
110:
111: dv rxb rxbmx,0a8h ;receive buffer
112: dv txb txbmx,0a8h ;transmit buffer
113:
114: 0836 00 tst db 0
115:
116: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
117:
118: rciolx Page 1-3
119:
120:
121: .code
122: public _rioini,_outcom,_incom,_dtr,_setbaud
123:
124: 0000 FFFF riods: dw -1 ;remote i/o routine data segment value
125:
126: ; initialize communications
127:
128: ; clear buffers, data, program uart, enable interrupts
129:
130: 0002 _rioini proc
131: 0002 55 push bp
132: 0003 8B EC mov bp,sp
133: 0005 56 push si
134: 0006 57 push di
135:
136: 0007 8B 46 06 mov ax,pb[bp] ;com port or uart address
137: 000A 0B C0 or ax,ax
138: 000C A1 0010 R mov ax,buart
139: 000F 75 07 jnz @f ;initialize
140: 0011 0B C0 or ax,ax
141: 0013 74 07 jz cierr ;error, not initialized
142: 0015 E9 00C6 R jmp finis ;terminate
143:
144: 0018 0B C0 @@: or ax,ax
145: 001A 74 06 jz cinit ;continue, not yet initialized
146: 001C B8 FFFF cierr: mov ax,-1
147: 001F E9 00F5 R jmp ciex ;return error
148:
149: 0022 8C D8 cinit: mov ax,ds
150: 0024 2E: A3 0000 R mov cs:riods,ax ;save data segment
151:
152: 0028 E8 010F R call ibfls ;clear input buffer
153: 002B C7 44 08 0036 R mov bofst[si],os rxb ;set receive buffer address
154: 0030 E8 0117 R call obfls ;clear output buffer
155: 0033 C7 44 08 0436 R mov bofst[si],os txb ;set transmit buffer address
156:
157: 0038 33 C0 xor ax,ax
158: 003A A3 0019 R mov mode,ax ;clear mode and state
159: 003D A2 001B R mov txintp,al ;clear int pending
160:
161: 0040 B8 ---- R mov ax,seg biosda
162: 0043 8E C0 mov es,ax
163: 0045 8B 5E 06 mov bx,pb[bp] ;com port or uart address
164: 0048 8B D3 mov dx,bx
165: 004A 4B dec bx
166: 004B 83 FB 04 cmp bx,4
167: 004E 73 0F jnc scport ;com port address specified
168:
169: 0050 83 E3 03 and bx,3 ;com 0-3 for 1-4
170: 0053 03 DB add bx,bx ;offset (x 2)
171: 0055 26: 8B 17 mov dx,es:[bx]
172: 0058 0B D2 or dx,dx
173: 005A 75 03 jnz scport ;port exists
174: 005C E9 00E8 R jmp ciabt ;no such com port
175:
176: 005F 89 16 0010 R scport: mov buart,dx ;uart base address
177:
178: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
179:
180: rciolx Page 1-4
181:
182:
183: 0063 83 C2 05 add dx,lsr
184: 0066 89 16 0012 R mov lsrad,dx ;line status register
185:
186: ; mov al,pb[bp+4] ;hardware flow control
187: ; and al,1
188: ; jz girq
189: ; or mode,ctsck ;check cts
190:
191: 006A 8A 46 08 girq: mov al,pb[bp+2] ;irq line
192: 006D 24 07 and al,7
193: 006F 75 04 jnz irqv ;valid
194: 0071 24 01 and al,1
195: 0073 04 03 add al,3 ;assume 4 for 1, 3 for 2
196: 0075 A2 0014 R irqv: mov irqn,al
197: 0078 8A C8 mov cl,al
198: 007A B0 01 mov al,1
199: 007C D2 E0 shl al,cl ;mask for current irq line
200: ; mov irqm,al
201: 007E 8A E0 mov ah,al
202: 0080 50 push ax ;save irq mask
203: 0081 E4 21 in al,imr1
204: 0083 A2 0015 R mov ircr,al ;save prior enable mask
205: 0086 0A C4 or al,ah
206: 0088 E6 21 out imr1,al ;inhibit interrupts
207: 008A 8A C1 mov al,cl ;irq number
208: 008C 04 08 add al,ivb1 ;add vector base
209: 008E A2 0016 R mov siovn,al ;save sio vector
210: 0091 E8 00F9 R call gvect ;get prior vector in dx:bx
211: 0094 89 1E 000C R mov ivsio,bx
212: 0098 89 16 000E R mov ivsio+2,dx ;save prior vector
213: 009C 0E push cs
214: 009D 5A pop dx
215: 009E BB 01C7 R mov bx,os sioisr
216: 00A1 E8 0102 R call svect ;set service routine vector in dx:bx
217:
218: 00A4 8B 16 0010 R mov dx,buart
219: 00A8 ED in ax,dx ;clear%
220: 00A9 83 C2 04 add dx,mcr
221: 00AC B0 0B mov al,mcrd
222: 00AE EE out dx,al ;modem control register
223: 00AF 4A dec dx
224: 00B0 B0 03 mov al,lcrd
225: 00B2 EE out dx,al ;line control register
226: 00B3 4A dec dx
227: 00B4 4A dec dx
228: 00B5 B0 0B mov al,ierd
229: 00B7 EE out dx,al ;interrupt enable register
230:
231: 00B8 58 pop ax ;irq mask
232: 00B9 E4 21 in al,imr1
233: 00BB F6 D4 not ah
234: 00BD 22 C4 and al,ah
235: 00BF E6 21 out imr1,al ;enable interrupts
236:
237: ; mov mw cs:mv2,1234h
238: ; xor ax,ax
239:
240: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
241:
242: rciolx Page 1-5
243:
244:
245: ; mov si,os inims
246: ; call msout
247:
248: 00C1 33 C0 xor ax,ax ;return 0
249: 00C3 EB 30 90 jmp ciex ;exit
250:
251: ; terminate serial i/o operation
252:
253: 00C6 8B 16 0010 R finis: mov dx,buart
254: 00CA 83 C2 04 add dx,mcr
255: 00CD 32 C0 xor al,al
256: 00CF EE out dx,al ;dtr off, release irq line
257:
258: 00D0 A0 0016 R mov al,siovn ;serial i/o vector
259: 00D3 8B 1E 000C R mov bx,ivsio ;prior offset
260: 00D7 8B 16 000E R mov dx,ivsio+2 ;prior segment
261: 00DB E8 0102 R call svect ;replace original vector
262:
263: 00DE A0 0015 R mov al,ircr
264: 00E1 E6 21 out imr1,al ;replace prior interrupt controller mask
265: 00E3 33 DB xor bx,bx
266: 00E5 EB 04 90 jmp cterm ;return 0
267:
268: 00E8 BB FFFF ciabt: mov bx,-1
269: 00EB 33 C0 cterm: xor ax,ax
270: 00ED A3 0010 R mov buart,ax ;not initialized
271: 00F0 A2 0018 R mov opera,al ;not operational
272: 00F3 8B C3 mov ax,bx ;return code
273: 00F5 5F ciex: pop di
274: 00F6 5E pop si
275: 00F7 5D pop bp
276: 00F8 CB ret
277:
278: 00F9 _rioini endp
279:
280:
281: ; get interrupt vector al in dx:bx
282:
283: 00F9 06 gvect: push es
284: 00FA B4 35 mov ah,35h
285: 00FC CD 21 int 21h ;returns vector in es:bx
286: 00FE 06 push es
287: 00FF 5A pop dx ;segment
288: 0100 07 pop es
289: 0101 C3 ret
290:
291: ; set interrupt vector al in dx:bx
292:
293: 0102 1E svect: push ds
294: 0103 52 push dx
295: 0104 8E DA mov ds,dx ;segment
296: 0106 8B D3 mov dx,bx ;offset
297: 0108 B4 25 mov ah,25h
298: 010A CD 21 int 21h ;takes vector in ds:dx
299: 010C 5A pop dx
300: 010D 1F pop ds
301:
302: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
303:
304: rciolx Page 1-6
305:
306:
307: 010E C3 ret
308:
309:
310: ; flush buffers
311:
312: 010F BE 001E R ibfls: mov si,os rxbp ;address input buffer pointers
313: 0112 BB 0400 mov bx,rxbmx ;set maximum size
314: 0115 EB 06 jmp s xbfls
315: 0117 BE 002A R obfls: mov si,os txbp ;address output buffer pointers
316: 011A BB 0400 mov bx,txbmx ;set maximum size
317:
318: ; si -> bufp structure, bx = maximum size
319:
320: 011D B9 0004 xbfls: mov cx,os bofst/2 ;pointer list length
321: 0120 9C pushf
322: 0121 FA cli
323: 0122 56 push si
324: 0123 33 C0 xor ax,ax
325: 0125 F3/ AB rep stosw ;clear pointers
326: 0127 5E pop si
327: 0128 89 5C 0A mov bsize[si],bx
328: 012B 9D popf
329: 012C C3 ret
330:
331:
332: ; get character from buffer, ds:si -> pointers, saves cx, dx
333:
334: 012D 8B 04 bgetc: mov ax,bcnt[si]
335: 012F 0B C0 or ax,ax
336: 0131 74 1B jz bgnc ;buffer empty
337:
338: 0133 9C pushf
339: 0134 FA cli
340: 0135 8B 5C 08 mov bx,bofst[si] ;buffer offset from segment
341: 0138 8B 7C 04 mov di,bget[si] ;character offset from buffer
342: 013B 8A 01 mov al,mb [bx+di] ;get character
343: 013D 47 inc di ;advance pointer
344: 013E 3B 7C 0A cmp di,bsize[si]
345: 0141 72 02 jc bggp ;pointer not past end of buffer
346: 0143 33 FF xor di,di ;reset to start
347: 0145 89 7C 04 bggp: mov bget[si],di
348: 0148 FF 0C dec bcnt[si] ;character count
349: 014A 9D popf ;re-enable interrupts if disabled
350: 014B 0A C0 or al,al ;character in al, clear carry
351: 014D C3 ret
352:
353: 014E F9 bgnc: stc
354: 014F C3 ret
355:
356:
357: ; put character to buffer, ds:si -> pointers, al = char, saves ax, cx, dx
358:
359: 0150 8B 1C bputc: mov bx,bcnt[si]
360: 0152 3B 5C 0A bputco: cmp bx,bsize[si]
361: 0155 73 F7 jnc bgnc ;buffer full
362:
363:
364: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
365:
366: rciolx Page 1-7
367:
368:
369: 0157 9C pushf
370: 0158 FA cli
371: 0159 8B 5C 08 mov bx,bofst[si] ;buffer offset from segment
372: 015C 8B 7C 02 mov di,bput[si] ;character offset from buffer
373: 015F 88 01 mov mb [bx+di],al ;put character
374: 0161 47 inc di ;advance pointer
375: 0162 3B 7C 0A cmp di,bsize[si]
376: 0165 72 02 jc bpgp ;pointer not past end of buffer
377: 0167 33 FF xor di,di ;reset to start
378: 0169 89 7C 02 bpgp: mov bput[si],di
379: 016C FF 04 inc bcnt[si] ;character count
380: 016E 9D popf ;re-enable interrupts if disabled
381: 016F F8 clc ;character in al, clear carry
382: 0170 C3 ret
383:
384:
385: ; sio input character
386:
387: 0171 _incom proc
388: 0171 56 push si
389: 0172 57 push di
390:
391: 0173 BE 001E R mov si,os rxbp ;address receive buffer pointers
392: 0176 E8 012D R call bgetc ;get character from receive buffer
393: 0179 8A 26 001A R mov ah,state
394: 017D 73 05 jnc icgc ;received character in al
395: 017F 80 CC 01 or ah,1 ;no character available
396: 0182 32 C0 xor al,al
397:
398: 0184 5F icgc: pop di
399: 0185 5E pop si
400: 0186 CB ret
401: 0187 _incom endp
402:
403:
404: ; sio output character
405:
406: 0187 _outcom proc
407: 0187 32 C0 xor al,al
408: 0189 8A 26 001A R mov ah,state
409: 018D F6 C4 04 test ah,abort
410: 0190 75 34 jnz ocabt ;aborting
411:
412: 0192 55 push bp
413: 0193 8B EC mov bp,sp
414: 0195 56 push si
415: 0196 57 push di
416:
417: 0197 8A 46 06 mov al,pb[bp]
418: 019A BE 002A R mov si,os txbp ;address transmit buffer pointers
419:
420: 019D 8B 1C ocrep: mov bx,bcnt[si]
421: 019F 0B DB or bx,bx
422: 01A1 75 19 jnz ocbuf ;buffer not empty
423:
424: 01A3 F6 C4 02 test ah,hold
425:
426: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
427:
428: rciolx Page 1-8
429:
430:
431: 01A6 75 14 jnz ocbuf ;paused
432:
433: 01A8 8B 16 0012 R mov dx,lsrad ;address line status register
434: 01AC 8A C8 mov cl,al
435: 01AE EC in al,dx
436: 01AF 24 20 and al,20h ;transmit hold register empty
437: 01B1 8A C1 mov al,cl
438: 01B3 74 07 jz ocbuf ;interrupt pending
439:
440: 01B5 8B 16 0010 R mov dx,buart ;uart base (r/w data port)
441: 01B9 EE out dx,al ;transmit character
442: 01BA EB 07 jmp s ocex ;exit
443:
444: 01BC E8 0152 R ocbuf: call bputco ;put character to transmit buffer
445: 01BF 73 02 jnc ocex ;done
446:
447: ;check timer, exit if 2 min.
448:
449: 01C1 EB DA jmp ocrep ;retry
450:
451: 01C3 5F ocex: pop di
452: 01C4 5E pop si
453: 01C5 5D pop bp
454: 01C6 CB ocabt: ret ;state in ah
455: 01C7 _outcom endp
456:
457:
458: ; sio interrupt service routine
459:
460: 01C7 sioisr proc
461: 01C7 FA cli
462: 01C8 50 push ax
463: 01C9 53 push bx
464: 01CA 51 push cx
465: 01CB 52 push dx
466: 01CC 56 push si
467: 01CD 57 push di
468: 01CE 1E push ds
469:
470: 01CF 2E: A1 0000 R mov ax,cs:riods
471: 01D3 8E D8 mov ds,ax ;i/o data segment
472:
473: 01D5 8B 16 0012 R isrep: mov dx,lsrad ;line status register
474: 01D9 ED in ax,dx ;lsr in al, msr in ah
475: 01DA 2E: A3 0498 R mov mw cs:mv2,ax ;%
476: 01DE 8B C8 mov cx,ax ;save line status
477: 01E0 83 EA 05 sub dx,lsr ;address r/w data port
478: 01E3 A8 01 test al,1 ;received data available
479: 01E5 74 4D jz txchk ;no character received
480:
481: 01E7 A8 0C test al,0ch ;overrun/parity/framing error
482: 01E9 EC in al,dx ;read data
483: 01EA 75 48 jnz txchk ;receive error, discard data
484:
485: 01EC 8B 1E 0019 R mov bx,mode ;mode in bl, state in bh
486: 01F0 F6 C7 04 test bh,abort
487:
488: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
489:
490: rciolx Page 1-9
491:
492:
493: 01F3 75 5F jnz intex ;aborting
494: 01F5 F6 C3 04 test bl,abort
495: 01F8 74 20 jz rcpau ;not checking for abort
496: 01FA 3C 03 cmp al,3 ;^C
497: 01FC 75 1C jnz rcpau ;not abort character
498:
499: 01FE E8 010F R call ibfls ;flush input buffer
500: 0201 E8 0117 R call obfls ;flush output buffer
501: 0204 C6 06 001A R 04 mov state,abort ;aborting
502: 0209 EB 49 90 jmp intex
503:
504: 020C C6 06 001A R 02 rxccs: mov state,hold ;set pause flag
505: 0211 EB 21 jmp s txchk
506: 0213 80 26 001A R FD rxccq: and state,not hold ;clear pause flag
507: 0218 EB 1A jmp s txchk
508:
509: 021A F6 C3 02 rcpau: test bl,hold
510: 021D 74 08 jz rxpch ;not checking pause
511: 021F 3C 13 cmp al,13h ;^s
512: 0221 74 E9 jz rxccs ;pause
513: 0223 3C 10 cmp al,10h ;^q
514: 0225 74 EC jz rxccq ;resume
515:
516: 0227 BE 001E R rxpch: mov si,os rxbp ;address receive buffer
517: 022A E8 0150 R call bputc ;put character in buffer
518: 022D 73 05 jnc txchk ;done
519: 022F 80 0E 001C R 01 or status,rxlost ;set receive characters lost flag
520:
521: 0234 F6 C1 20 txchk: test cl,20h ;transmit hold register empty
522: 0237 74 1B jz intex ;not ready to transmit
523:
524: 0239 BE 002A R mov si,os txbp ;address transmit buffer
525: 023C E8 012D R call bgetc
526: 023F 72 13 jc intex ;buffer empty
527:
528: 0241 8B 1E 0019 R mov bx,mode ;mode in bl, state in bh
529: 0245 F6 D5 not ch
530: 0247 22 EB and ch,bl ;mode and not msr
531: 0249 F6 C5 10 test ch,ctsck ;cts checking and cts off
532: 024C 75 06 jnz intex ;hardware flow off, interrupt will resume
533:
534: 024E F6 C7 02 test bh,hold
535: 0251 75 01 jnz intex ;paused
536:
537: 0253 EE out dx,al ;transmit character
538:
539: 0254 8B 16 0010 R intex: mov dx,buart
540: 0258 83 C2 02 add dx,iir
541: 025B EC in al,dx ;reset int?
542: 025C EC in al,dx
543: ; and al,1
544: ; jnz isrex ;more?
545: ; jmp isrep
546:
547: 025D 2E: FF 06 0494 R inc mw cs:mv1
548: 0262 A1 001E R mov ax,rxbp.bcnt
549:
550: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
551:
552: rciolx Page 1-10
553:
554:
555: 0265 2E: A3 049C R mov mw cs:mv3,ax
556: 0269 A1 002A R mov ax,txbp.bcnt
557: 026C 2E: A3 04A0 R mov mw cs:mv4,ax
558: 0270 B8 0320 mov ax,800
559: 0273 BE 0285 R mov si,os intmsg
560: 0276 E8 0350 R call msout
561:
562: 0279 1F isrex: pop ds
563: 027A 5F pop di
564: 027B 5E pop si
565: 027C 5A pop dx
566: 027D 59 pop cx
567: 027E 5B pop bx
568: 027F B0 20 mov al,20h
569: 0281 E6 20 out icr1,al ;non-specific eoi
570: 0283 58 pop ax
571: 0284 CF iret
572:
573: 0285 49 6E 74 65 72 72 intmsg: db 'Interrupt �5, msr/lsr �4, rxbc �4, txbc �4 ',0
574: 75 70 74 20 E4 35
575: 2C 20 6D 73 72 2F
576: 6C 73 72 20 E8 34
577: 2C 20 72 78 62 63
578: 20 E8 34 2C 20 74
579: 78 62 63 20 E8 34
580: 20 20 20 20 00
581:
582: 02B4 sioisr endp
583:
584:
585: ; set baud rate
586:
587: 02B4 _setbaud proc
588: 02B4 8B 16 0010 R mov dx,buart ;base port address
589: 02B8 0B D2 or dx,dx
590: 02BA 75 04 jnz sbinit ;initialized
591: 02BC 33 C0 xor ax,ax
592: 02BE 48 dec ax ;-1
593: 02BF CB ret ;return error
594:
595: 02C0 55 sbinit: push bp
596: 02C1 8B EC mov bp,sp
597: 02C3 56 push si
598: 02C4 8B CA mov cx,dx ;%
599: 02C6 BE 0000 R mov si,os brdd ;address baud rate dividend
600: 02C9 8B 54 02 mov dx,2[si]
601: 02CC 8B 04 mov ax,[si] ;dividend in dx:ax
602: 02CE F7 76 06 div mw pb[bp] ;divide by parameter 1
603: 02D1 8B D1 mov dx,cx ;%
604: 02D3 50 push ax ;actual rate divisor for uart
605: 02D4 8B F2 mov si,dx
606: 02D6 83 C2 03 add dx,lcr ;address line control register
607: 02D9 EC in al,dx
608: 02DA 0C 80 or al,80h
609: 02DC EE out dx,al ;address baud rate divisor
610: 02DD 87 F2 xchg si,dx
611:
612: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
613:
614: rciolx Page 1-11
615:
616:
617: 02DF 58 pop ax
618: 02E0 EF out dx,ax ;write baud rate divisor
619: 02E1 87 F2 xchg si,dx
620: 02E3 EC in al,dx
621: 02E4 24 7F and al,7fh
622: 02E6 EE out dx,al ;address rx/tx registers, ier
623: 02E7 87 F2 xchg si,dx
624: 02E9 ED in ax,dx ;clear%
625:
626: 02EA 33 C0 xor ax,ax ;no error
627: 02EC 5E pop si
628: 02ED 5D pop bp
629: 02EE CB ret
630: 02EF _setbaud endp
631:
632: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
633:
634: rciolx Page 1-12
635:
636:
637: ; drop dtr
638:
639: ; n=0 (off), n=1 (on), or n>1 (off, wait n seconds for dcd off)
640:
641: 02EF _dtr proc
642:
643: 02EF 55 push bp
644: 02F0 8B EC mov bp,sp
645: 02F2 B8 ---- R mov ax,seg biosda
646: 02F5 8E C0 mov es,ax
647:
648: 02F7 8B 16 0010 R mov dx,buart ;uart base port
649: 02FB 0B D2 or dx,dx
650: 02FD 74 35 jz dtrer ;not initialized
651:
652: 02FF 83 C2 04 add dx,4 ;address mcr
653: 0302 EC in al,dx
654: 0303 24 FE and al,0feh ;clear dtr bit
655: 0305 8A 66 06 mov ah,pb[bp] ;parameter
656: 0308 80 E4 0F and ah,0fh
657: 030B 80 FC 02 cmp ah,2 ;0 off, 1 on
658: 030E 73 07 jnc wtdcd ;off, wait for dcd
659: 0310 0A C4 or al,ah
660: 0312 EE out dx,al ;set as specified
661: 0313 32 C0 xor al,al
662: 0315 EB 1F jmp s dtrck
663:
664: 0317 EE wtdcd: out dx,al ;dtr off
665: 0318 42 inc dx
666: 0319 42 inc dx ;address msr
667:
668: 031A B9 0012 twn: mov cx,18 ;55ms/s
669: 031D 26: 8A 1E 006C tws: mov bl,es:[6ch] ;55ms counter
670: 0322 EC twt: in al,dx
671: 0323 24 80 and al,80h ;dcd
672: 0325 74 0F jz dtrck ;done
673: 0327 26: 3A 1E 006C cmp bl,es:[6ch] ;55ms counter
674: 032C 74 F4 jz twt ;wait 55ms
675: 032E E2 ED loop tws ;wait 990ms
676: 0330 FE CC dec ah
677: 0332 75 E6 jnz twn ;wait 2-x seconds
678: 0334 B0 FF dtrer: mov al,-1 ;timeout
679:
680: 0336 8A E0 dtrck: mov ah,al
681: 0338 80 7E 06 01 cmp mb pb[bp],1
682: 033C 74 10 jz dtrex ;dtr was set
683:
684: 033E 50 push ax ;dtr was reset, clear state and buffers
685: 033F E8 010F R call ibfls
686: 0342 E8 0117 R call obfls
687: 0345 32 C0 xor al,al
688: 0347 A2 001A R mov state,al
689: 034A A2 001C R mov status,al
690: 034D 58 pop ax
691:
692: 034E 5D dtrex: pop bp
693:
694: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
695:
696: rciolx Page 1-13
697:
698:
699: 034F CB ret
700: 0350 _dtr endp
701:
702: include mviow
703: C .386P
704: C
705: = B000 C vseg equ 0b000h ;video ram segment address
706: C
707: C ;****************************************************************************
708: C ;* *
709: C ;* Procedure msout On entry ds:si -> text, terminated with 0. *
710: C ;* *
711: C ;* Display message on standard output, convert parameters to hex ascii or *
712: C ;* decimal ascii for each �n, �n, �n in message where n=number of digits. *
713: C ;* Repeat character c for �nc, where n=(number of repetitions plus 30h). *
714: C ;* *
715: C ;****************************************************************************
716: C
717: = 00EA C litsg equ '�' ;next character is to be output directly
718: = 00E8 C hexsg equ '�' ;hexadecimal conversion signal
719: = 00E4 C decsg equ '�' ;decimal conversion signal
720: = 00E6 C decsgn equ '�' ;decimal conversion, leading spaces suppressed
721: = 00E3 C decsgc equ '�' ;decimal conversion, use commas
722: = 00E2 C repsg equ '�' ;repeat character signal
723: = 00E0 C sgchk equ '�' ;all characters below this value are literals
724: C
725: 0350 C msout proc near
726: 0350 66| 60 C pushad
727: 0352 1E C push ds
728: 0353 06 C push es
729: 0354 50 C push ax
730: C
731: 0355 8C C8 C mov ax,cs
732: 0357 8E D8 C mov ds,ax
733: 0359 8E C0 C mov es,ax
734: 035B BF 04B4 R C mov di,os iobuf ;output buffer
735: 035E BB 0494 R C mov bx,os msval ;parameter list
736: 0361 FC C cld
737: C
738: 0362 AC C msorc: lodsb ;read character
739: 0363 3C E0 C cmp al,sgchk
740: 0365 72 2A C jc short msowc ;not conversion character
741: C
742: 0367 3C E8 C cmp al,hexsg
743: 0369 74 44 C jz short mscvh ;hex conversion character
744: 036B 32 F6 C xor dh,dh ;decimal type flag
745: 036D 3C E4 C cmp al,decsg
746: 036F 74 78 C jz short mscvd ;decimal conversion
747: 0371 B6 40 C mov dh,40h ;leading space suppress, bit 6
748: 0373 3C E6 C cmp al,decsgn
749: 0375 74 72 C jz short mscvd ;decimal, suppress leading spaces
750: 0377 D0 E6 C shl dh,1 ;include commas, bit 7
751: 0379 3C E3 C cmp al,decsgc
752: 037B 74 6C C jz short mscvd ;decimal with commas
753: 037D 3C E2 C cmp al,repsg
754: 037F 75 0B C jnz short msolc ;not repeat character
755:
756: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
757:
758: rciolx Page 1-14
759:
760:
761: 0381 AC C lodsb ;get number of repeats
762: 0382 2C 30 C sub al,30h ;ascii zero based
763: 0384 0F B6 C8 C movzx cx,al ;count
764: 0387 AC C lodsb ;character to repeat
765: 0388 F3/ AA C rep stosb ;expand
766: 038A EB D6 C jmp short msorc
767: C
768: 038C 3C EA C msolc: cmp al,litsg
769: 038E 75 01 C jnz short msowc ;not literal signal
770: 0390 AC C lodsb ;no translation on character following
771: C
772: 0391 AA C msowc: stosb ;write character to buffer
773: 0392 0A C0 C or al,al
774: 0394 75 CC C jnz short msorc ;not at end
775: C
776: 0396 BE 04B4 R C mov si,os iobuf
777: 0399 2B FE C sub di,si ;length
778: 039B 4F C dec di
779: C ; jz msox ;what?
780: 039C 8B CF C mov cx,di
781: 039E 5F C pop di ;dest
782: C ; mov ah,40h
783: C ; mov bx,1 ;stdout
784: C ; int 21h ;write line
785: 039F B8 B000 C mov ax,vseg
786: 03A2 8E C0 C mov es,ax ;video segment
787: 03A4 B4 07 C mov ah,7 ;attr
788: 03A6 AC C wrsc: lodsb
789: 03A7 AB C stosw
790: 03A8 E2 FC C loop wrsc ;write ms to screen
791: C
792: 03AA 07 C msox: pop es
793: 03AB 1F C pop ds
794: 03AC 66| 61 C popad
795: 03AE C3 C ret
796: C
797: C
798: C ; Binary to Hex Ascii Conversion
799: C
800: C ; ds:si->source text, es:di->output text, ds:bx->current binary parameter
801: C
802: 03AF AC C mscvh: lodsb ;read character after signal
803: 03B0 FE C8 C dec al
804: 03B2 24 07 C and al,7 ;number of digits (0-7 for 1-8)
805: 03B4 C0 E0 02 C shl al,2 ;times bits per digit
806: 03B7 0F B6 C8 C movzx cx,al ;number of bits minus 4
807: 03BA 66| 8B 07 C mov eax,[bx] ;get parameter
808: 03BD 83 C3 04 C add bx,4 ;address next parameter
809: 03C0 66| D3 C8 C ror eax,cl ;bits 3-0 are ms digit
810: 03C3 C1 E9 02 C shr cx,2
811: 03C6 41 C inc cx ;number of digits
812: C
813: 03C7 8A F0 C mshxd: mov dh,al ;save 2 digits
814: 03C9 E8 03DF R C call cvhn ;convert al{3:0}
815: 03CC 8A C6 C mov al,dh ;restore 2 digits
816: 03CE 66| C1 C0 04 C rol eax,4 ;pull up next digit
817:
818: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
819:
820: rciolx Page 1-15
821:
822:
823: 03D2 E2 F3 C loop mshxd
824: 03D4 EB 8C C jmp short msorc ;continue with text
825: C
826: C ; Convert Binary in al to Hex Ascii at es:[di]+
827: C ; Affects: ax, di
828: C
829: 03D6 FC C cvhb: cld
830: 03D7 50 C push ax ;save low digit
831: 03D8 C0 E8 04 C shr al,4
832: 03DB E8 03DF R C call cvhn ;convert high digit
833: 03DE 58 C pop ax ;convert low digit
834: 03DF 24 0F C cvhn: and al,0fh
835: 03E1 0C 90 C or al,90h ;90-99, 9A-9F
836: 03E3 27 C daa ;90-99, 100-105
837: 03E4 14 40 C adc al,40h ;D0-D9, 41-46
838: 03E6 27 C daa ;130-139, 41-46
839: 03E7 AA C stosb ;store ascii 0-9, A-F
840: 03E8 C3 C ret
841: C
842: C
843: C ; Binary to Decimal Ascii Conversion
844: C
845: C ; ds:si->source text, es:di->output text, ds:bx->current binary parameter
846: C
847: C ; dh = 80h, include commas; dh = 40h, suppress leading spaces
848: C
849: 03E9 AC C mscvd: lodsb ;read character after signal
850: 03EA 66| 33 C9 C xor ecx,ecx ;clear for use as index
851: 03ED 3C 77 C cmp al,'w'
852: 03EF 74 07 C jz short msdwp ;16-bit conversion
853: 03F1 3C 62 C cmp al,'b'
854: 03F3 75 07 C jnz short msdlp ;32-bit conversion
855: C
856: 03F5 88 4F 01 C mov 1[bx],cl ;8-bit conversion, zero high byte of low word
857: 03F8 89 4F 02 C msdwp: mov 2[bx],cx ;zero high word for 8/16-bit
858: 03FB AC C lodsb ;get next source character
859: C
860: 03FC FE C8 C msdlp: dec al
861: 03FE 24 0F C and al,0fh
862: 0400 8A C8 C mov cl,al ;number of decimal digits (0-9 for 1-10)
863: 0402 66| 8B 2F C mov ebp,[bx] ;get parameter
864: 0405 83 C3 04 C add bx,4 ;update current parameter address
865: 0408 53 C push bx
866: C
867: 0409 2C 03 C msdsc: sub al,3
868: 040B 73 FC C jnc short msdsc ;reduce al mod 3
869: 040D 04 03 C add al,3 ;add remainder
870: 040F 8A D8 C mov bl,al ;number of digits before first comma
871: 0411 56 C push si ;save place in source text
872: C
873: 0412 E3 49 C jcxz msd1 ;one digit only
874: 0414 67| 8D 348D 0000046C C lea si,dcval[ecx*4] ;index into 10� list for number of digits
875: R C
876: C
877: 041C FD C msdxd: std ;count downward
878: 041D 66| AD C lodsd ;get 10� where n is current digit
879:
880: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
881:
882: rciolx Page 1-16
883:
884:
885: 041F FC C cld ;count upward
886: C
887: 0420 B2 2F C mov dl,2fh ;ascii count
888: 0422 FE C2 C msdxi: inc dl
889: 0424 78 05 C js short msdov ;overflow
890: 0426 66| 2B E8 C sub ebp,eax ;subtract 10� from parameter value
891: 0429 73 F7 C jnc short msdxi
892: 042B 66| 03 E8 C msdov: add ebp,eax ;leave remainder
893: C
894: 042E 80 FA 3A C cmp dl,3ah
895: 0431 72 06 C jc short msdno ;no overflow
896: 0433 F9 C stc
897: 0434 66| D1 DD C rcr ebp,1 ;make sure it propagates
898: 0437 B2 2A C mov dl,'*' ;overflow character
899: C
900: 0439 0A F2 C msdno: or dh,dl ;bits 3-0 are zero if this is a leading zero
901: 043B F6 C6 0F C test dh,0fh ;check whether all zeros so far
902: 043E 8A C2 C mov al,dl ;current digit
903: 0440 75 07 C jnz short msdpc ;display non-leading-zero
904: 0442 B0 20 C mov al,' ' ;change leading zero to space
905: C
906: 0444 F6 C6 40 C test dh,40h
907: 0447 75 12 C jnz short msdx ;skip leading spaces and commas
908: C
909: 0449 AA C msdpc: stosb ;write digit to output buffer
910: C
911: 044A 0A F6 C or dh,dh
912: 044C 79 0D C jns short msdx ;no commas
913: C
914: 044E FE CB C dec bl ;decrement comma counter
915: 0450 79 09 C jns short msdx ;no action until zero
916: 0452 3C 20 C cmp al,' '
917: 0454 74 02 C jz short msdco ;leave leading space
918: 0456 B0 2C C mov al,','
919: 0458 AA C msdco: stosb ;write comma to output buffer
920: C
921: 0459 B3 02 C mov bl,2 ;reload counter
922: 045B E2 BF C msdx: loop msdxd ;next digit
923: 045D 8B C5 C msd1: mov ax,bp ;last digit
924: 045F 3D 000A C cmp ax,10
925: 0462 72 02 C jc short msd1n ;no overflow
926: 0464 B0 1A C mov al,1ah ;display *
927: 0466 34 30 C msd1n: xor al,30h
928: 0468 AA C stosb
929: C
930: 0469 5E C pop si ;restore current index in source text
931: 046A 5B C pop bx ;restore current parameter index
932: 046B E9 0362 R C jmp msorc ;continue with text
933: C
934: 046E 87 DB C align 4
935: C
936: = 046C C dcval equ $-4 ;10� table
937: C
938: 0470 0000000A 00000064 C dd 10,100,1000,10000,100000,1000000
939: 000003E8 00002710 C
940: 000186A0 000F4240 C
941:
942: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
943:
944: rciolx Page 1-17
945:
946:
947: 0488 00989680 05F5E100 C dd 10000000,100000000,1000000000
948: 3B9ACA00 C
949: C
950: 0494 C msval: ;parameter list
951: 0494 00000000 C mv1: dd 0
952: 0498 00000000 C mv2: dd 0
953: 049C 00000000 C mv3: dd 0
954: 04A0 00000000 C mv4: dd 0
955: 04A4 00000000 C mv5: dd 0
956: 04A8 00000000 C mv6: dd 0
957: 04AC 00000000 C mv7: dd 0
958: 04B0 00000000 C mv8: dd 0
959: C
960: 04B4 0200[ C iobuf: db 512 dup (99h) ;output buffer
961: 99 C
962: ] C
963: C
964: C
965: 06B4 C msout endp
966: end
967:
968:
969: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
970:
971: rciolx Symbols-1
972:
973:
974: Macros:
975:
976: N a m e Lines
977:
978: .EOPG . . . . . . . . . . . . . 2
979: .ILIST . . . . . . . . . . . . . 1
980: ASYN . . . . . . . . . . . . . . 0
981: DA . . . . . . . . . . . . . . . 4
982: DBL . . . . . . . . . . . . . . 2
983: DSS . . . . . . . . . . . . . . 4
984: DSTRUC . . . . . . . . . . . . . 8
985: DV . . . . . . . . . . . . . . . 5
986: SETMOD . . . . . . . . . . . . . 0
987:
988: Segments and Groups:
989:
990: N a m e Size Length Align Combine Class
991:
992: BIOSDA . . . . . . . . . . . . . 32 Bit 0000 AT 0040
993: DGROUP . . . . . . . . . . . . . GROUP
994: _DATA . . . . . . . . . . . . 16 Bit 0837 WORD PUBLIC 'DATA'
995: RCIOLX_TEXT . . . . . . . . . . 16 Bit 06B4 WORD PUBLIC 'CODE'
996:
997: Symbols:
998:
999: N a m e Type Value Attr
1000:
1001: AA . . . . . . . . . . . . . . . TEXT .model large
1002: ABORT . . . . . . . . . . . . . NUMBER 0004
1003:
1004: BCNT . . . . . . . . . . . . . . L WORD 0000
1005: BGET . . . . . . . . . . . . . . L WORD 0004
1006: BGETC . . . . . . . . . . . . . L NEAR 012D RCIOLX_TEXT
1007: BGGP . . . . . . . . . . . . . . L NEAR 0145 RCIOLX_TEXT
1008: BGNC . . . . . . . . . . . . . . L NEAR 014E RCIOLX_TEXT
1009: BOFST . . . . . . . . . . . . . L WORD 0008
1010: BPGP . . . . . . . . . . . . . . L NEAR 0169 RCIOLX_TEXT
1011: BPUT . . . . . . . . . . . . . . L WORD 0002
1012: BPUTC . . . . . . . . . . . . . L NEAR 0150 RCIOLX_TEXT
1013: BPUTCO . . . . . . . . . . . . . L NEAR 0152 RCIOLX_TEXT
1014: BRDD . . . . . . . . . . . . . . L DWORD 0000 _DATA
1015: BSIZE . . . . . . . . . . . . . L WORD 000A
1016: BUART . . . . . . . . . . . . . L WORD 0010 _DATA
1017: BUFP . . . . . . . . . . . . . . NUMBER 000C
1018:
1019: CIABT . . . . . . . . . . . . . L NEAR 00E8 RCIOLX_TEXT
1020: CIERR . . . . . . . . . . . . . L NEAR 001C RCIOLX_TEXT
1021: CIEX . . . . . . . . . . . . . . L NEAR 00F5 RCIOLX_TEXT
1022: CINIT . . . . . . . . . . . . . L NEAR 0022 RCIOLX_TEXT
1023: CTERM . . . . . . . . . . . . . L NEAR 00EB RCIOLX_TEXT
1024: CTSCK . . . . . . . . . . . . . NUMBER 0010
1025: CVHB . . . . . . . . . . . . . . L NEAR 03D6 RCIOLX_TEXT
1026: CVHN . . . . . . . . . . . . . . L NEAR 03DF RCIOLX_TEXT
1027:
1028: DCVAL . . . . . . . . . . . . . NEAR 046C RCIOLX_TEXT
1029:
1030: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
1031:
1032: rciolx Symbols-2
1033:
1034:
1035: DECSG . . . . . . . . . . . . . NUMBER 00E4
1036: DECSGC . . . . . . . . . . . . . NUMBER 00E3
1037: DECSGN . . . . . . . . . . . . . NUMBER 00E6
1038: DS1 . . . . . . . . . . . . . . TEXT label byte
1039: DS2 . . . . . . . . . . . . . . TEXT label word
1040: DS4 . . . . . . . . . . . . . . TEXT label dword
1041: DS6 . . . . . . . . . . . . . . TEXT label fword
1042: DS8 . . . . . . . . . . . . . . TEXT label qword
1043: DSSAVE . . . . . . . . . . . . . NUMBER 0000
1044: DTRCK . . . . . . . . . . . . . L NEAR 0336 RCIOLX_TEXT
1045: DTRER . . . . . . . . . . . . . L NEAR 0334 RCIOLX_TEXT
1046: DTREX . . . . . . . . . . . . . L NEAR 034E RCIOLX_TEXT
1047:
1048: FINIS . . . . . . . . . . . . . L NEAR 00C6 RCIOLX_TEXT
1049:
1050: GIRQ . . . . . . . . . . . . . . L NEAR 006A RCIOLX_TEXT
1051: GVECT . . . . . . . . . . . . . L NEAR 00F9 RCIOLX_TEXT
1052:
1053: HEXSG . . . . . . . . . . . . . NUMBER 00E8
1054: HOLD . . . . . . . . . . . . . . NUMBER 0002
1055:
1056: IBFLS . . . . . . . . . . . . . L NEAR 010F RCIOLX_TEXT
1057: IC16H . . . . . . . . . . . . . NUMBER 0010
1058: IC29D . . . . . . . . . . . . . NUMBER 0003
1059: IC29H . . . . . . . . . . . . . NUMBER 0001
1060: ICGC . . . . . . . . . . . . . . L NEAR 0184 RCIOLX_TEXT
1061: ICR1 . . . . . . . . . . . . . . NUMBER 0020
1062: ICR2 . . . . . . . . . . . . . . NUMBER 00A0
1063: IER . . . . . . . . . . . . . . NUMBER 0001
1064: IERD . . . . . . . . . . . . . . NUMBER 000B
1065: IIR . . . . . . . . . . . . . . NUMBER 0002
1066: IMR1 . . . . . . . . . . . . . . NUMBER 0021
1067: IMR2 . . . . . . . . . . . . . . NUMBER 00A1
1068: INTCP . . . . . . . . . . . . . L BYTE 0017 _DATA
1069: INTEX . . . . . . . . . . . . . L NEAR 0254 RCIOLX_TEXT
1070: INTMSG . . . . . . . . . . . . . L NEAR 0285 RCIOLX_TEXT
1071: IOBUF . . . . . . . . . . . . . L NEAR 04B4 RCIOLX_TEXT
1072: IRCR . . . . . . . . . . . . . . L BYTE 0015 _DATA
1073: IRQN . . . . . . . . . . . . . . L BYTE 0014 _DATA
1074: IRQV . . . . . . . . . . . . . . L NEAR 0075 RCIOLX_TEXT
1075: ISREP . . . . . . . . . . . . . L NEAR 01D5 RCIOLX_TEXT
1076: ISREX . . . . . . . . . . . . . L NEAR 0279 RCIOLX_TEXT
1077: IV16H . . . . . . . . . . . . . L DWORD 0004 _DATA
1078: IV29H . . . . . . . . . . . . . L DWORD 0008 _DATA
1079: IVB1 . . . . . . . . . . . . . . NUMBER 0008
1080: IVB2 . . . . . . . . . . . . . . NUMBER 0070
1081: IVSIO . . . . . . . . . . . . . L DWORD 000C _DATA
1082:
1083: LCR . . . . . . . . . . . . . . NUMBER 0003
1084: LCRD . . . . . . . . . . . . . . NUMBER 0003
1085: LITSG . . . . . . . . . . . . . NUMBER 00EA
1086: LSR . . . . . . . . . . . . . . NUMBER 0005
1087: LSRAD . . . . . . . . . . . . . L WORD 0012 _DATA
1088:
1089: MB . . . . . . . . . . . . . . . TEXT byte ptr
1090: MCR . . . . . . . . . . . . . . NUMBER 0004
1091:
1092: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
1093:
1094: rciolx Symbols-3
1095:
1096:
1097: MCRD . . . . . . . . . . . . . . NUMBER 000B
1098: MDLC . . . . . . . . . . . . . . TEXT compact
1099: MDLH . . . . . . . . . . . . . . TEXT huge
1100: MDLL . . . . . . . . . . . . . . TEXT large
1101: MDLM . . . . . . . . . . . . . . TEXT medium
1102: MDLS . . . . . . . . . . . . . . TEXT small
1103: ML . . . . . . . . . . . . . . . TEXT dword ptr
1104: MM . . . . . . . . . . . . . . . TEXT l
1105: MODE . . . . . . . . . . . . . . L BYTE 0019 _DATA
1106: MSCVD . . . . . . . . . . . . . L NEAR 03E9 RCIOLX_TEXT
1107: MSCVH . . . . . . . . . . . . . L NEAR 03AF RCIOLX_TEXT
1108: MSD1 . . . . . . . . . . . . . . L NEAR 045D RCIOLX_TEXT
1109: MSD1N . . . . . . . . . . . . . L NEAR 0466 RCIOLX_TEXT
1110: MSDCO . . . . . . . . . . . . . L NEAR 0458 RCIOLX_TEXT
1111: MSDLP . . . . . . . . . . . . . L NEAR 03FC RCIOLX_TEXT
1112: MSDNO . . . . . . . . . . . . . L NEAR 0439 RCIOLX_TEXT
1113: MSDOV . . . . . . . . . . . . . L NEAR 042B RCIOLX_TEXT
1114: MSDPC . . . . . . . . . . . . . L NEAR 0449 RCIOLX_TEXT
1115: MSDSC . . . . . . . . . . . . . L NEAR 0409 RCIOLX_TEXT
1116: MSDWP . . . . . . . . . . . . . L NEAR 03F8 RCIOLX_TEXT
1117: MSDX . . . . . . . . . . . . . . L NEAR 045B RCIOLX_TEXT
1118: MSDXD . . . . . . . . . . . . . L NEAR 041C RCIOLX_TEXT
1119: MSDXI . . . . . . . . . . . . . L NEAR 0422 RCIOLX_TEXT
1120: MSHXD . . . . . . . . . . . . . L NEAR 03C7 RCIOLX_TEXT
1121: MSOLC . . . . . . . . . . . . . L NEAR 038C RCIOLX_TEXT
1122: MSORC . . . . . . . . . . . . . L NEAR 0362 RCIOLX_TEXT
1123: MSOUT . . . . . . . . . . . . . N PROC 0350 RCIOLX_TEXT Length = 0364
1124: MSOWC . . . . . . . . . . . . . L NEAR 0391 RCIOLX_TEXT
1125: MSOX . . . . . . . . . . . . . . L NEAR 03AA RCIOLX_TEXT
1126: MSR . . . . . . . . . . . . . . NUMBER 0006
1127: MSVAL . . . . . . . . . . . . . L NEAR 0494 RCIOLX_TEXT
1128: MV1 . . . . . . . . . . . . . . L NEAR 0494 RCIOLX_TEXT
1129: MV2 . . . . . . . . . . . . . . L NEAR 0498 RCIOLX_TEXT
1130: MV3 . . . . . . . . . . . . . . L NEAR 049C RCIOLX_TEXT
1131: MV4 . . . . . . . . . . . . . . L NEAR 04A0 RCIOLX_TEXT
1132: MV5 . . . . . . . . . . . . . . L NEAR 04A4 RCIOLX_TEXT
1133: MV6 . . . . . . . . . . . . . . L NEAR 04A8 RCIOLX_TEXT
1134: MV7 . . . . . . . . . . . . . . L NEAR 04AC RCIOLX_TEXT
1135: MV8 . . . . . . . . . . . . . . L NEAR 04B0 RCIOLX_TEXT
1136: MW . . . . . . . . . . . . . . . TEXT word ptr
1137:
1138: OBFLS . . . . . . . . . . . . . L NEAR 0117 RCIOLX_TEXT
1139: OCABT . . . . . . . . . . . . . L NEAR 01C6 RCIOLX_TEXT
1140: OCBUF . . . . . . . . . . . . . L NEAR 01BC RCIOLX_TEXT
1141: OCEX . . . . . . . . . . . . . . L NEAR 01C3 RCIOLX_TEXT
1142: OCREP . . . . . . . . . . . . . L NEAR 019D RCIOLX_TEXT
1143: OPERA . . . . . . . . . . . . . L BYTE 0018 _DATA
1144: OS . . . . . . . . . . . . . . . TEXT offset
1145: OVFL . . . . . . . . . . . . . . L BYTE 0006
1146:
1147: PB . . . . . . . . . . . . . . . NUMBER 0006
1148:
1149: RCPAU . . . . . . . . . . . . . L NEAR 021A RCIOLX_TEXT
1150: REPSG . . . . . . . . . . . . . NUMBER 00E2
1151: RIODS . . . . . . . . . . . . . L NEAR 0000 RCIOLX_TEXT
1152: RXB . . . . . . . . . . . . . . L BYTE 0036 _DATA Length = 0400
1153:
1154: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
1155:
1156: rciolx Symbols-4
1157:
1158:
1159: RXBMX . . . . . . . . . . . . . NUMBER 0400
1160: RXBP . . . . . . . . . . . . . . L BYTE 001E _DATA Length = 000C
1161: RXCCQ . . . . . . . . . . . . . L NEAR 0213 RCIOLX_TEXT
1162: RXCCS . . . . . . . . . . . . . L NEAR 020C RCIOLX_TEXT
1163: RXLOST . . . . . . . . . . . . . NUMBER 0001
1164: RXPCH . . . . . . . . . . . . . L NEAR 0227 RCIOLX_TEXT
1165:
1166: S . . . . . . . . . . . . . . . TEXT short
1167: SBINIT . . . . . . . . . . . . . L NEAR 02C0 RCIOLX_TEXT
1168: SCPORT . . . . . . . . . . . . . L NEAR 005F RCIOLX_TEXT
1169: SGCHK . . . . . . . . . . . . . NUMBER 00E0
1170: SIOISR . . . . . . . . . . . . . F PROC 01C7 RCIOLX_TEXT Length = 00ED
1171: SIOVN . . . . . . . . . . . . . L BYTE 0016 _DATA
1172: STATE . . . . . . . . . . . . . L BYTE 001A _DATA
1173: STATUS . . . . . . . . . . . . . L BYTE 001C _DATA
1174: SVECT . . . . . . . . . . . . . L NEAR 0102 RCIOLX_TEXT
1175:
1176: TST . . . . . . . . . . . . . . L BYTE 0836 _DATA
1177: TWN . . . . . . . . . . . . . . L NEAR 031A RCIOLX_TEXT
1178: TWS . . . . . . . . . . . . . . L NEAR 031D RCIOLX_TEXT
1179: TWT . . . . . . . . . . . . . . L NEAR 0322 RCIOLX_TEXT
1180: TXB . . . . . . . . . . . . . . L BYTE 0436 _DATA Length = 0400
1181: TXBMX . . . . . . . . . . . . . NUMBER 0400
1182: TXBP . . . . . . . . . . . . . . L BYTE 002A _DATA Length = 000C
1183: TXCHK . . . . . . . . . . . . . L NEAR 0234 RCIOLX_TEXT
1184: TXINTP . . . . . . . . . . . . . L BYTE 001B _DATA
1185:
1186: VSEG . . . . . . . . . . . . . . NUMBER B000
1187:
1188: WRSC . . . . . . . . . . . . . . L NEAR 03A6 RCIOLX_TEXT
1189: WTDCD . . . . . . . . . . . . . L NEAR 0317 RCIOLX_TEXT
1190:
1191: XBFLS . . . . . . . . . . . . . L NEAR 011D RCIOLX_TEXT
1192:
1193: @0 . . . . . . . . . . . . . . . L NEAR 0018 RCIOLX_TEXT
1194: @CODE . . . . . . . . . . . . . TEXT rciolx_TEXT
1195: @CODESIZE . . . . . . . . . . . TEXT 1
1196: @CPU . . . . . . . . . . . . . . TEXT 3471
1197: @DATASIZE . . . . . . . . . . . TEXT 1
1198: @FILENAME . . . . . . . . . . . TEXT rciolx
1199: @VERSION . . . . . . . . . . . . TEXT 510
1200: _dtr . . . . . . . . . . . . . . F PROC 02EF RCIOLX_TEXT Global Length = 0061
1201: _incom . . . . . . . . . . . . . F PROC 0171 RCIOLX_TEXT Global Length = 0016
1202: _outcom . . . . . . . . . . . . F PROC 0187 RCIOLX_TEXT Global Length = 0040
1203: _plst . . . . . . . . . . . . . L WORD 001E _DATA Global
1204: _rioini . . . . . . . . . . . . F PROC 0002 RCIOLX_TEXT Global Length = 00F7
1205: _setbaud . . . . . . . . . . . . F PROC 02B4 RCIOLX_TEXT Global Length = 003B
1206:
1207:
1208: Microsoft Macro Assembler Version 5.10 6/5/91 16:05:11
1209:
1210:
1211: rciolx Symbols-5
1212:
1213:
1214:
1215:
1216:
1217:
1218: 970 Source Lines
1219: 1055 Total Lines
1220: 191 Symbols
1221:
1222: 46990 + 355212 Bytes symbol space free
1223:
1224: 0 Warning Errors
1225: 0 Severe Errors
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.