Annotation of researchv10no/sys/ml/trapmflow.s, revision 1.1

1.1     ! root        1: #
        !             2: # trap routines valid only on MicroVAX
        !             3: #
        !             4: # real clock interrupt, MicroVAX version
        !             5: #
        !             6: # clock ticks at 100Hz.  skip 4 of each 10 to pretend it's 60Hz
        !             7: 
        !             8: #
        !             9: # the normal clock-trimming idea is to correct by CLKBIAS microseconds
        !            10: # every 60Hz tick for clockbias ticks.  on MicroVAX, the interval
        !            11: # has to be a multiple of the 100Hz tick; so skip or add a tick
        !            12: # every SKIPBIAS or TICKBIAS ticks instead.
        !            13: #
        !            14: # if we skip a tick, the clock changes by 10ms (one hardware tick).
        !            15: # if we insert an extra tick, the clock changes by 1s/60 - 10ms
        !            16: # (because there's an extra hardware tick as well as a software tick)
        !            17: # NB CLK60HZ is a number ready for NICR, hence it's negative
        !            18: #
        !            19: 
        !            20:        .set    HWCLOCK,10000           # usec per hardware tick
        !            21: 
        !            22:        .set    SKIPBIAS,HWCLOCK/CLKBIAS        # value of a skipped tick
        !            23:        .set    TICKBIAS,(-CLK60HZ-HWCLOCK)/CLKBIAS # value of an extra tick
        !            24: 
        !            25:        .text
        !            26: 
        !            27:        .lcomm  tick,1                  # 100Hz-60Hz counter
        !            28:        .globl  Xhardclock
        !            29:        .align  2
        !            30: Xhardclock:
        !            31:        incb    tick
        !            32:        cmpb    $1,tick
        !            33:        beql    9f
        !            34:        cmpb    $4,tick
        !            35:        beql    9f
        !            36:        cmpb    $6,tick
        !            37:        beql    9f
        !            38:        cmpb    $9,tick
        !            39:        beql    9f
        !            40:        cmpb    $10,tick
        !            41:        bneq    1f
        !            42:        clrb    tick
        !            43: 1:     pushr   $SAVREG
        !            44:        movl    _clockbias,r0           # need clock adjustment?
        !            45:        beql    3f
        !            46:        decl    _clockbias
        !            47:        movl    $SKIPBIAS,r2
        !            48:        cvtbl   _clocksign,r3
        !            49:        blss    2f
        !            50:         movl   $TICKBIAS,r2
        !            51: 2:     divl3   r2,r0,r1                # fudge to our units
        !            52:        mull2   r2,r1
        !            53:        cmpl    r0,r1                   # time to adj by a whole uvax tick?
        !            54:        bneq    3f                      # not yet
        !            55:         decb   tick                    # yes, invent an extra tick
        !            56:         tstl   r3
        !            57:         blss   8f                      # need to slow down, extra tick is a skip
        !            58: 3:     pushl   4+NRS*4(sp)
        !            59:        pushl   4+NRS*4(sp)
        !            60:        calls   $2,_hardclock           # hardclock(pc,psl)
        !            61: 8:     popr    $SAVREG
        !            62: 9:     rei

unix.superglobalmegacorp.com

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