/MUSIC TRANSLATOR


10022/
	JMP BEGIN

/READER READING PROGRAM
/READ ABOUT 100 CHARS INTO BUFFER AT ONE TIME
/WILL BE CALLED FOR ON CHARACTER BY CHARACTER BASIS
/INTERRUPTS ARE OFF

RDRA,	0
	LAC RDRP
	AND (17777)
	SAD (RDRE)
	JMS RDRI
	LAC I RDRP
	ISZ RDRP
	SAD (223)	/END OF TAPE CODE
	JMP BEGIN
	EXIT RDRA

/THE READER BUFFER

RDRP,	RDRE
RDRBUF,	0
RDRBUF+140/
RDRE,	0

/THE INITIALIZATION PART

RDRI,	0
	LAW RDRBUF
	DAC RDRP
RDRIM,	LAW
	DAC TIMEE
	RSA
	RSF	/SKIP ON READER FLAG
	SKP
	JMP .+4
	ISZ TIMEE	/ELSE ADD UP THE TIME
	JMP .-4	/NOT UP YET
	JMP RDRF	/THE READER TIMED OUT
	RRB	/GET THE CHAR
	DAC I RDRP
	ISZ RDRP
	LAC RDRP
	AND (17777)
	SAD (RDRE)
	SKP
	JMP RDRIM
/THE BUFFER IS FULL - RESET 'RDRP' AND EXIT
RDRFF,	LAW RDRBUF
	DAC RDRP
	EXIT RDRI

                                                                                                                                      /READER TIME OUT - INSERT END-OF-TAPE CODE
/AND EXIT

RDRF,	RRB	/CANCEL READER SELECT
	LAC (223)	/END OF TAPE CODE
	DAC I RDRP
	JMP RDRFF



PCHA,	0
	DAC FFGHI
	LAS
	SPA
	EXIT PCHA	/SUPPRESS PUNCH IF SW 0 UP
	LAC FFGHI

	PLS
	PSF
	JMP .-1
	JMP I PCHA

PCHB,	0
	DAC FFGH
	LRS 14
	AND (77)
	TAD (200)
	JMS PCHA
	LAC FFGH
	LRS 6
	AND (77)
	TAD (200)
	JMS PCHA
	LAC FFGH
	AND (77)
	TAD (200)
	JMS PCHA
	JMP I PCHB


TLPA,	0
	TLS
	TSF
	JMP .-1
	JMP I TLPA

FFGH,	0
FFGHI,	0
                                                                                                       /MUSIC TRANSLATOR

/READ AND CHECK FOR CERTAIN BREAK CHARACTERS
/SOME ARE IGNORED, E.G. CR, LF, TAB
/OTHERS CAUSE RETURN AT ENTERY+1, E.G. COMMA,#
/ALL OTHERS CAUSE RETURN AT ENTRY +2

C = RDRA
BREAK,	0
	JMS C
	SAD (250)	/LPAREN
	JMP BREAK+1
	SAD (251)	/RPAREN
	JMP BRET
	SAD (215)	/CR
	JMP BRCR
	SAD (212)	/LF
	JMP BREAK+1
	SAD (257)	/SLASH
	JMP BRET
	SAD (254)	/COMMA
	JMP BRET
	SAD (240)	/SPACE
	JMP BREAK+1
	SAD (211)	/TAB
	JMP BREAK+1
	SAD (0)	/BLANK TAPE - AS BETWEEN PAGES
	JMP BREAK+1
	SAD (214)	/FORM-FEED - END OF PAGE
	JMP BREAK+1
	SAD (243)	/# I.E. COMMAND
	JMP BRET
	ISZ BREAK
BRET,	JMP I BREAK
BRCR,	ISZ PCC
	JMP BREAK+1

/A NOT TOO SURPRIZING DEFINITION:
EXIT = JMP I

                                                                                                       /THIS ROUTINE SETS UP THE NEXT GROUP OF THREE
/CHARACTERS FOR PROCESSING. CHARACTERS ARE READ UNTIL
/A BREAK CHAR IS FOUND, BEING SAVED IN C1,C2,C3.
/MORE THAN THREE MEANS AN ERROR. LESS THAN THREE CAUSES
/LAST ONE OR TWO TO BE SET TO ZERO.
/RETURN IS WITH THE TERMINATING BREAK CHARACTER IN THE
/ACCUMULATOR.

