/
/

/ a9 -- pdp-11 assembler pass 1

eae = 0

/ key to types

/	0	undefined
/	1	absolute
/	2	text
/	3	data
/	4	bss
/	5	flop freg,dst (movfo, = stcfd)
/	6	branch
/	7	jsr
/	10	rts
/	11	sys
/	12	movf (=ldf,stf)
/	13	double operand (mov)
/	14	flop fsrc,freg (addf)
/	15	single operand (clr)
/	16	.byte
/	17	string (.ascii, "<")
/	20	.even
/	21	.if
/	22	.endif
/	23	.globl
/	24	register
/	25	.text
/	26	.data
/	27	.bss
/	30	mul,div, etc
/	31	sob
/	32	.comm
/	33	estimated text
/	34	estimated data
/	35	jbr
/	36	jeq, jne, etc

	.data
symtab:
/ special variables

<.\0\0\0\0\0\0\0>; dotrel:02; dot:000000
<..\0\0\0\0\0\0>;	01; dotdot:000000

/ register

<r0\0\0\0\0\0\0>;	24;000000
<r1\0\0\0\0\0\0>;	24;000001
<r2\0\0\0\0\0\0>;	24;000002
<r3\0\0\0\0\0\0>;	24;000003
<r4\0\0\0\0\0\0>;	24;000004
<r5\0\0\0\0\0\0>;	24;000005
<sp\0\0\0\0\0\0>;	24;000006
<pc\0\0\0\0\0\0>;	24;000007

.if eae

/eae & switches

<csw\0\0\0\0\0>;	01;177570
<div\0\0\0\0\0>;	01;177300
<ac\0\0\0\0\0\0>;	01;177302
<mq\0\0\0\0\0\0>;	01;177304
<mul\0\0\0\0\0>;	01;177306
<sc\0\0\0\0\0\0>;	01;177310
<sr\0\0\0\0\0\0>;	01;177311
<nor\0\0\0\0\0>;	01;177312
<lsh\0\0\0\0\0>;	01;177314
<ash\0\0\0\0\0>;	01;177316

.endif

/ double operand

<mov\0\0\0\0\0>;	13;0010000
<movb\0\0\0\0>;		13;0110000
<cmp\0\0\0\0\0>;	13;0020000
<cmpb\0\0\0\0>;		13;0120000
<bit\0\0\0\0\0>;	13;0030000
<bitb\0\0\0\0>;		13;0130000
<bic\0\0\0\0\0>;	13;0040000
<bicb\0\0\0\0>;		13;0140000
<bis\0\0\0\0\0>;	13;0050000
<bisb\0\0\0\0>;		13;0150000
<add\0\0\0\0\0>;	13;0060000
<sub\0\0\0\0\0>;	13;0160000

/ branch

<br\0\0\0\0\0\0>;	06;0000400
<bne\0\0\0\0\0>;	06;0001000
<beq\0\0\0\0\0>;	06;0001400
<bge\0\0\0\0\0>;	06;0002000
<blt\0\0\0\0\0>;	06;0002400
<bgt\0\0\0\0\0>;	06;0003000
<ble\0\0\0\0\0>;	06;0003400
<bpl\0\0\0\0\0>;	06;0100000
<bmi\0\0\0\0\0>;	06;0100400
<bhi\0\0\0\0\0>;	06;0101000
<blos\0\0\0\0>;		06;0101400
<bvc\0\0\0\0\0>;	06;0102000
<bvs\0\0\0\0\0>;	06;0102400
<bhis\0\0\0\0>;		06;0103000
<bec\0\0\0\0\0>;	06;0103000
<bcc\0\0\0\0\0>;	06;0103000
<blo\0\0\0\0\0>;	06;0103400
<bcs\0\0\0\0\0>;	06;0103400
<bes\0\0\0\0\0>;	06;0103400

/ jump/branch type

<jbr\0\0\0\0\0>;	35;0000400
<jne\0\0\0\0\0>;	36;0001000
<jeq\0\0\0\0\0>;	36;0001400
<jge\0\0\0\0\0>;	36;0002000
<jlt\0\0\0\0\0>;	36;0002400
<jgt\0\0\0\0\0>;	36;0003000
<jle\0\0\0\0\0>;	36;0003400
<jpl\0\0\0\0\0>;	36;0100000
<jmi\0\0\0\0\0>;	36;0100400
<jhi\0\0\0\0\0>;	36;0101000
<jlos\0\0\0\0>;		36;0101400
<jvc\0\0\0\0\0>;	36;0102000
<jvs\0\0\0\0\0>;	36;0102400
<jhis\0\0\0\0>;		36;0103000
<jec\0\0\0\0\0>;	36;0103000
<jcc\0\0\0\0\0>;	36;0103000
<jlo\0\0\0\0\0>;	36;0103400
<jcs\0\0\0\0\0>;	36;0103400
<jes\0\0\0\0\0>;	36;0103400

/ single operand

<clr\0\0\0\0\0>;	15;0005000
<clrb\0\0\0\0>;		15;0105000
<com\0\0\0\0\0>;	15;0005100
<comb\0\0\0\0>;		15;0105100
<inc\0\0\0\0\0>;	15;0005200
<incb\0\0\0\0>;		15;0105200
<dec\0\0\0\0\0>;	15;0005300
<decb\0\0\0\0>;		15;0105300
<neg\0\0\0\0\0>;	15;0005400
<negb\0\0\0\0>;		15;0105400
<adc\0\0\0\0\0>;	15;0005500
<adcb\0\0\0\0>;		15;0105500
<sbc\0\0\0\0\0>;	15;0005600
<sbcb\0\0\0\0>;		15;0105600
<tst\0\0\0\0\0>;	15;0005700
<tstb\0\0\0\0>;		15;0105700
<ror\0\0\0\0\0>;	15;0006000
<rorb\0\0\0\0>;		15;0106000
<rol\0\0\0\0\0>;	15;0006100
<rolb\0\0\0\0>;		15;0106100
<asr\0\0\0\0\0>;	15;0006200
<asrb\0\0\0\0>;		15;0106200
<asl\0\0\0\0\0>;	15;0006300
<aslb\0\0\0\0>;		15;0106300
<jmp\0\0\0\0\0>;	15;0000100
<swab\0\0\0\0>;		15;0000300

