1: / machine language assist
   2: / for 11/45 or 11/70 CPUs
   3: 
   4: 
   5: / non-UNIX instructions
   6: mfpi    = 6500^tst
   7: stst    = 170300^tst
   8: mtpi    = 6600^tst
   9: mfpd    = 106500^tst
  10: mtpd    = 106600^tst
  11: spl     = 230
  12: ldfps   = 170100^tst
  13: stfps   = 170200^tst
  14: wait    = 1
  15: rtt     = 6
  16: reset   = 5
  17: 
  18: .PROFIL = 0
  19: HIPRI   = 340
  20: HIGH    = 7
  21:         .if     .PROFIL
  22: HIGH    = 6
  23: HIPRI   = 300
  24:         .endif
  25: 
  26: / Mag tape dump
  27: / save registers in low core and
  28: / write all core onto mag tape.
  29: / entry is thru 44 abs
  30: 
  31: .data
  32: .globl  dump
  33: dump:
  34: 
  35: / save regs r0,r1,r2,r3,r4,r5,r6,KIA6
  36: / starting at abs location 4
  37: 
  38:         mov     r0,4
  39:         mov     $6,r0
  40:         mov     r1,(r0)+
  41:         mov     r2,(r0)+
  42:         mov     r3,(r0)+
  43:         mov     r4,(r0)+
  44:         mov     r5,(r0)+
  45:         mov     sp,(r0)+
  46:         mov     KDSA6,(r0)+
  47: 
  48: / dump all of core (ie to first mt error)
  49: / onto mag tape. (9 track or 7 track 'binary')
  50: 
  51: .if HTDUMP
  52:         mov     $HTCS1,r0
  53:         mov     $40,*$HTCS2
  54:         mov     $2300,*$HTTC
  55:         clr     *$HTBA
  56:         mov     $1,(r0)
  57: 1:
  58:         mov     $-512.,*$HTFC
  59:         mov     $-256.,*$HTWC
  60:         movb    $61,(r0)
  61: 2:
  62:         tstb    (r0)
  63:         bge     2b
  64:         bit     $1,(r0)
  65:         bne     2b
  66:         bit     $40000,(r0)
  67:         beq     1b
  68:         mov     $27,(r0)
  69: .endif
  70: HT      = 0172440
  71: HTCS1   = HT+0
  72: HTWC    = HT+2
  73: HTBA    = HT+4
  74: HTFC    = HT+6
  75: HTCS2   = HT+10
  76: HTTC    = HT+32
  77: 
  78: MTC = 172522
  79: .if TUDUMP
  80:         mov     $MTC,r0
  81:         mov     $60004,(r0)+
  82:         clr     2(r0)
  83: 1:
  84:         mov     $-512.,(r0)
  85:         inc     -(r0)
  86: 2:
  87:         tstb    (r0)
  88:         bge     2b
  89:         tst     (r0)+
  90:         bge     1b
  91:         reset
  92: 
  93: / end of file and loop
  94: 
  95:         mov     $60007,-(r0)
  96: .endif
  97:         br      .
  98: 
  99: .text
 100: .globl  start, _end, _edata, _etext, _main
 101: 
 102: / 11/45 and 11/70 startup.
 103: / entry is thru 0 abs.
 104: / since core is shuffled,
 105: / this code can be executed but once
 106: 
 107: start:
 108:         bit     $1,SSR0
 109:         beq     1f
 110:         mov     $trap,34
 111:         mov     $trap,0
 112:         mov     $340+15.,2
 113:         bit     $20,SSR3
 114:         beq     9f
 115:         mov     $70.,_cputype
 116:         mov     $3,*$MSCR
 117: 9:
 118:         clr     PS
 119:         br      9f
 120: 1:
 121:         inc     $-1
 122:         bne     .
 123:         reset
 124: / Set loc. 0 to trap to system, in case of
 125: / hardware glitch
 126:         mov     $trap,0         / in case of bad trap through 0
 127:         mov     $340+15.,2      / high pri, trap type 15
 128:         clr     PS
 129: 
 130: / set KI0 to physical 0
 131: 
 132:         mov     $77406,r3
 133:         mov     $KISA0,r0
 134:         mov     $KISD0,r1
 135:         clr     (r0)+
 136:         mov     r3,(r1)+
 137: 
 138: / set KI1-6 to eventual text resting place
 139: 
 140:         mov     $_end+63.,r2
 141:         ash     $-6,r2
 142:         bic     $!1777,r2
 143: 1:
 144:         mov     r2,(r0)+
 145:         mov     r3,(r1)+
 146:         add     $200,r2
 147:         cmp     r0,$KISA7
 148:         blos    1b
 149: 
 150: / set KI7 to IO seg for escape
 151: 
 152:         mov     $IO,-(r0)
 153: 
 154: / set KD0-7 to physical
 155: 
 156:         mov     $KDSA0,r0
 157:         mov     $KDSD0,r1
 158:         clr     r2
 159: 1:
 160:         mov     r2,(r0)+
 161:         mov     r3,(r1)+
 162:         add     $200,r2
 163:         cmp     r0,$KDSA7
 164:         blos    1b
 165: 
 166: / initialization
 167: / get a temp (1-word) stack
 168: / turn on segmentation
 169: / copy text to I space
 170: / clear bss in D space
 171: 
 172:         mov     $stk+2,sp
 173:         mov     $65,SSR3                / 22-bit, map, K+U sep
 174:         bit     $20,SSR3
 175:         beq     1f
 176:         mov     $70.,_cputype
 177:         mov     $3,*$MSCR               / Disable UNIBUS traps, non-fatal traps
 178: 1:
 179:         inc     SSR0
 180:         mov     $_etext+100,r2
 181:         mov     $_edata+100,r1
 182:         add     $_etext-8192.,r1
 183: 1:
 184:         mov     -(r1),-(sp)
 185:         mtpi    -(r2)
 186:         cmp     r1,$_edata
 187:         bhi     1b
 188: 1:
 189:         clr     (r1)+
 190:         cmp     r1,$_end
 191:         blo     1b
 192: 
 193: / use KI escape to set KD7 to IO seg
 194: / set KD6 to first available core
 195: / If profiling, snag supervisor registers.
 196: 
 197:         mov     $IO,-(sp)
 198:         mtpi    *$KDSA7
 199: 9:
 200:         mov     $_etext-8192.+63.,r2
 201:         ash     $-6,r2
 202:         bic     $!1777,r2
 203:         add     KISA1,r2
 204:         .if     .PROFIL
 205:         mov     r2,SISA2
 206:         mov     r2,_proloc
 207:         mov     $77406,SISD2
 208:         add     $200,r2
 209:         mov     r2,SISA2+2
 210:         mov     $77406,SISD2+2
 211:         add     $200,r2
 212:         .endif
 213:         mov     r2,KDSA6
 214: 
 215: / Turn off write permission on kernel text
 216: / Take stuff above data out of address space
 217: 
 218:         mov     $KISD0,r0
 219: 1:
 220:         mov     $77402,(r0)+
 221:         cmp     r0,$KISD7
 222:         blos    1b
 223: 
 224:         mov     $_end+63.,r0
 225:         ash     $-6,r0
 226:         bic     $!1777,r0
 227:         mov     $KDSD0,r1
 228: 1:
 229:         cmp     r0,$200
 230:         bge     2f
 231:         dec     r0
 232:         bge     4f
 233:         clr     (r1)
 234:         br      3f
 235: 4:
 236:         movb    r0,1(r1)
 237:         br      3f
 238: 2:
 239:         movb    $177,1(r1)
 240: 3:
 241:         tst     (r1)+
 242:         sub     $200,r0
 243:         cmp     r1,$KDSD5
 244:         blos    1b
 245: 
 246: / set up supervisor D registers
 247: 
 248: 9:
 249:         mov     $6,SISD0
 250:         mov     $6,SISD1
 251: 
 252: / set up real sp
 253: / clear user block
 254: / test for floating point hardware
 255: 
 256:         mov     $_u+[usize*64.],sp
 257:         mov     $1f,nofault
 258:         setd                    / jump to 1f if this traps
 259:         inc     fpp
 260: 1:
 261:         clr     nofault
 262:         mov     $_u,r0
 263: 1:
 264:         clr     (r0)+
 265:         cmp     r0,sp
 266:         blo     1b
 267:         .if     .PROFIL
 268:         mov     $40000,r0
 269:         mov     $10000,PS       / prev = super
 270: 1:
 271:         clr     -(sp)
 272:         mtpi    (r0)+
 273:         cmp     r0,$100000
 274:         blo     1b
 275:         jsr     pc,_isprof
 276:         .endif
 277: 
 278: / set up previous mode and call main
 279: / on return, enter user mode at 0R
 280: 
 281:         mov     $30000,PS
 282:         jsr     pc,_main
 283:         mov     $170000,-(sp)
 284:         clr     -(sp)
 285:         rtt
 286: 
 287: .globl  _rkboot, _rpboot
 288: _rkboot:
 289:         jmp     *$173000
 290: 
 291: _rpboot:
 292:         jmp     *$173006
 293: 
 294: 
 295: .globl  trap, call
 296: .globl  _trap
 297: 
 298: / all traps and interrupts are
 299: / vectored thru this routine.
 300: 
 301: trap:
 302:         mov     PS,saveps
 303:         tst     nofault
 304:         bne     1f
 305:         mov     SSR0,ssr
 306:         mov     SSR1,ssr+2
 307:         mov     SSR2,ssr+4
 308:         mov     $1,SSR0
 309:         jsr     r0,call1; jmp _trap
 310:         / no return
 311: 1:
 312:         mov     $1,SSR0
 313:         mov     nofault,(sp)
 314:         rtt
 315: .text
 316: 
 317: .globl  _runrun
 318: call1:
 319:         mov     saveps,-(sp)
 320:         spl     0
 321:         br      1f
 322: 
 323: call:
 324:         mov     PS,-(sp)
 325: 1:
 326:         mov     r1,-(sp)
 327:         mfpd    sp
 328:         mov     4(sp),-(sp)
 329:         bic     $!37,(sp)
 330:         bit     $30000,PS
 331:         beq     1f
 332:         jsr     pc,(r0)+
 333:         tstb    _runrun
 334:         beq     2f
 335:         mov     $12.,(sp)               / trap 12 is give up cpu
 336:         jsr     pc,_trap
 337: 2:
 338:         tst     (sp)+
 339:         mtpd    sp
 340:         br      2f
 341: 1:
 342:         bis     $30000,PS
 343:         jsr     pc,(r0)+
 344:         cmp     (sp)+,(sp)+
 345: 2:
 346:         mov     (sp)+,r1
 347:         tst     (sp)+
 348:         mov     (sp)+,r0
 349:         rtt
 350: 
 351: .globl  _savfp
 352: _savfp:
 353:         tst     fpp
 354:         beq     9f              / No FP hardware
 355:         mov     2(sp),r1
 356:         stfps   (r1)+
 357:         setd
 358:         movf    fr0,(r1)+
 359:         movf    fr1,(r1)+
 360:         movf    fr2,(r1)+
 361:         movf    fr3,(r1)+
 362:         movf    fr4,fr0
 363:         movf    fr0,(r1)+
 364:         movf    fr5,fr0
 365:         movf    fr0,(r1)+
 366: 9:
 367:         rts     pc
 368: 
 369: .globl  _restfp
 370: _restfp:
 371:         tst     fpp
 372:         beq     9f
 373:         mov     2(sp),r1
 374:         mov     r1,r0
 375:         setd
 376:         add     $8.+2.,r1
 377:         movf    (r1)+,fr1
 378:         movf    (r1)+,fr2
 379:         movf    (r1)+,fr3
 380:         movf    (r1)+,fr0
 381:         movf    fr0,fr4
 382:         movf    (r1)+,fr0
 383:         movf    fr0,fr5
 384:         movf    2(r0),fr0
 385:         ldfps   (r0)
 386: 9:
 387:         rts     pc
 388: 
 389: .globl  _stst
 390: _stst:
 391:         tst     fpp
 392:         beq     9f
 393:         stst    r0
 394:         mov     r0,*2(sp)
 395: 9:
 396:         rts     pc
 397: 
 398: .globl  _addupc
 399: _addupc:
 400:         mov     r2,-(sp)
 401:         mov     6(sp),r2        / base of prof with base,leng,off,scale
 402:         mov     4(sp),r0        / pc
 403:         sub     4(r2),r0        / offset
 404:         clc
 405:         ror     r0
 406:         mov     6(r2),r1
 407:         clc
 408:         ror     r1
 409:         mul     r1,r0           / scale
 410:         ashc    $-14.,r0
 411:         inc     r1
 412:         bic     $1,r1
 413:         cmp     r1,2(r2)        / length
 414:         bhis    1f
 415:         add     (r2),r1         / base
 416:         mov     nofault,-(sp)
 417:         mov     $2f,nofault
 418:         mfpd    (r1)
 419:         add     12.(sp),(sp)
 420:         mtpd    (r1)
 421:         br      3f
 422: 2:
 423:         clr     6(r2)
 424: 3:
 425:         mov     (sp)+,nofault
 426: 1:
 427:         mov     (sp)+,r2
 428:         rts     pc
 429: 
 430: .globl  _display
 431: _display:
 432:         dec     dispdly
 433:         bge     2f
 434:         clr     dispdly
 435:         mov     PS,-(sp)
 436:         mov     $HIPRI,PS
 437:         mov     CSW,r1
 438:         bit     $1,r1
 439:         beq     1f
 440:         bis     $30000,PS
 441:         dec     r1
 442: 1:
 443:         jsr     pc,fuword
 444:         mov     r0,CSW
 445:         mov     (sp)+,PS
 446:         cmp     r0,$-1
 447:         bne     2f
 448:         mov     $120.,dispdly           / 2 sec delay after CSW fault
 449: 2:
 450:         rts     pc
 451: 
 452: .globl  _backup
 453: .globl  _regloc
 454: _backup:
 455:         mov     2(sp),r0
 456:         movb    ssr+2,r1
 457:         jsr     pc,1f
 458:         movb    ssr+3,r1
 459:         jsr     pc,1f
 460:         movb    _regloc+7,r1
 461:         asl     r1
 462:         add     r0,r1
 463:         mov     ssr+4,(r1)
 464:         clr     r0
 465: 2:
 466:         rts     pc
 467: 1:
 468:         mov     r1,-(sp)
 469:         asr     (sp)
 470:         asr     (sp)
 471:         asr     (sp)
 472:         bic     $!7,r1
 473:         movb    _regloc(r1),r1
 474:         asl     r1
 475:         add     r0,r1
 476:         sub     (sp)+,(r1)
 477:         rts     pc
 478: 
 479: 
 480: .globl  _fubyte, _subyte
 481: .globl  _fuword, _suword
 482: .globl  _fuibyte, _suibyte
 483: .globl  _fuiword, _suiword
 484: _fuibyte:
 485:         mov     2(sp),r1
 486:         bic     $1,r1
 487:         jsr     pc,giword
 488:         br      2f
 489: 
 490: _fubyte:
 491:         mov     2(sp),r1
 492:         bic     $1,r1
 493:         jsr     pc,gword
 494: 
 495: 2:
 496:         cmp     r1,2(sp)
 497:         beq     1f
 498:         swab    r0
 499: 1:
 500:         bic     $!377,r0
 501:         rts     pc
 502: 
 503: _suibyte:
 504:         mov     2(sp),r1
 505:         bic     $1,r1
 506:         jsr     pc,giword
 507:         mov     r0,-(sp)
 508:         cmp     r1,4(sp)
 509:         beq     1f
 510:         movb    6(sp),1(sp)
 511:         br      2f
 512: 1:
 513:         movb    6(sp),(sp)
 514: 2:
 515:         mov     (sp)+,r0
 516:         jsr     pc,piword
 517:         clr     r0
 518:         rts     pc
 519: 
 520: _subyte:
 521:         mov     2(sp),r1
 522:         bic     $1,r1
 523:         jsr     pc,gword
 524:         mov     r0,-(sp)
 525:         cmp     r1,4(sp)
 526:         beq     1f
 527:         movb    6(sp),1(sp)
 528:         br      2f
 529: 1:
 530:         movb    6(sp),(sp)
 531: 2:
 532:         mov     (sp)+,r0
 533:         jsr     pc,pword
 534:         clr     r0
 535:         rts     pc
 536: 
 537: _fuiword:
 538:         mov     2(sp),r1
 539: fuiword:
 540:         jsr     pc,giword
 541:         rts     pc
 542: 
 543: _fuword:
 544:         mov     2(sp),r1
 545: fuword:
 546:         jsr     pc,gword
 547:         rts     pc
 548: 
 549: giword:
 550:         mov     PS,-(sp)
 551:         spl     HIGH
 552:         mov     nofault,-(sp)
 553:         mov     $err,nofault
 554:         mfpi    (r1)
 555:         mov     (sp)+,r0
 556:         br      1f
 557: 
 558: gword:
 559:         mov     PS,-(sp)
 560:         spl     HIGH
 561:         mov     nofault,-(sp)
 562:         mov     $err,nofault
 563:         mfpd    (r1)
 564:         mov     (sp)+,r0
 565:         br      1f
 566: 
 567: _suiword:
 568:         mov     2(sp),r1
 569:         mov     4(sp),r0
 570: suiword:
 571:         jsr     pc,piword
 572:         rts     pc
 573: 
 574: _suword:
 575:         mov     2(sp),r1
 576:         mov     4(sp),r0
 577: suword:
 578:         jsr     pc,pword
 579:         rts     pc
 580: 
 581: piword:
 582:         mov     PS,-(sp)
 583:         spl     HIGH
 584:         mov     nofault,-(sp)
 585:         mov     $err,nofault
 586:         mov     r0,-(sp)
 587:         mtpi    (r1)
 588:         br      1f
 589: 
 590: pword:
 591:         mov     PS,-(sp)
 592:         spl     HIGH
 593:         mov     nofault,-(sp)
 594:         mov     $err,nofault
 595:         mov     r0,-(sp)
 596:         mtpd    (r1)
 597: 1:
 598:         mov     (sp)+,nofault
 599:         mov     (sp)+,PS
 600:         rts     pc
 601: 
 602: err:
 603:         mov     (sp)+,nofault
 604:         mov     (sp)+,PS
 605:         tst     (sp)+
 606:         mov     $-1,r0
 607:         rts     pc
 608: 
 609: .globl  _copyin, _copyout
 610: .globl  _copyiin, _copyiout
 611: _copyiin:
 612:         jsr     pc,copsu
 613: 1:
 614:         mfpi    (r0)+
 615:         mov     (sp)+,(r1)+
 616:         sob     r2,1b
 617:         br      2f
 618: 
 619: _copyin:
 620:         jsr     pc,copsu
 621: 1:
 622:         mfpd    (r0)+
 623:         mov     (sp)+,(r1)+
 624:         sob     r2,1b
 625:         br      2f
 626: 
 627: _copyiout:
 628:         jsr     pc,copsu
 629: 1:
 630:         mov     (r0)+,-(sp)
 631:         mtpi    (r1)+
 632:         sob     r2,1b
 633:         br      2f
 634: 
 635: _copyout:
 636:         jsr     pc,copsu
 637: 1:
 638:         mov     (r0)+,-(sp)
 639:         mtpd    (r1)+
 640:         sob     r2,1b
 641: 2:
 642:         mov     (sp)+,nofault
 643:         mov     (sp)+,r2
 644:         clr     r0
 645:         rts     pc
 646: 
 647: copsu:
 648:         mov     (sp)+,r0
 649:         mov     r2,-(sp)
 650:         mov     nofault,-(sp)
 651:         mov     r0,-(sp)
 652:         mov     10(sp),r0
 653:         mov     12(sp),r1
 654:         mov     14(sp),r2
 655:         asr     r2
 656:         mov     $1f,nofault
 657:         rts     pc
 658: 
 659: 1:
 660:         mov     (sp)+,nofault
 661:         mov     (sp)+,r2
 662:         mov     $-1,r0
 663:         rts     pc
 664: 
 665: .globl  _idle, _waitloc
 666: _idle:
 667:         mov     PS,-(sp)
 668:         spl     0
 669:         wait
 670: waitloc:
 671:         mov     (sp)+,PS
 672:         rts     pc
 673: 
 674:         .data
 675: _waitloc:
 676:         waitloc
 677:         .text
 678: 
 679: .globl  _save
 680: _save:
 681:         mov     (sp)+,r1
 682:         mov     (sp),r0
 683:         mov     r2,(r0)+
 684:         mov     r3,(r0)+
 685:         mov     r4,(r0)+
 686:         mov     r5,(r0)+
 687:         mov     sp,(r0)+
 688:         mov     r1,(r0)+
 689:         clr     r0
 690:         jmp     (r1)
 691: 
 692:         .globl  _resume
 693: _resume:
 694:         mov     2(sp),r0                / new process
 695:         mov     4(sp),r1                / new stack
 696:         spl     7
 697:         mov     r0,KDSA6                / In new process
 698:         mov     (r1)+,r2
 699:         mov     (r1)+,r3
 700:         mov     (r1)+,r4
 701:         mov     (r1)+,r5
 702:         mov     (r1)+,sp
 703:         mov     $1,r0
 704:         spl     0
 705:         jmp     *(r1)+
 706: 
 707: .globl  _spl0, _spl1, _spl4, _spl5, _spl6, _spl7, _splx
 708: _spl0:
 709:         mov     PS,r0
 710:         spl     0
 711:         rts     pc
 712: 
 713: _spl1:
 714:         mov     PS,r0
 715:         spl     1
 716:         rts     pc
 717: 
 718: _spl4:
 719:         mov     PS,r0
 720:         spl     4
 721:         rts     pc
 722: 
 723: _spl5:
 724:         mov     PS,r0
 725:         spl     5
 726:         rts     pc
 727: 
 728: _spl6:
 729:         mov     PS,r0
 730:         spl     6
 731:         rts     pc
 732: 
 733: _spl7:
 734:         mov     PS,r0
 735:         spl     HIGH
 736:         rts     pc
 737: 
 738: _splx:
 739:         mov     2(sp),PS
 740:         rts     pc
 741: 
 742: .globl  _copyseg
 743: _copyseg:
 744:         mov     PS,-(sp)
 745:         mov     4(sp),SISA0
 746:         mov     6(sp),SISA1
 747:         mov     $10000+HIPRI,PS
 748:         mov     r2,-(sp)
 749:         clr     r0
 750:         mov     $8192.,r1
 751:         mov     $32.,r2
 752: 1:
 753:         mfpd    (r0)+
 754:         mtpd    (r1)+
 755:         sob     r2,1b
 756:         mov     (sp)+,r2
 757:         mov     (sp)+,PS
 758:         rts     pc
 759: 
 760: .globl  _clearseg
 761: _clearseg:
 762:         mov     PS,-(sp)
 763:         mov     4(sp),SISA0
 764:         mov     $10000+HIPRI,PS
 765:         clr     r0
 766:         mov     $32.,r1
 767: 1:
 768:         clr     -(sp)
 769:         mtpd    (r0)+
 770:         sob     r1,1b
 771:         mov     (sp)+,PS
 772:         rts     pc
 773: 
 774: / Long quotient
 775: 
 776:         .globl  ldiv
 777: ldiv:
 778:         jsr     r5,csv
 779:         mov     10.(r5),r3
 780:         sxt     r4
 781:         bpl     1f
 782:         neg     r3
 783: 1:
 784:         cmp     r4,8.(r5)
 785:         bne     hardldiv
 786:         mov     6.(r5),r2
 787:         mov     4.(r5),r1
 788:         bge     1f
 789:         neg     r1
 790:         neg     r2
 791:         sbc     r1
 792:         com     r4
 793: 1:
 794:         mov     r4,-(sp)
 795:         clr     r0
 796:         div     r3,r0
 797:         mov     r0,r4           /high quotient
 798:         mov     r1,r0
 799:         mov     r2,r1
 800:         div     r3,r0
 801:         bvc     1f
 802:         sub     r3,r0           / this is the clever part
 803:         div     r3,r0
 804:         tst     r1
 805:         sxt     r1
 806:         add     r1,r0           / cannot overflow!
 807: 1:
 808:         mov     r0,r1
 809:         mov     r4,r0
 810:         tst     (sp)+
 811:         bpl     9f
 812:         neg     r0
 813:         neg     r1
 814:         sbc     r0
 815: 9:
 816:         jmp     cret
 817: 
 818: hardldiv:
 819:         4
 820: 
 821: / Long remainder
 822: 
 823:         .globl  lrem
 824: lrem:
 825:         jsr     r5,csv
 826:         mov     10.(r5),r3
 827:         sxt     r4
 828:         bpl     1f
 829:         neg     r3
 830: 1:
 831:         cmp     r4,8.(r5)
 832:         bne     hardlrem
 833:         mov     6.(r5),r2
 834:         mov     4.(r5),r1
 835:         mov     r1,r4
 836:         bge     1f
 837:         neg     r1
 838:         neg     r2
 839:         sbc     r1
 840: 1:
 841:         clr     r0
 842:         div     r3,r0
 843:         mov     r1,r0
 844:         mov     r2,r1
 845:         div     r3,r0
 846:         bvc     1f
 847:         sub     r3,r0
 848:         div     r3,r0
 849:         tst     r1
 850:         beq     9f
 851:         add     r3,r1
 852: 1:
 853:         tst     r4
 854:         bpl     9f
 855:         neg     r1
 856: 9:
 857:         sxt     r0
 858:         jmp     cret
 859: 
 860: / The divisor is known to be >= 2^15.  Only 16 cycles are
 861: / needed to get a remainder.
 862: hardlrem:
 863:         4
 864: 
 865: /.globl	lmul
 866: /lmul:
 867: /	mov	r2,-(sp)
 868: /	mov	r3,-(sp)
 869: /	mov	8(sp),r2
 870: /	sxt	r1
 871: /	sub	6(sp),r1
 872: /	mov	12.(sp),r0
 873: /	sxt	r3
 874: /	sub	10.(sp),r3
 875: /	mul	r0,r1
 876: /	mul	r2,r3
 877: /	add	r1,r3
 878: /	mul	r2,r0
 879: /	sub	r3,r0
 880: /	mov	(sp)+,r3
 881: /	mov	(sp)+,r2
 882: /	rts	pc
 883: 
 884: .globl  csv
 885: csv:
 886:         mov     r5,r0
 887:         mov     sp,r5
 888:         mov     r4,-(sp)
 889:         mov     r3,-(sp)
 890:         mov     r2,-(sp)
 891:         jsr     pc,(r0)
 892: 
 893: .globl  cret
 894: cret:
 895:         mov     r5,r2
 896:         mov     -(r2),r4
 897:         mov     -(r2),r3
 898:         mov     -(r2),r2
 899:         mov     r5,sp
 900:         mov     (sp)+,r5
 901:         rts     pc
 902: 
 903: .globl  _u
 904: _u      = 140000
 905: usize   = 16.
 906: 
 907: CSW     = 177570
 908: PS      = 177776
 909: SSR0    = 177572
 910: SSR1    = 177574
 911: SSR2    = 177576
 912: SSR3    = 172516
 913: KISA0   = 172340
 914: KISA1   = 172342
 915: KISA7   = 172356
 916: KISD0   = 172300
 917: KISD7   = 172316
 918: KDSA0   = 172360
 919: KDSA6   = 172374
 920: KDSA7   = 172376
 921: KDSD0   = 172320
 922: KDSD5   = 172332
 923: SISA0   = 172240
 924: SISA1   = 172242
 925: SISA2   = 172244
 926: SISD0   = 172200
 927: SISD1   = 172202
 928: SISD2   = 172204
 929: MSCR    = 017777746     / 11/70 memory control register
 930: IO      = 177600
 931: 
 932: SWR     = 177570
 933: .data
 934: .globl  _ka6
 935: .globl  _cputype
 936: 
 937: _ka6:   KDSA6
 938: _cputype:45.
 939: stk:    0
 940: 
 941: .bss
 942: nofault:.=.+2
 943: fpp:    .=.+2
 944: ssr:    .=.+6
 945: dispdly:.=.+2
 946: saveps: .=.+2
 947: 
 948: .text
 949: / system profiler
 950: /  Expects to have a KW11-P in addition to the line-frequency
 951: /  clock, and it should be set to BR7.
 952: /  Uses supervisor I space register 2&3 (40000-100000)
 953: /  to maintain the profile.
 954: 
 955:         .if     .PROFIL
 956: CCSB    = 172542
 957: CCSR    = 172540
 958: 
 959: .globl  _sprof, _xprobuf, _probsiz, _mode
 960: _probsiz = 37777
 961: 
 962: _isprof:
 963:         mov     $1f,nofault
 964:         mov     $_sprof,104     / interrupt
 965:         mov     $340,106        / pri
 966:         mov     $100.,CCSB      / count set = 100
 967:         mov     $113,CCSR       / count down, 10kHz, repeat
 968: 1:
 969:         clr     nofault
 970:         rts     pc
 971: 
 972: _sprof:
 973:         mov     r0,-(sp)
 974:         mov     PS,r0
 975:         ash     $-10.,r0
 976:         bic     $!14,r0
 977:         add     $1,_mode+2(r0)
 978:         adc     _mode(r0)
 979:         cmp     r0,$14          / user
 980:         beq     done
 981:         mov     2(sp),r0        / pc
 982:         asr     r0
 983:         asr     r0
 984:         bic     $140001,r0
 985:         cmp     r0,$_probsiz
 986:         blo     1f
 987:         inc     _outside
 988:         br      done
 989: 1:
 990:         mov     $10340,PS               / prev = super
 991:         mfpi    40000(r0)
 992:         inc     (sp)
 993:         mtpi    40000(r0)
 994:         bne     done
 995:         mov     r1,-(sp)
 996:         mov     $_xprobuf,r1
 997: 2:
 998:         cmp     (r1)+,r0
 999:         bne     3f
