Annotation of sbbs/steve/rciolx.lst, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.