home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / as / as26.s < prev    next >
Encoding:
Text File  |  1975-07-17  |  5.9 KB  |  560 lines

  1. /
  2. /
  3.  
  4. / a6 -- pdp-11 assembler pass 2
  5.  
  6. opline:
  7.     mov    r4,r0
  8.     jsr    r5,betwen; 0; 177
  9.         br 2f
  10.     cmp    r4,$5
  11.     beq    opeof
  12.     cmp    r4,$'<
  13.     bne    xpr
  14.     jmp    opl17
  15. xxpr:
  16.     tst    (sp)+
  17. xpr:
  18.     jsr    pc,expres
  19.     jsr    pc,outw
  20.     rts    pc
  21. 2:
  22.     movb    (r4),r0
  23.     cmp    r0,$24        /reg
  24.     beq    xpr
  25.     cmp    r0,$33        /est text
  26.     beq    xpr
  27.     cmp    r0,$34        / est data
  28.     beq    xpr
  29.     jsr    r5,betwen; 5; 36
  30.         br xpr
  31.     mov    2(r4),-(sp)
  32.     mov    r0,-(sp)
  33.     jsr    pc,readop
  34.     mov    (sp)+,r0
  35.     asl    r0
  36.     mov    $adrbuf,r5
  37.     clr    swapf
  38.     mov    $-1,rlimit
  39.     jmp    *1f-10.(r0)
  40.  
  41. 1:
  42.     opl5
  43.     opl6
  44.     opl7
  45.     opl10
  46.     opl11
  47.     opl12
  48.     opl13
  49.     opl14
  50.     opl15
  51.     opl16
  52.     opl17
  53.     opl20
  54.     opl21
  55.     opl22
  56.     opl23
  57.     xxpr
  58.     opl25
  59.     opl26
  60.     opl27
  61.     opl30
  62.     opl31
  63.     opl32
  64.     xxpr
  65.     xxpr
  66.     opl35
  67.     opl36
  68.  
  69. opeof:
  70.     mov    $1,line
  71.     mov    $20,-(sp)
  72.     mov    $argb,r1
  73. 1:
  74.     jsr    pc,getw
  75.     tst    r4
  76.     bmi    1f
  77.     movb    r4,(r1)+
  78.     dec    (sp)
  79.     bgt    1b
  80.     tstb    -(r1)
  81.     br    1b
  82. 1:
  83.     movb    $'\n,(r1)+
  84.     clrb    (r1)+
  85.     tst    (sp)+
  86.     rts    pc
  87.  
  88. opl30:    / mpy, dvd etc
  89.     inc    swapf
  90.     mov    $1000,rlimit
  91.     br    opl13
  92.  
  93. opl14:        / flop freg,fsrc
  94.     inc    swapf
  95.  
  96. opl5:        / flop src,freg
  97.     mov    $400,rlimit
  98.  
  99. /double
  100. opl13:
  101.     jsr    pc,addres
  102. op2a:
  103.     mov    r2,-(sp)
  104.     jsr    pc,readop
  105. op2b:
  106.     jsr    pc,addres
  107.     tst    swapf
  108.     beq    1f
  109.     mov    (sp),r0
  110.     mov    r2,(sp)
  111.     mov    r0,r2
  112. 1:
  113.     swab    (sp)
  114.     asr    (sp)
  115.     asr    (sp)
  116.     cmp    (sp),rlimit
  117.     blo    1f
  118.     jsr    r5,error; 'x
  119. 1:
  120.     bis    (sp)+,r2
  121.     bis    (sp)+,r2
  122.     clr    r3
  123.     jsr    pc,outw
  124.     mov    $adrbuf,r1
  125. 1:
  126.     cmp    r1,r5
  127.     bhis    1f
  128.     mov    (r1)+,r2
  129.     mov    (r1)+,r3
  130.     mov    (r1)+,xsymbol
  131.     jsr    pc,outw
  132.     br    1b
  133. 1:
  134.     rts    pc
  135.  
  136. opl15:        / single operand
  137.     clr    -(sp)
  138.     br    op2b
  139.  
  140. opl12:        / movf
  141.     mov    $400,rlimit
  142.     jsr    pc,addres
  143.     cmp    r2,$4        / see if source is fregister
  144.     blo    1f
  145.     inc    swapf
  146.     br    op2a
  147. 1:
  148.     mov    $174000,(sp)
  149.     br    op2a
  150.  
  151. / jbr
  152. opl35:
  153. / jeq, jne, etc
  154. opl36:
  155.     jsr    pc,expres
  156.     tstb    passno
  157.     bne    1f
  158.     mov    r2,r0
  159.     jsr    pc,setbr
  160.     tst    r2
  161.     beq    2f
  162.     cmp    (sp),$br
  163.     beq    2f
  164.     add    $2,r2
  165. 2:
  166.     add    r2,dot        / if doesn't fit
  167.     add    $2,dot
  168.     tst    (sp)+
  169.     rts    pc
  170. 1:
  171.     jsr    pc,getbr
  172.     bcc    dobranch
  173.     mov    (sp)+,r0
  174.     mov    r2,-(sp)
  175.     mov    r3,-(sp)
  176.     cmp    r0,$br
  177.     beq    2f
  178.     mov    $402,r2
  179.     xor    r0,r2        / flip cond, add ".+6"
  180.     mov    $1,r3
  181.     jsr    pc,outw
  182. 2:
  183.     mov    $1,r3
  184.     mov    $jmp+37,r2
  185.     jsr    pc,outw
  186.     mov    (sp)+,r3
  187.     mov    (sp)+,r2
  188.     jsr    pc,outw
  189.     rts    pc
  190.  
  191. /sob
  192. opl31:    / sob
  193.     jsr    pc,expres
  194.     jsr    pc,checkreg
  195.     swab    r2
  196.     asr    r2
  197.     asr    r2
  198.     bis    r2,(sp)
  199.     jsr    pc,readop
  200.     jsr    pc,expres
  201.     tstb    passno
  202.     beq    3f
  203.     sub    dot,r2
  204.     neg    r2
  205.     mov    r2,r0
  206.     jsr    r5,betwen; -2; 175
  207.         br 2f
  208.     add    $4,r2
  209.     br    1f
  210.  
  211. /branch
  212. opl6:
  213.     jsr    pc,expres
  214.     tstb    passno
  215.     beq    3f
  216. dobranch:
  217.     sub    dot,r2
  218.     mov    r2,r0
  219.     jsr    r5,betwen; -254.; 256.
  220.         br 2f
  221. 1:
  222.     bit    $1,r2
  223.     bne    2f
  224.     cmp    r3,dot-2    / same relocation as .
  225.     bne    2f
  226.     asr    r2
  227.     dec    r2
  228.     bic    $177400,r2
  229. 3:
  230.     bis    (sp)+,r2
  231.     clr    r3
  232.     jsr    pc,outw
  233.     rts    pc
  234. 2:
  235.     jsr    r5,error; 'b
  236.     clr    r2
  237.     br    3b
  238.  
  239. /jsr
  240. opl7:
  241.     jsr    pc,expres
  242.     jsr    pc,checkreg
  243.     jmp    op2a
  244.  
  245. / rts
  246. opl10:
  247.     jsr    pc,expres
  248.     jsr    pc,checkreg
  249.     br    1f
  250.  
  251. / sys, emt etc
  252. opl11:
  253.     jsr    pc,expres
  254.     cmp    r2,$64.
  255.     bhis    0f
  256.     cmp    r3,$1
  257.     ble    1f
  258. 0:
  259.     jsr    pc,errora
  260. 1:
  261.     bis    (sp)+,r2
  262.     jsr    pc,outw
  263.     rts    pc
  264.  
  265. / .byte
  266. opl16:
  267.     jsr    pc,expres
  268.     jsr    pc,outb
  269.     cmp    r4,$',
  270.     bne    1f
  271.     jsr    pc,readop
  272.     br    opl16
  273. 1:
  274.     tst    (sp)+
  275.     rts    pc
  276.  
  277. / < (.ascii)
  278. opl17:
  279.     jsr    pc,getw
  280.     mov    $1,r3
  281.     mov    r4,r2
  282.     bmi    2f
  283.     bic    $!377,r2
  284.     jsr    pc,outb
  285.     br    opl17
  286. 2:
  287.     jsr    pc,getw
  288.     rts    pc
  289.  
  290. /.even
  291. opl20:
  292.     bit    $1,dot
  293.     beq    1f
  294.     cmp    dot-2,$4
  295.     beq    2f        / bss mode
  296.     clr    r2
  297.     clr    r3
  298.     jsr    pc,outb
  299.     br    1f
  300. 2:
  301.     inc    dot
  302. 1:
  303.     tst    (sp)+
  304.     rts    pc
  305. opl21:    /if
  306.     jsr    pc,expres
  307. opl22:
  308. oplret:
  309.     tst    (sp)+
  310.     rts    pc
  311.  
  312.  
  313. /.globl
  314. opl23:
  315.     cmp    r4,$200
  316.     blo    1f
  317.     bisb    $40,(r4)
  318.     jsr    pc,readop
  319.     cmp    r4,$',
  320.     bne    1f
  321.     jsr    pc,readop
  322.     br    opl23
  323. 1:
  324.     tst    (sp)+
  325.     rts    pc
  326.  
  327. / .text, .data, .bss
  328. opl25:
  329. opl26:
  330. opl27:
  331.     inc    dot
  332.     bic    $1,dot
  333.     mov    r0,-(sp)
  334.     mov    dot-2,r1
  335.     asl    r1
  336.     mov    dot,savdot-4(r1)
  337.     tstb    passno
  338.     beq    1f
  339.     jsr    r5,flush; txtp
  340.     jsr    r5,flush; relp
  341.     mov    (sp),r2
  342.     add    $txtseek-[2*25],r2
  343.     mov    r2,tseekp
  344.     mov    (r2),r0
  345.     jsr    r5,oset; txtp
  346.     add    $trelseek-txtseek,r2
  347.     mov    (r2),r0
  348.     mov    r2,rseekp
  349.     jsr    r5,oset; relp
  350. 1:
  351.     mov    (sp)+,r0
  352.     mov    savdot-[2*25](r0),dot
  353.     asr    r0
  354.     sub    $25-2,r0
  355.     mov    r0,dot-2    / new . relocation
  356.     tst    (sp)+
  357.     rts    pc
  358.  
  359. opl32:
  360.     cmp    r4,$200
  361.     blo    1f
  362.     mov    r4,-(sp)
  363.     jsr    pc,readop
  364.     jsr    pc,readop
  365.     jsr    pc,expres
  366.     mov    (sp)+,r0
  367.     bit    $37,(r0)
  368.     bne    1f
  369.     bis    $40,(r0)
  370.     mov    r2,2(r0)
  371. 1:
  372.     tst    (sp)+
  373.     rts    pc
  374.  
  375. addres:
  376.     clr    -(sp)
  377. 4:
  378.     cmp    r4,$'(
  379.     beq    alp
  380.     cmp    r4,$'-
  381.     beq    amin
  382.     cmp    r4,$'$
  383.     beq    adoll
  384.     cmp    r4,$'*
  385.     bne    getx
  386.     jmp    astar
  387. getx:
  388.     jsr    pc,expres
  389.     cmp    r4,$'(
  390.     bne    2f
  391.     jsr    pc,readop
  392.     mov    r2,(r5)+
  393.     mov    r3,(r5)+
  394.     mov    xsymbol,(r5)+
  395.     jsr    pc,expres
  396.     jsr    pc,checkreg
  397.     jsr    pc,checkrp
  398.     bis    $60,r2
  399.     bis    (sp)+,r2
  400.     rts    pc
  401.  
  402. 2:
  403.     cmp    r3,$24
  404.     bne    1f
  405.     jsr    pc,checkreg
  406.     bis    (sp)+,r2
  407.     rts    pc
  408. 1:
  409.     mov    r3,-(sp)
  410.     bic    $40,r3
  411.     mov    (sp)+,r3
  412.     bis    $100000,r3
  413.     sub    dot,r2
  414.     sub    $4,r2
  415.     cmp    r5,$adrbuf
  416.     beq    1f
  417.     sub    $2,r2
  418. 1:
  419.     mov    r2,(r5)+        / index
  420.     mov    r3,(r5)+        / index reloc.
  421.     mov    xsymbol,(r5)+        / index global
  422.     mov    $67,r2            / address mode
  423.     bis    (sp)+,r2
  424.     rts    pc
  425.  
  426. alp:
  427.     jsr    pc,readop
  428.     jsr    pc,expres
  429.     jsr    pc,checkrp
  430.     jsr    pc,checkreg
  431.     cmp    r4,$'+
  432.     beq    1f
  433.     tst    (sp)+
  434.     beq    2f
  435.     bis    $70,r2
  436.     clr    (r5)+
  437.     clr    (r5)+
  438.     mov    xsymbol,(r5)+
  439.     rts    pc
  440. 2:
  441.     bis    $10,r2
  442.     rts    pc
  443. 1:
  444.     jsr    pc,readop
  445.     bis    $20,r2
  446.     bis    (sp)+,r2
  447.     rts    pc
  448.  
  449. amin:
  450.     jsr    pc,readop
  451.     cmp    r4,$'(
  452.     beq    1f
  453.     mov    r4,savop
  454.     mov    $'-,r4
  455.     br    getx
  456. 1:
  457.     jsr    pc,readop
  458.     jsr    pc,expres
  459.     jsr    pc,checkrp
  460.     jsr    pc,checkreg
  461.     bis    (sp)+,r2
  462.     bis    $40,r2
  463.     rts    pc
  464.  
  465. adoll:
  466.     jsr    pc,readop
  467.     jsr    pc,expres
  468.     mov    r2,(r5)+
  469.     mov    r3,(r5)+
  470.     mov    xsymbol,(r5)+
  471.     mov    (sp)+,r2
  472.     bis    $27,r2
  473.     rts    pc
  474.  
  475. astar:
  476.     tst    (sp)
  477.     beq    1f
  478.     jsr    r5,error; '*
  479. 1:
  480.     mov    $10,(sp)
  481.     jsr    pc,readop
  482.     jmp    4b
  483.  
  484. errora:
  485.     jsr    r5,error; 'a
  486.     rts    pc
  487.  
  488. checkreg:
  489.     cmp    r2,$7
  490.     bhi    1f
  491.     cmp    r1,$1
  492.     blos    2f
  493.     cmp    r3,$5
  494.     blo    1f
  495. 2:
  496.     rts    pc
  497. 1:
  498.     jsr    pc,errora
  499.     clr    r2
  500.     clr    r3
  501.     rts    pc
  502.  
  503. errore:
  504.     jsr    r5,error; 'e
  505.     rts    pc
  506.  
  507. checkrp:
  508.     cmp    r4,$')
  509.     beq    1f
  510.     jsr    r5,error; ')
  511.     rts    pc
  512. 1:
  513.     jsr    pc,readop
  514.     rts    pc
  515.  
  516. setbr:
  517.     mov    brtabp,r1
  518.     cmp    r1,$brlen
  519.     blt    1f
  520.     mov    $2,r2
  521.     rts    pc
  522. 1:
  523.     inc    brtabp
  524.     clr    -(sp)
  525.     sub    dot,r0
  526.     ble    1f
  527.     sub    brdelt,r0
  528. 1:
  529.     jsr    r5,betwen; -254.; 256.
  530.         br 1f
  531.     br    2f
  532. 1:
  533.     mov    r1,-(sp)
  534.     bic    $!7,(sp)
  535.     mov    $1,r0
  536.     ash    (sp)+,r0
  537.     ash    $-3,r1
  538.     bisb    r0,brtab(r1)
  539.     mov    $2,(sp)
  540. 2:
  541.     mov    (sp)+,r2
  542.     rts    pc
  543.  
  544. getbr:
  545.     mov    brtabp,r1
  546.     cmp    r1,$brlen
  547.     blt    1f
  548.     sec
  549.     rts    pc
  550. 1:
  551.     mov    r1,-(sp)
  552.     bic    $!7,(sp)
  553.     neg    (sp)
  554.     inc    brtabp
  555.     ash    $-3,r1
  556.     movb    brtab(r1),r1
  557.     ash    (sp)+,r1
  558.     ror    r1        / 0-bit into c-bit
  559.     rts    pc
  560.