TITLE BIG 144 710928 160139 RELOCA 6V==0 ;1 = NO PLAYER, USES ONLY T-S PROCESSOR 32K=0 ;0 = 16K APRCHN"==4 TPCHN"==2 TPCHNA"==40 UTCCHN"==3 PCHCHN"==UTCCHN NDIR"==3 NURBUF"==3 NUWBUF"==3 BLKSPC"==5 TTYCHN==7 A=1 TAPAC"=A B=2 C=3 D=4 E=5 F=6 G=7 H=10 P"=11 I=12 J=13 K=14 L"=15 M=16 N=17 MEMTOP=37777 IFN 32K,TOP=40000 IFE 32K,TOP=26400 IFN 32K,FRETOP=77777 IFE 32K,FRETOP=37777 DEFINE .RD710 A DATAI 710,A TERMIN ;BLOCK LENGTHS STRLL==140 ;MAX LENGTH OF INPUT STRING SLAKLL==100 COMLL==140 PDLL==40 XPDLL==10 YPDLL==10 SYTLL==200 SYMLL==240 TITLL==40 NLINES==10 ALIVEL==30 ;SYMS LH NUMBER==21 TONUS==22 ORDFLG==23 ORDINL==24 STAR==25 CREATE==26 STRUCT==27 UNSTRU==30 PARAM==31 MINUS==32 MODIFY==33 MODALL==(MODIFY)0 MODEXC==(MODIFY)1 MODPLS==(MODIFY)2 MODAGN==(MODIFY)3 ERASER==34 GOTO==35 PLAYER==36 MULTIP==37 BRAKET==40 PUNCTU==41 PUNCCM==(PUNCTU)0 PUNCCL==(PUNCTU)1 PUNCSC==(PUNCTU)2 PUNCTO==(PUNCTU)3 PUNCFM==(PUNCTU)4 PUNCSL==(PUNCTU)5 TRANSL==42 SCRIB==43 HARMON==44 CLEF==45 ;F FLAGS (RH) IGNORF==20 RETYPF==40 NONEWF==100 MINUSF==200 PREVCF==400 NOMORF==1000 PLEASF==2000 BEGUNF==4000 .ZZ.==. LOC 40 0 JSR UUOH LOC .ZZ. DEFINE NUMS N1,N2 ZZZ==. REPEAT N2-N1+1,N1+.-ZZZ TERMIN JRST SETUP SETUPX": MOVE 0,[(20)SAVLOD BLT 0,SAVLOD+17 MOVEI A,FREE" MOVEM A,FREP'" MOVSI A,-MAXNP" SETUX0: JUMPGE A,SETUX1 SETOM PRECLE"(A) AOBJN A,SETUX0 SETUX1: SETZM NTAPES' AOS NTAPES SETZM TIME' IFE 6V,[ SETZM PSDATL MOVE 0,[PSDATL,,PSDATL+1] BLT 0,HARCDE-1 ] SETUP": MOVE P,[(,-PDLL)PDL-1 .OPEN 2,[SIXBIT / %TTY/] JRST 4,.-1 .OPEN 1,[SIXBIT / 4TTY/] JRST SSSB .RD710 B, IDIVI B,60. MOVE A,[(252525252525)] MOVEM A,RAND' FMPM A,RAND SOJG C,.-1 MOVEI A,1 MOVE B,[(600)SYMTAB-1] SETUP0: ILDB C,B JUMPN C,.-1 ILDB C,B SKIPE C AOJA A,SETUP0 MOVEM A,NSYMS' MOVNM A,NNSYMS' MOVEM B,STEND' SETZM PLAYP' IFE 6V,[ PUSHJ P,TUNEUP SETUP1: MOVE P,[(,-PDLL)PDL-1] ] REALLY: MOVEI C,"^ SETZM ALTF' SETZM BKD' REALL1: PUSHJ P,TTYOFF PUSHJ P,CRLF RCS: MOVE P,[(,-PDLL)PDL-1 ;GET SET TO GOBBLE CHAR. STRING MOVEM P,DOP SETZM BRAKC' MOVSI H,-STRLL SKIPE A,ALTF RCS2: PUSHJ P,ECHO RCS1: PUSHJ P,TYI ;DISPATCH ON CHAR (JUST PUT IN STRING IF REG.) CAIN A,177 JRST RBOUT CAIN A,4 JRST REALL1 CAIN A,"/ JRST GENAM CAIN A,"\ PUSHJ P,RCOMN CAIE A,33 CAIN A,175 MOVEM C,ALTF CAIN A,"[ AOS BRAKC CAIN A,"] SOS BRAKC CAIE A,15 JRST RCS2 SKIPN BRAKC JRST RCS3 PUSHJ P,CRLF RCSH: MOVSI A,-1 MOVEM A,STRING(H) AOBJP H,SST ;STRING TOO LONG JRST RCS2 RCS3: SETZM STRING(H) ;GET HERE WHEN C.R. REALLY MEANS DOIT. AOBJP H,SST SETOM STRING(H) ;END MARKER IS -1 AOBJP H,SST SETZM STRING(H) JRST TCS RBOUT: SETZM STRING(H) RBT: SOJ H, CAMG H,[-STRLL,,0] JRST REALLY SKIPN A,STRING(H) JRST RCSH PUSHJ P,TYO6 JRST RBT LOSE: MOVE B,[440700,,[ASCIZ ./COMMAND STRING LOSES\.]] PUSHJ P,DOSAY5 JRST DONE UUOH: 0 MOVEM ACSAV MOVE [1,,ACSAV+1] BLT ACSAV+17 EXCH P,PSAV PUSHJ P,CRLF MOVE B,[440700,,[ASCIZ ./ILLEGAL UUO\.]] PUSHJ P,DOSAY5 EXCH P,PSAV .VALUE UUOBLM: MOVEI A,SETUPX-1 ;MOBY BLAM MOVEM A,UUOH UUOSRT: AOS UUOH UUORET: MOVE [ACSAV+1,,1] BLT 17 MOVE ACSAV JRST @UUOH ACSAV: BLOCK 20 PSAV: UUOPDL UUOPDL: BLOCK 20 ;PDL FOR UUO OPS SO AS NOT TO CLOBBER... TCS: MOVEI F,STRING MOVSI H,-COMLL TCS2: SKIPN (F) ;SIXBIT SPACE IS ZERO AOJA F,.-1 MOVE A,(F) AOJE A,DO ;END OF COMMAND STRING SKIPGE A AOJA F,TCS6 TCS1: PUSHJ P,SS ;EVALUATE SYMBOL CAIL A,60 JRST TCS3 CAIGE A,30 JRST SSSA ;CAN'T GET IT SUB A,2BEST' CAIGE A,10 JRST SSSA ;CAN'T GET IT HERE EITHER TCS4: MOVE A,NBEST' ;THIS IS IT HRL E,F TCS7: MOVEM A,COML(H) ;MAKE LIST OF THINGS TO DO MOVE F,SSBF' AOBJN H,TCS2 ;GET NEXT SYMBOL JRST SSS ;WHAT LOSSAGE?? TCS3: SUB A,2BEST CAIGE A,6 JRST SSSA ;CAN'T GET THIS SYMBOL MOVE A,2BEST CAIL A,60 JRST SSSB JRST TCS4 TCS6: MOVEM F,SSBF SOJA A,TCS7 ECHO1: MOVEI A,40 ECHO: MOVEI B,-40(A) JUMPL B,ECHO1 CAIL B,100 JRST ECHO1 ECHO2: MOVEM B,STRING(H) MOVEI A,40(B) CAIN A,"^ SETZM ALTF AOBJN H,TYO SST: PUSHJ P,CRLF SSS: MOVEI A,"? PUSHJ P,TYO JRST REALLY GENAM: PUSHJ P,GNAM ;CREATE A NAME BY TRIAL AND ERROR PUSHJ P,GENAM3 JRST RCS1 GENAM3: MOVSI C,-5 GENAM2: MOVE E,STEND ;SHOVE IT INTO STRING GENAM1: MOVE B,SLAK(C) PUSHJ P,ECHO2 DPB B,E IBP E AOBJN C,GENAM1 MOVEI A,0 DPB A,E IDPB A,E NULSYM: SOS NNSYMS AOS B,NSYMS ;E IS PNTR CAIL B,SYMLL JRST SSSB SETZM SYMS(B) MOVEI B,(E) CAIL B,SYTEND-2 JRST SSSB MOVEM E,STEND POPJ P, GNAM: MOVSI C,-5 ;MAKE UP A NAME GNAM1: XCT RCHT(C) HRREM B,SLAK(C) AOBJN C,GNAM1 SETZM SLAK(C) MOVEI F,SLAK PUSHJ P,SS ;ALREADY EXISTS? CAIL A,20 JRST GNAM ;AMOST, TRY AGAIN POPJ P, RCHT: PUSHJ P,RCCHAR PUSHJ P,RVCHAR PUSHJ P,RCCHAR PUSHJ P,RVCHAR PUSHJ P,RCCHAR RVCHAR: PUSHJ P,RANDOM IDIVI A,6 MOVE A,B MOVE B,[440600,,RVTAB] JRST RV1 RCCHAR: PUSHJ P,RANDOM IDIVI A,20. MOVE A,B MOVE B,[440600,,RCTAB] RV1: PUSH P,C ILDB C,B SOJGE A,.-1 MOVE B,C POP P,C POPJ P, RVTAB: SIXBIT /AEIOUY/ RCTAB: SIXBIT /BCDFGHJKLMNPQRSTVWXYZ/ SS: CLEARM 2BEST' ;SYMBOL EVALUATOR CLEARB G,1BEST' MOVE E,[(600)SYMTAB-1 ILDB I,E SS0: MOVEI B,1(F) SETOM NCHW' MOVE A,-1(B) MOVE A,TYPE(A) MOVEM A,SSOLDT' SS01: AOS NCHW ;FIND END OF SYMBOL (SPACE) MOVE A,(B) MOVE A,TYPE(A) JUMPL A,SS19 CAMN A,SSOLDT' AOJA B,SS01 SS19: MOVEM B,SSBF ;B HAS END OF SYM SS10: CLEARB C,D MOVE B,F ;F HAS BEGINNING OF SYM SS1: MOVE A,I ;A HAS CURRENT BYTE TO TEST AGAINST. ILDB I,E JUMPE A,SS2 ;RAN OUT ADDI D,1 ;D HAS ITERATION COUNT CAMN A,(B) ;CHECK CHARACTORS ADDI C,60 ;INFINITELY SURE THIS IS CHAR SKIPG NCHW ;CHECK NEARBY CHARS? JUMPE I,SS12 CAMN A,-1(B) ADDI C,37 ;SOMEWHAT PLAUSABLE HE MEANT THIS CAMN A,1(B) ADDI C,24 ;PLAUSABLE HE MEANT THIS SKIPG NCHW AOJA B,SS1 CAMN A,-2(B) ADDI C,14 ;HE MIGHT EVEN MEAN THIS CAMN A,2(B) ADDI C,10 ;UNLIKELY, BUT MAYBE THIS SS12: AOJA B,SS1 SS2: SUBI D,1 ;COMPUTE FIRST AND SECOND BEST CHOICES. SUB D,NCHW IMUL D,D ADD D,NCHW ADDI D,1 IDIV C,D CAMG C,1BEST JRST SS3 EXCH G,NBEST EXCH C,1BEST MOVEM G,N2BEST' MOVE G,NBEST MOVEM C,2BEST SS20: CAME E,STEND AOJA G,SS10 MOVE A,1BEST POPJ P, SS3: CAMG C,2BEST JRST SS20 MOVEM G,N2BEST MOVEM C,2BEST JRST SS20 RCOMN: PUSHJ P,TTYOFF ;GET INFORMATION FROM LOSER PUSHJ P,CRLF MOVEI A,"\ PUSHJ P,TYO MOVE C,[(10700)SLAK-1] RCOMN1: PUSHJ P,TYI CAIN A,177 JRST RCOMN2 PUSHJ P,TYO CAME C,[(10700)SLAK+SLAKLL-1 IDPB A,C CAIE A,"\ ;TERMINATOR JRST RCOMN1 JRST CRLF RCOMN2: CAMN C,[(10700)SLAK-1] ;RUBOUT JRST RCOMN1 LDB A,C PUSHJ P,TYO ADD C,[7_30.] SKIPGE C ADD C,[-<43_30.>-1] JRST RCOMN1 RANNO": RANDOM: MOVE A,[(252525)252525 FMPB A,RAND .RD710 B, ADD A,B POPJ P, GCDD": JUMPE I,CPOPJ JUMPN J,GCDD1 MOVEI I,1 POPJ P, GCDD1: PUSH P,A PUSH P,I PUSH P,J MOVE A,I GCDD2: MOVE I,A CAMGE I,J EXCH I,J MOVE A,J IDIV I,J JUMPN J,GCDD2 POP P,I IDIV I,A EXCH I,(P) IDIV I,A POP P,J POP P,A POPJ P, DONE": PUSHJ P,TTYOFF MOVE P,DOP' SKIPL COML(H) AOJA H,.-1 JRST DO1 DO: SETOM COML(H) DO0: SETZB H,F DO1: MOVEM P,DOP' PUSHJ P,DOG JRST REALLY ;SUPER-CONFUSED CAMN D,[MODAGN] JRST DOAG MOVE A,[COML,,COMSL] BLT A,COMSL+COMLL-1 ;SAVE STRING JUST IN CASE SETZM REHASH' CAMN D,[MODPLS] ;SET TO PLEASE MODE JRST DOPLSE HRRZS D CAIN E,BRAKET JRST DOBRAK CAIN E,STAR JRST DOSTAR CAIN E,CREATE JRST DOCREA CAIN E,TRANSL JRST DOTRNS CAIN E,ERASER JRST DOERZ CAIN E,PARAM JRST DOPARM CAIN E,GOTO XCT GOTOT(D) CAIN E,PLAYER XCT PLTOT(D) CAIN E,SCRIB XCT SCRIBT(D) DONEXT: AOJE H,DO1 DOG: HRRE G,COML(H) JUMPL G,CPOPJ SKIPGE COML(H) AOJA H,DO1A ;END OF STRING MARKER CAML G,NSYMS JRST SSSB ;NOT IN SYMBOL TABLE TRNN F,RETYPF JRST DO10 MOVEI A,40 TRON F,NONEWF MOVEI A,"\ PUSHJ P,TYO MOVE B,[(600)SYMTAB-1 SOJL G,DO11 ILDB A,B JUMPE A,.-2 JRST .-2 ;LOSSAGE ?? PUSHJ P,TYO6 DO11: ILDB A,B JUMPN A,.-2 HRRZ G,COML(H) DO10: TRNE F,IGNORF SOJA H,DO1 HLRZ E,SYMS(G) MOVE D,SYMS(G) JRST SPOPJ DO1A: POP P,A JRST DO1 DOAG: SETZB I,DOAGWF' DOAG1: ADDI H,1 PUSHJ P,DOG MOVNI E,1 DOAG3: HRRE A,COMSL(I) JUMPL A,DOAG2 HLRZ B,SYMS(A) JUMPN E,DOAG4 CAIE B,UNSTRU CAIN B,STRUCT JRST DOAG5 DOAG4: CAME B,E AOJA I,DOAG3 DOAG5: MOVE A,COML(H) MOVEM A,COMSL(I)î AOJA I,DOAG1 DOAG2: MOVE A,[COMSL,,COML] ;RESTORE STRING BLT A,COML+COMLL-1 SETOM REHASH' JRST DO0 DOBRAK: JUMPN D,DOBRK1 AOS BKD PUSHJ P,NUMVAL SKIPN A MOVEI A,1 PUSH P,H PUSH P,A JRST DONEXT DOBRK1: SOSLE A,(P) SKIPA H,-1(P) SOSGE BKD' JRST DONEXT SUB P,[(2)2 JRST DONEXT GOTOT: JRST TUNEUP AOJA H,DOVALU JRST DOTITL JRST ALLOW AOJA H,DOTAPE JRST WRIT JRST DOLIST JRST HARBLD JRST HARAUG JRST JRSTGO JRST DETUNE JRST HARSCL JRST VOXPT JRST VOXCD JRST SCWAV JRST CLEFP JRST RELPDP JRST PLWHOA JRST SCLBLD JRST PRINT JRST SYNN PLTOT: JRST PLGOA JRST PSGOA SCRIBT: JRST PLOT DOSTAR: CAIN D,2 JRST DDTGO TRON F,RETYPF PUSHJ P,CRLF CAIN D,1 TRO F,IGNORF AOJA H,DO1 DOPLSE: TRO F,PLEASF ;HE REALLY WANTS THIS AOJA H,DO1 RELPDP: SETZM PLAYP .CLOSE 17, .CLOSE 16, AOJA H,DO1 DOCREA: MOVEI B,NUMBER PUSHJ P,GET MOVNI A,1 MOVEM A,J SKIPL (C) ADDI C,1 MOVEI B,NUMBER PUSHJ P,GET2 MOVNI A,1 MOVEM A,DOCRN2' MOVE K,D DOCRE0: SETOM PLWN SETZB G,PLWN+1 MOVE A,[(PLWN+1)PLWN+2 BLT A,PLWN+177 MOVEI B,0 PUSHJ P,GET JRST DOCRE1 HRRZ C,(C) DOCRE2: MOVEM C,DOTITA' ADDI C,SYMS SETZM (C) HRRM C,STASH MOVE I,FREP' XCT DOCRET(K) JRST DONE DOCRE1: MOVEI B,UNSTRU PUSHJ P,GET JRST DOCRE3 DOCRE4: MOVE C,B PUSH P,C PUSHJ P,DOERS1 POP P,C JRST DOCRE2 DOCRE3: MOVEI B,STRUCT PUSHJ P,GET JRST BADATA JRST DOCRE4 PUSHJ P,TTSTOU DOCRET: PUSHJ P,CRRDOL PUSHJ P,CRUT PUSHJ P,CRSC PUSHJ P,CRKY PUSHJ P,CRRCMP PUSHJ P,DPLU PUSHJ P,CRRCMI DOTRNS: MOVEI B,STRUCT PUSHJ P,GET JRST BADATA HRRZM A,TTOX' ADDI A,1 HRRM A,TTGET MOVEI K,-1 JRST DOCRE0 DOERZ: PUSHJ P,@DOERZT(D) JRST DONE DOERZT: DOERAS DOMENT DOERAS: PUSHJ P,DOERA MOVEM A,FREP SETZM SYMS(M) PUSHJ P,DOERS PUSHJ P,DOERS1 SETZM TITL POPJ P, DOMENT: PUSHJ P,TTYON PUSHJ P,DOERA JFCL PUSHJ P,DOSAY0 PUSHJ P,DOSAY PUSHJ P,DOSAY9 JFCL POPJ P, CLEFP: MOVEI B,CLEF PUSHJ P,GET JRST BADATA HRREM A,CLEFPA' MOVEI B,NUMBER PUSHJ P,GET JRST BADATA SKIPLE A CAILE A,MAXNP" JRST BADATA MOVE B,CLEFPA MOVEM B,PRECLE"(A)-1 JRST DONE DPLU: PUSH P,DONEW MOVE B,[440700,,[ASCIZ ./NO EDIT ROUTINES\.]] JRST DOSAY5 PLOT: SETZB M,N ADDI H,1 SKIPGE A,COML(H) JRST DONE HLRZ B,SYMS(A) CAIE B,STRUCT JRST BADATA HRRZ J,SYMS(A) HRRZM A,PLOTLS' PLOTLP: ADDI H,1 SKIPGE A,COML(H) SOJA H,PLOTDO MOVE B,SYMS(A) CAMN B,[PUNCFM] JRST PLOTFM CAME B,[PUNCTO] SOJA H,PLOTDO PUSHJ P,NUMVAL MOVE N,A JRST PLOTLP PLOTFM: PUSHJ P,NUMVAL SKIPE A SUBI A,1 MOVE M,A JRST PLOTLP PLOTDO: SETZB B,L PLOTW: HLRZ C,TITL(B) JUMPE C,PLOTY CAME C,PLOTLS AOJA B,PLOTW HRR L,TITL(B) PLOTY: MOVEM H,PLOTRH' JRST .PLOT" .PLOTR": MOVE H,PLOTRH JRST PLOT DOSAY0: MOVE C,M DOSAY9: HLRZ B,SYMS(C) JRST DOSAY1 DOSAY: PUSHJ P,GCHEK DOSAY1: PUSHJ P,CRLF MOVEI A,40 CAIN B,STRUCT MOVEI A,"* CAIN B,HARMON MOVEI A,"# PUSHJ P,TYO PUSHJ P,DOSAY6 MOVEI D,0 DOSAY2: HLRZ A,TITL(D) JUMPE A,CPOPJ CAME A,C AOJA D,DOSAY2 MOVEI A,40 PUSHJ P,TYO HRR B,TITL(D) HRLI B,700 DOSAY5": ILDB A,B CAIN A,"\ POPJ P, PUSHJ P,TYO JRST DOSAY5 DOSAY6: SETZB A,E PUSHJ P,TYO6 MOVE B,[(600)SYMTAB-1 JUMPE C,DOSAY4 DOSAY3: ILDB A,B JUMPN A,.-1 CAIE C,1(E) AOJA E,DOSAY3 DOSAY4: ILDB A,B PUSHJ P,TYO6 CAIE A,40 JRST DOSAY4 POPJ P, DDTGO: SKIPA A,[LOGOUT] JRSTGO: PUSHJ P,NUMVOC CAILE A,17 CAILE A,MEMTOP JRST BADATA PUSHJ P,UWAIT" JRST (A) JRST SETUP LOGOUT: .LOGOUT .VALUE JRST SETUPX SYNN: MOVEI C,COML+1(H) MOVEI A,COML+2(H) HRRZ B,(A) HLRZ B,SYMS(D) HRRZ D,(C) HLRZ D,SYMS(D) MOVEM B,SYMS(C) JRST DONE SAVLOD: BLOCK 20 ALLOW: PUSH P,H ;TEST FOR GOODNESS PUSHJ P,ALLOWZ POP P,H JRST DONE ALLOWZ: PUSHJ P,RCOMN MOVSI C,-10. MOVE B,[(700)SLAK-1 SETZM SLAK+7 ALLOW0: ILDB A,B CAIE A,", CAIN A,"\ JRST ALLOW1 SUBI A,40 JUMPL A,ALLOW0 CAIGE A,100 SKIPE TYPE(A) JRST ALLOW0 MOVEM A,SLAK+10(C) AOBJN C,ALLOW0 ALLOW1: MOVEM B,ALLOWB' SETZM SLAK+10(C) CAMG C,[(,-8.) JRST ALLOWS MOVNM C,ALLOWC' PUSH P,F MOVEI F,SLAK+10 PUSHJ P,SS POP P,F MOVEI B,22 TRNE F,PLEASF MOVEI B,35 CAML A,B JRST ALLOWN MOVS C,ALLOWC HRRI C,10 MOVSI H,-STRLL PUSHJ P,GENAM2 MOVE B,ALLOWB LDB A,B CAIN A,", JRST ALLOW0 JRST DONE ALLOWS: MOVE B,[(700)[ASCII ./TOO SHORT\.]-1] JRST DOSAY5 ALLOWN: MOVE B,[(700)[ASCII ./RESEMBLES\.]-1] PUSHJ P,DOSAY5 MOVE C,NBEST' JRST DOSAY6 DOPARM: PUSHJ P,NUMVAL XCT DOPX(D) XCT DOPY(D) JRST DONE DOPX: JFCL PUSHJ P,DOPSSC JFCL JFCL PUSHJ P,DOPTMP PUSHJ P,SCRHK PUSHJ P,DOPSDN PUSHJ P,ARDSP DOPY: JFCL MOVEM A,SCRSPC MOVEM A,SCRINT MOVEM A,DETEMPO IFN 6V, MOVEM A,PLTDMY' IFE 6V, MOVEM A,PLTEMP-73+PDP6P MOVEM A,SCRSIZ MOVEM A,SLURDN MOVEM A,PLOWA ARDSIZ": 30 SCRSIZ": 60 SCRINT": 1 SLURDN": 2 PLOWS": 1 PLOWA: 0 DOPTMP: PUSH P,A IFE 6V,[ MOVE D,A ;CHANGE TEMPO MUL D,[(300000)] MOVEM D,PSTEMP SKIPL PLAYP JRST DOPTMQ .ACCESS 16,[76] .IOT 16,B SOJN B,DOPTMQ ;UNLESS PLAYING .ACCESS 16,[77] .IOT 16,B SOJL B,DOPTMQ ;UNLESS REALLY PLAYING .ACCESS 17,DOPTMT(B) MOVE C,DOPTMU(B) .IOT 17,C DOPTMQ: ] IFN 6V, JFCL POP P,A POPJ P, IFE 6V,[ DOPTMT: PLTEMP ;MI PSTEMP ;DAC DOPTMU: -1,,A ;MI -1,,D ;DAC ] DOPSSC: CAIG A,20. CAMGE A,[-20.] JRST BADATA PUSH P,A IMUL A,[14631,,463146] MOVEM A,SCRSPA POP P,A POPJ P, SCRSPA": 0 SCRSPC: 0 GET: MOVEI C,COML+1(H) ;GET NEXT SYL OF TYPE IN B GET2: SKIPGE (C) POPJ P, HRRZ A,(C) HLRZ A,SYMS(A) CAME A,B AOJA C,GET2 HRRZ B,(C) HRRZ A,SYMS(B) JRST SPOPJ DOPSDN: JUMPLE A,BADATA CAIL A,5 JRST BADATA POPJ P, SCRHK: MOVE B,A ASH B,-1 MOVEM B,ARDSIZ POPJ P, ARDSP: MOVEI B,0 SKIPN A MOVEI B,1 CAIN A,1 MOVNI B,1 MOVEM B,PLOWS POPJ P, TUFLUK": MOVEI A,"/ PUSHJ P,TYO BADATA: SKIPGE COML(H) JRST REALLY HLRZ F,COML(H) SKIPA A,["/ SSSA: MOVEI A,"? SSSA1: PUSHJ P,TYO MOVE A,(F) JUMPLE A,REALLY PUSHJ P,TYO6 AOJA F,SSSA1+1 SSSB": MOVEI A,"? PUSHJ P,TYO HLRZ F,COML(H) JRST SSSA1 EVENON=400000 CRRCMI: SKIPA J,[1] ;READ IN MUSIC, K=-1 MEANS TRANSLATE CRRDOL: TDZA K,K CRRCMP: MOVEI K,1 PUSHJ P,TTYON JUMPLE J,BADATA CAIL J,11 JRST BADATA SKIPN K PUSHJ P,CRLF SETZM CRFLAG'" JUMPN K,CRRCM1 CONO PTR,20 PUSHJ P,CRRBK JRST 4,.-1 CRRCM0: SETZM CRDELY' ;GET HERE FOR ALLREADS, MODE IN J, K DEVICE SETZM CRDELZ' MOVEM J,CRNPT' SOS CRNPT MOVNS J HRLZ M,J MOVEI L,1 PUSHJ P,PDAT SETZM CRRSP(M) SETZM CRPREV(M) AOBJN M,.-2 MOVE C,N CRRW1: PUSHJ P,CRGNB ;GET TIME JUMPE A,CROP2K ;IF END JUMPE K,CRRW6 MOVE B,CRGNBA' AOJE B,CRRW3 ;STOP SPEC CRRW6: SUB A,[(1)] ASH A,5 SKIPE K ASH A,9 IDIV A,DETEMPO EXCH A,CRDELY ADDM A,CRDELZ HRLZ M,J PUSHJ P,CRGNB CRRW2: MOVEI D,3 LSHC A,-12. CRR1: SOJL A,CROP11 ;IF DEAD PART CAMN A,CRPREV(M) JRST CROP11 ;IF NO CHANGE MOVE L,CRPREW(M) JUMPE A,CROP12 ;IF REST SKIPE CRPREV(M) PUSHJ P,PDAT1A CROP1: MOVE L,M CAILE L,5 SUBI L,6 ASH L,7 ADD L,A CROP10: MOVEM L,CRPREW(M) SETOM PLWN(L) ADD L,CRRSP(M) TROA L,EVENON CROP12: SETZM PLWN(L) ;SKIPPED OVER PUSHJ P,PDAT1 MOVEM A,CRPREV(M) CROP11: AOBJP M,CRRW1 ;IF FINISHED CHORD MOVEI A,0 ROTC A,6 SOJG D,CRR1 PUSHJ P,CRGNB0 JRST CRRW2 CRRW3: PUSHJ P,CRGNB MOVEI D,0 CRRW5: MOVE M,[220600,,A] CRRW4: ILDB B,M ASH B,11. MOVEM B,CRRSP(D) TLNE M,770000 AOJA D,CRRW4 CAML D,CRNPT JRST CRRW1 PUSHJ P,CRGNB0 AOJA D,CRRW5 CROP2K: JUMPE K,CROP2 PUSHJ P,.UNRED" CROP2": MOVEI L,0 PUSHJ P,PDAT CROP3: HRLM I,@FREP' EXCH I,FREP MOVE B,CRFLAG HRL I,CROP3T(B)+1 STASH: MOVEM I, JUMPE G,CPOPJ MOVE A,G JRST DPT CROP3T: STRUCT UNSTRU UNSTRU HARMON CRGNB0: JUMPN K,CRGNB5 CRGNB: JUMPN K,CRGNB6 ;GET NEXT BITE CAMN N,C PUSHJ P,CRRBK JRST CRGNB1 JRST .-2 CRGNB1: ILDB A,N POPJ P, CRGNB6: PUSHJ P,CRCUR ;NOT PTR, GET WORD MOVEM A,CRGNBA' HLRZS A POPJ P, CRGNB5: HRRZ A,CRGNBA POPJ P, CRRCM1: PUSH P,J MOVE J,DOCRN2' PUSHJ P,CRUT0 ;OPEN FILE PUSHJ P,.URED ;USES .IOT 4,A JRST BDHDR CAME A,[JRST 1] JRST CRRCM2 MOVE B,[440700,,[ASCII .(UNSTRUCTURED)\.] PUSHJ P,DOSAY5 POP P,J MOVEI K,1 MOVEI N,1 JRST CRRCM0 CRRCM2: CAME A,[JRST 4,1] JRST BDHDR MOVE B,[440700,,[ASCII .(STRUCTURED)\.] PUSHJ P,DOSAY5 SETOM CRFLAG SETZM CRINEQ' POP P,CRNPT PUSHJ P,.URED" JRST DATEXH MOVEM A,CRNPT MOVEI L,-1 MOVN J,I HRRM J,CRINA0 PUSHJ P,PDAT HRRM I,CRINA1 ADD I,A SETZB L,N PUSHJ P,PDAT CAIL I,FREEND"-3 JRST TUFLUK CRINE: SOSGE CRNPT JRST CRINF CRINA0: MOVEI J,(I) ;-BEG. CRINA1: HRRZM J, ;HEADER BLOCK AOS CRINA1 SETZM CRINTF' SETZM CRITM' HRRZM I,CRINM' CRINA2: PUSHJ P,.URED" JRST DATEXH JUMPL A,CRINA5 CAIL A,600000 JRST CRINA3 MOVE L,A TLO L,400000 PUSHJ P,PDAT JRST CRINA2 CRINA3: CAIN A,600000 JRST CRINA9 TRNN A,100000 JRST CRINA4 ;IF TIME SIG. ANDI A,77777 ;IF KEY SIG. TRNE A,40000 ORCMI A,77777 MOVE L,CRINAT(A) PUSHJ P,PDAT JRST CRINA2 CRINA5: SETOM CRINTF' JRST CRINA2 CRINA4: ANDI A,17777 HRLI A,200 MOVE L,A PUSHJ P,PDAT JRST CRINA2 CRINA9: MOVE G,CRINM ;WHERE MEASURE ENTRIES BEGIN SKIPL CRINTF JRST CRINC MOVEM I,CRINTF HRLI L,1000 PUSHJ P,PDAT CRINC: MOVEI L,0 ;END OF MEASURES AND END OF MEASURE PUSHJ P,PDAT SETZM CRITM CRINB: SKIPN (G) JRST CRINE1 ;NO MORE MEASURES SKIPL B,(G) AOJA G,CRINB XCT CRINA0 HRRZM J,(G) MOVE A,G CRINB0: SKIPN (A) JRST CRINB1 CAMN B,(A) HRRZM J,(A) AOJA A,CRINB0 CRINB1: PUSHJ P,.URED" JRST DATEXH CAIL A,600000 JRST CRINB4 PUSH P,I LDB J,[700,,A] ;J GETS LENGTH TRNE A,100000 ASH J,1 TRNN A,100000 IMULI J,3 LDB B,[70600,,A] ;B GETS PITCH MOVE D,CRITM ADDM J,CRITM CAIG B,1 JRST CRIB1A LDB M,[150200,,A] LDB N,[200200,,A] DPB N,[20200,,M] MOVE L,CRINBT(M) ;ARTIC DPB B,[220700,,L] MOVEI I,300 CRINB2: PUSHJ P,GCDD CAIG J,40 CAILE I,100 SOJA J,CRIB2A ;NO, BUT ... FAKE IT DPB J,[370500,,L] DPB I,[310600,,L] MOVEI I,300 MOVE J,D CRINB3: PUSHJ P,GCDD CAIGE J,200 CAILE I,100 SOJA J,CRIB3A DPB J,[60700,,L] DPB I,[600,,L] POP P,I PUSHJ P,PDAT JRST CRINB1 CRINB4: CAIL A,740000 JRST CRINB1 ;BEAT CAIN A,600000 JRST CRINC CAIGE A,700000 JRST CRINS CRINT: MOVE L,[400000,,104] ;TEMPO MOVEI B,4504. ANDI A,17777 IDIV B,A DPB B,[311200,,L] PUSHJ P,PDAT JRST CRINB1 CRINS: MOVSI L,400000 DPB A,[220700,,L] PUSHJ P,PDAT JRST CRINB1 CRINF: PUSHJ P,.UNRED" MOVE G,CRINEQ JRST CROP3 CRIB2A: AOS CRINEQ JRST CRINB2 CRIB3A: AOS CRINEQ JRST CRINB3 CRIB1A: POP P,I JRST CRINB1 CRINE1: SKIPN B,CRINTF JRST CRINE HRRM I,(B) CRINE3: PUSHJ P,.URED" JRST DATEXH MOVE L,A PUSHJ P,PDAT MOVE B,[440700,,A] CRINE2: ILDB C,B CAIN C,"\ JRST CRINE TLNE B,760000 JRST CRINE2 JRST CRINE3 CRINBT: 1_15 2_15 3_15 3_15 REPEAT 4,4_15 REPEAT 10,10_15 403,,443444 403,,443344 403,,343344 403,,343334 403,,333334 403,,333333 403,,330333 400,,330333 400,,330033 400,,30033 400,,30003 400,,3 CRINAT: 400,,0 400,,1000 401,,1000 401,,1100 401,,101100 401,,101110 401,,111110 401,,111111 401,,112111 402,,112111 402,,112211 402,,212211 402,,212221 CRCUR: JUMPL N,CRCUR5 ;IN BLOCK JUMPN N,CRCUR4 ;BEG. OF FILE PUSHJ P,.URED" ;CHECKSUM JRST DATEXH CAME A,CRCURM JRST CKSMER CRCUR4: PUSHJ P,.URED" JRST DATEXH MOVEM A,CRCURM' HLREM A,N ;WORD COUNT CAIN N,(JFCL) MOVEI A,0 JUMPE A,CPOPJ JUMPG A,BDHDR CRCUR5: PUSHJ P,.URED JRST DATEXH MOVE C,CRCURM ROT C,1 ADD C,A MOVEM C,CRCURM AOJA N,CPOPJ BDHDR: SKIPA B,[440700,,[ASCII ./BAD DATA IN FILE\.]] CKSMER: MOVE B,[440700,,[ASCII ./CHECKSUM ERROR\.]] JRST DEATH DATEXH: MOVE B,[440700,,[ASCII ./FILE UNEXPECTEDLY ENDS\.]] JRST DEATH PDAT1A: SETZM PLWN(L) PDAT1: HRL L,CRDELZ SETZM CRDELZ PDAT: MOVEM L,(I) CAIGE I,FREEND"-1 AOJA I,CPOPJ JRST TUFLUK DETEMPO: 883. CRPREV: BLOCK 10 CRPREW: BLOCK 10 CRRSP: BLOCK 10 ;NEW "RELAY" NUMBERS: (OLD PITCH-1) + 200*(MAN-1) NRNO==1400 DOTAP1: MOVE A,TAPTAB(C) PUSHJ P,TAPKIL" DOTAPE: SOSL C,NTAPES JRST DOTAP1 DOTAP2: AOS C,NTAPES CAIL C,NDIR JRST DONE MOVE D,COML(H) JUMPL D,DONE HLRZ B,SYMS(D) CAIE B,NUMBER JRST BADATA HRRZ A,SYMS(D) PUSHJ P,FILEST" JRST SSSB MOVEM A,TAPTAB(C) AOJA H,DOTAP2 CRUT: TDZA L,L CRUT0: MOVEI L,1 JUMPL J,CRUT1 MOVE A,J PUSHJ P,TAPCK PUSHJ P,NAMFIL CRUT4: PUSHJ P,TTYON PUSHJ P,FIND JRST FNF JRST CRUT2 CRUT1: MOVEI A,0 PUSHJ P,NAMFIL ;DECODE FILE NAME JUMPN A,CRUT4 PUSHJ P,FINDIT PUSHJ P,TTYON CRUT2: JUMPN L,CPOPJ PUSHJ P,.URED" JRST BADATA HRRZ B,A JUMPN B,CRUTM MOVN C,A CRUT3: PUSHJ P,.URED" JRST BADATA MOVEM A,SLAK(C) AOBJN C,CRUT3 ADDI C,SLAK-1 PUSHJ P,DOTITE JRST CRUT2 CRUTM: HRREM A,CRFLAG' HLRZ C,A MOVEI L,(A) PUSHJ P,PDAT CRUTM1: PUSHJ P,.URED" JRST BADATA MOVE L,A PUSHJ P,PDAT SOJG C,CRUTM1 MOVEI G,0 JRST CROP3 TAPCK: MOVE C,NTAPES' CAME A,TAPTAB-1(C) SOJG C,.-1 JUMPLE C,BADATA POPJ P, NAMFIL: PUSH P,A PUSHJ P,RCOMN ;GET FILE NAME MOVE C,[(700)SLAK-1 MOVSI K,400000 NAMFL0: MOVE J,K NAMFL9: MOVSI K,400000 MOVE D,[440600,,K] NAMFL1: ILDB E,C CAIN E,"\ JRST NAMFL2 SUBI E,40 JUMPL E,NAMFL1 ;IGNORE LOOSING CHARS. JUMPE E,NAMFL0 CAIN E,'; JRST NAMFL3 CAIN E,': JRST NAMFL4 CAIL E,100 JRST NAMFL1 TLNE D,770000 IDPB E,D JRST NAMFL1 NAMFL2: MOVEM J,NAMA' MOVEM K,NAMB' POP P,A POPJ P, NAMFL3: MOVE A,K PUSHJ P,FILEST" JRST BADSNM JRST NAMFL9 NAMFL4: HLRZM K,(P) JRST NAMFL9 BADSNM: MOVE B,[440700,,[ASCII ./BAD SYSTEM NAME\.]] JRST DEATH FIND: PUSHJ P,FILEST" JRST SSSB MOVE A,NAMA' MOVE B,NAMB' PUSHJ P,OPNRD" POPJ P, JRST SPOPJ FINDIT: MOVE C,NTAPES JUMPLE C,WRITW1 FINDT1: JUMPLE C,FNF MOVE A,TAPTAB-1(C) PUSHJ P,FIND SOJA C,FINDT1 POPJ P, FNF: MOVE B,[440700,,[ASCII ./FILE NOT FOUND\.]] JRST DEATH PRINT: SOJ H, PUSH P,DONEW PRINT1: AOJ H, MOVE B,[HARMON] PUSHJ P,GET SKIPA B,[GOTO] ;MAY BE VOICE JRST PHARM PUSHJ P,GET SKIPA B,[NUMBER] JRST PVOICE PUSHJ P,GET SKIPA B,[MODALL] JRST PNUMB PUSHJ P,GET SKIPA B,0 JRST PALL PUSHJ P,GET SKIPA JRST PNIL POPJ P, PNIL: .VALUE ;PRINT A NOTHING JRST PRINT1 PHARM: .VALUE ;PRINT HARMONIC STRUCTURE TABLE JRST PRINT1 PNUMB: MOVE B,A PNUM1: IDIVI B,10. MOVEI A,60(C) PUSHJ P,TYO JUMPN B,PNUM1 JRST PRINT1 PALL: .VALUE POPJ P, PVOICE: .VALUE POPJ P, WRIT: MOVEI B,UNSTRU PUSHJ P,GET SKIPA B,[STRUCT] JRST WRIT10 PUSHJ P,GET SKIPA B,[HARMON] JRST WRIT10 PUSHJ P,GET JRST BADATA WRIT10: PUSH P,B MOVEI B,NUMBER PUSHJ P,GET JRST WRITW PUSHJ P,TAPCK WRIT13: PUSHJ P,NAMFIL PUSHJ P,FILEST" JRST SSSB MOVE A,NAMA MOVE B,NAMB PUSHJ P,OPNWR" JRST TUFLUK POP P,C MOVEI D,0 WRIT11: HLRZ A,TITL(D) JUMPE A,WRIT2 CAME A,C AOJA D,WRIT11 HRRZ B,TITL(D) PUSHJ P,WRITE WRIT2: HRRZ B,SYMS(C) PUSHJ P,WRITE MOVE A,NAMA MOVE B,NAMB PUSHJ P,FILE" JRST TUFLUK JRST DONE WRITE: HLRZ D,(B) SUBI D,1(B) MOVS A,D HRR A,(B) PUSHJ P,.UWR" JRST TUFLUK WRIT12: MOVE A,1(B) PUSHJ P,.UWR" JRST TUFLUK ADDI B,1 SOJG D,WRIT12 POPJ P, WRITW: SKIPG NTAPES JRST WRITW1 MOVE A,TIME IDIV A,NTAPES MOVE A,TAPTAB(B) JRST WRIT13 WRITW1: MOVE B,[(700)[ASCII ./NO TAPES\.]-1] DEATH": PUSHJ P,DOSAY5 JRST REALLY CRSC: MOVE 0,[(1)SAVAC BLT 0,SAVAC+16 PUSHJ P,SMOLGN" MOVE 0,[(SAVAC)1 BLT 0,17 PUSHJ P,CRLF MOVE C,SMOLTM" LSH C,-7 IOR C,[ASCII ./ \.] MOVE B,[(700)B PUSHJ P,DOSAY5 MOVEI L,1 PUSHJ P,PDAT SETZB G,CRFLAG' SETZB A,CRSCD' CRSC0: MOVE L,SMOLTM"(A)+1 JUMPE L,CRSC1 IMUL L,[(,-1000) MOVE M,L ASH M,-3 SUB L,M HRR L,SMOLPT"(A)+1 HRR L,SMOLCP(L) PUSH P,L TRO L,EVENON HLL L,CRSCD MOVEM M,CRSCD PUSHJ P,PDAT POP P,L PUSHJ P,PDAT AOJA A,CRSC0 CRSC1: SKIPE SMOLTM+1(A)+1 AOJA A,CRSC0 JRST CROP2 SMOLCP: 45 46 50 52 53 55 57 60 CRKY: PUSHJ P,TTYON PUSHJ P,CRLFQ SETZM CRKYS1' MOVE A,[(4)200000 MOVEM A,CRKYS2' CRKYR: MOVEI L,1 PUSHJ P,PDAT SETZB G,CRFLAG' CONO 724,1 MOVEM L,CRKYDS' CRKY3: CONSO 724,2 JRST .-1 CONO 724,1 SOS CRKYD' CRKY1: DATAI 724,A MOVE C,A XOR A,CRKYS1' MOVE B,A JUMPE A,CRKY2 SUBI A,1 ANDCA A,B XORM A,CRKYS1' ANDM A,C TLNN A,777000 TLOA A,32000 PUSHJ P,CRKY10 CRKY11: FAD A,[0 LSH A,-33 CAILE A,27 ADDI A,22 ADDI A,61 CRKY13: SKIPE C TRO A,EVENON SOSL CRKYDS' SETZM CRKYD HRL A,CRKYD' MOVE L,A PUSHJ P,PDAT SETZM CRKYD JUMPN M,CRKY2 JRST CRKY1 CRKY10: LSH A,-11 TLO A,43000 POPJ P, CRKY2: DATAI 730,A MOVE C,A XOR A,CRKYS2' MOVE B,A JUMPE A,CRKY3 SUBI A,1 ANDCA A,B XORM A,CRKYS2' ANDM A,C TLNN A,777000 TLOA A,32000 PUSHJ P,CRKY10 CRKY21: FAD A,[0 LSH A,-33 CAIGE A,27 JRST CRKY22 ADDI A,15 AOJA M,CRKY13 CRKY22: JUMPE C,CRKY2 CAIN A,24 JRST CROP2 CAIE A,20 JRST CRKY2 MOVE I,FREP' JRST CRKYR DEFINE CONCAT A,B A!B!TERMIN TTSTOU: MOVEI L,1 PUSHJ P,PDAT SETZB N,CRDELZ' SETZB G,K TTGET: MOVE A,(K) JUMPE A,TTGET1 ADD A,TTOX MOVEM A,MEAS(K) PUSHJ P,TT123Y AOJA K,TTGET TTGET1: MOVEM K,TTMG' ;# OF LINES SETZB H,CRFLAG' TT0: MOVEI M,0 MOVSI J,377777 TRO F,NOMORF TT11: CAMN M,TTMG JRST TT111 SKIPGE MEAS(M) AOJA M,TT11 TRZ F,NOMORF MOVE A,@LOCA(M) ;NOTE ENTRY LDB B,[A(60700) ;NUM LDB C,[A(600) ;DEN IMUL B,TEMPF(M) IDIV B,C ;COUNTS INTO MEASURE ADD B,MSTM(M) CAMGE B,J MOVE K,M ;PART CAMGE B,J MOVEM B,J AOJA M,TT11 TT111: MOVEI M,0 TT112: CAMN M,H JRST TT12 TRZ F,NOMORF HLRZ B,ALIVE(M) CAMGE B,J MOVEI K,ALIVE(M) ;PART+ALIVE CAMGE B,J MOVEM B,J AOJA M,TT112 TT12: TRNE F,NOMORF JRST CROP2 EXCH N,J SUB J,N ADDM J,CRDELZ' CAIGE K,ALIVE JRST TT120 MOVE L,(K) ;COMPILE 'OFF' PUSHJ P,PDAT1A HRLI K,1(K) BLT K,ALIVE-1(H) SOJA H,TT0 TT120: LDB A,[(220700)@LOCA(K)] ;COMPILE 'ON' MOVE B,K CAILE B,5 SUBI B,6 ASH B,7 ADDI B,-1(A) CAIGE H,ALIVEL SKIPE PLWN(B) AOJA G,[SOJA H,TT0A] ;FORGET IT TT1205: MOVEI L,EVENON(B) SETOM PLWN(B) PUSHJ P,PDAT1 TT121: LDB A,[(150500)@LOCA(K)] ;ARTIC. FIELD CAILE A,10 MOVEI A,5 LDB C,[(370400)@LOCA(K)] ;N LDB D,[(310600)@LOCA(K)] ;D CAIGE A,5 MOVEI C,1 IMUL C,TTART1(A) IMUL D,TTART2(A) IMUL C,TEMPF(K) IDIV C,D LDB D,[(370400)@LOCA(K)] LDB E,[(310600)@LOCA(K)] IMUL D,TEMPF(K) IDIV D,E LDB E,[(60700)@LOCA(K)] LDB A,[(600)@LOCA(K)] IMUL E,TEMPF(K) IDIV E,A ADD D,E ADD D,MSTM(K) SUB D,C HRL B,D MOVEM B,ALIVE+1(H) TT0A: PUSHJ P,TT122 ;AOSES H JRST TT0 TT122: AOSA A,LOCA(K) TT122A: MOVE A,(A) ;NOTE ENTRY JUMPE A,TT123 TLNE A,177 TLNN A,377600 SKIPL A JRST TT122M LDB C,[(600)A] ;TEMPO WD. LDB D,[(60700)A] IMULI C,30000. LDB E,[(311200)A] IMUL D,E IDIV C,D MOVEM C,TEMPF(K) JRST TT122 TT123: SOS LOCA(K) ;END OF MEASURE SKIPGE MEAS(K) JRST TT123X TT123U: AOS A,MEAS(K) TT123Y: MOVEM N,MSTM(K) MOVE A,(A) ;MEASURE ENTRY JUMPE A,TT123X LDB B,[(311300)A] JUMPN B,TT123U TT124: ADD A,TTOX MOVEM A,LOCA(K) ;MEASURE PTR. JRST TT122A TT123X: SETOM MEAS(K) TT122M: AOJA H,CPOPJ TTART1: 0 1 3 1 1 1 3 1 1 TTART2: 1 10 20 4 2 10 20 4 2 DOERA: HRRZ N,(P) MOVE A,COML+1(H) JUMPL A,BADATA MOVE A,SYMS(A) CAME A,[MODALL JRST DOERA1 SKIPL COML+2(H) JRST BADATA CAIN N,DOERAS+1 TRNE F,PLEASF SKIPA JRST BADATA MOVEI A,FREE" XCT (N) XCT 4(N) MOVE M,NSYMS SOJL M,DOERAX DOERA4: HLRZ A,SYMS(M) CAIN A,HARMON XCT 1(N) CAIE A,STRUCT CAIN A,UNSTRU XCT 1(N) SOJGE M,DOERA4 JRST DOERAX DOERA1: CAME A,[MODEXC] AOJA H,DOERA3 ADDI H,2 MOVEI A,COML(H) DOERA2: MOVE C,(A) JUMPL C,DOERA5 HLRZ C,SYMS(C) CAIN C,HARMON AOJA A,DOERA2 CAIE C,STRUCT CAIN C,UNSTRU AOJA A,DOERA2 JRST BADATA DOERA3: SKIPGE COML(H) JRST DOERAX XCT 2(N) AOJA H,DOERA3 DOERA5: ADD C,NSYMS DOERA7: HLRZ A,SYMS(C) CAIN A,HARMON JRST DOERA6 CAIE A,STRUCT CAIN A,UNSTRU JRST DOERA6 DOERA0: SOJGE C,DOERA7 DOERAX: POP P,A JRST 5(N) DOERA6: MOVEI B,COML(H) DOERA9: SKIPGE (B) JRST DOERA8 HRRZ A,(B) CAME A,C AOJA B,DOERA9 JRST DOERA0 DOERA8: XCT 3(N) JRST DOERA0 ;DOERS USES A,B,C,D DOERS: PUSHJ P,GCHEK DOERS1: MOVEM C,DOERSC' HRRZ B,SYMS(C) SETZM SYMS(C) IFE 6V, HRRM C,RUDGE0 PUSHJ P,RUDGE MOVEI D,0 DOERS5: HLRZ B,TITL(D) JUMPE B,DOERS9 CAME B,DOERSC AOJA D,DOERS5 DOERS8: HRRZ B,TITL(D) HRLI A,TITL+1(D) HRRI A,TITL(D) BLT A,TITL+TITLL-2 PUSHJ P,RUDGE DOERS9: MOVE C,DOERSC POPJ P, RUDGE: MOVEM B,RUDGEB' ;BLOCK ORIGIN MOVEM B,RUDGER' AOS RUDGER HLRZ D,(B) ;BLOCK END+1 SUBM B,D HLRZ B,(B) RUDGE7: HLRZ A,(B) CAMLE A,B CAILE A,FREEND" JRST RUDGE5 MOVE C,A ADD C,D HRLM C,(B) MOVE B,A JRST RUDGE7 RUDGE5: MOVE B,RUDGEB HLL B,(B) BLT B,FREEND"(D) ADDM D,FREP MOVE C,NSYMS RUDGE2: HRRZ A,SYMS(C)-1 CAMGE A,RUDGEB JRST RUDGE3 HLRZ A,SYMS(C)-1 CAIE A,STRUCT CAIN A,UNSTRU JRST RUDGE4 CAIN A,HARMON JRST RUDGE4 RUDGE3: SOJG C,RUDGE2 MOVEI C,0 RUDGE6: HRRZ B,TITL(C) JUMPE B,RUDGE8 CAMLE B,RUDGEB ADDM D,TITL(C) AOJA C,RUDGE6 RUDGE8:IFE 6V,[ MOVSI C,PSGTLT-HARCDE RUDGE9: HRRZ B,PSGTLT(C) CAMN B,RUDGER RUDGE0: HRROI B, ;SYM # CAMLE B,RUDGEB ADDM D,PSGTLT(C) SKIPGE B MOVEM B,PSGTLT(C) AOBJN C,RUDGE9 ] POPJ P, RUDGE4: CAMN A,RUDGEB MOVNM D,SYMS(C)-1 ADDM D,SYMS(C)-1 JRST RUDGE3 GCHEK: HRRZ C,COML(H) HLRZ B,SYMS(C) CAIN B,HARMON POPJ P, CAIE B,STRUCT CAIN B,UNSTRU POPJ P, JRST BADATA NUMVLV: MOVEI A,10. HRRM A,NUMVL8 TRZ F,BEGUNF JRST NUMVLW NUMVOC: SKIPA A,[10 NUMVAL: MOVEI A,10. HRRM A,NUMVL8 TRO F,BEGUNF NUMVLW: MOVEI C,COML+1(H) TRZ F,PREVCF+MINUSF MOVEI A,0 NUMVL1: SKIPGE (C) JRST NUMVL9 HRRZ B,(C) HLRZ B,SYMS(B) CAIE B,MINUS JRST NUMVL3 TRO F,BEGUNF TRON F,MINUSF+PREVCF AOJA C,NUMVL1 NUMVL9: MOVEI H,.-COML-$."-1(C) TRZE F,MINUSF MOVNS A POPJ P, NUMVL2: CAIE B,NUMBER JRST NUMVLX HRRZ B,(C) HRRZ B,SYMS(B) NUMVL8: IMULI A,10. ADD A,B NUMVL0: TRO F,PREVCF+BEGUNF AOJA C,NUMVL1 NUMVL3: CAIE B,MULTIP JRST NUMVL2 HRRZ B,(C) HRRZ B,SYMS(B) ADD B,NUMVL8 IMUL A,-10(B) JRST NUMVL0 NUMVLX: TRNE F,BEGUNF JRST NUMVL9 AOJA C,NUMVL1 DOVALU: MOVE C,COML(H) JUMPL C,DONE PUSHJ P,CRLF HLRZ A,SYMS(C) CAIE A,PARAM JRST DOVAL4 HRRZ A,SYMS(C) HLRZ B,DOPY(A) CAIN B,(JFCL) AOJA H,DOVALU CAIE B,(MOVEM A,) JRST SSSB MOVE A,@DOPY(A) DOVAL5: PUSHJ P,DPT AOJA H,DOVALU DOVAL4: MOVE A,SYMS(C) CAMN A,[(GOTO)17] JRST DOVAL6 CAME A,[(GOTO)12 JRST BADATA MOVE A,TUNVAL' JRST DOVAL5 DOVAL6: MOVSI D,-MAXNP" SETZM DOVALW' DOVAL9: SKIPGE E,PRECLE"(D) JRST DOVAL8 MOVE B,[440700,,[ASCII ., \.]] SKIPGE DOVALW PUSHJ P,DOSAY5 HRLI E,CLEF HRLZ C,NNSYMS CAME E,SYMS(C) AOBJN C,.-1 MOVEI A,1(D) PUSHJ P,DPT JUMPGE C,DOVAL7 MOVEI C,(C) PUSHJ P,DOSAY6 JRST DOVAL8 DOVAL7: MOVE B,[440700,,[ASCII . ?\.]] PUSHJ P,DOSAY5 DOVAL8: SETOM DOVALW AOBJN D,DOVAL9 AOJA H,DOVALU DOLIST: PUSHJ P,CRLF PUSHJ P,TTYON PUSHJ P,NUMVOC MOVEM A,G MOVE C,NSYMS SUBI C,1 DOLST1: JUMPL C,DONE HLRZ A,SYMS(C) CAME A,G SOJA C,DOLST1 PUSHJ P,DOSAY6 PUSHJ P,CRLF SOJA C,DOLST1 DOTITL: MOVE A,COML(H)+1 JUMPL A,BADATA HLRZ B,SYMS(A) CAIN B,HARMON JRST DOTIT1 CAIE B,UNSTRU CAIN B,STRUCT JRST DOTIT1 JRST BADATA DOTIT1: HRRZM A,DOTITA' PUSHJ P,RCOMN PUSHJ P,DOTITE JRST RCS DOTITE: PUSHJ P,TTYOFF MOVEM C,DOERSC' MOVEI D,0 DOTIT2: CAIL D,TITLL-1 JRST TUFLUK HLRZ A,TITL(D) JUMPE A,DOTIT3 CAME A,DOTITA AOJA D,DOTIT2 PUSHJ P,DOERS8 ;TO ERASE OLD TITLE DOTIT3: MOVE I,FREP MOVEI D,0 SKIPE TITL(D) AOJA D,.-1 HRL A,DOTITA HRR A,I MOVE B,I HRLI B,SLAK-1 ADDI I,2(C) SUBI I,SLAK CAIL I,FREEND" JRST TUFLUK BLT B,(I) HRLZM I,@FREP MOVEM I,FREP MOVEM A,TITL(D) SETZM TITL+1(D) POPJ P, IFE 6V,[ SCLBLD: MOVE A,[-1] MOVEM A,HARN JRST HARBLD HARAUG: TDZA G,G ;AUGMENT HST HARSCL: MOVNI G,1 JRST HARC HARBLD: MOVEI G,1 ;BUILD HST HARC: ADDI H,1 MOVE B,COML(H) HLRZ A,SYMS(B) JUMPLE G,HARC1 JUMPE A,HARC3 ;EX NIHILO HARC1: CAIE A,HARMON JRST BADATA ;CAN'T BUILD FROM THIS HRRZ B,SYMS(B) AOJA B,HARC2 HARC3: MOVE I,FREP ;BUILD CAIL I,FREEND"-402 JRST TUFLUK HRRM I,SYMS(B) ;CALL IT A HST MOVEI A,HARMON HRLM A,SYMS(B) ADDI I,401 HRL A,I HRRI A,2 MOVEM A,-401(I) MOVEM I,FREP SETZM -400(I) MOVEI A,-377(I) HRLI A,-400(I) BLT A,-1(I) MOVEI B,-400(I) HARC2: HRRM B,HART ;DROPS THRU HARBL1: PUSHJ P,NUMVAL ADDI H,1 MOVE E,COML(H) JUMPL E,HARBL8 MOVE B,SYMS(E) CAMN B,[PUNCCL] HARBL8: CAIL A,5 ;FOUR CHANNELS ONLY JRST BADATA HARBL0: JUMPL A,BADATA MOVE L,A JUMPLE G,HARBL9 MOVSI D,-400 MOVE C,[MOVEM C,@HART] SKIPE L MOVE C,[DPB C,@HART(L)] MOVEM C,HARBM2 MOVEI C,0 HARBM2: MOVEM C,@HART ;OR DPB C,@HART(L) AOBJN D,HARBM2 HARBL9: JUMPL E,DONE MOVSI D,-400 HARTO: PUSHJ P,NUMVAL ADDI H,1 MOVE B,COML(H) JUMPL B,BADATA MOVE B,SYMS(B) CAME B,HARTOQ(G)+1 ;COMMAS ONLY HERE JRST BADATA HRRM A,HARMN ;HARMONIC # MOVEM A,HARSN1' PUSHJ P,NUMVAL MOVE E,COML(H)+1 JUMPL E,HARBL2 MOVE B,SYMS(E) CAME B,[PUNCSC] ;SEMI-COLONS ONLY, DROPS THRU JRST BADATA HARBL2: MOVEM A,HARSN2' JUMPL G,HARSC CAILE A,2000. ;LET'S BE REASONABLE JRST BADATA MOVMM A,HARAM' ;MAGNITUDE IDIV A,HARAM MOVEM A,HARAS' ;SIGN HARL: SKIPE HARSN1 ;HARMONIC # JRST HARL2 PUSHJ P,RANDOM ;WHITE NOISE IDIVI A,2048. JRST HARL3 HARL2: MOVEI A,(D) HARMN: SKIPE HARN' JRST HARNT ;USE PIANO SCALE IMULI A, IMUL A,HARAS HARMN2: PUSHJ P,XSIN HARL3: ADDI B,2047. IMUL B,HARAM IDIVI B,16000. JUMPN L,HARSC0 MOVE L,[-4,,1] HARSC0: LDB A,HARPT(L)-1 ADD A,B HARSC1: CAIL A,700 JRST HAROF ;OVERFLOW DPB A,HARPT(L)-1 JUMPGE L,HARMN5 AOBJN L,HARSC0 MOVEI L,0 HARMN5: AOBJN D,HARL1 ;NEXT CYCLE AOJA H,HARBL9 ;NEXT HARMONIC HARL1: JUMPGE G,HARL JRST HARSC HARTOQ: PUNCSL PUNCCM PUNCCM HARSC: JUMPN L,HARSC8 MOVE L,[-4,,1] HARSC8: LDB A,HARPT(L)-1 IMUL A,HARSN1 IDIV A,HARSN2 CAIL A,700 JRST HAROF DPB A,HARPT(L)-1 JUMPGE L,HARMN5 AOBJN L,HARSC8 MOVEI L,0 JRST HARMN5 HARPT: (1100)@HART HART: (111100+D) (221100)@HART (331100)@HART HAROF: MOVE B,[(700)[ASCII ./OVERFLOW\.]-1] PUSHJ P,DOSAY5 JRST DONE PSNTM1==0 PSNTM2==0 PSNTM3==0 PSNTM4==0 HARNT: PUSH P,B PUSH P,A HRRZ A,HARMN IDIVI A,12 ;SCALE IT MOVE B,TWTABL(B) ;TWELFTH ROOT OF 2 IMULI B,A ;FULL RANGE POP P,A IMULI A,B ;RESTORE POP P,B JRST HARMN2 HARWT: PSNTM1 PSNTM2 PSNTM3 PSNTM4 ] COS": FADR A,[1.57079631847] SIN": MOVM B,A CAMGE B,[.001 POPJ P, FDV B,[1.57079631847 CAMG B,[1.0 JRST SINS2 MULI B,400 ASH C,-202(B) MOVEI B,200 ROT C,3 LSHC B,33 FAD B,[0 JUMPE C,SINS2 TLCE C,1000 FSB B,[1.0 TLCE C,3000 TLNN C,3000 MOVNS B SINS2: SKIPGE A MOVNS B MOVEM B,A FMPR B,B MOVE C,[.00015148419 FMP C,B FAD C,[-.00467376557 FMP C,B FAD C,[.07968967928 FMP C,B FAD C,[-.64596371106 FMP C,B FAD C,[1.57079631847 FMPR A,C POPJ P, XSIN: TLC A,232000 FAD A,A FMP A,[.02454369248 PUSHJ P,SIN FMP A,[2047.0 MULI A,400 TSC A,A ASH B,-243(A) POPJ P, ;RANGE OF B: -2047. TO +2047. ATAN": PUSH P,B MOVM B,A CAMG B,[145000000000] JRST ATANX MOVEM A,C2' CAML B,A2 JRST AT4 PUSH P,C MOVSI C,201400 PUSH P,CMOVNS CAMG B,C AOSA (P) FDVM C, B MOVEM B,C3' FMP B, B MOVE C,KB3 FAD C, B MOVE A,KA3 FDVM A,C FAD C, B FAD C,KB2 MOVE A,KA2 FDVM A,C FAD C,B FAD C,KB1 MOVE A,KA1 FDV A,C FAD A,KB0 FMP A,C3' FSBR A,[200622077325] XCT (P) FADR A,[200622077325] SKIPA C,-1(P) AT4: SKIPA A,A3 SUB P,[2,,2] SKIPGE C2' CMOVNS: MOVNS A ATANX: POP P,B POPJ P", A2: 233000000000 A3: 201622077325 KB0: 0.1746554388 KB1: 6.762139240 KB2: 3.316335425 KB3: 1.448631538 KA1: 3.709256262 KA2: -7.106760045 KA3: -0.2647686202 ;FLOATING POINT SQUARE ROOT FUNCTION SQRT": MOVEM B,BSAV MOVMS A JUMPLE A,SQ2 ASHC A,-33 SUBI A,201 ROT A,-1 HRRM A,SQ1 LSH A,-43 ASH B,-10 FSC B,177(A) MOVEM B,ST FMP B,S1(A) FAD B,S2(A) MOVE A,ST FDV A,B FAD B,A FSC B,-1 MOVE A,ST FDV A,B FADR A,B SQ1: FSC A,0 SQ2: MOVE B,BSAV POPJ P", S1: 0.8125 0.578125 S2: 0.302734 0.421875 ST: 0 BSAV: 0 SCWAV: PUSHJ P,TTYON MOVEI B,NUMBER PUSHJ P,GET JRST BADATA MOVE D,A MOVEI B,HARMON PUSHJ P,GET JRST BADATA ADDI A,1 HRRM A,SCWAVT SCWAV1: MOVSI A,-400 PUSHJ P,UWAIT" CONO 4000+APRCHN ;CLK ENBL OFF SCWAV2: LDB B,SCWAVT(D)-1 DPB A,[111100,,B] MOVEM B,32 AOBJN A,SCWAV2 JRST SCWAV1 SCWAVT: 1100,,(A) 111100,,@SCWAVT 221100,,@SCWAVT 331100,,@SCWAVT ;CRRBK USES A,B,C,E; INITIALIZES N CRRBK: MOVE N,[(2200)SLAK-1 PUSHJ P,R3B JRST .-1 CAIL A,400000 JRST SPOPJ MOVEM A,CRBSP' JRST CRBC CRBLOK: CONO PTR,20 PUSHJ P,R3B JRST .-1 CAME A,CRBSP JRST REALLY CRBC: PUSHJ P,R3B JRST CRBLOK ADD A,CRBSP MOVEM A,CRCKSM' SUB A,CRBSP SUB A,CRBSP CAILE A,0 CAILE A,100 JRST 4,CRBLOK MOVE C,[(2200)SLAK-1 MOVEM A,E CRBWD: PUSHJ P,R3B JRST CRBLOK IDPB A,C ADD A,CRCKSM CAIL A,-1 SUBI A,-1 MOVEM A,CRCKSM SOJG E,CRBWD CR1R: PUSHJ P,R3B JRST CRBLOK CAME A,CRCKSM JRST 4,CRBLOK POPJ P, R3B: PUSHJ P,R1B POPJ P, MOVE B,A PUSHJ P,R1B POPJ P, ROT A,-6 ROTC A,6 PUSHJ P,R1B POPJ P, ROT A,-6 ROTC A,-30. JRST SPOPJ R1B: PUSHJ P,RPA CAIL A,400 JRST 4,CPOPJ TRZE A,200 TRZE A,100 JRST R1B SPOPJ: AOS (P) CPOPJ: POPJ P, RPA: CONSO PTR,10 JRST .-1 DATAI PTR,A POPJ P, TYI": .IOT 1,A POPJ P, CRLFQ: SKIPE BKD' POPJ P, CRLF": MOVEI A,15 PUSHJ P,TYO SKIPA A,[12] TYO6": ADDI A,40 TYO": .IOT 2,A POPJ P, IFE 6V,[ PSGTR: MOVEM B,PSGTRP' MOVE 0,[(SAVAC)1] BLT 0,17 MOVE B,[440700,,[ASCII . /STOP \.]] SKIPN PSGTRP MOVE B,[440700,,[ASCII . /VOICE \.]] SKIPN PSGTRP MOVEM A,PSGTRP PUSHJ P,DOSAY5 MOVE A,PSGTRP PUSHJ P,DPT MOVE B,[440700,,[ASCII . NOT SPECIFIED/ \.]] JUMPE 0,PSGTR6 MOVE B,[440700,,[ASCII . HARMONICS\.]] PUSHJ P,DOSAY5 HRRZ C,0 PUSHJ P,DOSAY6 MOVE B,[440700,,[ASCII . NOT BUILT/ \.]] PSGTR6: PUSHJ P,DOSAY5 JRST PLDONE VOXPT: TDZA G,G ;ASSIGN HST TO VOICE VOXCD: MOVEI G,1 MOVEI B,HARMON PUSHJ P,GET JRST VOXCD1 ;NOT HST VOXCD2: MOVEI J,1(A) PUSHJ P,NUMVLV JUMPLE A,BADATA ;NOT NOTHING EITHER CAMLE A,VOXSLT(G) JRST BADATA MOVEM J,@VOXSTT(G) JRST DONE VOXCD1: MOVEI B,0 PUSHJ P,GET JRST BADATA JRST VOXCD2 VOXSTT: PSGTLT(A)-1 HARCOD(A)-1 VOXSLT: 10 30 ] DPT: JUMPGE A,DPT1 MOVN B,A MOVEI A,"- PUSHJ P,TYO MOVE A,B DPT1: IDIVI A,10. JUMPE A,TYN PUSH P,B PUSHJ P,DPT POP P,B TYN: MOVEI A,60(B) JRST TYO TTYON: TTYOFF: POPJ P, IFN 6V,[ HARAUG: HARSCL: HARBLD: PLGOA: PSGOA: PLWHOA: VOXPT: VOXCD: MOVE B,[440700,,[ASCII ./SORRY, NO PLAYER ROUTINES \.]] JRST DEATH" ] IFE 6V,[ ;MI PLAYER, ENTER AT PLGOA PSGOA: SKIPA A,[PSGTF] PLGOA: MOVEI A,PLWHY1 HRRM A,PLWHY PUSHJ P,CRLFQ PUSHJ P,TTYON JRST PLGO PLGNP: ADDI H,1 SKIPGE COML(H) JRST PLDNE HRRZ A,COML(H) HLRZ B,SYMS(A) CAIE B,UNSTRU JRST NOTSTR MOVE B,SYMS(A) HRRM B,PLWHRE HRRZM B,PSDATL SKIPGE PLAYP PLWHY: JRST PUSHJ P,TUNER PLWHYT: .ACCESS 16,[76] .IOT 16,A ;SEE IF IT'S TUNED AOJN A,PLWHYT JRST PLWHY PLWHOA: SKIPL PLAYP AOJA H,DO1 PLWHA1: .ACCESS 16,[77] .IOT 16,A SOJL A,PLWHA3 .ACCESS 17,PLWHAT(A) .ACCESS 16,PLWHAT(A) .IOT 16,D ;SAVE WORD MOVE C,[-1,,[JRST 100]] .IOT 17,C ;CLOBBER PLWHA2: .ACCESS 16,[77] .IOT 16,B JUMPN B,PLWHA2 ;WAIT UNTIL STOPPED MOVE C,[-1,,D] .ACCESS 17,PLWHAT(A) .IOT 17,C ;RESTORE PLWHA3: AOJA H,DO1 PLWHAT: PLAY1 ;MI PLAY2 ;DAC PLWHY1: MOVEI 0,0 .ACCESS 17,[MUSDAT] PLWHRE: HLRZ B, AOS PLWHRE HRRZ A,PLWHRE SUBI A,(B) HRL A,A HRR A,PLWHRE .IOT 17,A .ACCESS 17,[77] MOVE A,[-1,,[1]] .IOT 17,A .ACCESS 17,[76] MOVE A,[-1,,[1]] .IOT 17,A PLDONE: PLGO: PUSHJ P,NUMVAL PLLCT: SOJL A,PLGNP ;YAWN .RD710 A ADDI A,700000 .RD710 B CAMGE B,A JRST .-2 JRST PLLCT PLDNE: JRST DONE NOTSTR: MOVE B,[440700,,[ASCIZ ./UNSTRUCTURED MUSIC ONLY\.]] PUSHJ P,DOSAY5 JRST BADATA ] IFN 6V,[ TUNEUP: DETUNE: MOVE B,[440700,,[ASCII ./SORRY, NO PLAYER ROUTINES \.]] JRST DEATH" ] IFE 6V,[ TUNEUP: SKIPA A,[440.] DETUNE: PUSHJ P,NUMVAL MOVEM A,TUNVAL' TLC A,232000 FAD A,A MOVE C,A FMPR A,[.OP FDVR 52944.0 440.0] MULI A,400 TSC A,A ASH B,-243(A) FMPR C,[.OP FDVR 6442450994.0 440.0] MULI C,400 TSC C,C ASH D,-243(C) MOVEM D,PDP6P+1 TUNE1: MOVEM B,PDP6P TUNER: .SUSET [.RUNAME,,A] MOVEM A,PDP6B+1 MOVEM A,PDP6C+1 .OPEN 17,PDP6B JRST NOPDP6 .RESET 17, ;CLEAR CORE .ACCESS 17,[73] MOVE A,PDP6P1 .IOT 17,A ;LOAD PROGRAM .ACCESS 17,[37] MOVE A,PDP6P2 .IOT 17,A ;SET IT GOING .OPEN 16,PDP6C JRST NOPDP6 SETOM PLAYP MOVNI A,100 PDOP1: .ACCESS 16,[37] .IOT 16,B AOJE B,PDOP2 AOJL A,PDOP1 MOVE B,[440700,,[ASCII . /PLEASE START THE PDP-6 AT 100 \.]] PUSHJ P,DOSAY5 PDOP2: POPJ P, NOPDP6: MOVE B,[440700,,[ASCII ./CAN'T GET PDP-6 \.]] JRST DEATH" PDP6B: 3,,(SIXBIT /USR/) 0 SIXBIT /PDP6/ PDP6C: (SIXBIT /USR/) 0 SIXBIT /PDP6/ PDP6P1: PDP6P-PDP6PE,,PDP6P PDP6P2: -3,,.+1 1 0 JRST 100 CONSTANTS VARIABLES PDP6P: OFFSET 73-. PLRCM: 0 PLRS9: 0 0 0 ;76: 0 UNTUNED, -1 WAITING, 1 TO GO 0 ;77: 0 INITIALLY, 1 TO PLAY MI, 2 TO PLAY DAC PGO: SETZM 77 ;100 SETZM 37 PLD: SKIPGE A,76 JRST PLD JUMPE A,PLD1 MOVE A,77 JRST @PLDT(A) PLDT: PLD1 PLMI PLSC PLD1: CONO PI,11577 CONO 200000 MOVE A,[JSR PLRC1] MOVEM A,42 SETZM PLTAB SETZM PLTAB+1 SETZM PSTB4 SETZM PSTB4+1 MOVSI 15,400000 MOVNI 14,60. CONO PI,12300 CONO 1000 CONSO 1000 JRST .-1 CONO 1000 CONO 2001 JRST PLAY PLRC1: 0 CONO 1001 AOJGE 14,PLRC2 JRST 12,@PLRC1 ;INCREMENT TABLES, BUILT BY TUNEUP PSTB1: BLOCK 100 PSTB2: BLOCK 100 PSTB3: BLOCK 100 PSTB4: BLOCK 77 PSTBT: BLOCK 1 PSTBX=PSTBT-14 PSTBE: PLRC2: CONO PI,11577 HRRZ A,PLRC1 SUBI A,PLAY TLZ 15,400000 IMULI 15,31 ;PLAY LOOP ADD A,15 MOVEI C,0 MOVS D,PLRCM DIV C,A MOVEI A,PLTABX MOVE P,PP MOVEI F,PLTAB MOVEI G,PLBOT PUSHJ P,PLRCE PLRS: CONO 200000 MOVE A,[JSR PLRS1] MOVEM A,44 MOVEI A,[(400000)]-1 MOVEM A,PSDATL MOVEI A,1 EXCH A,PSTEMP MOVEM A,PLPSTP' MOVNI A,60. MOVEM A,PLRS0' CONO PI,12240 CONO 1000 CONSO 1000 JRST .-1 CONO 3002 JRST PSGTF PLRS1: 0 CONO 1002 AOSGE PLRS0' JRST 12,@PLRS1 CONO PI,11577 HRRZ A,PLRS1 CAIL A,PSGTT3 SUBI A,PSGTT3-27 SUBI A,7 TLZ 0,400000 IMULI 0,16 ADD A,0 MOVEI C,0 MOVE D,PLRS9 ASHC C,3 DIV C,A MOVEI A,PSTBX MOVE P,PP MOVEI F,PSTB4 MOVEI G,PSTB1 PUSHJ P,PLRCE MOVE A,PLPSTP MOVEM A,PSTEMP SETOM 76 JRST 100 PLRCE: MOVE B,C PLRC3: HRRM A,PLRC4 MOVEI E,13 PLRC4: MOVEM C,(E) MUL C,[(361503)374705] SOJGE E,.-2 ASH B,-1 MOVE C,B SUBI A,14 CAML A,F JRST PLRC3 PLRC5: MOVEM C,13(A) MOVEI A,-2(F) MOVE C,100(A) MUL C,DTC MOVEM C,(A) CAMLE A,G SOJA A,.-4 POPJ P, DTC: (377200) DEFINE PART N P!N: ADDI N, III==1_<6-N> TLNE N,1 TROA III TRZ III TERMIN PLMI: SETOM 76 MOVEI 0,0 MOVEI 17,MUSDAT JRST PLGT PLOFF: ASH 15,-7 HLLZS @PLACC(15) PLGT: HLLE 15,(17) ;GET DURATION IDIV 15,PLTEMP JUMPE 15,PLGE PLAY: REPEAT 6,PART \.RPCNT+1 PLAY1: MOVEM 32 ;MI ON 32 ALSO AOJL 15,PLAY PLGE: HRRZ 15,(17) ;NOTE JUMPE 15,PGO ;DONE? TRZN 15,EVENON ;BEG OF CHORD? AOJA 17,PLOFF ANDCMI 15,374000 IDIVI 15,200 MOVE 14,@PLGET(15) HRRM 14,@PLACC(15) AOJA 17,PLGT ] IFE 6V,[ PLTEMP: 200000 PLACC: P1 P2 P3 P4 P5 P6 P1 P2 PLGET: PLTB1(16)+1 ;POINTERS TO FREQ TABLE PLTB2(16)+1 PLTB3(16)+1 PLTB4(16)+1 PLTB5(16)+1 PLTB6(16)+1 PLTB1(16)+1 PLTB2(16)+1 PLBOT: BLOCK 500 PLTAB: BLOCK 77 PLTABT: BLOCK 1 PLTABX=PLTABT-14 PLTB1=PLBOT PLTB2=PLTB1+100 PLTB3=PLTB2+100 PLTB4=PLTB3+100 PLTB5=PLTB4+100 PLTB6=PLTB5+100 PSGTF: MOVE 0,[(PSGTT)7] BLT 0,17 MOVE 0,[(PSGTTL)PSGTT3] BLT 0,PSGCCF MOVE A,PSGTLT HRRM A,PSGTT1-R MOVE A,PSGTLT+1 HRRM A,PSGTT2-R MOVE A,PSGTLT+2 HRRM A,PSGTT3 MOVE A,PSGTLT+3 HRRM A,PSGTT4 JRST PSGT PSTEMP: 200000 PSGTT: ADDI C,0 LDB B,PSGCCC PSGTT1: MOVE A,(B) ADDI D,0 LDB B,PSGCCD PSGTT2: ADD A,(B) ADDI E,0 LDB B,PSGCCE JRST PSGTT3 ;17 PSGTTL: PSGTT3: ADD A,(B) ADDI F,0 LDB B,PSGCCF PSGTT4: ADD A,(B) PLAY2: MOVEM A,32 AOJL 0,7 PSGTB: HRRZ A,@PSDATL TRZE A,EVENON+374000 JRST PSGTA JUMPE A,PGO PSOFF: ASH A,-7 HLLZS @PSPT(A) PSGT: AOS A,PSDATL HLLE 0,(A) IDIV 0,PSTEMP XCT 7 XCT 12 XCT 15 XCT PSGTT3+1 JUMPN 0,7 JRST PSGTB PSGTA: IDIVI A,200 MOVE 0,@PSGTAT(A) HRRM 0,@PSPT(A) LDB B,[130600,,@PSDATL] MOVE 0,@PSGY(B) JUMPLE 0,PSGTR HRRM 0,@PSGTTT(A) XCT 7 XCT 12 XCT 15 XCT PSGTT3+1 JRST PSGT ;32 IS D-A LOC R==PSGTT-7 PSPT: 7 12 15 PSGTT3+1 7 12 15 PSGTT3+1 PSGY: PSGTLT(A) REPEAT 30,HARCOD(B)-1 PSGTAT: PSTB1(B)+1 PSTB2(B)+1 PSTB3(B)+1 PSTB4(B)+1 PSTB1(B)+1 PSTB2(B)+1 PSTB3(B)+1 PSTB4(B)+1 PSGTTT: PSGTT1-R PSGTT2-R PSGTT3 PSGTT4 PSGTT1-R PSGTT2-R PSGTT3 PSGTTE: PSGTT4 PSGCCC: 121000,,C PSGCCD: 121000,,D PSGCCE: 121000,,E PSGCCF: 121000,,F CONSTANTS VARIABLES PP: -10,,PPBK-1 PPBK: BLOCK 10 PSDATL: 0 PSGTLT: BLOCK 10 HARCOD: BLOCK 30 HARCDE: MUSDAT: OFFSET 0 ;-DURATION,,EVENON+VOICE*200+PTR TO FREQ? PDP6PE: ] SYMTAB: SIXBIT /0 1 2 3 4 5 6 7 8 9 ZERO ONE TWO THREE FOUR FIVE/ SIXBIT / SIX SEVEN EIGHT NINE C D E F G A B ST ND RD TH / SIXBIT /DETEMPO - MINUS SOPRANO ALTO TENOR B/ SIXBIT /ASS FORGET ALL EXCEPT READOLD TUNEUP TEMPO PLOLD/ SIXBIT / VALUE K M THOUSAND MILLION MENTION ENTITLE ENTE/ SIXBIT /R TAPES READ WRITE [ ] = PLSCOPE , : ; BUILD BUI/ SIXBIT /LDON JRST MELGEN KEYBOARD TUNING FROM TO TRANSLA/ SIXBIT !TE PLEASE SCRIPT SCRIPTSIZE VOLBUILD # READNEW V! SIXBIT /OICE STOP ++ VIEWWAVE INTREAD SCRIPTSPACE SCRIPT/ SIXBIT /MNINT AGAIN * ** ^ SLURDENS ARDS TREBLE SCRIPTCL/ SIXBIT /EF ? NOPLAY WHOA SCLBUILD PRINT SYN SYNONYM / BLOCK SYMTAB-.+SYTLL SYTEND: SYMS: REPEAT 2,[ZZZ=0 REPEAT 10.,[(NUMBER)ZZZ ZZZ=ZZZ+1 ]] REPEAT 7,[(TONUS)ZZZ-10. ZZZ=ZZZ+1 ] REPEAT 4,(ORDFLG) (PARAM)3 (MINUS) (MINUS) (CLEF)7 (CLEF)6 (CLEF)5 (CLEF)4 (ERASER)0 MODALL MODEXC (CREATE)0 (GOTO)0 (PARAM)4 (PLAYER)0 (GOTO)1 (MULTIP)MULTAB (MULTIP)MULTAB+1 (MULTIP)MULTAB (MULTIP)MULTAB+1 (ERASER)1 (GOTO)2 (GOTO)3 (GOTO)4 (CREATE)1 (GOTO)5 (BRAKET)0 (BRAKET)1 (GOTO)6 (PLAYER)1 PUNCCM PUNCCL PUNCSC (GOTO)7 (GOTO)10 (GOTO)11 (CREATE)2 (CREATE)3 (GOTO)12 PUNCFM PUNCTO (TRANSL)0 MODPLS (SCRIB)0 (PARAM)5 (GOTO)13 PUNCSL (CREATE)4 (GOTO)14 (GOTO)15 (CREATE)5 (GOTO)16 (CREATE)6 (PARAM)1 (PARAM)2 MODAGN (STAR)0 (STAR)1 (STAR)2 (PARAM)6 (PARAM)7 (CLEF)2 (GOTO)17 (CLEF),-1 (GOTO)20 (GOTO)21 (GOTO)22 (GOTO)23 (GOTO)24 (GOTO)24 BLOCK SYMS-.+SYMLL TWTABL: BLOCK 12 ;ROOTS OF 2 0 DONEW: DONE ;USED BY PC HACKS PLSC: .VALUE JRST DONE 0 STRING: BLOCK STRLL 0 SLAK: BLOCK SLAKLL COML: BLOCK COMLL COMSL: BLOCK COMLL TEMPF: BLOCK NLINES LOCA: BLOCK NLINES MEAS: BLOCK NLINES MSTM: BLOCK NLINES ALIVE: BLOCK ALIVEL PDLSE: LOSE PDL": BLOCK PDLL XPDL: BLOCK XPDLL YPDL: BLOCK YPDLL TITL: 0 BLOCK TITLL-1 TAPTAB: 0 BLOCK NDIR-1 PLWN: BLOCK NRNO SAVAC: BLOCK 17 PATCH": BLOCK 100 MULTAB: 1000 1000000 1000. 1000000. TYPE: -1 0 ;! -1 ;" -1 ;# 0 ;$ 0 ;% 0 ;& -1 ;' -1 ;( -1 ;) 1 ;* 1 ;+ -1 ;, -1 ;- 0 ;. -1 ;/ -1 ;0 -1 ;1 -1 ;2 -1 ;3 -1 ;4 -1 ;5 -1 ;6 -1 ;7 -1 ;8 -1 ;9 -1 ;: -1 ;; -1 ;< 1 ;= -1 ;> -1 ;? -1 ;@ 0 ;A 0 ;B 0 ;C 0 ;D 0 ;E 0 ;F 0 ;G 0 ;H 0 ;I 0 ;J 0 ;K 0 ;L 0 ;M 0 ;N 0 ;O 0 ;P 0 ;Q 0 ;R 0 ;S 0 ;T 0 ;U 0 ;V 0 ;W 0 ;X 0 ;Y 0 ;Z -1 ;[ -1 ;\ -1 ;] 1 ;^ 1 ;_ VARIAB CONSTA FREE": LOC FRETOP FREEND": DEFINE MESS A,B PRINTX ?A!B ? TERMIN IF2,MESS [LENGTH OF FREE STORAGE = ]\FREEND-FREE END SETUPX