
FOUR PART MUSIC FOR PDP-7

/BY RONALD F. BRENDER
/AUGUST 1967
/REVISED OCTOBER 1967


/THIS PROGRAM CONTROLS THE FOUR LOW ORDER BITS OF THE MQ
/AT AUDIO RATES UP TO ABOUT 2000 CPS.
X10 = 10

/BRANCH TABLE TO COMMON START POINTS
22/
	JMP MORE
	JMP ALLIN
	JMP SELPRT	/SELECT PARTS TO BE PLAYED

/THE BASIC COUNT LOOP
LOOP,	ISZ MCOUNT
	JMP .-1

/PULSE LOGIC - ONE FOR EACH PART
PA,	LAC MNA
	ADD CNTDEL
	DAC MNA	/ADJUST NOTE COUNT
	CMA
	DAC NA
	SMA	/COMPLEMENT BIT OR NOT
	JMS EQUAL	/NOT THIS TIME
	ADD TA	/MODIFY FOR NEXT TIME
	DAC NA
	CMA	/GET NEGATIVE
	DAC MNA
	LACQ	/COMPLEMENT THE BIT
	XOR BITA
	LMQ

                                                                                                       PB,	LAC MNB
	ADD CNTDEL
	DAC MNB
	CMA
	DAC NB
	SMA
	JMS EQUAL
	ADD TB
	DAC NB
	CMA
	DAC MNB
	LACQ
	XOR BITB
	LMQ

PC,	LAC MNC
	ADD CNTDEL
	DAC MNC
	CMA
	DAC NC
	SMA
	JMS EQUAL
	ADD TC
	DAC NC
	CMA
	DAC MNC
	LACQ
	XOR BITC
	LMQ

                                                                                                       PD,	LAC MND
	ADD CNTDEL
	DAC MND
	CMA
	DAC ND
	SMA
	JMS EQUAL
	ADD TD
	DAC ND
	CMA
	DAC MND
	LACQ
	XOR BITD
	LMQ

/TEST FOR THE END OF THE CHORD
	CLL
	LAC LDURAT
	TAD CNTDEL
	DAC LDURAT
	SZL
	ISZ HDURAT
	SKP
	JMP NWCHRD

/FIND THE NEXT ONE TO COUNT DOWN

MINI,	LAC NA
	ADD MNB
	SPA
	JMP ALB
	JMP BLA

ALB,	LAC NA
	ADD MNC
	SPA
	JMP ALBC
	JMP CLAB

                                                                                                       ALBC,	LAC NA
	ADD MND
	SPA
	JMP ALBCD
	JMP DLABC

BLA,	LAC NB
	ADD MNC
	SPA
	JMP BLAC
	JMP CLAB

BLAC,	LAC NB
	ADD MND
	SPA
	JMP BLACD
	JMP DLABC

CLAB,	LAC NC
	ADD MND
	SPA
	JMP CLABD
	JMP DLABC

ALBCD,	LAC MNA
	JMP C
BLACD,	LAC MNB
	JMP C
CLABD,	LAC MNC
	JMP C
DLABC,	LAC MND
	JMP C

/THE COMMON ENDING

C,	ADD HALFDL
	SMA
	777777
	DAC MCOUNT
	CMA
	ADD DELTA
	DAC CNTDEL
	JMP LOOP

                                                                                                       /SET UP THE NEXT CHORD

NWCHRD,	LAS	/SEPARATE IF SW2 IS DOWN
	AND (200000)
	SZA
	JMP .+5
	LAW 15000
	DAC CD
	ISZ CD
	JMP .-1
NW1,	LAC I X10
	SNA
	JMP TEST 	/PIECE DONE
	SPA
	JMP CHGTMP	/CHANGE THE TEMPO

	DAC MPY2	/NOTE LENGTH FROM TRANSLATOR
	LAS
	AND (7777)	/SCALE FACTOR
	SNZ
	LAC (100)	/USE ONE RATHER THAN ZERO
	CLL
	MUL
MPY1,	0		/FINAL SCALE FACTOR
	LLS 14	/A,Q TO A DIVIDED BY 64 BASE 10
	STL	/FORCE NEGATIVE RESULT
	MULS
MPY2,	0
	DAC HDURAT
	LACQ
	DAC LDURAT

	CLQ
	JMP LDPTCH