1000:         inc     (r1)
1001:         br      4f
1002: 3:
1003:         tst     (r1)+
1004:         bne     2b
1005:         sub     $4,r1
1006:         mov     r0,(r1)+
1007:         mov     $1,(r1)+
1008: 4:
1009:         mov     (sp)+,r1
1010: done:
1011:         mov     (sp)+,r0
1012:         mov     $113,CCSR
1013:         rtt
1014: 
1015: / count subroutine calls during profiling
1016: /  of the system.
1017: 
1018: .globl  mcount, _profcnts, _profsize
1019: 
1020: .bss
1021: _profcnts:
1022:         .=.+[6*340.]
1023: 
1024: .globl countbase
1025: .data
1026: countbase:
1027:         _profcnts
1028: _profsize:
1029:         340.
1030: .text
1031: 
1032: mcount:
1033:         mov     (r0),r1
1034:         bne     1f
1035:         mov     countbase,r1
1036:         beq     2f
1037:         add     $6,countbase
1038:         cmp     countbase,$_profcnts+[6*340.]
1039:         blo     3f
1040:         clr     countbase
1041:         rts     pc
1042: 3:
1043:         mov     (sp),(r1)+
1044:         mov     r1,(r0)
1045: 1:
1046:         inc     2(r1)
1047:         bne     2f
1048:         inc     (r1)
1049: 2:
1050:         rts     pc
1051: 
1052: .bss
1053: _xprobuf:.=.+512.
1054: _proloc:.=.+2
1055: _mode:  .=.+16.
1056: _outside: .=.+2
1057: 
1058:         .endif

