Annotation of researchv10no/sys/ml/trapmflow.s, revision 1.1.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.