⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bas.s

📁 Version 6 Unix 核心源代码 Version 6 Unix 核心源代码
💻 S
📖 第 1 页 / 共 2 页
字号:
	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 + -