Defined functions

.PROFIL defined in line 18; used 4 times
CCSB defined in line 956; used 1 times
CCSR defined in line 957; used 2 times
CSW defined in line 907; used 2 times
HIGH defined in line 22; used 5 times
HIPRI defined in line 23; used 3 times
IO defined in line 930; used 2 times
KDSA0 defined in line 918; used 1 times
KDSA6 defined in line 919; used 4 times
KDSA7 defined in line 920; used 2 times
KDSD0 defined in line 921; used 2 times
KDSD5 defined in line 922; used 1 times
KISA0 defined in line 913; used 1 times
KISA1 defined in line 914; used 1 times
KISA7 defined in line 915; used 1 times
KISD0 defined in line 916; used 2 times
KISD7 defined in line 917; used 1 times
MSCR defined in line 929; used 2 times
PS defined in line 908; used 35 times
SISA0 defined in line 923; used 2 times
SISA1 defined in line 924; used 1 times
SISA2 defined in line 925; used 2 times
SISD0 defined in line 926; used 1 times
SISD1 defined in line 927; used 1 times
SISD2 defined in line 928; used 2 times
SSR0 defined in line 909; used 5 times
SSR1 defined in line 910; used 1 times
SSR2 defined in line 911; used 1 times
SSR3 defined in line 912; used 3 times
SWR defined in line 932; never used
_addupc declared in line 398; defined in line 399; used 3 times
_backup declared in line 452; defined in line 454; used 2 times
_clearseg declared in line 760; defined in line 761; used 5 times
_copyiin declared in line 610; defined in line 611; used 2 times
_copyin declared in line 609; defined in line 619; used 8 times
_copyiout declared in line 610; defined in line 627; used 2 times
_copyout declared in line 609; defined in line 635; used 12 times
_copyseg declared in line 742; defined in line 743; used 6 times
_display declared in line 430; defined in line 431; used 2 times
_fubyte declared in line 480; defined in line 490; used 5 times
_fuibyte declared in line 482; defined in line 484; used 5 times
_fuiword declared in line 483; defined in line 537; used 8 times
_fuword declared in line 481; defined in line 543; used 7 times
_idle declared in line 665; defined in line 666; used 3 times
_isprof defined in line 962; used 1 times
_probsiz declared in line 959; defined in line 960; used 2 times
_restfp declared in line 369; defined in line 370; used 2 times
_resume declared in line 692; defined in line 693; used 5 times
_rkboot declared in line 287; defined in line 288; used 1 times
_rpboot declared in line 287; defined in line 291; used 1 times
_save declared in line 679; defined in line 680; used 8 times
_savfp declared in line 351; defined in line 352; used 3 times
_spl1 declared in line 707; defined in line 713; used 2 times
_spl4 declared in line 707; defined in line 718; used 6 times
_spl5 declared in line 707; defined in line 723; used 24 times
_spl6 declared in line 707; defined in line 728; used 51 times
_spl7 declared in line 707; defined in line 733; used 5 times
_splx declared in line 707; defined in line 738; used 46 times
_sprof declared in line 959; defined in line 972; used 2 times
_stst declared in line 389; defined in line 390; used 3 times
_subyte declared in line 480; defined in line 520; used 3 times
_suibyte declared in line 482; defined in line 503; used 3 times
_suiword declared in line 483; defined in line 567; used 3 times
_suword declared in line 481; defined in line 574; used 11 times
_u declared in line 903; defined in line 904; used 621 times
call declared in line 295; defined in line 323; used 7 times
call1 defined in line 318; used 1 times
copsu defined in line 647; used 4 times
cret declared in line 893; defined in line 894; used 3 times
csv declared in line 884; defined in line 885; used 3 times
done defined in line 1010; used 3 times
err defined in line 602; used 4 times
fuiword defined in line 539; never used
fuword defined in line 545; used 1 times
giword defined in line 549; used 3 times
gword defined in line 558; used 3 times
hardldiv defined in line 818; used 1 times
hardlrem defined in line 862; used 1 times
ldiv declared in line 776; defined in line 777; used 1 times
lrem declared in line 823; defined in line 824; used 1 times
mcount declared in line 1018; defined in line 1032; used 1 times
piword defined in line 581; used 2 times
pword defined in line 590; used 2 times
start declared in line 100; defined in line 107; used 4 times
suiword defined in line 570; never used
suword defined in line 577; never used
trap declared in line 295; defined in line 301; used 15 times
usize defined in line 905; used 1 times
waitloc defined in line 670; used 1 times