SETUP,	0
	JMS BREAK
	JMP E1
	DAC C1
	JMS BREAK
	JMP F2
	DAC C2
	JMS BREAK
	JMP F3
	DAC C3
	JMS BREAK
	JMP I SETUP
	JMP E3
F2,	DZM C2
F3,	DZM C3
	JMP I SETUP
C1,	0
C2,	0
C3,	0

                                                                                                       TIME,	0
	JMS SETUP
	SAD (257)	/SLASH
	JMP MEAS	/SAVE THE MEASURE NUMBER
	SAD (243)	/CHECK FOR #
	JMP CMMD	/A COMMAND (TEMPO,KEY,END)
	LAC C3
	SAD (304)	/D (IMPLIES END OF TRANSLATION)
	JMP ENDUP
	LAC C1
	CLQ
	LLS 11
	TAD C2
	JMS SEARCH
	TTAB
	TTRA
	JMS PCHB
	JMP I TIME

ENDUP,	LAC (-300)
	DAC C1
	CLA
	JMS PCHB	/ZERO FOR END OF PEICE
	CLA
	JMS PCHA
	ISZ C1
	JMP .-3
	JMP BEGIN

                                                                                                       /THE COMMAND IDENTIFIER (SUCH AS IT IS...)

CMMD,	LAC C1
	SAD (313)	/K FOR NEW KEY SIGNATURE
	JMP MORE
	LAC C3
	SAD (304)	/D FOR END
	JMP ENDUP

/ELSE TRANSLATE C1,C2,C3 AS DECIMAL NUMBER AND PUT OUT
/TEMPO COMMAND TO PLAYER

	JMS INNUM
	DAC D2
	CLL
	LAC CONST2
	IDIV	/DIVIDE INTO SCALE FACTOR
D2,	0
	LACQ
	CMA	/USE THE ONES COMPLEMENT
	JMS PCHB
	JMP TIME+1

MEAS,	JMS INNUM
	DAC MEA
	DZM PCC	/COUNT OF THE NUMBER OF LINES SINCE LAST
		/MEASURE INDICATION
	JMP TIME+1


DECIMAL
CONST2,	119056
OCTAL

                                                                                                                                 
NOTE,	0
	JMS SETUP
	LAC C1
	SAD (322)	/TEST FOR REST - R
	JMP REST
	LAC C1
	CMA
	TAD (260)
	CMA
	DAC C1
	JMS CHECKN
	LAC C2
	JMS CHECKP
	LAC C3
	JMS CHECKM
	LAC C3
	SNA
	JMS KEY
	SAD (316)	/N
	CLA
	DAC C3
	LAC C2
	CLQ
	LLS 11
	TAD C3
	JMS SEARCH
	PITCH
	PTRA
	DAC T
	LAC (-7+1)
	TAD C1
	DAC C1
	LAC T
	RAR!CLL
	ISZ C1
	JMP .-2
	JMS CONVRT
	JMS PCHB
	JMP I NOTE
REST,	LAC CONST
	JMS PCHB
	JMP I NOTE
                                                                                                       CHECKP,	0
	CMA
	TAD (301)
	CMA
	SPA
	JMP E5
	CMA
	TAD (7)
	CMA
	SMA
	JMP E5
	JMP I CHECKP

CHECKN,	0
	SNZ
	JMP E4
	CMA
	TAD (7)	/7 BASE 10
	CMA
	SMA
	JMP E4
	JMP I CHECKN

INNUM,	0
	DZM MEASN
	LAC C1
	SZA
	JMS DIGIT
	LAC C2
	SZA
	JMS DIGIT
	LAC C3
	SZA
	JMS DIGIT
	LAC MEASN
	EXIT INNUM

CHECKM,	0
	SAD (0)
	JMP I CHECKM
	SAD (253)
	JMP I CHECKM
	SAD (255)
	JMP I CHECKM
	SAD (316)
	JMP I CHECKM
	JMP E6

                                                                                                       CONVRT,	0
	DAC D
	CLL
	LAC CONST
	IDIV
D,	0
	LACQ
	JMP I CONVRT
DECIMAL
CONST,	95238
OCTAL


KEY,	0
	LAC C2
	CLQ
	LLS 11
	JMS SEARCH
	KEYTAB
	KEYTRA
	AND (777)
	JMP I KEY

