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

unix.superglobalmegacorp.com

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