
Midas, part 2.

|Pseudo instructions octal, decimal, noinput, frontloading,
|readin, and relocatable

frl,	lda rlp
	trn ilf
	lda loc
	add (trn-21
	trn ilf
	load ino, -17755
	move thirty, loc
	slr org
	tra cfr

rdi,	sto rim
	lda rlp
	tze .+2
	trn cfr		|if reloc
	clc
	sto ini
	sto rlp
	tra cfr

oct,	llr (opr
	tra .+2

dec,	load n1, lad
	tra cfr

noi,	sto ini
	tsx pub
	tsx rst+1
	stz rim
	tra cfr

rel,	lda rlp
	tze re1
	load ino, -756
	lda mon
	sto rlp
	sto ini
re1,	ado x5
	add (-tvn-ntv+trn
	trn sce
	load bs, tra rst
	stz wrd
	stz pci
	stz rim
	lda one
	sto syl
	tra b5

|Pseudo-instruction entry

ent,	lda rli
	tze ilf
	add pci
	trn ilf
	load en6, tra rsw
	lxr
enz,	sxa en0		|set up pgm card
	load org, opr
	tsx sts
	tra en2
	tra en1
	load ts, sto loc+1
	slr srt
en0,	tra .

en1,	ldx qq9
	sxa enx
	sto pci
	lda chc
	tze pc1
	load en6, opr
en2,	lda syl
	tze ile
	lda let
	trn ile
	tsx evl
	trn use

en3,	move wrd, t1
	move rlc, t2
	lda pss
	tze enp
	tsx rck
	trn ire
enp,	move fsm, wrd
	stz rlc
	tsx enc
	move t1, wrd
	move t2, rlc
	lda loc
	add (trn-76
	trn tme
	tsx enc
en6,	xx		|tra rsw or opr
	stz rlc
	lda pss
	tze en8
	ldx x5
	lax 0		|lda tvn
en8,	sto wrd
	tsx enc

en9,	ldx pc
	sxa bs
	stz wrd
	lda one
	sto syl
	tra pun

enx,	tra .

enc,	sxa bs
	tra tb4

|Pseudo-instruction exit

exi,	lda rli
	tze ilf
	add pci
	trn ilf
	lda pci
	trn exa
	ldx .-1
pc,	sxa enx
	tsx enz
	load en6, opr
pc1,	ldx x5
	llx 0		|llr tvn
	slr t1
	move one, t2	|construct main program entry
	cal
	tra enp+1

exa,	tsx sts
	tra x0
	tra x1
	move exb, x4
exb,	tra rsw

x1,	load x4, lda loc
x0,	lda liu
	tze mdx
	llr loc
	slr tvl
	tsx ck
	tra ilx
	trn mdx
exr,	llr fsm
	slr wrd
	stz rlc
	tsx enc
x4,	xx		|tra rsw or lda loc
x5,	xx		|sto tvn
	move mon, pci
	tra rst

|Pseudo-instruction equals a, b: makes a same as b.

osn,	llr pss
	tplr itc
eq,	tsx sts
	tra osa
	tsx ilf
	tra rsw

osa,	lda syl
	tze ipa
	lda let
	trn ipa
	tsx sav
	sym l
	sym r
	tra .+1
osb,	tsx sts
	tsx ilf
	tra os1
	tra rsw

os1,	lda syl
	tze ipa
	lda let
	trn ipa
	tsx es
	tze usq
	xac
	sto t2
	tsx uns
	tra osb
	ldx t2
	lax low-1
	llr (opr
	ana
	add sym l
	sto tsm l
	lax low
	ana
	add sym r
	sto tsm r
	llr num
	tra qq4

|Pseudo-instruction repeat

rpt,	tsx svs
rqd,	tsx sts
	tra rqa
	tra rqa
	tsx rsw+1
	tra cfr

rqa,	tsx evl
	lda def
	trn usr
rqb,	tsx sav
	wc1
	wcc
	tra .+1
rpz,	move rqp, wc1
	stz wcc

rqr,	tsx rch
	tsx wch
	add sbp
	trn sce
	lac
	add (-404004
	tze rq1
	tra rqr

rq1,	tsx svr
	rcc
	rce
	rcl
	rex
	rc8
	rqc
	rqp
	rqq
	tra .+1
rq2,	move rqp, rqq
	move wc1, rce
	slr rqp
	move wcc, rcl
	init rex, rqt
	move wrd, rqc
	tsx rst+1
	tsx uns
	tra rpz
	tsx uns
	tra svx
	lda rqc
	trn rqx

rqt,	ldx rqc
	tix rq3
rqx,	tsx unr
	tra rq2
rqz,	tra cfr

rq3,	sxa rqc
	ldx rqq
	sxa rc8
	stz rcc
rqw,	tra rr

|Pseudo-instruction word

wd,	tsx sts
	tra wd2
	tra wd1
	tsx pub
	load bs, tra rsw
	slr wd3
	tsx rsw+1
	tra cfr

wd1,	load wd3, opr
wd2,	tsx evl
	trn wdu
	lda pss
	add pch
	add mon
	trn wd3
	lda wrd
	punch
wd3,	xx
	tra rst

|Pseudo-instruction character

ch,	tsx rch
	llr fxr
	add (-char lr
	tze ch1
	llr (opr
	add (char lr-char lm
	tze ch1
	llr fxl
	add (char lm-char ll
	tze ch1
	tsx ilf

ch1,	slr ch4
	tsx rch
	cyr
ch4,	xx
	sto num
	tra fxx

|Pseudo instruction flexo

fx,	stz num
	load t2, -2
	tsx rch
fxl,	cyl
	add num
fxr,	cyr
	sto num
	ado t2
	trn fxl-1

fxx,	ado chc
	tra rr

|Pseudo-instruction text

txt,	load bs, tra txq
	tsx rch
	com
	sto t2

txq,	stz wrd
	ldx (2

txw,	sxa t0
	tsx rch
	add t2
	tze txk
	ldx t0
	lal
	cyr
	tix .-1
	add wrd
	sto wrd
	ldx t0
	tix txw
	tra tb3

txk,	ldx qq9
	sxa bs
	ldx t0
	aux (-2
	tix tb3
	tra rst

|Pseudo-instruction print

pf,	lda (flex pnt
	llr (tra .+2
	tra ale
	tsx tb
pf0,	tsx rch
	com
	sto t2
pf1,	tsx rch
	add t2
	tze pf2
	tac+cyr-opr
	cyr
	trn pf1
	lar
	cyr
	pno
	tra pf1

pf2,	lda (101001
	pno
	tra rsw

|Pseudo-instruction start

sta,	tsx sts
	tsx ilf
	tra s
	tsx rsw+1
	tra cfr

s,	lda pss
	tze 1st
	tsx evl
	trn uss

s2,	move wrd, t3
	tsx pub
	load sov, tra np2
	hlt+cal 1-opr
	add pch
	trn s6
	feed 40
	lda (add
	add t3
	punch
	feed 100
	load sov, tra ps1

s6,	clc+xro-opr
	hlt+alo-opr
	tsx res
	tra ps1

1st,	load sov, tra np2
	hlt+cal 1-opr

|Begin new pass

ps2,	lda one		|restart begin pass 2
	sto pss
	sto pch
	sto tit
	llr ini
	slr inp

ps4,			|test begin pass 2
	tra np1

ps5,	tsx res		|initial entry here
ps3,			|symbol punch entry here
	load sov, tra ps2

s5,	clc+xro-opr
	sto pss
	hlt+alo-opr

ps1,	cal+com-opr	|start pass 1
	sto pss
	sto pch
	slr rim
	slr ino
	clear tvn, tvn+ntv-1
	move one, ini
	slr rlp

np1,	cal+com-opr	|begin pass
	stz nca
	sto nco
	stz vct
	stz mii
	stz mdi
	stz cnl
	stz vax
	stz asm l
	stz asm r
	sto rli
	stz gst+4
	stz gst+5
	load gst+3, 12
	move mon, pci
	move twenty, org
	slr loc
	load x5, sto tvn-1
	load n1, opr
	load sap, sto pd1+1
	load sbp, sto pd2+1

np2,	stz api l
	stz api r
	stz rlw
	stz igi
	lda (sto loc
	add rli
	sto srt
	sto ts
	sto tbc
	stz rcc
	load rc8, lda flx
	load rce, flx
	init rex, rfb
	load rlm, opr
	load dpx, dsp
	load rqp, rqs-1
	slr rqq
	load cfx, clc
	load cf9, tra cfm
	load rch, sxa rmx
	clc+lro-opr
	sto cas
	add pss
	add pch
	add tit
	add (-2
	trn pt2
	feed 40

|Print and punch title

pt2,	tsx rch
	add (373773
	tze pt2
	add (337773-373773
	tze pt2

pt5,	lac
	add (773773
	tze ptq

pt6,	add (377777
	tze ptr
	tac+cyr-opr
	cyr
	trn .+4
	lar
	cyr
	pno
	lda pss
	add pch
	add tit
	add (-2
	trn ptp

pt7,	lda lch
	tsx sqz
	lal+lro-opr
	axo
	lax ftp
	trn ptp
	p6h
	p6o
	lax ftp+1
	p6h
	p6h
	p6o
	p6s

ptp,	tsx rch
	tra pt5

ptq,	stz tit
	tra pt6

ptr,	stz tit

|Print pass 1 or pass 2

pps,	lda cas
	tze pp9
	lda (char r	|l. c.
	pno
pp9,	lda (flexo  -
	tsx pp3
	lda (flexo  pa
	tsx pp3
	lda (flexo ss 
	tsx pp3
	ldx pss
	lax pp4
	tsx pp3

|Punch input routine

	lda pss
	add pch
	add mon
	trn rst

pi3,	feed 40
	lda inp
	trn pi4
	load t2, 17756

pia,	lda t2
	add ino
	punch
	ldx t2
	lax 0
	llr forty
	ana
	tze pi2
	lda ino
pi2,	adx 0
	punch
	ado t2
	add (-17777
	trn pia

pi4,	lda inp
	tze rst
	lda (trn 17756
	add ino
	punch
	sto inp
	tra pi3

p3c,	p7h
	p7h
	p7o 40
	trx

pp3,	pnt
	pnt
	pno
	trx

pp4,	flexo 1
	flexo 2

|Pseudo-instruction define

dfn,	load cfx, tra df2
	lda mai
	com
	add low
	add (low+trn-5
	trn .+2
	tsx gc
	ldx mai
	clc
	stx 1
	stz dsk
	tra rsw

df2,	lda chc
	tze rr
	move2 sym,api
	tsx sav
	sym l
	sym r
	tra .+1
df3,	load cfx, tra df4
	tsx rsw+1
	tra cfr

df4,	lda lch
	add (-404004	|c. r.
	tze dmi
	add (404004-400404	|tab
	tze dmi
	add cas
	add (400404-044004	|comma
	tze dfc
	add (044004-000404	|slash
	tze dfs
	tra rsw

dfs,	tsx dfd
	ldx mai		|begin crs
	lda dsk
	stx 1
	tra rsw

dfc,	ldx .-1		|comma

dfd,	sxa dfx
	lda chc
	tze dfx
	ldx dsk		|write d s
	llr sym l
	slx dsm l
	llr sym r
	slx dsm r
	aux (2
	xac
	sto dsk
	add (-nds-nds+trn
	trn tmp
dfx,	tra .

dmi,	tsx dfd
	load cfx, clc
	move one, mdi	|end of dummy syms
	ldx mai
	lda dsk
	stx 2
	aux four
	xac
	sto wc1
	sto wf1
	stz wcc
	stz wf2
	stz wf3
	tra rsw

|Pseudo-instruction terminate

ter,	tra tsn
te5,	tsx uns
	tra df3
	move2 sym, tsm
	lda lch
	add (-004000
	tze te1
te2,	lda wf1
	axr
	llr wf2
	slx
	llr mai
	sto mai
	lcd+xro-opr
	com
	stx 3
	lda wf3
	stx 4
	tra qq4

te1,	load cfx, tra te3
	tra rsw

te3,	lda chc
	tze rsw
	load cfx, clc
	lda sym l
	llr tsm l
	lpd
	tze .+2
	tra tee
	lda sym r
	llr tsm r
	lpd
	tze te4
tee,	error alq, te4, flex mnd

te4,	move2 tsm, sym
	tra te2

|Macro call

mac,	lax low+1
	sto t0
	tsx ma0
	lda lch
	add (-004000
	tze mr1
	add (004000-404004
	tze mr2
	add (404004-400404
	tze mr2
	tra .+2

mr1,	tsx rch
	tsx mas

mr2,	ldx t0
	llx 2		|end arg
	slr t2
	lax 1		|origin crs
	trn .+2
	alr
	slr t1

mrc,	ldx dpa		|clear unspecified args
	xcc
	add dpx
	add t1
	trn mrg
	tsx maa
	tra mrc

mrg,	xcc
	add dpx
	add t2
	trn mrs

gs,	ldx (2		|generate crs
	lda one

gsl,	adx gst+3
	stx gst+3
	add (-44+trn
	trn gsc
	cla
	tix gsl
	init gsg, gst

gsg,	ldx
	lax spl+1
	cyl
	cyl
	tsx wch
	add (dsv+nac
	trn sce
	ado gsg
	add (-ldx-gst-5
	trn gsg
	tsx maa
	tra mrg

gsc,	cla
	stx gst+3
	lda one
	tix gsl
	tra tmp

gst,	repeat 6, 0

mrs,	ado mii
	tsx uns
	tra ma8
	tsx svr
	dpx
	arc
	rcc
	rce
	rcl
	rex
	rc8
	rch
	tra .+1
mr9,	move dpx, arc
	move dpa, dpx
	ldx t0
	lax 3
	xad
	sto rce
	lax 4
	sto rcl
	stz rcc
	xac
	add (lda 4
	sto rc8
	init rex, mat
	load rch, tra rm
	tra rr

mat,	tsx unr
	tra mr9
	lda mii
	add mon
	sto mii
	tra rr

|Write arguments subroutine

ma0,	sxa mxy
	tsx sav
	wc1
	wcc
	rmx		|save exit for irp
	tra .+1
ma8,	ldx dpx
	sxa dpa
	lax 0
	sto wc1
	stz wcc
	stz ati
mxy,	tra .

mas,	sxa mxx		|argument scan
	llr lch
	lda lch
	tra ma5

mal,	tsx rch		|get arguments
ma5,	add (-444004
	tze ma2
	add cas
	add (444004-440441	|9
	tze mae
	add (440440-044044	|6
	tze mad
	lda igi
	tze ma1

maw,	stz wf1
ma3,	tsx wch-1
	add (con
	add nco
	trn sce
	sto ati
	tra mal

ma2,	tsx csx		|upper case
	tra ma3

ma1,	lac
	add (-404004	|c.r.
	tze maz
	add (404004-400404	|tab
	tze maz
	add (400404-044004	|comma
	add cas
	tze mab
	tra maw

mae,	lda mon		|9
	add igi
	sto igi
	tze ma4
	tra maw

mad,	ado igi		|6
	add mon
	tze ma4
	tra maw

ma4,	lda one
	sto ati
	lda wf1
	tze mal
	tsx rch
	add (-444404
	tze .+3
	lac
	tra ma5
	tsx csu
	tra mal

mab,	ldx .-1		|comma

maa,	sxa max		|terminate argument
	stz ati
	ldx dpa
	llr wc1
	slx 2
	lda wcc
	cyr
	cyr
	lad
	stx 1
	aux (2
	xac
	sto dpa
	com
	add sap
	trn tmp
	stz wcc
max,	tra .

maz,	tsx maa		|end of arguments
mxx,	tra .

ati,	0
dpa,	0

|Indefinite repeat

ir,	tra tsn		|not in macro call
ir1,	tsx rcb		|read irp arg dsn
	add (-444444
	tze ir2
	tra ir1

ir2,	tsx svr
	ip8
	ipc
	ipo
	ipl
	ipn
	ir5
	dpx
	tra .+1
ir6,	llr (tra ir4
	tsx rma		|set to read arg
	lda rmh
	sto ipn
	add one
	sto ir5
	tsx ma0		|set to write args
	sxa ipo
	tsx rch
	tsx mas		|write arguments
	tra mal

ir4,	lda ati
	tze .+2
	tsx maa
	ldx dpa
	sxa dpx
	xcc
	sto ipl
	tsx uns
	tra ma8
	tsx svr
ipn,	0
ir5,	0
	tra .+1
ir8,	move rc8, ip8
	move rcc, ipc

ir7,	move ip8, rc8
	move ipc, rcc
	ldx ipo		|substitute substring for arg
	lax 0
	llx 1
	ldx ipn
	stx 0
	slx 1
	tra rm1

ipe,	tra tsn
ip1,	ado ipo		|endirp
	ado ipo
	add ipl
	add one
	trn ir7
	tsx unr
	tra ir8
	tsx unr		|restore argument
	tra ir6
	tra rm1

ip8,	0		|reader switches
ipc,	0
ipo,	0		|substring pointer
ipl,	0		|pointer limit

|Read characters for macro call

rm,	sxa rmx
rm1,	tsx rcb
	add (-444444	|arg indicator
	tze rmg

rm2,	tac+cyr-opr
	com+cyr-opr
	trn .+4
	lar
	cyr
	prt
	lac
rmx,	tra .

rmg,	llr .+2
	tsx rma
	tra rm1

rma,	sxa rmb		|set to read argument
	slr rmc
	tsx rcb
	tsx sqz
	tze ip1
	add mon
	tze ir1
	cyl
	add arc
	add (lda-2
	sto rmh
	tsx svr
	rcc
	rce
	rcl
	rex
	rc8
	tra .+1
rmh,	xx		|lda dsp
	add (lda-sto
	sto rc8
	ldx rmh
	lax 1
	llr (opr
	anp
	sto rce
	lal
	cyl
	sto rcl
	stz rcc
	init rex, rmk
rmb,	tra .

rmk,	tsx unr
	tra rmh
rmc,	tra .

|Read and write characters from table

rch,	sxa rmx
	tsx rcb
	tra rm2

rcb,	sxa rcx
	ldx rcc
	tix rc8
	ldx (2
	ado rc8
	com
	add (lda-sto
	add rce		|endcheck
	tze rcn
rex,	trn .		|empty exit

rc8,	xx		|lda table
	sxa rcc
	cyr
	cyl
	tix .-1
	llr (444444
	ano 20
	sto lch
	add (-444004
	tze rcu
	add (444004-444404
	tze rcd
	lac
rcx,	tra .

rcu,	lda one
rcd,	sto cas
	tra rcx-1

rcn,	lda rcl
	add (-2
	com
	axr
	tra rc8

	lda lch
wch,	alo
	sxa wcx
	ldx wcc
	tix wc2
	ado wc1
	cla
wc1,	xx		|sto table
	ldx (2
wc2,	sxa wcc
	lal
	ldx wc1
	adx 0
	cyr
	stx 0
	xcc
wcx,	tra .

|Stretch and squeeze

str,	sxa stu
	ldx (-4
st1,	alo
	lax stt+4
	cry
	cyr
	tix st1
	cyl
	llr (222222
	ana-10
stu,	tra .

stt,	177700
	17740
	1760
	170
	14


sqz,	sxa sqx
	cyl
	ldx (-4
sq1,	alo
	lax sqt+4
	cry
	tix sq1
	cll+alr-opr
sqx,	tra .

sqt,	666660
	666660
	666740
	666000
	666000

|Save and unsave

sav,	sxa sa1
	ldx (sap
	tra sae

svr,	sxa sa1
	ldx (sbp
sae,	sxa sal
	sxa saf

sal,	lda
	add mon
saf,	sto
sa1,	llr		|get addr
	ial+xro-opr
	trn sa3
	lax 0		|get datum
	lxr
	stx 0		|sto pdl
	ado sa1
	tra sal

sa3,	lxr
	stx 0
	lda dpx
	com
	add sap
	trn sce
	lda rqp
	com
	add sbp
	trn sce
	trx 0


uns,	llr (sap
	tra .+2
unr,	llr (sbp
	lax 0
	aux one
	sxa unx
	com+lxr-opr
	sxa unb
	sxa unc
unb,	ldx
	adx 0
	tze un1
	tsx se
un1,	lax 0		|get addr
	add (lda-tra-1
	sto una

unl,	ldx una
	tix .+1
	sxa una
unc,	ado
	axr
	llx		|get datum
una,	lda		|get addr
unx,	trn .
	axr
	slx
	tra unl

start