SEARCH,	0
	DAC PAT
	LAC I SEARCH
	DAC TAB
	DAC TABB
	LAC I TAB
	DAC TABEND
	LAC PAT
	DAC I TABEND
	ISZ TAB
	LAC I TAB
	SAD PAT
	SKP 
	JMP .-4
	LAC TAB
	SAD TABEND
	JMP E2	/NOT IN TABLE - ERROR
	LAC TAB
	CMA
	TAD TABB
	CMA
	ISZ SEARCH
	TAD I SEARCH
	DAC T
	LAC I T
	ISZ SEARCH
	JMP I SEARCH
                                                                                                       TAB,	0
TABB,	0
TABEND,	0
PAT,	0
T,	0
CHECK,	0
BEGIN,	HLT
	JMS C
	SAD (242)	/QUOTE
	SKP
	JMP .-3
BLOOP,	JMS C
	DAC C
	SAD (242)	/QUOTE
	JMP SPAC
	JMS TAPTTL
	LAC C
	JMS TLPA	/PRINT OUT TITLE
	JMP BLOOP

/SPACER ON TAPE

SPAC,	LAW 17760
	DAC PC
	CLA
	JMS PCHA
	ISZ PC
	JMP .-3

                                                                                                       
/READ AND SAVE THE KEY SIGNATURE

MORE,	NOP
	JMS SETUP
	DAC CHECK
	LAC C1
	JMS CHECKP
	LAC C2
	JMS CHECKM
	CLQ
	LAC C1
	LLS 11
	JMS SEARCH
	KEYTAB
	KEYTRA
	CLQ
	LAC C1
	LLS 11
	TAD C2
	DAC I T
	LAC CHECK
	SAD (251)	/RPAREN
	SKP
	JMP MORE

/PROCESS CHORDS

M,	DZM PC
	JMS TIME
	ISZ PC
	JMS NOTE
	ISZ PC
	JMS NOTE
	ISZ PC
	JMS NOTE
	ISZ PC
	JMS NOTE
	JMP M
                                                                                                       DIGIT,	0
	CMA
	TAD (260)
	CMA
	DAC T
	LAC MEASN
	CLL
	MUL
	12
	LACQ
	TAD T
	DAC MEASN
	JMP I DIGIT


PITCH,	PITCHE
	303255	/C-
	303000	/CN
	303253	/C+
	304255	/D-
	304000	/DN
	304253	/D+
	305255	/E-
	305000	/E
	305253	/E+
	306255	/F-
	306000	/FN
	306253	/F+
	307255	/G
	307000	/GN
	307253	/G+
	301255	/A-
	301000	/AN
	301253	/A+
	302255	/B-
	302000	/BN
	302253	/B+
	322000	/R
PITCHE,	0

                                                                                                                                                                                                
DECIMAL
PTRA,	PTRAE
	1920
	2048	/C
	2183
	2183
	2304	/D
	2446
	2446
	2560	/E
	2730
	2560
	2730	/F
	2910
	2910
	3072	/G
	3275
	3275
	3413	/A
	3638
	3638
	3840	/B
	4096
PTRAE,	0

OCTAL
KEYTAB,	KTBE
	303000	/C
	304000	/D
	305000	/E
	306000	/F
	307000	/G
	301000	/A
	302000	/B
	303000	/C
KTBE,	0

KEYTRA,	KTRE
	0
	0
	0
	0
	0
	0
	0
	0
KTRE,	0
                                                                                                       
OCTAL
TTAB,	TTABE
	327000	/W
	304327	/DW
	327324	/WT
	310000	/H
	304310	/DH
	310324	/HT
	321000	/Q
	304321	/DQ
	321324	/QT
	305000	/E
	304305	/DE
	305324	/ET
	323000	/S
	304323	/DS
	323324	/ST
	324000	/T
	304324	/DT
	324324	/TT
	266000	/6
	266324	/6T
TTABE,	0

DECIMAL
TTRA,	TTRAE
	192
	288
	128
	96
	144
	64
	48
	62
	32
	24
	36
	16
	12
	18
	8
	6
	9
	4
	3
	2
TTRAE,	0
                                                                                                       
/TAPE LABELING PACKAGE
PCH = PCHA
OCTAL