CHGTMP,	CMA	/ONES COMPLEMENT FROM TRANSLATOR
	DAC MPY1
	JMP NW1


                                                                                                      /LOAD THE INDIVIUAL NOTE PITCH CONSTANTS
/BOTH POSITIVE AND NEGATIVE VALUES ARE NEEDED
/BY THE PLAYING ALGORITHM

LDPTCH,	LAC I X10
	SMA
	CMA
	DAC MNA
	CA
	DAC NA
	DAC TA


	LAC I X10
	SMA
	CMA
	DAC MNB
	CMA
	DAC NB
	DAC TB

	LAC I X10
	SMA
	CMA
	DAC MNC
	CMA
	DAC NC
	DAC TC

	LAC I X10
	SMA
	CMA
	DAC MND
	CMA
	DAC ND
	DAC TD

                                                                                                       /CHECK FOR RESTS IN ALL PARTS
/IF THIS IS THE CASE, COUNT OUT THE REST
/AND GO GET NEXT CHORD WHEN DONE
/ELSE GOTO THE NORMAL PLAYING SECTION

	LAC CONST
	SAD TA
	SKP
	JMP MINI

	SAD TB
	SKP
	JMP MINI

	SAD TC
	SKP
	JMP MINI

	SAD TD
	SKP
	JMP MINI

	ISZ LDURAT
	JMP .-1
	ISZ HDURAT
	JMP .-3
	JMP NWCHRD

DECIMAL
CONST,	95238
OCTAL


                                                                                                       
/THE BEGINNING OF THE PROGRAM
GOGO,	DAC MUSAK	/THE AC HAS THE FIRST AVAILABLE FREE CORE
	CAF
	IOF
	HLT

/GET MORE MUSIC AND PLAY, PLAY, PLAY.......
MORE,	LAC MUSAK
	DAC X10
	LAC CONST3
	DAC MPY1

MUSIC,	RSB
	RSF
	JMP .-1
	RRB
	DAC I X10
	SZA
	JMP MUSIC

/ALL THE PIECE IS IN CORE, AH 1, AH 2, AH READY, ...
ALLIN,	LAC MUSAK
	DAC X10
	LAC CONST3
	DAC MPY1
	JMP NWCHRD


/THE EQUALIZER IN THE PULSE LOOPS

EQUAL,	0
	NOP
	LAC (7)
	TAD EQUAL
	DAC EQUAL
	JMP I EQUAL

TEST,	LAS
	SMA
	JMP MORE
	DZM CD
	ISZ CD
	JMP .-1
	JMP ALLIN

                                                                                                       /SELECT THE PARTS TO BE PLAYED
/THIS WILL ENABLE THE PARTS TO BE PLAYED WHICH HAVE
/CORRESPONDING ACCUMULATOR SWITCHES UP AT THE TIME
/THIS SECTION IS EXECUTED
/ANY, ALL OR NONE MAY BE SELECTED WITHOUT ADVERSE EFFECTS

SELPRT,	LAS
	AND (2)
	DAC BITA

	LAS 
	AND (4)
	DAC BITB

	LAS
	AND (10)
	DAC BITC

	LAS
	AND (20)
	DAC BITD

	LAS
	AND (36)
	LMQ

	JMP MORE-1

/COME HERE IF AN ERROR
ERROR,	LAW 300
	TLS
	JMP .



                                                                                                       /VARIABLES AND CONSTANTS

NA,	0	NB,	0	NC,	0
ND,	0	MNA,	0	MNB,	0
MNC,	0	MND,	0	TA,	0
TB,	0	TC,	0	TD,	0

BITA,	2
BITB,	4
BITC,	10
BITD,	20

MUSAK,	0
HALFDL,	26	/22 BASE10 WHERE 22X6 IS THE NUMBER OF COUNTS
		/FOR THE FIXED LOOP FROM 'PA' TO 'NWCHRD'
DELTA,	54	/TWICE 'HALFDL'
CNTDEL,	0

MCOUNT,	0
LDURAT,	0
HDURAT,	0

DECIMAL
CONST3,	1984	/CORRESPONDS TO 60 QUARTER NOTES PER MINUTE
OCTAL

START GOGO

                                                                                                                                                                                                                                                                                                                                                                                                                                                                   [_~JaZ                                                                                                                                                                                                 