Defined variables

HT defined in line 70; used 6 times
HTBA defined in line 73; used 1 times
  • in line 55
HTCS1 defined in line 71; used 1 times
  • in line 52
HTCS2 defined in line 75; used 1 times
  • in line 53
HTFC defined in line 74; used 1 times
  • in line 58
HTTC defined in line 76; used 1 times
  • in line 54
HTWC defined in line 72; used 1 times
  • in line 59
MTC defined in line 78; used 1 times
  • in line 80
_cputype declared in line 935; defined in line 938; used 3 times
_ka6 declared in line 934; defined in line 937; used 1 times
_mode declared in line 959; defined in line 1055; used 3 times
_outside defined in line 1056; used 1 times
_profcnts declared in line 1018; defined in line 1021; used 3 times
_profsize declared in line 1018; defined in line 1028; used 1 times
_proloc defined in line 1054; used 1 times
_waitloc declared in line 665; defined in line 675; used 1 times
_xprobuf declared in line 959; defined in line 1053; used 2 times
countbase declared in line 1024; defined in line 1026; used 5 times
dispdly defined in line 945; used 3 times
dump declared in line 32; defined in line 33; used 3 times
fpp defined in line 943; used 4 times
nofault defined in line 942; used 23 times
saveps defined in line 946; used 2 times
ssr defined in line 944; used 6 times
stk defined in line 939; used 1 times
Last modified: 1979-05-12
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 3258
Valid CSS Valid XHTML 1.0 Strict