Annotation of coherent/d/PS2_KERNEL/io.286/atas.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: / AT Hard Disk Assembler Support
                      9: /
                     10: / $Log:        atas.s,v $
                     11: / Revision 1.1  92/07/17  15:24:03  bin
                     12: / Initial revision
                     13: /
                     14: / Revision 1.4  92/02/05  15:55:06  hal
                     15: / Patchable ATSREG_.
                     16: / 
                     17: / Revision 1.3  91/10/24  12:37:44  hal
                     18: / COH 3.2.03k.
                     19: / Poll HF_REG (3F6) rather than CSR_REG (1F7).
                     20: / 
                     21: /
                     22: / atsend( off, seg ) - send 512 bytes from seg:off into hard disk buffer
                     23: / atrecv( off, seg ) - receive 512 bytes from hard disk buffer into seg:off.
                     24: / DRQ is not checked.  DRQ must be true before atsend/atrecv are called.
                     25: /
                     26: / atbsyw()          - wait while controller is busy
                     27: / atdrqw()          - wait for controller to request data transfer
                     28: /
                     29: ////////
                     30: 
                     31:        .globl  atsend_
                     32:        .globl  atrecv_
                     33:        .globl  atbsyw_
                     34:        .globl  atdrqw_
                     35:        .globl  ATSREG_
                     36: 
                     37:        BSY_ST  = 0x80
                     38:        DRQ_ST  = 0x08
                     39: 
                     40: ////////
                     41: /
                     42: / void
                     43: / atsend( fp ) -- send 512 bytes to AT disk controller.
                     44: / faddr_t fp;
                     45: /
                     46: /      Input:  fp = far pointer [sel:off] to data buffer.
                     47: /
                     48: /      Action: Transfer 512 bytes to AT disk controller from buffer.
                     49: /
                     50: ////////
                     51: 
                     52: atsend_:
                     53:        push    si
                     54:        push    ds
                     55:        push    bp
                     56:        mov     bp, sp
                     57:        lds     si, 8(bp)
                     58:        mov     cx, $256
                     59:        mov     dx, $0x1F0
                     60:        cld
                     61:        rep
                     62:        outs
                     63:        pop     bp
                     64:        pop     ds
                     65:        pop     si
                     66:        ret
                     67: 
                     68: ////////
                     69: /
                     70: / void
                     71: / atrecv( fp ) -- receive 512 bytes from AT disk controller.
                     72: / faddr_t fp;
                     73: /
                     74: /      Input:  fp = far pointer [sel:off] to data buffer.
                     75: /
                     76: /      Action: Transfer 512 bytes from AT disk controller to buffer.
                     77: /
                     78: ////////
                     79: 
                     80: atrecv_:
                     81:        push    di
                     82:        push    es
                     83:        push    bp
                     84:        mov     bp, sp
                     85:        les     di, 8(bp)
                     86:        mov     cx, $256
                     87:        mov     dx, $0x1F0
                     88:        cld
                     89:        rep
                     90:        ins
                     91:        pop     bp
                     92:        pop     es
                     93:        pop     di
                     94:        ret
                     95: 
                     96: ////////
                     97: /
                     98: / atbsyw()     -- wait for AT disk controller to become not busy
                     99: /
                    100: /      Return: 0 = timeout
                    101: /              * = not busy
                    102: /
                    103: ////////
                    104: 
                    105: atbsyw_:
                    106:        mov     dx, ATSREG_
                    107:        mov     bx, $4          / add another layer of iteration for 486's
                    108: 0:     mov     cx, $-1
                    109: 1:     inb     al, dx
                    110:        testb   al, $BSY_ST
                    111:        loopne  1b
                    112:        je      2f              / not busy - return nonzero value
                    113:        dec     bx
                    114:        jne     0b
                    115: 2:     mov     ax, cx
                    116:        ret
                    117: 
                    118: ////////
                    119: /
                    120: / atdrqw()     -- wait for AT disk controller to initiate data request
                    121: /
                    122: /      Return: 0 = timeout
                    123: /              * = data requested
                    124: /
                    125: ////////
                    126: 
                    127: atdrqw_:
                    128:        mov     dx, ATSREG_
                    129:        mov     bx, $4
                    130: 0:     mov     cx, $-1
                    131: 1:     inb     al, dx
                    132:        testb   al, $DRQ_ST
                    133:        loope   1b
                    134:        jne     2f              / not busy - return nonzero value
                    135:        dec     bx
                    136:        jne     0b
                    137: 2:     mov     ax, cx
                    138:        ret

unix.superglobalmegacorp.com

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