
Midas assembler=part 3

|Constant designators

svs,	sxa svx		|save word info
	tsx sav
	wrd
	fct
	psn
	fcn
	def
	rlc
	fcr
	fci
	tt
	ct
	qt
	bt
	rt
	syl
	tra .+1
svx,	tra .

lp,	stz syl
	tsx svs
lp1,	tsx sts
	tra rp1
	tra rp1
	load rt, tra rp
	tra rsw

|Evaluate constant syllable

rp1,	lda one		|word terminator
rp,	add (tra rr	|r. p.
	sto cox
	tsx evl
	tsx rss+1
	ado chc
	llr def
	lda pss
	sto def
	tze co8
	lac
	tze usc

c12,	ldx nco
	llr wrd
	tra co4

co2,	lax con		|search loop
	lpd
	trn co4
	tze co6
co4,	tix co2

|Define new constant

co1,	lda nco
	sto t2
	add mon
	sto nco
	ldx dpx
	com
	adx 0
	add (-con+trn-1
	trn sce
	ldx nco
	slx con+1
	tsx crk
	lda (opr
	ldx t1
co7,	cyr
	cyr
	tix co7
	sto t1		|mask
	tsx rck
	add t1
	anl+com-opr
	slr t1
	ldx t0		|crl addr
	llx crl
	ana
	add t1
	stx crl

c10,	ado nca
co5,	lda pss
	tze c22
	lda t2
	com
	llr (trn
	ldx cnl
	adx cor
	trn .+2
	lro
	lpd
	sto num
	slr t2
	tsx rck
	trn irc
	add t2
	trn c21
	lac
	trn rci
c21,	llr t2
	lal
	sto nmr
c22,	tsx uns
	tra svx
cox,	tra .

co8,	lac		|def on pass 1
	tze c10
	tra c12

co6,	xac		|check rel. agreement
	sto t2
	tsx crv
	llr wrd
	ldx t2
	com
	add rlc
	tze co5
	tra co4

crv,	sxa cx
	tsx crk
	lax crl
	ldx t1
cr4,	cyl		|calculate relocation
	cyl
	tix cr4
	tsx erk
cx,	tra .

crk,	sxa crx		|subr to reference crl
	lda t2
	com
	llr svn
	anp
	shr
	shr
	shr
	sto t0
	axo
	slr t1
crx,	tra .

|Pseudo-instruction constants

cns,	lda loc
	trn ilf
	ldx cnl
	xac
	add (-ncn-ncn-ncn+trn
	trn tmc
	llr rli
	lda pss
	tze cn1
	clc
	sto t2
	lar
	add loc
	com
	adx cor
	tze cn4
cld,	error alm, alh, flex cld

cn1,	lar
	add loc
	stx cor
	lda nca
	add aml
	sto aml
	lda nca
	add loc
	stx cor+1
cnd,	llx cor+1
	aux (3
	sxa cnl
	stz nca
	stz nco
cnb,	slr wrd
	move rli, syl
	load bs, tra rst
	tra b5

cn2,	sxa nco		|dump constants
	ldx t2
	llx con
	slr wrd
	tsx crv
	sto rlc
	tsx enc
	lda t2
	add mon
	sto t2
cn4,	ldx nco
	tix cn2
	lda loc
	ldx cnl
	stx cor+2
	lax cor
	cyl
	shr+com-opr	|kill reloc ind bit
	adx cor+1
	add aml
	sto aml
	lax cor+1
	com
	adx cor+2
	trn cnd
cad,	error alm, cnd, flex cad

|Pseudo-instruction variables

var,	lda loc
	trn ilf
	ldx vax
	aux (2
	xac
	add (-nvo-nvo
	trn va1

tmv,	error alm, alh, flex tmv

va1,	sxa vax
	lda pss
	tze va2
	lax vor-2
	com
	add loc
	tze va6
vld,	error alm, rst, flex vld

va2,	lda loc
	stx vor-2
	ldx low
	tra va5

va3,	aux (2
	lax low-3	|sym l
	com
	trn va5
	cyl
	trn va5
	lax low-2
	trn va5
	cyl
	trn .+2
	tra va5
	add rli
	cyr
	add (-add
	stx low-2	|sym r
	lax low-1
	add loc
	stx low-1	|value

va5,	tix va3
	ldx vax
	lda loc
	add vct
	stx vor-1

va6,	stz vct
	llx vor-1
	tra cnb

|Pseudo-instruction dimension

dim,	llr pss
	tplr itc
	tsx sts
	tra rsw
	tra rst
	load lt, tra di1
	load rt, tra di2
	tra rsw

di1,	lda syl
	tze ilf
	move2 sym, tsm
	tra rsw

di2,	tsx evl
	lda def
	tze usd
di3,	lda vct
	sto tvl
	add wrd
	sto vct
	lda tsm l
	sto sym l
	add (opr
	sto tsm l
	lda tsm r
	sto sym r
	add (add
	sto tsm r
	tsx es
	tze di4
mdd,	error alq, rsw, flex mdd

di4,	tsx vsm
	tra rsw

|Read block of characters from input tape

rfb,	tsx sav
	wcc
	wc1
	tra .+1
rf1,	stz wcc
	load wc1, sto flx-1
	init rfw, rfc
rfl,	load rfa, tra rfu

rfu,	cal 1
	tac+cyr-opr
	cyr
	cyr
	trn .+4
	cal
	r1c
	tra rf9
	lcc
	trn .-1
	lal
	add mon
	ldx (5
	cyl
	tix .-1
	tsx str
rf9,	alr
	add (-444444	|delete
	tze rfu
	tsx wch+1
	add (flx+nfw-40+trn
	trn rfv
	init rfw, rf2
rfv,	lac
	add (-404004
rfw,	tze .		|rfc or rf2
	add (-400404+404004
	tze rfc
	add (-440004+400404
	tze rfu
	add (-040000+440004
	tze rfu
	lcc
rfa,	xx		|add rfg or tra rfu
	tze rfs
	tra rfl

rfc,	llr (add rfg
	tra rfl+1

rfs,	ado rfa		|check for start
	add (-add-rfg-4
	trn rfu
	ldx (rf2
	tra rfl-1

rf2,	move wcc, rcl	|stop read
	move wc1, rce
	tsx uns
	tra rf1
	init rc8, flx-1
	stz rcc
	tra rcb+1

rfg,	char ls
	char lt
	char la
	char lr
	char lt

|Ignore to tab or carr ret

itt,	ldx (rst
	tra .+2
itc,	ldx (cfr
	sxa itx
	tra it3

it1,	add (-400404
	tze itx
	add (-404004+400404
itx,	tze .
it3,	tsx rch
	tra it1

|Error stop entries

ust,	lda mii
	tze usw
	error alu, tb4, flex usm

usw,	error alu, tb4, flex usw

wdu,	error alu, wd2+2, flex usw

usb,	error alu, b5, flex usl

usd,	error alu, di3, flex usd

usq,	error alu, rst, flex usp

uss,	error alu, s2, flex uss

usc,	error alu, c12, flex usc

use,	error alu, en3, flex use

usr,	error alu, rqb, flex usr

usk,	error alu, ckz, flex ust

usi,	error alu, iv2+3, flex usi

ich,	error alm, rr, flex ich

ilf,	error alm, itt, flex ilf

ile,	cal+com-opr
	slr wrd
	sto fsm
	error alm, en3, flex ile

ilx,	error alm, bs, flex ilx

ire,	error alm, rcr, flex ire

irb,	error alm, rcr, flex irl

irq,	error alm, rcr, flex irp

irw,	error alm, rcr, flex irw

irc,	error alm, rcr, flex irc

irx,	error alm, ts2, flex irx

mdt,	error alq, rsw, flex mdt

mdx,	error alq, exr, flex mdx

mdv,	error alq, es1, flex mdv

ipa,	error alm, itt, flex ipa

sce,	error alm, alh, flex sce

tmc,	error alm, alh, flex tmc

tmp,	error alm, alh, flex tmp

tme,	error alm, alh, flex tme

se,	stz loc
	sxa loc
	error alm, alh, flex iae

|Error identification routine

alq,	move2 sym, lus
	tra alu

alm,	stz lus r
alu,	llx 0
	slr alw
	slr sov
	lax 1
	llr (lda api r
ale,	slr al6
	type
	lda mii
	tze al0
	lda (001000
	pno
	lda mii
	tsx opt

al0,	tsx tb
	lda loc
	trn al1
	tsx opt
	lda rli
	tze al2
	lda (flex +r 
	pnt
	pno
	tra al2

al1,	llr ind
	lda ind+1
	tsx spt

al2,	tsx tb
	lda asm r
	llr asm l
	tze al6
	tsx spt
	lda aml
	tze al6
	trn al4
	lda (char r+
	tra al5

al4,	lda (char r-
al5,	pno
	lda aml
	com
	trn .-1
	tsx opt

al6,	xx		|lda api r or exit
	tze al9

al7,	tsx tb
	llr api l
	lda api r
	tsx spt
	lda lus r
	tze al8

als,	tsx tb
	llr lus l
	lda lus r
	tsx spt

al8,	lda (101001
	pno
	tac+cyr-opr
	trn alk
	clc
alh,	alr+hlt-opr
	clc
	sto pch
alw,	xx

al9,	lda lus r
	tze al8
	tsx tb
	tra als

alk,	llr (-20000
	ora
	tze alw
	tra alh+1

tb,	lda (100101
	pno
	trx

ind,	symbol 23, 30, 16, 0, 17, 20

|Octal print subroutine.

opt,	sxa opx
	load t3, -5
	alr
	lda opb
opd,	sto ope
opa,	lal
opb,	cyl
	cyl
	llr (-7
	anl 20
	axr
	tze .+3
	lda al5
	sto ope
	lax spl+1
ope,	xx		|cyl or pno
	ado t3
	tze opc
	trn opa
opx,	tra .

opc,	lda al5
	tra opd

|Symbol print routine.

spt,	sxa spy
	sto t3
	lac
	ldx one
spc,	sxa t0
	llr (-opr
	anc
	alo
	add (add spd
	sto spa

spq,	add (-add-spd-3
	tze spx
	ldx (-51
	lac

spr,	alr
spa,	xx
	tix .+1
	trn spr

spp,	lax spl+50
	tze .+2
	pno
	ado spa
	tra spq

spx,	ldx t0
	lda t3
	tix spc
spy,	tra .

spd,	3100
	50
one,	1

spl,	0
	char r0	char r1
	char r2	char r3
	char r4	char r5
	char r6	char r7
	char r8	char r9
	char ra	char rb
	char rc	char rd
	char re	char rf
	char rg	char rh
	char ri	char rj
	char rk	char rl
	char rm	char rn
	char ro	char rp
	char rq	char rr
	char rs	char rt
	char ru	char rv
	char rw	char rx
	char ry	char rz
	0	0

|Indicators and variable storage

pss,	0	|-0 = pass 1, +1 = pass 2
npa,	0	|-0 = begin pass, +1 = continue pass
pch,	0	|-0 = do not punch, +1 = punch if pass 2
inp,	0	|-0 = suppress input routine, +1 = punch input routine
tit,	0	|-0 = suppress title, +1 = punch title
ini,	0	|aux. input routine indicator
ino,	0	|input relocation
rlc,	0	|relocation count
rlp,	0	|relocatable program indicator
rli,	0	|relocation indicator
rlm,	0	|relocation bit mask
rlw,	0	|relocation word being formed
rim,	0	|-0 = read-in mode format, +0 = input routine format
pci,	0	|-0 = program card punched, +0 = card required
lus,	zero	|last undefined symbol
wrd,	0	|partial sum of syllable products
num,	0	|number = value of syllable.
dnm,	0	|decimal number
nmr,	0	|number relocation
fct,	0	|factor = product of syllables
fcr,	0	|factor relocation
fci,	0	|factor combination indicator
sym,	zero	|symbol = squoze for symbol.
fsm,	0	|flexo symbol = flexo word for symbol
def,	0	|-0 = indefinite word, +1 = definite
chc,	0	|count of characters in symbol
syl,	0	|-1 = at most one plus syllable, +0 = otherwise.
let,	0	|-1 = no letters in syllable, +0 = otherwise
api,	zero	|last psuedo-instruction for error stop
asm,	zero	|alarm symbol for relative location
aml,	0	|location relative to symbol in asm
nsm,	0	|(for establishing above symbolic relative
asa,	zero	|(location from location
amn,	0	|(assignment
cas,	0	|-0 = lower case, +1 = upper case
liu,	0	|-1 = no letters in uc, +0 at least one in uc.
nco,	0	|number of distinct constant values
nca,	0	|number of constants
vct,	0	|variable count = number of different variables
mii,	0	|macro instruction call indicator
mdi,	0	|define indicator
tsm,	zero	|symbol temporary
tvl,	0	|symbol value temporary
lch,	0	|last character read
rcc,	0	|current reader character
rcl,	0	|odd characters in reader last word
wcc,	0	|current writer character
wf1,	0	|temporary for wc1
wf2,	0	|temporary for word addressed by wc1
wf3,	0	|temporary for wcc
igi,	0	|ignore comma in argument indicator
dsk,	0	|macro define d. s. counter
dpx,	dsp	|macro call argument pointer pointer
arc,	0	|macro call argument pointer origin

cnl,	0	|constant pseudo-op counter
vax,	0	|variable pseudo-op counter
rqc,	0	|repeat count
rqp,	rqs-1	|next repeat origin
rqq,	rqs-1	|present repeat origin
sap,	pd1+1	|(pushdown list
sbp,	pd2+1	|(pointers

t,	0
t0,	0
t1,	0
t2,	0
t3,	0

mon,	-1

const

dsp|	dsv-1


ftp|	trn	0	trn	0
	313113	701007	212112	343443
	trn	0	111111	000000
	211311	344744	210012	343443
	0	0	0	0
	212012	303443	021300	322722
	200002	311113	000300	011711
	111112	444443	210213	344307

	trn	0	22	11
	311113	344443	313012	703443
	311311	344324	020002	111113
	000012	444443	300000	742111
	131111	445564	2	11
	313111	701000	213112	303443
	211112	340043	000300	000700
	111311	421124	trn	0

	300000	711111	trn	0
	300213	742007	trn	0
	111113	000007	trn	0
	111132	445562	trn	0
	111311	444744	trn	0
	120000	421111	trn	0
	311311	344300	trn	0
	211112	344525	trn	0

	211112	344443	trn	0
	313113	343443	trn	0
	211112	300743	trn	0
	211202	344743	trn	0
	131111	465544	trn	0
	120021	421124	trn	0
	111220	444231	trn	0
	211112	344443	trn	0

start add ps5
v