Annotation of coherent/d/PS2_KERNEL/io.286/rsas.s, revision 1.1.1.1

1.1       root        1: / (lgl-
                      2: /      COHERENT Driver Kit Version 1.1.0
                      3: /      Copyright (c) 1982, 1990 by Mark Williams Company.
                      4: /      All rights reserved. May not be copied without permission.
                      5: / -lgl)
                      6: ////////
                      7: /
                      8: / Raw Serial Device Driver - Assembler Support
                      9: /
                     10: ////////
                     11: 
                     12: ////////
                     13: /
                     14: / Locally defined global symbols
                     15: /
                     16: ////////
                     17: 
                     18:        .globl  rsin_
                     19:        .globl  rsout_
                     20: 
                     21: ////////
                     22: /
                     23: / Offsets to fields in the IRING and ORING data structures.
                     24: /
                     25: ////////
                     26: 
                     27:        Q_MASK  = 0
                     28:        Q_IX    = 2
                     29:        Q_OX    = 4
                     30:        Q_CC    = 6
                     31: 
                     32: ////////
                     33: /
                     34: / Offsets to fields in the IO data structure.
                     35: /
                     36: ////////
                     37: 
                     38:        IO_IOC  = 2
                     39:        IO_BASE = 8
                     40: 
                     41: ////////
                     42: /
                     43: / Rsin ( rawqp, iop )  -- transfer data from input ring to user
                     44: / IRING *rawqp;
                     45: / IO *iop;
                     46: /
                     47: ////////
                     48: 
                     49: rsin_:
                     50:        push    si                              / Save SI, DI, BP, ES
                     51:        push    di
                     52:        push    bp
                     53:        mov     bp, sp
                     54:        push    es
                     55: 
                     56:        mov     bx, 10(bp)                      / User destination --> ES:DI
                     57:        mov     di, IO_BASE(bx)
                     58:        mov     es, uds_
                     59: 
                     60:        cld                                     / Auto Increment
                     61:        mov     cx, IO_IOC(bx)                  / Byte count --> CX
                     62:        jcxz    1f
                     63: 
                     64:        mov     bx, 8(bp)                       / rawqp --> BX
                     65: 
                     66:        mov     si, Q_OX(bx)
                     67:        cmp     si, Q_IX(bx)                    / Input data available?
                     68:        je      1f
                     69: 
                     70: 0:     movb    al, Q_CC(bx,si)                 / Yes,  read one character
                     71:        inc     si                              /       update index
                     72:        and     si, Q_MASK(bx)                  /       (wrap if necessary)
                     73:        stosb                                   /       write to user space
                     74:        cmp     si, Q_IX(bx)                    /       More input data?
                     75:        loopne  0b                              /
                     76: 
                     77:        mov     Q_OX(bx), si                    / Save revised index
                     78:        mov     bx, 10(bp)                      / Update io parameters
                     79:        mov     IO_BASE(bx), di
                     80:        mov     IO_IOC(bx), cx
                     81: 
                     82: 1:     pop     es                              / Restore ES, BP, DI, SI.
                     83:        pop     bp
                     84:        pop     di
                     85:        pop     si
                     86:        ret
                     87: 
                     88: ////////
                     89: /
                     90: / Rsout( outqp, iop )  -- transfer data from user to output ring
                     91: / ORING *outqp;
                     92: / IO *iop;
                     93: /
                     94: ////////
                     95: 
                     96: rsout_:
                     97:        push    si                              / Save SI, DI, BP, ES
                     98:        push    di
                     99:        push    bp
                    100:        mov     bp, sp
                    101:        push    es
                    102: 
                    103:        mov     bx, 10(bp)                      / User source --> ES:DI
                    104:        mov     di, IO_BASE(bx)
                    105:        mov     es, uds_
                    106: 
                    107:        mov     cx, IO_IOC(bx)                  / Byte count --> CX
                    108:        jcxz    2f
                    109: 
                    110:        mov     bx, 8(bp)                       / outqp --> BX
                    111:        mov     si, Q_IX(bx)
                    112: 
                    113: 0:     movb    al, es:(di)
                    114:        inc     di
                    115:        movb    Q_CC(bx,si), al
                    116:        inc     si
                    117:        and     si, Q_MASK(bx)
                    118:        cmp     si, Q_OX(bx)
                    119:        loopne  0b
                    120: 
                    121:        jne     1f                              / If can't save last char
                    122:        dec     di                              /       Undo changes.
                    123:        dec     si
                    124:        and     si, Q_MASK(bx)
                    125:        inc     cx
                    126: 
                    127: 1:     mov     Q_IX(bx), si                    / Save revised index
                    128:        mov     bx, 10(bp)
                    129:        mov     IO_BASE(bx), di                 / Update io parameters
                    130:        mov     IO_IOC(bx), cx
                    131: 
                    132: 2:     pop     es                              / Restore ES, BP, DI, SI.
                    133:        pop     bp
                    134:        pop     di
                    135:        pop     si
                    136:        ret

unix.superglobalmegacorp.com

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