                                                                                                    harmony compiler	phase 2  _   10/31/62

0/

start
          
                                                                                                                                                                                                                                                                                                                                                                                                                  macros  _ 1/6/62  (as amended by Acts of 1/15/62, 4/5/62, and 4/30/62)

/further amended 10/20/62

	define	load A	lac A	termin

	define	store A	dac A	termin

	define	addi A	add A	termin

	define	goto T	jmp T	termin

	define	govia P	jmp i P	termin

	define	subt A	sub A	termin

	define	zero A	dzm A	termin

	define	step1 J	idx J	termin

	define	call S	jda S	termin

	define	band U	and U	termin

	define	halt	hlt	termin

	define	clear	cla	termin

	define	comple	cma	termin

	define	x2to1	ral 1s	termin

	define	x2to6	ral 6s	termin

	define	x2to3	ral 3s	termin

	define	x2to2	ral 2s	termin

	define	x2to10	rar 8s	termin

	define	x2to12	rar 6s	termin

	define	halve	sar 1s	termin

	define	x2tom3	sar 3s	termin

	define	x2tom4	sar 4s	termin

	define	x2tom6	sar 6s	termin

	define	x2tom7	sar 7s	termin

	define	exit P	jmp	termin

	define	move A,B	lac A	dac B	termin

	define	sett A,B	lac (B	dac A	termin

	define	trze T	sza i	jmp T	termin
                     
                                                  
	define	trnz T	sza	jmp T	termin

	define	trpl T	sma	jmp T	termin

	define	trmi T	spa	jmp T	termin

	define	trel A,T	sad A	jmp T	termin

	define	trnl A,T	sas A	jmp T	termin

	define	type Q	lio Q	tyo	termin

	define	ftrel A,T	trel A,T	termin

	define	lookup V
		add (V	dap .+1	lac	termin

	define	feed N	law i N	jda fee	termin

	define	step J, I
		lac J	add I	dac J	termin

	define	stepa J, I
		law I	add J	dac J	termin

	define	istepa J, I
		law i I	add J	dac J	termin

	define	grow A, V, C
		lac A	add (V	dac C	termin

	define	tles C, T
		sub C	spa	jmp T	termin

	define	tlesc C, T
		sub (C	spa	jmp T	termin

	define	tgrel C, T
		sub C	sma	jmp T	termin

	define	tgrec C, T
		sub (C	sma+sza-skp	jmp T	termin

	define	test0 Y, Z
		lac Y	sza i	jmp Z	termin

	define	test1 Y, Z
		lac Y	sza	jmp Z	termin

	define	testp Y, Z
		lac Y	sma	jmp Z	termin

	define	testm Y, Z
		lac Y	spa	jmp Z	termin
                    
                                                 
	define	testel Y, Z, A
		lac Y	sad Z	jmp A	termin

	define	testnl Y, Z, A
		lac Y	sas Z	jmp A	termin

	define	dispat U
		add (U	dap .+1	jmp i	termin

	define	diswit L, U
		add (U	dap .+2	lac L	jmp i	termin

	define	putback U, Q
		add (U	dap .+2	lac Q	dac	termin

	define	answer X
		0	dap X	lac .-2	termin

	define	x10dec
		ral 1s	dac t1	ral 2s	add t1	termin

	define	copy H, I, N
		law H	dap .+3	law I	dap .+2
		lac	dac	idx .-2	idx .-2
		sas (dac I+N	jmp .-5	termin

	define	search W, N, ERR
		dac t1	law W	dap .+2	lac t1
		sad	jmp .+5	idx .-2	sas (sad W+N
		jmp .-5	jmp ERR	lac .-6	add (-sad-W
		termin

	define	print F
		lac F
		repeat 3	rcl 6s	tyo
		termin

start
                                   
            
          
                                                                                                                                                                                                                                                                                                                                                                                         /machine lang. subroutines

	em=377745


rb,	0
	dap rbx
	rpb
	rcr 9s
	rcr 9s
rbx,	jmp


fla,	0
	dap flx
	lac fa
	add (dio
	jda ppp
	lac la
	add (dio
	jda ppp
	lac fa
	add la
	add (dio+dio
	dac ckm
flx,	jmp


csm,	0
	lio ckm
	jmp pbp


ipu,	0
	lio (jmp 7751
	jmp pbp


fee,	0
	dap fex
	cli
	lat
	and (700
	sad (700
	jmp fex
	ppa
	isp fee
	jmp .-2
fex,	jmp


               
                                                 
ppp,	0
	lio ppp
pbp,	dap pbx
	lat
	and (700
	sad (700
	jmp pbx
	ppb
	ril 6s
	ppb
	ril 6s
	ppb
pbx,	jmp


jbk,	0
	lio (jmp 100
	jmp pbp


tsw,	0
	dap .+2
	lat
	jmp


start
                  
   
        
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      /read in, setup, countdown+refill, merge, punch store


/read in


ph2,
yea,	zero npt
	zero nn
	zero nb
	sett mc, -1

h1,	halt
	move nn, nn1
	zero nn2

r1,	call rb
	store n1
	zero ckm

r2,	call rb
	store t2
	addi ckm
	store ckm
	load nn
	putback not, t2
	step1 nn2
	step1 nn
	addi nb
	tgrec all, rr
	testnl nn2, n1, r2
	call rb
	trel ckm, r3
	move nn1, nn

r2b,	print (flexo cs

	goto h1
          
                                                                
r3,	move nb, nb1
	call rb
	store n1
	zero ckm
	zero nn2

r2a,	call rb
	store t2
	addi ckm
	store ckm
	load t2
	addi nn1
	store t2
	load nb
	complement
	putback bar, t2
	step1 nn2
	step1 nb
	addi nn
	tgrec all, rr
	testnl nn2, n1, r2a
	call rb
	trel ckm, h1a
	move nb1, nb
	goto r2b
rr,	print (flexo sf

	goto pro

h1a,	step1 npt
	putback npl-1, nb1
	load npt
	tlesc 10, h1
	goto pro
          
                                                                /set up

pro,	test0 npt, h1
	zero mgi
	zero psi
	call tsw
	trmi h11
	sett fa, 400
	sett tpo, 252
	sett fy, 600
	sett 0f1, 60001
	feed 200
	call ipu
	feed 300

h11,	zero t1
	move fa, la

pr1,	load t1
	putback nos, (0
	step1 t1
	tlesc 220, pr1
	zero t1

pr2,	load t1
	putback npo, (1
	load t1
	putback nmu, ((600000)-not
	load t1
	putback ton, (0
	step1 t1
	tlesc 10, pr2
          
                                                                
/countdown and refill, merge


mma,	zero iii

ma,	sett lst, 377700
	zero ij
	zero i1
	zero i0

ma0,	call cta
	lookup nos
	store nox
	band (377700
	subt lst
	trpl ma1
	addi lst
	store lst

ma1,	load nox
	band (77
	store nox
	load ij
	putback ton, nox
	step1 ij
	tles npt, ma0

mg,	test0 mgi, mg9	/merge
mg1,	load lst
	x2tom6
	store t1
	load tpo
	call mul
	complement
	call ps
          
                                                                
	load ton
	x2to6
	addi ton+1
	x2to6
	addi ton+2
	call ps
	load npt
	tlesc 4, mb
	load ton+3
	x2to6
	addi ton+4
	x2to6
	addi ton+5
	call ps
	load npt
	tlesc 7, mb
	load ton+6
	x2to6
	addi ton+7
	x2to6
	call ps
	goto mb

mg9,	sett mgi, 1

mb,	zero ij

mb0,	zero j1
	call cta
	store t1a
	lookup nos
	band (377700
	subt lst
	trnz mb3
	load ij		/refill
	lookup npo
	subt (1
	store qqr
	trnz mb9

mc0,	load ij
	lookup nmu
	store qrq
          
                                                                
m02,	lookup not
	store qqs
	ftrel (600000, mr1
	band (700000
	trnl (700000, m01
	load qqs
	band (77777
	store tpo
	tlesc 526, m21
	load tpo
	tgrec 1252, m23
	sett fy, 300
	sett 0f1, 30001
	goto m22

m21,	sett fy, 600
	sett 0f1, 60001
	goto m22

m23,	print (flexo ts

	load tpo
	call dpt
	type (77

m22,	load qrq
	addi (1
	store qrq
	load ij
	putback nmu, qrq
	goto mc0

m01,	load ij
	putback npo, (1
	load qrq
	addi (1
	store qrq
	load ij
	putback nmu, qrq
	goto mc5

mr1,	sett i1, 1
	store j1
	load ij
	lookup npl
	store qpl
	addi (1
	store t1
	load ij
	putback npl, t1
	load qpl
	complement
	lookup bar
	store t1
	trel (600000, mb6
	load ij
	putback nmu, t1
	goto mc0
          
                                                                /translation

mc5,	test1 j1, mb5
	sett i0, 1

mb5,	load qqs
	band (177
	x2to3
	store tim

ta2,	load qqs
	band (100000
	trze ta9
	load tim
	x2to1
	goto ta8
ta9,	sett t1, 3
	load tim
	call mul
ta8,	store tim
	load qqs
	band (17600
	x2tom7
	store in
	trel (1, ta3

tb1,	load qqs
	trmi ta3
	band (200000
	trnz mr2

ta4,	load qqs
	band (60000
	ftrel (20000, taq
	trel (40000, tah
	load tim
	halve
	goto tar

taq,	load tim
tar,	halve
	goto tai

tah,	load tim
tai,	halve
	goto mr3

mr2,	sett t1, 5
	load tim
	x2tom3
	call mul

mr3,	store slc
	tlesc 4, ta3

ta5,	load tim
	subt slc
	store tim
          
                                                                
mr8,	load slc
	subt fy
	store slt
	tlesc 1, ms1
	move slt, slc
	call cta
	putback nos, 0f1
	call snp
	goto mr8

ms1,	load slc
	x2to6
	addi (1
	store t2
	call cta
	putback nos, t2
	call snp

ta3,	load tim
	subt fy
	store slt
	tlesc 1, mb4
	move slt, tim
	load 0f1
	subt (1
	addi in
	store t2
	call cta
	putback nos, t2
	call snp
	goto ta3

mb4,	load tim
	x2to6
	addi in
	store t2
	call cta
	putback nos, t2
	goto mb8

mb3,	load t1a
	lookup nos
	subt lst
	store qqq
	load t1a
	putback nos, qqq

m9a,	sett i0, 1
mb8,	step1 ij
	tles npt, mb0
	test0 i1, ma
	step1 mc
	test0 i0, mma
	test1 iii, ma
	load mc
	call dpt
	type (77
	sett iii, 1
	goto ma
          
                                                                
mb9,	load ij
	putack npo, qqr
	goto m9a


/decimal print

dpt,	answer dpx
	store t1
	zero dpi
	zero dpd
	zero dps
	trpl dp3
	type (54
	load t1
	complement

dp1,	store t1
dp3,	step1 dpd
	load dpi
	lookup dpb
	store t2
	addi t1
	trpl dp1
	istepa dpd, 1
	trnz dp2
	test0 dps,dp4
	sett dpd, 20

dp2,	type dpd
	sett dps, 1

dp4,	zero dpd
	step1 dpi
	tlesc 6, dp3
	test1 dps, dpx
	type (20
dpx,	exit dpt

	decimal
dpb,	-100000
	-10000
	-1000
	-100
	-10
	-1
	octal
          
                                                                
/multiply by  t1

mul,	answer mux
	zero t3
	store t2

mu2,	band (1
	trze mu1
	load t1

mu1,	addi t3
	store t3
	load t1
	x2to1
	store t1
	load t2
	halve
	store t2
	trnz mu2
	load t3

mux,	exit mul


cta,	answer ctw
	load ij
	lookup rlc
	store t1
	load ij
	lookup npo
	addi t1
ctw,	exit cta


snp,	answer snk
	load ij
	lookup npo
	addi (1
	store t1
	load ij
	putback npo, t1
snk,	exit snp
          
                                                                /punch store

ps,	answer psx
	store psa
	sett psh, psx
	load psi
	putback pb, psa
	step1 la
	step1 psi
	load la
	tgrel (em, emu

ps5,	load psi
	tlesc 100, psx

ps6,	zero psu
	call fla
	move la, fa

ps1,	load psu
	lookup pb
	store t1
	addi ckm
	store ckm
	load t1
	call ppp
	step1 psu
	tles psi, ps1
	call csm
	zero psi
	feed 6
	govia psh
psx,	exit ps

emu,	print (flexo of 	/o.f.space
	load mc
	addi (1
	call dpt
	type (77

mb6,	sett psh, ps7	/entry at end of tape
	test1 psi, ps6

ps7,	feed 100
	call tsw
	band (1
	trnz ph2
	clear
	call ps
	clear
	call ps
	sett psh, ps8
	goto ps6

ps8,	feed 20
	call jbk
	feed 300
	goto ph2

start
          
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  TEMPORARY^3 storage

fy,	0	/split-up value
0f1,	0	/100xfy+1

iii,	0	/suppress error prints
mgi,	0	/indicator to ignore 1st result
trr,	0	/translation results
fa,	0	/first address of block
la,	0	/last address in block+1
tpo,	0	/tempo
ckm,	0	/checksum
lst,	0	/smallest time
ij,	0	/handy index on part
npt,	0	/number of parts
nn,	0	/number of notes
nb,	0	/number of bars
nn1,	0	/saves nn
nb1,	0	/saves nb
n1,	0	/number of words in block
nn2,	0	/number of lines read in block
qqr,	0	/npo pointer_. no. of live entries
qrq,	0	/pointer to not
qqs,	0	/note
in,	0	/internal tone
psi,	0	/punch buffer index--filling
psu,	0	/punch buffer index--emptying
psh,	0	/punch routine return switch
qqq,	0	/time left (temp.)
t1a,	0	/index on nos
qpl,	0	/temp. bar index
slc,	0	/slice reserved for articulation
slt,	0	/temp. slc
tim,	0	/time (temp.)
nox,	0	/note temp.
psa,	0	/ps temp.
mc,	0	/measure count
i0,	0	/bar not crossed
i1,	0	/bar crossed
j1,	0	/marks i1 part
dpd,	0	/digit to be printed
dpi,	0	/index on depletion table
dps,	0	/zero-suppression switch


t1,	0
t2,	0
t3,	0
          
                                                                
constants

.-70/	ton,
ton+10/	nmu,
nmu+10/	npl,
npl+10/	npo,
npo+10/	nos,
nos+220/	rlc,	-1	21	43	65
		107	131	153	175

	pb,
pb+100/	not,
7750/	bar,

	all=bar-not-1
	at=pro

start yea
          
                                             7