/ jsr

<jsr\0\0\0\0\0>;	07;0004000

/ rts

<rts\0\0\0\0\0>;	010;000200

/ simple operand

<sys\0\0\0\0\0>;	011;104400

/ flag-setting

<clc\0\0\0\0\0>;	01;0000241
<clv\0\0\0\0\0>;	01;0000242
<clz\0\0\0\0\0>;	01;0000244
<cln\0\0\0\0\0>;	01;0000250
<sec\0\0\0\0\0>;	01;0000261
<sev\0\0\0\0\0>;	01;0000262
<sez\0\0\0\0\0>;	01;0000264
<sen\0\0\0\0\0>;	01;0000270

/ floating point ops

<cfcc\0\0\0\0>;		01;170000
<setf\0\0\0\0>;		01;170001
<setd\0\0\0\0>;		01;170011
<seti\0\0\0\0>;		01;170002
<setl\0\0\0\0>;		01;170012
<clrf\0\0\0\0>;		15;170400
<negf\0\0\0\0>;		15;170700
<absf\0\0\0\0>;		15;170600
<tstf\0\0\0\0>;		15;170500
<movf\0\0\0\0>;		12;172400
<movif\0\0\0>;		14;177000
<movfi\0\0\0>;		05;175400
<movof\0\0\0>;		14;177400
<movfo\0\0\0>;		05;176000
<addf\0\0\0\0>;		14;172000
<subf\0\0\0\0>;		14;173000
<mulf\0\0\0\0>;		14;171000
<divf\0\0\0\0>;		14;174400
<cmpf\0\0\0\0>;		14;173400
<modf\0\0\0\0>;		14;171400
<movie\0\0\0>;		14;176400
<movei\0\0\0>;		05;175000
<ldfps\0\0\0>;		15;170100
<stfps\0\0\0>;		15;170200
<fr0\0\0\0\0\0>;	24;000000
<fr1\0\0\0\0\0>;	24;000001
<fr2\0\0\0\0\0>;	24;000002
<fr3\0\0\0\0\0>;	24;000003
<fr4\0\0\0\0\0>;	24;000004
<fr5\0\0\0\0\0>;	24;000005

/ 11/45 operations

<als\0\0\0\0\0>;	30;072000
<alsc\0\0\0\0>;		30;073000
<mpy\0\0\0\0\0>;	30;070000
.if eae-1
<mul\0\0\0\0\0>;	30;070000
<div\0\0\0\0\0>;	30;071000
<ash\0\0\0\0\0>;	30;072000
<ashc\0\0\0\0>;		30;073000
.endif
<dvd\0\0\0\0\0>;	30;071000
<xor\0\0\0\0\0>;	07;074000
<sxt\0\0\0\0\0>;	15;006700
<mark\0\0\0\0>;		11;006400
<sob\0\0\0\0\0>;	31;077000

/ specials

<.byte\0\0\0>;		16;000000
<.even\0\0\0>;		20;000000
<.if\0\0\0\0\0>;	21;000000
<.endif\0\0>;		22;000000
<.globl\0\0>;		23;000000
<.text\0\0\0>;		25;000000
<.data\0\0\0>;		26;000000
<.bss\0\0\0\0>;		27;000000
<.comm\0\0\0>;		32;000000

ebsymtab:


start:
	sys	signal; 2; 1
	ror	r0
	bcs	1f
	sys	signal; 2; aexit
1:
	mov	(sp)+,r0
	tst	(sp)+
1:
	mov	(sp),r1
	cmpb	(r1),$'-
	bne	1f
	tst	(sp)+
	dec	r0
	cmpb	1(r1),$'u
	bne	2f
	movb	$'g,unglob
	br	1b
2:
	tstb	1(r1)
	bne	2f
	movb	$'g,unglob
	br	1b
2:
	cmpb	1(r1),$'o
	bne	1f
	mov	(sp),outfp
	tst	(sp)+
	dec	r0
	br	1b
1:
	movb	r0,nargs
	tst	-(sp)
	mov	sp,curarg
	jsr	r5,fcreat; a.tmp1
	movb	r0,pof
	jsr	r5,fcreat; a.tmp2
	movb	r0,fbfil
	jsr	pc,setup
	jmp	go

setup:
	mov	$symtab,r1
1:
	clr	r3
	mov	$8,r2
	mov	r1,-(sp)
2:
	movb	(r1)+,r4
	beq	2f
	add	r4,r3
	swab	r3
	sob	r2,2b
2:
	clr	r2
	div	$hshsiz,r2
	ashc	$1,r2
	add	$hshtab,r3
4:
	sub	r2,r3
	cmp	r3,$hshtab
	bhi	3f
	add	$2*hshsiz,r3
3:
	tst	-(r3)
	bne	4b
	mov	(sp)+,r1
	mov	r1,(r3)
	add	$12.,r1
	cmp	r1,$ebsymtab
	blo	1b
	rts	pc

/overlay buffer
inbuf	= setup
.	=inbuf+512.

