From f42879d5ed98573a3790f89a75da331e22ced1cd Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Tue, 31 Mar 2020 20:53:55 +0200 Subject: [PATCH] MUSCOM - compile music. --- build/misc.tcl | 5 + doc/_info_/muscom.order | 133 +++ doc/programs.md | 1 + src/syseng/muscom.50 | 2386 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 2525 insertions(+) create mode 100644 doc/_info_/muscom.order create mode 100644 src/syseng/muscom.50 diff --git a/build/misc.tcl b/build/misc.tcl index f929cc72..cd59d7fa 100644 --- a/build/misc.tcl +++ b/build/misc.tcl @@ -1074,6 +1074,11 @@ respond "*" ":midas sys3;ts expn_sysnet;expn\r" expect ":KILL" respond "*" ":link sys3;ts vrfy,sys3;ts expn\r" +# MUSCOM +respond "*" ":midas sysbin;_syseng; muscom\r" +expect ":KILL" +respond "*" ":link sys1;ts muscom, sysbin; muscom bin\r" + # WHOLIN respond "*" ":midas sys2;ts wholin_sysen2;wholin\r" expect ":KILL" diff --git a/doc/_info_/muscom.order b/doc/_info_/muscom.order new file mode 100644 index 00000000..2562c812 --- /dev/null +++ b/doc/_info_/muscom.order @@ -0,0 +1,133 @@ +WHEN MUSCOM DETECTS AN ERROR, IT TYPES OUT THE ENTIRE +MEASURE IN WHICH THE ERROR OCCURS (MEASURES BEING +SEPARATED BY SLASHES), PRECEDED, IF IT IS THE FIRST +ERROR FOUND IN A GIVEN VOICE, BY A COLORFUL MESSAGE. +IF ONE WORD IN PARTICULAR IS ERRONEOUS, IT WILL +BE SURROUNDED BY < > BRACKETS IN THE PRINTOUT. + +THREE-LETTER ERROR CODES (GENERATED IN PHASE ONE): + +TMF TOO MANY FIELDS + A NUMBER, A COMMA, AND THE LETTER R ARE FIELDS. + A NOTE SHOULD HAVE A MAXIMUM OF TWO FIELDS. +TFF TOO FEW FIELDS +ERT ERRONEOUS TIME + THE TIME FIELD OF A NOTE WAS NOT A POWER OF TWO. +UCH UNUSED CHARACTER + A MEANINGLESS LETTER OR OTHER CHARACTER WAS + FOUND IN A NOTE. +UNC UPNREPARED COMMA + A COMMA APPEARED IN A NOTE, BUT NO NOTE + CAME BEFORE IT IN THIS VOICE. +NPS NO PSUCH SEUDO + AN UNIDENTIFIED WORD WITH NO NUMBERS OR COMMAS + APPEARED. + +BBL BAD BAR LABEL + A NUMBER APPEARED THAT DOES NOT AGREE WITH THE + PROGRAM'S CURRENT MEASURE NUMBER. MAYBE YOU + FORGOT TO END YOUR TITLE WITH A SLASH. + +AGM ARGUMENT GREEDILY MASTICATES + A NUMBER WAS EXPECTED AND DELICIOUS GARBAGE FOUND. +DTU DOT UNDERFLOW + TOO MANY DOTS AND X'S IN A NOTE CAUSED THE VALUE + OF DOT TO FALL BELOW 1/64 NOTE. +NOR NATURAL OVERRIDES + WHEN ) OR = APPEARS IN THE SAME NOTE WITH ( + OR - . +TME TOO MANY EMBELLISHMENTS + MORE THAN ONE OF P, W, U, N, M, D APPEARED IN + A NOTE. +TMS TOO MANY STACCATO, LEGATO, ETC. + MORE THAN ONE OF S, L, E, H, Q APPEARED IN NOTE. +ITG INSUFFICIENT TIME FOR GRACE NOTE + THE NOTE AFTER ONE CONTAINING G WAS TOO SHORT. +TIC TIME IN COMMA NOTE +AIR ACCIDENTAL IN REST +UAT UNAVAILABLE TONE + SORRY. +AOR ACCIDENTAL OUT OF RANGE + THOUGH BASIC NOTE NOT. +ETR EMBELLISHMENT ON TRIPLET + MUMBLE MUMBLE MAYBE I'LL CLEAN THIS UP SOME DAY. +EIT EMBELLISHMENT ON INSUFFICIENT TIME +EOR EMBELLISHMENT OUT OF RANGE + THOUGH BASIC NOTE NOT. +MTL MEASURE TOO LONG + COMPARED TO "UNITS" OR "TIME" SPECIFICATION. +MTS MEASURE TOO SHORT +ILT ILLEGAL LOCATION FOR "TIME" + NAMELY, NOT AT BEGINNING OF A MEASURE. +BTD BAD TIME DENOMINATOR + NOT IN RANGE 1 - 64. +BTN BAD TIME NUMERATOR + NOT IN RANGE 0 - 127. +NIU NON-INTEGRAL UNITS + TIME SIG. * 32 NOT AN INTEGER. +MYK MYSTERIOUS KEY + "KEY" NOT FOLLOWED BY + ) ( - OR = . +WLK WRONG LOCATION FOR "KEY" + NOT AT BEGINNING OF MEASURE. WILL APPLY + SUCCESSFULLY TO UNSTRUCTURED OUTPUT BUT + WILL BE IGNORED IN STRUCTURED OUTPUT. +DNT WLK +ILR ILLEGAL LOCATION FOR "REST" + NOT AT BEGINNING OF MEASURE. +ILC ILLEGAL LOCATION FOR "COPY" + BY NOW YOU SHOULD KNOW... +BLC BAD LEFT ARGUMENT TO COPY + LESS THAN 1 OR GREATER THAN LAST MEASURE. +BRC BAD RIGHT ARGUEMNT TO COPY + LESS THAN LEFT ARGUMENT. +BLB BAD LEFT ARGUMENT TO BEAT + GREATER THAN 255. +BRB BAD RIGHT ARGUMENT TO BEAT + + +PRS 12/17/69 03:19:43 TEXT MAY NOW BE INCLUDED IN THE "ENGLISH" +OF A PIECE OF MUSIC. AT THE END OF EACH +VOCAL LINE, INSTEAD OF "END" HAVE THE +COMMAND "TEXT" FOLLOWED BY A SPACE FOLLOWED +BY THE TEXT. SLASHES ARE IGNORED. HOWEVER, +YOU MUST PUT A SLASH WITHIN ABOUT 80. +CHARACTERS AFTER THE "TEXT" TO FOOL THE +INPUT ROUTINE. END YOUR TEXT FOR A GIVEN VOICE +WITH A BACKSLASH. + +FOR A POLYSYLLABIC WORD, PUT +HYPHENS BETWEEN SYLLABLES. IF A +SYLLABLE IS HELD OVER A PLURALITY OF NOTES, +FOLLOWED BY ANOTHER SYLLABLE IN THE SAME +WORD, N+1 HYPHENS WILL HOLD THE FIRST +SYLLABLE OVER N NOTES. IF THE LAST SYLLABLE +OF A WORD IS HELD OVER A TOTAL OF N NOTES, +FOLLOW IT IN THE TEXT BY N-1 UNDERLINES. +EQUAL SIGN MAY BE USED INSTEAD OF UNDERLINE +AND IN FACT IS RECOMMENDED. + +THE -1DOLLARS FEATURE OF TECO ENABLES YOU TO +ENTER THE TEXT IN BOTH UPPER AND LOWER CASE. +ASK A SYSTEM HACKER FOR DETAILS. WARNING: +LIKE UPPER CASE LETTERS, BACKSLASH (TO END THE +TEXT) MUST BE "QUOTED" WITH A SLASH, AS +MUST SLASH ITSELF. TO GET THE TEXT OUT ON +THE PLOTTER WITH BIG (THIS BEING CURRENTLY THE +ONLY USE OF THE TEXT) REMEMBER THAT YOUR +MUSCOM COMPILATION COMMAND STRING MUST +CONTAIN A CONTROL-T . GOOD LUCK. + +P.S. THERE'S A TINY BUG WHICH I'LL FIX SOME +DAY WHOSE EFFECT IS TO LOSE THE FIRST FEW +CHARACTERS OF THE TITLE OF A VOICE AFTER ONE +WITH TEXT. + +PRS 07/27/69 09:10:20 JULY 27,1969 PRS +THE PHRASE "TIME 3 4" SHOULD BE +USED IN PREFERENCE TO "UNITS 24" ETC. OLD +MUSIC ENGLISHES ARE SLOWLY BEING CHANGED +IN THIS WAY. A PIECE WITH "TIME" INSTEAD +OF "UNITS" MAY BE OUTPUT IN STRUCTURED FORM +INSTEAD OF THE NORMAL UNSTRUCTURED FORM BY +INCLUDING A CONTROL-T ANYWHERE IN THE MUSCOM +COMMAND STRING. + \ No newline at end of file diff --git a/doc/programs.md b/doc/programs.md index a3da490f..1795df38 100644 --- a/doc/programs.md +++ b/doc/programs.md @@ -226,6 +226,7 @@ - MUDINQ, Muddle inquirer. - MUNCH, TV-munching square. - MUNCH, munching squares for Type 340 display. +- MUSCOM, music compiler. - NAME, shows logged in users and locations, aka FINGER. - NAMDRG, free TV display. - NETIME, network time dragon. diff --git a/src/syseng/muscom.50 b/src/syseng/muscom.50 new file mode 100644 index 00000000..562f84dc --- /dev/null +++ b/src/syseng/muscom.50 @@ -0,0 +1,2386 @@ + TITLE MUSCOM??? +A=1 +B=2 +C=3 +D=4 +E=5 +F=6 +G=7 +H=10 +I=11 +M=12 +N=13 +J=14 +R=15 +S=16 +P=17 + +DKIC==1 +DKOC==4 +TYIC==3 +TYOC==2 + +MNV==6 ;MAX # VOICES + +LOC 74 +PREP: 0 + JRST AP +GETCHA: 0 + JRST GETCH + +DEATH: JRST GO + +PUTI: 0 ;IF NOT +PUTJ: 0 ;IF BAR +PUTIS: 0 +PUTJS: 0 +PUTW: SKIPA 0 +PUTWJ: SKIPGE E +PUTX: HRLM E,NOTE-1(B) +PUTXJ: HRRM E,NOTE-1(B) +PUTY: SKIPA 0 +PUTYJ: CAIGE E,600000 +PUTZ: SKIPA 0 +PUTZJ: PUSHJ A,TCHK + +MARG: 0 ;WRIT BASE,,INDX + 21,,0 + 43,,0 + 65,,0 + 107,,0 + 131,,0 + 153,,0 + 175,,0 + +PART: BLOCK 10 ;TO RH NOTE +BILD: BLOCK 10 ;PITCH,,LH NOTE +TEMPO: BLOCK 10 +ENDPT: BLOCK 10 ;IF PT ENDED +WRIT: BLOCK 220 +JCLPTR: 0 +JCLBUF: BLOCK 100 + +GO: .CORE 27 + JRST 4,. +; .VALUE + .OPEN TYIC,[SIXBIT / 0TTY/] + JRST 4,. +; .VALUE + .OPEN TYOC,[SIXBIT / !TTY/] + JRST 4,. +; .VALUE + MOVE A,[440700,,JCLBUF] + MOVEM A,JCLPTR + .BREAK 12,[5,,JCLBUF] + MOVE A,[-APDLL+1,,APDL-1] + SETZM CNBFL + SETZM CNEFL + MOVE C,[-777,,KBLK-1] + MOVEM C,KBP + SETZM IUS + SETZM CNTFL + SETZM CNXFL + SETZM FLBP + MOVE G,[.FNAM1] + PUSHJ A,6TYO + PUSHJ A,CRR +RD0: MOVE C,[440600,,D] + MOVEI D,0 + +RD: PUSHJ A,LTYI + CAIN B,15 + JRST LTYI4 ;EOL +RD1: CAIN B,^B + SETOM CNBFL + CAIN B,^E + SETOM CNEFL + CAIN B,^T + SETOM CNTFL ;STRUCTURED + CAIN B,^X + SETOM CNXFL ;$^X. AT END OF FILE + CAIN B,^Q + JRST RDCQ ;QUOTE + SUBI B,40 + JUMPL B,RD ;CNTRL CHAR + CAIL B,100 + JRST RD ;LOWER CASE + CAIN B,': + JRST RDCOL + CAIN B,'; + JRST RDSCOL + JUMPE B,RDSPAC ;SPACE + CAIN B,'_ + JRST RDOUS +RD2: TLNE C,770000 + IDPB B,C + JRST RD + +RDCQ: PUSHJ A,LTYI + SUBI B,40 + JRST RD2 + +RDSCOL: MOVEM D,IUS + JRST RD0 + +IUS: 0 +OUS: 0 + +RDSPAC: SKIPE D + MOVEM D,DKIO+1 + JRST RD0 + +RDCOL: SKIPE D + HLRM D,DKIO + JRST RD0 + +RDOUS: SKIPE D ;READ _ END DEST FILE SPECS + MOVEM D,DKIO+2 + HRLZ D,DKIO + SKIPE D + HLRM D,DKOO + SKIPE D,DKIO+1 + MOVEM D,DKOO+1 + SKIPE D,DKIO+2 + MOVEM D,DKOO+2 + MOVE D,IUS + MOVEM D,OUS + SETZM IUS + JRST RD0 + +JCLTYI: ILDB B,JCLPTR + POPJ A, + + +LTYI: SKIPE JCLBUF + JRST JCLTYI + ILDB B,FLBP + JUMPN B,APOPJ + PUSH A,C + MOVE C,[10700,,LBUF-1] + MOVEM C,FLBP +LTYI3: .IOT TYIC,B + CAIN B,177 + JRST LTYI1 + IDPB B,C + CAIE B,15 + JRST LTYI3 + MOVEI B,0 ;EOL + IDPB B,C + POP A,C + JRST LTYI + +LTYI1: CAMN C,[10700,,LBUF-1] ;RBO + JRST LTYI2 + LDB F,C + PUSHJ A,ATYO + ADD C,[70000,,0] ;DEC BP + JUMPGE C,LTYI3 + SUB C,[430000,,1] + JRST LTYI3 + +LTYI2: PUSHJ A,CRR + JRST LTYI3 + +LTYI4: SKIPE D ;CR EOL + MOVEM D,DKIO+2 + SKIPN DKOO+2 + MOVEM D,DKOO+2 + MOVE D,DKIO+1 + SKIPN DKOO+1 + MOVEM D,DKOO+1 + HRLZ D,DKOO + JUMPN D,LTYI5 + MOVE D,DKIO + HRRM D,DKOO +LTYI5: .SUSET [16,,I] ;RD NM TO I + MOVE D,IUS + .SUSET [400016,,D] ;WRITE SNM + .OPEN DKIC,DKIO + JRST 4,. +; .VALUE + MOVE D,OUS + .SUSET [400016,,D] + .OPEN DKOC,DKOO + JRST D,. +; .VALUE + SETZM NPT + .SUSET [400016,,I] + SETZM PUTI + SETZM PUTJ + SETZM GROUPS + SETZM TFL + SETOM L + +STOP: MOVE I,NPT + HRRM I,START + JSR PREP ;PROCESS ONE VOICE + JUMPL 0,START ;IF EOF + MOVE A,[-APDLL+1,,APDL-1] + HRLZI I,-2 + +BLOK: MOVE B,PUTI(I) + MOVEM B,PUTIS(I) + SETZB J,NWR + SETZM EFL + PUSHJ A,AREAD + MOVEM E,NWD ;# WDS TO READ + +SWORD: PUSHJ A,AREAD ;I=0 FOR NOT I=1 FOR BAR + XCT PUTW(I) ;SKIPA OR SKIPGE E + JRST ECHK + AOS B,PUTI(I) + ADD J,E + TLNN J,1 + CAIL J,-1 + SUBI J,-1 ;ADD -1,,1 + XCT PUTZ(I) ;SKIPA OR PUSHJ A,TCHK + SETOM TFL ;IF TIME + XCT PUTY(I) ;SKIPA OR CAIGE E,600000 + ADD E,PUTIS ;MAKE REL TO NOTE + XCT PUTX(I) ;HRLM OR HRRM E,NOTE-1(B) + AOS E,NWR + CAILE B,LENGTH + JRST FULL + CAME E,NWD + JRST SWORD + +EKK: PUSHJ A,AREAD + CAMN E,J + AOBJN I,BLOK ;DO BLOCK TWICE EACH VOICE + + JUMPGE I,EPART + MOVE B,PUTIS(I) + MOVEM B,PUTI(I) + PUSHJ A,PRINT + ASCIZ /CS / + JRST STOP + +EPART: MOVE H,NPT ;END PART + SETZM BEAT+47(H) + SKIPL EFL + JRST EPART2 + SETOM BEAT+47(H) + MOVE G,KBP + HRLM G,BEAT+57(H) + +EPART1: PUSHJ A,AREAD + PUSH G,E + JUMPGE G,FULL + TRNN E,1 + JRST EPART1 + + HRRM G,BEAT+57(H) + MOVEM G,KBP +EPART2: AOS E,NPT + MOVE B,PUTJS + MOVEM B,PART-1(E) + MOVE B,NPT + CAIGE B,MNV + JRST STOP + JRST II ;HAVE READ ALL PTS + +TCHK: CAILE E,600000 + CAIL E,700000 + AOS (A) ;SKIP RETURNIF NOT TIME + POPJ A, + +ECHK: SETOM EFL + JRST SWORD + +FULL: PUSHJ A,PRINT + ASCIZ /SF / +START: JFCL 0, ;ALL VOICES IN NOTE, COMBINE + MOVE A,[-APDLL+1,,APDL-1] + SKIPN NPT + JRST STOP + +II: SKIPL CNTFL + JRST .+3 + SKIPGE TFL ;STRUCTURED + JRST WRTN + SETZM SWX1 + MOVE S,DKBFP + SKIPE CNBFL + JRST II1 + MOVEI E,2000 + MOVEM E,RR + SETZM SND + MOVE F,EWD + .IOT DKOC,F ;WRITE "JUMPA 1" + +II1: HRLZI F,-220 + MOVE E,RR + MOVEM E,RR1 + SETZM WRIT(F) ;CLR WRIT BLK + AOBJN F,.-1 + + HRLZI F,-10 + MOVEI E,1 + MOVEI I,-1 + MOVEI B,252 ;DEFAULT TEMPO=170. +II2: MOVEM B,TEMPO(F) ;INITIALIZE + HRRM E,MARG(F) + MOVEM I,BILD(F) + SETOM BEATI(F) + SETOM BEATJ(F) + SETZM ENDPT(H) + AOBJN F,II2 + +III: SETZM JJ +DELTA: HRLZI B,377700 + MOVEM B,Y + SETZB H,Z0 + SETZM Q + SETZM TT + SETZM STP + +III1: SKIPE ENDPT(H) + JRST III2 + HLRZ B,MARG(H) + ADD B,MARG(H) + MOVE M,WRIT(B) ;LAST NOTE WRITTEN + MOVEI N,377700 + AND N,M + MOVE B,N + ASH N,-6 ;DURATION + IMUL N,TEMPO(H) + CAMGE N,Y + MOVEM N,Y + ANDI M,77 ;PITCH + HRLM M,BILD(H) +III2: AOS H + CAMGE H,NPT + JRST III1 + + SKIPN SWX1 + JRST FXY +ALPHA: AOS GROUPS ;WRITE ONE NOTE ALL VOICES + MOVN E,Y + ASH E,9 + PUSHJ A,AWRITE ;TIME + MOVEI E,0 + MOVE I,[440600,,E] + MOVSI H,-6 +ALPHA1: SKIPN B,ENDPT(H) + HLRZ B,BILD(H) ;6 BITS PITCH PER VOICE + IDPB B,I + AOBJN H,ALPHA1 + + PUSHJ A,AWRITE +FXY: SETOM SWX1 + SETZI H, + +BETA: SKIPE ENDPT(H) + JRST KHI + SETZM Z1 + HLRZ R,MARG(H) + ADD R,MARG(H) + LDB N,[61300,,WRIT(R)] ;DURATION OF LAST NOTE WRITTEN + IMUL N,TEMPO(H) + CAME N,Y + JRST GAMMA + +GNOTE: HRRZ R,MARG(H) + SOJN R,ZETA +GNOTE1: HRRZ R,BILD(H) +GNOTE2: HLRZ N,NOTE(R) ;NOT + CAIN N,600000 + JRST GBAR ;/ + CAIG N,600000 + JRST DNOTE ;FOUND NOTE + CAIGE N,700000 + JRST STOPR ;STOP + TRNE N,40000 + JRST TEMBE ;BEAT + MOVEI B,20000 ;TEMPO + AND B,N ;0 IF ALL VOICES + LDB C,[120300,,N] ;NUM + ANDI N,1777 ;DENOM + IMUL N,CLIC(C) + MOVEI C,43140 + IDIVM C,N + CAILE N,1252 + JRST TEMB ;TOO SLOW + JUMPN B,.+3 + MOVEM N,TT + JRST TEMZ + MOVEM N,TEMPO(H) + +TEMZ: AOS R + HRRM R,BILD(H) + JRST GNOTE2 + +TEMB: PUSHJ A,PRINT + ASCIZ /TS / ;TIME TOO SLOW + MOVE E,N + PUSHJ A,DPT + JRST TEMZ + +CLIC: 2 + 3 + 4 + 6 + 10 + 14 + 20 + 30 + +GBAR: MOVEI B,1 ;/ + MOVEM B,Z0 + MOVEM B,Z1 +GBAR1: MOVE M,PART(H) ;FIND START OF NTEXT BAR + AOS PART(H) + HRRZ F,NOTE(M) + CAIN F,600000 + JRST THETA ;END OF VOICE + CAIL F,600000 + JRST GBAR1 ;PNTR TO START OF NEXT MEASURE + HRRM F,BILD(H) + JRST GNOTE1 + +TEMBE: MOVEM N,BEAT(H) ;BEAT + ANDI N,37600 + ASH N,-7 + IMULI N,60 + MOVEM N,BEATI(H) + MOVEM N,BEATJ(H) + MOVEI N,177 + AND N,BEAT(H) + IMULI N,6 + MOVEM N,BEAT(H) + JRST TEMZ + +STOPR: SETOM STP ;STOP + SUBI N,600001 + DPB N,VBP(H) + JRST TEMZ + +VBP: 360600,,SND ;VOICE BYTE POINTERS + 300600,,SND + 220600,,SND + 140600,,SND + 060600,,SND + 000600,,SND + +DNOTE: MOVEI B,1 ;WRITE ONE NOTE INTO WRITE + HRRM B,MARG(H) + AOS R + HRRM R,BILD(H) + SKIPN Z1 + SETOM Q + MOVE B,N + ANDI B,177 ;TIME + MOVEI C,30 + TRNE N,100000 + MOVEI C,20 ;TRIPLET + IMUL B,C + LDB C,[70600,,N] ;PITCH + MOVEM C,NO + HLRZ R,MARG(H) + ADD R,MARG(H) + SOJE C,APSI ;IF REST + TRNE N,400000 + JRST APSI ;LEGATO + MOVE C,B + TRNE N,200000 + JRST STAC + TRNE N,40000 + JRST HALF + TRNN N,20000 + ASH C,-1 ;E + ASH C,-1 ;Q +HALF: ASH C,-1 ;ARTIC DURATION +BKTST: MOVE N,BEATJ(H) + SUB N,B + MOVEM N,BEATJ(H) + JUMPE N,BET1 + JUMPG N,BET2 + +BET3: MOVE N,BEATI(H) + MOVEM N,BEATJ(H) +BET2: SUB B,C ;PITCH DURATION + PUSHJ A,MNSET +BKTA: MOVE D,C ;WRITE ARTIC + SUB D,MN1 + JUMPLE D,PHI + MOVE C,MN2 + MOVEM C,WRIT(R) + MOVE C,D + AOS MARG(H) + AOJA R,BKTA + +BET1: CAML C,BEAT(H) + JRST BET3 + MOVE N,B + SUB N,BEAT(H) + CAIL N,10 + MOVE C,BEAT(H) + JRST BET3 + +STAC: MOVE C,B + ASH C,-3 + IMULI C,5 + JRST BKTST + +PHI: ASH C,6 ;FINISH ARTIC + ADDI C,1 + MOVEM C,WRIT(R) + AOS MARG(H) + AOJA R,APSI1 +APSI: PUSHJ A,MNSET +APSI1: MOVE D,B ;WRITE PITCH + SUB D,MN1 + JUMPLE D,XI + MOVE B,D + MOVE C,NO + ADD C,MN2 + SUBI C,1 + MOVEM C,WRIT(R) + AOS MARG(H) + AOJA R,APSI1 + +XI: MOVE C,B ;FINISH PITCH + ASH C,6 + ADD C,NO + MOVEM C,WRIT(R) +KHI: AOS H + CAMGE H,NPT + JRST BETA + SKIPN STP + JRST KHI1 + MOVNI E,1 + PUSHJ A,AWRITE + MOVE E,SND + PUSHJ A,AWRITE + SETZM STP +KHI1: SKIPN N,TT + JRST KHI2 + MOVSI B,-10 ;SET TEMPO ALL VOICES + MOVEM N,TEMPO(B) + AOBJN B,.-1 + +KHI2: SKIPN Z0 + JRST DELTA + AOS L + SKIPN Q + JRST III + SKIPE JJ + JRST DELTA + MOVE E,L + PUSHJ A,DPT + MOVEI F,". + PUSHJ A,ATYO + SETOM JJ + JRST DELTA + +GAMMA: MOVE B,Y + IDIV B,TEMPO(H) + ASH B,6 + MOVNS B + ADDM B,WRIT(R) + JRST IOTA + +ZETA: HRRM R,MARG(H) +IOTA: SETOM Q + JRST KHI + +AWRITE: ADD S,[1,,1] ;CANT USE PUSH OR FATAL PDL OVERFLOW ERROR + MOVEM E,(S) ;WRITE IT AWAY +; PUSH S,E ;WRITE TEMPO AND TONES IN DKBF + AOS E,RR1 + CAIL E,377774 + JRST WOOF + JUMPL S,APOPJ + +WRBLK: MOVEI S,-DKBF(S) ;# WDS IN DKBF + HRLZ E,S + MOVNS E + HRR E,RR + MOVEM E,DKBF + MOVE J,E + HRRI E,DKBF + JUMPGE E,WRBLK1 + ROT J,1 + ADD J,A(E) + AOBJN E,.-2 + +WRBLK1: PUSH E,J + MOVE S,DKBF + SUB S,[2,,0] + HRRI S,DKBF + .IOT DKOC,S + MOVE E,RR1 + MOVEM E,RR + MOVE S,DKBFP +APOPJ: POPJ A, + +MNSET: MOVEI N,300 + MOVE D,TEMPO(H) + CAIGE D,526 + MOVEI N,600 + MOVEM N,MN1 + ASH N,6 + ADDI N,1 + MOVEM N,MN2 + POPJ A, + +WOOF: PUSHJ A,PRINT + ASCIZ /OF / + MOVE E,L + ADDI E,1 + PUSHJ A,DPT + +THETA: AOS ENDPT(H) + MOVEI B,0 +THETA1: SKIPN ENDPT(B) + JRST KHI + ADDI B,1 + CAMGE B,NPT + JRST THETA1 + SKIPE CNEFL ;GOT ALL PARTS + JRST THETA2 + MOVEI E,0 + PUSHJ A,AWRITE + MOVEI E,0 + PUSHJ A,AWRITE + PUSHJ A,WRBLK + MOVE F,[-10,,FDBLK] + .IOT DKOC,F +THETA2: .CLOSE DKOC, + .VALUE [ASCIZ /./] + + +EWD: -1,,.+1 + JRST 1 +FDBLK: -1,,41 + JRST 101 + AOBJN P,@204(S) + -1,,41 + JRST 101 + AOBJN P,@204(S) + JUMPA 101 + JUMPA 101 + +WRTN: MOVE F,NPT + MOVEM F,SDBLK+1 + MOVE F,SDBLKP + .IOT DKOC,F + MOVE S,DKBFPP + MOVEI H,0 +WRTN1: CAML H,NPT + JRST WRTN7 + SETOM WRTF + SKIPGE E,BEAT+47(H) + PUSHJ A,DBW + MOVE M,PART(H) +WRTN2: HRRZ E,NOTE(M) + PUSHJ A,DBW + CAIE E,600000 + AOJA M,WRTN2 + MOVE M,PART(H) + +WRTN3: HRRZ B,NOTE(M) + CAIN B,600000 + JRST WRTN5 + CAMLE B,WRTF + CAIL B,600000 + AOJA M,WRTN3 + + MOVEM B,WRTF +WRTN4: HLRZ E,NOTE(B) + PUSHJ A,DBW + CAIE E,600000 + AOJA B,WRTN4 + AOJA M,WRTN3 + +WRTN5: SKIPL BEAT+47(H) + AOJA H,WRTN1 + HLRZ B,BEAT+57(H) + HRRZ C,BEAT+57(H) +WRTN6: CAML B,C + AOJA H,WRTN1 + MOVE E,A(B) + PUSHJ A,DBW + AOJA B,WRTN6 + +WRTN7: PUSHJ A,DBW1 + JRST THETA2 + +SDBLKP: -2,,SDBLK +SDBLK: JRST D,A + 0 +DKBFPP: -200,,DKBFP + +DBW: PUSH S,E + JUMPL S,APOPJ +DBW1: MOVSI S,-DKBFP(S) + MOVNS S + JUMPE S,DBW2 + HRRI S,DKBF + .IOT DKOC,S +DBW2: MOVE S,DKBFPP + POPJ A, + +DKBFP: -176,,DKBF +DKBF: .+1 + BLOCK 177 + +PRINT: MOVE G,@0(A) + AOS 0(A) +PRINT1: MOVEI F,0 + ROTC F,7 + JUMPE F,CRR + PUSHJ A,ATYO + JRST PRINT1 + +CRR: MOVEI F,15 + PUSHJ A,ATYO + MOVEI F,12 + JRST ATYO + +DPT: IDIVI E,10. + JUMPE E,DPT1 + PUSH A,F + PUSHJ A,DPT + POP A,F +DPT1: ADDI F,60 +ATYO: .IOT TYOC,F + POPJ A, + +6TYO: JUMPE G,APOPJ + MOVEI F,0 + LSHC F,6 + ADDI F,40 + PUSHJ A,ATYO + JRST 6TYO + +AREAD: MOVE 0,[A,,ASVAC] + BLT 0,ASVAC+16 + JSR GETCHA + + MOVEM 0,ASVAC+4 ;OLD E + MOVE 0,[ASVAC,,A] + BLT 0,P + POPJ A, + +DKIO: SIXBIT / DSK/ + 0 + 0 + 0 + 0 +DKOO: SIXBIT/ 'DSK/ + 0 + 0 + 0 + 0 + +BEAT: BLOCK 10 +BEATI: BLOCK 10 +BEATJ: BLOCK 10 +ASVAC: BLOCK 17 + BLOCK 10 ;BEAT+47 + BLOCK 10 ;BEAT+57 +LBUF: BLOCK 40 +KBLK: BLOCK 1000 +APDLL==40 +APDL: BLOCK APDLL + +CONSTA + +CNBFL: 0 ;^B FLAG +CNEFL: 0 ;^E +KBP: 0 ;KBLK PNTR +CNTFL: 0 ;^T +CNXFL: 0 ;^X +FLBP: 0 ;FILE SPECS LINE BYTE PNTR +GROUPS: 0 ;3200 +TFL: 0 +L: 0 +NPT: 0 +NWR: 0 +EFL: 0 +NWD: 0 +SWX1: 0 +SND: 0 ;3210 +RR1: 0 +JJ: 0 +Y: 0 +Z0: 0 +Q: 0 +TT: 0 +STP: 0 +Z1: 0 ;3220 +NO: 0 +RR: 0 +MN1: 0 +MN2: 0 +WRTF: 0 + + 600000,,0 ;SIMULATED / +NOTE: 0 + 0 + +LENGTH==42000-. + + +LOC 42000 +AP: SETZM TIPR ;RD TITLE LINE + SETZM GOTCHA + SETZB 0,LMB + SETZM NOUNIT + MOVEI P,PDL-1 + SETOM BC + SETOM NL + SETZM NTD + SETZM NDF + MOVNI A,2 + MOVEM A,MJP +PF: PUSHJ P,RCH9 ;READ TILL / OR "END" +XP: MOVE E,[700,,INBUF-1] + SETOM TC + PUSHJ P,ERF ;PRINT TITLE LINE + SETOM TIPR +PFR: SETZM 1U + SETZM 3U + SETOB I,IRL + SETZM TLL + MOVEI A,1 + MOVEM A,RB + MOVEM A,SID + SETZM ROB + SETZM GI + SETZM GIS + SETZM AO + SETZM TC + SETZM MM + SETZM SS + MOVEM A,TBC + MOVEM A,TBC1 + SETOM CO8TC + SETOM CO8KC + MOVEI B,26 + MOVEM B,ST +PUM: PUSHJ P,PUN + JRST S1 + +;PRINT ERROR OR TITLE-- +ERF: SETZM BLC + TLZ F,1 + MOVEI A,1 + MOVEM A,ETC +ERR: ILDB A,E + JUMPE A,ET1 + CAIE A,175 + CAIN A,"/ + JRST EC0 + MOVE C,A + PUSHJ P,TYO + JRST ETR + +ET1: AOS A,ETC + SUB A,TC + JUMPE A,ET2 + CAIE A,1 + JRST ET4 + MOVEI C,"> + PUSHJ P,TYO + TLZ F,1 + JRST ET4 + +ET2: MOVEI C,"< + PUSHJ P,TYO + TLO F,1 +ET4: MOVE A,BLC + CAIGE A,100 + JRST ETS ;CNTRL CHAR + PUSHJ P,CRLF + SETZM BLC ;ERR CHAR CNT + JRST ERR + +ETS: MOVEI C,40 + PUSHJ P,TYO +ETR: AOS BLC +ETI: JRST ERR + +EC0: MOVEI C,"> + TLZE F,1 ;SKIP IF TITLE + PUSHJ P,TYO + MOVEI C,"/ + PUSHJ P,TYO + JRST CRLF +EC: POPJ P,0 + +S1Y: PUSHJ P,ER1 + SIXBIT /TMF/ ;TOO MANY FIELDS + JRST TE + +S1X: PUSHJ P,ER1 + SIXBIT /TFF/ ;TOO FEW FIELDS + JRST TE + +S1W: PUSHJ P,ER1 + SIXBIT /UNC/ ;UNPREPARED COMMA (NO NOTE BEFORE ,) + JRST TE + +S1V: PUSHJ P,ER1 + SIXBIT /ERT/ ;ERRONEOUS TIME (NOT POWER OF 2) + JRST TE + +UNCH: PUSHJ P,ER + SIXBIT /UCH/ ;UNUSED CHARACTER (IN NOTE) + JRST S20 + +S3X: PUSHJ P,CRLF + PUSHJ P,WRITE + ASCIZ /TABLE OVERFLOW. SUBDIVIDE SOURCE PROGRAM. +/ + JRST D,DEATH + +HAP: PUSHJ P,WRITE + ASCIZ / +MEASURE HAS TOO MANY CHARACTERS. REARRANGE TAPE. +/ + JRST D,DEATH + +PUN: MOVE A,[NT,,KT] + BLT A,KT+52 +PUE: MOVE A,[KT,,MT] + BLT A,MT+52 + POPJ P, + +NOSUCH: PUSHJ P,ER1 + SIXBIT /NPS/ ;NO PSUCH SEUDO (WORD WITHOUT , OR NUMBER) + JRST PSR + +RCH1: SKIPN TIPR + JRST RCH3 + PUSHJ P,RDCH + CAIE A,"] + JRST RCH1 ;IGNORE STUFF BETWEEN []S +RCH0: PUSHJ P,RDCH ;READ TILL EOL & INSRT } (175) + CAIN A,"[ + JRST RCH1 + CAIN A,15 + JRST RCH0 ;IGNORE CR +RCH3: CAMN E,[10700,,TIPR] + JRST HAP ;OUT OF BUF + CAIG A,^L + CAIGE A,^I + CAIN A,40 + MOVEI A,0 ;^I THRU ^L AND SP TREATED SAME + IDPB A,E + CAME A,RCHP(J) + MOVSI J,-4 ;RESET J + CAMN A,RCHP(J) + AOBJP J,RCH2 ;FOUND "END" + CAIE A,"/ + JRST RCH0 +RCH2: MOVEI A,175 ;FOUND / OR END + IDPB A,E + MOVE E,[700,,INBUF-1] + MOVEM E,FL1 + MOVEM E,FL2 +RCH: SKIPE NDF + JRST RDCH + ILDB A,E ;FIRST CHAR ON LINE + SKIPN A + MOVEM E,FL1 + JUMPE A,.+2 + MOVE D,FL1 + MOVEM D,FL2 + CAIE A,175 + POPJ P,0 ;EXIT IF NOT 157 + + SKIPE NTD + JRST RCH8 +RCH9: MOVE E,[700,,INBUF-1] + MOVSI J,-4 + JRST RCH0 + +RCHP: "E + "N + "D + 0 + +RCH8: SETOM NDF +RCH7: JRST RDCH + +ER: TDZA F,F +ER1: MOVNI F,A +ERC: MOVEM E,ERCE +ERT: MOVN A,MJP + CAIGE A,B + JRST ERQ + PUSHJ P,WRITE + ASCIZ / +[ TO ERR IS HUMAN---TO FORGIVE, DIVINE. ] +/ +ERQ: MOVE A,TJP + CAME A,TC + JRST ERK + MOVE A,MJP + CAMN A,BC + JRST EC3 +ERK: MOVE E,[700,,INBUF-1] + PUSHJ P,ERF +EC3: MOVE A,BC + MOVEM A,MJP + MOVE A,TC + MOVEM A,TJP + MOVE E,ERCE + MOVE B,@(P) + AOS (P) + PUSHJ P,SIXTYO + JRST CRLF + +WRITE: POP P,B + HRLI B,440700 +WRITE1: ILDB C,B + JUMPE C,A(B) + PUSHJ P,TYO + JRST WRITE1 + +SIXTYO: JUMPE B,CPOPJ + MOVEI C,0 + ROTC B,6 + ADDI C,40 + PUSHJ P,TYO + JRST SIXTYO + +RDCH: .IOT DKIC,A + JUMPL A,RETU + JUMPE A,RDCH ;NULL + CAIL A,177 + JRST RDCH + POPJ P, + +GETCH: MOVE 0,[SAVAC,,1] + BLT 0,P + MOVE 0,GETCHA + MOVEM 0,PREP + MOVEM A,GOTCHA +CPOPJ: POPJ P, + +RETU: HRRZ A,PDL + CAIE A,XP + JRST NED + SETOM GOTCHA +PBW: MOVE 0,[1,,SAVAC] + BLT 0,SAVAC+16 + MOVE 0,GOTCHA + JRST @PREP + +CRLF: MOVEI C,15 + PUSHJ P,TYO + MOVEI C,12 +TYO: .IOT TYOC,C + POPJ P, + +NED: PUSHJ P,WRITE + ASCIZ / +THIS PART HAS NO "END". +/ + JRST DEATH + ;READ A FIELD -- +S1: SETZB M,PSI + SETZB F,CHI + SETZM DOTC + SETZM HDOTC + MOVEI A,40 + MOVEM A,FC + MOVEI A,100 + MOVEM A,FU + SETZM FU1 +S10A: MOVEI N,0 +S10: PUSHJ P,RCH ;RD CHAR + CAIL A,"0 + CAILE A,"9 + JRST S11 + + AOS PSI ;DIGIT + TRO F,LDL + IMULI N,10. + ADDI N,-"0(A) ;CURRENT NUMBER IN N + JRST S10 + +LDL==1000 ;FLAGS LEFT HALF F +GCOUNT==2000 +RCOUNT==4000 +COMCNT==10000 + +S11: TRZN F,LDL + JRST S15 ;PREVIOUS CHAR NOT NUMBER + JUMPN M,.+2 + MOVEM N,NUM+1 + CAIG M,1 + MOVEM N,NUM(M) ;STORE 2 NUMBERS IN NUM+1 & NUM + ADDI M,1 +S15: JUMPE A,S18 + CAIN A,"/ + JRST S18 + AOS CHI ;# OF NON-NUMBERS + AOS PSI ;# OF CHARS + CAIN A,". + JRST S19 + CAIN A,"X + JRST S1A + CAIN A,"R + TRO F,RCOUNT + CAIN A,"G + TRO F,GCOUNT + CAIN A,", + TRO F,COMCNT + JRST S10A + +S19: MOVE A,FC ;. + MOVEM A,FU + ADDM A,FU1 + AOS DOTC +S1A: MOVE A,FC ;X + ASH A,-1 + MOVEM A,FC + AOS HDOTC + JRST S10A + +;START PARSING FIELD-- +S18: AOS TC ;/ OR ^@ (SEPARATOR) + MOVEM A,TRM ;TERMINATOR + SKIPN PSI + JRST TE ;WORD CONTAINS NO CHARS + JUMPN M,.+3 + TRNN F,COMCNT ;NO NUMS + JRST PC ;NO COMMAS + SKIPE CHI + JRST S1E ;NUMS AND CHARS +S18A: SKIPE AO ;ONLY NUMBERS + POPJ P,0 ;WAS ARGUMENT + MOVE A,TBC1 ;MUST BE MEASURE # + CAMN A,NUM + JRST TE + PUSHJ P,ER + SIXBIT /BBL/ ;BAD BAR LABEL + JRST TE + + ;WORD CONTAINS #'S AND LETTERS -- + ;TRY TO DECODE AS NOTE +S1E: MOVE A,CHI ;RG,GR + SUB A,HDOTC + CAIG M,1 + JUMPE A,S18A ;IF ARG WITH . + SKIPN AO + JRST S1H + SETZM AO + PUSHJ P,ER + SIXBIT /AGM/ ;ARGUMENT GREADILY MASTICATES (EXPECTED NUMBER) +S1H: MOVEM M,B + TRNE F,COMCNT + ADDI M,1 + TRNE F,RCOUNT + ADDI M,1 + CAILE M,2 + JRST S1Y ;TOO MANY FIELDS + TRNE F,COMCNT + JRST S1S + TRNE F,GCOUNT + ADDI M,1 + SUBI M,2 + JUMPL M,S1X ;TOO FEW FIELDS +;FOLLOWING INSTR MIGHT BE SCREWING GRACE NOTES + JUMPN M,S1T + TRNN F,GCOUNT +S1T: TDZA G,G + MOVEI G,1 +SLI: TRNE F,RCOUNT + JRST S1K + MOVEI H,0 + JUMPN B,S1L + MOVEI H,2 ;NO #S IN FIELD + JRST S1L + +S1S: MOVEI G,2 ;, + JRST SLI + +S1K: MOVEI H,1 ;R + MOVE A,NL + MOVE B,NOT(A) + SKIPN SID + CAIL B,600000 + JRST S1L + ANDI B,117777 + ADDI B,400000 + MOVEM B,NOT(A) +S1L: JUMPE G,S1N + CAIL G,2 + JRST S1M + MOVEI I,2 + JRST S1O + +S1M: JUMPL I,S1W ;UNPREPARED COMMA + JRST S1O + +S1N: MOVEI I,100 + MOVEI B,1 + MOVE C,NUM+1 ;NOTE TIME FIELD + JUMPE C,S1V + CAILE C,64. + JRST S1V +S1Q: ASH C,-1 + JUMPE C,S1P + ASH I,-1 + ASH B,1 + MOVE A,FU + ASH A,-1 + MOVEM A,FU + JRST S1Q +S1P: CAME B,NUM+1 + JRST S1V ;TIME NOT PWR OF 2 + SKIPE FU + JRST S1O + PUSHJ P,ER + SIXBIT /DTU/ ;DOT UNDERFLOW-VALUE OF DOT < 1/64 +S1O: MOVE A,I + ASH A,-1 + MOVEM A,FC + JRST S2 + +S2: SETZM FU ;DECODE NOTE WORD + SETZM SR + SETZM 3I + SETZM SI + SETZM ACI + SETZM ACC + SETZM ET + SETZM ETE + SETZM ESV + MOVE E,FL2 + MOVEM E,FL1 +S20: PUSHJ P,RCH ;DIGIT, R REST, G GRACE, OR T TIME + CAIL A,140 + JRST UNCH ;LOWER CASE + MOVE B,ACI +S21: JRA A,@S21T(A) + +S21T: S2R ;^@ + UNCH ;^A + UNCH ;^B + UNCH ;^C + S2R ;^D + UNCH ;^E + UNCH ;^F + UNCH ;^G + UNCH ;^H + S2R ;^I + S2R ;^J + S2R ;^K + S2R ;^L + S2R ;^M + UNCH ;^N + UNCH ;^O + UNCH ;^P + UNCH ;^Q + UNCH ;^R + UNCH ;^S + UNCH ;^T + UNCH ;^U + UNCH ;^V + UNCH ;^W + UNCH ;^X + UNCH ;^Y + UNCH ;^Z + UNCH ;^[ + UNCH ;^\ + UNCH ;^] + UNCH ;^^ + UNCH ;^_ + S2R ;SP + UNCH ;! + UNCH ;" + UNCH ;# + UNCH ;$ + UNCH ;% + UNCH ;& + UNCH ;' + S2H ;( + S2J ;) + UNCH ;* + S2H ;+ + S20 ;, + S2I ;- + S2P ;. + S2R ;/ + S20 ;0 + S20 ;1 + S20 ;2 + S20 ;3 + S20 ;4 + S20 ;5 + S20 ;6 + S20 ;7 + S20 ;8 + S20 ;9 + UNCH ;: + UNCH ;; + UNCH ;< + S2J ;= + UNCH ;> + UNCH ;? + UNCH ;@ + S2E ;A + S2F ;B + S2G ;C + S2K ;D + S2D ;E + UNCH ;F + S20 ;G + 2SS ;H + UNCH ;I + UNCH ;J + UNCH ;K + S2C ;L + S2L ;M + S2M ;N + UNCH ;O + S38 ;P + 2SR ;Q + S20 ;R + S2B ;S + S20 ;T + S2N ;U + UNCH ;V + S2O ;W + S2Q ;X + UNCH ;Y + UNCH ;Z + UNCH ;[ + UNCH ;\ + S20 ;] + UNCH ;^ + UNCH ;_ + + +S2B: SUBI A,200000 ;S STACCATO +S2C: ADDI A,360000 ;L LEGATO +2SR: SUBI A,20000 ;Q QUARTER +2SS: ADDI A,40000 ;H HALF +S2D: MOVEM A,SV ;E EIGTH +S2A: AOS SI + JRST S20 + +S2E: ADDI A,30 ;A DOWN 1 STAFF +S2F: SUBI A,14 ;B UP STAFF + ADDM A,SR + JRST S20 + +S2Z: SKIPA A,[200000] +S2Y: MOVEI A,400000 + MOVEM A,ESV + JRST S20 + +S2G: MOVEI A,100000 ;C TRIPLET + MOVEM A,3I + JRST S20 + +S2H: MOVEI A,2 ;( OR + SHARP +S2I: SUBI A,1 ;- FLAT + JUMPL B,S24 + ADDM A,ACC + MOVMM A,ACI + JRST S20 + +S24: PUSHJ P,ER + SIXBIT /NOR/ ;NATURAL OVERIDES ) OR = IN SAME NOTE AS ( + - + JRST S20 + +S2J: JUMPG B,S26 ;) OR = NATURAL +S27: SETOM ACI + JRST S20 + +S26: SETOM ACI + JRST S24 + +S38: ADDI A,1 ;P EMBELLISHMENT +S2O: ADDI A,1 ;W EMB +S2N: ADDI A,1 ;U EMB +S2M: ADDI A,1 ;N EMB +S2L: ADDI A,1 ;M EMB +S2K: ADDI A,1 ;D EMB +S28: MOVEM A,ET + SKIPN ETE + JRST S29 + PUSHJ P,ER + SIXBIT /TME/ ;TOO MANY EMBELISHMENTS (IN SAME NOTE) + MOVE A,ET +S29: MOVEM A,ETE + JRST S20 + +S2P: MOVE A,FC ;. HALF TIME + ADDM A,FU +S2Q: MOVE A,FC ;X HALF DOT + ASH A,-1 + MOVEM A,FC + JRST S20 + +;FOUND END OF NOTE WORD; DECODE-- +S2R: MOVE A,SI ;# OF ARTICS + JUMPE A,S51 + CAIG A,1 + JRST S52 + PUSHJ P,ER + SIXBIT /TMS/ ;TOO MANY ARTICULATIONS +S51: MOVE A,SS ;SET NORMAL ARTIC MODE + MOVEM A,SV +S52: TRNE F,COMCNT + JRST S69 ;IF , + MOVE A,3I + MOVEM A,CCC ;SET TRIP INDICATOR +2S3: MOVE A,I + ADD A,FU + MOVEM A,NFT ;TIME PART + MOVEM A,NFP + TRNE F,GCOUNT + JRST 2S1 ;IF GRACE + SETZM GI + MOVE A,ROB + JUMPE A,S2S + MOVNS A + ADDB A,NFT + CAIGE A,2 + JRST 2S2 +22S: SETZM ROB + JRST S2S + +2S2: SUB A,ROB + JUMPGE A,22S + MOVE A,NLS + MOVEM A,NL + SETZM ROB + PUSHJ P,ER + SIXBIT /ITG/ ;INSUFFICIENT TIME FOR GRACE NOTE + JRST 2S3 + +2S1: ADDM I,ROB ;GRACE + MOVEI A,1 + MOVEM A,GI + JRST S2S + +S69: MOVE A,NFP ;COMMA IN WORD + MOVEM A,NFT + MOVE B,CCC + SKIPN 3I + MOVEM B,3I +S2T: SKIPN FU + JRST 2S4 + PUSHJ P,ER + SIXBIT /TIC/ ;TIME IN COMMA NOTE +2S4: TRNE F,GCOUNT + JRST 2S1 + SETZM GI +S2S: JUMPE H,S2U ;IF PITCH IS NUM + CAILE H,1 + JRST SV2 ;IF COMMA + MOVE A,ACI ;IF REST + ADD A,ETE + JUMPE A,S2W + PUSHJ P,ER + SIXBIT /AIR/ ;ACCIDENTAL IN REST +S2W: MOVEI A,200 + MOVEM A,TNE + JRST S70 + +S2U: MOVE A,NUM ;ACCIDENTAL + ADD A,SR + ADD A,ST + MOVEM A,TON + JUMPL A,S40 + CAIGE A,53 + JRST S2V +S40: PUSHJ P,ER + SIXBIT /UAT/ ;UNAVAILABLE TONE (OUT OF RANGE) + JRST S2W + +SV2: MOVE A,TNE + CAIN A,200 + JRST S70 + MOVE A,TON +S2V: SKIPN ACI + JRST S31 + MOVE B,NT(A) ;ACI IN FLD + ADD B,ACC + MOVE C,B + ADD C,TLL + CAIL C,2 + CAIL C,77 + JRST S41 + MOVEM B,MT(A) +S31: MOVE B,MT(A) + ADD B,TLL + CAIL B,2 + CAIL B,77 + JRST S40 ;UAT + ASH B,7 + MOVEM B,TNE +S30: SKIPN ETE + JRST S70 + SKIPN 3I ;EMB + JRST S71 +S72: PUSHJ P,ER + SIXBIT /ETR/ ;EMBELLISHMENT ON TRIPLET + JRST S70 + +S41: PUSHJ P,ER + SIXBIT /AOR/ ;ACCIDENTAL OUT OF RANGE + JRST S2W + +S71: MOVE A,ETE ;EMB + MOVE A,EBL-1(A) + SUB A,NFT + MOVNS A +S99: MOVEM A,EX + JUMPGE A,S73 +S79: PUSHJ P,ER + SIXBIT /EIT/ ;EMBELLISHMENT ON INSUFFICIENT TIME + JRST S70 + +S73: MOVE A,TON + MOVE B,MT+1(A) + ADD B,TLL + CAIL B,2 + CAILE B,76 + JRST S39 + ASH B,7 + MOVEM B,TNF + MOVE B,NT+52(A) + ADD B,TLL + CAIL B,2 + CAILE B,76 + JRST S39 + ASH B,7 + MOVEM B,TND + MOVE A,ETE + JRST @EBD-1(A) + +EBL: 6 + 4 + 10 + 10 + 4 + 5 +EBD: S81 + S82 + S83 + S84 + S85 + S86 + +S81: MOVE B,TNE + ADDI B,2 + PUSHJ P,CN1 + MOVE B,TND + ADDI B,2 + PUSHJ P,CN1 + JRST S75 + +S82: TDZA A,A +S83: MOVEI A,4 + MOVEM A,CUT +S76: MOVE A,NFT + TRNE A,3 + JRST S79 + MOVEM A,C +S77: CAMG C,CUT + JRST S78 + MOVEI B,2 + ADD B,TNF + PUSHJ P,CN1 + MOVEI B,2 + ADD B,TNE + PUSHJ P,CN1 + MOVEI B,4 + ADDM B,CUT + JRST S77 + +S84: MOVEI B,400002 + ADD B,TNF + PUSHJ P,CN1 + MOVEI B,400002 + ADD B,TNE + PUSHJ P,CN1 + MOVEI B,400002 + ADD B,TND + PUSHJ P,CN1 + JRST S75 + +S85: MOVEI B,2 + ADD B,TNE + PUSHJ P,CN1 + JRST S83 + +S86: MOVEI B,1 + ADD B,TNF + PUSHJ P,CN1 + MOVEI B,1 + ADD B,TNE + PUSHJ P,CN1 + MOVEI B,1 + ADD B,TNF + PUSHJ P,CN1 +S75: MOVE B,EX + ADDI B,2 + ADD B,TNE + ADD B,SV + PUSHJ P,CN + JRST S32 + +S78: MOVE A,ETE + JRST @.(A) + +EBE: S32 + S32 + S93 + S32 + S95 + S32 + +S93: MOVEI B,2 + ADD B,TND + PUSHJ P,CN + MOVEI B,2 + ADD B,TNE + PUSHJ P,CN + JRST S32 + +S95: MOVEI B,2 + ADD B,TNF + PUSHJ P,CN + JRST S32 + +S39: PUSHJ P,ER + SIXBIT /EOR/ ;EMBELLISHMENT OUT OF RANGE +S70: MOVE B,NFT ;NOTE ENCODED + ADD B,TNE + ADD B,SV + ADD B,3I + PUSHJ P,CN + SKIPN GI + JRST 2SA + SKIPE GIS + JRST S32 + MOVNI A,1 + ADD A,NL + MOVEM A,NLS + AOSA GIS +2SA: SETZM GIS +S32: MOVE A,NFT + SKIPN 3I + ASH A,1 + ADD A,NFT +S33: MOVEM A,TU ;TOTAL UNITS THIS MEAS + ADDM A,MM + MOVE A,SI + MOVEM A,SID +PSR: SETZM AO ;END OF FIELD +TE: SKIPN TRM + JUMPE 0,S1 + MOVEI A,1 ;EOL + MOVEM A,SID + SETZM TC + MOVE A,3U + ASH A,1 + SKIPN NOUNIT + CAMN A,MM + JRST TE1 ;MEAS CORRECT LENGTH + SETZM TJP + CAML A,MM + JRST TE9 + PUSHJ P,ER + SIXBIT /MTL/ ;MEASURE TOO LONG + JRST TE1 + +TE9: PUSHJ P,ER + SIXBIT /MTS/ ;MEASURE TOO SHORT +TE1: SKIPN ROB + JRST TE0 + PUSHJ P,ER + SIXBIT /ITG/ ;INSUFFICIENT TIME FOR GRACE NOTE + SETZM ROB + SETZM GI + SETZM GIS + MOVE A,NLS + MOVEM A,NL +TE0: MOVEI B,600000 + PUSHJ P,CN +TEB: PUSHJ P,SBC1 + MOVE B,LMB + MOVEM B,BAR(A) + MOVEI A,1 + ADD A,NL + MOVEM A,LMB + SETZM MM + SETZM SS + MOVEM E,MBH + SETZM AO + PUSHJ P,PUE + JRST S1 + +;FIELD IS COMMAND-- DECODE +PC: SKIPN AO + JRST PC01 + SETZM AO + PUSHJ P,ER + SIXBIT /AGM/ ;ARG GREADILY MASTICATES (WANTED NUMBER) +PC01: MOVE E,FL2 + MOVEM E,FL1 + MOVEI B,0 +PC0: PUSHJ P,RCH + JUMPE A,PC1 + CAIN A,"/ + JRST PC1 + SUBI A,40 ;SIXBIT + ROT A,-6 + TLNN B,770000 + ROTC A,6 + JRST PC0 + +PC1: HRLZI A,PNM-PCD + CAME B,PNM(A) + AOBJN A,.-1 + MOVEI B,0 + JRST @PCD(A) +PNM: SIXBIT / S/ + SIXBIT / L/ + SIXBIT / E/ + SIXBIT / END/ + SIXBIT / BASS/ + SIXBIT /TREBLE/ + SIXBIT / TENOR/ + SIXBIT / ALTO/ + SIXBIT / UNITS/ + SIXBIT / KEY/ + SIXBIT / REST/ + SIXBIT / COPY/ + SIXBIT / UP/ + SIXBIT / DOWN/ + SIXBIT / H/ + SIXBIT / Q/ + SIXBIT / TEMPO/ + SIXBIT / BEAT/ + SIXBIT / RG/ + SIXBIT / GR/ + SIXBIT /TEMPAR/ + SIXBIT / STOP/ + SIXBIT / TIME/ + SIXBIT / TEXT/ + SIXBIT /SOPRAN/ + SIXBIT /NOUNIT/ + SIXBIT / MM/ + SIXBIT / MMPAR/ + +PCD: PV1 + PV2 + PV3 + PV4 + PV5 + PV6 + PV7 + PV8 + PV9 + PVA + PVB + PVC + PVD + PVE + PVF + PVG + PVH + PVI + S1E + S1E + PVJ + PVK + PVL + PVM + PVN + PVO + PVP + PVQ + NOSUCH + +PV2: ADDI B,200000 ;LEGATO +PV1: ADDI B,140000 ;STACCATO +PVF: ADDI B,20000 ;HALF +PVG: ADDI B,20000 ;QUARTER +PV3: MOVEM B,SS ;EIGTH + JRST PSR + +PV6: ADDI B,2 ;TREBLE +PVN: ADDI B,4 ;SOPRAN +PV8: ADDI B,2 ;ALTO +PV7: ADDI B,4 ;TENOR +PV5: ADDI B,12 ;BASS + MOVEM B,ST + JRST PSR + +PV9: MOVEI A,1 ;UNITS + MOVEM A,AO ;A0=# OF ARGS + PUSHJ P,TE ;GET ARG + MOVE A,NUM + MOVEM A,1U + IMULI A,3 + MOVEM A,3U + SETOM IRL + JRST PSR + +PVO: SETOM NOUNIT ;NOUNIT + JRST PSR + +PV4: TDZA B,B ;END +PVM: MOVEI B,1 ;TEXT + MOVEM B,PVMV + PUSH P,E + PUSHJ P,SBC1 + MOVEI B,600000 + MOVEM B,BAR(A) + AOS A,NL + PUSHJ P,PBW ;HANDSHAKE + SETZB E,F + JRST P410 + +P41: MOVE A,NOT(E) ;FEED BACK NOTS + ADD F,A + CAIL F,-1 + SUBI F,-1 + PUSHJ P,PBW + ADDI E,1 +P410: CAMGE E,NL + JRST P41 + MOVE A,F + PUSHJ P,PBW + AOS A,BC + PUSHJ P,PBW ;FEED BACK BARS + MOVNI A,1 + SKIPE PVMV + PUSHJ P,PBW ;TEXT + SETZB E,F +P42: MOVN D,E + MOVE A,BAR(D) + ADD F,A + CAIL F,-1 + SUBI F,-1 + PUSHJ P,PBW + ADDI E,1 + CAME E,BC + JRST P42 + MOVE A,F + PUSHJ P,PBW + SKIPN PVMV + JRST PBW + SETOM NTD +P421: MOVE E,[440700,,F] + SETZ F +P420: EXCH E,(P) ;PUSHED E + PUSHJ P,RCH + EXCH E,(P) + SKIPN A + MOVEI A,40 + CAIN A,"/ + JRST P420 + IDPB A,E + CAIN A,"\ + TLZ E,770000 + TLNE E,760000 + JRST P420 + MOVE A,F + TLNN E,COMCNT + TRO A,1 + PUSHJ P,PBW + JRST P421 + +PVL: MOVEI A,2 ;TIME + MOVEM A,AO + SKIPN MM + JRST PL1 + PUSHJ P,ER1 + SIXBIT /ILT/ ;ILLEGAL LOCATION FOR TIME + JRST I2A + +PL2: PUSHJ P,ER + SIXBIT /BTD/ ;BAD TIME DENOMINATOR (NOT BETWEEN 1 64) + JRST PSR + +PL3: PUSHJ P,ER + SIXBIT /BTN/ ;BAD TIME NUMERATOR (NOT IN RANGE 1 127) + JRST PSR + +PL1: PUSHJ P,TE ;TIME + MOVE A,NUM + MOVEM A,PVL1 + PUSHJ P,TE + MOVE A,PVL1 ;TIME NUMERATOR + MOVE C,NUM ;DENOMINATOR + JUMPLE C,PL2 + CAILE C,64. + JRST PL2 + JUMPL A,PL3 + CAILE A,127. + JRST PL3 + ASH A,5 ;*32. + IDIV A,C + MOVEM B,PVL9 + MOVEM A,1U + IMULI A,3 + MOVEM A,3U + MOVE A,PVL1 +;FOLLOWING LINE SEEMS UNNECESSARY + MOVE C,NUM + MOVEI B,600000 + DPB A,[60700,,B] + DPB C,[600,,B] + PUSHJ P,SBC + MOVEM B,BAR(A) + MOVEM B,CO8TC + SKIPN PVL9 + JRST PSR + PUSHJ P,ER + SIXBIT /NIU/ ;NON INTEGRAL UNITS (TIME*32 NOT INTEGER) + JRST PSR + +PVJ: ADDI B,1 ;TEMPAR +PVH: MOVEM B,PJVAR ;TEMPO + AOS AO + PUSHJ P,TE + MOVE A,NUM + ANDI A,17777 + MOVEI B,10630 + IDIV B,A + MOVEI A,2 +PVH2: CAIL B,2000 + JRST PVH1 + DPB A,[120300,,B] + MOVE A,PJVAR + ADD B,PVHT(A) + PUSHJ P,CN + JRST PSR +;NO CHECK FOR TS + +PVHT: 700000 + 720000 + +PVH1: PUSHJ P,ER + SIXBIT /TTF/ ;TEMPO TOO FAST + JRST PSR + +PVQ: ADDI B,1 ;MMPAR +PVP: MOVEM B,PJVAR ;MM + MOVEI A,2 + MOVEM A,AO + PUSHJ P,TE + MOVE A,NUM + MOVSI B,-4 + CAME A,PVPT(B) + AOBJN B,.-1 + JUMPE B,PVP1 + MOVE A,FU1 ;40 IF DOTTED + CAIE A,40 + JUMPN A,PVP1 + LSH B,1 + SKIPE A + ADDI B,1 + HRRM B,PVPVAR + PUSHJ P,TE + MOVE B,NUM + MOVE A,PVPVAR + JRST PVH2 + +PVPT: 10 + 4 + 2 + 1 + +PVP1: PUSHJ P,ER + SIXBIT /UNV/ ;UNAVAIL NOTE VALUE; FIRST ARG TO MM NOT 1 2 4 8 + PUSHJ P,TE ;GET 2ND ARG + JRST PSR + +PVA: PUSHJ P,RCH ;KEY -- GET NEXT CHAR + JUMPE A,PVA + MOVEI B,1 + CAIE A,") + CAIN A,"= + JRST PUM1 ;NATURAL + CAIE A,"( + CAIN A,"+ + JRST PUS ;SHARP + CAIN A,"- + JRST PUF ;FLAT + PUSHJ P,ER + SIXBIT /MYK/ ;MYSTERIOUS KEY + JRST S1 + +PUS: MOVEM B,AO ;SHARP + PUSHJ P,S1 + PUSHJ P,PUN +PUT: MOVEI A,1 + MOVEI B,4 + MOVEI C,3 + JRST PUW + +PUF: MOVEM B,AO ;FLAT + PUSHJ P,S1 + PUSHJ P,PUN +PUG: MOVNI A,1 + MOVEI B,3 + MOVEI C,6 +PUW: MOVEM A,ACC + MOVEM B,ACI + MOVE D,NUM + IMUL D,A + TRO D,700000 + PUSHJ P,SBC + HRRZM D,BAR(A) + HRRZM D,CO8KC +PUW1: MOVEM C,TNE + SKIPN D,NUM + JRST PW2 + MOVE D,TNE +PW1: MOVE A,NT(D) + ADD A,ACC + MOVEM A,KT(D) + ADDI D,7 + CAIGE D,53 + JRST PW1 + SOS NUM + MOVE C,TNE + ADD C,B + CAIL C,7 + SUBI C,7 + JRST PUW1 + +PW2: PUSHJ P,PUE + JRST PSR + +PUM1: SKIPE MM ;NATURAL + JRST PUM2 ;WLK + PUSHJ P,SBC + MOVEI B,700000 + MOVEM B,BAR(A) + HRRZM B,CO8KC + JRST PUM + +PUM2: PUSHJ P,ER + SIXBIT /WLK/ ;WRONG LOCATION FOR KEY (NOT BEGINNING OF MEASURE) + JRST PUM + +PVD: AOS AO ;UP + PUSHJ P,TE + MOVE A,NUM + MOVEM A,TLL + JRST PSR + +PVE: AOS AO ;DOWN + MOVEM A,AO + PUSHJ P,TE + MOVN A,NUM + MOVEM A,TLL + JRST PSR + +PVB: AOS AO ;REST + SKIPN MM + JRST PB2 + PUSHJ P,ER1 + SIXBIT /ILR/ ;ILLEGAL LOC FOR REST + JRST CO1 + +PB2: PUSHJ P,TE ;REST +PB1: SKIPN NUM + JRST PSR + SKIPL IRL + JRST PB3 + MOVN B,1U + MOVEM B,P1U +PB4: MOVN B,P1U + CAILE B,40 + MOVEI B,40 + ADDM B,P1U + ADDI B,100 + ASH B,1 + PUSHJ P,SNL + MOVEM B,NOT(A) + SKIPGE IRL + MOVEM A,IRL + SKIPE P1U + JRST PB4 + PUSHJ P,SNL + MOVEI B,600000 + MOVEM B,NOT(A) + MOVE F,LMB + ADDI A,1 + MOVEM A,LMB + PUSHJ P,SBC1 + MOVEM F,BAR(A) ;INCLUDE "TEMPO" IN MEASURE + SOSN NUM + JRST PSR +PB3: PUSHJ P,SBC1 + MOVE B,IRL + MOVEM B,BAR(A) + SOSE NUM + JRST PB3 + JRST PSR + +PVC: MOVEI A,2 ;COPY + ADDM A,AO + SKIPN MM + JRST COW + PUSHJ P,ER1 + SIXBIT /ILC/ ;ILLEGAL LOCATION FOR COPY +I2A: PUSHJ P,TE +CO1: PUSHJ P,TE + JRST PSR + +COW: PUSHJ P,TE ;COPY +CO2: MOVE A,NUM + MOVEM A,CBH + JUMPE A,CO3 + CAMGE A,TBC1 + JRST CO4 +CO3: PUSHJ P,ER1 + SIXBIT /BLC/ ;BAD FIRST ARG TO COPY +CO4: PUSHJ P,TE +CO5: MOVE A,NUM + CAMGE A,CBH + JRST CO6 ;BAD 2ND ARG +CO7: SOS A,CBH +CO8: MOVEM A,CO8A + SETOM CO8TS + SETOM CO8KS + MOVEI S,0 +CO81: MOVE R,BAR(S) + CAIG R,600000 + JRST CO88 + TRNE R,100000 + MOVEM R,CO8KS + TRNN R,100000 + MOVEM R,CO8TS + SOJA S,CO81 +CO88: SOSL CO8A + SOJA S,CO81 + SKIPGE B,CO8KS + JRST CO81A + PUSHJ P,SBC + MOVEM B,BAR(A) +CO81A: SKIPGE B,CO8TS + JRST CO81B + PUSHJ P,SBC + MOVEM B,BAR(A) +CO81B: MOVE B,R + PUSHJ P,SBC1 + MOVEM B,BAR(A) + AOS A,CBH + CAMGE A,NUM + JRST CO8 + SKIPL CO8KS + SKIPGE B,CO8KC + JRST CO82A + PUSHJ P,SBC + MOVEM B,BAR(A) +CO82A: SKIPL CO8TS + SKIPGE B,CO8TC + JRST CO82B + PUSHJ P,SBC + MOVEM B,BAR(A) +CO82B: JRST PSR + +CO6: PUSHJ P,ER1 + SIXBIT /BRC/ ;BAD 2ND ARG TO COPY + JRST PSR + +PVK: MOVEI A,1 ;STOP + MOVEM A,AO + PUSHJ P,TE + MOVE B,NUM + ADDI B,600001 + PUSHJ P,CN + JRST PSR + +PVI: MOVEI A,2 ;BEAT + ADDM A,AO + PUSHJ P,TE + MOVE A,NUM + MOVEM A,BEAT1 + JUMPE A,PVI3 + PUSHJ P,TE + MOVE A,BEAT1 + TRZN A,-200 + JRST PVI1 + PUSHJ P,ER1 + SIXBIT /BLB/ ;BAD LEFT ARG TO BEAT (<255) + JRST PSR + +PVI1: EXCH A,NUM + JUMPE A,PVI1+4 + TRZN A,-100 + JRST PVI2 + PUSHJ P,ER1 + SIXBIT /BRB/ ;BAD RIGHT ARG TO BEAT (>127) + JRST PSR + +PVI2: ASH A,7 + ADDI A,NUM +PVI3: MOVEI B,740000(A) + PUSHJ P,CN + JRST PSR + +SBC1: AOS TBC1 +SBC: AOS TBC + AOS A,BC + ADD A,NL + CAIL A,ALL + JRST S3X ;TABLE OVERFLOW + MOVN A,BC + POPJ P, + +SNL: AOS A,NL + ADD A,BC + CAIL A,ALL + JRST S3X ;TABLE OVERFLOW + MOVE A,NL + POPJ P, + +CN1: ADD B,ESV +CN: MOVEM B,NF + PUSHJ P,SNL + MOVEM B,NOT(A) + POPJ P, + +NUM: 0 + 0 +NT: 2 ;THIS TABLE ORIGINALLY INTENDED FOR 6 OCTAVES + 4 ;MUSCOM ONLY USES 5 + 6 + 7 + 11 + 13 + 15 + 16 + 20 + 22 + 23 + 25 + 27 + 31 + 32 + 34 + 36 + 37 + 41 + 43 + 45 + 46 + 50 + 52 + 53 + 55 + 57 + 61 + 62 + 64 + 66 + 67 + 71 + 73 + 75 + 76 + 100 + 102 + 103 + 105 + 107 + 111 + 112 +MT: BLOCK 53 +KT: BLOCK 53 +SAVAC: BLOCK 17 +PDL: BLOCK 20 +INBUF: BLOCK 300 + +TIPR: 0 ;-1 IF TITLE PRINTED +GOTCHA: 0 +LMB: 0 +NOUNIT: 0 ;-1 IF NOUNITS +BC: 0 +NL: 0 +NTD: 0 +NDF: 0 +TC: 0 ;# FIELDS INTO BAR +1U: 0 ;# 32ND NOTES PER MEASURE +3U: 0 ;3* 1U +IRL: 0 ;REST LENGTH +TLL: 0 ;TRANPOSITION +RB: 0 +SID: 0 ;ARTICS PREV NOTE +ROB: 0 ;AMT OF TIME TO ROB FOR G +GI: 0 ;1 IF GRACE NOTE +GIS: 0 +AO: 0 ;# OF ARGS +MM: 0 ;TIME INTO MEASURE +SS: 0 ;BASE ARTIC +TBC: 0 +TBC1: 0 ;CURRENT MEASURE +CO8TC: 0 ;TIME SIG +CO8KC: 0 ;KEY SIG +ST: 0 ;CLEF OFFSET +BLC: 0 +ETC: 0 +FL1: 0 +FL2: 0 +ERCE: 0 +MJP: 0 +TJP: 0 +PSI: 0 ;S1 # OF CHARS +CHI: 0 ;# OF NON-DIGITS +DOTC: 0 ;# OF DOTS +HDOTC: 0 ;DOTS+XS +FC: 0 ;DIV POWER OF DOTS +FU: 0 +FU1: 0 +TRM: 0 ;FIELD TERMINATOR +SR: 0 ;STAFF OFFSET (A&B) +3I: 0 ;100,000 IF TRIPLET +SI: 0 ;# OF ARTICS +ACI: 0 ;ACC OFFSET FROM KEY 0-NONE -1NATURAL 1-ACCIDENTAL +ACC: 0 ;ACC OFFSET FROM C MAJ +ET: 0 ;EMB INDEX # +ETE: 0 ;DITTO? +ESV: 0 +SV: 0 ;ARTIC FOR THIS NOTE +CCC: 0 ;3I MOVED HERE +NFT: 0 ;NOTE FIELD TIME +NFP: 0 +NLS: 0 +TNE: 0 ;NOTE_7 +TON: 0 ;NATURAL TONE +EX: 0 +TNF: 0 +TND: 0 +CUT: 0 +TU: 0 ;TOTAL UNITS THIS NOTE +MBH: 0 +PVMV: 0 +PVL1: 0 ;NUMBER OF NOTES PER MEAS +PVL9: 0 ;NON ZERO IF NIU +PJVAR: 0 ;1 IF MPAR +PVPVAR: 0 ;MM ARG +P1U: 0 +CBH: 0 ;COPY 1ST ARG +CO8A: 0 ;MEASURE COPYING +CO8TS: 0 ;-1 IF COPYING +CO8KS: 0 ;DITTO +BEAT1: 0 +NF: 0 ;NOTE FIELD + +CONSTAN + +NOT=. +BAR=55770 +ALL=BAR-NOT-1 + +END DEATH