/SLOW PHASE VELOCITY AND FREQUENCY ANALYSIS PROGRAM XLIST OFF IFNDEF OFF IFNDEF ON IFNDEF VC8E IFNDEF ASDA IFNDEF DSANA XLIST ON; IFZERO 1 < LAST EDIT: 13-APR-1989 11:00:00 TR MAY BE ASSEMBLED WITH '/J' SWITCH SET. > XLIST ON XLIST OFF /THIS PROGRAM ANALYZES UNIT ACTIVITY,SLOW PHASE VELOCITY, AND AVERAGE /POSITION OF SIGNALS CAPTURED DURING DATA ACQISITION STAGE. /IT DISPLAYS DATA AND THE FOLLOWING COMMANDS ARE ENABLED: / B- AMPLIFIES SCALE BY 4 / D- AMPLIFIES SCALE BY 2 / N- SCALES TO NORMAL VALUES / H- SCALES TO HALF THE VALUES / F- CURVE FIT THE DISPLAY / I- REFLECT THE DATA / Q- SCALES TO ONE QUARTER VALUE / R- RESTARTS THE REAL TIME PROGRAM / S- SAVES THE DATA BUFFERS / 1- EXAMINES FIELD 1 / 2- EXAMINES FIELD 2 / 3- EXAMINES FIELD 3 / 4- EXAMINES FIELD 4 / - - DELETE A POINT FROM DISPLAY / + - ADD A POINT TO THE DISPLAY /THE AVERAGE DESACCCADED VELOCITY IS STORED IN FIELD SWPFLD /THE AVERAGED STIMULUS OR TRIGGER SIGNAL IS STORED IN TRGFLD /THE AVERAGED FREQUENCY OF FIRING OF THE UNIT IS STORED IN UNTFLD /THE AVERAGED POSITION IS STORED IN POSFLD /ALL DATA IS STORED IN LOCATION 400(BASE 8). LOCATIONS 0-377 /CONTAIN DOUBLE PRECISION VARIANCES OF 128 EQUALLY SPACED POINTS /THE STIMULUS IS CONTAINED IN TRGFLD /WORD 7777 CONTAINS HIGHEST ADDRESS NOT CONTAINING DATA /WORD 7776 CONTAINS THE FOLLOWING: / BITS 0-5 GIVE THE PERIOD FOR A BUFFER IN UNITS OF 6.1408 SEC / BUFFER TIME = (N+1)6.1408, WHERE N IS GIVEN IN BITS 0-5 / BITS 6-11 GIVE THE NUMBER OF CYCLES AVERAGED. /WORD 7775 CONTAINS THE FOLLOWING INFORMATION: /BIT 0-3 IS THE FIELD UTILIZATION / 17- STIMULUS, UNITS, VELOCITY, POSITION / 13- STIMULUS, NO UNITS, VELOCITY, POSITION / 15- STIMULUS, UNITS, NO VELOCITY, POSITION /BITS 4-11 IS THE ANGLE OF TILT /WORD 7774 CONTAINS THE FOLLOWING INFORMATION: / BIT 0 - DIRECTION OF DATA INPUT(0-FORWARD, 1-BACKWARD) / BIT 1-5 PITCH AMPLITUDE (3 DEG/BIT) / BITS 6-11 ROTATIONAL VELOCITY (5/DEG/SEC/BIT,SIGNED 2'S COMPLEMENT /THE UNITS INFORMATION IS CONTAINED IN UNTFLD. /THE HIGHEST WORD CONTAINS THE FOLLOWING: /BITS 0-4 ARE THE UNIT DESCRIPTION: / 0- HORIZONTAL CANAL NEURON(TYPE 1) / 1- HORIZONTAL CANAL NEURON(TYPE 2) / 2- ANTERIOR CANAL NEURON(TYPE 1) / 3- ANTERIOR CANAL NEURON(TYPE 2) / 4- POSTERIOR CANAL NEURON(TYPE 1) / 5- POSTERIOR CANAL NEURON(TYPE 2) / 6- OTOLITH NEURON /BITS 5-11 CONTAIN THE WINDOW WIDTH (1.6 MS/BIT) /THE AVERAGED VELOCITY IS CONTAINED IN SWPFLD /THE HIGHEST WORD OF SWPFLD CONTAINS /THE TYPE OF VELOCITY (0-HORIZONTAL;1-VERTICAL;2-ROLL) /THE AVERAGED POSITION IS CONTAINED IN POSFLD /THE HIGHEST WORD OF POSFLD CONTAINS THE /TYPE OF POSITION SIGNAL (0-HORIZONTAL;1-VERTICAL;2-ROLL /FOR A SETTING OF THE DIFFERENTIATOR DIFWID=33,VIGAIN=3 /THE CALIBRATION IS 504 BITS/(3.94 VOLTS/SEC) XLIST ON /PROGRAM PARAMETER DEFINITIONS ASDA= 1 /12-BIT A-S D/A CONV ATABLE= 4600 /ARCTANGENT TABLE BUFF= 6600 /BUFFER FOR INPUT FILE CODFLD= 0^10 /FIELD WHERE CODE IS CR= 15 /CARRIAGE RETURN DATUNT= 1 /UNIT WHERE DATA IS STORED / DTAIO= 1 /USE DECTAPE DATDES= 7774 /START OF DATA DESCRIPTION / DSANA= 1 /USE D/A CONVERTER FOR DISPLAY DXINT= 100 /# OF POINTS TO MOVE OVER WHEN DRAWING A TIC DYINT= 1400 /Y AXIS DISPLAY INTERVAL FOR HDS EAE= 1 /USE REAL EAE DXCHR= 16 /DEFAULT PIXEL WIDTH OF CHAR DYCHR= 26 /DEFAULT PIXEL HEIGHT OF CHAR FLPIO= 1 /USE FLOPPY HANDLERS FITFLD= 5^10 /FIELD FOR DATA FITTING HDS= 1 /USE HDS TERM FOR DISPLAY LF= 12 /LINE FEED MESFLD= 6^10 /FIELD FOR MESSAGES POSFLD= 4^10 /FIELD FOR EYE POSITION SIGNAL PMIN= 6000 /MIN DATA VALUE FOR POS FIELD PMAX= 2000 /MAX DATA VALUE FOR POS FIELD RADIUS= 2 /RADIUS OF CIRCULAR DISK POINT READ= 0 /READ VALUE SEPAR= 54 /SEPARATOR FOR PAIRS SINTAB= 5600 /SINE TABLE SWPFLD= 3^10 /FIELD FOR VELOCITY SMIN= 6000 /MIN DATA VALUE FOR SWEEP FIELD SMAX= 2000 /MAX DATA VALUE FOR SWEEP FIELD TABFLD= 6^10 /FIELD FOR TABLE TMIN= 6000 /MIN DATA VALUE FOR TRIG FIELD TMAX= 2000 /MAX DATA VALUE FOR TRIG FIELD TICSZX= 10 /TIC SIZE ALONG X TICSZY= 15 /TIC SIZE ALONG Y TRGFLD= 1^10 /FIELD 2 TABUNIT=0 /UNIT WHERE TABLE IS TBATSN= 1160 /LOCATION OF FILE WITH SINE TABLE UNTFLD= 2^10 /UNIT ACTIVITY FIELD UMIN= 0000 /MIN DATA VALUE FOR UNIT FIELD UMAX= 1000 /MAX DATA VALUE FOR UNIT FIELD VC8E= 0 /USE VC8E(0 IS A-S CONV) SWPST= 400 /START OF SWEEP XLIST OFF /PROCESSOR DEFINITIONS: 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 NL0100= CLA IAC BSW /LOAD AC WITH 0100 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 / PROCESSOR DEPENDENT DEFINITIONS TTY= 0003 /GENERIC TELETYPE KEYBOARD CODE LINE= 0003 /USE DEVICE 03/04 I/O KEYCODE=TTY^10+6000 /SKELETON KEYBOARD CODE PRTCODE=TTY+1^10+6000 /SKELETON TELEPRINTER CODE HDSINCOD=LINE^10+6000 /HDS INPUTT CODE HDSDSCOD=LINE+1^10+6000 /HDS OUTPUT CODE KCCIOT= KEYCODE+2 /CLEAR KEYBOARD FLAG, AC, SET READER RUN KRBIOT= KEYCODE+6 /CLEAR KEYBOARD FLAG, LOAD CHARACTERS INTO AC, /SET READER RUN KRSIOT= KEYCODE+4 /OR CHARACTER INTO AC, DON'T CLEAR KEYBOARD FLAG KSFIOT= KEYCODE+1 /SKIP ON KEYBOARD FLAG TLSIOT= PRTCODE+6 /LOAD OUTPUT BUFFER, CLEAR FLAG TSFIOT= PRTCODE+1 /SKIP ON OUTPUT FLAG RKIEIOT=HDSINCOD+5 /LOAD INTERRUPT ENABLE PER AC[11] RKRBIOT=HDSINCOD+6 /READ REMOTE,CLEAR FLAG RKSFIOT=HDSINCOD+1 /SKIP ON REMOTE INPUT FLAG RTLSIOT=HDSDSCOD+6 /TRANSMIT CHAR,CLEAR FLAG RTSFIOT=HDSDSCOD+1 /SKIP ON TRANSMIT FLAG XLIST ON / CHARACTER DEFINITIONS ESC= 0033 / CHARACTER FS= "\&37 / CHARACTER GS= 0035 / CHARACTER (THIS IS ^]) US= 0037 / CHARACTER XLIST OFF / DECTAPE DEFINITIONS DTLA= 6766 /LOAD "A" REGISTER DTLB= 6774 /LOAD "B" REGISTER DTRA= 6761 /READ "A" REGISTER DTRB= 6772 /READ "B" REGISTER DTSF= 6771 /SKIP ON DECTAPE FLAG DTXA= 6764 /XOR AC WITH "A" REGISTER /EAE DEFINITIONS: ASR= 7415 /ARITHMETIC SHIFT RIGHT CAM= 7621 /CLEAR AC, MQ / DAD= 7443 /DOUBLE-PRECISION ADD / DCM= 7575 /DOUBLE-PRECISION COMPLEMENT / DDZ= CAM DST /DOUBHE-PRECISION DEPOSIT ZERO / DLD= CAM DAD /DOUBLE-PRECISION LOAD / DPIC= 7573 /DOUBLE-PRECISION INCREMENT / DPSZ= 7441 /DOUBLE-PRECISION SKIP IF ZERO / DST= 7445 /DOUBLE-PRECISION STORE DVI= 7407 /DIVIDE LSR= 7417 /LOGICAL SHIFT RIGHT MUY= 7405 /MULTIPLY / SAM= 7457 /SUBTRACT AC FROM MQ SETTING "GREATER THAN /FLAG" IF MQ GREATER THAN OR EQUAL TO AC SHL= 7413 /SHIFT LEFT / SWAB= 7431 /FORCE MODE "B" SWBA= 7447 /FORCE MODE "A" /LAB-8/E DEFINITIONS: ADCL= 6530 /CLEAR ALL A-D FLAGS, ETC. ADLE= 6536 /LOAD ENABLE OF A-D ADLM= 6531 /LOAD MULTIPLEXOR ADRB= 6533 /LOAD AC WITH A-D VALUE ADRS= 6537 /READ A-D STATUS ADSE= 6535 /SKIP ON A-D TIMING ERROR FLAG ADSK= 6534 /SKIP ON A-D DONE FLAG ADST= 6532 /START A-D CLAB= 6133 /AC TO PRESET REGISTER CLBA= 6136 /BUFFER TO AC CLCA= 6137 /COUNTER TO AC CLEN= 6134 /CLOCK ENABLE TO AC CLOE= 6132 /ONES SET CLOCK ENABLE CLSA= 6135 /CLOCK STATUS TO AC, CLEAR CLOCK FLAG CLSK= 6131 /SKIP ON CLOCK FLAG CLZE= 6130 /ONES CLEAR CLOCK ENABLE DBCI= 6503 /ONES CLEAR INPUT REGISTER DBCO= 6505 /ONES CLEAR OUTPUT REGISTER DBDI= 6500 /DISABLE DIGITAL I/O INTERRUPTS DBEI= 6501 /ENABLE DIGITAL I/O INTERRUPTS DBRI= 6504 /LOAD INPUT REGISTER INTO AC DBRO= 6507 /LOAD OUTPUT REGISTER INTO AC DBSK= 6502 /SKIP ON INPUT FLAG DBSO= 6506 /ONES SET OUTPUT REGISTER DICD= 6051 /CLEAR DISPLAY DONE FLAG DILC= 6050 /CLEAR ALL DISPLAY FLAGS, ETC. DILE= 6056 /LOAD ENABLE FROM AC, CLEAR AC DILX= 6053 /LOAD X DILY= 6054 /LOAD Y DIRE= 6057 /READ DISPLAY STATUS DISD= 6052 /SKIP ON DISPLAY DONE DIXY= 6055 /INTENSIFY /OUTPUT CONVERTOR DEFINITIONS: AACODE= 0055 /DEVICE CODE OF AA01A/A. S. D/A DAL1= AACODE^10+6001 /LOAD "X" CONVERTOR DAL2= AACODE^10+6002 /LOAD "Y" CONVERTOR DINT= AACODE^10+6004 /INTENSIFY /P?S MONITOR DEFINITIONS: SBOOT= 7600 /SYSTEM BOOTSTRAP LOCATION SCRSIZE=7611 /SOFTWARE CORE SIZE SDATE= 7610 /CURRENT DATE WORD SFILES= 7757 /LOCATION FOR FILES SOUTFLS=7607 /OUTPUT FILE COUNT SPARM= 7756 /EQUALS PARAMETER SWAL= 7604 /SWITCHES /A-/L SWMX= 7605 /SWITCHES /M-/X SWY9= 7606 /SWITCHES /Y-/9 SYSIO= 7640 /I/O ROUTINES /VT-8/E DEFINITIONS: DPLA= 6450 /TRANSFER AC TO STARTING ADDRESS REGISTER DPGO= 6451 /AC[10-11] TO MODE, AC[6-8] TO EXTENDED /ADDRESS REGISTER AND START DISPLAY DPSM= 6452 /STOP THE VIDEO DISPLAY, ALSO MAINTENACE USAGE DPMB= 6453 /DO MAINTENANCE BREAK DPMD= 6454 /MAINTENANCE DATA BUFFER TO AC DPMS= 6455 /MAINTENANCE ADDRESS TO AC, /SENSE SWITCH TO AC[0] DPCL= 6456 /SKIP ON VIDEO RETRACE FLAG DPBL= 6457 /GENERATE HALF SECOND BELL TONE /VT8E KEYBOARD INSTRUCTION DEFINITIONS: DKCF= 6430 /CLEAR KEYBOARD FLAG DKSF= 6431 /SKIP ON KEYBOARD FLAG DKCC= 6432 /CLEAR KEYBOARD FLAG AND AC DKRS= 6434 /LOGICAL OR KEYBOARD BUFFER AND AC DKIE= 6435 /ENABLE/DISABLE KEYBOARD AND /LPT: INTERRUPTS PER AC[11] DKRB= 6436 /READ KEYBOARD BUFFER INTO AC /LINE PRINTER DEFINITIONS: LFL= 6660 /SET LPT: FLAG LSF= 6661 /SKIP ON LPT: FLAG LCF= 6662 /CLEAR LPT: FLAG LSE= 6663 /SKIP ON LPT: ERROR /**** NOT VALID ON VT-8/E HARDWARE **** LPC= 6664 /LOAD LPT: CHARACTER AND PRINT LIE= 6665 /LOAD INTERRUPT ENABLE PER AC[11] /**** NOT VALID ON VT-8/E HARDWARE **** LSK= 6665 /SKIP ON VT-8/E INTERRUPT ENABLE AND VT-8/E /KEYBOARD OR LPT: FLAG /**** ONLY VALID ON VT-8/E **** LLS= 6666 /CLEAR LPT: FLAG, LOAD CHARACTER AND PRINT LRS= 6667 /READ LPT: STATUS /**** NOT VALID ON VT-8/E HARDWARE **** /FLOATING POINT PACKAGE DEFINITIONS FIXMRI FJMP= 0000 /FLOATING JUMP FIXMRI FADD= 1000 /FLOATING ADD FIXMRI FSUB= 2000 /FLOATING SUBTRACT FIXMRI FMUL= 3000 /FLOATING MULTIPLY FIXMRI FDIV= 4000 /FLOATING DIVIDE FIXMRI FGET= 5000 /LOAD FLOATING AC FIXMRI FPUT= 6000 /STORE FLOATING AC FIXMRI FJMS= 7000 /FLOATING JMS FENTER= JMS I 7 /ENTER INTERPRETER FEXT= 0000 /LEAVE INTERPRETER FSQU= 0001 /SQUARE THE FLAC FSQR= 0002 /FIND SQUARE ROOT OF FLAC FSIN= 0003 /FLOATING SIN(FLAC) FCOS= 0004 /FLOATING COS(FLAC) FATN= 0005 /FLOATING ATAN(FLAC) FNEG= 0010 /NEGATE FLAC FNOR= 7000 /NORMALIZE FIN= 0011 /INPUT FROM TTY FFIX= 0013 /CHANGE FLAC TO A FIXED POINT NUMBER FLOT= 0014 /CHANGE FLAC TO FLOATING POINT NUMBER FOUT= 0012 /OUTPUT TO TTY FLAC= 0044 /ADDRESS OF FLOATING AC FORMAT= 56 /0=E FORMAT;7777=F FORMAT PAGE 0 /START AT THE BEGINNING XLIST ON ZBLOCK 10-. /GET TO AUTO-INDEX AREA XR1, .-. /AUTO-INDEX NUMBER 1 XR2, .-. /AUTO-INDEX NUMBER 2 XR3, .-. /AUTO-INDEX NUMBER 3 XR4, .-. /AUTO-INDEX NUMBER 4 XR5, .-. /AUTO-INDEX NUMBER 5 ZBLOCK 20-. FILEPNT,.-. /POINTS TO FILE MTMP1, .-. /TEMPORARY GETPTR, .-. /MOVING POINTER IN CHARBUFF INCHAR, .-. /HOLDS THE INPUT CHARACTER X, .-. /HOLDS X VALUE Y, .-. /HOLDS Y VALUE BUFPER, .-. /TOTAL BUFFER PERIOD (N+1) CYCNUM, .-. /NUMBER OF CYCLES AVERAGED DATPNT, .-. /DATA DESCRIPTION WORD DATPER, .-. /THE PERIOD OF THE DATA DAY, .-. /HOLDS THE DAY DATA WAS TAKEN HADSCL, .-. /DIVIDE SCALE FACTOR HAMSCL, .-. /MULTIPLY SCALE FACTOR L3, 3 /THE CONSTANT 3 L5, 5 /THE CONSTANT 5 POSTYP, .-. /HOLDS POSITION TYPE STMORG, .-. /FIELD ORGANIZATION STMPIT, .-. /PITCH AMPLITUDE STMTLT, .-. /TILT ANGLE STMVEL, .-. /STIMULUS VELOCITY UNTTYP, .-. /UNIT TYPE UNTWND, .-. /WINDOW WIDTH UNCODE, .-. /UNIT CODE WORD VELTYP, .-. /VELOCITY TYPE IN SWPFLD YEAR, .-. /YEAR DATA WAS TAKEN PAGE START, CAF /CLEAR UP EVERYONE TLS /SET OUTPUT FLAG SWAB /GET MODE B EAE TAD I (SWMX) /GET M-X SWITCHES AND (20) /MASK OFF SWITCH T DCA I (TSWITCH) /STORE FOR INPUT ROUTINE STRT1, TAD I (TSWITCH) /GET IT BACK SZA CLA /IF NOT SET THEN SKIP JMP CONSLIN /ELSE GET FROM CONSOLE DCA BLKNUM /CLEAR BLOCK NUMBER /GET THE INPUT FILE TAD (SFILES-1) /GET THE FILE LOCATION-1 TAD I (SOUTFLS) /ADD NUMBER OF OUTPUT FILES DCA FILEPNT /STORE IN FILE POINTER TAD FILEPNT /GET FILE POINTER DCA MTMP1 /STORE TEMPORARILY ISZ MTMP1 /POINT TO FILE LOCATION TAD I MTMP1 /GET THE FILE SNA CLA /IF NO FILES THEN SKIP JMP I (SBOOT) /ELSE BOOTSTRAP CONSLIN,CDF CODFLD /MAKE SURE FIELD 0 NL7777 /SET MESSAGE FLAG JMS I (SCRIBE);MSBLK /PRINT BLOCK# MESSAGE JMS I (REANUM) /READ THE BLOCK NUMBER DCA BLKNUM /STORE IT TAD (10+DATUNT) /READ 40(8) BLOCKS INTO FIELD 1 UNIT 7 DCA IOFUN /STORE IN I/O FUNCTION WORD JMS IOCALL /CALL I/O ROUTINES TAD (20+DATUNT) /READ 40 BLOCKS INTO FIELD 2 UNIT 7 DCA IOFUN /STORE INTO I/O FUNCTION WORD TAD BLKNUM /GET THE BLOCK NUMBER TAD (40) /POINT TO NEXT 40 BLOCKS DCA BLKNUM /STORE INTO ARG FOR I/O ROUTINES JMS IOCALL /CALL THE I/O ROUTINES AGAIN TAD (30+DATUNT) /READ 40 BLOCKS INTO FIELD 3 UNIT 7 DCA IOFUN /STORE IN FUNCTION WORD TAD BLKNUM /GET BLOCK NUMBER TAD (40) /ADD 40 DCA BLKNUM /STORE IT JMS IOCALL /DO I/O TAD (40+DATUNT) /READ 40 BLOCKS INTO FIELD 4 UNIT 7 DCA IOFUN /STORE IT TAD BLKNUM /GET BLOCK NUMBER TAD (40) /ADD 40 BLOCKS DCA BLKNUM /STORE IT JMS IOCALL /DO I/O JMS I (DATSTAT) /GET DATA STATUS JMS I (DATPRN) /PRINT IT OUT JMP I (DSPL) /GO DISPLAY THE DATA /THIS SUBROUTINE CALLS THE DECTAPE I/O ROUTINES IOCALL, .-. /SUBROUTINE HEADER XLIST OFF IFNZRO DTAIO < XLIST ON JMS I (DTIO) /CALL I/O ROUTINES XLIST OFF > IFNZRO FLPIO < XLIST ON JMS I (FLPHND) /CALL FLOPPY I/O ROUTINE XLIST OFF > XLIST ON IOTRN /POINTER TO I/O TRANSFER JMP .-2 /TRY AGAIN ON ERROR CLA /CLEAN UP JMP I IOCALL /RETURN TO CALLER IOTRN, 0 /STARTING ADDRESS OF BUFFER IOFUN, .-. /THE FUNCTION WORD BLKNUM, .-. /THE STARING BLOCK NUMBER TO READ /THIS SUBROUTINE SUBTRACTS A POINT FROM THE DISPLAY SUBPNT, .-. /DELETE A DISPLAY POINT ROUTINE NL7777 /GET A -1 CDF TRGFLD /GET THE TRIGGER FIELD TAD I (7777) /ADD THE HIGHEST DATA WORD DCA I (7777) /STORE IT BACK NL7777 /SUBTRACT 1 FROM CDF 00 /GET FIELD 0 TAD I (DSPWRD) /LAST POINT DISPLAY DCA I (DSPWRD) /STORE IT JMP I SUBPNT /RETURN /THIS SUBROUTINE ADDS A POINT TO THE DISPLAY ADDPNT, .-. /RETURN HERE CLA /CLEAN UP TAD ADDPNT /GET THE ADDRESS DCA SUBPNT /RETURN THROUGH THERE NL0001 /GET 1 JMP SUBPNT+2 /GO THERE PAGE /SUBROUTINE TO PRINT OUT STIMULUS AND DATA PARAMETERS DATSTAT,.-. /SUBROUTINE HEADER TAD (DATDES-1) /GET START OF DATA DESCRIPTION DCA XR1 /STORE INTO AUTO INCREMENT REG CDF TRGFLD /GET TRIGGER FIELD TAD I XR1 /GET WORD DCA STMPIT /STORE INTO STIMULUS PITCH WORD TAD I XR1 /GET NEXT WORD DCA STMTLT /STORE IN STIMULUS TILT ANGLE WORD TAD I XR1 /GET NEXT WORD DCA BUFPER /STORE PERIOD AND CYCLES NUMBER TAD I XR1 /GET NEXT WORD DCA DATPER /STORE IN DATA PERIOD CDF CODFLD /STORE INTO CODE FIELD TAD STMPIT /GET BACK STIMULUS WORD AND (77) /MASK OFF ROTATION VELOCITY MQL MUY;L5 /5 DEG/SEC PER BIT SWP /GET IT INTO AC CLL /CLEAR THE LINK TAD (-240) /ADD -240 SZL /SKIP IF ANSWER IS POSITIVE TAD (-2^240) /ELSE SUBTRACT 2*240 TAD (240) /ADD BACK 240 DCA STMVEL /STORE AS ROTATIONAL VELOCITY TAD STMPIT /GET BACK STIMULUS WORD BSW;AND (37) /MASK OFF BITS 1-5 MQL MUY; L3 /3 DEG/SEC PER BIT SWP /GET MQ DCA STMPIT /STORE BACK AS PITCH AMPLITUDE TAD (7400) /GET BITS 0-3 AND STMTLT /MASK OFF FIELD ALLOCATION CLL RTL;RTL;RAL /PUT INTO BITS 8-11 DCA STMORG /STORE IT TAD (377) /TURN ON BITS 4-11 AND STMTLT /MASK OFF TILT ANGLE DCA STMTLT /STORE IT TAD BUFPER /GET BUFFER PERIOD WORD AND (77) /MASK OFF NUMBER OF CYCLES DCA CYCNUM /STORE IT AWAY TAD BUFPER /GET BUFFER PERIOD WORD BSW; AND (77) /GET ACTUAL BUFFER PERIOD IAC /ADD 1 DCA BUFPER /STORE AS BUFFER PERIOD TAD (400) /GET START ADDRESS OF BUFFER CIA /NEGATE TAD DATPER /ADD HIGHEST WORD WHERE DATA IS DCA DATPER /STORE BACK AS DATA PERIOD CDF UNTFLD /GET UNIT FIELD NL7776 /GET A -1 DCA DATPNT /STORE INTO DATA POINTER TAD I DATPNT /GET DATA DCA UNCODE /STORE AS CODE WORD TAD STMORG /GET THE FIELD ORGANIZATION CLL RTR;RAR /MOVE BIT FOR UNIT FIELD INTO LINK SZL CLA /IF NO UNITS THEN SKIP JMP UNTENT /ELSE ENTER UNIT DESCRIPTION NL7777 /INDICATE NO UNIT DCA UNTTYP /AND STORE IT JMP SWPENT /GO LOOK AT SWEEP FIELD UNTENT, ISZ DATPNT /MOVE TO NEXT WORD TAD I DATPNT /GET UNIT TYPE DCA UNTTYP /STORE INTO UNIT TYPE WORD TAD UNTTYP /GET BACK UNIT TYPE WORD AND (177) /MASK OFF WINDOW BITS DCA UNTWND /STORE AWAY TAD UNTTYP /GET BACK UNIT TYPE WORD AND (7600) /MASK OFF UNIT DESCRIPTION BSW;CLL RAR /MOVE TO LOW BITS DCA UNTTYP /STORE BACK AS UNIT TYPE SWPENT, CDF SWPFLD /GET VELOCITY FIELD TAD STMORG /GET BACK STIMULUS ORG WORD CLL RTR /MOVE VELOCITY BIT INTO LINK SZL /IF NO VELOCITY THEN SKIP JMP VELDO /ELSE DO VELOCITY DESCRIPT NL7777 /SET THE AC DCA VELTYP /INDICATE NO VELOCITY JMP POSENT /CHECK POSITION FIELD VELDO, NL7777 /GET 7777 DCA DATPNT /STORE AS POINTER TAD I DATPNT /GET THE VELOCITY DESCR WORD DCA VELTYP /STORE IT POSENT, NL7775 /GET LOCATION 7775 DCA DATPNT /STORE INTO DATA POSITION TAD I DATPNT /GET THE DAY DCA DAY /STORE IT ISZ DATPNT /POINT TO YEAR TAD I DATPNT /GET THE YEAR DCA YEAR /STORE IT TAD STMORG /GET BACK STIMULUS ORGANIZATION CLL RAR /PUT POS FIELD BIT INTO LINK SZL /IF NO POSITION THEN SKIP JMP POSDO /ELSE DO POSITION STUFF NL7777 /PUT 7777 DCA POSTYP /INTO POSITION TYPE CDF CODFLD /GET BACK OUR FIELD JMP I DATSTAT /RETURN POSDO, NL7777 /POINT TO HIGHEST DCA DATPNT /DATA VALUE CDF POSFLD /GET POSITION FIELD TAD I DATPNT /GET THE VALUE DCA POSTYP /STORE AS POSITION TYPE CDF CODFLD /GET BACK TO CODE FIELD JMP I DATSTAT /RETURN PAGE /PRINT OUT THE PARAMETERS SUBROUTINE DATPRN, .-. /SUBROUTINE HEADER JMS I (SCRIBE);MSFLUT /PRINT FIELD UTIL MESSAGE TAD I (STMORG) /GET STIMULUS ORG DCA I (PRNTMP) /STORE IN PRINT POINTER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSROTV /PRINT ROT VEL MESSAGE TAD I (STMVEL) /GET STIMULUS VELOCITY DCA I (PRNTMP) /STORE IN PRINT POINTER NL7777 /INDICATE UNSIGNED PRINT JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSTLAN /PRINT TILT ANGLE MESSAGE TAD I (STMTLT) /GET TILT ANGLE DCA I (PRNTMP) /STORE IN PRINT POINTER NL7777 /INDICATE SIGNED PRINT JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSPIAM /PRINT PITCH ANGLE MESSAGE TAD I (STMPIT) /GET PITCH ANGLE DCA I (PRNTMP) /STORE IN PRINT POINTER NL7777 /INDICATE SIGNED PRINT JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSBUFP /PRINT BUFFER PERIOD MESSAGE TAD I (BUFPER) /GET BUFFER PERIOD DCA I (PRNTMP) /STORE IN PRINT POINTER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSDAPR /PRINT DATA PERIOD MESSAGE TAD I (DATPER) /GET NUMBER OF CYCLES DCA I (PRNTMP) /STORE IN PRINT POINTER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSNUMS /PRINT CYCLE NUMBER MESSAGE TAD I (CYCNUM) /GET NUMBER OF CYCLES DCA I (PRNTMP) /STORE IN PRINT POINTER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSUNDES/PRINT UNIT TYPE MESSAGE TAD I (UNTTYP) /GET THE UNIT TYPE DCA I (PRNTMP) /STORE IN PRINT POINTER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSWNWD /PRINT WINDOW WIDTH MESSAGE TAD I (UNTWND) /GET THE WINDOW WIDTH DCA I (PRNTMP) /STORE INTO PRINT BUFFER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSVLTY /PRINT VELOCITY TYPE MESSAGE TAD I (VELTYP) /GET THE VELOCITY TYPE DCA I (PRNTMP) /STORE INTO PRINT BUFFER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSPSTY /PRINT POSITION MESSAGE TAD I (POSTYP) /GET THE POSITION TYPE DCA I (PRNTMP) /STORE INTO PRINT BUFFER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSYEAR /PRINT YEAR MESSAGE TAD I (YEAR) /GET THE YEAR DCA I (PRNTMP) /STORE IN PRINT BUFFER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSDAY /PRINT DAY MESSAGE TAD I (DAY) /GET THE DAY DCA I (PRNTMP /STORE IN PRINT BUFFER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);MSUNCODE /PRINT UNIT CODE MESSAGE TAD I (UNCODE) /GET THE CODE DCA I (PRNTMP) /STORE IN PRINT BUFFER JMS I (PRNNUM) /PRINT IT JMS I (CRLF) /DO A CARRIAGE RETURN LINE FEED JMP I DATPRN /RETURN TO CALLER PAGE DSPL, JMS I (INITERM) /INITIALIZE HDS CDF TRGFLD /GET TRIGGER FIELD TAD I (7777) /GET HIGHEST WORD DCA DSPWRD /STORE TAD (-4) /GET FIELD COUNT-1 DCA FLDCNT /STORE AS COUNTER TAD (DSFLDS) /REINITILIZE DCA PDSFLDS /FIELD POINTER DSPLP1, CDF CODFLD /GET PRESENT FIELD TAD I PDSFLD /GET THE DISPLAY FIELD DCA FLDSET /SET THE APPROPRIATE FIELD ISZ PDSFLD /GO TO NEXT FIELD TAD I PDSFLDS /GET MIN FOR THAT FIELD DCA YMIN /STORE IT ISZ PDSFLDS /NEXT WORD TAD I PDSFLDS /NEXT WORD DCA YMAX /STORE AS YMAX ISZ PDSFLDS /NEXT WORD TAD (377) /GET START OF DATA DCA XR1 /STORE INTO AUTO INDEX TAD DSPWRD /GET HIGHEST WORD CIA /NEGATE TAD (400) /SUBTRACT OFF VARIANCE POINTS DCA CNT /STORE AS COUNT JMS I (SCLINI) /DO A SCALE INITIALIZATION FLDSET, CDF TRGFLD /CHANGE TO TRIGGER FIELD TAD I XR1 /GET THE DATA DCA Y /STORE INTO Y TAD XR1 /GET THE X VALUE TAD (-4400) /SUBTRACT THE BASE DCA X /STORE AS X CDF CODFLD /GET BACK TO OUR FIELD JMS I (SCLDAT) /SCALE THE DATA JMS I (SETADR) /SET UP ADDRESS JMS I (STROUT);ADRBUF;0 /OUTPUT IT ISZ CNT /IF DONE THEN SKIP JMP FLDSET /ELSE KEEP GOING JMS YSCLDR /DRAW A SCALE BAR TAD DYMIN /GET DYMIN TAD (DYINT) /ADD DISPLAY INTERVAL DCA DYMIN /STORE BACK TAD DYMAX /GET DYMAX TAD (DYINT) /ADD DISPLAY INTERVAL DCA DYMAX /STORE IT ISZ FLDCNT /IF DONE ALL FIELDS THEN SKIP JMP DSPLP1 /DO NEXT FIELD TAD (4000) /RESTORE THE DCA DYMIN /DISPLAY TAD (4000+DYINT) /PARAMETERS DCA DYMAX /TO THIER ORIG VALUE JMP I (START) /START ALL OVER DSPWRD, .-. /HOLDS HIGHEST DISPLAYED POINT TEMP, .-. HIGHX, .-. LOWX, .-. CNT, .-. FLDCNT, .-. /FIELD COUNTER TICTMP, .-. /TICWRD DYMIN, 4000 /DISPLAY MIN FOR Y DYMAX, 4000+DYINT /DISPLAY MAX FOR Y DXMIN, 4000 /DISPLAY MIN FOR X DXMAX, 3670 /DISPLAY MAX FOR X XMIN, 4000 /MINIMUM X XMAX, 3777 /MAXIMUM X YMIN, 4000 /MINIMUM Y YMAX, 3777 /MAXIMUM Y PDSFLDS,DSFLDS /POINETR TO FIELDS DSFLDS, CDF POSFLD;PMIN;PMAX /POSITION FIELD CDF TRGFLD;TMIN;TMAX /TRIGGER FIELD CDF UNTFLD;UMIN;UMAX /UNITS FIELD CDF SWPFLD;SMIN;SMAX /VELOCITY FIELD /ROUTINE TO DRAW A SCALE TIC MARK AT END OF TRACE YSCLDR, .-. /SCALE BAR DRAW ROUTINE CLA /CLEAN UP DCA Y /STORE INTO Y JMS I (SCLDAT) /SCALE IT TAD DXMAX /GET MAXIMUM X TAD (4000+DXINT) /MOVE OVER A LITTLE DCA X /STORE INTO X JMS I (STROUT);VECMODE;0 /GET INTO VECTOR MODE JMS I (SETADR) /SET UP ADDRESS JMS I (STROUT);ADRBUF;0 /SEND IT TAD YMAX /GET THE Y MAXIMUM DCA Y /STORE INTO Y JMS I (SCLDAT) /SCALE DATA TAD DXMAX /GET MAXIMUM X TAD (4000+DXINT) /MOVE OVER A LITTLE DCA X /STORE INTO X JMS I (SETADR) /SET UP ADDRESS JMS I (STROUT);ADRBUF;0 /DRAW VERT VECTOR JMS I (STROUT);PPM;0 /GET BACK POINT PLOT MODE JMP I YSCLDR /RETURN PAGE /ROUTINE FOR SCALING THE DATA INTO SCREEN MEMORY SCLDAT, .-. /SCALING ROUTINE NL7776 /SETUP THE SIGN DCA SCLSGN /FOR NEGATIVE TESTING TAD SCLMLX /GET MULTIPLIER VALUE MQL /PUT INTO MQ TAD X /GET X JMS I (SGNMUL) /DO A SIGNED MULTIPLY DAD; SCLOFX /ADD OFFSET SMA /IF NEGATIVE THEN SKIP JMP .+3 /ELSE JUMP AHEAD DCM /NEGATE ISZ SCLSGN /INDICATE NEGATIVE DVI; SCLDVX /DIVIDE BY RANGE SWP /GET ONLY 12 BITS ISZ SCLSGN /SKIP IF NEG DIVIDEND SKP /ELSE SKIP CIA /NEGATE TAD (4000) /MAKE 0 ORIGIN DCA X /STORE BACK IN X NL7776 /SETUP THE SIGN DCA SCLSGN /FOR NEGATIVE TESTING TAD SCLMLY /GET MULTIPLIER VALUE MQL /PUT INTO MQ TAD Y /GET X JMS I (SGNMUL) /DO A SIGNED MULTIPLY DAD; SCLOFY /ADD OFFSET SMA /IF NEGATIVE THEN SKIP JMP .+3 /ELSE JUMP AHEAD DCM /NEGATE ISZ SCLSGN /INDICATE NEGATIVE DVI; SCLDVY /DIVIDE BY RANGE SWP /GET ONLY 12 BITS ISZ SCLSGN /SKIP IF NEG DIVIDEND SKP /ELSE SKIP CIA /NEGATE TAD (4000) /MAKE 0 ORIGIN DCA Y /STORE BACK IN Y JMP I SCLDAT /RETURN TO CALLER SCLMLX, .-. /SCALE SLOPE FOR X SCLDVX, .-. /RANGE PARAMETER X SCLOFX, ZBLOCK 2 /SCALE OFFSET FOR X SCLMLY, .-. /SCALE SLOPE FOR Y SCLDVY, .-. /RANGE PARAMETER Y SCLOFY, ZBLOCK 2 /SCALE OFFSET FOR Y SCLSGN, .-. /SIGN FLAG /ROUTINE FOR DRAWING AXES ONTO SCREEN AXISDR, .-. /DRAW AXIS ROUTINE JMS I [STROUT];VECMODE;0 /POSITION POINTER CLA /CLEAN UP TAD I (DXMAX) /GET MAXIMUM X DISPLAY DCA X /STORE INTO X VALUE TAD I (DYMIN) /GET MINIMUM Y DISPLAY DCA Y /STORE IN Y VALUE JMS I (SETADR) /TURN INTO ADDRESS COMPONENTS JMS I [STROUT] /OUTPUT ADRBUFF;0 /THE VALUES TAD I (DXMIN) /GET MINIMUM X DISPLAY DCA X /PUT INTO X JMS I (SETADR) /SET ADDRESS BUFFER JMS I [STROUT] /OUTPUT NEW POINT FOR VECTOR ADRBUFF;0 /MODE TAD I (DYMAX) /GET MAXIMUM Y DISPLAY DCA Y /STORE IN Y VALUE JMS I (SETADR) /SET ADDRESS BUFFER JMS I [STROUT] /OUTPUT NEW ADRBUFF;0 /VECTOR JMP I AXISDR /RETURN TO CALLER /SUBROUTINE TO PERFORM SIGNED MULTIPLICATION SGNMUL, .-. /SUBROUTINE HEADER DCA MULARG /STORE IT NL7776 /GETA -2 DCA GRPSGN /STORE AS SIGN TAD MULARG /GET IT BACK SMA /IF NEGATIVE THEN SKIP JMP .+3 /ELSE JUMP AHEAD CIA /MAKE NEGATIVE ISZ GRPSGN /INDICATE BY SIGN DCA MULARG /STORE AS ARGUMENT MUY;MULARG /MULTIPLY ISZ GRPSGN /IF SIGN IS SET THEN SKIP JMP I SGNMUL /ELSE RETURN DCM /AND NEGATE JMP I SGNMUL /RETURN TO CALLER GRPSGN, .-. /HOLDS SIGN MULARG, .-. /MULTIPLY ARGUMENT PAGE / ROUTINE TO SETUP SCALE AND OFFSET PARAMETERS SCLINI, .-. /SUBROUTINE HEADER CLA /CLEAN UP TAD I (DXMIN) /GET MINIMUM DISPLAY X CIA /SUBTRACT FROM TAD I (DXMAX) /MAXIMUM DISPLAY VALUE DCA I (SCLMLX) /STORE MULTIPLIER TAD I (XMIN) /GET THE MINIMUM X CIA /SUBTRACT FROM TAD I (XMAX) /MAXIMUM X DCA I (SCLDVX) /STORE IN DIVIDE TAD I (DYMIN) /GET MINIMUM DISPLAY Y CIA /SUBTRACT FROM TAD I (DYMAX) /MAXIMUM DISPLAY VALUE DCA I (SCLMLY) /STORE MULTIPLIER TAD I (YMIN) /GET THE MINIMUM Y CIA /SUBTRACT FROM TAD I (YMAX) /MAXIMUM Y DCA I (SCLDVY) /STORE IN DIVIDE TAD I (DXMAX) /GET DISP MAX DCA SCTMP1 /STORE TEMPORARY TAD I (XMIN) /GET X MINIMUM DCA SCTMP2 /STORE TEMPORARY JMS SCLPROD /GET SIGNED PRODUCT DCM /NEGATE DST; SCINTM /STORE IT CLA /CLEAN UP TAD I (DXMIN) /GET X MIN DCA SCTMP1 /STORE TEMP TAD I (XMAX) /GET X MAX DCA SCTMP2 /STORE TEMP JMS SCLPROD /GET PRODUCT DAD; SCINTM /ADD BACK DOUBLE PRECISION NUMBER DST; SCLOFX /STORE OFFSET CLA /CLEAN UP TAD I (DYMAX) /GET DISP MAX DCA SCTMP1 /STORE TEMPORARY TAD I (YMIN) /GET X MINIMUM DCA SCTMP2 /STORE TEMPORARY JMS SCLPROD /GET SIGNED PRODUCT DCM /NEGATE DST; SCINTM /STORE IT CLA /CLEAN UP TAD I (DYMIN) /GET X MIN DCA SCTMP1 /STORE TEMP TAD I (YMAX) /GET X MAX DCA SCTMP2 /STORE TEMP JMS SCLPROD /GET PRODUCT DAD; SCINTM /ADD BACK DOUBLE PRECISION NUMBER DST; SCLOFY /STORE OFFSET CAM /CLEAN UP JMP I SCLINI /RETURN TO CALLER SCINTM, ZBLOCK 2 /DOUBLE PRECISION TEMP / ROUTINE TO DO SIGNED MULTIPLICATION SCLPROD,.-. /SUBROUTINE HEADER NL7776 /SETUP SIGN FLAG DCA SCISGN /FOR NEGATIVE NOS TAD SCTMP1 /GET FIRST ARG SMA /IF NEG THEN SKIP JMP .+3 /ELSE JUMP AHEAD CIA /NEGATE ISZ SCISGN /INDICATE NEGATIVE MQL /STORE INTO MQ TAD SCTMP2 /GET SECOND ARG JMS I (SGNMUL) /MULTIPLY ISZ SCISGN /SKIP IF ARG WAS NEG SKP /ELSE SKIP AROUND DCM /NEGATE JMP I SCLPROD /RETURN TO CALLER SCISGN, .-. /SIGN FLAG SCTMP1, .-. /FIRST ARGUMENT SCTMP2, .-. /SECOND ARGUMENT PAGE SETADR, .-. /ADDRESS SETUP ROUTINE SETZAP, JMP SET4010 /**** NOT /1 **** NOP TAD Y /GET Y ADDRESS RTL;RTL;RTL /%200 AND [37] /JUST HIGH FIVE BITS TAD [40] /MAKE IT ASCII DCA ADRBUFFER+0 /STORE AS HI-Y TAD Y /GET Y AGAIN AND [3] /JUST LOW TWO BITS CLL RTL /MOVE UP DCA ADRBUFFER+1 /SAVE FOR NOW TAD Y /GET Y AGAIN RTR /%4 AND [37] /JUST MIDDLE FIVE BITS TAD [140] /MAKE IT ASCII DCA ADRBUFFER+2 /STORE AS LO-Y TAD X /GET X ADDRESS RTL;RTL;RTL /%200 AND [37] /JUST HIGH FIVE BITS TAD [40] /MAKE IT ASCII DCA ADRBUFFER+3 /STORE AS HI-X TAD X /GET X AGAIN RTR /%4 AND [37] /JUST MIDDLE FIVE BITS TAD [100] /MAKE IT ASCII DCA ADRBUFFER+4 /STORE AS LO-X TAD X /GET X AGAIN AND [3] /JUST LOW TWO BITS TAD ADRBUFFER+1 /ADD ON LOW Y BITS (SHIFTED) TAD [140] /MAKE IT ASCII WITH MARGIN 1 DCA ADRBUFFER+1 /STORE COMPOSITE EXTRA BYTE JMP I SETADR /RETURN / COMES HERE IF IN 4010 ADDRESS MODE. SET4010,TAD Y /GET UNSIGNED Y VALUE RTR;RTR;RAR /%40 AND [177] /JUST HIGH SEVEN BITS TAD [40] /MAKE IT ASCII DCA ADRBUFFER+0 /STORE AS HI-Y TAD Y /GET Y AGAIN AND [37] /JUST FIVE LOW BITS TAD [140] /MAKE IT ASCII DCA ADRBUFFER+1 /STORE AS LO-Y TAD X /GET X VALUE RTR;RTR;RAR /%200 AND [177] /JUST HIGH SEVEN BITS TAD [40] /MAKE IT ASCII DCA ADRBUFFER+2 /STORE AS HI-X TAD X /GET X AGAIN AND [37] /JUST FIVE MIDDLE BITS TAD [100] /MAKE IT ASCII DCA ADRBUFFER+3 /STORE AS LO-X DCA ADRBUFFER+4 /ZERO FIFTH WORD JMP I SETADR /RETURN ADRBUFF,ZBLOCK 6 /ADDRESS TRANSMISSION BUFFER PAGE / STRING OUTPUT ROUTINE. STROUT, .-. /STRING OUTPUT ROUTINE CLA /CLEAN UP STRLUP, TAD I STROUT /GET AN ARGUMENT SNA /SKIP IF END OF ARGUMENTS JMP I STROUT /RETURN IF NO MORE STRINGS DCA STRPTR /STASH THE LATEST POINTER ISZ STROUT /BUMP TO NEXT ARGUMENT FOR NEXT TIME STRLOOP,TAD I STRPTR /GET A CHARACTER SNA /END OF A STRING? JMP STRLUP /YES, GO GET ANOTHER STRING JMS TERMOUT /NO, SEND THIS CHARACTER ISZ STRPTR /BUMP TO NEXT JMP STRLOOP /GO DO ANOTHER CHARACTER STRPTR, .-. /STRING POINTER TERMOUT,.-. /TERMINAL OUTPUT ROUTINE DCA TERMTMP /SAVE PASSED VALUE TERMLUP,JMS INTEST /TEST FOR DC1/DC3 TAD TERMTMP /GET THE CHARACTER RTSFIOT /FLAG UP? JMP TERMLUP /NO, WAIT FOR IT RTLSIOT /YES, OUTPUT IT JMS INTEST /TEST FOR DC1/DC3 JMP I TERMOUT /RETURN TERMTM, .-. /TEMPORARY INTEST, .-. /TEST FOR DC1/DC3 INPUT JMS INTERM /TEST FOR A CHARACTER JMP I INTEST /WASN'T ANY MQL /FOR DEBUGGING MQA CDF 30 DCA I XR5 MQA CDF 00 TAD (-"S!300) /COMPARE TO <^S> SZA CLA /SKIP IF IT MATCHES JMP I INTEST /RETURN IF NOT INWAIT, JMS INTERM /TEST FOR A CHARACTER JMP INWAIT /MUST WAIT FOR IT TAD (-"Q!300) /COMPARE TO <^Q> SZA CLA /SKIP IF IT MATCHES JMP INWAIT /GO BACK AND WAIT FOR IT JMP I INTEST /RETURN INTERM, .-. /GET AN INPUT CHARACTER CLA /CLEAN UP RKSFIOT /FLAG UP? JMP I INTERM /NO, JUST RETURN RKRBIOT /YES, READ IT IN AND [177] /JUST SEVEN-BIT ISZ INTERM /BUMP RETURN ADDRESS JMP I INTERM /TAKE SKIP RETURN PAGE / TERMINAL INITIALIZATION ROUTINE. INITERM,.-. /INITIALIZE THE TERMINAL CLA /CLEAN UP RKIEIOT /PREVENT TERMINAL INTERRUPTS RTLSIOT /SET OUTPUT FLAG CDF CODFLD /ENSURE MAIN FIELD TAD (NOP) /GET A NOP DCA I (SETZAP) /ZAP IT IN LEAVIT, JMS I [STROUT] /SEND STRINGS TO TERMINAL XZAP, BLAMEM /BLANK THE ALPHA SCREEN **** /X **** 0000 UNGMEM /UNBLANK THE GRAPHICS SCREEN DSGMEM /DISPLAY THE GRAPHICS MEMORY NDSPACE /NON-DESTRUCTIVE SPACE IN GRAPHICS ALPHA MODE EGACLR /ENTER GRAPHICS ALPHA MODE, CLEAR SCREEN PPM /ENTER POINT PLOT MODE 0 /THIS ENDS THE LIST JMP I INITERMINAL /RETURN PAGE STRBUFF,ZBLOCK 201 /STRING BUFFER / TERMINAL SEQUENCES. / GOTO ALPHA MODE WITHOUT CHANGING POSITION (FROM VECTOR MODE). ANOMOVE,US; 0 /JUST GOTO ALPHA MODE / BLANK ALPHA MEMORY. BLAMEM, ESC; "[&177; "1&177; "/&177 /BLANK ALPHA MEMORY "V&177+40; 0 / CLEAR GRAPHICS MEMORY. CLRMEM, ESC; "Y&37; 0 /CLEAR GRAPHICS MEMORY / DISPLAY GRAPHICS MEMORY. DSGMEM, ESC; "T&37; 0 /DISPLAY GRAPHICS MEMORY / ENTER GRAPHICS ALPHA MODE, CLEAR GRAPHICS MEMORY. EGACLR, ESC; "L&37; 0 /GRAPHICS ALPHA WITH CLEAR / NON-DESTRUCTIVE CHARACTER IN GRAPHICS ALPHA MODE. NDSPACE,ESC; "/&177; "2&177; "L&177+40 /SPACE JUST MOVES / ENTER POINT PLOT MODE. PPM, FS; 0 /ENTER POINT PLOT MODE / UNBLANK GRAPHICS MEMORY. UNGMEM, ESC; "[&177; "2&177; "/&177 /UNBLANK GRAPHICS MEMORY "V&177+40; 0 / GOTO VECTOR MODE (FROM POINT PLOT MODE). VECMODE,GS; 0 /GOTO VECTOR MODE / CHARACTER SIZE TABLE. SIZTABL,";&177 /SMALLEST ":&177 /VERY SMALL "9&177 /SMALL "8&177 /STANDARD "1&177 /DOUBLE "2&177 /TRIPLE "3&177 /QUADRUPLE "8&177 /STANDARD (ALTERNATE) PAGE /THIS SUBROUTINE IS THE COMMAND DECODER FOR ANALYSIS ANALYZ, .-. /SUBROUTINE HEADER CLA /CLEAN UP ANSTRT, JMS I (CRLF) /DO A CARRIAGE RETURN LINE FEED TAD ("*) /GET * JMS I (P7CH) /AND PRINT IT JMS I (GETBUFF) /READ THE COMMAND INTO BUFFER JMS CMINDX /GET AN INDEX VALUE FOR THE COMMAND SPA /IF THE INDEX IS POS THEN SKIP JMP CMERR /ELSE REPORT ERROR TAD (CMJTAB) /ADD TO COMMAND JUMP TABLE DCA ANATMP /STORE IT JMP I ANATMP /JUMP THERE ANARET, JMP I ANALYZ /RETURN TO THE CALLER ANATMP, .-. /ANALYZ TEMPORARY /SUBROUTINE THAT RETURNS AN INDEX VALUE INTO COMMAND TABLE CMINDX, .-. /SUBROUTINE HEADER CLA /CLEAN UP DCA INDX /STORE INTO INDEX POINTER TAD (CHRBUFF) /GET LOCATION OF COMMAND BUFFER DCA CMBFP /STORE INTO POINTER TAD (COMTAB) /GET LOCATION OF COMMAND TABLE DCA CMTABP /STORE AS COMMAND TABLE POINTER CMLP1, TAD (-6) /GET -6 DCA CMCNT /STORE AS COUNT DCA CMSW /CLEAR COMMAND SWITCH CMLP2, TAD I CMTABP /GET THE TABLE VALUE SNA /IF END OF LIST (0) THEN SKIP JMP NOINDX /SET THE INDEX NEGATIVE CIA /NEGATE TAD I CMBFP /COMPARE TO COMMAND BUFFER ENTRY SNA /IF NON ZERO THEN SKIP JMP CMNEXT /ELSE JUMP NEXT NL7777 /GET 7777 DCA CMSW /STORE INTO SWITCH CMNEXT, ISZ CMTABP /MOVE UP TABLE POINTER ISZ CMBFP /MOVE UP COMMAND BUFFER POINTER ISZ CMCNT /IF WE COMPLETED 3 WORDS THEN SKIP JMP CMLP2 /ELSE GET MORE ISZ CMSW /IF WE DID NOT MATCH THEN SKIP JMP CMRET /ELSE RETURN ISZ INDX /BUMP UP INDEX ISZ CMTABP /MOVE PAST 0 PLACED BETWEEN COMMANDS TAD (CHRBUFF) /RESTORE THE COMMAND DCA CMBFP /BUFFER POINTER JMP CMLP1 /DO NEXT COMMAND CMRET, TAD INDX /GET INDEX JMP I CMINDX /RETURN NOINDX, NL7777 /GET NO COMMAND CODE JMP I CMINDX /RETURN CMERR, HLT /TEMPORARILY HALT JMP I (SBOOT) /BOOTSTRAP CMSW, .-. /COMMAND SWITCH CMCNT, .-. /COMMAND COUNT WORD CMBFP, .-. /POINTS TO COMMAND BUFFER CMTABP, .-. /COMMAND TABLE POINTER INDX, .-. /INDEX POINTER /COMMAND TABLE COMTAB, "T&177;"C&177;"(&177;"V&177;"L&177;")&177;0 "T&177;"C&177;"(&177;"U&177;"N&177;")&177;0 "H&177;"A&177;"(&177;"V&177;"L&177;")&177;0 "H&177;"A&177;"(&177;"U&177;"N&177;")&177;0 "H&177;"A&177;"(&177;"P&177;"O&177;")&177;0 /HERE IS THE COMMAND JUMP TABLE CMJTAB, JMP I (TCVL) /TIME CONSTANT VELOCITY WAVEFORM JMP I (TCUN) /TIME CONSTANT ON UNIT ACTIVITY JMP I (HAVL) /HARMONIC ANALYSIS ON VELOCITY JMP I (HAUN) /HARMONIC ANALYSIS ON UNITS JMP I (HAPO) /HARMONIC ANALYSIS OF POSITION PAGE /ROUTINE TO DO TIME CONSTANT ANALYSIS OF VELOCITY TCVL, JMP I (ANARET) /JUST RETURN FOR NOW /ROUTINE TO DO TIME CONSTANT ANALYSIS OF UNIT ACTIVITY TCUN, JMP I (ANARET) /JUST RETURN FOR NOW /ROUTINE TO DO HARMONIC ANALYSIS OF VELOCITY HAVL, JMS I (SCRIBE);MSHVEL /HAR VELOCITY ANALYSIS DCA I (HARSW) /INDICATE VEL ANALYSIS TAD (CDF SWPFLD) /GET THE VELOCITY FIELD DCA I (HAINLIN) /STORE IN LINE NL0001 /GET 1 AS SCALE DCA HADSCL /STORE AS DIVIDE SCALE NL0001 /GET 1 AS SCALE DCA HAMSCL /STORE AS MULTPLY SCALE TAD (MSVPRCY) /GET VEL/CYCLE MESSAGE DCA I (HAPRS1) /STORE FOR PRINT OUT TAD (MSVPRCY) /GET VEL/CYCLE MESSAGE DCA I (HAPRS2) /STORE THERE TAD (MSDEG) /GET DEGREE MESSAGE DCA I (HAPRS3) /STORE THERE JMP I (HAENT) /ENTER COMMON ROUTINE /ROUTINE TO DO A HARMONIC ANALYSIS OF UNIT ACTIVITY HAUN, JMS I (SCRIBE);MSHUNT /HARMONIC UNIT ANALYSIS MESSAGE NL7777 /SET SWITCH FOR DCA I (HARSW) /UNIT ANALYSIS TAD (CDF UNTFLD) /GET UNIT FIELD DCA I (HAINLIN) /STORE AS INLINE ARG TAD UNTWND /GET WINDOW WIDTH DCA HADSCL /STORE AS DIVIDE SCALE TAD (1161) /GET 625(DEC) DCA HAMSCL /STORE AS MLTPLY SCALE TAD (MSUPRCY) /SPIKES/SEC/CYCLE MESG DCA I (HAPRS1) /STORE FOR PRINT OUT TAD (MSUPRCY) /SPIKES/SEC/CYCLE MESG DCA I (HAPRS2) /STORE FOR PRINT OUT TAD (MSDEG) /GET DEGREE MESSAGE DCA I (HAPRS3) /STORE THERE JMP I (HAENT) /ENTER COMMON ROUTINE HAPO, JMS I (SCRIBE);MSHPOS /HARMONIC POSITION ANALYSIS TAD (CDF POSFLD) /GET POSITION FIELD DCA I (HAINLIN) /STORE IT NL0001 /GET A 1 DCA HADSCL /STORE IT NL0001 /GET A 1 DCA HAMSCL /STORE IT TAD (MSPPRCY) /GET POS/CYCLE MESSAGE DCA I (HAPRS1) /STORE FOR PRINT OUT TAD (MSPPRCY) /GET POS/CYCLE MESSAGE DCA I (HAPRS2) /STORE THERE TAD (MSDEG) /GET DEGREE MESSAGE DCA I (HAPRS3) /STORE THERE JMP I (HAENT) /ENTER COMMON ROUTINE PAGE HAENT,CAM /CLEAN UP AC AND MQ DST; XKCSUM /CLEAN UP TOTAL XKCSUM DST; XKSSUM /CLEAN UP TOTAL XKSSUM DST; XKSUM /CLEAR SUM OF X(K) JMS I (SYSIO) /CALL I/O ROUTINES ATABLE /LOCATION OF TABLE READ+1400+TABFLD+TABUNIT /FUNCTION WORD TBATSN /FILE LOCATION DCA K /INITIALIZE DATA INDEX CDF TRGFLD /GET THE TRIGGER FIELD TAD (-400) /GET -(START OF DATA) TAD I (7777) /GET HIGHEST DATA POINT DCA HAPNUM /STORE AS NUMBER OF POINTS TAD HAPNUM /GET NUMBER OF POINTS CMA /NEGATE DCA HAPNCNT /STORE AS COUNTER TAD (400) /GET START OF DATA DCA HADPNT /STORE IN MEMORY POINTER HALUP, NL7776 /SET UP THE SIGN (LEAVE LINK ON) DCA HASGN1 /STORE AS SIGN HAINLIN,CDF SWPFLD /CHANGE TO DATA FIELD TAD I HADPNT /GET DATA POINT SMA /IF NEGATIVE THEN SKIP CLL /ELSE CLEAR LINK DCA MEMVAL /STORE IT THERE TOO CDF CODFLD /GET BACK TO WHERE OUR CODE IS TAD MEMVAL /GET THE MEMORY VALUE MQL /PUT INTO MQ SZL /IF LINK IS ZERO THEN SKIP STA /ELSE SIGN EXTEND DAD; XKSUM /ADD TOTAL SUM DST; XKSUM /STORE IT BACK CAM /CLEAN UP TAD K /GET NEXT K VALUE DVI; HAPNUM /DIVIDE BY NUMBER OF POINTS SWP /GET QUOTIENT INTO AC DCA HAARG /STORE AS ARGUMENT TAD HAARG /GET IT BACK JMS I (COS) /FIND THE COSINE DCA HATEMP /STORE IT TEMPORARILY TAD MEMVAL /GET BACK MEMORY VALUE SNL /SKIP IF COS IS <0 SKP /ELSE SKIP OVER ISZ HASGN1 /INDICATE COS<0 SMA /IF MEMORY VALUE<0, THEN SKIP JMP HAMUL1 /ELSE JUMP AHEAD CIA /MAKE POSITIVE ISZ HASGN1 /INDICATE NEGATIVE NOP /JUST IN CASE IT HAS BEEN INCREMENTED ONCE HAMUL1, MQL MUY;HATEMP /MULTIPLY BY MEMORY VALUE MQL /PUT INTO MQ ISZ HASGN1 /IF IT WAS NEGATIVE THEN SKIP SKP /ELSE SKIP OVER NEXT DCM /NEGATE DAD; XKCSUM /ADD BACK XKSUM DST; XKCSUM /STORE IT BACK NL7776 /SET UP THE SIGN DCA HASGN1 /STORE AS SIGN TAD HAARG /GET BACK DATA JMS I (SIN) /FIND THE SINE DCA HATEMP /STORE IT TEMPORARILY TAD MEMVAL /GET BACK MEMORY VALUE SNL /SKIP IF COS IS <0 SKP /ELSE SKIP OVER ISZ HASGN1 /INDICATE COS<0 SMA /IF MEMORY VALUE<0, THEN SKIP JMP HAMUL2 /ELSE JUMP AHEAD CIA /MAKE POSITIVE ISZ HASGN1 /INDICATE NEGATIVE NOP /JUST IN CASE IT HAS BEEN INCREMENTED ONCE HAMUL2, MQL MUY;HATEMP /MULTIPLY BY MEMORY VALUE MQL /PUT INTO MQ ISZ HASGN1 /IF IT WAS NEGATIVE THEN SKIP SKP /ELSE SKIP OVER NEXT DCM /NEGATE DAD; XKSSUM /ADD BACK XKSUM DST; XKSSUM /STORE IT BACK ISZ K /MOVE TO NEXT K ISZ HADPNT /GO TO NEXT DATA POINT ISZ HAPNCNT /IF DONE, THEN SKIP JMP HALUP /ELSE GO DO MORE JMP I (HARFIN) /FINISH CALCULATION HAARG, .-. /HOLDS ARG FOR TRIG FUNCT HADPNT, .-. /HOLDS ADDRESS OF MEMORY POINT HAPNUM, .-. /NUMBER OF POINTS HAPNCNT,.-. /POINT COUNTER HARSW, .-. /UNIT OR VEL SWITCH HATEMP, .-. /TEMPORARY HASGN1, .-. /SIGN HOLDER K, .-. /INDEX MEMVAL, .-. /HOLDS MEMORY VALUE XKCSUM, ZBLOCK 2 /HOLDS COSINE SUMS XKSSUM, ZBLOCK 2 /HOLDS SINE SUMS XKSUM, ZBLOCK 2 /HOLDS SUM OF DATA PAGE /FINISH CALACULATING HARMONIC AMPLITUDE AND AVERAGE VALUE / HARAVG=XKSUM/HAPNUM / HARAMP=2*[SQRT(XKCSUM**2+XKSSUM**2)] / HARPH= ARCTAN(XKCSUM/XKSSUM) HARFIN, DLD; XKSUM /GET THE SUM OF THE DATA JMS I (HSGNDV);HAPNUM /DIVIDE BY DATA POINTS SWP /GET QUOTIENT INTO DCA HARAVG /STORE AS AVERAGE DLD; XKCSUM /LOAD COSINE SUM JMS I (HSGNDV);HAPNUM /DIVIDE BY NUMBER OF POINTS SWP /GET QUOTIENT INTO DCA HFINTMP /STORE TEMPORARILY DLD; XKSSUM /LOAD SINE SUM JMS I (HSGNDV);HAPNUM /DIVIDE BY NUMBER OF POINTS CLA /GET RID OF HIGH BITS TAD HFINTMP /GET BACK COS SUM JMS I (POLAR) /TURN INTO POLAR FORM CLL RAL /MULTIPLY BY 2 DCA HARAMP /STORE AS AMPLITUDE MQA /GET THE PHASE DCA HARPH /STORE AS PHASE JMS I (AHRFIT) /FIT THE DATA JMS I (HARPRN) /PRINT AVG,AMPL, PHASE JMP I (ANARET) /RETURN TO CALLER HARAMP, .-. /HOLDS HARMONIC AMPLITUDE HARPH, .-. /HOLDS HARMONIC PHASE HARAVG, .-. /HOLDS AVERAGE VALUE HFINTMP,.-. /TEMPORARY /SUBROUTINE TO DIVIDE A SIGNED 24 BIT NUMBER BY AN UNSIGNED 12 BIT NUMBER /RETURNS 12 BIT ACCURATE NUMBER IN , SIGN EXTENDED TO HSGNDV, .-. /SUBROUTINE HEADER DCA HSTMP /STORE TEMPORARILY TAD I HSGNDV /GET ARGUMENT DCA DIVSOR /STORE TEMPORARILY ISZ HSGNDV /BUMP UP NEXT ADDRESS TAD I DIVSOR /GET REAL DIVISOR DCA DIVSOR /STORE AS DIVISOR NL7776 /SET UP THE DIVIDE DCA HSSGN /SIGN TAD HSTMP /GET BACK HIGH ORDER DIVIDEND SMA /IF NEGATIVE, THEN SKIP JMP DIVHED /ELSE JUMP AHEAD DCM /MAKE POSITIVE ISZ HSSGN /INDICATE SO DIVHED, DVI; DIVSOR /DIVIDE CLA /CLEAN UP REMAINDER ISZ HSSGN /IF DIVIDEND WAS ZERO THEN SKIP SKP /ELSE SKIP NEXT INSTRUCTION DCM /NEGATE QUOTIENT JMP I HSGNDV /RETURN TO CALLER /SUBROUTINE TO MULTIPLY SIGNED NUMBERS IN BY AN UNSIGNED /12 BIT NUMBER. RETURNED IN AND . HSGNML, .-. /SUBROUTINE HEADER NL7776 /SET UP SIGN WORD DCA HSSGN /STORE IN HSSGN TAD I HSGNML /GET ARGUMENT DCA HSTMP /STORE TEMPORARILY ISZ HSGNML /BUMP UP NEXT ADDRESS TAD I HSTMP /GET THE REAL ARGUMENT DCA HSTMP /STORE IT LOCALLY MQA /GET THE SIGNED NUMBER SMA /IF NEG THEN SKIP JMP .+3 /ELSE SKIP AHEAD CIA /IF NEG THEN NEGATE ISZ HSSGN /INDICATE SO MQL MUY;HSTMP /MULTIPLY BY ARGUMENT ISZ HSSGN /SKIP IF IT WAS NEGATVE SKP /SKIP NEXT IF POSITIVE DCM /NEGATE IT JMP I HSGNML /RETURN TO CALLER HSTMP, .-. /TEMPORARY DIVSOR, .-. /HOLDS DIVISOR HSSGN, .-. /HOLDS SIGN PAGE /SUBROUTINE TO FIT THE DATA WITH THE DOMINANT HARMONIC AHRFIT, .-. /SUBROUTINE HEADER TAD I (HARPH) /GET THE PHASE CIA /MAKE NEGATIVE DCA AHRTMP /STORE TEMPORARILY TAD (377) /GET THE START OF DATA-1 DCA XR1 /STORE IN AUTO INDEX REGISTER TAD I (HAPNUM) /GET THE NUMBER OF POINTS CIA /NEGATE DCA AHRCNT /STORE AS COUNTER DCA AHRK /CLEAR K VALUE AHRLUP, NL7776 /SET UP THE SIGN DCA AHRSGN /FOR NEGATIVE NUMBERS TAD AHRK /GET THE VALUE DVI; HAPNUM /DIVIDE BY # POINTS SWP /GET QUOTIENT TAD AHRTMP /ADD THE PHASE JMS I (COS) /CALCULATE THE COSINE SZL /IF >0, THEN SKIP ISZ AHRSGN /ELSE INDICATE NEGATIVE MQL MUY;HARAMP /MULTIPLY BY AMPLITUDE ISZ AHRSGN /SKIP IF NEGATIVE SKP /ELSE SKIP NEXT INSTRUCTION CIA /NEGATE TAD I (HARAVG) /ADD AVERAGE VALUE CDF FITFLD /GET THE FITTING FIELD DCA I XR1 /STORE IT THERE CDF CODFLD /GET BACK TO OUR FIELD ISZ AHRK /NEXT K VALUE ISZ AHRCNT /IF FINISHED THEN SKIP JMP AHRLUP /ELSE DO MORE JMP I AHRFIT /RETURN TO CALLER AHRK, .-. /HOLDS K VALUE AHRSGN, .-. /HOLDS SIGN VALUE AHRCNT, .-. /HOLDS COUNT AHRTMP, .-. /TEMPORARY /SUBROUTINE TO PRINT HARMONIC INFORMATION HARPRN, .-. /SUBROUTINE HEADER JMS I (SCRIBE);MSHAVG /PRINT AVERAGE MESSAGE TAD I (HARAVG) /GET AVERAGE VALUE SMA /IF NEGAIVE THEN SKIP JMP .+4 /ELSE JUMP AHEAD MQL /PUT INTO STA /SIGN EXTEND SKP /SKIP NEXT INSTRUCTION MQL /PUT INTO JMS I (HSGNML);HAMSCL /MULTIPLY BY SCALE JMS I (HSGNDV);HADSCL /DIVIDE BY SCALE JMS I (HSGNDV);CYCNUM /DIVIDE BY NUMBER OF CYCLES SWP /GET QUOTIENT DCA I (PRNTMP) /STORE IN PRINT BUFFER NL7777 /PRINT SIGNED NUMBER JMS I (PRNNUM) /PRINT THE NUMBER SIGNED JMS I (SCRIBE);HAPRS1,.-. /PER CYCLE MESSAGE JMS I (SCRIBE);MSVA /PRINT AMPLITUDE MESSAGE TAD I (HARAMP) /GET THE AMPLITUDE MQL /DEFINITELY POS, PUT INTO JMS I (HSGNML);HAMSCL /MULTIPLY BY SCALE JMS I (HSGNDV);HADSCL /DIVIDE BY SCALE JMS I (HSGNDV);CYCNUM /DIVIDE BY NUMBER OF CYCLES SWP /GET QUOTIENT DCA I (PRNTMP) /STORE IN PRINT BUFFER JMS I (PRNNUM) /PRINT IT JMS I (SCRIBE);HAPRS2,.-. /PRINT MESSAGE JMS I (SCRIBE);MSVPH /PRINT PHASE MESSAGE TAD (550) /GET 360 DEGGREES MQL /PUT INTO JMS I (HSGNML);HARPH /MULTIPLY BY PHASE JMS I (HSGNDV);L4095 /DIVIDE BY 4095 SWP /GET QUOTIENT DCA I (PRNTMP) /STORE IN PRINT BUFFER JMS I (PRNNUM) /PRINT THE NUMBER JMS I (SCRIBE);HAPRS3,.-. /PRINT MESSAGE JMP I HARPRN /RETURN TO CALLER L4095, 7777 /CONSTANT PAGE REFLCT, .-. /REFLECTION SUBROUTINE CLA /CLEAN UP CDF 00 /GET FIELD 0 TAD (400) /GET ADDRESS OF FIRST POINT DCA FORPNT /STORE TAD I (DSPWRD) /THE HIGHEST POINT DCA BACKPNT /STORE IN BACKWARDS POINTER INVERT, CDF SWPFLD /CHANGE TO DATA FIELD TAD BACKPNT /GET LAST POINT CLL CIA /MAKE NEGATIVE TAD FORPNT /COMPARE TO SZL CLA /FORPNT>=BACKPNT JMP I REFLCT /RETURN TAD I FORPNT /GET LOW POINT MQL /SAVE IN MQ TAD I BACKPNT /GET LAST POINT DCA I FORPNT /STORE IN FORWARD POINT MQA /GET BACK FIRST POINT DCA I BACKPNT /STORE IN LAST POINT CDF TRGFLD /GET TRIGGER FIELD TAD I FORPNT /GET FIRST POINT MQL /SAVE IN MQ TAD I BACKPNT /GET LAST POINT DCA I FORPNT /STORE IN FIRST POINT MQA /GET BACK FIRST POINT DCA I BACKPNT /STORE IN LAST POINT NL7777 /GET -1 TAD BACKPNT /ADD ADDRESS OF LAST POINT DCA BACKPNT /STORE BACK IN LAST POINTER ISZ FORPNT /NEXT POINT JMP INVERT /DO AGAIN FORPNT, .-. /FORWARD POINTER BACKPNT,.-. /BACKWARDS POINTER PAGE /SUBROUTINE TO CHANGE COMPLEX NUMBERS FROM RECTANGULAR /TO POLAR FORM.THE REAL AND IMAGINARY PARTS ARE GIVEN IN /IN THE AC AND MQ RESPECTIVELY AND THE MAGNITUDE AND /PHASE ARE RETURNED IN THE AC AND MQ RESPECTIVELY POLAR, .-. /RETURN ADDRESS JMS TCMNR /FIX UP FOR SIGN CHECKING LATER DCA POLX /PUT AWAY REAL PART MQA /GET IMAG PART JMS TCMNR /FIX UP FOR SIGN CHECKING LATER DCA POLY /PUT IT AWAY NL7776 /PUT -2 INTO DCA POLSNX /SGN WORD NL7776 /PUT -2 INTO DCA POLSNY /2ND SIGN WORD(LEAVES LINK ON) TAD POLX /GET REAL PART SPA /IS X>=0? TAD [4000] /SETS L=0 FOR X<0,&MAKES AC>0 SNA /IS POS X=0 JMP IMAG /YES,NUMBER IS IMAGINARY DCA POLX /NO,NUMBER HAS REAL PART SNL /IF L NOT=0,X>0,PH=0 TAD [4000] /IF L=0,THEN X<0 AND PH=PI DCA POLPH /PUT INTO PH TAD POLY /GET Y AND L STILL HAS SIGN OF X SPA /IS Y>=0? TAD [4000] /NO,MAKE POS SNA /IS POS X=0 JMP REAL /YES,# IS REAL DCA POLY /NO,PUT AWAY IN Y SNL /IS IT IN 2ND OR 4TH QUAD ISZ POLSNX /YES,SET SIGN TO SUBTRACT TAD POLY /SINCE X AND Y ARE BOTH CIA /POS,CHECK TO SEE WHICH TAD POLX /IS GREATER SMA /IS X-Y>0 JMP XGEY /YES,JUMP AHEAD CLA /NO,CLEAN UP TAD POLY /GET Y DCA POLBIG /PUT IT AWAY AS BIGGER # TAD POLX /GET X DCA POLSMAL /PUT IT AWAY AS SMALLER JMP POLCONT /JUMP AHEAD XGEY, CLA /CLEAR AC ISZ POLSNY /SET SIGN2 THAT X>Y TAD POLX /GET X DCA POLBIG /PUT IT AWAY AS BIGGER # TAD POLY /GET Y DCA POLSMAL /AND STORE IT AWAY AS SMALLER # POLCONT,TAD POLSMAL /GET SMALLER # DVI;POLBIG /DIVIDE SMALL BY BIG SNL /WAS THERE OVERFLOW JMP POLDV8 /NO,GO AHEAD STA /YES THERE WAS OVERFLOW SKP /SKIP NEXT INSTR POLDV8, SWP /EXCHANGE AC AND MQ CLL RAR /DIVIDE BY 8 BY ROTATING CLL RAR /3 CLL RAR /TIMES TAD [ATABLE] /ADD ARCTAN TABLE ADDRESS DCA POLTMP /STORE IT AS ARGUMENT CDF TABFLD /GET FIELD WHERE TABLE IS TAD I POLTMP /GET ARGUMENT ISZ POLSNY /IS IT >PI/4 TAD [6000] /YES ADD -PI/2 SPA /IS IT >0 CIA /NO,MAKE POS ISZ POLSNX /IS IT IN 2ND OR 4TH QUADRANT SKP /NO,SKIP CIA /YES,MAKE NEGATIVE TAD POLPH /ADD PHASE CORRECT DCA ANGLE /PUT IT AWAY /MAGNITUDE CALCULATON TAD I POLTMP /GET PHASE BETWEEN 0 & 45 DEG CIA /MAKE NEGATIVE TAD [2000] /ADD PI/2 TAD [SINTAB] /ADD SINTABLE ADDRESS DCA POLTMP /PUT IT AWAY TAD I POLTMP /GET THE SIN DCA POLSNX /PUT IT AWAY TEMPORARILY TAD POLBIG /GET BIGGER VALUE CDF CODFLD DVI;POLSNX /DIVIDE BY SIN SZL /CHECK DIVIDE OVERFLOW JMP FIX /IT OVERFLOWED,FIX IT SMA /IS REMAINDER >.5 JMP POLFIN /NO,FINISH UP SWP /YES,GET MAGNITUDE IAC /INCREASE BY ONE MQL /PUT IT BACK IN MQ & FINISH /GET MAGNITUDE AND PHASE INTO AC AND MQ RESPECTIVELY POLFIN, CLA /CLEAR AC TAD ANGLE /GET PHASE SWP /SWITCH ORDER JMP I POLAR /RETURN FIX, CLA /CLEAR AC TAD POLBIG /GET LARGER VALUE MQL /PUT IT IN MQ JMP POLFIN+1 /FINISH UP REAL, CLA /CLEAR AC TAD POLPH /GET PHASE MQL /PUT INTO MQ TAD POLX /GET REAL PART JMP I POLAR /RETURN IMAG, CAM /CLEAR AC & MQ STL /SET THE LINK TAD POLY /GET Y SPA / TAD [4000] /MAKE POS & CLEAR LINK FOR LATER CHECK SNA /IS Y=0 JMP I POLAR /YES,GET BACK MQL /NO,PUT IN MQ TAD [2000] SNL CIA /NEGATE SWP JMP I POLAR /RETURN POLSNX, .-. /HOLDS SIGN OF X POLSNY, .-. /HOLDS SIGN OF Y POLPH, .-. /HOLDS PHASE POLX, .-. /HOLDS X VALUE POLY, .-. /HOLDS Y VALUE POLBIG, .-. /HOLDS BIGGER VALUE POLSMAL,.-. /HOLDS SMALLER VALUE ANGLE, .-. /HOLDS ANGLE POLTMP, .-. /HOLDS TEMPORARY /SUBROUTINE TO PRE-ADJUST NEGATIVE VALUES BY PI TCMNR, .-. /SUBROUTINE HEADER SMA /IF NEGATIVE, THEN SKIP AND ADJUST JMP I TCMNR /ELSE RETURN CIA /NEGATE TAD (4000) /ADD PI JMP I TCMNR /RETURN PAGE /COSINE SUBROUTINE COS, 0 /RETURN ADDRESS DCA ARATAN /PUT AWAY ARGUMENT NL7776 /GET THE SIGN WORD READY DCA SGN2 /FOR NOTING NEG VALUES TAD ARATAN /GET BACK THE ARGUMENT SNA /IS ARG =0? JMP ZCOS /YES,JUMP TO FIX IT(LINK IS ON TAD (4000) /NO,ADD 4000 SNA /IS THAT =0 JMP PICOS /YES,JUMP TO FIX(LINK IS OFF) TAD (4000) /NO,GET BACK ORIG ARG SMA /IS IT >PI CIA /NO,REFLECT IT THERE TAD (2000) /SCALE ARG 6000-1777 SMA /IS IT <0 ISZ SGN2 /NO,SET SIGN SPA /CHECK AGAIN CIA /MAKE POS TAD (SINTAB) /ADD SIN TABLE ADDRESS DCA ARATAN /PUT IT AWAY CDF TABFLD TAD I ARATAN /GET THE SIN CDF CODFLD CLL /MAKE POSITIVE ISZ SGN2 /WAS THE MOD ANGLE>0 STL /NO,MAKE NEGATIVE JMP I COS /RETURN ZCOS, CLL STA /SET =1 JMP I COS /GET BACK PICOS, STL STA /SET =-1 JMP I COS /GET BACK /SUBROUTINE FOR EVALUATING THE SIN SIN, 0 /RETURN ADDRESS TAD (6000) /ADD -3.14/2 JMS COS /SIN(X)=COS(X-PI/2) JMP I SIN /RETURN ARATAN, .-. /STORAGE FOR ARGUEMENT SGN1, .-. /HOLDS SIGN VALUE SGN2, .-. /HOLDS SIGN VALUE PAGE XLIST OFF IFNZRO DTAIO < XLIST ON /P?S TC01-TC08 DECTAPE USER HANDLER D7, 7 /CONSTANT 0007;MUST BE AT 200 DADDR, .-. /TRANSFER ADDRESS DFUNCT, .-. /FUNCTION WORD DBLK, .-. /BLOCK # DWC, 7754 /WORD COUNT DCAA, 7755 /CURRENT ADDRESS DTIO, .-. /MAIN ENTRY POINT D7640, SZA CLA /CLEAN UP D400, 400 /CAN BE SKIPPED;MUST BE AT 0210 RDF /GET CALLING FIELD TAD D6203 /SETUP RETURN INSTRUCTION DCA DTEXIT /SAVE FOR LATER TAD I DTIO /GET PARAMETER POINTER DCA GETBLK /SAVE IT ISZ DTIO /BUMP TO ERROR RETURN STA /BACKUP TAD I GETBLK /GET TRANSFER ADDRESS DCA DADDR /SAVE FOR LATER ISZ GETBLK /BUMP TO FUNCTION WORD TAD I GETBLK /GET FUNCTION DCA DFUNCT /SAVE IT ISZ GETBLK /BUMP TO BLOCK TAD I GETBLK /GET BLOCK # DCA DBLK /SAVE IT CDF 00 /MUST HAVE FIELD 0 NOW CLL STA RTL /-3 DCA I D7750 /TO ERROR RETRY COUNTER TAD DFUNCT /GET FUNCTION D200, AND D7 /ISOLATE UNIT BITS TAD TADOLB /NOW HAVE TAD OLBLK DCA GETBLK /SAVE INLINE CLA STL RTR /DCA-TAD TAD GETBLK /NOW HAVE DCA OLBLK DCA PUTBLK /SAVE INLINE TAD DBLK /GET DESIRED BLOCK CLL CIA /INVERT GETBLK, TAD OLBLK0 /ADD ON OLD BLOCK TAD DOVSHT /ADD ON OVERSHOOT FACTOR D7600, CLA+400 /CLEAN UP TAD D7 /SETUP FOR UNIT MASK AND DFUNCT /NOW HAVE UNIT RTR /MOVE UNITS, DIRECTION RTR /TO AC[0-3] TAD D210 /ADD ON SEARCH, UNIT BITS DTLA /LOAD "A" WITH NO GO, WRONG DIRECTION DTLB /SEARCH INTO FIELD 0 TAD DBLK /GET DESIRED BLOCK DCA GETBLK /BECOMES NEW OLBLK EVENTUALLY TAD DWC /SEARCH INTO DCA I DCAA / LOCATION DCONT, SPA CLA /CHANGE DIRECTION ? TAD D400 /YES DTXA /CLEAR FLAG(MAYBE CHANGE DIRECTION) DTSF DTRB /WAIT FOR IT JMP .-1 /TO HAPPEN SMA /ANY ERRORS ? JMP DTAPOK /NO CMA RTL /MOVE END TO LINK, RAL /MOVE SEL TO AC[0] SMA CLA /SELECT ERROR ? JMP D7600 /IGNORE IT SZL CLA /END ZONE ERROR ? JMP TAPERR /NO, COMPLAIN OF OTHER ERROR TPERR2, DTRA /GET DIRECTION CMA RTL /INVERT AND RTL /SEND TO LINK SZL CLA /SKIP IF REVERSE END ZONE TAPERR, ISZ I D7750 /TOO MANY ERRORS ? JMP D7600 /NO, RESTART IN DIRECTION OF LINK DTRB /GET STATUS JMP DEXCOM /BARF DTAPOK, DTRA /GET DIRECTION D210, AND D400 /JUST DIRECTION BIT SZA CLA /GOING FORWARD ? TAD D4002 /NO, ADD MAGIC REVERSE FUDGE TAD I DWC /GET LATEST BLOCK CIA /INVERT FOR TEST TAD DBLK /GET DESIRED BLOCK SZA /DID WE FIND IT ? JMP DCONT /KEEP GOING 'TIL IT'S FOUND TAD DADDR /GET TRANSFER ADDRESS DCA I DCAA /STORE IN TAD DFUNCT /GET FUNCTION AGAIN DTLB /SET TRANSFER FIELD TAD DFUNCT /GET IT AGAIN RAL /R/W TO LINK AND D7600 /ISOLATE PAGE BITS DCA I D7640 /SAVE AS PAGE COUNT RAL /GET R/W BIT BACK IAC /AC= 1 OR 2 STL RTL /AC= 6 OR 12 RTL /AC=30 OR 50 DNEXT, DTXA /SETUP NEXT BLOCK TAD D7600 /SETUP DCA I DWC / DTSF DTRB /WAIT FOR IT JMP .-1 /TO HAPPEN D7750, SPA SNA CLA /ANY ERRORS ? JMP TPERR2 /YES ISZ GETBLK /BUMP CURRENT BLOCK TAD I D7640 /GET PAGE COUNT TAD D7600 /COUNT DOWN SNA /DONE ? JMP DEXIT /YES DCA I D7640 /PUT IT BACK JMP DNEXT /GO DO NEXT DEXIT, TAD GETBLK /GET LATES IT OLD BLOCK PUTBLK, DCA OLBLK0 /SAVE AS OLBLK ISZ DTIO /BUMP TO GOOD RETURN DEXCOM, DCA PUTBLK /SAVE STATUS DTRA /GET GO BIT AND D200 /ISOLATE IT DTXA /TAPE IS NOW STOPPED TAD PUTBLK /RESTORE STATUS DTEXIT, CIF CDF 00 /RESET CALLING FIELD JMP I DTIO /RETURN TO CALLER OLBLK0, ZBLOCK 10 /FOR REMEMBERING BLOCK #'S TADOLB, TAD OLBLK0 /INSTRUCTION CONSTANT D6203, CIF CDF 00 /FIELD CONSTANT D4002, 4002 /MAGIC REVERSE FUDGE DOVSHT, 13 /OVERSHOOT FACTOR PAGE XLIST OFF > IFNZRO FLPIO < XLIST ON / P?S/8 FLOPPY DISK HANDLER / MAY BE ASSEMBLED WITH '/J' SWITCH SET. / P?S/8 NON-SYSTEM HANDLER FOR HIGH-DENSITY FLOPPY DISKS. / SUPPORTED HARDWARE: / CESI MDC8 HOST ADAPTER (MINIMUM FIRMWARE REVISION 02). / OMTI 20-D OR 5000 SERIES DISK CONTROLLER (5200, 5400). / TEAC FD55G 80 TRACK HIGH-DENSITY FLOPPY DRIVES (2, 3). / REQUIRES PDP-8/I PROCESSOR (OR BETTER). / EACH HANDLER UNIT (0 AND 1) ADDRESSES UP TO 4096 BLOCKS (0000-7777). / UNITS 2 AND 3 ARE TYPICALLY ONLY 64 BLOCKS LONG (0000-0077), AND ARE PROVIDED / FOR TOTAL COMPATIBILITY WITH OS/8 USAGE ONLY. / CALLING SEQUENCE: / CDF MYFLD /SET CALLER'S DATA FIELD / CIF HNDFLD /SET HANDLER'S INSTRUCTION FIELD / JMS I (FLPHND) /CALL THE HANDLER / PARAM /PARAMETER POINTER / ERRORRETURN /RETURNS HERE WITH STATUS IN AC / GOODRETURN /RETURNS HERE WITH CLEAR AC IF I/O OK / PARAMETER LIST BREAKDOWN: / BIT[0]: READ IF 0, WRITE IF 1 / BITS[1-5]: PAGE COUNT, 40 IF 0 / BITS[6-8]: TRANSFER FIELD / BITS[9-11]: LOGICAL UNIT / BIT[9] IS IGNORED. / MDC8 IOT DEFINITIONS. IFNDEF DEVCODE /USES 670X BY DEFAULT DSEI= DEVCODE^10+6000 /INTERRUPT ENABLE/DISABLE PER AC[11] DSSF= DEVCODE^10+6001 /SKIP ON DONE FLAG DSCF= DEVCODE^10+6002 /CLEAR DONE FLAG DSHI= DEVCODE^10+6003 /LOAD HIGH-ORDER COMMAND ADDRESS DSGO= DEVCODE^10+6004 /LOAD LOW-ORDER COMMAND AND GO / = DEVCODE^10+6005 /UNUSED DSRS= DEVCODE^10+6006 /READ STATUS DSIM= DEVCODE^10+6007 /INTERFACE MAINTENANCE INSTRUCTION / ENTRY POINT FOR HANDLER. FLPHND, .-. /ACTUAL HANDLER ENTRY POINT CLA /CLEAN UP NOW TAD I FLPHND /GET ARGUMENT POINTER DCA FLPEXIT /STASH IT TAD I FLPEXIT /GET THE TRANSFER ADDRESS DCA TRADDR /STASH IT ISZ FLPEXIT /BUMP TO FUNCTION WORD TAD I FLPEXIT /GET FUNCTION WORD AND (70) /JUST FIELD BITS CLL RTR;RAR /MOVE DOWN DCA TRFLD /STORE (BANK AND) FIELD NL4000 /SET READ/WRITE MASK AND I FLPEXIT /GET READ/WRITE BIT CLL IAC RTL;RAL /10 IF READING, 12 IF WRITING DCA RWCOM /STASH COMMAND TAD I FLPEXIT /GET FUNCTION AGAIN RTR;RTR;RTR /MOVE DOWN PAGE COUNT AND (37) /JUST PAGE BITS SNA /SKIP IF ANY TAD (40) /ELSE USE MAXIMUM DCA SCTCNT /STASH SECTOR COUNT NL0001 /SET LOWER UNIT BIT MASK AND I FLPEXIT /GET THE BIT SZA CLA /SKIP IF OFF TAD (40) /ELSE SET ODD UNIT BIT TAD (100) /GET PAIR BIT DCA SECTHI /STORE HIGH-ORDER ADDRESS AND UNIT NL0002 /SET MIDDLE UNIT MASK AND I FLPEXIT /GET THE BIT CLL RTL;RAL /MOVE UP DCA SECTMD /STORE FOR NOW ISZ FLPEXIT /BUMP TO BLOCK TAD I FLPEXIT /GET THE BLOCK NUMBER DCA SECTLO /STORE AS LOW-ORDER ADDRESS TAD I FLPEXIT /GET IT AGAIN AND (7400) /JUST HIGH-ORDER BITS CLL RTL;RTL;RAL /MOVE DOWN TAD SECTMD /ADD ON UNIT OFFSET BIT DCA SECTMD /STORE AS MIDDLE ADDRESS RDF /GET CALLING FIELD TAD (CIF) /MAKE IT CIF RETURN FIELD DCA FLPEXIT /STORE IN-LINE ISZ FLPHND /BUMP PAST ARGUMENT POINTER JMS LOC8 /FIND OUT WHERE WE ARE LOADED LOC8, .-. /WILL BE OUR OWN PC DSRS /GET STATUS SPA CLA /SKIP IF CONTROLLER IS IDLE JMP .-2 /ELSE WE MIGHT AS WELL WAIT RIF /GET OUR FIELD CLL RTR;RAR /MOVE DOWN (BANK AND) FIELD DSHI /SEND HIGH-ORDER COMMAND ADDRESS DSRS /GET STATUS SMA CLA /SKIP IF BUSY JMP .-2 /ELSE KEEP WAITING DSCF /CLEAR DONE FLAG NOW TAD LOC8 /GET OUR PC TAD (TABLE-LOC8) /ADJUST TO COMMAND TABLE DSGO /GO START IT UP JMS WAIT /WAIT FOR COMMAND TO TAKE DSIM /FINISH THE COMMAND JMS WAIT /WAIT FOR COMMAND TO COMPLETE ISZ FLPHND /BUMP TO GOOD RETURN FLPEXIT,.-. /WILL BE CIF RETURN FIELD JMP I FLPHND /RETURN TO CALLER WAIT, .-. /WAIT ROUTINE DSSF /FLAG UP? JMP .-1 /NO, WAIT FOR IT DSCF /YES, CLEAR IT DSRS /GET STATUS NOW CLL RAL /REMOVE BUSY BIT SNA CLA /SKIP IF ANY ERRORS JMP I WAIT /ELSE RETURN DSRS /GET STATUS AGAIN JMP FLPEXIT /TAKE ERROR RETURN THERE / COMMAND TABLE. TABLE, 6!4000 /TABLE LENGTH PLUS DMA INDICATOR RWCOM, .-.&377 /0010 IF READING, 0012 IF WRITING SECTHI, .-.&377 /UNIT BITS AND HIGH-ORDER SECTOR ADDRESS SECTMD, .-.&377 /MIDDLE SECTOR ADDRESS SECTLO, .-.&377 /LOW-ORDER SECTOR ADDRESS SCTCNT, .-.&377 /SECTOR COUNTER (1-40) CONTRL, 0&377 /CONTROL WORD TRFLD, .-.&377 /BANK (0000) AND TRANSFER FIELD (0-7) TRADDR, .-. /TRANSFER ADDRESS PAGE XLIST OFF > XLIST ON /THIS SUBROUTINE READS A DECIMAL NUMBER FROM THE KEYBOARD AND /RETURNS IT IN THE AC AFTER A CARRIAGE RETURN HAS BEEN HIT REANUM, .-. /SUBROUTINE HEADER CLA /CLEAN UP DCA REAWRD /REAWRD TO BEGIN WITH JMS I (GETBUFF) /GET A BUFFER TAD (CHRBUFF) /POINT TO BEGINNING OF BUFFER DCA GETPTR /STORE IN POINTER RENXDI, JMS I (GETDIG) /GET A DIGIT FROM BUFFER JMP REERCK /CHECK FOR DELIM OR ERROR AND (17) /ELSE MASK OFF DIGIT DCA REATMP /STORE TEMPORARILY TAD REAWRD /GET THE WORD TO BE RETURNED MQL MUY;R10 /MULTIPLY BY 10 SWP /GET RESULT INTO AC TAD REATMP /ADD BACK WHATS IN THE TEMPORARY DCA REAWRD /PUT BACK IN THE WORD TO BE RET JMP RENXDI /GO BACK FOR MORE CHARACTERS REARET, TAD REAWRD /PUT RETURN WORD INTO AC JMP I REANUM /RETURN TO CALLER REAWRD, .-. /HOLDS THE WORD TO BE RETURNED REATMP, .-. /A LOCAL TEMPORARY R10, 12 /MULTIPLICATION CONSTANT /COMES HERE ON DELIMITER OR ERROR REERCK, SNA CLA /IF NON ZERO THEN SKIP JMP REARET /ELSE RETURN NUMBER JMS I (SCRIBE);MSERROR/PRINT ERROR MESSAGE JMP I (CONSLIN) /START PROGRAM AGAIN /THIS SUBROUTINE PRINTS SIGNED OR UNSIGNED NUMBERS ON CONSOLE /CALLING IT WITH A ZERO IS A SIGNED NUMBER PRNNUM, .-. /SUBROUTINE HEADER SNA CLA /IF NONZERO THEN SKIP AND DO SIGNED PRINTING JMP PRNPOS-1 /ELSE JMP AND PRINT UNSIGNED TAD PRNTMP /GET THE NUMBER SMA /SKIP IF NUMBER IS NEGATIVE JMP PRNPOS /JUMP IF POSITIVE CIA /ELSE NEGATE DCA PRNTMP /STORE IT TAD ("-) /GET MINUS SIGN JMS I (P7CH) /PRINT THE CHARACTER TAD PRNTMP /GET THE NUMBER PRNPOS, MQL DVI ;P1000 /DIVIDE BY 1000 DCA PRNTMP /STORE BACK REMAINDER MQA /GET QUOTIENT TAD (60) /TURN INTO CHARACTER JMS I (P7CH) /GO PRINT IT TAD PRNTMP /GET NUMBER BACK MQL DVI ;P100 /DIVIDE BY 100 DCA PRNTMP /STORE REMAINDER MQA /GET THE QUOTIENT TAD (60) /TURN INTO CHARACTER JMS I (P7CH) /PRINT THE CHARACTER TAD PRNTMP /GET THE NUMBER BACK MQL DVI ;P10 /DIVIDE BY 10 DCA PRNTMP /STORE REMAINDER MQA /GET THE QUOTIENT TAD (60) /TURN INTO CHARACTER JMS I (P7CH) /PRINT THE CHARACTER TAD PRNTMP /GET THE FINAL REMAINDER TAD (60) /TURN INTO CHARACTER JMS I (P7CH) /PRINT IT JMP I PRNNUM /RETURN TO CALLER PRNTMP, .-. /HOLDS NUMBER P1000, 1750 /DECIMAL 1000 P100, 144 /DECIMAL 100 P10, 12 /DECIMAL 10 PAGE / GET INPUT BUFFER ROUTINE. GETBUFF,.-. /GET INPUT BUFFER GRESTAR,TAD (CHRBUFF) /RESET THE DCA GETPTR /OUTPUT POINTER GETINP, JMS I (INPUT) /**** **** JMS I (INPUT) GOTINPU,JMS I (GESSUB) /TRY TO FIND CHTBL-1 /SPECIAL CHARACTERS TAD [-40] /COMPARE LATEST TO CONTROL CHARACTER SPA CLA /SKIP IF GREATER JMP GCMBEEP /IGNORE BAD CONTROL CHARACTERS TAD INCHAR /GET THE CHARACTER TAD [-140] /COMPARE TO LOWER-CASE LIMIT GCMZAP, SPA /**** /U **** NOP!400 TAD [40] /RESTORE CASE TAD [100] /RESTORE THE CHARACTER SKP /DON'T DO STUFF! GOTHT, TAD [" &177] / BECOMES DCA GBTEMP /SAVE IT TAD GETPTR /GET OUTPUT POINTER TAD (-CHRBEND) /COMPARE TO BUFFER LIMIT SMA CLA /SKIP IF NOT AT END YET JMP GCMBEEP /JUMP IF IT IS TAD GBTEMP /GET THE CHARACTER DCA I GETPTR /STORE IN THE BUFFER ISZ GETPTR /BUMP THE POINTER TAD GBTEMP /GET THE CHARACTER JMS I [P7CH] /PRINT IT JMP GETINPUT /KEEP GOING / COMES HERE ON BAD INPUT OR FULL BUFFER. GCMBEEP,TAD [7] /GET A JMS I [P7CH] /RING IT JMP GETINPUT /KEEP GOING / COMES HERE ON ANY CHARACTER GOTESC, TAD ("$&177) /GET A "$" JMS I [P7CH] /PRINT IT DCA I GETPTR /DELIMIT THE BUFFER NL4000 /INDICATE SEEN CRENTRY,DCA I (ESCAPSW) /STORE THE SWITCH JMP I GETBUFFER /RETURN / COMES HERE ON <^U>. DELETL, TAD ["^&177] /GET AN "^" JMS I [P7CH] /PRINT IT TAD ("U&177) /GET A "U" JMS I [P7CH] /PRINT IT JMS I [CRLF] /DO A , JMP GRESTART /RESTART / COMES HERE ON . GOTCR, DCA I GETPTR /DELIMIT THE BUFFER JMS I [CRLF] /DO A , JMP CRENTRY /CONTINUE THERE / COMES HERE ON . LFVIEW, JMS I [CRLF] /DO A , TAD (CHRBUF) /RESET THE DCA GBTEMP /BUFFER POINTER TAD GMSFLG /FLAG WHETHER TO REPEAT MESSAGE SNA /IF NON ZERO THEN REPEAT JMP PRBLUP /ELSE JUMP AHEAD NL7777 /INDICATE THAT MESSAGE SHOULD BE REPEATED ON LF JMS I (SCRIBE);GMSPTR,.-. /REPRINT THE MESSAGE PRBLUP, TAD GBTEMP /GET THE POINTER VALUE CIA /INVERT FOR TEST TAD GETPTR /COMPARE TO MAIN POINTER SNA CLA /SKIP IF NOT THERE YET JMP GETINPUT /JUMP IF DONE PRINTING THE BUFFER TAD I GBTEMP /GET THE CURRENT CHARACTER JMS I [P7CH] /PRINT IT ISZ GBTEMP /BUMP TO NEXT JMP PRBLUP /KEEP GOING GMSFLG, .-. /MESSAGE FLAG / COMES HERE ON ANY BACKSPACING CHARACTER. BACKSP, NL7777 /-1 TAD GETPTR /BACKUP THE POINTER DCA GBTEMP /SAVE FOR NOW TAD GBTEMP /GET IT BACK TAD (-CHRBUFF) /COMPARE TO LOWER LIMIT SPA CLA /SKIP IF OK JMP GCMBEEP /COMPLAIN IF TOO FAR BACK BZAP, JMP HARDRUBOUT /**** NOT /B **** 0000 TAD GBTEMP /GET UPDATED VALUE DCA GETPTR /USE IT IN POINTER TAD ["H&37] /GET JMS I [P7CH] /PRINT IT TAD [" &177] /GET A JMS I [P7CH] /PRINT IT TAD ["H&37] /GET JMS I [P7CH] /PRINT IT JMP GETINPUT /KEEP GOING / COMES HERE IF BACKSPACING ON HARD-COPY TERMINAL. HARDRUB,TAD ("\&177) /GET DELIMITER JMS I [P7CH] /PRINT IT RUBAGN, NL7777 /BACKUP TAD GETPTR /GET THE POINTER DCA GBTEMP /SAVE UPDATED VALUE TAD GBTEMP /GET IT BACK TAD (-CHRBUFF) /COMPARE TO LOWER LIMIT SPA CLA /SKIP IF OK JMP RUBDONE /JUMP IF TOO FAR TAD GBTEMP /GET THE NEW VALUE DCA GETPTR /STORE IT TAD I GETPTR /GET THE OLD CHARACTER JMS I [P7CH] /PRINT IT JMS I [INPUT] /GET FURTHER INPUT HERE JMS I (GESSUB) /CHECK IF A RUBTBL-1 /BACKSPACING CHARACTER RUBDONE,DCA GBTEMP /STORE LATEST OR TAD ("\&177) /GET TRAILING DELIMITER JMS I [P7CH] /PRINT IT TAD GBTEMP /GET THE LATEST (OR ) DCA INCHAR /APPEAR TO HAVE INPUT JMP GOTINPUT /GO USE IT THERE GBTEMP, .-. /TEMPORARY GMSBUF, .-. /HOLDS MESSAGE POINTER FOR VIEW CHRBUFF= . CHRBUFF,ZBLOCK 6 /6 CHARS IN BUFFER CHRBEND,0 /END OF BUFFER PAGE /COMMAND TABLE SEARCH ROUTINE GESSUB, .-. /COMMAND TABLE SEARCH ROUTINE CLA /CLEAN UP TAD I GESSUB /GET THE INLINE POINTER DCA GCTEMP /STASH IT ISZ GESSUB /BUMP PAST POINTER GCMLUP, ISZ GCTEMP /BUMP TO NEXT TAD I GCTEMP /GET AN ENTRY ISZ GCTEMP /BUMP TO NEXT SNA /END OF TABLE? JMP GCMEND /YES, FORGET IT TAD INCHAR /COMPARE TO LATEST SZA CLA /SKIP IF IT MATCHES JMP GCMLUP /JUMP IF NOT TAD I GCTEMP /GET THE ADDRESS DCA GCTEMP /STASH IT JMP I GCTEMP /GO THERE GCMEND, TAD INCHAR /GET THE CHARACTER BACK JMP I GESSUB /RETURN GCTEMP, .-. /TEMPORARY /SPECIAL CHARACTER TABLE CHTBL, -"I!300;GOTHT / -33; GOTESC / -176; GOTESC /176 -175; GOTESC /175 -"U!300;DELETL /<^U> -"M!300;GOTCR / -"J!300;LFVIEW / -137; BACKSP / -"H!300;BACKSP / -177; BACKSP / /SPECIAL RUBOUT CHARACTER TABLE RUBTBL, -177; RUBAGN / -137; RUBAGN / -"H!300;RUBAGN / / GET A DIGIT ROUTINE. GETDIGI,.-. /GET A DIGIT ROUTINE JMS ENDTEST /TEST IF A DELIMITER JMP I GETDIGIT /RETURN IF SO JMS GETCHR /GET A CHARACTER TAD (-"8!200-2) /ADD ON UPPER LIMIT CLL /CLEAR LINK FOR TEST TAD ("8+2-"0) /ADD ON RANGE SNL /SKIP IF VALID JMP BADDIGIT /JUMP IF NOT ISZ GETDIGIT /TAKE SKIP RETURN ISZ GETPTR /BUMP TO NEXT CHARACTER SKP /DON'T SET BAD VALUE BADDIGI,NL7777 /INDICATE BAD DIGIT JMP I GETDIGIT /RETURN ENDTEST,.-. /SUBROUTINE HEADER CLA /CLEAN UP TAD I GETPTR /GET THE CHARACTER SZA CLA /IF ZERO THEN SKIP AND RETURN JMP .+2 /ELSE JUMP AHEAD JMP I ENDTEST /RETURN ISZ ENDTEST /TAKE SKIP RETURN JMP I ENDTEST /THEN RETURN / GET A CHARACTER FROM INPUT BUFFER ROUTINE. GETCHR, .-. /GET A CHARACTER ROUTINE SKP CLA /CLEAN UP AND DON'T DO IT YET GETCAGN,ISZ GETPTR /BUMP TO NEXT TAD I GETPTR /GET A CHARACTER TAD (-"/!200) /COMPARE TO "/" SNA /SKIP IF OTHER JMP I GETCHR /RETURN ZERO TAD [-" +"/] /COMPARE TO SNA /SKIP IF DIFFERENT JMP GETCAGN /ELSE TOSS IT TAD (-140+" -200) /COMPARE TO LOWER-CASE LIMIT SPA /SKIP IF LOWER-CASE TAD [40] /DON'T FOLD UPPER-CASE TAD [100] /RESTORE THE CHARACTER JMP I GETCHR /RETURN PAGE / SUPPORT ROUTINES. / GETS ONE CHARACTER FROM KEYBOARD OR FILE AND RETURNS IT IN INPUT, .-. /INPUT ROUTINE INPUTAG,JMS CHKUP /CHECK FOR INPUT TAD TSWITCH /GET SWITCHES SZA CLA /IF ZERO THEN SKIP JMP INPKEY /ELSE GET INPUT FROM KEYBOARD JMS I (GIVCHR) /GET CHARACTER FROM FILE DCA INCHAR /STORE CHARACTER INPKEY, TAD INCHAR /WAS THERE ANY? SNA /SKIP IF SO JMP INPUTAG /ELSE WAIT FOR IT JMP I INPUT /RETURN TSWITCH,.-. /SWITCH TO USE KEYBOARD CHKUP, .-. /CHECK FOR <^P>, <^C>, ETC. JMS CTLCTST /TEST FOR <^C>, ETC. SZA /SKIP IF NOTHING THERE TAD (-"Q!300) /ELSE COMPARE TO <^Q> SNA /SKIP IF SOMETHING ELSE JMP CHKCLR /IGNORE <^Q> IAC /TAD (-"P+"Q)/IS IT <^P>? SNA /SKIP IF NOT JMP PHIT /JUMP IF SO TAD (-"R+"P) /IS IT <^R>? SNA /SKIP IF NOT JMP RHIT /JUMP IF SO TAD [-"S+"R] /IS IT <^S>? SZA CLA /SKIP IF SO JMP I CHKUP /RETURN IF NOT JMS CTLCTST /WAIT FOR <^Q> TAD (-"Q!300) /IS IT <^Q>? SZA CLA /SKIP IF SO JMP .-3 /GO BACK IF NOT CHKCLR, DCA INCHAR /CLEAR INPUT BUFFER JMP I CHKUP /RETURN CTLCTST,.-. /CHECK FOR <^C>, ETC. CLA /CLEAN UP CHKKSF, KSFIOT /**** CONSOLE **** CIF MCS+10 CHKJMP, JMP I CTLCTST /**** CONSOLE **** JMS INCON CHKKRS, KRSIOT/OR KRBIOT /**** CONSOLE **** JMP I CTLCTST AND [177] /JUST SEVEN BITS DCA INCHAR /SAVE IT NL7775 /-3 TAD INCHAR /COMPARE TO LATEST SNA /SKIP IF NOT <^C> ISZ I (SCRSIZE) /ELSE SET SOFT INDICATOR SPA SNA CLA /SKIP IF <^D> OR HIGHER JMP I [SBOOT] /ELSE GO SAVE LAST BUFFER AND LEAVE CHKKCC, KCCIOT/OR 0000 /**** CONSOLE **** 0000 TAD INCHAR /GET THE CHARACTER JMP I CTLCTST /RETURN /OUTPUTS A CHARACTER WITH KEYBOARD CHECKING P7CH, .-. /SEVEN-BIT OUTPUT ROUTINE DCA P7TEMP /SAVE PASSED VALUE P7AGN, JMS CHKUP /CHECK FOR <^C>, ETC. TAD P7TEMP /GET THE CHARACTER JMS P7OUT /TRY TO OUTPUT IT JMP P7AGN /CHECK INPUT WHILE WAITING JMS CHKUP /CHECK FOR <^C>, ETC. JMP I P7CH /RETURN /OUTPUTS A CHARACTER P7OUT, .-. /SEVEN BIT I/O ROUTINE P7TSF, TSFIOT /**** CONSOLE **** CIF MCS+10 P7JMP, JMP I P7OUT /**** CONSOLE **** JMS OUTCON P7TLS, TLSIOT /**** CONSOLE **** JMP I P7OUT CLA!400 /CLEAN UP ISZ P7OUT /BUMP RETURN ADDRESS JMP I P7OUT /RETURN / COMES HERE IF <^P> HIT. PHIT, TAD ["^&177] /GET AN "^" JMS P7OUT /PRINT IT JMP .-1 /WAIT FOR IT TAD ("P&177) /GET A "P" JMS P7OUT /PRINT IT JMP .-1 /WAIT FOR IT JMP I [ANSTRT] /RESTART / COMES HERE IF <^R> HIT. RHIT, TAD ["^&177] /GET AN "^" JMS P7OUT /PRINT IT JMP .-1 /WAIT FOR IT TAD ("R&177) /GET A "P" JMS P7OUT /PRINT IT JMP .-1 /WAIT FOR IT JMP I [STRT1] /RESTART CRLF, .-. /, ROUTINE CLA /CLEAN UP FOR DIRTY CALLERS TAD ["M&37] /GET A JMS I [P7CH] /GO PRINT IT TAD ("J&37) /GET A JMS I [P7CH] /GO PRINT IT JMP I CRLF /RETURN ESCRLF, .-. / SWITCH TEST ROUTINE CLA /CLEAN UP JUST IN CASE TAD ESCAPSW /GET INDICATOR SMA CLA /SKIP IF SET TO INITIAL VALUE JMP I ESCRLF /RETURN IF SET TO SECOND VALUE OR NOT SET AT ALL NL2000 /SET SECOND VALUE DCA ESCAPSW /STORE NEW INDICATOR FOR NEXT TIME JMS I [CRLF] /DO A , NOW JMP I ESCRLF /RETURN / ROTATE THREE LEFT ROUTINE. RTL3, .-. /ROTATE THREE LEFT CLL RTL;RAL /MOVE THREE TO THE LEFT JMP I RTL3 /RETURN / OCTAL PRINTOUT ROUTINE. PRTOCT, .-. /OCTAL PRINT ROUTINE DCA LENSET /SAVE PASSED VALUE TAD (-4) /SETUP THE DCA VERCHK /DIGIT COUNT OCTLUP, TAD LENSET /GET THE VALUE JMS I [RTL3] /MOVE UP ONE DIGIT DCA LENSET /STORE BACK TAD LENSET /GET IT AGAIN RAL /ADJUST LATEST TO LOW-ORDER AND [7] /JUST LATEST DIGIT TAD ["0&177] /MAKE IT ASCII JMS I [P7CH] /PRINT IT ISZ VERCHK /DONE YET? JMP OCTLUP /NO, KEEP GOING JMP I PRTOCT /YES, RETURN P7TEMP, .-. /TEMPORARY FOR OUTPUT ESCAPSW,.-. /ESCAPE SWITCH LENSET, .-. /STORAGE FOR OCTAL PRINT NUMBER VERCHK, .-. /COUNTER FOR OCTAL PRINT ROUTIN PAGE / MESSAGE PRINTING ROUTINE WITH SPECIAL CONSIDERATION. ESCRIBE,.-. /SCRIBE WITH ROUTINE JMS I [ESCRLF] /CHECK IF , NEEDED HERE TAD ESCRIBE /GET OUR CALLER DCA SCRIBE /MAKE IT THEIRS SKP /DON'T EXECUTE HEADER! / MESSAGE PRINTING ROUTINE. SCRIBE, .-. /MESSAGE PRINT ROUTINE DCA I (GMSFLG) /STORE IN FLAG FOR LFVIEW TAD I SCRIBE /GET MESSAGE POINTER DCA SCRPTR /STASH IT TAD SCRPTR /GET BACK MESSAGE DCA I (GMSPTR) /STORE IT ISZ SCRIBE /BUMP PAST ARGUMENT TAD (140) /INITIALIZE TO LOWER-CASE CASZP1, DCA SCRCASE /**** /U **** CLA!400 SCRLUP, CDF MESFLD /GET THE MESSAGE FIELD TAD I SCRPTR /GET LEFT HALF-WORD DCA SCRTMP /STORE IT HERE IN OUR FIELD TAD SCRTMP /GET THE WORD BACK RTR;RTR;RTR /MOVE OVER CDF CODFLD /MAKE SURE WE ARE IN OUR FIELD JMS SCRPRNT /PRINT IT TAD SCRTMP /GET RIGHT HALF-WORD JMS SCRPRNT /PRINT IT ISZ SCRPTR /BUMP TO NEXT PAIR JMP SCRLUP /KEEP GOING SCRPRNT,.-. /CHARACTER PRINT ROUTINE AND [77] /JUST SIX-BIT SNA /END OF MESSAGE? JMP I SCRIBE /YES, RETURN TO ORIGINAL CALLER DCA SCRCHAR /NO, SAVE FOR NOW TAD SCRCHAR /GET IT BACK TAD (-"%!200) /IS IT "%"? SNA /SKIP IF NOT JMP SCRCRLF /JUMP IF IT MATCHES TAD [-"^+100+"%] /IS IT "^" SNA CLA /SKIP IF NOT JMP SCRFLIP /JUMP IF IT MATCHES TAD SCRCHAR /GET THE CHARACTER AND [40] /DOES CASE MATTER? SNA CLA /SKIP IF NOT TAD SCRCASE /ELSE GET PREVAILING CASE TAD SCRCHAR /GET THE CHARACTER JMS I [P7CH] /PRINT THE CHARACTER JMP I SCRPRNT /RETURN SCRCRLF,JMS I [CRLF] /DO A , JMP I SCRPRNT /RETURN SCRFLIP,TAD SCRCASE /GET CURRENT CASE CIA /INVERT IT TAD (140+100) /ADD SUM OF POSSIBLE VALUES CASZP2, DCA SCRCASE /**** /U **** CLA!400 JMP I SCRPRNT /RETURN SCRCAS, .-. /HOLDS CASE SCRPTR, .-. /POINTER TO MESSAGE SCRCHA, .-. /THE CHARACTER SCRTMP, .-. /TEMPORARY STORAGE PAGE 35 /SUBROUTINE TO INPUT CHARACTERS FROM A PQS FILE GIVCHR,.-. /SUBROUTINE RETURN JMP I GTRIM /JMP TO CO ROUTINE GTRIM, GIVEOF /END OF FILE AND (77) /MASK LOWER BITS SNA /SKIP ON NONZERO CHAR JMP GNXWRD /GET NEXT WORD IF A ZERO DCA GTEMP /STORE CHARACTER TAD GTEMP /GET IT BACK TAD (-37) /IS IT A TAB? SZA CLA /IF YES THE SKIP JMP .+3 /ELSE JUMP AHEAD TAD (CR) /GET CARRIAGE RETURN JMP I GIVCHR /RETURN TAD GTEMP /GET BACK CHARACTER TAD (40) /CONVERT TO ASCII CHARACTER AND (77) /MASK OFF LOW BITS TAD (40) /ADD BACK 40 JMP I GIVCHR /RETURN GETMOR, TAD I GPNTR /GET THE WORD IN THE BUFFER SNA /CHECK FOR END OF FILE (0) JMP GIVEOF /END OF FILE GET ANOTHER BSW /GET CHARACTER INTO LOW ORDER BITS ON PDP8/E JMS GTRIM /GO RETURN 8 BIT ASCII CHARACTER TAD I GPNTR /GET SECOND CHARACTER IN LOW ORDER BITS JMS GTRIM /GO RETURN 8 BIT ASCII CHARACTER GETMR2, ISZ GPNTR /MOVE TO NEXT WORD TAD GPNTR /GET WORD ADDRESS TAD (-BUFF-200 /HAVE WE GONE THROUGH GSYSIO, SZA CLA /THE BUFFER JMP GETMOR /NO,GET MORE CHARACTERS GEOB, JMS I GSYSIO /YES, CALL I/O ROUTINES FOR ANOTHER BLOCK GBUFF, BUFF /BUFFER LOCATION GFUN, 1^100 /READ 1 BLOCK INTO FIELD 0 GBLK, .-. /BEGIN BLOCK # ISZ GBLK /NEXT BLOCK TAD GBUFF /GET BUFFER LOCATION DCA GPNTR /PUT INTO POINTER JMP GETMOR /GO GET MORE GIVEOF, ISZ FILEPNT /INCR FILE POINT TAD I FILEPNT /GET THE FILE AND (7770 /MASK HIGH 9 BITS SNA JMP I (7600) /BOOTSTRAP DCA GBLK TAD I FILEPNT AND (7) TAD (1^100) DCA GFUN JMP GEOB GNXWRD, TAD (GETMR2) /GET ADDRESS FOR OBTAINING NEW WORD DCA GTRIM /STORE INTO CROUTINE ARGUMENT TAD (CR) /GET CARRIAGE RETURN JMP I GIVCHR /RETURN GPNTR, .-. /TEMPORARY LOCATION GTEMP, .-. /TEMPORARY FIELD 6 PAGE 1 /THIS IS THE BUFFER WHERE ALL MESSAGES ARE STORED MSBLK, TEXT /%^BLOCK NUMBER:/;0 MSFLUT, TEXT /%^FIELD ALLOCATION:/;0 MSROTV, TEXT /%^ROTATION VELOCITY(DECIMAL)=/;0 MSTLAN, TEXT /%^TILT ANGLE (DECIMAL)=/;0 MSPIAM, TEXT /%^DEGREES PITCH AMPLITUDE(DECIMAL)=/;0 MSBUFP, TEXT /%^PERIOD FOR BUFFER (N+1)=/;0 MSDAPR, TEXT /%^NUMBER OF POINTS OF DATA(DECIMAL)=/;0 MSNUMS, TEXT /%^NUMBER OF CYCLES AVERAGED=/;0 MSUNDES,TEXT /%^UNIT TYPE (7777 IS NO UNITS)=/;0 MSWNWD, TEXT /%^WINDOW WIDTH=/;0 MSVLTY, TEXT /%^TYPE OF VELOCITY IN SWPFLD:/;0 MSPSTY, TEXT /%^TYPE OF POSITION IN POSFLD:/;0 MSYEAR, TEXT /%^YEAR DATA WAS TAKEN:/;0 MSDAY, TEXT /%^DAY DATA WAS TAKEN:/;0 MSUNCODE,TEXT /%^UNIT CODE REPRESENTING TAPE ETC.:/;0 MSERRO, TEXT /%^ERROR IN NUMBER! TRY AGAIN/;0 MSG3, TEXT /%^I AM THE WALRUS/;0 MSHVEL, TEXT /%^ HARMONIC ANALYSIS OF VELOCITY%/;0 MSHUNT, TEXT /%^ HARMONIC ANALYSIS OF UNIT ACTIVITY%/;0 MSHPOS, TEXT /%^ HARMONIC ANALYSIS OF POSITION%/;0 MSHAVG, TEXT /%^AVERAGE VALUE=/;0 MSVA, TEXT /%^DOMINANT HARMONIC AMPLITUDE=/;0 MSVPH, TEXT /%^DOMINANT HARMONIC PHASE=/;0 MSUPRC, TEXT /^ SPIKES PER SEC PER CYCLE/;0 MSVPRC, TEXT /^ POSITION UNITS PER SEC PER CYCLE/;0 MSPPRC, TEXT /^ POSITION UNITS PER CYCLE/;0 MSDEG, TEXT /^ DEGREES%/;0 MSFLD1, TEXT /%^FIELD 1 VALUE=/;0 MSFLD2, TEXT /%^FIELD 2 VALUE=/;0 MSFLD3, TEXT /%^FIELD 3 VALUE=/;0 MSFLD4, TEXT /%^FIELD 4 VALUE=/;0 MSG11, TEXT /%^TIME CONSTANT ANALYSIS/;0 MSG13, TEXT /%^COEFFICIENT OF VARIATION=/;0 MSG14, TEXT /%^PEAK CHANGE IN FUNCTION VALUE/;0 MSG15, TEXT /%^(POSITIVE)=/;0 MSG16, TEXT /%^(NEGATIVE)=/;0 MSG17, TEXT /%^TIME CONSTANT=/;0 MSG19, TEXT /MAXIMUM VALUE=/;0 MSG20, TEXT /PHASE OF MAXIMUM=/;0 MSG21, TEXT /MINIMUM VALUE=/;0 MSG22, TEXT /PHASE OF MINIMUM=/;0 MSG25, TEXT /DISTORT(%)=/;0