       1                                ;;;; Wrapper for 2.11BSD/m11/misc.m11
       2                                	.list
       3                                	.list
       4                                	.list
       5        000001                  debug	=	1
       6                                	.include "2.11BSD/m11/at.sml"
       1                                	.title	at.sml	-   assembler/translator system macros
       2                                	; @(#)at.sml	1.3 11/3/82
       3                                
       4                                	.ident	/10may4/
       5                                
       6                                	.macro	always		;all files of macro
       7                                
       8                                	.macro	.data
       9                                	entsec	.data
      10                                	.endm	.data
      11                                
      12                                	.macro	.text
      13                                	entsec	.text
      14                                	.endm
      15                                
      16                                	.macro	.bss
      17                                	entsec	.bss
      18                                	.endm
      19                                
      20                                mk.symbol=1			;one to make symbols, 0 otherwise
      21                                x40=	0
      22                                pdpv45=	0			; host machine has 'mul', 'div', sob' instrucs.
      23                                				; if not you will have to write macros for them
      24                                $timdf=	7			; California Time Zone
      25                                				; should really use ftime(2) for this and for
      26                                				; DST.
      27                                ;xfltg=	0		;define to assmbl out floating hardware
      28                                rsx11d	=	0	; rsx11d features 
      29                                debug	=	0	; <<< REEDS if non zero includes debug junk
      30                                
      31                                ft.id=	1			;have set i & d.  set =0 if not
      32                                
      33                                ft.unx = 1			; this macro-11 is for UNIX.  =0 if not.
      34                                
      35                                	.nlist	bex
      36                                
      37                                tab=	11
      38                                lf=	12
      39                                vt=	13
      40                                ff=	14
      41                                cr=	15
      42                                space=	40
      43                                
      44                                bpmb	=	20		;bytes per macro block
      45                                
      46                                
      47                                
      48                                
      49                                
      50                                	.psect	.text	con, shr, gbl,ins
      51                                	.psect	.data	con, dat, prv, gbl
      52                                	.psect	.bss	con, bss, gbl
      53                                
      54                                	.psect	dpure	con, dat, prv, gbl
      55                                	.psect	mixed	con, prv, gbl
      56                                	.psect	errmes	con, dat, prv, gbl
      57                                	.psect	impure	con, bss, gbl
      58                                	.psect	imppas	con, bss, gbl
      59                                	.psect	implin	con, bss, gbl
      60                                	.psect	swtsec	con, dat, prv, gbl	; unix command line flags
      61                                	.psect	cndsec 	con, dat, prv, gbl	; gt, le, equ, etc.  for '.if'
      62                                	.psect	crfsec 	con, dat, prv, gbl	; args for -cr flag
      63                                	.psect	edtsec 	con, dat, prv, gbl	; args for .enabl
      64                                	.psect	lctsec 	con, dat, prv, gbl	; args for .list
      65                                	.psect	psasec 	con, dat, prv, gbl
      66                                	.psect	pstsec 	con, dat, prv, gbl
      67                                	.psect	rolbas 	con, dat, prv, gbl	; core allocation: starts of tables
      68                                	.psect	rolsiz 	con, dat, prv, gbl	; sizes of table entries
      69                                	.psect	roltop 	con, dat, prv, gbl	; tops of tables
      70                                	.psect	xpcor	con,bss	, gbl	; this one MUST come last in core
      71                                
      72                                
      72                                
      73                                	.macro	entsec	name 	;init a section
      74                                	.psect	name	con
      75                                	.endm	entsec
      76                                
      77                                
      78                                
      79                                	.macro jeq	x,?fred
      80                                	bne	fred
      81                                	jmp	x
      82                                fred:
      83                                	.endm
      84                                	.macro	jne	x,?fred
      85                                	beq	fred
      86                                	jmp	x
      87                                fred:
      88                                	.endm
      89                                	.macro	xitsec
      90                                	entsec	.text
      91                                	.endm	xitsec
      92                                
      93                                
      94                                	.macro	call	address
      95                                	jsr	pc,address
      96                                	.endm
      97                                
      98                                	.macro	return
      99                                	rts	pc
     100                                	.endm
     101                                
     102                                
     103                                	.macro	always
     104                                	.nlist	bex
     105                                	.endm	always
     106                                	.endm	always
     107                                
     108                                
     109        000001                  	.if ne debug
     110                                	
     111                                	.macro	ndebug n
     112                                	.globl	ndebug,..z
     113                                	mov	n,..z
     114                                	call	ndebug
     115                                	.endm
     116                                
     117                                	.macro	sdebug	string
     118                                	.globl	sdebug,..z,..zbuf
     119                                	x = 0
     120                                	.irpc	t,<string>
     121                                	movb	#''t,..zbuf+x
     122                                	x = x+1
     123                                	.endm
     124                                	movb	#0,..zbuf+x
     125                                	mov	#..zbuf,..z
     126                                	call	sdebug
     127                                	.endm
     128                                
     129                                	.iff
     130                                	
     131                                	.macro	ndebug n
     132                                	.endm
     133                                
     134                                	.macro	sdebug	string
     135                                	.endm
     136                                	
     137                                	.endc
     138                                	
     139                                	
     140                                	.macro	param	mne,	value	;define default parameters
     141                                	.iif ndf mne,	mne=	value
     142                                	.list
     143                                mne=	mne
     144                                	.nlist
     145                                	.endm
     145                                
     146                                	.macro	putkb	addr	;list to kb
     147                                	.globl	putkb
     148                                	mov	addr,r0
     149                                	call	putkb
     150                                	.endm
     151                                
     152                                	.macro	putlp	addr	;list to lp
     153                                	.globl	putlp
     154                                	mov	addr,r0
     155                                	call	putlp
     156                                	.endm
     157                                
     158                                	.macro	putkbl	addr	;list to kb and lp
     159                                	.globl	putkbl
     160                                	mov	addr,r0
     161                                	call	putkbl
     162                                	.endm
     163                                
     164                                
     165                                	.macro	xmit	wrdcnt	;move small # of words
     166                                	.globl	xmit0
     167                                	call	xmit0-<wrdcnt*2>
     168                                	.endm	xmit
     169                                
     170                                
     171                                ;the macro "genswt" is used to specify  a command
     172                                ;string switch (1st argument) and the address of
     173                                ;the routine to be called when encountered (2nd arg).
     174                                ; the switch is made upper-case.
     175                                
     176                                	.macro	genswt	mne,addr,?label
     177                                	entsec	swtsec
     178                                label:	.irpc	x,mne
     179                                	.if ge ''x-141
     180                                		.if le ''x-172
     181                                			.byte ''x-40
     182                                		.iff
     183                                			.byte ''x
     184                                		.endc
     185                                	.iff
     186                                	.byte ''x
     187                                	.endc
     188                                	.endm
     189                                	.iif ne <.-label&1>,	.byte	0
     190                                	.word	addr
     191                                	xitsec
     192                                	.endm
     192                                
     193                                	.macro	zread	chan
     194                                	.globl	zread
     195                                	mov	#chan'chn,r0
     196                                	call	zread
     197                                	.endm	zread
     198                                
     199                                	.macro	zwrite	chan
     200                                	.globl	zwrite
     201                                	mov	#chan'chn,r0
     202                                	call	zwrite
     203                                	.endm	zwrite
     203                                
     204                                	.macro	genedt	mne,subr	;gen enable/disable table
     205                                	entsec	edtsec
     206                                	.rad50	/mne/
     207                                	.if nb	subr
     208                                	.word	subr
     209                                	.iff
     210                                	.word	cpopj
     211                                	.endc
     212                                	.word	ed.'mne
     213                                	xitsec
     214                                	.endm	genedt
     215                                
     216                                
     217                                ;the macro "gencnd" is used to specify conditional
     218                                ;arguments.  it takes two or three arguments:
     219                                
     220                                ;	1-	mnemonic
     221                                ;	2-	subroutine to be called
     222                                ;	3-	if non-blank, complement condition
     223                                
     224                                	.macro	gencnd	mne,subr,toggle	;generate conditional
     225                                	entsec	cndsec
     226                                	.rad50	/mne/
     227                                	.if b	<toggle>
     228                                	.word	subr
     229                                	.iff
     230                                	.word	subr+1
     231                                	.endc
     232                                	xitsec
     233                                	.endm
     233                                
     234                                	.macro	ch.mne
     235                                
     236                                ch.ior=	'!
     237                                ch.qtm=	'"
     238                                ch.hsh=	'#
     239                                ch.dol=	'$
     240                                ch.pct=	'%
     241                                ch.and=	'&
     242                                ch.xcl=	''
     243                                
     244                                ch.lp=	'(
     245                                ch.rp=	')
     246                                ch.mul=	'*
     247                                ch.add=	'+
     248                                ch.com=	',
     249                                ch.sub=	'-
     250                                ch.dot=	'.
     251                                ch.div=	'/
     252                                
     253                                ch.col=	':
     254                                ch.smc=	';
     255                                ch.lab=	'<
     256                                ch.equ=	'=
     257                                ch.rab=	'>
     258                                ch.qm=	'?
     259                                
     260                                ch.ind=	'@
     261                                ch.bsl=	'\
     262                                ch.uar=	'^
     263                                
     264                                let.a=	'a&^c40
     265                                let.b=	'b&^c40
     266                                let.c=	'c&^c40
     267                                let.d=	'd&^c40
     268                                let.e=	'e&^c40
     269                                let.f=	'f&^c40
     270                                let.g=	'g&^c40
     271                                let.o=	'o&^c40
     272                                let.p=	'p&^c40
     273                                let.r=	'r&^c40
     274                                let.z=	'z&^c40
     275                                
     276                                dig.0=	'0
     277                                dig.9=	'9
     278                                	.macro	ch.mne
     279                                	.endm	ch.mne
     280                                	.endm	ch.mne
     281                                
     282                                	.macro error num,arg, mess ,?x
     283                                	sdebug	<num>
     284                                	.globl	err.'arg,ern'num, errbts,errref
     285                                	.if	b	<mess>
     286                                	deliberate error mistake
     287                                	.endc
     288                                	.if	dif	0,num
     289                                	.globl	err.xx
     290                                	tst	err.xx
     291                                	bne	x
     292                                	mov	#ern'num,err.xx
     293                                x:
     294                                	.endc
     295                                	bis	#err.'arg,errbts
     296                                	.endm
     297                                
     298                                
     299                                
     300                                	.macro	setnz	addr	;set addr to non-zero for t/f flags
     301                                	mov	sp,addr
     302                                	.endm
     303                                
     304                                
     305                                	.macro	bisbic	arg	; used by .list/.nlist, .enabl/.dsabl
     306                                	.globl	bisbic
     307                                	mov	#arg,-(sp)
     308                                	call	bisbic
     309                                	tst	(sp)+
     310                                	.endm
     310                                
     311                                				;roll handler calls
     312                                
     313                                	.macro	search	rolnum	;binary search
     314                                	mov	#rolnum,r0
     315                                	.globl	search
     316                                	call	search
     317                                	.endm
     318                                
     319                                	.macro	scan	rolnum	;linear scan
     320                                	mov	#rolnum,r0
     321                                	.globl	scan
     322                                	call	scan
     323                                	.endm
     324                                
     325                                	.macro	scanw	rolnum	;linear scan, one word
     326                                	mov	#rolnum,r0
     327                                	.globl	scanw
     328                                	call	scanw
     329                                	.endm
     330                                
     331                                	.macro	next	rolnum	;fetch next entry
     332                                	mov	#rolnum,r0
     333                                	.globl	next
     334                                	call	next
     335                                	.endm
     336                                
     337                                	.macro	append	rolnum	;append to end of roll
     338                                	mov	#rolnum,r0
     339                                	.globl	append
     340                                	call	append
     341                                	.endm
     342                                
     343                                	.macro	zap	rolnum	;clear roll
     344                                	mov	#rolnum,r0
     345                                	.globl	zap
     346                                	call	zap
     347                                	.endm
     348                                
     349                                ;	call	insert		;insert (must be preceded by one 
     350                                				;of the above to set pointers)
     351                                ;	call	setrol		;save and set regs for above
     351                                
     352                                ;flags used in symbol table mode
     353                                
     354                                	.macro	st.flg
     355                                
     356                                .if le ft.unx
     357                                
     358                                ovrflg=	000004		;overlay (psect only)
     359                                defflg=	000010		;defined
     360                                relflg=	000040		;relocatable
     361                                glbflg=	000100		;global
     362                                dfgflg= 000200		; default global <rsx11d>... reeds's guess
     363                                
     364                                
     365                                .endc
     366                                
     367                                .if gt ft.unx
     368                                
     369                                			; ****** these should not be changed!! ******
     370                                shrflg=	000001		;shareable (psect only)
     371                                .if gt ft.id
     372                                insflg=	shrflg*2	;instruction space (psect only)
     373                                bssflg=	insflg*2	;blank section (psect only)
     374                                m.idf=	shrflg!insflg!bssflg	;mask to turn them off
     375                                .iff
     376                                bssflg=	shrflg*2
     377                                m.idf=	shrflg!bssflg
     378                                .endc
     379                                b.idf=	1		;shift count to make above bits word offset
     380                                			; ***********************************
     381                                defflg=	000010		;defined
     382                                ovrflg=	000020		;overlay (psect only)
     383                                relflg=	000040		;relocatable
     384                                glbflg=	000100		;global
     385                                dfgflg= 000200		; default global <rsx11d>... reeds's guess
     386                                
     387                                .endc
     388                                
     389                                ;
     390                                ; default psect attribs.
     391                                ; can be changed, but make sure all customers know about
     392                                ; it, including all the linkers.
     393                                ;
     394                                pattrs=relflg!defflg		; For .psects and blank .csects
     395                                aattrs=glbflg!defflg!ovrflg		; For .asect
     396                                cattrs=glbflg!relflg!defflg!ovrflg	; For named .csects
     397                                
     398                                regflg=	000001		;register
     399                                lblflg=	000002		;label
     400                                mdfflg=	000004		;multilpy defined
     401                                	.macro	st.flg
     402                                	.endm
     403                                	.endm	st.flg
     404                                
     405                                
     406                                
     407                                	.macro	ct.mne
     408                                	.globl	cttbl
     409                                ct.eol	=	000		; eol
     410                                ct.com	=	001		; comma
     411                                ct.tab	=	002		; tab
     412                                ct.sp	=	004		; space
     413                                ct.pcx	=	010		; printing character
     414                                ct.num	=	020		; numeric
     415                                ct.alp	=	040		; alpha, dot, dollar
     416                                ct.lc	=	100		; lower case alpha
     417                                ct.smc	=	200		; semi-colon (sign bit)
     418                                
     419                                ct.pc	=	ct.com!ct.smc!ct.pcx!ct.num!ct.alp
     420                                	.macro	ct.mne
     421                                	.endm	ct.mne
     422                                	.endm	ct.mne
     423                                
     424                                
     425                                	.end
     425                                
       7                                	.include "2.11BSD/m11/misc.m11"
       1                                	.title	atmisc
       2                                
       3                                	.ident	/14dec3/		;
       4                                
       5                                	.globl	..z,sdebug
       6                                	.mcall	(at)sdebug,ndebug
       7                                	.mcall	(at)always,ch.mne,ct.mne,error
       8 000000                         	always
       1                                
       2                                	.macro	.data
       3                                	entsec	.data
       4                                	.endm	.data
       5                                
       6                                	.macro	.text
       7                                	entsec	.text
       8                                	.endm
       9                                
      10                                	.macro	.bss
      11                                	entsec	.bss
      12                                	.endm
      13                                
      14        000001                  mk.symbol=1			;one to make symbols, 0 otherwise
      15        000000                  x40=	0
      16        000000                  pdpv45=	0			; host machine has 'mul', 'div', sob' instrucs.
      17                                				; if not you will have to write macros for them
      18        000007                  $timdf=	7			; California Time Zone
      19                                				; should really use ftime(2) for this and for
      20                                				; DST.
      21                                ;xfltg=	0		;define to assmbl out floating hardware
      22        000000                  rsx11d	=	0	; rsx11d features 
      23        000000                  debug	=	0	; <<< REEDS if non zero includes debug junk
      24                                
      25        000001                  ft.id=	1			;have set i & d.  set =0 if not
      26                                
      27        000001                  ft.unx = 1			; this macro-11 is for UNIX.  =0 if not.
      28                                
      29                                	.nlist	bex
      30                                
      31        000011                  tab=	11
      32        000012                  lf=	12
      33        000013                  vt=	13
      34        000014                  ff=	14
      35        000015                  cr=	15
      36        000040                  space=	40
      37                                
      38        000020                  bpmb	=	20		;bytes per macro block
      39                                
      40                                
      41                                
      42                                
      43                                
./2.11BSD/m11/misc.m11:8->ALWAYS:44: ***ERROR Unknown flag SHR given to .PSECT directive
      44                                	.psect	.text	con, shr, gbl,ins
./2.11BSD/m11/misc.m11:8->ALWAYS:45: ***ERROR Unknown flag DAT given to .PSECT directive
      45                                	.psect	.data	con, dat, prv, gbl
./2.11BSD/m11/misc.m11:8->ALWAYS:46: ***ERROR Unknown flag BSS given to .PSECT directive
      46                                	.psect	.bss	con, bss, gbl
      47                                
./2.11BSD/m11/misc.m11:8->ALWAYS:48: ***ERROR Unknown flag DAT given to .PSECT directive
      48                                	.psect	dpure	con, dat, prv, gbl
./2.11BSD/m11/misc.m11:8->ALWAYS:49: ***ERROR Unknown flag PRV given to .PSECT directive
      49                                	.psect	mixed	con, prv, gbl
./2.11BSD/m11/misc.m11:8->ALWAYS:50: ***ERROR Unknown flag DAT given to .PSECT directive
      50                                	.psect	errmes	con, dat, prv, gbl
./2.11BSD/m11/misc.m11:8->ALWAYS:51: ***ERROR Unknown flag BSS given to .PSECT directive
      51                                	.psect	impure	con, bss, gbl
./2.11BSD/m11/misc.m11:8->ALWAYS:52: ***ERROR Unknown flag BSS given to .PSECT directive
      52                                	.psect	imppas	con, bss, gbl
./2.11BSD/m11/misc.m11:8->ALWAYS:53: ***ERROR Unknown flag BSS given to .PSECT directive
      53                                	.psect	implin	con, bss, gbl
./2.11BSD/m11/misc.m11:8->ALWAYS:54: ***ERROR Unknown flag DAT given to .PSECT directive
      54                                	.psect	swtsec	con, dat, prv, gbl	; unix command line flags
./2.11BSD/m11/misc.m11:8->ALWAYS:55: ***ERROR Unknown flag DAT given to .PSECT directive
      55                                	.psect	cndsec 	con, dat, prv, gbl	; gt, le, equ, etc.  for '.if'
./2.11BSD/m11/misc.m11:8->ALWAYS:56: ***ERROR Unknown flag DAT given to .PSECT directive
      56                                	.psect	crfsec 	con, dat, prv, gbl	; args for -cr flag
./2.11BSD/m11/misc.m11:8->ALWAYS:57: ***ERROR Unknown flag DAT given to .PSECT directive
      57                                	.psect	edtsec 	con, dat, prv, gbl	; args for .enabl
./2.11BSD/m11/misc.m11:8->ALWAYS:58: ***ERROR Unknown flag DAT given to .PSECT directive
      58                                	.psect	lctsec 	con, dat, prv, gbl	; args for .list
./2.11BSD/m11/misc.m11:8->ALWAYS:59: ***ERROR Unknown flag DAT given to .PSECT directive
      59                                	.psect	psasec 	con, dat, prv, gbl
./2.11BSD/m11/misc.m11:8->ALWAYS:60: ***ERROR Unknown flag DAT given to .PSECT directive
      60                                	.psect	pstsec 	con, dat, prv, gbl
./2.11BSD/m11/misc.m11:8->ALWAYS:61: ***ERROR Unknown flag DAT given to .PSECT directive
      61                                	.psect	rolbas 	con, dat, prv, gbl	; core allocation: starts of tables
./2.11BSD/m11/misc.m11:8->ALWAYS:62: ***ERROR Unknown flag DAT given to .PSECT directive
      62                                	.psect	rolsiz 	con, dat, prv, gbl	; sizes of table entries
./2.11BSD/m11/misc.m11:8->ALWAYS:63: ***ERROR Unknown flag DAT given to .PSECT directive
      63                                	.psect	roltop 	con, dat, prv, gbl	; tops of tables
./2.11BSD/m11/misc.m11:8->ALWAYS:64: ***ERROR Unknown flag BSS given to .PSECT directive
      64                                	.psect	xpcor	con,bss	, gbl	; this one MUST come last in core
      65                                
      66                                
      67                                
      68                                	.macro	entsec	name 	;init a section
      69                                	.psect	name	con
      70                                	.endm	entsec
      71                                
      72                                
      73                                
      74                                	.macro jeq	x,?fred
      75                                	bne	fred
      76                                	jmp	x
      77                                fred:
      78                                	.endm
      79                                	.macro	jne	x,?fred
      80                                	beq	fred
      81                                	jmp	x
      82                                fred:
      83                                	.endm
      84                                	.macro	xitsec
      85                                	entsec	.text
      86                                	.endm	xitsec
      87                                
      88                                
      89                                	.macro	call	address
      90                                	jsr	pc,address
      91                                	.endm
      92                                
      93                                	.macro	return
      94                                	rts	pc
      95                                	.endm
      96                                
      97                                
      98                                	.macro	always
      99                                	.nlist	bex
     100                                	.endm	always
       9 000000                         	ch.mne
       1                                
       2        000041                  ch.ior=	'!
       3        000042                  ch.qtm=	'"
       4        000043                  ch.hsh=	'#
       5        000044                  ch.dol=	'$
       6        000045                  ch.pct=	'%
       7        000046                  ch.and=	'&
       8        000047                  ch.xcl=	''
       9                                
      10        000050                  ch.lp=	'(
      11        000051                  ch.rp=	')
      12        000052                  ch.mul=	'*
      13        000053                  ch.add=	'+
      14        000054                  ch.com=	',
      15        000055                  ch.sub=	'-
      16        000056                  ch.dot=	'.
      17        000057                  ch.div=	'/
      18                                
      19        000072                  ch.col=	':
      20        000073                  ch.smc=	';
      21        000074                  ch.lab=	'<
      22        000075                  ch.equ=	'=
      23        000076                  ch.rab=	'>
      24        000077                  ch.qm=	'?
      25                                
      26        000100                  ch.ind=	'@
      27        000134                  ch.bsl=	'\
      28        000136                  ch.uar=	'^
      29                                
      30        000101                  let.a=	'a&^c40
      31        000102                  let.b=	'b&^c40
      32        000103                  let.c=	'c&^c40
      33        000104                  let.d=	'd&^c40
      34        000105                  let.e=	'e&^c40
      35        000106                  let.f=	'f&^c40
      36        000107                  let.g=	'g&^c40
      37        000117                  let.o=	'o&^c40
      38        000120                  let.p=	'p&^c40
      39        000122                  let.r=	'r&^c40
      40        000132                  let.z=	'z&^c40
      41                                
      42        000060                  dig.0=	'0
      43        000071                  dig.9=	'9
      44                                	.macro	ch.mne
      45                                	.endm	ch.mne
      10 000000                         	ct.mne
       1                                	.globl	cttbl
       2        000000                  ct.eol	=	000		; eol
       3        000001                  ct.com	=	001		; comma
       4        000002                  ct.tab	=	002		; tab
       5        000004                  ct.sp	=	004		; space
       6        000010                  ct.pcx	=	010		; printing character
       7        000020                  ct.num	=	020		; numeric
       8        000040                  ct.alp	=	040		; alpha, dot, dollar
       9        000100                  ct.lc	=	100		; lower case alpha
      10        000200                  ct.smc	=	200		; semi-colon (sign bit)
      11                                
      12        000271                  ct.pc	=	ct.com!ct.smc!ct.pcx!ct.num!ct.alp
      13                                	.macro	ct.mne
      14                                	.endm	ct.mne
      11                                
      12                                	.globl	symbol,	chrpnt,	symbeg,	value
      13                                
      14                                	.globl	cpopj,	setwrd,	setbyt,	dnc,	r50unp
      15                                	.globl	getsym,	mulr50,	getr50,	setr50,	tstr50
      16                                	.globl	cvtnum
      17                                	.globl	setsym,	getnb,	setnb,	getchr,	setchr
      18                                	.globl	savreg,	xmit0,	movbyt,	mul,	div
      19                                
      20 000000                         	xitsec			;start in default sector
       1 000000                         	entsec	.text
       1 000000                         	.psect	.text	con
      20                                
      21 000000 010146                  setwrd:	mov	r1,-(sp)	;stack reg
      22 000002 016101  000002          	mov	2(r1),r1	;get actual value
      23 000006 112712  000030          	movb	#dig.0/2,(r2)	;set primitive
      24 000012 006301                  	asl	r1
      25 000014 106122                  	rolb	(r2)+		;move in bit
      26 000016 012700  000005          	mov	#5,r0
      27 000022 000416                  	br	setbyx
      28                                
      29 000024 010146                  setbyt:	mov	r1,-(sp)	;stack index
      30 000026 116101  000002          	movb	2(r1),r1	;get value
      31 000032 012700  000040          	mov	#space,r0
      32 000036 110022                  	movb	r0,(r2)+	;pad with spaces
      33 000040 110022                  	movb	r0,(r2)+
      34 000042 110022                  	movb	r0,(r2)+
      35 000044 000301                  	swab	r1		;manipulate to left half
      36 000046 106001                  	rorb	r1		;get the last guy
      37 000050 000241                  	clc
      38 000052 006001                  	ror	r1
      39 000054 012700  000003          	mov	#3,r0
      40 000060 000300                  setbyx:	swab	r0
      41 000062 062700  000003          	add	#3,r0
      42 000066 112712  000006          	movb	#dig.0/10,(r2)
      43 000072 006301                  1$:	asl	r1
      44 000074 106112                  	rolb	(r2)
      45 000076 105300                  	decb	r0
      46 000100 003374                  	bgt	1$
      47 000102 105722                  	tstb	(r2)+
      48 000104 000300                  	swab	r0
      49 000106 077014                  	sob	r0,setbyx
      50 000110 012601                  	mov	(sp)+,r1
      51 000112                         	return
       1 000112 000207                  	rts	pc
      51                                
      52                                dnc:				;decimal number conversion
      53 000114 012703  000012          	mov	#10.,r3		;set divisor
      54                                1$:				;entry for other than decimal
      55 000120 005000                  	clr	r0
      56 000122 071003                  	div	r3,r0		;divide r1
      57 000124 010146                  	mov	r1,-(sp)	;save remainder
      58 000126 010001                  	mov	r0,r1		;set for next divide
      59 000130 001402                  	beq	2$		;  unless zero
      60 000132                         	call	1$		;recurse
       1 000132 004767  177762          	jsr	pc,1$
      61 000136 012601                  2$:	mov	(sp)+,r1	;retrieve number
      62 000140 062701  000060          	add	#dig.0,r1	;convert to ascii
      63 000144 110122                  	movb	r1,(r2)+	;store
      64 000146                         	return
       1 000146 000207                  	rts	pc
      65                                
      66                                
      67                                r50unp:				;rad 50 unpack routine
      68 000150 010446                  	mov	r4,-(sp)	;save reg
      69 000152 012704  000000G         	mov	#symbol,r4	;point to symbol storage
      70 000156 012401                  1$:	mov	(r4)+,r1	;get next word
      71 000160 012703  003100          	mov	#50*50,r3	;set divisor
      72 000164                         	call	10$		;divide and stuff it
       1 000164 004767  000030          	jsr	pc,10$
      73 000170 012703  000050          	mov	#50,r3
      74 000174                         	call	10$		;again for next
       1 000174 004767  000020          	jsr	pc,10$
      75 000200 010100                  	mov	r1,r0
      76 000202                         	call	11$		;finish last guy
       1 000202 004767  000016          	jsr	pc,11$
      77 000206 020427  000004G         	cmp	r4,#symbol+4	;through?
      78 000212 001361                  	bne	1$		;  no
      79 000214 012604                  	mov	(sp)+,r4	;yes, restore register
      80 000216                         	return
       1 000216 000207                  	rts	pc
      81                                
      82                                
      83 000220 005000                  10$:	clr	r0
      84 000222 071003                  	div	r3,r0
      85 000224 005700                  11$:	tst	r0		;space?
      86 000226 001412                  	beq	23$		;  yes
      87 000230 020027  000033          	cmp	r0,#33		;test middle
      88 000234 002405                  	blt	22$		;alpha
      89 000236 001402                  	beq	21$		;dollar
      90 000240 062700  000011          	add	#22-11,r0	;dot or dollar
      91 000244 062700  177711          21$:	add	#11-100,r0
      92 000250 062700  000040          22$:	add	#100-40,r0
      93 000254 062700  000040          23$:	add	#40,r0
      94 000260 110022                  	movb	r0,(r2)+	;stuff it
      95 000262                         	return
       1 000262 000207                  	rts	pc
      95                                
      96                                	.sbttl	symbol/character handlers
      97                                
      98                                getsym:
      99 000264                         	call	savreg
       1 000264 004767  000464          	jsr	pc,savreg
     100 000270 016767  000000' 000002' 	mov	chrpnt,symbeg	;save in case of rescan
     101 000276 012701  000004G         	mov	#symbol+4,r1
     102 000302 005041                  	clr	-(r1)
     103 000304 005041                  	clr	-(r1)
     104 000306 136527  000000' 000040  	bitb	cttbl(r5),#ct.alp	;alpha?
     105 000314 001423                  	beq	5$		;  no, exit false
     106 000316 012702  026455          	mov	#26455,r2
     107 000322                         	call	setr50
       1 000322 004767  000070          	jsr	pc,setr50
     108 000326                         1$:	call	mulr50
       1 000326 004767  000040          	jsr	pc,mulr50
     109 000332 006202                  2$:	asr	r2
     110 000334 103774                  	bcs	1$
     111 000336 060011                  	add	r0,(r1)
     112 000340                         3$:	call	getr50
       1 000340 004767  000046          	jsr	pc,getr50
     113 000344 003405                  	ble	4$
     114 000346 006202                  	asr	r2
     115 000350 103770                  	bcs	2$
     116 000352 001772                  	beq	3$
     117 000354 005721                  	tst	(r1)+
     118 000356 000763                  	br	1$
     119                                
     120 000360                         4$:	call	setnb
       1 000360 004767  000224          	jsr	pc,setnb
     121 000364 016700  000000G         5$:	mov	symbol,r0
     122 000370                         	return
       1 000370 000207                  	rts	pc
     123                                
     124                                
     125                                mulr50:				;multiply r0 * 50
     126                                ;	imuli	50,r0
     127 000372 010046                  	mov	r0,-(sp)
     128 000374 006300                  	asl	r0
     129 000376 006300                  	asl	r0
     130 000400 062600                  	add	(sp)+,r0
     131 000402 006300                  	asl	r0
     132 000404 006300                  	asl	r0
     133 000406 006300                  	asl	r0
     134 000410                         	return
       1 000410 000207                  	rts	pc
     135                                
     136 000412                         	entsec	impure
       1 000000                         	.psect	impure	con
     137        000000                  chrpnt:	.blkw			;character pointer
     138        000002                  symbeg:	.blkw			;start of current symbol
     139 000004                         	xitsec
       1 000004                         	entsec	.text
       1 000412                         	.psect	.text	con
     139                                
     140 000412                         getr50:	call	getchr
       1 000412 004767  000210          	jsr	pc,getchr
     141 000416 010500                  setr50:	mov	r5,r0
     142 000420 132760  000164  000000' tstr50:	bitb	#ct.lc!ct.alp!ct.num!ct.sp,cttbl(r0)	;alpha, numeric, or space?
     143 000426 001420                  	beq	1$		;  no, exit minus
     144 000430 020027  000044          	cmp	r0,#ch.dol	;yes, try dollar
     145 000434 103417                  	blo	2$		;space
     146 000436 001420                  	beq	3$		;dollar
     147 000440 132760  000100  000000' 	bitb	#ct.lc,cttbl(r0)
     148 000446 001402                  	beq	10$
     149 000450 062700  177740          	add	#'A-'a,r0
     150                                10$:
     151 000454 020027  000101          	cmp	r0,#let.a
     152 000460 020027  000101          	cmp	r0,#let.a
     153 000464 103407                  	blo	4$		;dot or digit
     154 000466 000410                  	br	5$		;alpha
     155                                
     156 000470 012700  100040          1$:	mov	#100000+space,r0	;invalid, force minus
     157 000474 162700  000027          2$:	sub	#space-11,r0	;space
     158 000500 162700  177767          3$:	sub	#11-22,r0	;dollar
     159 000504 162700  177722          4$:	sub	#22-100,r0	;dot, digit
     160 000510 162700  000100          5$:	sub	#100,r0		;alphabetic
     161 000514                         	return
       1 000514 000207                  	rts	pc
     161                                
     162                                cvtnum:				;convert text to numeric
     163                                
     164                                				; in  -  r2    radix
     165                                
     166                                				; out -  value result
     167                                				; r0 - high bit  - overflow
     168                                				;    - high byte - character count
     169                                				;    - low  byte - oversize count
     170                                
     171                                
     172 000516                         	call	savreg
       1 000516 004767  000232          	jsr	pc,savreg
     173 000522 005000                  	clr	r0		;result flag register
     174 000524 005001                  	clr	r1		;numeric accumulator
     175 000526 010503                  1$:	mov	r5,r3		;get a copy of the current char
     176 000530 162703  000060          	sub	#dig.0,r3	;convert to absolute
     177 000534 020327  000011          	cmp	r3,#9.		;numeric?
     178 000540 101012                  	bhi	9$		;  no, we're through
     179 000542 020302                  	cmp	r3,r2		;yes, less than radix?
     180 000544 103401                  	blo	2$		;  yes
     181 000546 005200                  	inc	r0		;no, bump "n" error count
     182                                2$:
     183                                	.if ndf	pdpv45
     184                                	mov	r2,r4		;copy of current radix
     185                                	clr	-(sp)		;temp ac
     186                                3$:	asr	r4		;shift radix
     187                                	bcc	4$		;branch if no accumulation
     188                                	add	r1,(sp)		;add in
     189                                4$:	tst	r4		;any more bits to process?
     190                                	beq	5$		;  no
     191                                	asl	r1		;yes, shift pattern
     192                                	bcc	3$		;branch if no overflow
     193                                	bis	#100000,r0	;oh, oh.  flag it
     194                                	br	3$
     195                                
     196                                5$:	mov	(sp)+,r1	;set new number
     197                                	.iff
     198 000550 070102                  	mul	r2,r1
     199                                	.endc
     200 000552 060301                  	add	r3,r1		;add in current number
     201 000554                         	call	getchr		;get another character
       1 000554 004767  000046          	jsr	pc,getchr
     202 000560 062700  000400          	add	#000400,r0	;tally character count
     203 000564 000760                  	br	1$
     204                                
     205 000566 010167  000000G         9$:	mov	r1,value	;return  result in "value"
     206 000572                         	return			;return, testing r0
       1 000572 000207                  	rts	pc
     206                                
     207                                ;ct.eol=	000		; eol
     208                                ;ct.com=	001		; comma
     209                                ;ct.tab=	002		; tab
     210                                ;ct.sp=	004		; space
     211                                ;ct.pcx=	010		; printing character
     212                                ;ct.num=	020		; numeric
     213                                ;ct.alp=	040		; alpha, dot, dollar
     214                                ;ct.lc=	100		;  lower case alpha
     215                                ;ct.smc=	200		;  semi-colon  (minus bit)
     216                                ;
     217                                ;ct.pc=	ct.com!ct.smc!ct.pcx!ct.num!ct.alp	;printing chars
     218                                
     219                                	.macro	genctt	arg	;generate character type table
     220                                	.irp	a,	<arg>
     221                                	.byte	ct.'a
     222                                	.endm
     223                                	.endm
     224                                
     225                                
     226 000574                         	entsec	dpure
       1 000000                         	.psect	dpure	con
     227                                cttbl:				;character type table
     228 000000                         	genctt	<eol, eol, eol, eol, eol, eol, eol, eol>
       1                                	.irp	a,	<eol, eol, eol, eol, eol, eol, eol, eol>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000000    000                  	.byte	ct.eol
       2 000001    000                  	.byte	ct.eol
       3 000002    000                  	.byte	ct.eol
       4 000003    000                  	.byte	ct.eol
       5 000004    000                  	.byte	ct.eol
       6 000005    000                  	.byte	ct.eol
       7 000006    000                  	.byte	ct.eol
       8 000007    000                  	.byte	ct.eol
     229 000010                         	genctt	<eol, tab, eol, eol, eol, eol, eol, eol>
       1                                	.irp	a,	<eol, tab, eol, eol, eol, eol, eol, eol>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000010    000                  	.byte	ct.eol
       2 000011    002                  	.byte	ct.tab
       3 000012    000                  	.byte	ct.eol
       4 000013    000                  	.byte	ct.eol
       5 000014    000                  	.byte	ct.eol
       6 000015    000                  	.byte	ct.eol
       7 000016    000                  	.byte	ct.eol
       8 000017    000                  	.byte	ct.eol
     230 000020                         	genctt	<eol, eol, eol, eol, eol, eol, eol, eol>
       1                                	.irp	a,	<eol, eol, eol, eol, eol, eol, eol, eol>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000020    000                  	.byte	ct.eol
       2 000021    000                  	.byte	ct.eol
       3 000022    000                  	.byte	ct.eol
       4 000023    000                  	.byte	ct.eol
       5 000024    000                  	.byte	ct.eol
       6 000025    000                  	.byte	ct.eol
       7 000026    000                  	.byte	ct.eol
       8 000027    000                  	.byte	ct.eol
     231 000030                         	genctt	<eol, eol, eol, eol, eol, eol, eol, eol>
       1                                	.irp	a,	<eol, eol, eol, eol, eol, eol, eol, eol>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000030    000                  	.byte	ct.eol
       2 000031    000                  	.byte	ct.eol
       3 000032    000                  	.byte	ct.eol
       4 000033    000                  	.byte	ct.eol
       5 000034    000                  	.byte	ct.eol
       6 000035    000                  	.byte	ct.eol
       7 000036    000                  	.byte	ct.eol
       8 000037    000                  	.byte	ct.eol
     232                                
     233 000040                         	genctt	<sp , pcx, pcx, pcx, alp, pcx, pcx, pcx>
       1                                	.irp	a,	<sp , pcx, pcx, pcx, alp, pcx, pcx, pcx>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000040    004                  	.byte	ct.sp
       2 000041    010                  	.byte	ct.pcx
       3 000042    010                  	.byte	ct.pcx
       4 000043    010                  	.byte	ct.pcx
       5 000044    040                  	.byte	ct.alp
       6 000045    010                  	.byte	ct.pcx
       7 000046    010                  	.byte	ct.pcx
       8 000047    010                  	.byte	ct.pcx
     234 000050                         	genctt	<pcx, pcx, pcx, pcx, com, pcx, alp, pcx>
       1                                	.irp	a,	<pcx, pcx, pcx, pcx, com, pcx, alp, pcx>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000050    010                  	.byte	ct.pcx
       2 000051    010                  	.byte	ct.pcx
       3 000052    010                  	.byte	ct.pcx
       4 000053    010                  	.byte	ct.pcx
       5 000054    001                  	.byte	ct.com
       6 000055    010                  	.byte	ct.pcx
       7 000056    040                  	.byte	ct.alp
       8 000057    010                  	.byte	ct.pcx
     235 000060                         	genctt	<num, num, num, num, num, num, num, num>
       1                                	.irp	a,	<num, num, num, num, num, num, num, num>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000060    020                  	.byte	ct.num
       2 000061    020                  	.byte	ct.num
       3 000062    020                  	.byte	ct.num
       4 000063    020                  	.byte	ct.num
       5 000064    020                  	.byte	ct.num
       6 000065    020                  	.byte	ct.num
       7 000066    020                  	.byte	ct.num
       8 000067    020                  	.byte	ct.num
     236 000070                         	genctt	<num, num, pcx, smc, pcx, pcx, pcx, pcx>
       1                                	.irp	a,	<num, num, pcx, smc, pcx, pcx, pcx, pcx>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000070    020                  	.byte	ct.num
       2 000071    020                  	.byte	ct.num
       3 000072    010                  	.byte	ct.pcx
       4 000073    200                  	.byte	ct.smc
       5 000074    010                  	.byte	ct.pcx
       6 000075    010                  	.byte	ct.pcx
       7 000076    010                  	.byte	ct.pcx
       8 000077    010                  	.byte	ct.pcx
     237                                
     238 000100                         	genctt	<pcx, alp, alp, alp, alp, alp, alp, alp>
       1                                	.irp	a,	<pcx, alp, alp, alp, alp, alp, alp, alp>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000100    010                  	.byte	ct.pcx
       2 000101    040                  	.byte	ct.alp
       3 000102    040                  	.byte	ct.alp
       4 000103    040                  	.byte	ct.alp
       5 000104    040                  	.byte	ct.alp
       6 000105    040                  	.byte	ct.alp
       7 000106    040                  	.byte	ct.alp
       8 000107    040                  	.byte	ct.alp
     239 000110                         	genctt	<alp, alp, alp, alp, alp, alp, alp, alp>
       1                                	.irp	a,	<alp, alp, alp, alp, alp, alp, alp, alp>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000110    040                  	.byte	ct.alp
       2 000111    040                  	.byte	ct.alp
       3 000112    040                  	.byte	ct.alp
       4 000113    040                  	.byte	ct.alp
       5 000114    040                  	.byte	ct.alp
       6 000115    040                  	.byte	ct.alp
       7 000116    040                  	.byte	ct.alp
       8 000117    040                  	.byte	ct.alp
     240 000120                         	genctt	<alp, alp, alp, alp, alp, alp, alp, alp>
       1                                	.irp	a,	<alp, alp, alp, alp, alp, alp, alp, alp>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000120    040                  	.byte	ct.alp
       2 000121    040                  	.byte	ct.alp
       3 000122    040                  	.byte	ct.alp
       4 000123    040                  	.byte	ct.alp
       5 000124    040                  	.byte	ct.alp
       6 000125    040                  	.byte	ct.alp
       7 000126    040                  	.byte	ct.alp
       8 000127    040                  	.byte	ct.alp
     241 000130                         	genctt	<alp, alp, alp, pcx, pcx, pcx, pcx, pcx>
       1                                	.irp	a,	<alp, alp, alp, pcx, pcx, pcx, pcx, pcx>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000130    040                  	.byte	ct.alp
       2 000131    040                  	.byte	ct.alp
       3 000132    040                  	.byte	ct.alp
       4 000133    010                  	.byte	ct.pcx
       5 000134    010                  	.byte	ct.pcx
       6 000135    010                  	.byte	ct.pcx
       7 000136    010                  	.byte	ct.pcx
       8 000137    010                  	.byte	ct.pcx
     242                                
     243 000140                         	genctt	<eol, lc , lc , lc , lc , lc , lc , lc >
       1                                	.irp	a,	<eol, lc , lc , lc , lc , lc , lc , lc >
       2                                	.byte	ct.'a
       3                                	.endm
       1 000140    000                  	.byte	ct.eol
       2 000141    100                  	.byte	ct.lc
       3 000142    100                  	.byte	ct.lc
       4 000143    100                  	.byte	ct.lc
       5 000144    100                  	.byte	ct.lc
       6 000145    100                  	.byte	ct.lc
       7 000146    100                  	.byte	ct.lc
       8 000147    100                  	.byte	ct.lc
     244 000150                         	genctt	<lc , lc , lc , lc , lc , lc , lc , lc >
       1                                	.irp	a,	<lc , lc , lc , lc , lc , lc , lc , lc >
       2                                	.byte	ct.'a
       3                                	.endm
       1 000150    100                  	.byte	ct.lc
       2 000151    100                  	.byte	ct.lc
       3 000152    100                  	.byte	ct.lc
       4 000153    100                  	.byte	ct.lc
       5 000154    100                  	.byte	ct.lc
       6 000155    100                  	.byte	ct.lc
       7 000156    100                  	.byte	ct.lc
       8 000157    100                  	.byte	ct.lc
     245 000160                         	genctt	<lc , lc , lc , lc , lc , lc , lc , lc >
       1                                	.irp	a,	<lc , lc , lc , lc , lc , lc , lc , lc >
       2                                	.byte	ct.'a
       3                                	.endm
       1 000160    100                  	.byte	ct.lc
       2 000161    100                  	.byte	ct.lc
       3 000162    100                  	.byte	ct.lc
       4 000163    100                  	.byte	ct.lc
       5 000164    100                  	.byte	ct.lc
       6 000165    100                  	.byte	ct.lc
       7 000166    100                  	.byte	ct.lc
       8 000167    100                  	.byte	ct.lc
     246 000170                         	genctt	<lc , lc , lc , eol, eol, eol, eol, eol>
       1                                	.irp	a,	<lc , lc , lc , eol, eol, eol, eol, eol>
       2                                	.byte	ct.'a
       3                                	.endm
       1 000170    100                  	.byte	ct.lc
       2 000171    100                  	.byte	ct.lc
       3 000172    100                  	.byte	ct.lc
       4 000173    000                  	.byte	ct.eol
       5 000174    000                  	.byte	ct.eol
       6 000175    000                  	.byte	ct.eol
       7 000176    000                  	.byte	ct.eol
       8 000177    000                  	.byte	ct.eol
     247                                
     248 000200                         	xitsec
       1 000200                         	entsec	.text
       1 000574                         	.psect	.text	con
     248                                
     249                                setsym:				;set symbol for re-scan
     250 000574 016767  000002' 000000' 	mov	symbeg,chrpnt	;set the pointer
     251 000602 000413                  	br	setchr		;set character and flags
     252                                
     253                                getnb:				;get a non-blank character
     254 000604 005267  000000'         	inc	chrpnt		;bump pointer
     255 000610                         setnb:	call	setchr		;set register and flags
       1 000610 004767  000016          	jsr	pc,setchr
     256 000614 132765  000006  000000' 	bitb	#ct.sp!ct.tab,cttbl(r5)	;blank?
     257 000622 001370                  	bne	getnb		;  yes, bypass
     258 000624 000402                  	br	setchr		;exit, setting flags
     259                                
     260                                getchr:				;get the next character
     261 000626 005267  000000'         	inc	chrpnt		;bump pointer
     262 000632 117705  000000'         setchr:	movb	@chrpnt,r5	;set register and flags
     263                                	.if ndf	xedlc
     264 000636 020527  000141          	cmp	r5,#141		;lower case?
     265 000642 103405                  	blo	1$		;no
     266 000644 020527  000172          	cmp	r5,#172
     267 000650 101002                  	bhi	1$		;no
     268 000652 162705  000040          	sub	#40,r5		;convert to upper case
     269 000656 005705                  1$:	tst	r5		;set condition codes
     270                                	.endc
     271                                	;bmi	getchr		;loop if invalid character
     272 000660 100034                  	bpl	2$		;non invalid char, return
     273 000662                         	error	13,i,<illegal character>
       1 000662                         	sdebug	<13>
       1                                	.globl	sdebug,..z,..zbuf
       2        000000                  	x = 0
       3                                	.irpc	t,<13>
       4                                	movb	#''t,..zbuf+x
       5                                	x = x+1
       6                                	.endm
       1 000662 112767  000061  000000G 	movb	#'1,..zbuf+x
       2        000001                  	x = x+1
       3 000670 112767  000063  000001G 	movb	#'3,..zbuf+x
       4        000002                  	x = x+1
       7 000676 112767  000000  000002G 	movb	#0,..zbuf+x
       8 000704 012767  000000G 000000G 	mov	#..zbuf,..z
       9 000712                         	call	sdebug
       1 000712 004767  000000G         	jsr	pc,sdebug
       2                                	.globl	err.i,ern13, errbts,errref
       3                                	.if	b	<illegal character>
       4                                	deliberate error mistake
       5                                	.endc
       6                                	.if	dif	0,13
       7                                	.globl	err.xx
       8 000716 005767  000000G         	tst	err.xx
       9 000722 001003                  	bne	32768$
      10 000724 012767  000000G 000000G 	mov	#ern13,err.xx
      11                                32768$:
      12                                	.endc
      13 000732 052767  000000G 000000G 	bis	#err.i,errbts
     274 000740 012705  000077          	mov	#'? ,r5
     275 000744 112777  000277  000000' 	movb	#200!'?,@chrpnt	; put the qm into linbuf
     276 000752                         2$:	return
       1 000752 000207                  	rts	pc
     276                                
     277                                savreg:				;save registers
     278 000754 010346                  	mov	r3,-(sp)
     279 000756 010246                  	mov	r2,-(sp)
     280 000760 010146                  	mov	r1,-(sp)
     281 000762 016646  000006          	mov	6.(sp),-(sp)	;place return address on top
     282 000766 010466  000010          	mov	r4,8.(sp)
     283                                ;	call	tststk		;test stack
     284 000772                         	call	@(sp)+		;return the call
       1 000772 004736                  	jsr	pc,@(sp)+
     285 000774 012601                  	mov	(sp)+,r1	;restore registers
     286 000776 012602                  	mov	(sp)+,r2
     287 001000 012603                  	mov	(sp)+,r3
     288 001002 012604                  	mov	(sp)+,r4
     289 001004 005700                  	tst	r0		;set condition codes
     290 001006                         cpopj:	return
       1 001006 000207                  	rts	pc
     291                                
     292                                
     293        000020                  	.rept	20		;generate xmit sequence
     294                                	mov	(r1)+,(r2)+	
     295                                	.endm
       1 001010 012122                  	mov	(r1)+,(r2)+	
       1 001012 012122                  	mov	(r1)+,(r2)+	
       1 001014 012122                  	mov	(r1)+,(r2)+	
       1 001016 012122                  	mov	(r1)+,(r2)+	
       1 001020 012122                  	mov	(r1)+,(r2)+	
       1 001022 012122                  	mov	(r1)+,(r2)+	
       1 001024 012122                  	mov	(r1)+,(r2)+	
       1 001026 012122                  	mov	(r1)+,(r2)+	
       1 001030 012122                  	mov	(r1)+,(r2)+	
       1 001032 012122                  	mov	(r1)+,(r2)+	
       1 001034 012122                  	mov	(r1)+,(r2)+	
       1 001036 012122                  	mov	(r1)+,(r2)+	
       1 001040 012122                  	mov	(r1)+,(r2)+	
       1 001042 012122                  	mov	(r1)+,(r2)+	
       1 001044 012122                  	mov	(r1)+,(r2)+	
       1 001046 012122                  	mov	(r1)+,(r2)+	
     296 001050                         xmit0:	return
       1 001050 000207                  	rts	pc
     297                                
     298                                movbyt:				;move byte string
     299 001052 112122                  1$:	movb	(r1)+,(r2)+	;move one
     300 001054 001376                  	bne	1$		;loop if non-null
     301 001056 105742                  	tstb	-(r2)		;end, point back to null
     302 001060                         	return
       1 001060 000207                  	rts	pc
     303                                
     304                                
     305                                	.end
     305                                
       7                                


Symbol table

$TIMDF = 000007           4$3      000360R  L   002 CH.SMC = 000073           ERR.XX = ****** G         PDPV45 = 000000           
.        001062R      002 4$4      000504R  L   002 CH.SUB = 000055           ERRBTS = ****** G         R50UNP   000150RG     002 
..Z    = ****** G         5$3      000364R  L   002 CH.UAR = 000136           ERRREF = ****** G         RSX11D = 000000           
..ZBUF = ****** G         5$4      000510R  L   002 CH.XCL = 000047           FF     = 000014           SAVREG   000754RG     002 
1$0      000072R  L   002 9$5      000566R  L   002 CHRPNT   000000RG     008 FT.ID  = 000001           SDEBUG = ****** G         
1$1      000120R  L   002 BPMB   = 000020           CPOPJ    001006RG     002 FT.UNX = 000001           SETBYT   000024RG     002 
1$2      000156R  L   002 CH.ADD = 000053           CR     = 000015           GETCHR   000626RG     002 SETBYX   000060R      002 
1$3      000326R  L   002 CH.AND = 000046           CT.ALP = 000040           GETNB    000604RG     002 SETCHR   000632RG     002 
1$4      000470R  L   002 CH.BSL = 000134           CT.COM = 000001           GETR50   000412RG     002 SETNB    000610RG     002 
1$5      000526R  L   002 CH.COL = 000072           CT.EOL = 000000           GETSYM   000264RG     002 SETR50   000416RG     002 
1$6      000656R  L   002 CH.COM = 000054           CT.LC  = 000100           LET.A  = 000101           SETSYM   000574RG     002 
1$7      001052R  L   002 CH.DIV = 000057           CT.NUM = 000020           LET.B  = 000102           SETWRD   000000RG     002 
10$2     000220R  L   002 CH.DOL = 000044           CT.PC  = 000271           LET.C  = 000103           SPACE  = 000040           
10$4     000454R  L   002 CH.DOT = 000056           CT.PCX = 000010           LET.D  = 000104           SYMBEG   000002RG     008 
11$2     000224R  L   002 CH.EQU = 000075           CT.SMC = 000200           LET.E  = 000105           SYMBOL = ****** G         
2$1      000136R  L   002 CH.HSH = 000043           CT.SP  = 000004           LET.F  = 000106           TAB    = 000011           
2$3      000332R  L   002 CH.IND = 000100           CT.TAB = 000002           LET.G  = 000107           TSTR50   000420RG     002 
2$4      000474R  L   002 CH.IOR = 000041           CTTBL    000000RG     005 LET.O  = 000117           VALUE  = ****** G         
2$5      000550R  L   002 CH.LAB = 000074           CVTNUM   000516RG     002 LET.P  = 000120           VT     = 000013           
2$6      000752R  L   002 CH.LP  = 000050           DEBUG  = 000000           LET.R  = 000122           X      = 000002           
21$2     000244R  L   002 CH.MUL = 000052           DIG.0  = 000060           LET.Z  = 000132           X40    = 000000           
22$2     000250R  L   002 CH.PCT = 000045           DIG.9  = 000071           LF     = 000012           XMIT0    001050RG     002 
23$2     000254R  L   002 CH.QM  = 000077           DIV    = ****** G         MK.SYM = 000001           
3$3      000340R  L   002 CH.QTM = 000042           DNC      000114RG     002 MOVBYT   001052RG     002 
3$4      000500R  L   002 CH.RAB = 000076           ERN13  = ****** G         MUL    = ****** G         
32768$6  000732R  L   002 CH.RP  = 000051           ERR.I  = ****** G         MULR50   000372RG     002 


Program sections:

. ABS.  000000    000   (RW,I,GBL,ABS,OVR,NOSAV)
        000000    001   (RW,I,LCL,REL,CON,NOSAV)
.TEXT   001062    002   (RW,I,LCL,REL,CON,NOSAV)
.DATA   000000    003   (RW,I,LCL,REL,CON,NOSAV)
.BSS    000000    004   (RW,I,LCL,REL,CON,NOSAV)
DPURE   000200    005   (RW,I,LCL,REL,CON,NOSAV)
MIXED   000000    006   (RW,I,LCL,REL,CON,NOSAV)
ERRMES  000000    007   (RW,I,LCL,REL,CON,NOSAV)
IMPURE  000004    008   (RW,I,LCL,REL,CON,NOSAV)
IMPPAS  000000    009   (RW,I,LCL,REL,CON,NOSAV)
IMPLIN  000000    010   (RW,I,LCL,REL,CON,NOSAV)
SWTSEC  000000    011   (RW,I,LCL,REL,CON,NOSAV)
CNDSEC  000000    012   (RW,I,LCL,REL,CON,NOSAV)
CRFSEC  000000    013   (RW,I,LCL,REL,CON,NOSAV)
EDTSEC  000000    014   (RW,I,LCL,REL,CON,NOSAV)
LCTSEC  000000    015   (RW,I,LCL,REL,CON,NOSAV)
PSASEC  000000    016   (RW,I,LCL,REL,CON,NOSAV)
PSTSEC  000000    017   (RW,I,LCL,REL,CON,NOSAV)
ROLBAS  000000    018   (RW,I,LCL,REL,CON,NOSAV)
ROLSIZ  000000    019   (RW,I,LCL,REL,CON,NOSAV)
ROLTOP  000000    020   (RW,I,LCL,REL,CON,NOSAV)
XPCOR   000000    021   (RW,I,LCL,REL,CON,NOSAV)
