
Macro ii-a=part 2.

|Psuedo instruction define

dfn,	add mii
	trn ilf
	clc
	sto mdi
	add (trn ilf
	sto qt
	sto ct
	add (df1-ilf
	sto tt
	add (df2-df1
	sto bt
	cla
	add psi
	sto dm3
	add one
	sto dm1
	add one
	sto dm2
	add (-sto-psi-nmi-nmi-nmi+1
	com
	trn tmm
	llr loc
	slr tlo
	clc
	sto loc
	sto asi
	tra rnw

df1,	add syl
	add chc
	trn r
	clc
	tra ilf

df2,	add syl
	add chc
	trn itt
	clc
	tra ilf


|Pseudo instruction terminate

ter,	add mii
	com
	trn ilf
	add tlo
	sto loc
	clc
	sto asi
	add one
	sto mii
	clad psi
	add (3
	sto psi
	call sco
	call sco
	call sco
	call sco

te7,	llr sc3
	slr te9
	clad scw
	tra .+2

te8,	lal
	ala
	add scn
	add one
	sto scn
	trn te8
	lac

te9,	xx
	tra rst


|Define macro instruction

dmi,	llr sym
	lcc

dm3,	xx
	llr syn
	lcc
dm1,	xx
	cla
	sto liu
	sto syl
	sto sym
	add mai
	sto sc3
	add one
	sto mai
	add (add-1
dm2,	xx
	clc
	sto mii
	llr one
	slr mdi
	load scn, -22
	load dsk, -add-dsm
	cal
	add (slr dsp
	tra dm4+2

dm4,	xx
	add (slr dsp+nds
	sto dm4
	add (-slr-dsp-nds+1
	trn dm4
	slr scw
	load ddx, tra rnw
	load ct, trn pd1
	load tt, tra pds
	llr t
	tra cfc

|Pick up dummy symbols

pds,	load ddx, tra rst
	clc
	add chc
	trn rst
	clc

pd1,	add syl
	com
	trn ids
	add let
	com
	trn ids
	add liu
	com
	trn ids

pd2,	add sym
	tra .+2

|Define new dummy symbol

dd,	slr ddx
	ala
	add dsk
	add mon
	sto dsk
	com
	add (-add
	sto dd1
	com
	add (sto dsm+nds
	trn tmp
	lcc

dd1,	xx
	cla
	add dd1
	add (-dsm+1
ddx,	xx

|Search for dummy symbol

sds,	slr sdx
	load sd1, add dsm
	ala
	add sdx
	add one
	sto sdy

sd2,	lac
sd1,	xx
	trn sd4

sd3,	clad sd1
	add one
	sto sd1
	add dsk
	trn sd2
	clc
sdx,	xx

sd4,	add one
	trn sd3
	add sd1
	add (-add-dsm
sdy,	xx


|Macro instruction storage word

sw,	add chc
	add syl
	trn rnw
	call evl
	add pss
	trn sw2
	clad def
	trn usm

sw2,	llr (tra rnw

mw,	slr tea
	clc
	add loc
	add mon
	sto loc
	clad aml
	add one
	sto aml
	subr ss, mca

|Macro instruction constant

rp5,	add pss
	trn rp7
	clad def
	trn rp8

rp7,	llr (tra rp3

mc,	slr tea
	cla
	sto num
	call ss
	call sco
	call sco

mca,	subr scz, sma

rp8,	add (flex usc
	subr alu, rp7
m
|Dummy symbol assignment

da,	add syl
	com
	trn ipa
	add liu
	com
	trn ipa
	add sym
	sto t3
	cla
	add (trn ilf
	sto bt
	sto qt
	sto ct
	add (da1-ilf
	sto tt
	tra rnw


da1,	add chc
	add syl
	trn rnw
	call evl
	add pss
	trn da3
	clad def
	trn usd

da3,	clad t3
	call sds
	tra dab
	llr (400000
	lpd

da5,	alr
	cll
	add (sto dsp-1
	sto day
	clad wrd

day,	xx
	lac
	llr (tra rst

mp,	slr tea
	sto t3
	call ss
	call sco
	call sco
	call sco
	call scz
	add t3
	tra sm-1

dab,	add t3
	subr dd, da5

|Macro instruction

mac,	llr sp7
	slr amx
	cla
	sto tcn
	add dsk
	sto dsl
	cla
	add (trn ilf
	sto bt
	sto qt
	add (rnw-ilf
	sto ae6
	add (aev-rnw
	sto tt
	add (ae1-aev
	sto ct
	load ma1, slr dsv
	slr ae4
	llr loc
	lcc
	ala

ma1,	xx
	cal
	add ma1
	add one
	sto ma1
	add (-slr-dsv-nds+1
	trn ma1
	llr t
	tra cfc

|Evaluate macro instruction arguments

aev,	load ae6, tra am
ae1,	call evl
	add pss
	trn ae3
	clad def
	trn usp

ae3,	clad ae4
	add one
	sto ae4
	add (dss-dsv-slr
	sto ae5
	sto ae9
	com
	add (sto dss+nds
	trn tmp
	llr wrd

ae4,	xx		|slr dsv
	clad dsi
	trn ae5
	add mii
	trn ae7
	clc
ae5,	xx		|sto dss
ae6,	xx		|exit

ae7,	cal
	call dd

ae9,	xx
	llr ae6
	tra mp

|Assemble M-I into program

am,	add one
	sto def
ami,	cla
	sto wrd
am1,	add (tra aw
	call tc
	add (tra as
	call tc
	add (tra ac
	call tc
	add (tra aa
	call tc

am5,	add dsl
	sto dsk
	load bs, tra rnw
	tra rst

aw,	clad wrd

amx,	xx		|add mai table
	sto wrd
	clad amx
	add one
	sto amx
	clad mii
	trn awm
	add (trn ami-1
	sto bs
	tra tb3

awm,	subr mw, ami

|Assemble argument into macro instruction word

as,	add amx
	sto as1
	add one
	sto amx
	cla
as1,	xx
	alc
	sto t1
as0,	lac
	sto t2
	clr
	add (000377
	cyr
	trn .-1

as9,	cll+amz-opr
	trn am1

as2,	cyr
	ala
	add mii
	trn tds
	lac
	cll
	add (add dsv-1
	sto as5
	lac
	clr
	trn as3
	add (opr
	trn as4

as3,	add (com-400000
as4,	sto as6
	cla
as5,	xx		|get dum sym

as6,	xx		|sign op
	add wrd
	sto wrd

as7,	llr t1
	lcc
	trn am1
	sto t1
	add t2
	tra as9


|Assemble macro instruction constant

ac,	add amx
	sto ac1
	add one
	sto amx
	cla
ac1,	xx
	add wrd
	sto wrd
	clad mii
	trn acm
	call co
	llr num
	slr wrd
	tra am1

acm,	subr mc, ami

|Assemble macro instruction assignment

aa,	add amx
	sto aa2
	add one
	sto amx
	cla
aa2,	xx
	alr
	cll
	add (sto dsv-1
	sto aa3
	clad wrd

aa3,	xx
	clad mii
	trn ta
	tra ami


|Translate dummy symbol assignment

ta,	clad dsi
	trn ta6
	lac
	trn ta2
	add (sto dss-1
	sto ta4
	cal
	call dd

ta4,	xx
	subr mp, ami

ta2,	add (add dss-1-400000
	sto ta4
	cla
	tra ta4

ta6,	lac
	cll
	add (sto dss-1
	sto ta7
	clc
ta7,	xx
	tra ami

|Translate dummy symbol specification

tds,	lac
	clr
	sto tda
	trn td1
	add (opr
	tra td2

td1,	add (com-400000
td2,	sto td4
	lac
	cll
	add (add dsv-1
	sto td3
	add (dss-dsv
	sto td5
	cla
td3,	xx		|get dum sym val
td4,	xx		|sign op
	add wrd
	sto wrd
	cla
td5,	xx		|get spec
	trn as7
	ala
	add tda
	lpd
	subr prs, as7

|Store dummy symbol specification

ss,	slr ssx
	clad dsn
	trn ssx
	call sco
	call scz
	clc
	sto dsn
	add dse
	llr ssx
	tra sm

ssx,	xx

|Store word in macro instruction list

sma,	add wrd
	llr tea

sm,	slr smx
	ala
	add mai
	sto sm1
	add one
	sto mai
	lac
sm1,	xx
	llr pss
	lcc
	trn sm2
	add mai
	add (add
	com
	sto hih
	add low
	trn sce
sm2,	clc
smx,	xx

|Store code bit

sco,	slr scx
	llr (400000
	tra sc1

scz,	slr scx
	cal

sc1,	cla
	add scn
	add one
	trn sc4
	cla
	add scw
sc3,	xx
	lal
	sto scw
	cal
	call sm

sc2,	add sm1
	sto sc3
	load scn, -21
	tra scx-1

sc4,	sto scn
	lac
	add scw
	cyl
	sto scw
	cla
scx,	xx

|Test code bit

tc,	sto tcy
	slr tcx
	clad tcn
	add one
	trn tc3

tc1,	clad amx
	sto tc2
	add one
	sto amx
	load tcn, -21
	cla

tc2,	xx
	tra tc5

tc3,	sto tcn
	llr tcc
	lal

tc5,	sto tcc
	trn tc4
	clc
tcy,	xx		|zero exit to subroutine

tc4,	clc
tcx,	xx		|one exit, return to am.

|Set to pick up constant value

ca,	add cas
ct,	trn c
	ala
	add cni
	com+lad-opr
	trn ilf
	call evl
	add pss
	trn lp3
	clad def

lp3,	sto tdf
	llr wrd
	slr twd
	cla
	sto wrd
	add one
	sto def
	sto syl
	sto cni
	llr tt
	slr t4
	llr ct
	slr t5
	add (trn rp1-1
	sto tt
	add mon
	sto ct
	tra sp

|Save constant and reset

d,	add cas
	trn rl
	clad cni
	trn ilf

rp,	add one
rp1,	add (tra rp4+1
	sto rp4
	llr t4
	slr tt
	llr t5
	slr ct
	call evl
	add mii
	trn rp5
	llr (tra rp3

co,	slr cox
	clad one
	add nca
	sto nca
	clad pss
	trn co8
	clad def
	trn usc
	clad con
	llr wrd
	tra co9

co2,	lcc
co3,	xx
	trn co6

co4,	clad co3
	add one

co9,	sto co3
	add nco
	trn co2

	llr co3
	lcc
	sto nco
	add mon
	sto hih
	add low
	trn sce
	lac
	add (slr-add
	sto co5
	llr wrd
co5,	xx
	tra .+3

co6,	add one
	trn co4
	llr con
	lcc

co7,	add co3
	xx		|add cor table
	trn .+2

co8,	sto num
	cla
cox,	xx

rp3,	add tdf
	sto def
	cla
	sto liu
	sto chc
	sto let
	sto dsi
	add twd
	sto wrd
	clc
	sto cni
	sto dsn
	add (opr
	sto sgn
	clc
rp4,	xx
	tra tt
	tra ct
	tra r

|Psuedo-instruction constants

cns,	add mii
	trn ilf
	llr loc
	lcc

cn6,	xx		|sto cor table (first entry)
	sto tlo
	clad nca
	add aml
	sto aml
	clad pss
	trn cn5
	load bs, tra cn4
	clad con
	tra cn8

cn2,	cla
cn3,	xx		|add constants list
	sto wrd
	tra tb4

cn4,	clad cn3
	add one

cn8,	sto cn3
	add nco
	trn cn2

cn5,	llr loc
	lcc

cn7,	xx		|sto cor table (second entry)
	clad tlo
	add nca
	sto wrd
	load bs, tra cn1
	tra ba1

cn1,	add sv
	sto bs
	cla
	sto nca
	add cor
	com
	add one
	sto nco
	cla
	add cn6
	add (2
	sto cn6
	add one
	sto cn7
	add (add-1
	sto co7+1
	add (-add-cor-ncn-ncn+1
	trn rnw
	add (flex tmc-1
	subr alm, alh

|Ignore to tab or carr ret

it1,	cyr
	add (577575
	trn it2
	add (776177
	trn it2
itt,	subr rch, it1

it2,	add one
	trn itt
	tra rst

|Error stop entries

ust,	add (flex usw
	subr alu, tb3

usb,	add (flex usl
	subr alu, bnp

usq,	add (flex usp
	subr alu, q1

uss,	add (flex uss
	subr alu, s2

usm,	add (flex usm
	subr alu, sw2

usp,	add (flex usa
	subr alu, ae3

usc,	cla
	sto wrd
	add (flex usc
	subr alu, co8

i,	add (flex ich
	subr alm, r

ilf,	clad (flex ilf
	subr alm, itt

ipi,	add (flex ipi
	subr alm, itt

mdt,	clad (flex mdt
	subr alm, rnw

usd,	add (flex usd
	subr alu, da3

ids,	lro
	slr sym
	subr alm, pd2

mdm,	add (flex mdm
	subr alm, dmi

ipa,	clad (flex ipa
	subr alm, itt

sce,	clad (flex sce
	subr alm, alh

tmp,	add (flex tmp
	subr alm, alh

tmm,	clad (flex tmm
	subr alm, alh

uds,	llr sym
	slr r2
	add (flex uds
	llr ex

|Error identification routine

alu,	slr aly
	tra alb

alm,	slr aly
	lro
	slr r2

alb,	type
	add tb
	pna
	add loc
	com
	trn al1
	subr opt, al2

al1,	cla
	print flex ind

al2,	add tb
	pna
	add asi
	trn al6
	add asm
	trn al3
	amz
	trn al6

al3,	pnt
	pnt
	pnc
	add aml
	trn al4
	ala
	add (char r+
	tra al5

al4,	com
	amz
	trn al6
	ala
	add (char r-

al5,	pna
	lac
	call opt

al6,	clad api
	trn al7
	amz
	trn al9

al7,	ala
	add tb
	pnt
	lac
	type
	add syn
	type
	add r2
	trn .+3
	amz
	trn al8
als,	clad tb
	pna
	add r2
	type

al8,	add cr
	pnc
	tra rsq

aly,	xx

al9,	clad r2
	trn .+3
	amz
	trn al8
	clad tb
	pna
	tra als

|Indicators and variable storage

pss,	0	|-0 = pass 1, +1 = pass 2
hih,	0	|upper limit of macro instruction and constant list
nfc,	0	|test word for end of flexo word list
r2,	0	|last undefined symbol
fwd,	0	|flexo word from input tape
fwb,	0	|flexo word from list
wrd,	0	|partial sum of syllables of word
num,	0	|number = value of syllable.
sym,	0	|symbol = flexo word for symbol.
def,	0	|-0 = indefinite word, +1 = definite
chc,	0	|character count of characters in syllable
syl,	0	|0 = at most one plus syllable, +1 = otherwise.
let,	0	|0 = no letters in syllable, -0 = at least one letter
api,	0	|last psuedo-instruction for error stop
asi,	0	|relative location: +0 = yes, -1 = no
asm,	0	|alarm symbol for relative location
aml,	0	|location relative to above symbol
nsm,	0	|for establishing above symbolic relative
asa,	0	|location from location
amn,	0	|assignment
cas,	0	|-0 = lower case, +1 = upper case
liu,	0	|+0 = no letters in uc, -0 at least one in uc.
cni,	0	|constant syllable indicator
con,	0	|current address in constant list
nco,	0	|number of distinct constant values
nca,	0	|number of constants
twd,	0	|word   )
tdf,	0	|define ) temporary.
tlo,	0	|temporary for current location
mii,	0	|macro instruction mode indicator
mdi,	0	|define indicator
syn,	0	|second three characs of M-I name
spz,	0	|psuedo instruction switch
tea,	0	|
dsi,	0	|dummy symbol indicator
dsn,	0	|dummy symbol odd-even indicator
dse,	0	|dummy symbol temporary
scn,	0	|temporaries
scw,	0	|for code
tcn,	0	|word
tcc,	0	|subroutines
dsk,	0	|dummy symbol count
dsl,	0	|temporary for dum sym count
wsa,	0	|dummy symb sgn indicator
tda,	0	|translator temporary

t,	0	t1,	0	|temporary
t2,	0	t3,	0	|registers
t4,	0	t5,	0	|

mon,	-1
one,	1
tb,	char r	
cr,	char r


constants

psi|		sto psi+npi+npi+npi+1

	576327	357577	trn sta
	245577	377157	trn oct
	723347	554237	trn dec
	566527	115757	trn fx
	564237	723057	trn ch
	542377	560137	trn noi
	723707	754637	trn dfn
	637357	620577	trn ter
	502677	576327	trn cns

mai|	sto mil+1
| Initial symbol table

dsm-nsy-nsy|

ist,
		-flex opr	600000
		-flex cll		631000
		-flex clr		632000
		-flex cla		700000
		-flex clc		700040
		-flex lro		600200
		-flex xro		600001
		-flex cal		700200
		-flex cax		700001
		-flex alr		640200
		-flex alo		640220
		-flex alc		640260
		-flex axr		640001
		-flex axo		640021
		-flex axc		640061
		-flex xlr		600300
		-flex lac		700022
		-flex lcc	700062
		-flex xac		700120
		-flex xcc		700160
		-flex cyl		640030
		-flex cyr		600600
		-flex shr		600400
		-flex lal		700012
		-flex lar		700622
		-flex xal		700110
		-flex all		640230
		-flex alx		640031
		-flex ixl		600303
		-flex lad		600032
		-flex xad		600130
		-flex iad		640232
		-flex anl		640207
		-flex ano		740207
		-flex ana		740027
		-flex orl		640205
		-flex oro		740205
		-flex ora		740025
		-flex rxa		700322
		-flex rax		640203
		-flex lcd		600072
		-flex xcd		600170
		-flex com		600040
		-flex lpd		600022
		-flex cry		600012
		-flex tac		701000
		-flex tbr		702020
		-flex pen		603000
		-flex rpf		706020
		-flex cpf		607000
		-flex cpy		620000
		-flex r1c		721000
		-flex r3c		723000
		-flex dis		622000
		-flex dso		662020

	flex lax		360000
		-flex tlv		540000
		-flex tpl		560000

		-flex ial		740222

		-flex prt		624000
		-flex pnt		624600
		-flex pno		664020
		-flex p6h		626600
		-flex p7h		627600
		-flex p6s		726000
		-flex p6b		766020
		-flex hlt		630000
		-flex typ		625000
		-flex p6o		666020
		-flex p7o		667020
		-flex add		200000
		-flex ado		60000
		-flex adx		220000
		-flex amz		640050
		-flex arx		640601
		-flex aux		260000
		-flex bsr		604000
		-flex laz		700072
		-flex ldx		240000
		-flex llr		300000
		-flex llx		320000
		-flex lxr		600003
		-flex r1r		721600
		-flex rds		604004
		-flex rew		604010
		-flex slr		100000
		-flex slx		120000
		-flex spf		647000
		-flex sto		0
		-flex stx		20000
		-flex sxa		40000
		-flex tix		460000
		-flex tra		500000
		-flex trn		400000
		-flex trx		520000
		-flex tsx		440000
		-flex tze		420000
		-flex wrs		604014
		-flex stz		140000
		-flex lda		340000


start
3