📄 db1.s
字号:
/ db1 -- debuggerfpp = 0eae = 0ldfps = 170100^tstdb: mov sp,r5 mov (r5)+,r4 tst (r5)+ cmp r4,$2 blt 1f mov (r5),dbfile mov (r5),odbfil mov (r5)+,namfil cmp r4,$2 beq 1f mov (r5)+,namfil1: sys open; dbfile: core; 0 bec 9f jmp fnfnd9: mov r0,dbfin clr dbfout sys open; odbfil:core; 1 bes 1f mov r0,dbfout1: sys open; namfil: a.out; 0 bes 1f mov r0,r1 mov r0,symfin sys read; nambuf; 20 cmp nambuf,nobjmagic beq 2f cmp nambuf,objmagic bne 1f2: mov nambuf+2,r0 / text add nambuf+4,r0 / data cmp nambuf+16,$1 / relocation? beq 6f asl r0 / sym origin6: add $20,r0 mov r0,0f mov r1,r0 sys seek; 0:..; 0 mov nambuf+10,r0 / symbol size cmp r0,$maxsym blos 3f mov $maxsym,r03: add r0,0f sys break; 0: nambuf mov r0,0f mov r1,r0 sys read; nambuf; 0:.. add $nambuf,r0 mov r0,namsiz1: jsr r5,get; zero / test new object cmp r0,nobjmagic beq 2f cmp r0,objmagic bne 1f2: mov $20,getoff1: mov sp,savsp sys signal; 2; 1 ror r0 bcs 1f sys signal; 2; errexit1: cmp r4,$2 / arg count beq 9f / not core image cmp r4,$4 / no-core image flag beq 9f mov $1024.,getoff mov dbfin,r0 sys seek; 0; 0 mov dbfin,r0 sys read; regbuf; 1024. mov txtsiz,r0 ash $6,r0 mov r0,txtsiz add $17777,r0 bic $17777,r0 mov r0,rtxtsiz mov datsiz,r0 ash $6,r0 mov r0,datsiz mov stksiz,r0 ash $6,r0 mov r0,stksiz mov *locfpsr,r0 bic $!200,r0 mov r0,fpsr br loop9:loop: clr error jsr pc,readlin jsr pc,readexp tst error bne errexit mov $1,count cmpb r0,$', bne 2f movb (r4)+,r0 mov addres,-(sp) mov adrflg,-(sp) jsr pc,readexp mov addres,count mov (sp)+,adrflg mov (sp)+,addres tst error bne errexit2: movb (r4),r0 jsr pc,command tst error beq looperrexit: sys signal; 2; errexit mov savsp,sp jsr r5,mesg; <?\n\0>; .even br loopfnfnd: jsr r5,mesg; <File not found.\n\0>; .evenex: sys exitreadlin: mov $inbuf,r41: mov ttyfin,r0 sys read; ch; 1 tst r0 beq ex cmpb ch,$'\n beq 1f movb ch,(r4)+ br 1b1: clrb (r4) mov $inbuf,r4 rts pcswitch: mov (r5)+,r12: cmp r0,(r1)+ bne 1f tst (sp)+ jmp *(r1)1: tst (r1)+ bne 2b rts r5readexp: mov $'+,lastop clr addres clr starmod clr taddr clr adrflgnextxp: movb (r4)+,r0 cmp r0,$'0 blt 1f cmp r0,$'9 ble numin cmp r0,$'a blt 1f cmp r0,$'z bgt 1f jmp letin1: cmp r0,$'a-40 blt 1f cmp r0,$'z-40 ble letin1: jsr r5,switch; expsw tstb -(r4) tst starmod beq 1f mov dot,taddr br operand1: rts pcexpsw: '+; opex '-; opex ' ; nextxp '.; letin '_; letin '^; circumf '*; star -1; 0star: mov pc,starmod br nextxpoperand: inc adrflg tst starmod beq 1f clr starmod bis bytemod,error jsr r5,get; taddr tst error bne 1f mov r0,taddr1: cmp lastop,$'+ beq 1f sub taddr,addres br 2f1: add taddr,addres2: mov $'+,lastop br nextxpcircumf: mov dot,taddr dec taddr tst bytemod bne operand dec taddr br operandnumin: clr r1 clr r31: sub $'0,r0 asl r1 asl r1 asl r1 mpy $10.,r3 bis r0,r1 add r0,r3 movb (r4)+,r0 cmp r0,$'0 blo 1f cmp r0,$'9 blos 1b1: cmp r0,$'. bne 1f mov r3,r1 inc r41: mov r1,taddr dec r4 br operandletin: dec r4 mov $nambuf,namstrtletin1: mov $symbol,r1 clr (r1)+ clr (r1)+ clr (r1)+ clr (r1) mov $symbol,r1 mov $8.,-(sp) br 2f1: tstb (r4)+ cmpb (r4),$'. beq 2f cmpb (r4),$'0 blo 3f cmpb (r4),$'9 blos 2f cmpb (r4),$'A blo 3f cmpb (r4),$'Z blos 2f cmpb (r4),$'_ beq 2f cmpb (r4),$'a blo 3f cmpb (r4),$'z bhi 3f2: dec (sp) blt 1b movb (r4),(r1)+ br 1b3: tst (sp)+ jsr pc,lookupn tst error bne 1f cmpb (r4),$'; beq 2f1: jmp operand2: tstb (r4)+ mov r1,namstrt br letin1opex: mov r0,lastop jmp nextxpcommand: jsr r5,switch; comsw inc error rts pccomsw: '/; slash '\\; bslash '?; quest '\0; newln '^; circumf '=; equal ':; colon '!; excla ''; squote '"; dquote '$; dolr '&; amper '%; ex '`; grave -1; 0dolr: mov sigp,r1 bic $!17,r1 asl r1 mov traptab(r1),r1 jsr pc,string jsr pc,pnl mov $doltab,r51: mov (r5)+,r1 beq 1f jsr pc,*(r5)+ br 1b .if fpp1: mov (r5)+,r1 beq 1f ldfps fpsr jsr pc,*(r5)+ br 1b1: mov (r5)+,r1 jsr pc,*(r5)+ .endif1: rts pctraptab: 1f; .data; 1:<?0\0>; .text 1f; .data; 1:<Hangup\0>; .text 1f; .data; 1:<Interrupt\0>; .text 1f; .data; 1:<Quit\0>; .text 1f; .data; 1:<Illegal instruction\0>; .text 1f; .data; 1:<Trace/BPT\0>; .text 1f; .data; 1:<IOT\0>; .text 1f; .data; 1:<EMT\0>; .text 1f; .data; 1:<FP exception\0>; .text 1f; .data; 1:<Killed\0>; .text 1f; .data; 1:<Bus error\0>; .text 1f; .data; 1:<Segmentation violation\0>; .text 1f; .data; 1:<Bad system call\0>; .text 1f; .data; 1:<?15\0>; .text 1f; .data; 1:<?16\0>; .text 1f; .data; 1:<?17\0>; .textlocps: regbuf+1776locpc: regbuf+1774locr0: regbuf+1772locr1: regbuf+1766locr2: regbuf+1750locr3: regbuf+1752locr4: regbuf+1754locsp: regbuf+1764locr5: regbuf+1756locfpsr: regbuf+4locfr0: regbuf+6locfr4: regbuf+16locfr5: regbuf+26locfr1: regbuf+36locfr2: regbuf+46locfr3: regbuf+56doltab: 1f; prgreg; locsp; .data; 1:<sp \0>; .text 1f; proct; locps; .data; 1:<ps \0>; .text 1f; prgreg; locpc; .data; 1:<pc \0>; .text 1f; prgreg; locr0; .data; 1:<r0 \0>; .text 1f; prgreg; locr1; .data; 1:<r1 \0>; .text 1f; prgreg; locr2; .data; 1:<r2 \0>; .text 1f; prgreg; locr3; .data; 1:<r3 \0>; .text 1f; prgreg; locr4; .data; 1:<r4 \0>; .text 1f; prgreg; locr5; .data; 1:<r5 \0>; .text 0 .if fpp 1f; prfreg; locfr0; .data; 1:<fr0 \0>; .text 1f; prfreg; locfr1; .data; 1:<fr1 \0>; .text 1f; prfreg; locfr2; .data; 1:<fr2 \0>; .text 1f; prfreg; locfr3; .data; 1:<fr3 \0>; .text 1f; prfreg; locfr4; .data; 1:<fr4 \0>; .text 1f; prfreg; locfr5; .data; 1:<fr5 \0>; .text 0 1f; proct; locfpsr; .data; 1:<fpsr \0>; .text .endif.data.even.text .if fppprfreg: mov *(r5)+,r4 movf (r4),fr0 cfcc beq 1f jsr pc,string jsr pc,printf jsr pc,pnl1: rts pc .endifprgreg: jsr pc,string mov *(r5)+,r4 mov (r4),r0 jsr pc,printo mov (r4),r0 jsr pc,lookupv tst r2 beq 1f jsr r5,mesg; < \0>; .even mov (r4),r0 jsr pc,pname1: jsr pc,pnl rts pcproct: jsr pc,string mov *(r5)+,r4 mov (r4),r0 jsr pc,printo jsr pc,pnl rts pcstring: movb (r1)+,r0 beq 1f jsr pc,putc br string1: rts pcputc: mov r0,och mov $1,r0 sys write; och; 1 rts pcequal: jsr r5,coleq; printo rts pcamper: clr bytemod mov $2,incdot jsr r5,cycle; asymp rts pcasymp: jsr pc,pname jsr pc,pnl rts pcbslash: inc bytemod mov $1,incdot br 1fslash: clr bytemod mov $2,incdot1: jsr r5,cycle; octp rts pcgrave: clr bytemod mov $2,incdot jsr r5,cycle; decp rts pcquest: clr bytemod jsr r5,cycle; psym rts pcdecp: jsr pc,printd jsr r5,mesg; <.\n\0>; .even rts pcoctp: jsr pc,printo jsr pc,pnl rts pcnewln: tst adrflg bne 1f add incdot,dot1: mov nlcom,r0 jmp commandexcla: tst adrflg bne 1f2: inc error rts pc1: bit $1,dot beq 1f tst bytemod beq 2b1: jsr r5,put; dot; addres rts pcsquote: inc bytemod mov $1,incdot br 2fdquote: clr bytemod mov $2,incdot2: jsr r5,cycle; ascp rts pcascp: mov r0,-(sp) jsr pc,ascp1 mov (sp)+,r0 tst bytemod bne 1f swab r0 jsr pc,ascp11: cmp count,$1 bgt 1f jsr pc,pnl1: rts pcascp1: bic $!377,r0 cmp r0,$'\n beq 2f cmp r0,$011 beq 2f cmp r0,$40 blo 1f cmp r0,$177 bhis 1f2: jsr pc,putc rts pc1: mov r0,r1 jsr r5,mesg; <\\\0> clr r0 alsc $10.,r0 add $'0,r0 jsr pc,putc clr r0 alsc $3,r0 add $'0,r0 jsr pc,putc clr r0 alsc $3,r0 add $'0,r0 jsr pc,putc rts pccolon: jsr r5,coleq; pname rts pccoleq: jsr pc,setadr mov addres,r0 jsr pc,*(r5)+ jsr pc,pnl rts r5cycle: mov r0,nlcom jsr pc,setadr mov addres,dot tst bytemod bne 1f bic $1,dot1: jsr r5,get; dot tst error bne 1f tst bytemod beq 2f bic $!377,r02: jsr pc,*(r5) tst error bne 1f dec count ble 1f add incdot,dot br 1b1: tst (r5)+ rts r5setadr: tst adrflg bne 1f mov dot,addres1: rts pc .if fppprintf: ldfps $200 / round+double mov r4,-(sp) mov r3,-(sp) movif $10.,r3 movif $1,r2 clr r4 tstf r0 cfcc beq 2f bge 1f negf r0 mov $'-,r0 jsr pc,putc1: cmpf r3,r0 cfcc bgt 1f inc r4 divf r3,r0 br 1b1: cmpf r2,r0 cfcc ble 2f dec r4 mulf r3,r0 br 1b2: modf r2,r0 movfi r1,r0 add $'0,r0 jsr pc,putc mov $'.,r0 jsr pc,putc mov $8.,r31: modf r3,r0 movfi r1,r0 add $'0,r0 jsr pc,putc dec r3 bgt 1b mov $'E,r0 jsr pc,putc mov r4,r0 mov (sp)+,r3 mov (sp)+,r4 br printd .endifprintd: mov r1,-(sp) mov r0,r1 bpl 1f neg r1 mov $'-,r0 jsr pc,putc1: jsr pc,1f mov (sp)+,r1 rts pc1: clr r0 dvd $10.,r0 mov r1,-(sp) mov r0,r1 beq 1f jsr pc,1b1: mov (sp)+,r0 add $'0,r0 jsr pc,putc rts pc
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -