Annotation of coherent/b/STREAMS/i386/obsolete.s, revision 1.1

1.1     ! root        1: 
        !             2: / i8086 coherent clist hack.
        !             3: 
        !             4: ///////
        !             5: 
        !             6: /LXXX: .long   NCPCL+4
        !             7: 
        !             8: /cltinit:
        !             9: /      pushf                   / s = sphi()
        !            10: /      cli
        !            11: /      mov     NCLIST,%eax
        !            12: /      imull   LXXX,%eax
        !            13: /      addl    clistp,%eax
        !            14: /      sub     %ecx,%ecx
        !            15: /      jmp     loc32
        !            16: 
        !            17: /loc33:        mov     %ecx,(%eax)
        !            18: /      mov     %eax,%ecx
        !            19: /loc32:        sub     $NCPCL+4, %eax
        !            20: /      cmp     clistp,%eax
        !            21: /      jnb     loc33
        !            22: 
        !            23: /      mov     %ecx,cltfree
        !            24: /      call    spl
        !            25: /      add     $0x04,%esp
        !            26: /      ret
        !            27: 
        !            28: /getq:
        !            29: /      push    %esi
        !            30: 
        !            31: /      mov     8(%esp),%edx
        !            32: /      sub     %ecx,%ecx
        !            33: /      cmp     %ecx,(%edx)     / if (cqp->cq_cc==0)
        !            34: /      je      loc21
        !            35: 
        !            36: /      pushf                   / s = sphi()
        !            37: /      cli
        !            38: /      mov     12(%edx),%esi   / op = cqp->cq_op       [%esi]
        !            39: /      mov     16(%edx),%eax   / ox = cqp->cq_ox       [%eax]
        !            40: /      movb    4(%eax,%esi),%cl
        !            41: /      push    %ecx            / save = op->cl_ch[ox]
        !            42: /      decl    (%edx)          / if (--cqp->cq_cc == 0)
        !            43: /      je      loc23
        !            44: /      inc     %eax            / ++ox
        !            45: /      mov     %eax,16(%edx)   / cqp->cq_ox = ox
        !            46: /      cmp     $NCPCL,%eax     / if (ox == NCPL)
        !            47: /      jne     loc24
        !            48: 
        !            49: /loc23:        sub     %eax,%eax
        !            50: /      mov     %eax,16(%edx)   / cqp->cq_ox = 0
        !            51: /      mov     (%esi),%ecx     / np = op->cl_fp
        !            52: /      mov     %ecx,12(%edx)   / cqp->cq_op = np
        !            53: /      cmp     %eax,%ecx       / if (np==0)
        !            54: /      jne     loc25
        !            55: /      mov     %eax,4(%edx)            / cqp->cq_ip = 0
        !            56: /      mov     %eax,8(%edx)            / cqp->cq_ix = 0
        !            57: 
        !            58: /loc25:        mov     cltfree,%ecx
        !            59: /      mov     %ecx,(%esi)     / op->cl_fp = cltfree
        !            60: /      mov     %esi,cltfree    / cltfree = op
        !            61: /      cmp     %eax,cltwant    / if (cltwant)
        !            62: /      je      loc24
        !            63: /      mov     %eax,cltwant            / cltwant = 0
        !            64: /      push    $cltwant
        !            65: /      call    wakeup                  / wakeup(&cltwant)
        !            66: /      pop     %eax
        !            67: 
        !            68: /loc24:        pop     %esi
        !            69: /      call    spl             / spl(s)
        !            70: /      pop     %eax
        !            71: /      mov     %esi,%eax       / return save
        !            72: /      pop     %esi
        !            73: /      ret
        !            74: /loc21:
        !            75: /      mov     $-1,%eax                        / return -1
        !            76: /      pop     %esi
        !            77: /      ret
        !            78: 
        !            79: /putq:
        !            80: /      push    %esi
        !            81: /      sub     %eax,%eax
        !            82: /      pushf                   / s = sphi();
        !            83: /      cli
        !            84: /      mov     12(%esp),%edx   / ebp = cqp
        !            85: /      mov     4(%edx),%esi    / ip = cqp->cq_ip       [%esi]
        !            86: /      mov     8(%edx),%ecx    / ix = cqp->cq_ix       [%ecx]
        !            87: /      cmp     %eax,%ecx       / if (ix==0) {
        !            88: /      jne     loc26
        !            89: /      mov     cltfree,%esi            / ip = cltfree
        !            90: /      cmp     %eax,%esi               / if (ip==0)
        !            91: /      je      loc27                   / goto bad;
        !            92: /      mov     (%esi),%ecx
        !            93: /      mov     %ecx,cltfree            / cltfree = cltfree->cl_fp
        !            94: /      mov     %eax,(%esi)             / ip->cl_fp = 0
        !            95: /      mov     4(%edx),%ecx            / np = cqp->cq_ip
        !            96: /      cmp     %eax,%ecx               / if (np==0)
        !            97: /      jne     loc29
        !            98: /      mov     %esi,12(%edx)                   / cqp->cq_op = ip
        !            99: /      jmp     loc30
        !           100: /                                      / else
        !           101: /loc29:        mov     %esi,(%ecx)                     / np->cl_fp = ip
        !           102: 
        !           103: /loc30:        mov     %esi,4(%edx)            / cqp->cq_ip = ip
        !           104: /      mov     %eax,%ecx               / ix = 0
        !           105: /                              / }
        !           106: 
        !           107: /loc26:
        !           108: /      movb    16(%esp),%al    / ip->cl_ch[ix] = c
        !           109: /      movb    %al, 4(%esi,%ecx) 
        !           110: /      inc     %ecx            / ix++
        !           111: /      cmp     $NCPCL,%ecx     / if (ix==NCPCL)
        !           112: /      jne     loc31
        !           113: /      sub     %ecx,%ecx               / ix = 0
        !           114: 
        !           115: /loc31:        mov     %ecx,8(%edx)    / cqp->cq_ix = ix
        !           116: /      incl    (%edx)          / cqp->cq_cc++
        !           117: /      call    spl             / spl(s)
        !           118: /      add     $4,%esp
        !           119: /      mov     12(%esp),%eax   / return (c)
        !           120: /loc28:
        !           121: /      pop     %esi
        !           122: /      ret
        !           123: /loc27:
        !           124: /      call    spl             /               spl(s)
        !           125: /      add     $4,%esp
        !           126: /      mov     $-1,%eax        /               return -1
        !           127: /      jmp     loc28
        !           128: 
        !           129: /clrq:
        !           130: /      mov     4(%esp),%edx
        !           131: /      pushf
        !           132: /      cli
        !           133: 
        !           134: /loc34:        push    %edx
        !           135: /      call    getq
        !           136: /      pop     %edx
        !           137: /      or      %eax,%eax
        !           138: /      jge     loc34
        !           139: 
        !           140: /      call    spl
        !           141: /      pop     %eax
        !           142: /      ret
        !           143: 
        !           144: /loc35:        movl    $0x01,cltwant
        !           145: /      push    %eax
        !           146: /      push    %eax
        !           147: /      push    $0x0100
        !           148: /      push    $cltwant
        !           149: /      call    sleep
        !           150: /      add     $16,%esp
        !           151: /waitq:
        !           152: /      sub     %eax,%eax
        !           153: /      cmp     %eax,cltfree
        !           154: /      jne     loc35
        !           155: /      ret
        !           156: 
        !           157: ///////
        !           158: 
        !           159: / atbsyw()     -- wait for AT disk controller to become not busy
        !           160: 
        !           161: /      Return: 0 = timeout
        !           162: /              * = not busy
        !           163: 
        !           164: ///////
        !           165: /atbsyw:
        !           166: /      mov     $0x3FFFF, %ecx 
        !           167: /      mov     ATSREG, %edx
        !           168: /loc16:        inb     (%dx)
        !           169: /      testb   $BSY_ST, %al
        !           170: /      loopne  loc16
        !           171: /      mov     %ecx, %eax 
        !           172: /      ret
        !           173: 
        !           174: ///////
        !           175: 
        !           176: / AT Hard Disk Assembler Support
        !           177: / atbsyw()          - wait while controller is busy
        !           178: / atdrqw()          - wait for controller to request data transfer
        !           179: 
        !           180: ///////
        !           181: ///////
        !           182: 
        !           183: / atdrqw()     -- wait for AT disk controller to initiate data request
        !           184: 
        !           185: /      Return: 0 = timeout
        !           186: /              * = data requested
        !           187: 
        !           188: ///////
        !           189: 
        !           190: /atdrqw:
        !           191: /      mov     $0x3FFFF, %ecx
        !           192: /      mov     ATSREG, %edx 
        !           193: /loc17:        inb     (%dx)
        !           194: /      testb   $DRQ_ST, %al 
        !           195: /      loope   loc17
        !           196: /      mov     %ecx, %eax 
        !           197: /      ret
        !           198: 
        !           199: 
        !           200: / Read master PIC state
        !           201: / return 00:xx:yy:zz 4-byte int value
        !           202: /      xx: interrupt mask
        !           203: /      yy: isr
        !           204: /      zz: irr
        !           205: 
        !           206: /      .globl  mchirp
        !           207: /FOO   .macro  ch
        !           208: /      push    ch
        !           209: /      call    mchirp
        !           210: /      add     $4,%esp
        !           211: /      .endm
        !           212: 
        !           213: /      .globl  rd_m_pic
        !           214: /rd_m_pic:
        !           215: /      pushfl
        !           216: /      cli
        !           217: /      sub     %eax,%eax
        !           218: /      inb     $PICM           / interrupt mask to %eax:16..23
        !           219: /      shl     $8,%eax
        !           220: /      movb    $0x0B,%al       / OCW3 - read isr
        !           221: /      outb    $PIC
        !           222: /      IODELAY
        !           223: /      inb     $PIC            / in-service register to %eax:8..15
        !           224: /      shl     $8,%eax
        !           225: /      movb    $0x0A,%al       / OCW3 - read irr
        !           226: /      outb    $PIC
        !           227: /      IODELAY
        !           228: /      inb     $PIC            / irpt request register to %eax:0..7
        !           229: /      popfl
        !           230: /      ret
        !           231: 
        !           232: / Read slave PIC state
        !           233: / return 00:xx:yy:zz 4-byte int value
        !           234: /      xx: interrupt mask
        !           235: /      yy: isr
        !           236: /      zz: irr
        !           237: 
        !           238: /      .globl  rd_s_pic
        !           239: /rd_s_pic:
        !           240: /      pushfl
        !           241: /      cli
        !           242: /      sub     %eax,%eax
        !           243: /      inb     $SPICM          / interrupt mask to %eax:16..23
        !           244: /      shl     $8,%eax
        !           245: /      movb    $0x0B,%al       / OCW3 - read isr
        !           246: /      outb    $SPIC
        !           247: /      IODELAY
        !           248: /      inb     $SPIC           / in-service register to %eax:8..15
        !           249: /      shl     $8,%eax
        !           250: /      movb    $0x0A,%al       / OCW3 - read irr
        !           251: /      outb    $SPIC
        !           252: /      IODELAY
        !           253: /      inb     $SPIC           / irpt request register to %eax:0..7
        !           254: /      popfl
        !           255: /      ret
        !           256: 

unix.superglobalmegacorp.com

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