TAPTTL,	0
	DAC TAPT
	SAD (240
	JMP TAPBLK
	TAD (777506
	SPA
	JMP TAPNUM
	TAD (777772
	DAC TAPT
	TAD (777745
	SMA
	JMP I TAPTTL
	TAD (32
	SPA
	JMP I TAPTTL
	LAC TAPT
	CLL!RAL
	TAD (TAPTBL-1
	DAC TAPTBL
	JMP TAPCH
TAPNUM,	LAC TAPT
	TAD (777520
	SPA
	JMP I TAPTTL
	LAC TAPT
	AND (17
	DAC TAPT
	CLL!RAL
	TAD (TAPTBL+65
	JMP TAPNUM-2
TAPBLK,	LAC (TAPBK
	JMP TAPNUM-2
TAPCH,	DAC TAPPS
	LAC I TAPTBL
	RAL
	RTL
	RTL
	RTL
	DAC I TAPTBL
	AND (77
	JMS PCH
	LAC I TAPTBL
	RTL
	RTL
	RTL
	DAC I TAPTBL
	AND (77
	JMS PCH
                                                                                                       	LAC I TAPTBL
	RTL
	RTL
	RTL
	DAC I TAPTBL
	AND (77
	JMS PCH
	LAC TAPPS
	SNA!CLA
	JMP I TAPTTL
	ISZ TAPTBL
	JMP TAPCH
TAPT,	0
TAPPS,	0
TAPTBL,	0
	761111
	117600
	774545
	453200
	364141
	412200
	774141
	413600
	774545
	414100
	770505
	010100
	364151
	513000
	771010
	107700
	004177
	410000
	204040
	403700
	771014
	224100
	774040
	404000
	770214
	027700
	770214
	207700
	364141
	413600
	771111
	110600
	364151
	215600
	771111
                                                                                                       	314600
	224545
	453000
	010177
	010100
	374040
	403700
	073060
	300700
	376014
	603700
	412214
	224100
	010274
	020100
	615141
	454300
	364141
	413600
	004277
	400000
	625151
	514600
	224145
	453200
	141211
	771000
	274545
	453100
	364545
	453000
	010171
	050300
	324545
	453200
	065151
	513600
TAPBK,	0
	0

                                                                                                       /THE ERROR DIAGNOSTICS
E1,	JMS LINE
	1
E2,	JMS LINE
	2
E3,	JMS LINE
	3
E4,	JMS LINE
	4
E5,	JMS LINE
	5
E6,	JMS LINE
	6

/THE PRINT OUT OF ERRORS
/
/OUTPUT CONSISTS OF
/	1. MOST RECENT MEASURE NUMBER FOUND IN TEXT
/	2. LINE NUMBER WITHIN THAT MEASURE
/	3. ERROR TYPE, I.E. 'E1' ... 'E6'
/	4. THE REMAINDER (UNPROCESSED) PART OF THE CHORD
LINE,	0
	LAW 215
	JMS TLPA
	LAW 212
	JMS TLPA
	LAC MEA
	JMS NUM
	LAW 253	/+
	JMS TLPA
	LAC PCC
	JMS NUM
	LAW 240
	JMS TLPA
	LAW 305
	JMS TLPA
	LAC I LINE
	TAD (260)
	JMS TLPA
	LAW 240
	JMS TLPA
	LAW 240
	JMS TLPA
	JMS RDRA
	SAD (212)
	SKP
	JMP .-4
                                                                                                       
/FIND THE BEGINNING OF THE NEXT CHORD
/FILL IN SQUEALL IN CURRENT CHORD TO
/	1. MAINTAIN PHASE RELATIONSHIP
/	2. EASILY IDENTIFY TROUBLE SPOT IN MUSIC

PHASE,	LAC (77)
	JMS PCHB
	ISZ PC
	LAC (5)
	SAD PC
	SKP
	JMP PHASE

	ISZ PCC
	JMP M
ZQB,	0

                                                                                                       /THE NUMBER PRINTER
/WILL PRINT UP TO THREE DIGIT INTEGERS IN DECIMAL

NUM,	0
	DAC ZQB
	CLL
	IDIV
DECIMAL
	100
	DAC ZQB	/THE REMAINDER
	LACQ
OCTAL
	TAD (260)
	JMS TLPA
	LAC ZQB
	CLL
	IDIV
DECIMAL
	10
	DAC ZQB	/REMAINDER - THE UNITS PART
OCTAL
	LACQ
	TAD (260)	/THE TENS PART
	JMS TLPA

	LAC ZQB
	TAD (260)
	JMS TLPA
	JMP I NUM
START BEGIN

                                                                                                                                                                                                                                                                                                                                                        
