/THE MASTER GRIND PROGRAM XLIST OFF IFNDEF OFF ON= 0 DECIMAL XLIST ON; IFZERO 1 < LAST EDIT: 13-DEC-1982 17:00:00 CJL MAY BE ASSEMBLED WITH '/J' SWITCH SET. GENERAL PARAMETERS: > XLIST ON / BLKPRT= 0 /DON'T REPORT WHETHER MOVEMENT IS A BLINK BLKPRT= 1 /REPORT WHETHER MOVEMENT IS BLINK BLKTST= 0 /DON'T THROW AWAY BLINKS / BLKTST= 1 /THROW AWAY BLINKS CHAN= 0 /USE FOUR WORD FORMAT / CHAN= 2 /USE TWO WORD FORMAT / EAESET= 0 /SIMULATE PDP-8/E EAE USING PDP-8/I EAE EAESET= 1 /USE PDP-8/E EAE INSTRUCTION SET / FILE= 0 /OUTPUT TO TTY: DIRECTLY FILE= 1 /OUTPUT TO P?S/8 FILES NOT TTY: FREQ= 0 /USE SACCADIC ACTIVITY AS PROTOTYPE / FREQ= 1 /USE SPIKE ACTIVITY AS PROTOTYPE MODEM= 0 /DON'T ANALYZE MODEM OUTPUT / MODEM= 1 /ANALYZE MODEM OUTPUT (IF CHAN= 0) N= 11 /QUANTITY OF POINTS FOR DIFFERENTIALS (MUST BE ODD) NERVE= 0 /DON'T LOCATE SPIKES / NERVE= 1 /LOCATE SPIKES ABOUT SACCADIC MOVEMENTS OKN= 0 /CONSIDER SLOW PHASE AS MOVEMENT / OKN= 1 /DON'T CONSIDER SLOW PHASES AS MOVEMENTS PARM1= 11 /PAUSE BEGINNING CORRECTION FACTOR (MS.) PARM1F= 4 /PAUSE BEGINNING CORRECTION FACTOR (100 US.) PARM2= -96 /PAUSE ENDING CORRECTION FACTOR (MS.) PARM2F= 0 /PAUSE ENDING CORRECTION FACTOR (100 US.) PARM3= -32 /MOVEMENT BEGINNING CORRECTION FACTOR (MS.) PARM3F= 0 /MOVEMENT BEGINNING CORRECTION FACTOR (100 US.) PARM4= -4 /MOVEMENT ENDING CORRECTION FACTOR (MS.) PARM4F= 8 /MOVEMENT ENDING CORRECTION FACTOR (100 US.) PDP12= 0 /4 WORD FORMAT NOT GENERATED BY KW12A / PDP12= 1 /4 WORD FORMAT GENERATED AT KW12A RATE (NOT DK8EP) / SAC= 0 /DON'T USE SACCADIC QUICK PHASE AS PROTOTYPE SAC= 1 /USE SACCADIC QUICK PHASE AS PROTOTYPE TIME1= 120 /BACKUP BEFORE FIRING BURST TIME (MS.) TIME1F= 0 /BACKUP BEFORE FIRING BURST TIME (100 US.) TIME2= 80 /BURST ONSET THRESHOLD TIME (MS.) TIME2F= 0 /BURST ONSET THRESHOLD TIME (100 US.) TIME3= 80 /BURST OFFSET THRESHOLD TIME (MS.) TIME3F= 0 /BURST OFFSET THRESHOLD TIME (100 US.) / N. B.: PARM1, PARM2, PARM3, AND PARM4 CAN BE NEGATIVE, HOWEVER THE / CORRESPONDING FRACTIONS MUST BE GIVEN IN POSITIVE FORM. XLIST OFF IFNZRO CHAN-2%2&MODEM&SAC < XLIST ON XLIST ON; IFZERO 1 < SYSTEM OPERATION: /A INCLUDE PRINTOUT OF STATUS OF "STIMULUS RELATED"HISTOGRAMS. 0: NOT PRESENT 1: HISTOGRAM OF FIRST STIMULUS X, Y 2: HISTOGRAM OF SECOND STIMULUS X, Y 3: HISTOGRAM OF THIRD STIMULUS X, Y (ALSO MEANS HISTOGRAMS WILL BE CREATED ON UNIT 4 OF THE DISK). /B GENERATE HISTOGRAM ON EACH MOVEMENT (FROM 409.6 MS BEFORE THE CURRENT BEGINNING OF MOVEMENT). /C INCLUDE PRINTOUT OF STATUS OF MOVEMENT. 0: NORMAL 1: IS IMPOSSIBLE 2: EXAMINED (E.G. OFF-TARGET) 3: ON-TARGET (I.E. AND EXAMINED) > XLIST ON XLIST OFF > XLIST ON XLIST OFF OCTAL XLIST ON; IFZERO 1 < PROGRAM DEFINITIONS: > XLIST ON ASR= 7415 /ARITHMETIC SHIFT RIGHT BEGIN= 0200 /BEGIN VALUE BLINK= 1000 /BLINK VALUE XLIST OFF IFNDEF CALTIM XLIST ON CALTIME=JMS I [TIMCAL]/TIME INTERVAL CALCULATOR CAM= 7621 /CLEAR AC, MQ D= CHAN^2+4 /DIVIDE PARAMETER FOR TIME FORMULAE XLIST OFF IFNDEF DAD IFNDEF DCM IFZERO EAESET < XLIST ON DAD= JMS I [DADD] /DOUBLE PRECISION ADD DCM= JMS I [DCOM] /DOUBLE PRECISION COMPLEMENT XLIST OFF > XLIST ON DIGITS= 7 /SEVEN OUTPUT DIGITS XLIST OFF IFNDEF DLD IFNDEF DST IFZERO EAESET < XLIST ON DLD= JMS I [DLOAD] /DOUBLE PRECISION LOAD DST= JMS I [DSTR] /DOUBLE PRECISION STORE XLIST OFF > XLIST ON DVI= 7407 /DIVIDE END= 0400 /END VALUE FILBUF= 3000 /P?S/8 FILES CREATED HERE FILFLD= 0020 /P?S/8 FILES CREATED IN THIS FIELD XLIST OFF IFNDEF FNDSPK XLIST ON FNDSPK= JMS I [SPKFND]/LOCATE SPECIFIED SPIKES XLIST OFF IFNDEF FRCTIME XLIST ON FRCTIME=JMS I [TIMFRC]/EVALUATE FRACTIONAL TIME HSTFLD= 0020 /USE FIELD 2 FOR HISTOGRAMS XLIST OFF IFNDEF LOAD XLIST ON LOAD= JMS I [XLOAD] /LOAD A VALUE LSR= 7417 /LOGICAL SHIFT RIGHT M= D-1 /MASK FOR TIME FORMULAE XLIST OFF IFNDEF MOVE XLIST ON MOVE= JMS I [XMOVE] /MOVE TWO WORDS MUY= 7405 /MULTIPLY NL0000= CLA /LOAD AC WITH 0000 NL0001= CLA IAC /LOAD AC WITH 0001 NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL0003= CLA STL IAC RAL /LOAD AC WITH 0003 NL0004= CLA CLL IAC RTL /LOAD AC WITH 0004 NL0006= CLA STL IAC RTL /LOAD AC WITH 0006 NL2000= CLA CLL CML RTR /LOAD AC WITH 2000 NL3777= CLA CLL CMA RAR /LOAD AC WITH 3777 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 NL5777= CLA CLL CMA RTR /LOAD AC WITH 5777 NL6000= CLA STL IAC RTR /LOAD AC WITH 6000 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 NL7776= CLA CLL CMA RAL /LOAD AC WITH 7776 NL7777= CLA CMA /LOAD AC WITH 7777 XLIST OFF IFNDEF PRTIME XLIST ON PRTIME= JMS I [TIMPRT]/PRINT TIME VALUES SBOOT= 7600 /SYSTEM BOOTSTRAP ADDRESS SFILES= 7757 /P?S/8 FILES PASSED STARTING HERE SHL= 7413 /SHIFT LEFT SOUTFLS=7607 /P?S/8 OUTPUT FILE COUNT SWAB= 7431 /SWITCH TO MODE B EAE SWAL= 7604 /A-/L SWITCHES HERE SWBA= 7447 /SWITCH TO MODE A EAE SYSIO= 7640 /P?S/8 I/O ENTRY POINT UNIT= 0005 /I/O UNIT FOR GRIND INPUT WRITE= 4000 /SYSIO WRITE BIT *10 /DEFINE AUTO-INDEX AREA XR1, .-. /AUTO-INDEX NUMBER 1 XR2, .-. /AUTO-INDEX NUMBER 2 XR3, .-. /AUTO-INDEX NUMBER 3 *20 /GET PAST AUTO-INDEX AREA AFACT, 1750 /FACTOR FOR DIFF(X) XLIST OFF IFNZRO MODEM < XLIST ON BAR, .-. /MODEM BAR POSITION XLIST OFF > XLIST ON XLIST OFF IFZERO TIME1&4000 < XLIST ON BCKUP1, T= TIME1&M^12+TIME1F%D /BACKUP FACTOR T= TIME1%D^12+T /FOR MOVEMENT -T; -1 /AFTER BURST XLIST OFF > IFNZRO TIME1&4000 < XLIST ON ATIME1= -TIME1 /NEGATE FOR ADVANCE FACTOR BCKUP1, T= ATIME1&M^12+TIME1F%D /NOW CALCULATE THE ADVANCE T= ATIME1%D^12+T /FOR FINDING A MOVEMENT T; 0 /AFTER A BURST XLIST OFF > XLIST ON BEGINX, .-. /BEGINNING X VALUE BEGINY, .-. /BEGINNING Y VALUE BLIMIT, .-. /BLOCK LIMIT BGSW, .-. /BEGIN SWITCH BVALUE, .-. /BLINK VALUE CURBEG, ZBLOCK 2 /CURRENT BEGIN Y POINTER ZBLOCK 2 /FOR PRTIME CUREND, ZBLOCK 2 /CURRENT END Y POINTER ZBLOCK 2 /FOR PRTIME XLIST OFF IFZERO FREQ < XLIST ON CURPTR, 4-CHAN; 0 /CURRENT BUFFER POINTER XLIST OFF > IFNZRO FREQ < IFZERO TIME1&4000 < XLIST ON CURPTR, T= TIME1&M^12+TIME1F%D /BACK-UP FACTOR MUST T= TIME1%D^12+T /BE ADDED TO CURRENT POINTER 4-CHAN+T; 0 /TO GET PAST NEGATIVE BLOCK NUMBERS AT START XLIST OFF > IFNZRO TIME1&4000 < XLIST ON CURPTR, 4-CHAN; 0 /CURRENT BUFFER POINTER XLIST OFF > > XLIST ON CURFRC, ZBLOCK 2 /CURRENT BUFFER POINTER FRACTIONAL TIME CURVAL, .-. /CURRENT Y VALUE CURX, .-. /TEMPORARY CURY, .-. /TEMPORARY XLIST OFF IFNZRO FREQ < XLIST ON DBLTMP, ZBLOCK 2 /DOUBLE TEMPORARY USED FOR THRESHOLD CALCULATIONS XLIST OFF > XLIST ON ENDX, .-. /ENDING X VALUE ENDY, .-. /ENDING Y VALUE FFRST, -1 /FIRST FIRING SWITCH HI, .-. /HIGH ORDER PRINT BUFFER HISTSW, 0 /HISTOGRAM AT NEW POSITION PRESENT SWITCH XLIST OFF IFNZRO MODEM < XLIST ON INTENS, .-. /MODEM LIGHT INTENSITY XLIST OFF > XLIST ON / LCTEMP MUST REMAIN ON PAGE ZERO!! LCTEMP, ZBLOCK 2 /TEMPORARY XLIST OFF IFNZRO MODEM < XLIST ON LGHTMP,.-. /TEMPORARY MODEM LIGHT INDICATOR LIGHT, .-. /MODEM LIGHT INDICATOR XLIST OFF > XLIST ON LO, .-. /LOW ORDER PRINT BUFFER MIGNOR, 0 /MODEM WORD IGNORE SWITCH;N. B.: NOT CONDITIONAL CODE! XLIST OFF IFNZRO MODEM < XLIST ON MODNXT, EOMIN /GET NEXT MODEM CHARACTER SETUP JMP I (NOMODEM) /KEEP GOING XLIST OFF > XLIST ON MOVCT, .-. /MOVEMENT'S SPIKE COUNT XLIST OFF IFNZRO MODEM < XLIST ON MTEMP, -1 /MODEM TEMPORARY XLIST OFF > XLIST ON OLBEGX, .-. /OLD BEGIN X VALUE OLBEGY, .-. /OLD BEGIN Y VALUE OLDBEG, 1; 0 /OLD BEGIN Y POINTER OLENDX, .-. /OLD END X VALUE OLENDY, .-. /OLD END Y VALUE PAUSCT, .-. /PAUSE'S SPIKE COUNT PONTSW, .-. /DECIMAL POINT (%10) SWITCH XLIST OFF IFNZRO MODEM < XLIST ON POS3SW, .-. /MODEM THIRD POSITION SWITCH XLIST OFF > XLIST ON SPKCNT, .-. /SPIKE COUNTER XLIST OFF IFNZRO MODEM < XLIST ON SUCCESS,.-. /MODEM TRIAL SUCCESS XLIST OFF > XLIST ON TEMP1, .-. /TEMPORARY TEMP2, .-. /TEMPORARY THRES1, T= TIME2&M^12+TIME2F /BEGIN T= TIME2%D^D^12+T /BURST THRESHOLD IN -T; -1 /100 US. UNITS THRES2, T= TIME3&M^12+TIME3F /END T= TIME3%D^D^12+T /BURST THRESHOLD IN -T; -1 /100 US. UNITS XLIST OFF IFNZRO MODEM < XLIST ON XPOS1, .-. /MODEM "X" FIRST POSITION XPOS2, .-. /MODEM "X" SECOND POSITION XTEMP, .-. /MODEM "X" TEMPORARY XLIST OFF > XLIST ON XLIST OFF IFNZRO MODEM < XLIST ON VALID, -1 /MODEM VALIDITY INDICATOR YPOS1, .-. /MODEM "Y" FIRST POSITION YPOS2, .-. /MODEM "Y" SECOND POSITION XLIST OFF > XLIST ON VLXDIFF,.-. /LARGEST X VELOCITY VLYDIFF,.-. /LARGEST Y VELOCITY XDIFF, .-. /LATEST X VELOCITY YDIFF, .-. /LATEST Y VELOCITY PAGE /AT 000200 START, JMP I (INITIALIZE) /HERE FOR DEFAULT START XLIST OFF IFNZRO SAC < XLIST ON NEXT, JMS I (DOLOC8) /FIND NEXT BEGIN, END, OR BLINK XLIST OFF IFNZRO BLKTST < XLIST ON ZAPADR, JMP BLNKTST /CHECK FOR BLINKS FIRST XLIST OFF > XLIST ON CHKBEG, TAD CURVAL /GET LATEST POINT XLIST OFF IFNZRO OKN < XLIST ON SPA /SLOW PHASE? JMP NEXT /YES, IGNORE IT XLIST OFF > XLIST ON AND [BEGIN] /JUST BEGIN BIT SNA CLA /SKIP IF BEGIN FOUND JMP ENDTEST /JUMP IF NOT MOVE; CURBEG;OLDBEG /SAVE PREVIOUS BEGIN POINTER MOVE; CURPTR;CURBEG /GET LATEST BEGIN POINTER MOVE; BEGINX;OLBEGX /SAVE PREVIOUS BEGIN VALUES JMS I [GETVAL] /GET LATEST X VALUE DCA BEGINX /SAVE IT NL0001 /SET Y OFFSET JMS I [GETVAL] /GET LATEST Y VALUE DCA BEGINY /SAVE IT NL7777 /SET DCA BGSW /BEGIN SWITCH JMP NEXT /KEEP GOING ENDTEST,TAD CURVAL /GET LATEST VALUE XLIST OFF IFNZRO OKN < XLIST ON SPA /SLOW PHASE? JMP NEXT /YES, IGNORE IT XLIST OFF > XLIST ON AND [END] /JUST END BIT SNA CLA /SKIP IF END FOUND JMP NEXT /JUMP IF NOT TAD BGSW /GET BEGIN SWITCH SNA CLA /SKIP IF SET JMP NEXT /END WITHOUT BEGIN! DCA BGSW /CLEAR SWITCH FOR NEXT TIME MOVE; CUREND;OLDEND /SAVE PREVIOUS END POINTER MOVE; CURPTR;CUREND /GET LATEST END POINTER MOVE; ENDX; OLENDX /SAVE PREVIOUS END VALUES JMS I [GETVAL] /GET X VALUE DCA ENDX /SAVE AS LATEST X END VALUE NL0001 /SET Y OFFSET JMS I [GETVAL] /GET Y VALUE DCA ENDY /SAVE AS LATEST Y END VALUE SKP /FIRST TIME? JMP I (CALNXT) /NO, GO DO IT DCA .-2 /WILL NEXT TIME JMP NEXT /BUT NOT THIS TIME PAGE CALNXT, DCA VLXDIFF /CLEAR LARGEST X VELOCITY DCA VLYDIFF /CLEAR LARGEST Y VELOCITY DLD; CUREND /GET CURRENT END POINTER DCM /INVERT IT DAD; VBAKUP /ADD ON BACKUP FACTOR DST; WLIMIT /SAVE AS SEARCH LIMIT VALUE DLD; CURBEG /GET BEGINNING POINTER DAD; VBAKUP /ADD ON BACKUP FACTOR DAD; VBAKUP /AGAIN / SPA /SKIP IF VALID / JMP I [NEXT] /ELSE IGNORE IT DST; WRKPTR /INITIALIZE WORKING POINTER MOVE; CURBEG; LVSPTR /ASSUME INITIAL POINT IS LARGEST VECTOR VELOCITY MOVE; CURBEG; LVXPTR /LIKEWISE FOR X VELOCITY MOVE; CURBEG; LVYPTR /LIKEWISE FOR Y VELOCITY DST; LVS /CLEAR LARGEST VECTORED VELOCITY TAD (-N) /SETUP THE DCA XR3 /LOAD COUNT TAD (XBUF-1) /SETUP THE DCA XR1 /X POINTER TAD (YBUF-1) /SETUP THE DCA XR2 /Y POINTER LODLUP, LOAD; WRKPTR /GET AN X VALUE XLIST OFF IFZERO CHAN-2 < IFZERO EAESET < XLIST ON SHL; 5-1 /SHIFT IT UP ASR; 5-1 /SHIFT IT DOWN XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 5 /SHIFT IT UP ASR; 5 /SHIFT IT DOWN XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /SHIFT IT UP ASR; 5-1 /SHIFT IT DOWN XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /SHIFT IT UP ASR; 5 /SHIFT IT DOWN XLIST OFF > > XLIST ON DCA I XR1 /STORE IN LIST NL0001 /INDICATE Y OFFSET MQL /INTO LOW-ORDER DAD; WRKPTR /ADD ON CURRENT POINTER DST; WRKPTR /STORE BACK LOAD; WRKPTR /GET A Y VALUE XLIST OFF IFZERO CHAN-2 < IFZERO EAESET < XLIST ON SHL; 5-1 /SHIFT IT UP ASR; 5-1 /SHIFT IT DOWN XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 5 /SHIFT IT UP ASR; 5 /SHIFT IT DOWN XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /SHIFT IT UP ASR; 5-1 /SHIFT IT DOWN XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /SHIFT IT UP ASR; 5 /SHIFT IT DOWN XLIST OFF > > XLIST ON DCA I XR2 /STORE IN LIST DLD; WRKPTR /GET THE POINTER XLIST OFF IFZERO CHAN-2 < XLIST ON DAD; L1 /BUMP TO NEXT XLIST OFF > IFZERO CHAN < XLIST ON DAD; L3 /BUMP TO NEXT XLIST OFF > XLIST ON DST; WRKPTR /STORE BACK ISZ XR3 /DONE ALL YET? JMP LODLUP /NO, KEEP GOING FNVNXT, NL0000 /INDICATE X JMS I (FNDIFF) /FIND LATEST X VALUE DCA XDIFF /SAVE IT NL0001 /INDICATE Y JMS I (FNDIFF) /FIND LATEST Y VALUE DCA YDIFF /SAVE IT TAD XDIFF /GET X VALUE XLIST OFF IFZERO EAESET < XLIST ON MQL /STASH IT TAD AFACT /GET THE FACTOR DCA .+2 /STORE IN-LINE MUY; .-. /MULTIPLY BY FACTOR DVI; 1750 /DIVIDE BY 1000 CLA MQA /GET IT BACK DCA .+2 /STORE AS ARGUMENT ALSO MUY; .-. /SQUARE IT XLIST OFF > IFNZRO EAESET < XLIST ON MQL MUY;AFACT /MULTIPLY BY FACTOR DVI; [1750] /DIVIDE BY 1000 CLA MQA /GET IT BACK DCA LO /STASH IT MUY; LO /SQUARE IT XLIST OFF > XLIST ON DST; VELTMP /SAVE IT CLA /CLEAN UP TAD YDIFF /GET Y VALUE XLIST OFF IFZERO EAESET < XLIST ON MQL /STASH IT MQA /GET IT BACK DCA .+2 /STORE AS ARGUMENT ALSO MUY; .-. /SWUARE IT XLIST OFF > IFNZRO EAESET < XLIST ON MQL MUY;YDIFF /SQUARE IT XLIST OFF > XLIST ON DAD; VELTMP /ADD ON X VALUE DST; VELTMP /SAVE IT DCM /INVERT FOR TEST DAD; LVS /COMPARE TO CURRENT MAXIMUM SMA CLA /SKIP IF NEW ONE IS LARGER JMP VELBMP /JUMP IF NOT MOVE; WRKPTR; LVSPTR /SAVE CURRENT POSITION MOVE; VELTMP; LVS /SAVE CURRENT MAXIMUM VALUE VELBMP, DLD; WRKPTR /GET CURRENT POINTER DAD; WLIMIT /COMPARE TO LIMIT SMA CLA /SKIP IF OK JMP I [PRTIT] /ELSE CONTINUE THERE DLD; WRKPTR /GET CURRENT POINTER XLIST OFF IFZERO CHAN-2 < XLIST ON DAD; L2 /UPDATE IT XLIST OFF > IFZERO CHAN < XLIST ON DAD; L4 /UPDATE IT XLIST OFF > XLIST ON DST; WRKPTR /STORE IT BACK JMP FNVNXT /ON TO NEXT XLIST OFF IFNZRO BLKTST < XLIST ON BLNKTST,TAD CURVAL /GET LATEST VALUE AND [BLINK] /JUST BLINK BIT SNA CLA /SKIP IF A BLINK JMP CHKBEGIN /JUMP IF NOT A BLINK TAD CURVAL /GET LATEST AGAIN AND [BEGIN] /IS IT A BEGINNING? SNA CLA /SKIP IF SO JMPBLND,JMP BLEND /JUMP IF NOT TAD JMPBLND /GET ZAP INSTRUCTION BLNKXT, DCA I [ZAPADR] /ZAP IT IN JMP I [NEXT] /GO GET ANOTHER ONE BLEND, TAD CURVAL /GET LATEST VALUE AND [END] /IS IT AN END? SNA CLA /SKIP IF SO JMP I [NEXT] /JUMP IF NOT TAD [JMP BLNKTST]/GET RESTORE VALUE JMP BLNKXT /CONTINUE THERE XLIST OFF > XLIST ON DOLOC8, .-. /LOCATE POINT OF INTEREST ROUTINE JMP DOBUMP /GO THERE FIRST BMPNXT, JMS I [LOCATE] /SEE IF ANYTHING OF INTEREST SZA CLA /SKIP IF NOT OF INTEREST JMP I DOLOC8 /RETURN WITH CURVAL OF INTEREST, BUT NOT IN AC DOBUMP, DLD; CURPTR /GET THE CURRENT POINTER XLIST OFF IFZERO CHAN < XLIST ON DAD; L4 /BUMP TO NEXT X WORD XLIST OFF > IFZERO CHAN-2 < XLIST ON DAD; L2 /BUMP TO NEXT X WORD XLIST OFF > XLIST ON DST; CURPTR /STORE IT BACK JMP BMPNXT /GO DO THE NEXT LOCATE PAGE PRTIT, TAD BEGINX /GET LATEST BEGIN X VALUE JMS I [EVLPRT] /GO PRINT IT TAD BEGINY /GET LATEST BEGIN Y VALUE JMS I [EVLPRT] /GO PRINT IT TAD ENDX /GET LATEST END X VALUE JMS I [EVLPRT] /GO PRINT IT TAD ENDY /GET LATEST END Y VALUE JMS I [EVLPRT] /GO PRINT IT PRTIME; CUREND; CURBEG /PRINT MOVEMENT TIME JMS I [TABPRT] /TAB OVER PRTIME; CURBEG; OLDEND /PRINT INTER-MOVEMENT TIME XLIST OFF IFNZRO BLKPRT < XLIST ON JMS I [TABPRT] /TAB OVER TAD CURVAL /GET LATEST VALUE AND [BLINK] /JUST BLINK BIT CLL RTL;RTL /MOVE TO AC[11] TAD ["0&77] /MAKE IT ASCII DIGIT JMS I [P6CH] /GO PRINT IT XLIST OFF > XLIST ON JMS I [P6CH] /GO PRINT , TAD VLXDIFF /GET LARGEST X VALUE JMS I [SPRINT] /PRINT IT TAD VLYDIFF /GET LARGEST Y VALUE JMS I [SPRINT] /PRINT IT MOVE; LVS; LO /MOVE LARGEST VECTOR VALUE TO PRINT BUFFER JMS I [PRINTD] /PRINT IT JMS I [TABPRT] /PRINT A PRTIME; LVXPTR; CURBEG /PRINT X TIME JMS I [TABPRT] / OVER PRTIME; LVYPTR; CURBEG /PRINT Y TIME JMS I [TABPRT] / OVER PRTIME; LVSPTR; CURBEG /PRINT VECTOR TIME JMS I [P6CH] /DO A , XLIST OFF IFNZRO NERVE < XLIST ON NL0000 /INDICATE PAUSE CALCULATION FNDSPK; OLDEND; CURBEG /LOCATE SPIKES BETWEEN MOVEMENTS DCA PAUSCT /SAVE THE COUNT MOVE; FRSPIKE;PASFRST /SAVE FIRST SPIKE TIME MOVE; LSPIKE; PASLST /SAVE LAST SPIKE TIME FRCTIME;PASFRST /EVALUATE FIRST FRACTIONAL TIME FRCTIME;PASLST /EVALUATE LAST FRACTIONAL TIME NL0002 /INDICATE MOVEMENT CALCULATION FNDSPK; CURBEG; CUREND /LOCATE SPIKES DURING LATEST MOVEMENT DCA MOVCT /SAVE THE COUNT MOVE; FRSPIKE;MOVFRST /SAVE FIRST SPIKE TIME MOVE; LSPIKE; MOVLST /SAVE LAST SPIKE TIME FRCTIME;MOVFRST /EVALUATE FIRST FRACTIONAL TIME FRCTIME;MOVLST /EVALUATE LAST FRACTIONAL TIME FRCTIME;OLFPTR /FRACTION OF BEGIN OF OLD INTERVAL FRCTIME;NWFPTR /FRACTION OF SHORTEST INTERVAL BEGIN FRCTIME;NFPTR2 /FRACTION OF SHORTEST INTERVAL END FRCTIME;LFPTR2 /FRACTION OF LAST INTERVAL END NL7777 /TELL HIM EXACTLY PRTIME; PASLST;PASFRST /TIME BETWEEN FIRST AND LAST PAUSE SPIKES JMS I [TABPRT] / ON OVER TAD PAUSCT /GET SPIKE COUNT OF PAUSE JMS I [PRTVAL] /PRINT IT JMS I [TABPRT] /PRINT A NL7777 /TELL HIM EXACT TIME PRTIME; MOVLST;MOVFRST /BETWEEN FIRST AND LAST MOVEMENT-RELATED SPIKES JMS I [TABPRT] / ON OVER TAD MOVCT /GET SPIKE COUNT OF MOVEMENT JMS I [PRTVAL] /PRINT IT JMS I [TABPRT] / ON OVER NL7777 /TELL EXACT TIME PRTIME; CURBEG;MOVFRST /BETWEEN SPIKES AND MOVEMENT JMS I [TABPRT] / ON OVER NL7777 /TELL HIM EXACT TIME PRTIME; NWFPTR;OLFPTR /IN THE OLD INTERVAL JMS I [TABPRT] / ON OVER NL7777 /TELL EXACT TIME PRTIME; NFPTR2;NWFPTR /IN THE SHORTEST INTERVAL JMS I [TABPRT] / ON OVER NL7777 /TELL EXACT TIME PRTIME; LFPTR2;NFPTR2 /IN THE LAST INTERVAL JMS I [TABPRT] / ON OVER NL7777 /TELL HIM EXACT TIME PRTIME; CURBEG;NWFPTR /BETWEEN BEGIN OF SHORT INTERVAL AND MOVEMENT JMS I [P6CH] /DO A , XLIST OFF IFNZRO MODEM < XLIST ON TAD VALID /GET VALIDITY INDICATOR JMS I [SPRINT] /PRINT IT TAD XPOS1 /GET FIRST "X" POSITION JMS I [SPRINT] /PRINT IT TAD YPOS1 /GET FIRST "Y" POSITION JMS I [SPRINT] /PRINT IT TAD XPOS2 /GET SECOND "X" POSITION JMS I [SPRINT] /PRINT IT TAD YPOS2 /GET SECOND "Y" POSITION JMS I [SPRINT] /PRINT IT TAD POS3SW /GET THIRD POSITION INDICATOR JMS I [SPRINT] /PRINT IT TAD INTENS /GET INTENSITY AND LIGHT /TO BE SURE CLL RAL /*2 TAD LIGHT /ADD ON LIGHT VALUE JMS I [SPRINT] /PRINT IT TAD BAR /GET BAR VALUE CLL RAR /INTO LINK CML RTL /INVERT AND MULTIPLY BY TWO TAD SUCCESS /ADD ON SUCCESS INDICATOR JMS I [SPRINT] /PRINT IT JMP I (BEGHST) /CONTINUE THERE PAGE BEGHST, TAD I (SWAL) /GET /A-L SWITCHES SMA CLA /SKIP IF SET JMP NOHIST /JUMP IF NOT TAD HISTSW /GET CURRENT SWITCH JMS I [SPRINT] /PRINT IT TAD HISTSW /GET SWITCH AGAIN SNA CLA /SKIP IF ANY JMP NOHIST /JUMP IF NOT DCA HISTSW /CLEAR FOR NEXT TIME JMS I (DOHIST) /OUTPUT A HISTOGRAM NOHIST, NL2000 /SETUP MASK AND I (SWAL) /JUST /B SNA CLA /SKIP IF SET JMP NOCHST /JUMP IF NOT DLD; CURBEG /GET CURRENT BEGINNING DST; HSTPTR /SETUP SUBROUTINE JMS I (DOHIST) /OUTPUT A HISTOGRAM NOCHST, TAD I (SWAL) /GET /A-/L SWITCHES AGAIN RTL /C TO AC[0] SMA CLA /SKIP IF SET JMP NOSTAT /JUMP IF NOT DLD; CURBEG /GET CURRENT BEGINNING DAD; L3 /BUMP TO MODEM WORD DST; LCTEMP /STASH IT LOAD; LCTEMP /GET MODEM WORD RTL /MOVE THE RTL /STATUS TO AC[10-11] AND (3) /ISOLATE JMS I [SPRINT] /PRINT IT NOSTAT, PRTIME; CURBEG; XBEGT /PRINT TIME TO FIRST "X" JMS I [P6CH] /DO A , XLIST OFF > XLIST ON XLIST OFF > XLIST ON JMP I [NEXT] /GO GET ANOTHER ONE XLIST OFF > XLIST OFF IFNZRO FREQ < XLIST ON NEXT, NL7777 /RESET DCA FFRST /FIRST FIRING SWITCH SPKLUP, MOVE; CURPTR;OLFPTR /SAVE OLD FIRING POINTERS JMS I [FIND1] /LOCATE A FIRING ISZ FFRST /HERE BEFORE? SKP /SKIP IF SO JMP SPKLUP /JUMP IF NOT FRCTIME;OLFPTR /GET THE OLD FRACTION DLD; OLFPTR /GET PREVIOUS SPIKE TIME XLIST OFF IFNZRO CHAN < IFZERO EAESET < XLIST ON SHL; 3-1 /*8 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 3 /*8 XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /*4 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /*4 XLIST OFF > > XLIST ON DAD; OLFRAC /ADD ON FRACTION DCM /INVERT DST; DBLTMP /SAVE IT FRCTIME;CURPTR /SETUP CURRENT FRACTIONAL TIME DLD; CURPTR /GET CURRENT SPIKE TIME XLIST OFF IFNZRO CHAN < IFZERO EAESET < XLIST ON SHL; 3-1 /*8 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 3 /*8 XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /*4 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /*4 XLIST OFF > > XLIST ON DAD; CURFRC /ADD ON FRACTIONAL TIME DAD; DBLTMP /SUBTRACT PREVIOUS DAD; THRES1 /COMPARE TO THRESHOLD SMA CLA /SKIP IF SHORT INTERVAL JMP SPKLUP /TRY NEXT POINT MOVE; CURPTR;BFRPTR /SAVE BURST BEGINNING POINTERS XLIST OFF IFNZRO MODEM < XLIST ON ISZ MIGNORE /TURN ON MODEM IGNORING SWITCH TAD LIGHT /GET THE CURRENT VALUE OF LIGHT DCA LGHTMP /STORE IN TEMPORARY FOR PRINTING XLIST OFF > XLIST ON DLD; CURPTR /GET CURRENT POINTER DAD; BCKUP1 /BACKUP AND POINT TO A PREVIOUS X DST; CURPTR /STORE BACK DST; BRSTPTR /SAVE AS PRE-BURST POINTER LOBLUP, JMS I [DOABUMP] /GO BUMP ONE NOBUMP, JMS I [LOCATE] /FIND A BEGIN POINT SNA / IS IN THE JMP LOBLUP /NOTHING OF INTEREST BUMP TO NEXT POINT XLIST OFF IFNZRO OKN < XLIST ON SPA /SLOW PHASE? JMP LOBLUP /YES, IGNORE IT XLIST OFF > XLIST ON AND [BEGIN] /IS IT A BEGIN POINT? SNA CLA /SKIP IF SO JMP LOBLUP /JUMP IF NOT TAD CURVAL /GET CURRENT VALUE DCA BVALUE /SAVE IT JMS I [GETVAL] /GET BEGIN X DCA BEGINX /SAVE IT NL0001 /SET Y OFFSET JMS I [GETVAL] /GET BEGIN Y DCA BEGINY /SAVE IT MOVE; CURPTR;MBGPTR /SAVE MOVEMENT BEGIN POINTER VALUE LOELUP, JMS I [DOABUMP] /GO BUMP ONE JMS I [LOCATE] /FIND AN END POINT SNA /SKIP IF ANYTHING OF INTEREST JMP LOELUP /JUMP IF NOTHING AND [BEGIN] /IS IT A BEGIN POINT? SZA CLA /BETTER NOT BE JMP NOBUMP /FORGET THIS END! TAD CURVAL /GET VALUE XLIST OFF IFNZRO OKN < XLIST ON SPA /SLOW PHASE? JMP LOELUP /YES, IGNORE IT XLIST OFF > XLIST ON AND [END] /IS IT AN END POINT? SNA CLA /SKIP IF SO JMP LOELUP /JUMP IF NOT JMS I [GETVAL] /GET END X DCA ENDX /SAVE IT NL0001 /SET Y OFFSET JMS I [GETVAL] /GET END Y DCA ENDY /SAVE IT MOVE; CURPTR;MENPTR /SAVE MOVEMENT END POINTER VALUE MOVE; BFRPTR;CURPTR /RESTORE PREVIOUS POINTER TO BURST XLIST OFF IFNZRO MODEM < XLIST ON DCA MIGNORE /WE CAN LOOK FOR MODEM WORDS AGAIN XLIST OFF > XLIST ON / NL7777 /RESET / DCA FFRST /FIRST TIME SWITCH DCA SPKCNT /CLEAR SPIKE COUNTER SPLUP2, MOVE; CURPTR;OFPTR2 /SAVE PREVIOUS SPIKE POINTER JMS I [FIND1] /FIND ANOTHER SPIKE / ISZ FFRST /FIRST TIME? / SKP /SKIP IF NOT / JMP SPLUP2 /JUMP IF SO FRCTIME;OFPTR2 /SETUP PREVIOUS FRACTIONAL TIME DLD; OFPTR2 /GET PREVIOUS SPIKE TIME XLIST OFF IFNZRO CHAN < IFZERO EAESET < XLIST ON SHL; 3-1 /*8 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 3 /*8 XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /*4 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /*4 XLIST OFF > > XLIST ON DAD; OFRAC2 /ADD ON FRACTION DCM /INVERT DST; DBLTMP /SAVE IT FRCTIME;CURPTR /SETUP LATEST FRACTIONAL TIME DLD; CURPTR /GET CURRENT SPIKE TIME XLIST OFF IFNZRO CHAN < IFZERO EAESET < XLIST ON SHL; 3-1 /*8 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 3 /*8 XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /*4 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /*4 XLIST OFF > > XLIST ON DAD; CURFRC /ADD ON FRACTION DAD; DBLTMP /SUBTRACT PREVIOUS DAD; THRES2 /COMPARE TO THRESHOLD SMA CLA /SKIP IF FREQUENCY STILL GOOD JMP I [PRFREQ] /JUMP IF NOT ISZ SPKCNT /UP THE INTERVAL COUNT JMP SPLUP2 /JUMP BACK FOR MORE PAGE PRFREQ, TAD BEGINX /GET BEGIN X VALUE JMS I [EVLPRT] /PRINT IT TAD BEGINY /GET BEGIN Y VALUE JMS I [EVLPRT] /PRINT IT TAD ENDX /GET END X VALUE JMS I [EVLPRT] /PRINT IT TAD ENDY /GET END Y VALUE JMS I [EVLPRT] /PRINT IT PRTIME; MENPTR;MBGPTR /PRINT MOVEMENT LENGTH JMS I [TABPRT] /PRINT A XLIST OFF IFNZRO BLKPRT < XLIST ON TAD BVALUE /GET BLINK VALUE AND [BLINK] /JUST BLINK BIT CLL RTL /MOVE TO RTL /AC[11] TAD ["0&77] /MAKE IT ASCII JMS I [P6CH] /PRINT IT XLIST OFF > XLIST ON JMS I [P6CH] /PRINT A , NL7777 /INDICATE FRACTIONAL CORRECTION PRTIME; OFPTR2;OLFPTR /PRINT BURST LENGTH JMS I [TABPRT] /AND A TAD SPKCNT /GET SPIKE COUNT JMS I [PRTVAL] /GO PRINT IT JMS I [TABPRT] /PRINT A PRTIME; MBGPTR;OLFPTR /PRINT BURST-MOVEMENT TIME JMS I [TABPRT] /AND A PRTIME; MBGPTR;XBEGT /PRINT ABSOLUTE MOVEMENT TIME JMS I [P6CH] /PRINT A , XLIST OFF IFNZRO MODEM < XLIST ON TAD VALID /GET VALIDITY INDICATOR JMS I [SPRINT] /PRINT IT TAD XPOS1 /GET FIRST "X" POSITION JMS I [SPRINT] /PRINT IT TAD YPOS1 /GET FIRST "Y" POSITION JMS I [SPRINT] /PRINT IT TAD XPOS2 /GET SECOND "X" POSITION JMS I [SPRINT] /PRINT IT TAD YPOS2 /GET SECOND "Y" POSITION JMS I [SPRINT] /PRINT IT TAD POS3SW /GET THIRD POSITION INDICATOR JMS I [SPRINT] /PRINT IT TAD INTENS /GET INTENSITY AND LIGHT /TO BE SURE CLL RAL /*2 TAD LIGHT /ADD ON LIGHT VALUE JMS I [SPRINT] /PRINT IT TAD BAR /GET BAR VALUE CLL RAR /INTO LINK CML RTL /INVERT AND MULTIPLY BY TWO TAD SUCCESS /ADD ON SUCCESS INDICATOR JMS I [SPRINT] /PRINT IT PRTIME; OLFPTR; XBEGT /PRINT TIME OF FIRST "X" TO BEGINNING OF CURRENT BURST JMS I [P6CH] /DO A , XLIST OFF > XLIST ON JMP I (SPKLUP) /GO GET ANOTHER SET XLIST OFF > XLIST ON PAGE XMOVE, .-. /MOVE ROUTINE CLA /CLEAN UP TAD I XMOVE /GET "FROM" ADDRESS DCA .+6 /SAVE IT INLINE ISZ XMOVE /BUMP TO NEXT TAD I XMOVE /GET "TO" ADDRESS DCA .+5 /SAVE INLINE ISZ XMOVE /BUMP TO RETURN DLD; .-. /GET A PAIR DST; .-. /PUT A PAIR CAM /CLEAR OUT JMP I XMOVE /RETURN XLOAD, .-. /LOAD A WORD ROUTINE CLA /CLEAN UP TAD I XLOAD /GET PASSED ARGUMENT ISZ XLOAD /BUMP AROUND IT DCA TEMP2 /SAVE AS POINTER TO WORD POINTERS TAD I TEMP2 /GET WORD ADDRESS DCA TEMP1 /SAVE IT ISZ TEMP2 /BUMP TO GROUP WORD TAD I TEMP2 /GET GROUP CLL RTL /MAKE INTO RTL /BLOCK RAL /NUMBER DCA TEMP2 /SAVE IT TAD CORGRP /\ CIA / >COMPARE DESIRED GROUP TO CURRENT GROUP TAD TEMP2 // SNA /SKIP IF DIFFERENT JMP INCORE /JUMP IF SAME TAD CORGRP /UPDATE DCA CORGRP /IN CORE GROUP CLL /CLEAR LINK FOR TEST TAD CORGRP /GET REQUESTED GROUP TAD BLIMIT /COMPARE TO LIMIT SZL CLA /SKIP IF OK XLIST OFF IFNZRO FILE < XLIST ON JMP I [FLCLOS] /FORGET IT XLIST OFF > IFZERO FILE < XLIST ON JMP I [FILXT2] /FORGET IT XLIST OFF > XLIST ON JMS I [SYSIO] /\ 0 / \READ IN 10+UNIT / /NEW GROUP CORGRP, 0 // INCORE, CDF 10 /\ TAD I TEMP1 / >GET THE WORD CDF 00 // JMP I XLOAD /RETURN TIMPRT, .-. /PRINT TIME DIFFERENCES DCA FIND1 /SAVE EXACTNESS INDICATOR CALENT, DCA DOITSW /ENTRY POINT FOR INTERVAL CALCULATOR TAD I TIMPRT /GET FIRST ARGUMENT DCA TIM1 /SAVE AS POINTER ISZ TIMPRT /BUMP TO NEXT TAD I TIMPRT /GET SECOND ARGUMENT DCA TIM2 /SAVE AS POINTER ISZ TIMPRT /BUMP PAST MQL /CLEAR MQ NOW ISZ FIND1 /EXACT PRINTOUT REQUIRED? JMP REGPRT /NO NL0002 /GET OFFSET TAD TIM1 /NOW HAVE FIRST FRACTION ADDRESS DCA TIM3 /STASH IT NL0002 /GET OFFSET TAD TIM2 /NOW HAVE SECOND FRACTION ADDRESS DCA TIM4 /STASH IT DLD; TIM4, .-. /GET SECOND FRACTION DCM /INVERT DAD; TIM3, .-. /NOW HAVE DIFFERENCE REGPRT, DST; TIMTMP /SAVE FRACTIONAL DIFFERENCE DLD; TIM2, .-. /GET SECOND MAJOR PORTION DCM /INVERT DAD; TIM1, .-. /ADD ON FIRST MAJOR PORTION XLIST OFF IFNZRO CHAN < IFZERO EAESET < XLIST ON SHL; 3-1 /*8 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 3 /*8 XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /*4 XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /*4 XLIST OFF > > XLIST ON DAD; TIMTMP /ADD ON FRACTIONAL CORRECTION DST; LO /SAVE IN PRINT BUFFER ISZ DOITSW /ARE WE CALCULATING OR PRINTING? SKP /WE MUST BE PRINTING JMP I TIMPRT /RETURN TO THE CALCULATOR! ISZ PONTSW /TURN ON 1/10 FLAG JMS I [PRINTD] /PRINT IT OUT JMP I TIMPRT /RETURN GETVAL, .-. /GET A VALUE ROUTINE XLIST OFF IFZERO EAESET < XLIST ON ASR; 14-1 /MAKE PASSED VALUE DOUBLE-PRECISION XLIST OFF > IFNZRO EAESET < XLIST ON ASR; 14 /MAKE PASSED VALUE DOUBLE-PRECISION XLIST OFF > XLIST ON DAD; CURPTR /CALCULATE DESIRED POINT DST; TIMTMP /STASH IT LOAD; TIMTMP /GET THE VALUE XLIST OFF IFNZRO CHAN < IFZERO EAESET < XLIST ON SHL; 5-1 /SHIFT IT UP ASR; 5-1 /SHIFT IT BACK XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 5 /SHIFT IT UP ASR; 5 /SHIFT IT BACK XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /SHIFT IT UP ASR; 2-1 /SHIFT IT BACK XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /SHIFT IT UP ASR; 2 /SHIFT IT BACK XLIST OFF > > XLIST ON JMP I GETVAL /RETURN FIND1, .-. /FIND ONE SPIKE ROUTINE JMP FNDBMP /GOTO NEXT XLIST OFF IFNZRO CHAN < XLIST ON FNDLUP, LOAD; CURPTR /GET NEXT CURRENT X VALUE XLIST OFF > IFZERO CHAN < XLIST ON FNDLUP, JMS I [LOCATE] /GO LOCATE MODEM RELEVANT STUFF DLD; CURPTR /GET CURRENT POINTER DAD; L2 /POINT TO SPIKE WORD DST; FNDTMP /STASH IT LOAD; FNDTMP /GET NEXT SPIKE WORD XLIST OFF > XLIST ON SPA CLA /FIRING? JMP I FIND1 /YES, RETURN FNDBMP, DLD; CURPTR /NO, GET POINTER XLIST OFF IFNZRO CHAN < XLIST ON DAD; L2 /UPDATE XLIST OFF > IFZERO CHAN < XLIST ON DAD; L4 /UPDATE XLIST OFF > XLIST ON DST; CURPTR /STORE IT BACK JMP FNDLUP /TRY AGAIN DOITSW, .-. /SWITCH FOR CALCULATE OR PRINT PAGE / DIFFERENTIAL ROUTINE - CALCULATES LATEST X OR Y DIFFERENTIAL. ALSO / RETAINS LARGEST (ABSOLUTE) VALUE OF X AND Y VALUES ACROSS ALL CALLS. FNDIFF, .-. /FIND A DIFFERENTIAL ROUTINE DCA XYFLAG /SAVE X OR Y FLAG TAD XYFLAG /GET IT BACK MQL /LOAD LOW-ORDER DAD; WRKPTR /CREATE X OR Y POINTER DST; TIMTMP /STASH THE POINTER CLA /CLEAN UP TAD XYFLAG /GET FLAG SZA CLA /SKIP IF X TAD (YBUF-XBUF) /ELSE USE Y VALUE TAD (XBUF-1) /POINT TO BEGINNING OF BUFFER DCA XR1 /STASH THE POINTER NL0001 /GET INCREMENT TAD XR1 /POINTER TO SECOND ELEMENT DCA XR2 /STASH THE POINTER TAD (-N+1) /SETUP THE DCA XR3 /MOVE COUNTER FNMVLP, TAD I XR2 /GET A HIGHER ELEMENT DCA I XR1 /STORE IN LOWER LOCATION ISZ XR3 /DONE YET? JMP FNMVLP /NO, GO BACK LOAD; TIMTMP /GET THE VALUE XLIST OFF IFZERO CHAN-2 < IFZERO EAESET < XLIST ON SHL; 5-1 /SHIFT IT UP ASR; 5-1 /SHIFT IT DOWN XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 5 /SHIFT IT UP ASR; 5 /SHIFT IT DOWN XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /SHIFT IT UP ASR; 5-1 /SHIFT IT DOWN XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /SHIFT IT UP ASR; 5 /SHIFT IT DOWN XLIST OFF > > XLIST ON DCA I XR1 /STORE IN LIST AT TOP DCA VSUM /CLEAR DIFFERENTIAL SUM TAD XYFLAG /GET FLAG SZA CLA /SKIP IF X TAD (YBUF-XBUF) /ELSE USE Y VALUE TAD (XBUF-1) /POINTER TO BEGINNING OF BUFFER DCA XR1 /STASH THE POINTER TAD (-N) /SETUP THE DCA XR3 /BUFFER COUNTER FNLOOP, TAD XR3 /GET CURRENT COUNTER VALUE TAD (N-1%2+1) /ADJUST TO MULTIPLIER DCA VMULT /STASH IT TAD VMULT /GET IT BACK SMA CLA /SKIP IF NEGATIVE NL7777 /ELSE PREVENT INVERSION LATER DCA SIGN /SAVE INVERSION FLAG TAD VMULT /GET MULTIPLIER SPA /SKIP IF POSITIVE CIA /ELSE INVERT IT CMA /USE THIS FORM FOR ZERO COUNT CASE DCA MULCNT /SAVE AS MULTIPLIER COUNT TAD I XR1 /GET LATEST LIST ELEMENT DCA VLATEST /STASH IT JMP MULEND /CONTINUE THERE MULLUP, TAD VLATEST /ADD ON LATEST VALUE MULEND, ISZ MULCNT /DONE ENOUGH? JMP MULLUP /NO, GO ADD ON ANOTHER ONE ISZ SIGN /INVERT IT? CIA /YES TAD VSUM /ADD ON SUM DCA VSUM /STORE UPDATED SUM ISZ XR3 /ANY MORE? JMP FNLOOP /YES, KEEP GOING TAD VSUM /GET THE SUM SPA /POSITIVE? CIA /NO, MAKE IT SO DCA VLATEST /SAVE AS LATEST ABSOLUTE SUM TAD XYFLAG /GET THE FLAG SZA CLA /SKIP IF X JMP DOYV /JUMP IF Y TAD VLXDIFF /GET LARGEST X SMA /SKIP IF ALREADY NEGATIVE CIA /ELSE MAKE IT SO TAD VLATEST /COMPARE TO LATEST VALUE SPA CLA /SKIP IF NEW ONE IS LARGER JMP USEOLD /ELSE USE OLD ONE TAD VSUM /GET CURRENT SUM DCA VLXDIFF /SAVE AS NEW LARGEST X VALUE MOVE; WRKPTR; LVXPTR /SAVE POSITION OF LARGEST X USEOLD, TAD VLATEST /GET LATEST ABSOLUTE VALUE JMP I FNDIFF /RETURN DOYV, TAD VLYDIFF /GET CURRENT LARGEST Y VALUE SMA /SKIP IF ALREADY NEGATIVE CIA /ELSE MAKE IT SO TAD VLATEST /COMPARE TO LATEST SPA CLA /SKIP IF NEW ONE IS LARGER JMP USEOLD /ELSE USE OLD ONE TAD VSUM /GET CURRENT SUM DCA VLYDIFF /SAVE AS NEW LARGEST Y VALUE MOVE; WRKPTR; LVYPTR /SAVE POSITION OF LARGEST Y JMP USEOLD /FINISH THERE MULCNT, .-. /MULTIPLY COUNTER SIGN, .-. /ARITHMETIC SIGN FLAG VLATEST,.-. /LATEST VALUE VMULT, .-. /MULTIPLIER TEMPORARY VSUM, .-. /SUM XYFLAG, .-. /X/Y FLAG PAGE EVLPRT, .-. /EVALUATING PRINT ROUTINE XLIST OFF IFNZRO CHAN < IFZERO EAESET < XLIST ON SHL; 5-1 /SHIFT IT UP ASR; 5-1 /SHIFT IT DOWN XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 5 /SHIFT IT UP ASR; 5 /SHIFT IT DOWN XLIST OFF > > IFZERO CHAN < IFZERO EAESET < XLIST ON SHL; 2-1 /SHIFT IT UP ASR; 2-1 /SHIFT IT DOWN XLIST OFF > IFNZRO EAESET < XLIST ON SHL; 2 /SHIFT IT UP ASR; 2 /SHIFT IT DOWN XLIST OFF > > XLIST ON JMS SPRINT /GO PRINT IT JMP I EVLPRT /RETURN TABPRT, .-. /PRINT A ROUTINE TAD [37] /GET A JMS I [P6CH] /PRINT IT JMP I TABPRT /RETURN PRTVAL, .-. /PRINT A VALUE ROUTINE DCA LO /SAVE IN PRINT BUFFER JMS I [PRINTD] /GO PRINT IT JMP I PRTVAL /RETURN SPRINT, .-. /SIGNED PRINT ROUTINE DCA SPTEMP /SAVE PASSED VALUE TAD SPTEMP /GET IT BACK SMA /SKIP IF NEGATIVE JMP SPOS /JUMP IF POSITIVE CIA /MAKE IT POSITIVE DCA SPTEMP /SAVE IT TAD ("-&77) /GET A "-" SIGN JMS I [P6CH] /PRINT IT TAD SPTEMP /GET THE NEW VALUE SPOS, JMS PRTVAL /PRINT THE NUMBER JMS TABPRT /PRINT A JMP I SPRINT /RETURN SPTEMP, .-. /SPRINT TEMPORARY / ALL USERS OF THIS ROUTINE MUST DO THEIR OWN BUMPING OF CURPTR. LOCATE, .-. /USEFUL POINT LOCATOR XLIST OFF IFNZRO CHAN < XLIST ON LCNEXT, DLD; CURPTR /GET LATEST X POINTER DAD; L1 /BUMP TO Y POINTER DST; LCTEMP /STASH IT LOAD; LCTEMP /GET A Y WORD XLIST OFF > IFZERO CHAN < XLIST ON LCNEXT, DLD; CURPTR /GET X POINTER DAD; L1 /BUMP TO Y POINTER DST; LCTEMP /STASH IT LOAD; CURPTR /GET X WORD AND [6000] /JUST BEGIN AND BLINK BITS DCA CURX /SAVE THEM LOAD; LCTEMP /GET Y WORD AND [6000] /JUST END AND MAXIMUM VELOCITY BITS DCA CURY /SAVE THEM DLD; LCTEMP /GET Y POINTER DAD; L2 /POINT TO MODEM WORD DST; LCTEMP /STASH IT XLIST OFF IFNZRO MODEM < XLIST ON CLA /CLEAN UP AFTER THE STASH TAD MIGNORE /SHOULD WE CHECK MODEM CHARACTERS? SNA CLA /SKIP IF IGNORING! YES THIS IS CORRECT /AS LONG AS LCTEMP IS ON PAGE ZERO!! XLIST OFF > XLIST ON LOAD; LCTEMP /GET MODEM WORD XLIST OFF IFNZRO MODEM < XLIST ON AND (400) /JUST MODEM CHARACTER BIT SNA CLA /SKIP IF PRESENT JMP NOMODEM /JUMP IF NOT LOAD; LCTEMP /GET MODEM WORD AGAIN AND [377] /JUST THE CHARACTER BITS DCA MTEMP /SAVE IT FOR OTHERS TAD MTEMP /GET IT BACK JMP I MODNXT /GOTO WHOMEVER NOMODEM,LOAD; LCTEMP /GET THE MODEM WORD XLIST OFF > XLIST ON AND (4000) /JUST SLOW-PHASE BIT DCA LCTEMP /SAVE IT NL2000 /SET MAXIMUM VELOCITY BIT MASK AND CURY /ISOLATE IT TAD LCTEMP /ADD ON SLOW-PHASE BIT DCA LCTEMP /SAVE COMPOSITE NL4000 /SET END MASK AND CURY /ISOLATE END BIT RAR;RTR /MOVE TO BIT[3] TAD LCTEMP /ADD ON COMPOSITE DCA LCTEMP /SAVE IT BACK NL2000 /SET BLINK BIT MASK AND CURX /ISOLATE THE BIT RAR /MOVE TO BIT[2] TAD LCTEMP /ADD ON COMPOSITE DCA LCTEMP /SAVE IT BACK NL4000 /SET BEGIN BIT MASK AND CURX /ISOLATE IT RTR;RTR /MOVE TO BIT[4] TAD LCTEMP /NOW HAVE COMPLETE COMPOSITE XLIST OFF > XLIST ON DCA CURVAL /SAVE IT TAD CURVAL /GET IT BACK AND [7600] /ANYTHING INTERESTING? JMP I LOCATE /RETURN TO CHECK TIMFRC, .-. /GET FRACTIONAL TIME ROUTINE CLA /CLEAN UP TAD I TIMFRC /GET THE ARGUMENT DCA TIMAR1 /SET IT UP NL0002 /GET THE OFFSET TAD TIMAR1 /NOW POINTS TO DESTINATION DCA TIMAR2 /STASH IT FOR LATER ISZ TIMFRC /BUMP PAST ARGUMENT XLIST OFF IFNZRO CHAN < XLIST ON LOAD; TIMAR1, .-. /GET THE FRACTION XLIST OFF IFZERO EAESET < XLIST ON LSR; 7-1 /MOVE DOWN XLIST OFF > IFNZRO EAESET < XLIST ON LSR; 7 /MOVE DOWN XLIST OFF > XLIST ON XLIST OFF > IFZERO CHAN < XLIST ON DLD; TIMAR1, .-. /GET ARGUMENT ADDRESS DAD; L2 /UPDATE TO SPIKE WORD DST; FNDTMP /STASH IT LOAD; FNDTMP /GET THE TIME AND [3777] /JUST TIME BITS XLIST OFF IFZERO PDP12 < IFNZRO EAESET < XLIST ON MQL DVI;(144) /DIVIDE BY 100 XLIST OFF > IFZERO EAESET < XLIST ON MQL DVI;144 /DIVIDE BY 100 XLIST OFF > > IFNZRO PDP12 < IFNZRO EAESET < XLIST ON MQL DVI;(50) /DIVIDE BY 40 XLIST OFF > IFZERO EAESET < XLIST ON MQL DVI;50 /DIVIDE BY 40 XLIST OFF > > XLIST ON CLA MQA /GET THE RESULT XLIST OFF > XLIST ON AND [17] /JUST TIMING BITS MQL /MOVE TO LOW-ORDER DST; TIMAR2, .-. /STORE IN FRACTIONAL DESTINATION CAM /CLEAN UP JMP I TIMFRC /RETURN PAGE XLIST OFF IFNZRO FREQ < XLIST ON DOABUMP,.-. /BUMP THE CURRENT POINTER TO NEXT X ROUTINE DLD; CURPTR /GET THE CURRENT POINTER XLIST OFF IFZERO CHAN < XLIST ON DAD; L4 /GET TO NEXT X WORD XLIST OFF > IFZERO CHAN-2 < XLIST ON DAD; L2 /GET TO NEXT X WORD XLIST OFF > XLIST ON DST; CURPTR /UPDATE THE TIME JMP I DOABUMP /RETURN TO WHOMEVER XLIST OFF > XLIST ON SPKFND, .-. /SPIKE FINDING ROUTINE TAD (PRMTBL-1) /ADD ON TABLE ADDRESS TO PASSED OFFSET DCA XR1 /STASH IT TAD I SPKFND /GET FIRST ARGUMENT DCA SPARG1 /STASH IT MOVE /MOVE FROM SPARG1, .-.; SPKTM1 /ARGUMENT TO TEMPORARY ISZ SPKFND /BUMP TO NEXT TAD I SPKFND /GET SECOND ARGUMENT DCA SPARG2 /STASH IT MOVE /MOVE FROM SPARG2, .-.; SPKTM2 /ARGUMENT TO TEMPORARY ISZ SPKFND /BUMP PAST ARGUMENT TAD I XR1 /GET BEGIN CORRECTION XLIST OFF IFZERO EAESET < XLIST ON ASR; 14-1 /MOVE DOWN XLIST OFF > IFNZRO EAESET < XLIST ON ASR; 14 /MOVE DOWN XLIST OFF > XLIST ON DAD; SPKTM1 /ADJUST BEGINNING DST; SPKTM1 /SAVE IT BACK DST; FRSPIKE /INITIALIZE POINTERS DST; LSPIKE CLA /CLEAN UP TAD I XR1 /GET THE END CORRECTION XLIST OFF IFZERO EAESET < XLIST ON ASR; 14-1 /MOVE DOWN XLIST OFF > IFNZRO EAESET < XLIST ON ASR; 14 /MOVE DOWN XLIST OFF > XLIST ON DAD; SPKTM2 /ADJUST ENDING DST; SPKTM2 /SAVE IT BACK NL7777 /SET THE DCA FSW /FIRST TIME SWITCH DCA SPKCNT /CLEAR SPIKE COUNTER DCA ONEMOR /CLEAR ONCE MORE SWITCH CAM /CLEAN UP THE MQ NL7777 MQL /PUT <7777> TO MQ NL3777 /NOW WE HAVE LARGEST POSITIVE NUMBER DST; THRES1 /INITIALIZE TO LONGEST INTERVAL CAM /CLEAN THE MQ JMP FCHECK /GO INTO IT XLIST OFF IFNZRO CHAN < XLIST ON FLOOP, DLD; L2 /UPDATE XLIST OFF > IFZERO CHAN < XLIST ON FLOOP, DLD; L4 /UPDATE XLIST OFF > XLIST ON FCHECK, DAD; SPKTM1 /GET LATEST POINTER DST; SPKTM1 /STORE IT BACK DCM /INVERT FOR TESTING DAD; SPKTM2 /COMPARE TO LIMIT SMA SZA /SKIP IF = OR TIME1 BIGGER THAN TIME2 JMP FMORE /JUMP IF DEFINITELY SMALLER SZA CLA /IF ZERO THAN POSSIBLY EQUAL JMP SPKFIN /NO DEFINITELY TIME1 GREATER THAN TIME2 MQA /GET LOW-ORDER DIFFERENCE SNA CLA /SKIP IF DIFFERENT JMP SPKFIN /JUMP IF AT END OF RANGE XLIST OFF IFNZRO CHAN < XLIST ON FMORE, LOAD; SPKTM1 /GET AN X WORD XLIST OFF > IFZERO CHAN < XLIST ON FMORE, DLD; SPKTM1 /GET X ADDRESS DAD; L2 /BUMP TO SPIKE WORD DST; FNDTMP /SAVE POINTER LOAD; FNDTMP /GET THE SPIKE WORD XLIST OFF > XLIST ON SMA CLA /SKIP IF A SPIKE HERE JMP FLOOP /JUMP IF NOT TAD ONEMOR /DOING INTERVAL AFTER PEAK? SZA CLA /NO, JUST GO ON JMP SPKDON /YEAH, GET OUT ISZ SPKCNT /COUNT ANOTHER SPIKE ISZ FSW /FIRST TIME THROUGH? JMP I (NXTSPK) /NO MOVE; SPKTM1; FRSPIKE /SAVE FIRST SPIKE MOVE; SPKTM1; LSPIKE /INITIALIZE HIM SO WE ENDLOP, MOVE; LSPIKE; OFPTR2 /SAVE AS FORMER SPIKE MOVE; SPKTM1; LSPIKE /MIGHT BE LAST SPIKE JMP FLOOP /KEEP GOING SPKFIN, TAD ONEMOR /WAS I HERE BEFORE? SPA CLA /NO, I BETTER FIND THE LAST INTERVAL JMP SPKCLR /YEAH, BUT NO LAST SPIKE ISZ INTSW /FOUND AN INTERVAL? JMP SPKDON /NO, GET OUT NL7777 /-1 TO AC DCA ONEMOR /NOW WE CAN JUMP OUT MOVE; NFPTR2; SPKTM1 /BACKUP TO END OF PEAK INTERVAL JMP FLOOP /FIND THE NEXT SPIKE SPKCLR, CAM /CLEAR DST; SPKTM1 /CLEAN OUT THE TIME SPKDON, MOVE; SPKTM1; LFPTR2 /END OF LAST INTER TAD SPKCNT /GET FINAL SPIKE COUNT JMP I SPKFND /RETURN ONEMOR, .-. /ONCE MORE SWITCH FSW, .-. /ONE SPIKE FOUND SWITCH INTSW, .-. /INTERVAL FOUND SWITCH PAGE NXTSPK, FRCTIME;SPKTM1 /CALCULATE FRACTION FRCTIME;LSPIKE /CALCULATE FRACTION NL7777 /SET UP FOR EXACT TIME CALCULATION CALTIM; SPKTM1; LSPIKE /CALCULATE CURRENT INTERVAL TIME DCM /INVERT FOR COMPARE DAD; THRES1 /TO SMALLEST INTERVAL SO FAR SPA CLA /SKIP TO REPLACE CURRENT INTERVAL JMP I (ENDLOP) /OUR INTERVAL IS OK MOVE; LO; THRES1 /WE NOW HAVE A SMALLER TIME MOVE; SPKTM1; NFPTR2 /THIS IS THE END OF THE PEAK INTERVAL MOVE; LSPIKE; NWFPTR /THIS IS THE BEGINNING OF THE PEAK INTERVAL MOVE; OFPTR2; OLFPTR /SAVE BEGIN OF FORMER INTERVAL NL7777 /-1 TO AC DCA I (INTSW) /GOT AN INTERVAL JMP I (ENDLOP) /RETURN AFTER UPDATING SPKTM1, ZBLOCK 2 /TEMPORARY SPKFRC, ZBLOCK 2 /TO HOLD FRACTIONAL TIME SPKTM2, ZBLOCK 2 /TEMPORARY / PARAMETER TABLE FOR SPIKE LOCATING CORRECTION FACTORS. PRMTBL= . /VALUES ARE HERE / BEGINNING CORRECTION FOR PAUSE. XLIST OFF IFZERO PARM1&4000 < XLIST ON T= PARM1&M^12+PARM1F%D /PARTIAL VALUE PARM1%D^12+T /FINAL VALUE XLIST OFF > IFNZRO PARM1&4000 < XLIST ON TT= -PARM1 /USE POSITIVE FORM T= TT&M^12+PARM1F%D /FIRST PARTIAL T= TT%D^12+T /FINAL VALUE -T /USE NEGATIVE FORM XLIST OFF > XLIST ON / ENDING CORRECTION FOR PAUSE. XLIST OFF IFZERO PARM2&4000 < XLIST ON T= PARM2&M^12+PARM2F%D /PARTIAL VALUE PARM2%D^12+T /FINAL VALUE XLIST OFF > IFNZRO PARM2&4000 < XLIST ON TT= -PARM2 /USE POSITIVE FORM T= TT&M^12+PARM2F%D /FIRST PARTIAL T= TT%D^12+T /FINAL VALUE -T /USE NEGATIVE FORM XLIST OFF > XLIST ON / BEGINNING CORRECTION FOR MOVEMENT. XLIST OFF IFZERO PARM3&4000 < XLIST ON T= PARM3&M^12+PARM3F%D /PARTIAL VALUE PARM3%D^12+T /FINAL VALUE XLIST OFF > IFNZRO PARM3&4000 < XLIST ON TT= -PARM3 /USE POSITIVE FORM T= TT&M^12+PARM3F%D /FIRST PARTIAL T= TT%D^12+T /FINAL VALUE -T /USE NEGATIVE FORM XLIST OFF > XLIST ON / ENDING CORRECTION FOR MOVEMENT. XLIST OFF IFZERO PARM4&4000 < XLIST ON T= PARM4&M^12+PARM4F%D /PARTIAL VALUE PARM4%D^12+T /FINAL VALUE XLIST OFF > IFNZRO PARM4&4000 < XLIST ON TT= -PARM4 /USE POSITIVE FORM T= TT&M^12+PARM4F%D /FIRST PARTIAL T= TT%D^12+T /FINAL VALUE -T /USE NEGATIVE FORM XLIST OFF > XLIST ON PRINTD, .-. /DOUBLE-PRECISION PRINT ROUTINE DLD; LO /GET THE ARGUMENT SMA /SKIP IF MINUS JMP PRCOM /JUMP IF NOT DCM /INVERT IT DST; LO /STORE IT BACK CLA /CLEAN UP TAD ["-&77] /GET A "-" JMS I [P6CH] /PRINT IT PRCOM, CAM /CLEAN UP TAD (POWTEN-1) /\ DCA XR1 / \SET UP TAD (-DIGITS) / /TENS DCA DGCNTR // DIVLOP, TAD I XR1 /GET FIRST HALF PRSNA, SNA /END OF LIST? JMP PROVER /YES DCA DIVSOR /TO DIVISOR TAD I XR1 /GET SECOND HALF DCA DIVSOR+1 /TO HIGH DIVISOR DCA QUO /CLEAR QUOTIENT DLD; LO /SETUP 24 BIT AC DIVLUP, DAD; DIVSOR /-10^N SNL /OVERFLOW? JMP .+3 /YES ISZ QUO /NO JMP DIVLUP /AGAIN DCM /COMPLEMENT DAD; DIVSOR /PUT BACK DCM /COMPLEMENT AGAIN DST; LO /PUT BACK CAM /CLEAR OUT ISZ DGCNTR /DONE YET? JMP NCHECK /NO LSTDGT, TAD PONTSW /PRINT A POINT? SNA CLA /SKIP IF YES JMP NOPONT /NO, CONTINUE TAD PRSWT /CHECK FOR AND [SNA&40] /PREVIOUS PRINT SZA CLA /SKIP IF YES JMP .+4 /NO, GO FURTHER TAD [".&77] /PRINT JMS I [P6CH] /A POINT JMP NCHECK /AND CONTINUE TAD QUO /IS IT A ZERO? SZA CLA /SKIP IF YES JMP .-5 /NO, PRINT A POINT AND IT NOPONT, TAD (SKP) /FORCE ON DCA PRSWT /PRINT NCHECK, TAD QUO /GET QUOTIENT PRSWT, SNA /SKIP IF SIGNIFICANT JMP DIVLOP /DO NEXT TAD ["0&77] /ADD ON ASCII JMS I [P6CH] /PRINT IT TAD (SKP) /FORCE ON DCA PRSWT /PRINT JMP DIVLOP /CONTINUE PROVER, CAM /CLEAN UP DST; LO /CLEAR PRINT BUFFER DCA PONTSW /CLEAR SWITCH TAD PRSNA /RESET DCA PRSWT /PRINT SWITCH JMP I PRINTD /RETURN DGCNTR, .-. /DIGIT COUNTER DIVSOR, ZBLOCK 2 /DIVISOR QUO, .-. /QUOTIENT PAGE XLIST OFF IFNZRO MODEM < IFNZRO .&177 < XLIST ON PAGE XLIST OFF > XLIST ON GOT210, /210 WAS FOUND! GOT220, /220 WAS FOUND! GOT204, DCA LIGHT /LIGHT IS OFF DCA INTENS /LIGHT IS OBVIOUSLY NOT BRIGHT! JMS MODNXT /GET NEXT CHARACTER TAD (-202) /IS IT 202? SZA CLA /SKIP IF IT IS JMP GOTBAD /JUMP IF ANYTHING ELSE GOT202, /202 WAS FOUND! GOT242, NL4000 /FUDGE TO PREVENT DCA MTEMP /INVALIDATION EOMIN, CLA /CLEAN UP JUST IN CASE DCA SUCCESS /PROCLAIM FAILURE GOODIN, NL7777 /INVALIDATE DCA XPOS1 /FIRST "X" NL7777 /INVALIDATE DCA YPOS1 /FIRST "Y" NL7777 /INVALIDATE DCA XPOS2 /SECOND "X" NL7777 /INVALIDATE DCA YPOS2 /SECOND "Y" DCA POS3SW /INVALIDATE THIRD POSITION INDICATOR DCA LIGHT /TURN LIGHT OFF DCA INTENS /LIGHT IS OBVIOUSLY DIMLY OFF! DCA BAR /BAR IS UP TAD MTEMP /GET LATEST CHARACTER TAD (-320) /COMPARE TO SYNC VALUE SNA /SKIP IF NOT A MATCH JMP GOTSYNC /JUMP IF IT DID MATCH TAD (320) /RESTORE THE CHARACTER AND (4300) /JUST POSSIBLE BITS SNA CLA /SKIP IF NOT A FIRST "X" VALUE JMP GOTFX /JUMP IF FIRST "X" FOUND GOTBAD, CLA /CLEAN UP JUST IN CASE! TAD MTEMP /GET THE CHARACTER CODE AND [377] /JUST CHARACTER BITS DCA VALID /SAVE AS (USUALLY) INVALID INDICATOR JMS MODNXT /GET ANOTHER CHARACTER JMP EOMIN /TRY AGAIN GOTSYNC,JMS MODNXT /GET THE NEXT ONE TAD (-320) /IS IT ALSO A SYNC CHARACTER? SNA /SKIP IF NOT JMP GOTSYNC /DO IT AGAIN UNTIL IT ISN'T! TAD (320) /RESTORE THE CHARACTER DCA TM1 /SAVE AS FIRST TIME CHARACTER JMS MODNXT /GET ANOTHER DCA TM2 /SAVE AS SECOND TIME CHARACTER JMS MODNXT /GET ANOTHER DCA TM3 /SAVE AS THIRD TIME CHARACTER ASCHAR, JMS MODNXT /GET NEXT CHARACTER SNA /SKIP IF NOT END OF THE MESSAGE JMP GOTEOM /JUMP IF IT IS AND [200] /CHECK BAD BIT SZA CLA /SKIP IF OFF JMP GOTBAD /BARF JMP ASCHAR /THROW AWAY AND GET ANOTHER GOTEOM, JMS MODNXT /GET NEXT JMP EOMIN /CONTINUE THERE GOTFX, TAD MTEMP /GET THE CHARACTER DCA XTEMP /SAVE IT MOVE; CURPTR; XBEGT /SAVE FOR PRINTING LATER GETFY, JMS MODNXT /GET ANOTHER CHARACTER / AND (300) /JUST RANGE BITS / SZA CLA /SKIP IF VALID / JMP GOTBAD /BARF / TAD MTEMP /GET THE CHARACTER TAD (-24) /COMPARE TO LIMIT SMA CLA /SKIP IF OK JMP GOTBAD /BARF TAD MTEMP /GET THE CHARACTER DCA YPOS1 /USE AS FIRST "Y" POSITION TAD XTEMP /GET PREVIOUS POSITION DCA XPOS1 /USE AS FIRST "X" POSITION ISZ LIGHT /LIGHT IS ON ISZ INTENS /LIGHT IS BRIGHT NOW! ISZ BAR /BAR IS DOWN NOW NL0001 /GET OUR VALUE JMS CHKHST /CHECK FOR HISTOGRAM OUTPUT GETSX, JMS I (CHK4) /CHECK FOR 300, 242, 210, 220 SZA CLA /SKIP IF OK JMP GOTBAD /BARF TAD MTEMP /GET THE CHARACTER AND (77) /JUST POSITION BITS DCA XTEMP /SAVE FOR LATER GETSY, JMS MODNXT /GET THE NEXT CHARACTER AND (300) /JUST RANGE BITS TAD (-100) /COMPARE TO DESIRED COMBINATION SZA CLA /SKIP IF OK JMP GOTBAD /BARF TAD MTEMP /GET THE CHARACTER TAD (-124) /COMPARE TO LEGAL VALUE SMA CLA /SKIP IF OK JMP GOTBAD /BARF TAD MTEMP /GET THE CHARACTER AND (77) /JUST POSITION BITS DCA YPOS2 /SAVE AS SECOND "Y" POSITION TAD XTEMP /GET PREVIOUS POSITION DCA XPOS2 /SAVE AS SECOND "X" POSITION NL0002 /GET OUR VALUE JMS CHKHST /CHECK FOR HISTOGRAM OUTPUT JMP I (GETTX) /CONTINUE THERE CHKHST, .-. /CHECK FOR HISTOGRAM NEEDED ROUTINE DCA CHTEMP /SAVE VALUE TAD I (SWAL) /GET SWITCHES /A-/L SMA CLA /SKIP IF /A SET JMP I CHKHST /RETURN IF NOT DLD; CURPTR /GET CURRENT POINTER DST; HSTPTR /SAVE IT FOR LATER CAM /CLEAN UP TAD CHTEMP /GET PASSED VALUE DCA HISTSW /SAVE IT FOR LATER JMP I CHKHST /RETURN CHTEMP, .-. /HISTOGRAM VALUE TEMPORARY TM1, .-. /TIME TM2, .-. /VALUE TM3, .-. /TEMPORARIES PAGE GETTX, JMS CHK4 /CHECK FOR 300, 242, 210, 220 SZA CLA /SKIP IF OK JMP I (GOTBAD) /BARF TAD MTEMP /GET THE CHARACTER AND (77) /JUST POSITION BITS DCA XTEMP /SAVE FOR LATER GETTY, JMS MODNXT /GET NEXT CHARACTER AND (300) /JUST RANGE BITS TAD (-100) /COMPARE TO DESIRED COMBINATION SZA CLA /SKIP IF IT MATCHES JMP I (GOTBAD) /BARF TAD MTEMP /GET THE CHARACTER TAD (-124) /COMPARE TO LEGAL RANGE SMA CLA /SKIP IF OK JMP I (GOTBAD) /BARF TAD MTEMP /GET THE CHARACTER AND (77) /JUST POSITION BITS DCA YPOS1 /SAVE AS LATEST "Y" POSITION TAD XTEMP /GET THE PREVIOUS POSITION DCA XPOS1 /SAVE AS LATEST "X" POSITION ISZ POS3SW /INDICATE THIRD X,Y PRESENT NL0003 /GET OUR VALUE JMS I (CHKHST) /CHECK FOR HISTOGRAM OUTPUT GETEND, JMS CHK4 /CHECK FOR 300, 242, 210, 220 JMP I (GOTBAD) /BARF ON ANYTHING ELSE GOT300, DCA INTENS /LIGHT IS DIM NOW JMS MODNXT /GET NEXT CHARACTER TAD (-204) /COMPARE TO 204 CODE SNA /SKIP IF DIFFERENT JMP I (GOT204) /JUMP IF IT MATCHES IAC /COMPARE TO 203 CODE SZA CLA /SKIP IF IT MATCHES JMP I (GOTBAD) /BARF ON ANY OTHER GOT203, ISZ SUCCESS /INDICATE SUCCESSFUL TRIAL NL4000 /FUDGE TO PREVENT DCA MTEMP /INVALIDATION JMP I (GOODIN) /FINISH IT THERE CHK4, .-. /CHECK FOR FOUR CODES ROUTINE JMS MODNXT /GET NEXT CHARACTER TAD (-300) /COMPARE TO 300 CODE SNA /SKIP IF DIFFERENT JMP GOT300 /JUMP IF A MATCH TAD (-242+300) /COMPARE TO 242 SNA /SKIP IF DIFFERENT JMP I (GOT242) /JUMP IF A MATCH TAD (-210+242) /COMPARE TO 210 SNA /SKIP IF DIFFERENT JMP I (GOT210) /JUMP IF A MATCH TAD (-220+210) /COMPARE TO 220 SNA /SKIP IF DIFFERENT JMP I (GOT220) /JUMP IF A MATCH TAD (220) /RESTORE THE CHARACTER AND (300) /JUST RANGE BITS TAD (-100) /COMPARE TO DESIRED COMBINATION JMP I CHK4 /LET CALLER CARE ABOUT IT XLIST OFF > XLIST ON DOHIST, .-. /DO A HISTOGRAM ROUTINE NL7777 /-1 DCA XR2 /SETUP OUTPUT POINTER TAD (-1000) /SETUP THE DCA SPKCNT /HISTOGRAM COUNT DLD; HSTPTR /GET HISTOGRAM POINTER DAD; M1776 /BACKUP DST; HSTPTR /STORE IT BACK HSTLUP, LOAD; HSTPTR /GET TIME WORD ASR; 13 /0 IF NOT A SPIKE, 7777 IF A SPIKE CDF HSTFLD /GOTO BUFFER FIELD DCA I XR2 /STASH A HISTOGRAM ELEMENT CDF 00 /BACK TO FIELD 0 DLD; HSTPTR /GET THE CURRENT POINTER DAD; L4 /UPDATE DST; HSTPTR /STORE IT BACK ISZ SPKCNT /DONE YET? JMP HSTLUP /NO, GO BACK JMS I [SYSIO] /YES, CALL I/O ROUTINES 0000 /BUFFER IS 0000 4+HSTFLD+WRITE /ON UNIT 4 HSTBLK, 0000 /LATEST BLOCK NL0004 /GET UPDATE FACTOR TAD HSTBLK /BUMP DCA HSTBLK /FOR NEXT TIME JMP I DOHIST /RETURN TIMCAL, .-. /HOLD OUR RETURN DCA I (FIND1) /PUT AWAY OUR EXACTNESS INDICATOR ON PAGE TAD TIMCAL /GET THE CALLING ADDRESS DCA I (TIMPRT) /SET-UP OUR RETURN NL7777 /INDICATE CALCULATION JMP I (CALENT) /GO DO IT PAGE / GRIND PROGRAM VARIABLES, TEMPORARIES, ETC. BFRPTR, ZBLOCK 2 /BEGIN BURST POINTER BRSTPTR,ZBLOCK 2 /PRE-BURST POINTER FNDTMP, ZBLOCK 2 /FIND1 TEMPORARY FRSPIKE,ZBLOCK 2 /FIRST SPIKE ADDRESS HSTPTR, ZBLOCK 2 /HISTOGRAM POINTER LFPTR2, ZBLOCK 2 /LAST INTERVAL ENDS HERE ZBLOCK 2 /FRACTION FOR EXACT PRINTOUT LSFPTR, ZBLOCK 2 /LAST INTERVAL BEGINS HERE ZBLOCK 2 /FRACTION FOR EXACT PRINTOUT LSPIKE, ZBLOCK 2 /LAST SPIKE ADDRESS LSPFRC, ZBLOCK 2 /FRACTION FOR LAST SPIKE TIME CALCULATION LVS, ZBLOCK 2 /LARGEST VELOCITY ((X^2)+(Y^2)) LVSPTR, ZBLOCK 2 /POINTER TO LARGEST VELOCITY ((X^2)+(Y^2)) LVXPTR, ZBLOCK 2 /POINTER TO LARGEST X VELOCITY LVYPTR, ZBLOCK 2 /POINTER TO LARGEST Y VELOCITY L1, 1; 0 /CONSTANT 0000 0001 L2, 2; 0 /CONSTANT 0000 0002 L3, 3; 0 /CONSTANT 0000 0003 L4, 4; 0 /CONSTANT 0000 0004 MBGPTR, ZBLOCK 2 /MOVEMENT BEGIN POINTER ZBLOCK 2 /FRACTION FOR CORRECTED PRINTOUTS MENPTR, ZBLOCK 2 /MOVEMENT END POINTER ZBLOCK 2 /FRACTION FOR CORRECTED PRINTOUTS MOVFRST,ZBLOCK 2 /MOVEMENT'S FIRST SPIKE ADDRESS ZBLOCK 2 /MOVEMENT'S FIRST SPIKE FRACTIONAL TIME MOVLST, ZBLOCK 2 /MOVEMENT'S LAST SPIKE ADDRESS ZBLOCK 2 /MOVEMENT'S LAST SPIKE FRACTIONAL TIME M1776, -1776; -1 /CONSTANT 7777 6002 NWFPTR, ZBLOCK 2 /NEWEST BEGIN OF INTERVAL POINTER ZBLOCK 2 /FOR EXACT PRINTING NFPTR2, ZBLOCK 2 /NEWEST END OF INTERVAL POINTER ZBLOCK 2 /FOR PRTIME OFPTR2, ZBLOCK 2 /SECOND OLD SPIKE POINTER OFRAC2, ZBLOCK 2 /SECOND OLD SPIKE FRACTION OLDEND, ZBLOCK 2 /OLD END Y POINTER ZBLOCK 2 /FOR PRTIME OLFPTR, ZBLOCK 2 /OLD SPIKE POINTER OLFRAC, ZBLOCK 2 /OLD SPIKE FRACTION PASFRST,ZBLOCK 2 /PAUSE'S FIRST SPIKE ADDRSS ZBLOCK 2 /PAUSE'S FIRST SPIKE FRACTIONAL TIME PASLST, ZBLOCK 2 /PAUSE'S LAST SPIKE ADDRESS ZBLOCK 2 /PAUSE'S LAST SPIKE FRACTIONAL TIME TIMTMP, ZBLOCK 2 /TIMPRT TEMPORARY VBAKUP, -N^4; -1 /VELOCITY SEARCH BACKUP FACTOR VELTMP, ZBLOCK 2 /VELOCITY TEMPORARY WLIMIT, ZBLOCK 2 /VELOCITY LIMIT VALUE WRKPTR, ZBLOCK 2 /VELOCITY WORKING POINTER XBEGT, ZBLOCK 2 /FIRST "X" TIME XBUF, ZBLOCK N /X-DIFFERENTIAL BUFFER YBUF, ZBLOCK N /Y-DIFFERENTIAL BUFFER PAGE XLIST OFF IFZERO FILE < XLIST ON / TELETYPE OUTPUT ROUTINES. P6CH, .-. /PRINT 6-BIT CHARACTERS SZA /? JMP PR6BT1 /NO TAD (15) /PRINT JMS PCH /A TAD (12) /PRINT JMS PCH /A DCA COLUMN /RESET COLUMN COUNT JMP I P6CH /RETURN PR6BT1, TAD (-37) /- SNA /NOT A ? JMP P6TAB /YES A AND [77] /TRIM TO 6-BIT TAD [37] /RESTORE JMS PCH /AND PRINT JMP I P6CH /RETURN P6TAB, TAD COLUMN /GET CORRECT COLUMN AND [7] /MODULO 8 TAD [7770] /-8 FOR COUNT DCA TABCNT /SAVE IT TAD [" &77] /PRINT JMS PCH /A ISZ TABCNT /FOR LENGTH JMP .-3 /OF TAB STOP JMP I P6CH /RETURN PCH, .-. /7-BIT OUTPUT ROUTINE ISZ COLUMN /BUMP COLUMN COUNT TAD [200] /THIS MAY BE SKIPPED TSF /WAIT JMP .-1 /FOR IT TLS /START UP NEXT CLA /CLEAN UP JMP I PCH /RETURN XLIST OFF IFNZRO EAESET < XLIST ON FILXT2, SWBA /TURN EAE OFF JMP I [SBOOT] /BOOTSTRAP XLIST OFF > IFZERO EAESET < XLIST ON FILXT2, JMP I [SBOOT] /BOOTSTRAP XLIST OFF > XLIST ON COLUMN, .-. /COLUMN COUNT TABCNT, .-. /TAB COUNT XLIST OFF > IFNZRO FILE < XLIST ON P6CH, .-. /FILE OUTPUT ROUTINE JMS I (PQWRITE) /WRITE OUT A CHARACTER SKP /FULL RETURN JMP I P6CH /NORMAL RETURN ISZ FILPTR /BUMP POINTER TAD I FILPTR /GET NEXT FILE SNA /END OF LIST? JMP FILXIT /YES, BARF DCA FILBLK /OK, PUT INLINE TAD (FILBUF+3775) /OLD RELIC LINE POINTER DCA FILNUM /SAVE AS POINTER CDF FILFLD /GOTO BUFFER FIELD FRELIC, NL7776 /-2 TAD FILNUM /+FILNUM DCA FILNUM /TO POINTER TAD I FILNUM /IS IT CMA /"??"? READ, SZA CLA /SKIP IF YES JMP FRELIC /NO, LOOK AGAIN NL0002 /YES, GO FORWARD TAD FILNUM /GET AGAIN DCA FILNUM /SAVE TEMPORARILY NL0001 /+1 TAD I FILNUM /+OLD HIGH NUMBER DCA FILNUM /SAVE IN FILE NUMBER ARGUMENT CDF 00 /BACK TO FIELD 0 JMS I (PQINIT) /SETUP NEXT CALL FILBLK, .-. /FILE AND UNIT FILNUM, .-. /LINE NUMBER INCR, 1 /LINE INCREMENT JMP I P6CH /RETURN FILPTR, SFILES /FILE POINTER FILXIT, NL7777 STL /TURN ON SOME LIGHTS MQL /MORE MQA /LIGHTS XLIST OFF IFNZRO EAESET < XLIST ON FILXT2, SWBA /RESTORE MODE A SPA /HERE DUE TO ERROR? XLIST OFF > IFZERO EAESET < XLIST ON FILXT2, SPA /HERE DUE TO ERROR? XLIST OFF > XLIST ON HLT /YES, BARF / CLA /CLEAN UP / TAD I (HSTBLK) /GET 4 MORE THAN LAST HISTOGRAM WRITTEN OUT / HLT /STOP FOR OBSERVATION JMP I [SBOOT] /BOOTSTRAP FLCLOS, NL7777 /NEED NEGATIVE AC JMS I (PQWRITE) /TO CLOSE FILE JMP FILXT2 /CLEAN UP AND BOOTSTRAP XLIST OFF > XLIST ON INITIAL,XLIST OFF IFNZRO EAESET < XLIST ON INITIAL,SWAB /SET MODE B XLIST OFF > IFZERO EAESET < XLIST ON INITIAL,SWBA /USE MODE A NOP /JUST IN CASE! XLIST OFF > XLIST ON JMS I [SYSIO] /CALL I/O ROUTINES LIMIT, 0 /CORE ADDRESS 10+UNIT /READ I/O UNIT FIELD 1, 40 BLOCKS 0 /STARTING FROM BLOCK 0 CDF 10 /GET THE TAD I LIMIT /LIMITING CDF 00 /BLOCK CIA /INVERT DCA BLIMIT /SAVE IT FOR OTHERS XLIST OFF IFNZRO FILE < XLIST ON TAD I (SOUTFLS) /GET NUMBER OF OUTPUT FILES SNA /SKIP IF ANY JMP FILXIT /BARF IF NONE TAD FLBLK /UPDATE INPUT POINTER DCA FLBLK /SAVE IT BACK DCA I FLBLK /DESTROY INPUT FILES TAD I FILPTR /GET FIRST FILE DCA FLBLK /PUT INTO CALL JMS I (PQINIT) /INITIALIZE FILE FLBLK, SFILES /INITIAL FILE POINTER 1 /LINE NUMBER 1 1 /INCREMENT IS 1 XLIST OFF > XLIST ON JMP I [NEXT] /GO START IT UP DECIMAL / POWERS OF TEN TABLE. POWTEN,/-1664; -2442 /-10^7 -576; -245 /-10^6 -1696; -25 /-10^5 -1808; -3 /-10^4 -1000; -1 /-10^3 -100; -1 /-10^2 -10; -1 /-10^1 -1; -1 /-10^0 0 /END OF LIST OCTAL DADD, .-. /DAD ROUTINE DCA DCOM /SAVE AC TAD I DADD /GET ARGUMENT ADDRESS DCA DLOAD /SAVE THAT MQA /GET MQ CLL /INITIALIZE LINK TAD I DLOAD /ADD LOW MQL /PUT BACK ISZ DADD /BUMP RETURN ADDRESS ISZ DLOAD /BUMP ARGUMENT POINTER RAL /GET OVERFLOW TAD DCOM /+OLD AC TAD I DLOAD /+HIGH ORDER JMP I DADD /RETURN DLOAD, .-. /DLD ROUTINE CAM /CLEAR AC + MQ TAD DLOAD /GET ADDRESS DCA DADD /PUT IN DAD JMP DADD+1 /DO IT DCOM, .-. /DCM ROUTINE SWP /MQ FIRST CLL CIA /CLEAR LINK + COMPLEMENT SWP /PUT BACK CMA /COMPLEMENT SZL /AND MAYBE IAC /INCREMENT JMP I DCOM /RETURN DSTR, .-. /DST ROUTINE DCA DCOM /SAVE AC TAD I DSTR /GET ARGUMENT ADDRESS DCA DLOAD /SAVE THAT MQA /GET MQ DCA I DLOAD /STORE IN LOW ISZ DSTR /BUMP RETURN ADDRESS ISZ DLOAD /BUMP ARGUMENT POINTER TAD DCOM /GET OLD AC DCA I DLOAD /STORE IN HIGH TAD DCOM /GET AGAIN JMP I DSTR /RETURN PAGE XLIST OFF IFNZRO FILE < IFNZRO .&177 < XLIST ON PAGE XLIST OFF > XLIST ON PQINIT, .-. /PARAMETER INITIALIZER PQ7770, SPA SNA SZL CLA /THIS DEFINITELY CLEARS AC PQ7, 7 /THIS MIGHT BE HARMLESSLY SKIPPED TAD I PQINIT /GET FIRST ARGUMENT AND PQ7770 /JUST FILE BITS DCA PQFILE /SAVE AS FILE POINTER TAD I PQINIT /GET FILE ARGUMENT AGAIN AND [7] /JUST UNIT BITS TAD (20^100+FILFLD+WRITE) /20 BLOCKS DCA PQFUN /PUT INTO CALL ISZ PQINIT /BUMP TO NEXT ARGUMENT TAD I PQINIT /GET NEXT ARGUMENT ISZ PQINIT /BUMP PAST DCA PQNUM /SAVE AS STARTING LINE NUMBER TAD I PQINIT /GET NEXT ARGUMENT ISZ PQINIT /BUMP PAST ARGUMENT DCA PQINC /SAVE AS LINE NUMBER INCREMENT TAD PQBUFF /GET BUFFER POINTER DCA PQPTR /RESET TAD (PQLEFT+1) /RESET DCA PQPUT /CO-ROUTINE TAD (FILBUF+3777) /FIZZY CONSTANT DCA PQWORK /TO PLACE HOLDER JMS PQLINE /FINISH EMPTY LINE CDF 00 /BACK TO FIELD 0 JMP I PQINIT /RETURN PQLINE, .-. /LINE FINISHING ROUTINE CDF FILFLD /GOTO BUFFER FIELD NL7775 /BACKUP 3 TAD PQWORK /ADD ON CURRENT POINTER DCA PQWORK /SAVE IT BACK TAD PQWORK /GET IT AGAIN DCA I (FILBUF+3777) /SAVE AS LINE INFO POINTER TAD PQPTR /GET CURRENT BUFFER POINTER DCA I (FILBUF+3776) /SAVE AS FILE POINTER TAD PQPTR /GET AGAIN DCA I PQWORK /SAVE IN DUMMY PAIR ISZ PQWORK /BUMP TO DUMMY LINE NL7777 /-1 IS DUMMY LINE VALUE DCA I PQWORK /SAVE DUMMY LINE NUMBER JMP I PQLINE /RETURN PQWRITE,.-. /WRITE A FILE SPA /? JMP PQCLOSE /YES, DUMP FILE AND [77] /JUST TO MAKE SURE SNA /SKIP IF NOT JMP PQEOL /PUT IN LINE ON JMS PQSTORE /PUSH IT IN PQSRET, ISZ PQWRITE /BUMP TO BEYOND ARGUMENTS CDF 00 /BACK TO FIELD 0 JMP I PQWRITE /RETURN TO SENDER PQEOL, JMS PQSTORE /PUT A ZERO IN ISZ PQPTR /BUMP TO NEXT PAIR DCA I PQPTR /CLOSE FILE IN CASE LAST TAD (PQLEFT+1) /RESET DCA PQPUT /CO-ROUTINE TAD PQNUM /GET LINE NUMBER ENTRY DCA I PQWORK /STORE IN NUMBER WORD TAD PQNUM /GET LINE NUMBER TAD PQINC /UPDATE DCA PQNUM /PUT BACK JMS PQLINE /GO FINISH LINE TAD I (FILBUF+3776) /CHECK FOR FULL TAD PQPROT /PROTECTION VALUE CIA /SUBTRACT TAD I (FILBUF+3777) /FROM SECOND POINTER PQCLOSE,SMA CLA /OK? JMP PQSRET /YES CDF 00 /BACK TO FIELD 0 JMS I [SYSIO] /\ PQBUFF, 3000 / \WRITE OUT PQFUN, 20^100+FILFLD+WRITE / /1 FILE PQFILE, 40 // JMS PQINIT /\ 40 / \INITIALIZE FOR PQPROT, 310 / /NEXT TIME 12 // JMP I PQWRITE /RETURN TO CALLER PQSTORE,.-. /STORE ROUTINE CDF FILFLD /GOTO BUFFER FIELD JMP I PQPUT /GO WHEREVER PQPUT, PQLEFT+1 /EXIT ROUTINE DCA I PQPTR /STORE PAIR JMP I PQSTORE /RETURN TO MAIN PQLEFT, ISZ PQPTR /BUMP TO NEXT PAIR STL RTL /SHIFT LEFT STL RTL /WITH SOME STL RTL /NICE BITS JMS PQPUT /STORE IT DCA PQINIT /SAVE PASSED CHARACTER TAD I PQPTR /GET PREVIOUS CHARACTER AND PQCLOSE /JUST BITS 0-5 TAD PQINIT /ADD ON LATEST CHARACTER JMS PQPUT /STORE BACK JMP PQLEFT /KEEP GOING PQINC, 12 /10 DECIMAL A GOOD VALUE PQNUM, 144 /100 DECIMAL ALSO GOOD PQPTR, 3000 /FILE BUFFER POINTER PQWORK, .-. /REAR FILE POINTER PAGE $ /HERE COME THE L I T E R A L S ! ! ! ???