home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V6 / usr / source / s1 / db1.s < prev    next >
Encoding:
Text File  |  1975-05-13  |  8.6 KB  |  727 lines

  1. / db1 -- debugger
  2.  
  3. fpp = 0
  4. eae = 0
  5. ldfps = 170100^tst
  6.  
  7.  
  8. db:
  9.     mov    sp,r5
  10.     mov    (r5)+,r4
  11.     tst    (r5)+
  12.     cmp    r4,$2
  13.     blt    1f
  14.     mov    (r5),dbfile
  15.     mov    (r5),odbfil
  16.     mov    (r5)+,namfil
  17.     cmp    r4,$2
  18.     beq    1f
  19.     mov    (r5)+,namfil
  20. 1:
  21.     sys    open; dbfile: core; 0
  22.     bec    9f
  23.     jmp    fnfnd
  24. 9:
  25.     mov    r0,dbfin
  26.     clr    dbfout
  27.     sys    open; odbfil:core; 1
  28.     bes    1f
  29.     mov    r0,dbfout
  30. 1:
  31.     sys    open; namfil: a.out; 0
  32.     bes    1f
  33.     mov    r0,r1
  34.     mov    r0,symfin
  35.     sys    read; nambuf; 20
  36.     cmp    nambuf,nobjmagic
  37.     beq    2f
  38.     cmp    nambuf,objmagic
  39.     bne    1f
  40. 2:
  41.     mov    nambuf+2,r0    / text
  42.     add    nambuf+4,r0    / data
  43.     cmp    nambuf+16,$1    / relocation?
  44.     beq    6f
  45.     asl    r0        / sym origin
  46. 6:
  47.     add    $20,r0
  48.     mov    r0,0f
  49.     mov    r1,r0
  50.     sys    seek; 0:..; 0
  51.     mov    nambuf+10,r0    / symbol size
  52.     cmp    r0,$maxsym
  53.     blos    3f
  54.     mov    $maxsym,r0
  55. 3:
  56.     add    r0,0f
  57.     sys    break; 0: nambuf
  58.     mov    r0,0f
  59.     mov    r1,r0
  60.     sys    read; nambuf; 0:..
  61.     add    $nambuf,r0
  62.     mov    r0,namsiz
  63. 1:
  64.     jsr    r5,get; zero    / test new object
  65.     cmp    r0,nobjmagic
  66.     beq    2f
  67.     cmp    r0,objmagic
  68.     bne    1f
  69. 2:
  70.     mov    $20,getoff
  71. 1:
  72.     mov    sp,savsp
  73.     sys    signal; 2; 1
  74.     ror    r0
  75.     bcs    1f
  76.     sys    signal; 2; errexit
  77. 1:
  78.     cmp    r4,$2        / arg count
  79.     beq    9f        / not core image
  80.     cmp    r4,$4        / no-core image flag
  81.     beq    9f
  82.     mov    $1024.,getoff
  83.     mov    dbfin,r0
  84.     sys    seek; 0; 0
  85.     mov    dbfin,r0
  86.     sys    read; regbuf; 1024.
  87.     mov    txtsiz,r0
  88.     ash    $6,r0
  89.     mov    r0,txtsiz
  90.     add    $17777,r0
  91.     bic    $17777,r0
  92.     mov    r0,rtxtsiz
  93.     mov    datsiz,r0
  94.     ash    $6,r0
  95.     mov    r0,datsiz
  96.     mov    stksiz,r0
  97.     ash    $6,r0
  98.     mov    r0,stksiz
  99.     mov    *locfpsr,r0
  100.     bic    $!200,r0
  101.     mov    r0,fpsr
  102.     br    loop
  103. 9:
  104. loop:
  105.     clr    error
  106.     jsr    pc,readlin
  107.     jsr    pc,readexp
  108.     tst    error
  109.     bne    errexit
  110.     mov    $1,count
  111.     cmpb    r0,$',
  112.     bne    2f
  113.     movb    (r4)+,r0
  114.     mov    addres,-(sp)
  115.     mov    adrflg,-(sp)
  116.     jsr    pc,readexp
  117.     mov    addres,count
  118.     mov    (sp)+,adrflg
  119.     mov    (sp)+,addres
  120.     tst    error
  121.     bne    errexit
  122. 2:
  123.     movb    (r4),r0
  124.     jsr    pc,command
  125.     tst    error
  126.     beq    loop
  127. errexit:
  128.     sys    signal; 2; errexit
  129.     mov    savsp,sp
  130.     jsr    r5,mesg; <?\n\0>; .even
  131.     br    loop
  132.  
  133. fnfnd:
  134.     jsr    r5,mesg; <File not found.\n\0>; .even
  135. ex:
  136.     sys    exit
  137.  
  138. readlin:
  139.     mov    $inbuf,r4
  140. 1:
  141.     mov    ttyfin,r0
  142.     sys    read; ch; 1
  143.     tst    r0
  144.     beq    ex
  145.     cmpb    ch,$'\n
  146.     beq    1f
  147.     movb    ch,(r4)+
  148.     br    1b
  149. 1:
  150.     clrb    (r4)
  151.     mov    $inbuf,r4
  152.     rts    pc
  153.  
  154. switch:
  155.     mov    (r5)+,r1
  156. 2:
  157.     cmp    r0,(r1)+
  158.     bne    1f
  159.     tst    (sp)+
  160.     jmp    *(r1)
  161. 1:
  162.     tst    (r1)+
  163.     bne    2b
  164.     rts    r5
  165.  
  166. readexp:
  167.     mov    $'+,lastop
  168.     clr    addres
  169.     clr    starmod
  170.     clr    taddr
  171.     clr    adrflg
  172. nextxp:
  173.     movb    (r4)+,r0
  174.     cmp    r0,$'0
  175.     blt    1f
  176.     cmp    r0,$'9
  177.     ble    numin
  178.     cmp    r0,$'a
  179.     blt    1f
  180.     cmp    r0,$'z
  181.     bgt    1f
  182.     jmp    letin
  183. 1:
  184.     cmp    r0,$'a-40
  185.     blt    1f
  186.     cmp    r0,$'z-40
  187.     ble    letin
  188. 1:
  189.     jsr    r5,switch; expsw
  190.     tstb    -(r4)
  191.     tst    starmod
  192.     beq    1f
  193.     mov    dot,taddr
  194.     br    operand
  195. 1:
  196.     rts    pc
  197.  
  198. expsw:
  199.     '+;    opex
  200.     '-;    opex
  201.     ' ;    nextxp
  202.     '.;    letin
  203.     '_;    letin
  204.     '^;    circumf
  205.     '*;    star
  206.     -1;    0
  207.  
  208. star:
  209.     mov    pc,starmod
  210.     br    nextxp
  211.  
  212. operand:
  213.     inc    adrflg
  214.     tst    starmod
  215.     beq    1f
  216.     clr    starmod
  217.     bis    bytemod,error
  218.     jsr    r5,get; taddr
  219.     tst    error
  220.     bne    1f
  221.     mov    r0,taddr
  222. 1:
  223.     cmp    lastop,$'+
  224.     beq    1f
  225.     sub    taddr,addres
  226.     br    2f
  227. 1:
  228.     add    taddr,addres
  229. 2:
  230.     mov    $'+,lastop
  231.     br    nextxp
  232.  
  233. circumf:
  234.     mov    dot,taddr
  235.     dec    taddr
  236.     tst    bytemod
  237.     bne    operand
  238.     dec    taddr
  239.     br    operand
  240.  
  241. numin:
  242.     clr    r1
  243.     clr    r3
  244. 1:
  245.     sub    $'0,r0
  246.     asl    r1
  247.     asl    r1
  248.     asl    r1
  249.     mpy    $10.,r3
  250.     bis    r0,r1
  251.     add    r0,r3
  252.     movb    (r4)+,r0
  253.     cmp    r0,$'0
  254.     blo    1f
  255.     cmp    r0,$'9
  256.     blos    1b
  257. 1:
  258.     cmp    r0,$'.
  259.     bne    1f
  260.     mov    r3,r1
  261.     inc    r4
  262. 1:
  263.     mov    r1,taddr
  264.     dec    r4
  265.     br    operand
  266.  
  267. letin:
  268.     dec    r4
  269.     mov    $nambuf,namstrt
  270. letin1:
  271.     mov    $symbol,r1
  272.     clr    (r1)+
  273.     clr    (r1)+
  274.     clr    (r1)+
  275.     clr    (r1)
  276.     mov    $symbol,r1
  277.     mov    $8.,-(sp)
  278.     br    2f
  279. 1:
  280.     tstb    (r4)+
  281.     cmpb    (r4),$'.
  282.     beq    2f
  283.     cmpb    (r4),$'0
  284.     blo    3f
  285.     cmpb    (r4),$'9
  286.     blos    2f
  287.     cmpb    (r4),$'A
  288.     blo    3f
  289.     cmpb    (r4),$'Z
  290.     blos    2f
  291.     cmpb    (r4),$'_
  292.     beq    2f
  293.     cmpb    (r4),$'a
  294.     blo    3f
  295.     cmpb    (r4),$'z
  296.     bhi    3f
  297. 2:
  298.     dec    (sp)
  299.     blt    1b
  300.     movb    (r4),(r1)+
  301.     br    1b
  302. 3:
  303.     tst    (sp)+
  304.     jsr    pc,lookupn
  305.     tst    error
  306.     bne    1f
  307.     cmpb    (r4),$';
  308.     beq    2f
  309. 1:
  310.     jmp    operand
  311. 2:
  312.     tstb    (r4)+
  313.     mov    r1,namstrt
  314.     br    letin1
  315.  
  316. opex:
  317.     mov    r0,lastop
  318.     jmp    nextxp
  319.  
  320.  
  321. command:
  322.     jsr    r5,switch; comsw
  323.     inc    error
  324.     rts    pc
  325.  
  326. comsw:
  327.     '/;    slash
  328.     '\\;    bslash
  329.     '?;    quest
  330.     '\0;    newln
  331.     '^;    circumf
  332.     '=;    equal
  333.     ':;    colon
  334.     '!;    excla
  335.     '';    squote
  336.     '";    dquote
  337.     '$;    dolr
  338.     '&;    amper
  339.     '%;    ex
  340.     '`;    grave
  341.     -1;    0
  342.  
  343. dolr:
  344.     mov    sigp,r1
  345.     bic    $!17,r1
  346.     asl    r1
  347.     mov    traptab(r1),r1
  348.     jsr    pc,string
  349.     jsr    pc,pnl
  350.     mov    $doltab,r5
  351. 1:
  352.     mov    (r5)+,r1
  353.     beq    1f
  354.     jsr    pc,*(r5)+
  355.     br    1b
  356.     .if    fpp
  357. 1:
  358.     mov    (r5)+,r1
  359.     beq    1f
  360.     ldfps    fpsr
  361.     jsr    pc,*(r5)+
  362.     br    1b
  363. 1:
  364.     mov    (r5)+,r1
  365.     jsr    pc,*(r5)+
  366.     .endif
  367. 1:
  368.     rts    pc
  369.  
  370. traptab:
  371.     1f; .data; 1:<?0\0>; .text
  372.     1f; .data; 1:<Hangup\0>; .text
  373.     1f; .data; 1:<Interrupt\0>; .text
  374.     1f; .data; 1:<Quit\0>; .text
  375.     1f; .data; 1:<Illegal instruction\0>; .text
  376.     1f; .data; 1:<Trace/BPT\0>; .text
  377.     1f; .data; 1:<IOT\0>; .text
  378.     1f; .data; 1:<EMT\0>; .text
  379.     1f; .data; 1:<FP exception\0>; .text
  380.     1f; .data; 1:<Killed\0>; .text
  381.     1f; .data; 1:<Bus error\0>; .text
  382.     1f; .data; 1:<Segmentation violation\0>; .text
  383.     1f; .data; 1:<Bad system call\0>; .text
  384.     1f; .data; 1:<?15\0>; .text
  385.     1f; .data; 1:<?16\0>; .text
  386.     1f; .data; 1:<?17\0>; .text
  387.  
  388. locps:    regbuf+1776
  389. locpc:    regbuf+1774
  390. locr0:    regbuf+1772
  391. locr1:    regbuf+1766
  392. locr2:    regbuf+1750
  393. locr3:    regbuf+1752
  394. locr4:    regbuf+1754
  395. locsp:    regbuf+1764
  396. locr5:    regbuf+1756
  397. locfpsr: regbuf+4
  398. locfr0:    regbuf+6
  399. locfr4:    regbuf+16
  400. locfr5:    regbuf+26
  401. locfr1:    regbuf+36
  402. locfr2:    regbuf+46
  403. locfr3:    regbuf+56
  404.  
  405. doltab:
  406.     1f; prgreg; locsp; .data; 1:<sp    \0>; .text
  407.     1f; proct; locps; .data; 1:<ps    \0>; .text
  408.     1f; prgreg; locpc; .data; 1:<pc    \0>; .text
  409.     1f; prgreg; locr0; .data; 1:<r0    \0>; .text
  410.     1f; prgreg; locr1; .data; 1:<r1    \0>; .text
  411.     1f; prgreg; locr2; .data; 1:<r2    \0>; .text
  412.     1f; prgreg; locr3; .data; 1:<r3    \0>; .text
  413.     1f; prgreg; locr4; .data; 1:<r4    \0>; .text
  414.     1f; prgreg; locr5; .data; 1:<r5    \0>; .text
  415.     0
  416.     .if    fpp
  417.     1f; prfreg; locfr0; .data; 1:<fr0    \0>; .text
  418.     1f; prfreg; locfr1; .data; 1:<fr1    \0>; .text
  419.     1f; prfreg; locfr2; .data; 1:<fr2    \0>; .text
  420.     1f; prfreg; locfr3; .data; 1:<fr3    \0>; .text
  421.     1f; prfreg; locfr4; .data; 1:<fr4    \0>; .text
  422.     1f; prfreg; locfr5; .data; 1:<fr5    \0>; .text
  423.     0
  424.     1f; proct; locfpsr; .data; 1:<fpsr    \0>; .text
  425.     .endif
  426. .data
  427. .even
  428. .text
  429.  
  430.     .if    fpp
  431. prfreg:
  432.     mov    *(r5)+,r4
  433.     movf    (r4),fr0
  434.     cfcc
  435.     beq    1f
  436.     jsr    pc,string
  437.     jsr    pc,printf
  438.     jsr    pc,pnl
  439. 1:
  440.     rts    pc
  441.     .endif
  442.  
  443. prgreg:
  444.     jsr    pc,string
  445.     mov    *(r5)+,r4
  446.     mov    (r4),r0
  447.     jsr    pc,printo
  448.     mov    (r4),r0
  449.     jsr    pc,lookupv
  450.     tst    r2
  451.     beq    1f
  452.     jsr    r5,mesg; <    \0>; .even
  453.     mov    (r4),r0
  454.     jsr    pc,pname
  455. 1:
  456.     jsr    pc,pnl
  457.     rts    pc
  458.  
  459. proct:
  460.     jsr    pc,string
  461.     mov    *(r5)+,r4
  462.     mov    (r4),r0
  463.     jsr    pc,printo
  464.     jsr    pc,pnl
  465.     rts    pc
  466.  
  467. string:
  468.     movb    (r1)+,r0
  469.     beq    1f
  470.     jsr    pc,putc
  471.     br    string
  472. 1:
  473.     rts    pc
  474.  
  475. putc:
  476.     mov    r0,och
  477.     mov    $1,r0
  478.     sys    write; och; 1
  479.     rts    pc
  480.  
  481. equal:
  482.     jsr    r5,coleq; printo
  483.     rts    pc
  484. amper:
  485.     clr    bytemod
  486.     mov    $2,incdot
  487.     jsr    r5,cycle; asymp
  488.     rts    pc
  489.  
  490. asymp:
  491.     jsr    pc,pname
  492.     jsr    pc,pnl
  493.     rts    pc
  494.  
  495. bslash:
  496.     inc    bytemod
  497.     mov    $1,incdot
  498.     br    1f
  499.  
  500. slash:
  501.     clr    bytemod
  502.     mov    $2,incdot
  503. 1:
  504.     jsr    r5,cycle; octp
  505.     rts    pc
  506.  
  507. grave:
  508.     clr    bytemod
  509.     mov    $2,incdot
  510.     jsr    r5,cycle;  decp
  511.     rts    pc
  512.  
  513. quest:
  514.     clr    bytemod
  515.     jsr    r5,cycle; psym
  516.     rts    pc
  517.  
  518. decp:
  519.     jsr    pc,printd
  520.     jsr    r5,mesg; <.\n\0>; .even
  521.     rts    pc
  522.  
  523. octp:
  524.     jsr    pc,printo
  525.     jsr    pc,pnl
  526.     rts    pc
  527.  
  528. newln:
  529.     tst    adrflg
  530.     bne    1f
  531.     add    incdot,dot
  532. 1:
  533.     mov    nlcom,r0
  534.     jmp    command
  535.  
  536. excla:
  537.     tst    adrflg
  538.     bne    1f
  539. 2:
  540.     inc    error
  541.     rts    pc
  542. 1:
  543.     bit    $1,dot
  544.     beq    1f
  545.     tst    bytemod
  546.     beq    2b
  547. 1:
  548.     jsr    r5,put; dot; addres
  549.     rts    pc
  550.  
  551. squote:
  552.     inc    bytemod
  553.     mov    $1,incdot
  554.     br    2f
  555. dquote:
  556.     clr    bytemod
  557.     mov    $2,incdot
  558. 2:
  559.     jsr    r5,cycle; ascp
  560.     rts    pc
  561.  
  562. ascp:
  563.     mov    r0,-(sp)
  564.     jsr    pc,ascp1
  565.     mov    (sp)+,r0
  566.     tst    bytemod
  567.     bne    1f
  568.     swab    r0
  569.     jsr    pc,ascp1
  570. 1:
  571.     cmp    count,$1
  572.     bgt    1f
  573.     jsr    pc,pnl
  574. 1:
  575.     rts    pc
  576.  
  577. ascp1:
  578.     bic    $!377,r0
  579.     cmp    r0,$'\n
  580.     beq    2f
  581.     cmp    r0,$011
  582.     beq    2f
  583.     cmp    r0,$40
  584.     blo    1f
  585.     cmp    r0,$177
  586.     bhis    1f
  587. 2:
  588.     jsr    pc,putc
  589.     rts    pc
  590. 1:
  591.     mov    r0,r1
  592.     jsr    r5,mesg; <\\\0>
  593.     clr    r0
  594.     alsc    $10.,r0
  595.     add    $'0,r0
  596.     jsr    pc,putc
  597.     clr    r0
  598.     alsc    $3,r0
  599.     add    $'0,r0
  600.     jsr    pc,putc
  601.     clr    r0
  602.     alsc    $3,r0
  603.     add    $'0,r0
  604.     jsr    pc,putc
  605.     rts    pc
  606.  
  607. colon:
  608.     jsr    r5,coleq; pname
  609.     rts    pc
  610.  
  611. coleq:
  612.     jsr    pc,setadr
  613.     mov    addres,r0
  614.     jsr    pc,*(r5)+
  615.     jsr    pc,pnl
  616.     rts    r5
  617.  
  618. cycle:
  619.     mov    r0,nlcom
  620.     jsr    pc,setadr
  621.     mov    addres,dot
  622.     tst    bytemod
  623.     bne    1f
  624.     bic    $1,dot
  625. 1:
  626.     jsr    r5,get; dot
  627.     tst    error
  628.     bne    1f
  629.     tst    bytemod
  630.     beq    2f
  631.     bic    $!377,r0
  632. 2:
  633.     jsr    pc,*(r5)
  634.     tst    error
  635.     bne    1f
  636.     dec    count
  637.     ble    1f
  638.     add    incdot,dot
  639.     br    1b
  640. 1:
  641.     tst    (r5)+
  642.     rts    r5
  643.  
  644. setadr:
  645.     tst    adrflg
  646.     bne    1f
  647.     mov    dot,addres
  648. 1:
  649.     rts    pc
  650.  
  651.     .if    fpp
  652. printf:
  653.     ldfps    $200        / round+double
  654.     mov    r4,-(sp)
  655.     mov    r3,-(sp)
  656.     movif    $10.,r3
  657.     movif    $1,r2
  658.     clr    r4
  659.     tstf    r0
  660.     cfcc
  661.     beq    2f
  662.     bge    1f
  663.     negf    r0
  664.     mov    $'-,r0
  665.     jsr    pc,putc
  666. 1:
  667.     cmpf    r3,r0
  668.     cfcc
  669.     bgt    1f
  670.     inc    r4
  671.     divf    r3,r0
  672.     br    1b
  673. 1:
  674.     cmpf    r2,r0
  675.     cfcc
  676.     ble    2f
  677.     dec    r4
  678.     mulf    r3,r0
  679.     br    1b
  680. 2:
  681.     modf    r2,r0
  682.     movfi    r1,r0
  683.     add    $'0,r0
  684.     jsr    pc,putc
  685.     mov    $'.,r0
  686.     jsr    pc,putc
  687.     mov    $8.,r3
  688. 1:
  689.     modf    r3,r0
  690.     movfi    r1,r0
  691.     add    $'0,r0
  692.     jsr    pc,putc
  693.     dec    r3
  694.     bgt    1b
  695.     mov    $'E,r0
  696.     jsr    pc,putc
  697.     mov    r4,r0
  698.     mov    (sp)+,r3
  699.     mov    (sp)+,r4
  700.     br    printd
  701.     .endif
  702.  
  703. printd:
  704.     mov    r1,-(sp)
  705.     mov    r0,r1
  706.     bpl    1f
  707.     neg    r1
  708.     mov    $'-,r0
  709.     jsr    pc,putc
  710. 1:
  711.     jsr    pc,1f
  712.     mov    (sp)+,r1
  713.     rts    pc
  714. 1:
  715.     clr    r0
  716.     dvd    $10.,r0
  717.     mov    r1,-(sp)
  718.     mov    r0,r1
  719.     beq    1f
  720.     jsr    pc,1b
  721. 1:
  722.     mov    (sp)+,r0
  723.     add    $'0,r0
  724.     jsr    pc,putc
  725.     rts    pc
  726.  
  727.