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