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