📄 bas.s
字号:
cmpb (r3),$') bne 1f movb (r3)+,r0 br 2f1: inc (sp) jsr pc,expr cmp r0,$', beq 1b2: mov (r5)+,(r4)+ mov (sp)+,(r4)+ rts r5/// bas3 -- executionexecute: mov $estack,r3 mov r3,sstack jmp *(r4)+_if: tstf (r3)+ cfcc beq _tra tst (r4)+ jmp *(r4)+_ptra: mov sstack,r3_tra: mov (r4)+,r4 jmp *(r4)+_funct: mov r4,-(r3) mov sstack,-(r3) mov r3,sstack inc sublev clr r0 jsr pc,arg tstf r0 cfcc bge 1f jmp builtin_goto: movf (r3),r01: movfi r0,-(sp) jsr pc,compile mov (sp)+,r0 jsr pc,getloc mov 4(r1),r4 jmp *(r4)+_run: jsr pc,isymtab mov randx,r0 jsr pc,srand jsr pc,compile mov $space,r4 jmp *(r4)+_save: / _save is a _list to the file named on the bas command sys creat; argname; 666 bes 1f mov r0,prfile br 2f1: mov 1f,r0 mov $1,prfile jsr pc,print br _done1: <Cannot create b.out\n\0>; .even_list: mov $1,prfile2: movf (r3)+,r0 movfi r0,-(sp)/ probably vistigal?? mov r3,0f movf (r3),r0 movfi r0,lineno1: jsr pc,nextlin br 1f cmp lineno,(sp) bhi 1f mov $line,r0 jsr pc,print inc lineno br 1b1: cmp $1,prfile beq 1f mov prfile,r0 sys close mov $1,prfile1: tst (sp)+ jmp *(r4)+_done: sys unlink; tmpf sys exit.if scope / for plotting_sdisp: mov $2,r0 jsr pc,drput jsr pc,drxy mov $1,r0 jsr pc,drput mov $3,r0 jsr pc,drput incb drflg jmp *(r4)+_fdisp: clr r0 jsr pc,drput clrb drflg jmp *(r4)+_draw: movf (r3)+,r2 movf (r3)+,r1 movf (r3)+,r0 jsr r5,draw jmp *(r4)+_erase: mov $1,r0 jsr pc,drput mov $1,r0 jsr pc,drput jmp *(r4)+.endif_print: movf (r3)+,r0 jsr r5,ftoa; xputc jmp *(r4)+_octal: movf (r3)+,r0 jsr r5,ftoo; xputc jmp *(r4)+_nline: mov $'\n,r0 jsr r5,xputc jmp *(r4)+_ascii: movb (r4)+,r0 cmp r0,$'" beq 1f jsr r5,xputc br _ascii1: inc r4 bic $1,r4 jmp *(r4)+_line: mov sstack,r3 cmp r3,$stack+20. bhi 1f jsr r5,error <out of space\n\0>; .even1: mov (r4)+,lineno jmp *(r4)+_or: tstf (r3)+ cfcc bne stone tstf (r3) cfcc bne stone br stzero_and: tstf (r3)+ cfcc beq stzero tstf (r3) cfcc beq stzero br stone_great: jsr pc,bool bgt stone br stzero_greateq: jsr pc,bool bge stone br stzero_less: jsr pc,bool blt stone br stzero_lesseq: jsr pc,bool ble stone br stzero_noteq: jsr pc,bool bne stone br stzero_equal: jsr pc,bool beq stonestzero: clrf r0 br advancstone: movf $one,r0 br advanc_extr: movf r1,r0 / dup for _and in extended rel br subadv_asgn: movf (r3)+,r0 mov (r3)+,r0 add $4,r0 bis $1,(r0)+ movf r0,(r0) br subadv_add: movf (r3)+,r0 addf (r3),r0 br advanc_sub: movf (r3)+,r0 negf r0 addf (r3),r0 br advanc_mult: movf (r3)+,r0 mulf (r3),r0 br advanc_divid: movf (r3)+,r1 movf (r3),r0 divf r1,r0 br advanc_expon: movf (r3)+,fr1 movf (r3),fr0 jsr pc,pow bec advanc jsr r5,error <Bad exponentiation\n\0>; .even_neg: / unary - negf r0 jbr advanc/ end of _neg_intcon: movif (r4)+,r0 jbr subadv_con0: clrf r0 jbr subadv_con1: movf $one,r0 jbr subadv_const: movf (r4)+,r0subadv: movf r0,-(r3) jmp *(r4)+advanc: movf r0,(r3) jmp *(r4)+_rval: jsr pc,getlv br subadv_fori: jsr pc,getlv addf $one,r0 movf r0,(r0) br subadv_lval: mov (r4)+,-(r3) jmp *(r4)+_dup: movf (r3),r0 br subadv_return: dec sublev bge 1f jsr r5,error <bad return\n\0>; .even1: movf (r3),r0 mov sstack,r3 mov (r3)+,sstack mov (r3)+,r4 mov (r4)+,r01: dec r0 blt advanc add $8,r3 br 1b_subscr: mov (r4),r1 mpy $8.,r1 add r1,r3 mov r3,-(sp) mov (r3),r0 mov (r4)+,-(sp)1: dec (sp) blt 1f movf -(r3),r0 movfi r0,r2 com r2 blt 2f jsr r5,error <subscript out of range\n\0>; .even2: mov r0,r1 mov 4(r0),r0 bic $1,r02: beq 2f cmp r2,(r0)+ bne 3f tst -(r0) br 1b3: mov (r0),r0 br 2b2: mov $symtab,r02: tst (r0) beq 2f add $14.,r0 br 2b2: cmp r0,$esymtab-28. blo 2f jsr r5,error <out of symbol space\n\0>; .even2: cmp (r1)+,(r1)+ mov r0,-(sp) clr 14.(r0) mov r2,(r0)+ mov (r1),r2 bic $1,r2 mov r2,(r0)+ clr (r0)+ mov (sp)+,r0 bic $!1,(r1) bis r0,(r1) br 1b1: tst (sp)+ mov (sp)+,r3 mov r0,(r3) jmp *(r4)+bool: movf (r3)+,r1 / r1 used in extended rel cmpf (r3),r1 cfcc rts pcgetlv: mov (r3)+,r0 add $4,r0 bit $1,(r0)+ bne 1f jsr r5,error;<used before set\n\0>; .even1: movf (r0),r0 rts pc/// bas4 -- builtin functionsbuiltin: dec sublev mov (r3)+,sstack mov (r3)+,r4 movfi r0,r0 com r0 asl r0 cmp r0,$2f-1f bhis 2f jmp *1f(r0)1: fnarg fnexp fnlog fnsin fncos fnatan fnrand fnexpr fnint fnabs fnsqr2: mov $-1,r0 jsr pc,getloc / label not found diagnosticfnarg: cmp (r4)+,$1 bne narg movf (r3),r0 movfi r0,r0 jsr pc,arg br fnadvancfnexp: jsr r5,fnfn; exp br fnadvancfnlog: jsr r5,fnfn; log bec fnadvanc jsr r5,error <Bad log\n\0>; .evenfnsin: jsr r5,fnfn; sin bec fnadvanc jsr r5,error <Bad sine\n\0>; .evenfncos: jsr r5,fnfn; cos bec fnadvanc jsr r5,error <Bad cosine\n\0>; .evenfnatan: jsr r5,fnfn; atan bec fnadvanc jsr r5,error <Bad arctangent\n\0>; .evenfnrand: tst (r4)+ bne narg jsr pc,rand movif r0,r0 divf $44000,r0 jmp advancfnexpr: tst (r4)+ bne narg mov r3,-(sp) mov r4,-(sp) jsr pc,rdline mov exprloc,r4 mov $line,r3 jsr pc,expr mov $_tra,(r4)+ mov (sp)+,(r4)+ mov (sp)+,r3 mov exprloc,r4 add $8,r3 jmp *(r4)+fnint: cmp (r4)+,$1 bne narg movf (r3),r0 modf $one,r0 movf r1,r0 br fnadvancfnabs: cmp (r4)+,$1 bne narg movf (r3),r0 cfcc bge fnadvanc negf r0 br fnadvancfnsqr: jsr r5,fnfn; sqrt bec fnadvanc jsr r5,error <Bad square root arg\n\0>; .evenfnadvanc: add $8,r3 jmp advancnarg: jsr r5,error <arg count\n\0>; .evenarg: tst sublev beq 1f mov sstack,r1 sub *2(r1),r0 bhi 1f2: inc r0 bgt 2f add $8,r1 br 2b2: movf 4(r1),r0 rts pc1: jsr r5,error <bad arg\n\0>; .evenfnfn: cmp (r4)+,$1 bne narg movf (r3),r0 jsr pc,*(r5)+ rts r5.if scope / for plottingdraw: tstf r2 cfcc bne 1f movf r0,drx movf r1,dry rts r51: movf r0,-(sp) movf r1,-(sp) mov $3,r0 jsr pc,drput jsr pc,drxy movf (sp)+,r0 movf r0,dry movf (sp)+,r0 movf r0,drx jsr pc,drxy rts r5drxy: movf drx,r0 jsr pc,drco movf dry,r0drco: tstf r0 cfcc bge 1f clrf r01: cmpf $40200,r0 / 1.0 cfcc bgt 1f movf $40177,r0 / 1.0-eps1: subf $40000,r0 / .5 mulf $43200,r0 / 4096 movfi r0,r0 mov r0,-(sp) jsr pc,drput mov (sp)+,r0 swab r0drput: movb r0,ch mov drfo,r0 bne 1f sys open; vt; 1 bec 2f 42: mov r0,drfo1: sys write; ch; 1 rts pc.endif/ bas4 -- old library routinesatoi: clr r1 jsr r5,nextc clr -(sp) cmp r0,$'- bne 2f inc (sp)1: jsr r5,nextc2: sub $'0,r0 cmp r0,$9 bhi 1f mpy $10.,r1 bcs 3f / >32k add r0,r1 bcs 3f / >32k br 1b1: add $'0,r0 tst (sp)+ beq 1f neg r11: rts r53: tst (sp)+ mov $'.,r0 / faking overflow br 1bldfps = 170100^tststfps = 170200^tstatof: stfps -(sp) ldfps $200 movf fr1,-(sp) mov r1,-(sp) mov r2,-(sp) clr -(sp) clrf fr0 clr r2 jsr r5,*(r5) cmpb r0,$'- bne 2f inc (sp)1: jsr r5,*(r5)2: sub $'0,r0 cmp r0,$9. bhi 2f jsr pc,dig br 1b inc r2 br 1b2: cmpb r0,$'.-'0 bne 2f1: jsr r5,*(r5) sub $'0,r0 cmp r0,$9. bhi 2f jsr pc,dig dec r2 br 1b2: cmpb r0,$'e-'0 bne 1f jsr r5,atoi sub $'0,r0 add r1,r21: movf $one,fr1 mov r2,-(sp) beq 2f bgt 1f neg r21: cmp r2,$38. blos 1f clrf fr0 tst (sp)+ bmi out movf $huge,fr0 br out1: mulf $ten,fr1 sob r2,1b2: tst (sp)+ bge 1f divf fr1,fr0 br 2f1: mulf fr1,fr0 cfcc bvc 2f movf $huge,fr02:out: tst (sp)+ beq 1f negf fr01: add $'0,r0 mov (sp)+,r2 mov (sp)+,r1 movf (sp)+,fr1 ldfps (sp)+ tst (r5)+ rts r5dig: cmpf $big,fr0 cfcc blt 1f mulf $ten,fr0 movif r0,fr1 addf fr1,fr0 rts pc1: add $2,(sp) rts pcone = 40200ten = 41040big = 56200huge = 77777.globl _ndigits.globl ecvt.globl fcvtftoa: jsr pc,ecvt mov r0,bufptr tstb r1 beq 1f mov $'-,r0 jsr r5,*(r5)1: cmp r3,$-2 blt econ cmp r2,$-5 ble econ cmp r2,$6 bgt econ jsr pc,cout tst (r5)+ rts r5econ: mov r2,-(sp) mov $1,r2 jsr pc,cout mov $'e,r0 jsr r5,*(r5) mov (sp)+,r0 dec r0 jmp itoacout: mov bufptr,r1 add _ndigits,r1 mov r2,-(sp) add bufptr,r21: cmp r1,r2 blos 1f cmpb -(r1),$'0 beq 1b inc r11: mov (sp)+,r2 bge 2f mov $'.,r0 jsr r5,*(r5)1: mov $'0,r0 jsr r5,*(r5) inc r2 blt 1b dec r22: mov r2,-(sp) mov bufptr,r21: cmp r2,r1 bhis 1f tst (sp) bne 2f mov $'.,r0 jsr r5,*(r5)2: dec (sp) movb (r2)+,r0 jsr r5,*(r5) br 1b1: tst (sp)+ rts pc.bssbufptr: .=.+2.textftoo: stfps -(sp) ldfps $200 mov r1,-(sp) mov r2,-(sp) mov $buf,r1 movf fr0,(r1)+ mov $buf,r2 br 2f1: cmp r2,r1 bhis 1f mov $';,r0 jsr r5,*(r5)2: mov (r2)+,r0 jsr pc,oct br 1b1: mov $'\n,r0 jsr pc,*(r5)+ ldfps (sp)+ rts r5oct: mov r0,x+2 setl movif x,fr0 mulf $small,fr0 seti mov $6.,-(sp)1: modf $eight,fr0 movfi fr1,r0 add $'0,r0 jsr r5,*(r5) dec (sp) bne 1b tst (sp)+ rts pceight = 41000small = 33600.bssbuf: .=.+8x: .=.+4.textitoa: mov r1,-(sp) mov r0,r1 bge 1f neg r1 mov $'-,r0 jsr r5,*(r5)1: jsr pc,1f mov (sp)+,r1 tst (r5)+ rts r51: clr r0 dvd $10.,r0 mov r1,-(sp) mov r0,r1 beq 1f jsr pc,1b1: mov (sp)+,r0 add $'0,r0 jsr r5,*(r5) rts pc/ bas -- BASIC/ new command "dump" which dumps symbol table values by name/ R. Haight/_dump: mov r4,-(sp) mov $11.*14.+symtab-14.,r41: add $14.,r4 tst (r4) beq 1f bit $1,4(r4) beq 1b jsr pc,dmp1 mov $'=,r0 jsr r5,xputc movf 6(r4),r0 jsr r5,ftoa; xputc mov $'\n,r0 jsr r5,xputc br 1b1: mov (sp)+,r4 jmp *(r4)+dmp1: tst (r4) blt 1f mov (r4),nameb mov 2(r4),nameb+2 mov $nameb,r0 jsr pc,print rts pc1: mov r4,-(sp) mov $symtab-14.,r41: add $14.,r4 tst (r4) beq 1f mov 4(r4),r0 bic $1,r02: beq 1b cmp r0,(sp) beq 2f mov 2(r0),r0 br 2b2: jsr pc,dmp1 mov $'[,r0 jsr r5,xputc mov *(sp),r0 com r0 movif r0,r0 jsr r5,ftoa; xputc mov $'],r0 jsr r5,xputc1: mov (sp)+,r4 rts pc/// basx -- dataone = 40200.data_ndigits:10.tmpf: </tmp/btma\0>argname: <b.out\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0>vt: </dev/vt0\0>.evenpname: <\0\0\0\0\0\0> .evenresnam: <list> <done> <q\0\0\0> <run\0> <prin> <prom> / prompt is like print without \n (cr) <if\0\0> <goto> <retu> <for\0> <next> <octa> <save> <dump> <fi\0\0> <else> <edit> <comm> / comment.if scope / for plotting <disp> <draw> <eras>.endiferesnam:symtnam: <arg\0> <exp\0> <log\0> <sin\0> <cos\0> <atn\0> <rnd\0> <expr> <int\0> <abs\0> <sqr\0>esymtnam:/ indirect sys calls:sysseek: sys seek; seekx: 0; 0syswrit: sys write; wbuf: 0; wlen: 0sysread: sys read; rbuf: 0; rlen: 0sysopen: sys open; ofile: 0 ; omode: 0syscreat: sys creat; cfile: 0; cmode: 0.bssdrx: .=.+8dry: .=.+8drfo: .=.+2ch: .=.+2drflg: .=.+2randx: .=.+2gsp: .=.+2forp: .=.+2exprloc:.=.+2sstack: .=.+2sublev: .=.+2val: .=.+2splimit: .=.+2 / statement size limitiflev: .=.+20. / nested if compile stack: 10 deepifp: .=.+2 / current pointer to iflevline: .=.+100.prfile: .=.+2 / output from _list or _savetfi: .=.+2 / input filefunc: .=.+2 / alternate functions, eg: _list or _saveseeka: .=.+2 / seek offset 1lineno: .=.+2nameb: .=.+4tfo: .=.+2symtab: .=.+2800.; esymtab: / symbol=7wds; symtab for 200space: .=.+8000.; espace: / code spaceexline: .=.+1000.; eexline: / line execute spacelintab: .=.+1800.; elintab: / 3wds per statement = 300 stmtsstack: .=.+800.; estack:iobuf: fi: .=.+518. / should be aquired??
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -