634 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			634 lines
		
	
	
	
		
			12 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| / 
 | ||
| /  (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
 | ||
| / 
 | ||
| /           This product is part of the Amsterdam Compiler Kit.
 | ||
| / 
 | ||
| /  Permission to use, sell, duplicate or disclose this software must be
 | ||
| /  obtained in writing. Requests for such permissions may be sent to
 | ||
| / 
 | ||
| /       Dr. Andrew S. Tanenbaum
 | ||
| /       Wiskundig Seminarium
 | ||
| /       Vrije Universiteit
 | ||
| /       Postbox 7161
 | ||
| /       1007 MC Amsterdam
 | ||
| /       The Netherlands
 | ||
| / 
 | ||
| /  
 | ||
| /------------------------------------------------------------------------------
 | ||
| /
 | ||
| 	indir	= 0
 | ||
| 	exit	= 1
 | ||
| 	fork	= 2
 | ||
| 	read	= 3
 | ||
| 	write	= 4
 | ||
| 	open	= 5
 | ||
| 	close	= 6
 | ||
| 	creat	= 8.
 | ||
| 	unlink	= 10.
 | ||
| 	break	= 17.
 | ||
| 	alarm	= 27.
 | ||
| 	pause	= 29.
 | ||
| 	sleep	= 35.
 | ||
| 	signal	= 48.
 | ||
| 
 | ||
| 	iot	=	4
 | ||
| /------------------------------------------------------------------------------
 | ||
| /	External references
 | ||
| /------------------------------------------------------------------------------
 | ||
| 
 | ||
| 	.globl	_end
 | ||
| 
 | ||
| /
 | ||
| /------------------------------------------------------------------------------
 | ||
| /	Now the	real program starts
 | ||
| /------------------------------------------------------------------------------
 | ||
| 
 | ||
| startoff:
 | ||
| 	mov	sp,memlim
 | ||
| 	mov	$ldfail,r5
 | ||
| 	mov	$emfile,forward+2
 | ||
| 	sys	indir;forward
 | ||
| 	jes	badruninf;
 | ||
| 	mov	r0,saver0;
 | ||
| 	mov	$rhfail,r5;
 | ||
| 	sys	read;header;34.
 | ||
| 	jes	badruninf;
 | ||
| 	cmp	$34.,r0
 | ||
| 	jne	badruninf
 | ||
| 	mov	$rtfail,r5
 | ||
| 	mov	$_end,loadstart
 | ||
| 	mov	option,r1
 | ||
| 	bit	$17774,r1
 | ||
| 	bne	1f
 | ||
| 	mov	tblmax,globmax
 | ||
| 1:
 | ||
| 	bit	$1,r1
 | ||
| 	beq	1f
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	read;lasttab;98.
 | ||
| 	jes	badruninf;
 | ||
| 
 | ||
| 1:	bit	$2,r1
 | ||
| 	beq	1f
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	read;opfrb;512.
 | ||
| 	jes	badruninf
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	read;opfra;512.
 | ||
| 	jes	badruninf
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	read;opfrc;640.
 | ||
| 	jes	badruninf
 | ||
| 1:	bit	$4,r1
 | ||
| 	beq	1f
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	read;lcount;4
 | ||
| 	jes	badruninf
 | ||
| 1:	bit	$8.,r1
 | ||
| 	beq	1f
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	read;lflow;4
 | ||
| 	jes	badruninf
 | ||
| 1:	bit	$16.,r1
 | ||
| 	beq	1f
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	read;ltime;4
 | ||
| 	jes	badruninf
 | ||
| 1:
 | ||
| 	mov	tblmax,r3
 | ||
| 	sub	pd,r3
 | ||
| 	sub	ml,r3
 | ||
| 	mov	$_end,sybreak+2
 | ||
| 	add	r3,sybreak+2;
 | ||
| 	sys	indir;sybreak
 | ||
| 	mov	r3,lblread+4
 | ||
| 	mov	$_end,lblread+2;
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	indir;lblread;
 | ||
| 	jes	badruninf
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	close
 | ||
| 	sys	unlink;emfile
 | ||
| lbladj:
 | ||
| 	add	$header,linused
 | ||
| 	sub	header,linused
 | ||
| 
 | ||
| 	mov	pd,filext
 | ||
| 	sub	loadstart,filext
 | ||
| 	mov	filext,filarg
 | ||
| 	add	ml,filarg
 | ||
| 	sub	tblmax,filarg
 | ||
| lbllast:
 | ||
| 	bit	$1,option	/test for last
 | ||
| 	beq	2f		/ no last table	jump
 | ||
| 	sys	creat;emlast;666
 | ||
| 	bcs	2f
 | ||
| 	cmp	linused,$lasttab
 | ||
| 	bhis	3f
 | ||
| 	mov	$yetmsg,lblwri+2
 | ||
| 	mov	$40.,lblwri+4
 | ||
| 	sys	indir;lblwri
 | ||
| 	br	2f
 | ||
| 3:	mov	r0,saver0
 | ||
| 	cmp	linused-2,$-1
 | ||
| 	bne	6f
 | ||
| 	mov	$linused-2,linused
 | ||
| 	clr	linused-2
 | ||
| 6:	jsr	pc,slilast
 | ||
| 	inc	r2
 | ||
| 	jsr	pc,nexttab
 | ||
| 	tst	(r5)
 | ||
| 	beq	3f
 | ||
| 	sub	$2,linused
 | ||
| 	cmp	eb,(r5)
 | ||
| 	blo	3f
 | ||
| 7:	cmp	r2,$lnend
 | ||
| 	blt	1f
 | ||
| 	jsr	pc,slnlast
 | ||
| 1:	jsr	pc,lnrnxt
 | ||
| 	bne	7b
 | ||
| 3:	jsr	pc,sfllast
 | ||
| 	bne	6b
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	close
 | ||
| 2:
 | ||
| 
 | ||
| lblopfreq:
 | ||
| 	bit	$2,option
 | ||
| 	beq	9f
 | ||
| 	sys	creat;emopf;666
 | ||
| 	bcs	9f
 | ||
| 	mov	r0,saver0
 | ||
| 	mov	$opcode,r3
 | ||
| 	mov	$104.,r4
 | ||
| 	mov	$counttab,r5
 | ||
| 0:	mov	$lnlast,r2
 | ||
| 	mov	$8.,r0
 | ||
| 2:	movb	(r3)+,(r2)+
 | ||
| 	sob	r0,2b
 | ||
| 	add	$8,r2
 | ||
| 	mov	r2,-(sp)
 | ||
| 	jsr	pc,ltoa
 | ||
| 	mov	(sp)+,r2
 | ||
| 	add	$5,r2
 | ||
| 	mov	$8.,r0
 | ||
| 2:	movb	(r3)+,(r2)+
 | ||
| 	sob	r0,2b
 | ||
| 	add	$8,r2
 | ||
| 	mov	r2,-(sp)
 | ||
| 	jsr	pc,ltoa
 | ||
| 	mov	(sp)+,r2
 | ||
| 	add	$5,r2
 | ||
| 	mov	$8.,r0
 | ||
| 2:	movb	(r3)+,(r2)+
 | ||
| 	sob	r0,2b
 | ||
| 	add	$8,r2
 | ||
| 	mov	r2,-(sp)
 | ||
| 	jsr	pc,ltoa
 | ||
| 	mov	(sp)+,r2
 | ||
| 	add	$5,r2
 | ||
| 	mov	$8.,r0
 | ||
| 2:	movb	(r3)+,(r2)+
 | ||
| 	sob	r0,2b
 | ||
| 	add	$8,r2
 | ||
| 	mov	r2,-(sp)
 | ||
| 	jsr	pc,ltoa
 | ||
| 	mov	(sp)+,r2
 | ||
| 	mov	r3,-(sp)
 | ||
| 	jsr	pc,slnlast
 | ||
| 	mov	(sp)+,r3
 | ||
| 	sob	r4,0b
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	close
 | ||
| 9:
 | ||
| lblcount:
 | ||
| 	clr	filb
 | ||
| 	bit	$4,option
 | ||
| 	beq	9f
 | ||
| 	sys	creat;emcount;666
 | ||
| 	bcs	9f
 | ||
| 	mov	r0,saver0
 | ||
| 	mov	lcount,r5
 | ||
| 	add	$4,r5
 | ||
| 	sub	filext,r5
 | ||
| 	jsr	pc,procrun
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	close
 | ||
| 9:
 | ||
| lblprof:
 | ||
| 	bit	$16.,option
 | ||
| 	beq	9f
 | ||
| 	sys	creat;emprof;666
 | ||
| 	bcs	9f
 | ||
| 	mov	r0,saver0
 | ||
| 	mov	ltime,r5
 | ||
| 	sub	filext,r5
 | ||
| 	mov	$profmsg,lblwri+2
 | ||
| 	mov	$29,lblwri+4
 | ||
| 	mov	$profmsg+27,r2
 | ||
| 	jsr	pc,ltoa
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	indir;lblwri
 | ||
| 	jsr	pc,procrun
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	close
 | ||
| 9:
 | ||
| lblflow:
 | ||
| 	mov	$1,filb
 | ||
| 	bit	$8.,option
 | ||
| 	beq	9f
 | ||
| 	sys	creat;emflow;666
 | ||
| 	bcs	9f
 | ||
| 	mov	lflow,r5
 | ||
| 	mov	$-1,flowsiz
 | ||
| 	sub	filext,r5
 | ||
| 	jsr	pc,procrun
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	close
 | ||
| 9:
 | ||
| 	clr	r0
 | ||
| 	sys	exit
 | ||
| 
 | ||
| badruninf:
 | ||
| 	mov	$0f,lblwri+2
 | ||
| 	mov	$21.,lblwri+4
 | ||
| 	mov	$2,r0
 | ||
| 	sys	indir;lblwri
 | ||
| 	mov	r5,lblwri+2
 | ||
| 	mov	$23.,lblwri+4
 | ||
| 	mov	$2,r0
 | ||
| 	sys	indir;lblwri
 | ||
| 	iot			/force core dump
 | ||
| .data
 | ||
| lblwri:
 | ||
|         sys     write;0;0
 | ||
| forward:
 | ||
|         sys     open;0;0
 | ||
| sybreak:
 | ||
|         sys     break;0;
 | ||
| lblread:
 | ||
|         sys     read;0;0
 | ||
| 0:      <em_runinf load error,\0>
 | ||
| ldfail: < open runinf failed   \n\0>
 | ||
| rhfail: < read header failed   \n\0>
 | ||
| rtfail: < read tables failed   \n\0>
 | ||
| msgto:  <to>
 | ||
| emlast: <em_last\0>
 | ||
| emcount:<em_count\0>
 | ||
| emfile: <em_runinf\0>
 | ||
| emopf:  <em_opfreq\0>
 | ||
| emprof: <em_profile\0>
 | ||
| emflow: <em_flow\0>
 | ||
| yetmsg: <no line or file message processed yet \n\n\0>
 | ||
| unknown:<with unknown filename\0>
 | ||
| lilast: <\nlines               \0>
 | ||
| lnlast: <                              >
 | ||
|         <                              >
 | ||
| lnend:  <                                  \0>
 | ||
| fllast: <    of file                       >
 | ||
|         <                                  \0>
 | ||
| profmsg:<\ninitialization             \n\0>
 | ||
| sep:    <\n\0>
 | ||
| /----------------------------------------------------------------------------
 | ||
| opcode:
 | ||
| <loc.0   loc.1   loc.2   loc.3   loc.4   loc.5   loc.6   loc.7   >
 | ||
| <loc.8   loc.9   loc.10  loc.11  loc.12  loc.13  loc.14  loc.15  >
 | ||
| <loc.16  loc.17  loc.18  loc.19  loc.20  loc.21  loc.22  loc.23  >
 | ||
| <loc.24  loc.25  loc.26  loc.27  loc.28  loc.29  loc.30  loc.31  >
 | ||
| <loc.32  loc.33  aar.1W  adf.s0  adi.1W  adi.2W  adp.l   adp.1   >
 | ||
| <adp.2   adp.s0  adp.s_1 ads.1W  and.1W  asp.1W  asp.2W  asp.3W  >
 | ||
| <asp.4W  asp.5W  asp.w0  beq.l   beq.s0  bge.s0  bgt.s0  ble.s0  >
 | ||
| <blm.s0  blt.s0  bne.s0  bra.l   bra.s_1 bra.s_2 bra.s0  bra.s1  >
 | ||
| <cal.1   cal.2   cal.3   cal.4   cal.5   cal.6   cal.7   cal.8   >
 | ||
| <cal.9   cal.10  cal.11  cal.12  cal.13  cal.14  cal.15  cal.16  >
 | ||
| <cal.17  cal.18  cal.19  cal.20  cal.21  cal.22  cal.23  cal.24  >
 | ||
| <cal.25  cal.26  cal.27  cal.28  cal.s0  cff.z   cif.z   cii.z   >
 | ||
| <cmf.s0  cmi.1W  cmi.2W  cmp.z   cms.s0  csa.1W  csb.1W  dec.z   >
 | ||
| <dee.w0  del.w_1 dup.1W  dvf.s0  dvi.1W  fil.l   inc.z   ine.lw  >
 | ||
| <ine.w0  inl._1W inl._2W inl._3W inl.w_1 inn.s0  ior.1W  ior.s0  >
 | ||
| <lae.l   lae.w0  lae.w1  lae.w2  lae.w3  lae.w4  lae.w5  lae.w6  >
 | ||
| 
 | ||
| <lal.p   lal.n   lal.0   lal._1  lal.w0  lal.w_1 lal.w_2 lar.1W  >
 | ||
| <ldc.0   lde.lw  lde.w0  ldl.0   ldl.w_1 lfr.1W  lfr.2W  lfr.s0  >
 | ||
| <lil.w_1 lil.w0  lil.0   lil.1W  lin.l   lin.s0  lni.z   loc.l   >
 | ||
| <loc._1  loc.s0  loc.s_1 loe.lw  loe.w0  loe.w1  loe.w2  loe.w3  >
 | ||
| <loe.w4  lof.l   lof.1W  lof.2W  lof.3W  lof.4W  lof.s0  loi.l   >
 | ||
| <loi.1   loi.1W  loi.2W  loi.3W  loi.4W  loi.s0  lol.pw  lol.nw  >
 | ||
| <lol.0   lol.1W  lol.2W  lol.3W  lol._1W lol._2W lol._3W lol._4W >
 | ||
| <lol._5W lol._6W lol._7W lol._8W lol.w0  lol.w_1 lxa.1   lxl.1   >
 | ||
| <lxl.2   mlf.s0  mli.1W  mli.2W  rck.1W  ret.0   ret.1W  ret.s0  >
 | ||
| <rmi.1W  sar.1W  sbf.s0  sbi.1W  sbi.2W  sdl.w_1 set.s0  sil.w_1 >
 | ||
| <sil.w0  sli.1W  ste.lw  ste.w0  ste.w1  ste.w2  stf.l   stf.1W  >
 | ||
| <stf.2W  stf.s0  sti.1   sti.1W  sti.2W  sti.3W  sti.4W  sti.s0  >
 | ||
| <stl.pw  stl.nw  stl.0   stl.1W  stl._1W stl._2W stl._3W stl._4W >
 | ||
| <stl._5W stl.w_1 teq.z   tgt.z   tlt.z   tne.z   zeq.l   zeq.s0  >
 | ||
| <zeq.s1  zer.s0  zge.s0  zgt.s0  zle.s0  zlt.s0  zne.s0  zne.s_1 >
 | ||
| <zre.lw  zre.w0  zrl._1W zrl._2W zrl.w_1 zrl.nw  escape1 escape2 >
 | ||
| 
 | ||
| <aar.l   aar.z   adf.l   adf.z   adi.l   adi.z   ads.l   ads.z   >
 | ||
| <adu.l   adu.z   and.l   and.z   asp.lw  ass.l   ass.z   bge.l   >
 | ||
| <bgt.l   ble.l   blm.l   bls.l   bls.z   blt.l   bne.l   cai.z   >
 | ||
| <cal.l   cfi.z   cfu.z   ciu.z   cmf.l   cmf.z   cmi.l   cmi.z   >
 | ||
| <cms.l   cms.z   cmu.l   cmu.z   com.l   com.z   csa.l   csa.z   >
 | ||
| <csb.l   csb.z   cuf.z   cui.z   cuu.z   dee.lw  del.pw  del.nw  >
 | ||
| <dup.l   dus.l   dus.z   dvf.l   dvf.z   dvi.l   dvi.z   dvu.l   >
 | ||
| <dvu.z   fef.l   fef.z   fif.l   fif.z   inl.pw  inl.nw  inn.l   >
 | ||
| <inn.z   ior.l   ior.z   lar.l   lar.z   ldc.l   ldf.l   ldl.pw  >
 | ||
| <ldl.nw  lfr.l   lil.pw  lil.nw  lim.z   los.l   los.z   lor.s0  >
 | ||
| <lpi.l   lxa.l   lxl.l   mlf.l   mlf.z   mli.l   mli.z   mlu.l   >
 | ||
| <mlu.z   mon.z   ngf.l   ngf.z   ngi.l   ngi.z   nop.z   rck.l   >
 | ||
| <rck.z   ret.l   rmi.l   rmi.z   rmu.l   rmu.z   rol.l   rol.z   >
 | ||
| <ror.l   ror.z   rtt.z   sar.l   sar.z   sbf.l   sbf.z   sbi.l   >
 | ||
| <sbi.z   sbs.l   sbs.z   sbu.l   sbu.z   sde.l   sdf.l   sdl.pw  >
 | ||
| <sdl.nw  set.l   set.z   sig.z   sil.pw  sil.nw  sim.z   sli.l   >
 | ||
| 
 | ||
| <sli.z   slu.l   slu.z   sri.l   sri.z   sru.l   sru.z   sti.l   >
 | ||
| <sts.l   sts.z   str.s0  tge.z   tle.z   trp.z   xor.l   xor.z   >
 | ||
| <zer.l   zer.z   zge.l   zgt.l   zle.l   zlt.l   zne.l   zrf.l   >
 | ||
| <zrf.z   zrl.pw  dch.z   exg.s0  exg.l   exg.z   lpb.z   gto.l   \0\0>
 | ||
| 	.even
 | ||
| 	.text
 | ||
| /------------------------------------------------------------------------------
 | ||
| /	General	subroutines
 | ||
| /------------------------------------------------------------------------------
 | ||
| 
 | ||
| wrdoff:	movb	(r3)+,r0       /get first byte
 | ||
| 	swab	r0		/put it	in high	byte
 | ||
| 	clrb	r0		/clear low byte	of r0
 | ||
| 	bisb	(r3)+,r0       /"or" second byte in
 | ||
| 	rts	pc		/done
 | ||
| 
 | ||
| /------------------------------------------------------------------------------
 | ||
| 
 | ||
| 
 | ||
| nexttab: mov	linused,r5;
 | ||
| 	add	$2,r5		/ increment lasttab
 | ||
| 	cmp	r5,$linused	/ top of table reached?
 | ||
| 	blo	1f
 | ||
| 	sub	$96.,r5
 | ||
| 1:	mov	r5,linused
 | ||
| 	rts	pc
 | ||
| 
 | ||
| slilast: mov	$lnlast,r2
 | ||
| 	mov	$6,r0
 | ||
| 	mov	$lilast,r3
 | ||
| 2:	movb	(r3)+,(r2)+
 | ||
| 	sob	r0,2b
 | ||
| 	rts	pc
 | ||
| 
 | ||
| slnlast: mov	$lnlast,lblwri+2
 | ||
| 	mov	r2,r3
 | ||
| 	sub	$lnlast,r3
 | ||
| 	beq	3f
 | ||
| 	inc	r3
 | ||
| 	movb	sep,(r2)
 | ||
| 1:	mov	r3,lblwri+4
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	indir; lblwri
 | ||
| 	mov	$lnlast,r2
 | ||
| 2:	movb	$' ,(r2)+
 | ||
| 	sob	r3,2b
 | ||
| 3:	mov	$lnlast,r2
 | ||
| 	rts	pc
 | ||
| 
 | ||
| lnrnxt:	jsr	pc,nexttab
 | ||
| 	tst	(r5)
 | ||
| 	ble	0f
 | ||
| 	mov	(r5),r1
 | ||
| 	clr	(r5)
 | ||
| 	add	$6,r2
 | ||
| 	mov	r2,r0
 | ||
| 	jsr	pc,itoa
 | ||
| 0:	rts	pc
 | ||
| 
 | ||
| sfllast:jsr	pc,nexttab
 | ||
| 	tst	(r5)
 | ||
| 	bne	0f
 | ||
| 	clr	linused
 | ||
| 	mov	eb,-(sp)
 | ||
| 	sub	filext,(sp)
 | ||
| 	add	$4,(sp)
 | ||
| 	mov	*(sp),(sp)
 | ||
| 	mov	(sp)+,(r5)
 | ||
| 0:	jsr	pc,slnlast
 | ||
| 	jsr	pc,filadj
 | ||
| 	mov	$14.,r3
 | ||
| 	mov	$fllast+14.,r2
 | ||
| 	mov	(r5),r0
 | ||
| 3:	inc	r3
 | ||
| 	movb	(r0)+,(r2)+
 | ||
| 	bne	3b
 | ||
| 	movb	sep,-(r2)
 | ||
| 	mov	$fllast,lblwri+2
 | ||
| 	mov	r3,lblwri+4
 | ||
| 	mov	saver0,r0
 | ||
| 	sys	indir;lblwri
 | ||
| 	mov	$fllast+14.,r2
 | ||
| 	sub	$10.,r3
 | ||
| 2:	movb	$' ,(r2)+
 | ||
| 	sob	r3,2b
 | ||
| 	clr	(r5)
 | ||
| 	tst	linused
 | ||
| 	beq	2f
 | ||
| 	jsr	pc,slilast
 | ||
| 2:	rts	pc
 | ||
| 
 | ||
| filadj:
 | ||
| 	cmp	ml,(r5)
 | ||
| 	bhi	8f
 | ||
| 	sub	filarg,(r5)
 | ||
| 	br	7f
 | ||
| 8:	cmp	eb,(r5)
 | ||
| 	bhi	7f
 | ||
| 	sub	filext,(r5)
 | ||
| 7:	rts	pc
 | ||
| 
 | ||
| procrun:
 | ||
| 	mov	firstp,r4
 | ||
| 	sub	filext,r4
 | ||
| 0:
 | ||
| 	tst	4(r4)
 | ||
| 	beq	8f
 | ||
| 	jsr	pc,msgfile
 | ||
| 	mov	r4,-(sp)
 | ||
| 	mov	countsiz,r4
 | ||
| 7:	cmp	r2,$lnend+10
 | ||
| 	blo	6f
 | ||
| 	jsr	pc,slnlast
 | ||
| 	mov	$lnlast,r2
 | ||
| 6:	tst	filb
 | ||
| 	bne	3f
 | ||
| 	add	$11.,r2
 | ||
| 	mov	r2,-(sp)
 | ||
| 	jsr	pc,ltoa
 | ||
| 	mov	(sp)+,r2
 | ||
| 	br	4f
 | ||
| 3:
 | ||
| 	jsr	pc,bittoa
 | ||
| 	add	$4,r2
 | ||
| 4:	sob	r4,7b
 | ||
| 	jsr	pc,slnlast
 | ||
| 	mov	(sp)+,r4
 | ||
| 8:	mov	8.(r4),r4
 | ||
| 	beq	8f
 | ||
| 	sub	filext,r4
 | ||
| 	br	0b
 | ||
| 	mov	r0,saver0
 | ||
| 	sys	write;sep;1
 | ||
| 8:	rts	pc
 | ||
| 
 | ||
| 
 | ||
| msgfile:
 | ||
| 	jsr	pc,slilast
 | ||
| 	add	$6,r2
 | ||
| 	mov	6(r4),r1
 | ||
| 	mov	r2,r0
 | ||
| 	jsr	pc,itoa
 | ||
| 	add	$4,r2
 | ||
| 	movb	 msgto,(r2)+
 | ||
| 	movb	msgto+1,(r2)+
 | ||
| 	add	$6,r2
 | ||
| 	mov	8.(r4),r1
 | ||
| 3:	bne	1f
 | ||
| 	mov	maxcount,r1
 | ||
| 	br	2f
 | ||
| 1:	sub	filext,r1
 | ||
| 	tst	4(r1)
 | ||
| 	beq	1f
 | ||
| 	mov	4(r1),r1
 | ||
| 	br	2f
 | ||
| 1:	mov	8.(r1),r1
 | ||
| 	br	3b
 | ||
| 2:	sub	4(r4),r1
 | ||
| 	mov	r1,countsiz
 | ||
| 	dec	r1		/ is this a bug?
 | ||
| 	add	6(r4),r1
 | ||
| 	mov	r2,r0
 | ||
| 	jsr	pc,itoa
 | ||
| 	mov	$fllast,r3
 | ||
| 	mov	$14,r1
 | ||
| 2:	movb	(r3)+,(r2)+
 | ||
| 	sob	r1,2b
 | ||
| 	mov	10.(r4),r3
 | ||
| 	bne	6f
 | ||
| 	mov	$unknown,r3
 | ||
| 	br	5f
 | ||
| 6:	cmp	ml,r3
 | ||
| 	bhi	4f
 | ||
| 	sub	filarg,r3
 | ||
| 	br	5f
 | ||
| 4:	cmp	eb,r3
 | ||
| 	bhi	5f
 | ||
| 	sub	filext,r3
 | ||
| 5:
 | ||
| lblmsgf:
 | ||
| 2:	movb	(r3)+,(r2)+
 | ||
| 	bne	2b
 | ||
| 	jsr	pc,slnlast
 | ||
| 	rts	pc
 | ||
| 
 | ||
| itoa:
 | ||
| 
 | ||
| 	mov	r5,-(sp)
 | ||
| 	mov	r0,r5
 | ||
| 1:	clr	r0
 | ||
| 	div	$10.,r0
 | ||
| 	add	$'0,r1
 | ||
| 	movb	r1,-(r5)
 | ||
| 	mov	r0,r1
 | ||
| 	bne	1b
 | ||
| 	mov	r5,r0
 | ||
| 	mov	(sp)+,r5
 | ||
| 	rts	pc
 | ||
| 
 | ||
| 	rts	pc
 | ||
| ltoa:
 | ||
| 0:	mov	(r5),r1
 | ||
| 	clr	r0
 | ||
| 	div	$10.,r0
 | ||
| 	mov	r0,(r5)
 | ||
| 	swab	r1
 | ||
| 	clr	r0
 | ||
| 	bisb	3(r5),r1
 | ||
| 	div	$10.,r0
 | ||
| 	movb	r0,3(r5)
 | ||
| 	clr	r0
 | ||
| 	swab	r1
 | ||
| 	bisb	2(r5),r1
 | ||
| 	div	$10.,r0
 | ||
| 	add	$'0,r1
 | ||
| 	movb	r1,-(r2)
 | ||
| 	movb	r0,2(r5)
 | ||
| 	bne	0b
 | ||
| 	tst	(r5)
 | ||
| 	bne	0b
 | ||
| 	add	$4,r5
 | ||
| 	rts	pc
 | ||
| 
 | ||
| bittoa:
 | ||
| 	mov	(r5),r1
 | ||
| 	mov	flowsiz,r0
 | ||
| 	ash	r0,r1
 | ||
| 	bit	$1,r1
 | ||
| 	beq	0f
 | ||
| 	movb	$'1,(r2)
 | ||
| 	br	1f
 | ||
| 0:	movb	$'0,(r2)
 | ||
| 1:	dec	r0
 | ||
| 	cmp	$-16.,r0
 | ||
| 	beq	2f
 | ||
| 	mov	r0,flowsiz
 | ||
| 	br	3f
 | ||
| 2:	clr	flowsiz
 | ||
| 	add	$2,r5
 | ||
| 3:	rts	pc
 | ||
| 
 | ||
| /------------------------------------------------------------------------------
 | ||
| /	Leftover data
 | ||
| /------------------------------------------------------------------------------
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 	.bss
 | ||
| filb:	.=.+2
 | ||
| loadstart:	.=.+2
 | ||
| saver0:		.=.+2
 | ||
| filarg:		.=.+2
 | ||
| filext:		.=.+2
 | ||
| memlim:		.=.+2
 | ||
| header:
 | ||
| bstrt:	txtsiz:	.=.+2
 | ||
| bend:	ndatad:	.=.+2
 | ||
| 	nprocs:	.=.+2
 | ||
| option:	entry.:	.=.+2
 | ||
| 	nlines:	.=.+2
 | ||
| 	szdata:	.=.+2
 | ||
| 	firstp:	.=.+2
 | ||
| 	maxcount: .=.+2
 | ||
| argc:	.=.+2
 | ||
| argv:	.=.+2
 | ||
| environ:
 | ||
| 	.=.+2
 | ||
| pb:	.=.+2
 | ||
| pd:	.=.+2
 | ||
| eb:	.=.+2
 | ||
| globmax: .=.+2
 | ||
| tblmax:	.=.+2
 | ||
| ml:	.=.+2
 | ||
| lasttab:.=.+96.	       / 16 descriptors	of integers + index at the end
 | ||
| linused:.=.+2
 | ||
| 
 | ||
| counttab:
 | ||
| opfra:	.=.+512.
 | ||
| opfrb:	.=.+512.
 | ||
| opfrc:	.=.+640.
 | ||
| 
 | ||
| lcount:	.=.+2
 | ||
| countsiz:.=.+2
 | ||
| 
 | ||
| lflow:	.=.+2
 | ||
| flowsiz:.=.+2
 | ||
| 
 | ||
| ltime:	.=.+2
 | ||
| profsiz:.=.+2
 |