Annotation of coherent/d/kernel/USRSRC/i8086/drv/atas.s, revision 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.