/ DATA ANALYSIS PACKAGE / LAST EDIT 14-APR-1990 10:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / DATA ANALYSIS AND DISPLAY PACKAGE FOR LABORATORY DATA. / WORKS WITH LABORATORY DATA ALREADY RESIDING ON THE DESIGNATED LOGICAL UNIT / ("DATUNIT"). / REQUIRES PDP-8/E PROCESSOR WITH EAE (FOR SPEED). / REQUIRES HDS 3200-30 OR EQUIVALENT DISPLAY TERMINAL. / USAGE: / .GET BDA1,BDA2,BDA3,BDA4 [BDA1-BDA4 ARE THE BINARY FILES OF / THIS ASSEMBLY] / .R $/[OPTION SWITCHES] [OPTION SWITCHES AS NECESSARY] / OPTIONS: / /D BEFORE USING THE DATA FILE, ALL / PRE-EXISTING BEGINNING, ENDING, ETC. / MARKING INFORMATION WILL BE STRIPPED / FROM THE FILE. THE DEFAULT ACTION IS / TO PRESERVE ANY EXISTING MARKING / INFORMATION. / /R BEFORE USING THE DATA FILE, ALL / PRE-EXISTING REQUEST MARKS WILL BE / STRIPPED FROM THE FILE. THE DEFAULT / ACTION IS TO PRESERVE ANY EXISTING / REQUEST INFORMATION. / /X [**** NOT IMPLEMENTED YET! ****]POSITION DATA WILL NOT BE / [ONLY USES COMPATIBLE DATA] SIGN-EXTENDED (AND WILL BE TREATED AS / SIGNED 12-BIT INTEGERS). THE DEFAULT / ACTION IS TO SIGN-EXTEND THE DATA / ASSUMING IT TO BE 10-BIT SIGNED DATA / (COMPATIBLE WITH PRIOR PROGRAMS). / ASSEMBLY PARAMETERS. / SET P?S/8 I/O UNIT FOR DATA. / DATUNIT=5 /DEFAULT IS UNIT 5 FOR DATA / SET FIELD FOR DATA. / DATFLD= 1^10 /DEFAULT IS FIELD 1 / SET FIELD FOR MESSAGES. / MSGFLD= 2^10 /DEFAULT IS FIELD 2 / SET FIELD FOR DISPLAY. / DFIELD= 3^10 /DEFAULT IS FIELD 3 / SET FIELD FOR VELOCITY AND BUFFER STATUS TABLES. / VELFLD= 4^10 /DEFAULT IS FIELD 4 / SET FIELD FOR ADDITIONAL SUPPORT CODE. / CODFLD= 5^10 /DEFAULT IS FIELD 5 / SET CONSOLE DEVICE CODE. / TTY= 03 /DEFAULT IS 03/04 / SET TERMINAL DEVICE CODE. / LINE= 46 /DEFAULT IS 46/47 / DEFINITIONS. XLIST OFF IFNDEF OFF IFNDEF ON XLIST ON / DEFINITIONS FROM P?S/8. BSGRP= 0003 /CURRENT BASE YEAR GROUP VALUE INCON= 0031 /EQUATED FROM CONSOLE! OUTCON= 0033 /EQUATED FROM CONSOLE! SBLOCK= 7635 /SYSTEM LOADER BLOCK ARGUMENT HERE SBOOT= 7600 /SYSTEM EXITS HERE SBTFUN= 7602 /SYSTEM BOOTSTRAP IN UNIT BITS HERE SCORE= 7633 /SYSTEM LOADER ADDRESS ARGUMENT HERE SCRSIZE=7611 /SYSTEM CORE SIZE HERE SDATE= 7610 /SYSTEM DATE HERE SFILES= 7757 /FILE LIST PASSED HERE SFUN= 7634 /SYSTEM LOADER FUNCTION WORD HERE SLOAD= 7632 /SYSTEM LOADER HERE SOUTFLS=7607 /OUTPUT FILE COUNT PASSED HERE SPARM= 7756 /EQUALS PARAMETER PASSED HERE SWAL= 7604 /SWITCHES /A-/L SWMX= 7605 /SWITCHES /M-/X SWY9= 7606 /SWITCHES /Y-/9 SYSIO= 7640 /I/O ENTRY POINT SYSTART=7637 /SYSTEM LOADER STARTING ADDRESS HERE WRITE= 4000 /I/O FUNCTION WRITE BIT / EAE DEFINITIONS. ASR= 7415 /ARITHMETIC SHIFT RIGHT CAM= 7621 /CLEAR AC, MQ DAD= 7443 /DOUBLE-PRECISION ADD DCM= 7575 /DOUBLE-PRECISION COMPLEMENT DLD= 7663 /DOUBLE-PRECISION LOAD DPSZ= 7451 /DOUBLE-PRECISION SKIP IF ZERO DST= 7445 /DOUBLE-PRECISION STORE DVI= 7407 /DIVIDE LSR= 7417 /LOGICAL SHIFT RIGHT MUY= 7405 /MULTIPLY SHL= 7413 /SHIFT LEFT SWAB= 7431 /SWITCH TO MODE B EAE SWBA= 7447 /SWITCH TO MODE A EAE / NUMERIC LOAD 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 CLL CML IAC RAL /LOAD AC WITH 0003 NL0004= CLA CLL IAC RTL /LOAD AC WITH 0004 NL0006= CLA CLL CML IAC RTL /LOAD AC WITH 0006 NL0100= CLA CLL 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 CLL CML 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 / FIELD AND UNIT DEFINITIONS. IFNDEF CODFLD /DEFAULT IS FIELD 5 IFNDEF DATFLD /DEFAULT IS FIELD 1 IFNDEF DATUNIT /DEFAULT IS UNIT 5 IFNDEF DFIELD /DEFAULT IS FIELD 3 IFNDEF MSGFLD /DEFAULT IS FIELD 2 PRGFLD= 00 /PROGRAM IS IN FIELD 0 IFNDEF VELFLD /DEFAULT IS FIELD 4 / CHARACTER DEFINITIONS. ESC= 033 / CHARACTER FS= "\&37 / CHARACTER US= 037 / CHARACTER DECIMAL /MAKE IT EASIER / RULER DEFINITIONS. J= 150 /JUMBO LINE L= 100 /LARGE LINE M= 60 /MEDIUM LINE B= 50 /BOX-SIZE LINE S= 30 /SMALL LINE T= 10 /TINY LINE / PROCEED BOX DEFINITIONS. PBXLEFT=736 /LEFT-HAND LIMIT PBXLOWE=7 /LOWER LIMIT PBXRITE=896 /RIGHT-HAND LIMIT PBXUPPE=PBXLOWER+120 /UPPER LIMIT OCTAL /BACK TO NORMAL / TERMINAL DEFINITIONS. IFNDEF TTY /DEFAULT IS 03/04 CONSOLE TERMINAL KCCIOT= TTY^10+6002 /CLEAR KEYBOARD FLAG KRBIOT= TTY^10+6006 /READ KEYBOARD BUFFER, CLEAR FLAG KRSIOT= TTY^10+6004 /READ KEYBOARD BUFFER KSFIOT= TTY^10+6001 /SKIP ON KEYBOARD FLAG TLSIOT= TTY+1^10+6006 /LOAD TELEPRINTER SEQUENCE TSFIOT= TTY+1^10+6001 /SKIP ON TELEPRINTER FLAG IFNDEF LINE /USE DEVICE 46/47 I/O TO TERMINAL / REMOTE LINE IOT DEFINITIONS. / RECEIVE DEFINITIONS. RKIEIOT=LINE^10+6005 /LOAD INTERRUPT ENABLE PER AC[11] RKRBIOT=LINE^10+6006 /READ REMOTE, CLEAR FLAG RKSFIOT=LINE^10+6001 /SKIP ON REMOTE INPUT FLAG / TRANSMIT DEFINITIONS. RTLSIOT=LINE+1^10+6006 /TRANSMIT CHARACTER, CLEAR FLAG RTSFIOT=LINE+1^10+6001 /SKIP ON TRANSMIT FLAG XLIST OFF / AD-8/E-A ANALOG TO DIGITAL CONVERTER DEFINITIONS. / ADCL= 6530 /CLEAR A-D LOGIC / ADLM= 6531 /LOAD MULTIPLEXOR REGISTER / ADST= 6532 /CLEAR A-D DONE FLAG AND START / ADRB= 6533 /READ A-D BUFFER, CLEAR A-D DONE FLAG / ADSK= 6534 /SKIP ON A-D DONE / ADSE= 6535 /SKIP ON TIMING ERROR FLAG / ADLE= 6536 /LOAD ENABLE REGISTER PER AC / ADRS= 6537 /STATUS TO AC XLIST ON / MISCELLANEOUS DEFINITIONS. DEFRES= 2 /DEFAULT RESOLUTION FACTOR EMAGFAC=1 /MAGNIFY BY 2 DURING EDIT MODE EZAPFAC=3 /EDIT MODE RESOLUTION FACTOR JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION JMSSYSI=SYSIO&177+JMSC /CALL TO SYSIO FROM ITS PAGE REVISIO="S&77 /REVISION OF PROGRAM VERSION=1 /VERSION OF PROGRAM DECIMAL /MAKE IT EASIER / PLOTTING DEFINITONS. GSIZE= 5 /GUARD ZONE SIZE FOR ALL PLOTS PLOTCNT=3 /LEAVE ROOM FOR 3 MAIN PLOTS PLOTMAX=750 /LARGEST AREA FOR MAIN PLOTS SF= PLOTMAX%PLOTCNT /SCALE FACTOR FOR ANY ONE PLOT XAXIS= 525 /LOWEST X-PLOT VERTICAL COORDINATE YAXIS= 265 /LOWEST Y-PLOT VERTICAL COORDINATE ZAXIS= 5 /LOWEST Z-PLOT VERTICAL COORDINATE / BUFFER STRIPPING DEFINITIONS. / WHEN A BUFFER IS READ IN FOR THE FIRST TIME, IT MUST BE STRIPPED ACCORDING TO / THE PREVAILING OPTIONS. AT INITIAL LOAD TIME, THESE ARE DETERMINED BY THE / '/D' AND '/R' SWITCHES. PROGRAM FEATURES MAY BE ADDED TO ENABLE THESE / FEATURES DURING FURTHER PROGRAM USAGE. / /R SETTING /D SETTING ACTION / 0 0 RETAIN DATA, REQUEST BITS. / 0 1 CLEAR DATA BITS, RETAIN REQUEST BITS. / 1 0 RETAIN DATA BITS, CLEAR REQUEST BITS. / 1 1 CLEAR DATA, REQUEST BITS. KEEPALL=0 /KEEP ALL BITS KEEPSEL=1 /KEEP REQUEST BITS, CLEAR DATA BITS KEEPDAT=2 /KEEP DATA BITS, CLEAR REQUEST BITS KEEPNON=3 /CLEAR ALL BITS / MOVEMENT LOCATING PARAMETERS. IFNDEF DBEGOFF /DEFAULT IS -25.6 MSEC. IFNDEF DENDOFF /DEFAULT IS 16.0 MSEC. IFNDEF DBEGTHR /DEFAULT BEGIN THRESHOLD IFNDEF DENDTHR /DEFAULT END THRESHOLD / VELOCITY PARAMETERS. IFNDEF DGADJUS /DEF. POSITIVE GAIN ADJUSTMENT FACTOR IFNDEF DNGADJU /DEF. NEGATIVE GAIN ADJUSTMENT FACTOR IFNDEF DVELMAG /DEFAULT VELOCITY MAGNITUDE / VIEWING FACTOR. IFNDEF DVFACT /DEFAULT IS 7 OCTAL /BACK TO NORMAL / COMPATIBLE DATA FORMAT DESCRIPTION. / THOUGH SUBJECT TO CHANGE, THIS PROGRAM CURRENTLY ONLY SUPPORTS DATA COMPATIBLE / WITH THE "DATA" PROGRAM CONFIGURED FOR 4-WORD TWO-CHANNEL ("CHAN=0") / OPERATION. THE PARTICULARS OF THAT FORMAT ARE: / BLOCK[0000].WORD[000] CONTAINS THE NUMBER OF VALID BLOCKS OF DATA (NOT / COUNTING THE FIRST FOUR WORDS). THIS VALUE MUST BE A MULTIPLE OF 40 IN THE / RANGE [0040-7740]. / EACH GROUP OF FOUR WORDS (OTHER THAN THE FIRST GROUP) HAS THE FOLLOWING / FORMAT: / WORD[0] BIT[0] BEGINNING OF MOVEMENT INDICATOR / WORD[0] BIT[1] BLINK INDICATOR / WORD[0] BIT[2-11] X-POSITION DATA (10-BIT SIGNED) / WORD[1] BIT[0] END OF MOVEMENT INDICATOR / WORD[1] BIT[1] MAXIMUM VELOCITY INDICATOR / WORD[1] BIT[2-11] Y-POSITION DATA (10-BIT SIGNED) / WORD[2] BIT[0] SPIKE INDICATOR / WORD[2] BIT[1-11] SPIKE TIME PAST THE START OF THIS / SAMPLE. 0000-3077 REPRESENTS 0-1599 / MICROSECONDS. / WORD[3] BIT[0] SLOW-PHASE INDICATOR / WORD[3] BIT[1-9] RESERVED / WORD[3] BIT[10] BEGINNING OF REQUEST INDICATOR / WORD[3] BIT[11] END OF REQUEST INDICATOR PAGE 0 /START AT THE BEGINNING ADJUST, VADJUST /TIME ADJUSTMENT POINTER ADRAW, 1/0 /DRAW AVERAGE VELOCITY FLIP-FLOP AXIS, .-. /AXIS TEMPORARY BELLFLA,.-. /RING ONCE FLAG BLKLIMI,.-. /BLOCK LIMIT FOR DATA CNT, .-. /COUNTING TEMPORARY DINCR, .-. /DISPLAY INCREMENT/DECREMENT LATFLD, 7777 /LATEST FIELD NUMBER *10 /DEFINE AUTO-INDEX AREA XR1, .-. /AUTO-INDEX REGISTER NUMBER 1 XR2, .-. /AUTO-INDEX REGISTER NUMBER 2 BDIRTY, 1 /LATEST BUFFER DIRTY SWITCH GINHORI,1000 /GIN MODE HORIZONTAL COORDINATE GINVERT,SF+XAXIS /GIN MODE VERTICAL COORDINATE MDRAW, 1/0 /DRAW BEGIN/END MARKS FLIP-FLOP TDRAW, 0 /DRAW TIME FLIP-FLOP VXR, .-. /VELOCITY AUTO-INDEX REGISTER *20 /GET PAST AUTO-INDEX AREA / BUFFER CONTROL WORD: / 0= CURRENT DATA IS CLEAN AND NEED NOT BE WRITTEN BACK. / 1= CURRENT DATA MARKS MUST BE REMOVED BEFORE WRITING BACK. / 2= CURRENT REQUEST MARKS MUST BE REMOVED BEFORE WRITING BACK. / 3= CURRENT DATA AND REQUEST MARKS MUST BE REMOVED BEFORE WRITING BACK. BCONTRL,.-. /BUFFER CONTROL WORD / DIRTY BUFFER SWITCH: / -1= DATA CURRENTLY READ IN, CLEAN (CAN BE TOSSED). / 0= DATA CURRENTLY READ IN, DIRTY (MUST BE WRITTEN). / 1= DATA NOT CURRENTLY READ IN (CAN BE IGNORED). CURPTR, 4; 0 /CURRENT DISPLAY POINTER DOFFSET,0; 1 /OFFSET TO ACCOUNT FOR DISPLAY NEEDS GLVALUE,.-. /LEFT HORIZONTAL VALUE GRVALUE,.-. /RIGHT HORIZONTAL VALUE / LATEST DATA PACKET. LPACK, ZBLOCK 4 /LATEST DATA PACKET LX= LPACK /LATEST X-WORD LY= LPACK+1 /LATEST Y-WORD LTIME= LPACK+2 /LATEST TIME-WORD LEXTRA= LPACK+3 /LATEST EXTRA-WORD LRSW, .-. /LEFT/RIGHT BUTTON SWITCH MAGFACT,0 /MAGNIFICATION FACTOR MLIMIT, ZBLOCK 2 /POINTER LIMIT (NEGATIVE FORM) MODE, OVIEWMODE /OPERATING MODE (VIEW OR OVERVIEW) OFFSET, ZBLOCK 2 /CHARACTER-CONTROLLED DISPLAY OFFSET OVFACTO,DVFACTOR /OVERVIEW DISPLAY FACTOR PNTR, .-. /POINTER TEMPORARY / GENERAL DATA POINTER. PTR, ZBLOCK 2 /DATA POINTER PTRLO= PTR /LOW-ORDER DATA POINTER PTRHI= PTR+1 /HIGH-ORDER DATA POINTER PUTBACK,0 /PUT BACK FACTOR FOR RESOLUTION FACTOR RCHAR, .-. /TERMINATING CHARACTER FOR GIN MODE RDRAW, 1/0 /DRAW REQUEST MARKS FLIP-FLOP RINCHAR,.-. /TERMINAL INPUT CHARACTER STRPTR, .-. /STRING BUFFER POINTER TEMP, ZBLOCK 2 /TEMPORARY TEMPTR, ZBLOCK 2 /POINTER TEMPORARY TERMTMP,.-. /TERMINAL OUTPUT TEMPORARY TOSSCNT,.-. /TOSS COUNTER TOSSVAL,.-. /TOSSAWAY VALUE TXVEL, ZBLOCK 3 /VELOCITY*TIME STORED HERE VELARG, .-. /VELOCITY ARGUMENT VELVALU,.-. /VELOCITY VALUE X, .-. /"X" COORDINATE XUPDATE,.-. /X UPDATE FACTOR Y, .-. /"Y" COORDINATE ZAPFACT,DEFRES /RESOLUTION FACTOR PAGE /START AT THE USUAL PLACE START, NOP /IN CASE WE'RE CHAINED TO BELDAR, JMP I GETNEWPOSITION/(INITIALIZE) /COMPLAIN BELL ROUTINE TAD BELLFLAG /GET CURRENT STATUS SZA CLA /SKIP IF NEVER RUNG JMP PLTLUP /JUST KEEP GOING ISZ BELLFLAG /INDICATE AS HAVING BEEN RUNG JMP I [DOBELL] /GO RING IT / COMES HERE TO FORCE A DISPLAY CYCLE IN THE CURRENT MODE. PLTFRC, NL7777 /INVALIDATE THE DCA CURPTR+1 /DISPLAY POINTER / DISPLAY COMMAND PROCESSOR. PLTLUP, JMS I [RINTEST] /TRY TO GET A CHARACTER JMP I MODE /WASN'T ANY EDISPAT,TAD (KTABLE) /POINT TO PROPER ROUTINE DCA TEMP /STASH THE POINTER CDF MSGFLD /GOTO TABLE FIELD TAD I TEMP /GET ROUTINE ADDRESS CDF PRGFLD /BACK TO OUR FIELD DCA TEMP /STASH THE POINTER JMP I TEMP /DISPATCH TO ROUTINE / COMES HERE IN OVERVIEW MODE. OVIEWMO,JMS GETNEWPOSITION /GET NEW POSITION OFRCDIS,JMS I (PTRSETUP) /SETUP POINTERS JMS I [CLRSCREEN] /CLEAR THE SCREEN TAD (OADJUST) /GET OUR POINTER DCA ADJUST /SET IT UP NL0001 /SET MASK AND TDRAW /GET THE BIT SNA CLA /SKIP IF SET JMS I (DRAWTIME) /DRAW TIME VALUES JMS I (ODRAWX) /DRAW X VALUES JMS I (ODRAWY) /DRAW Y VALUES NL0001 /SET MASK AND RDRAW /GET THE REQUEST BIT AND MDRAW /AND WITH BEGIN/END BIT SNA CLA /SKIP IF BOTH SET JMS I (ODRAWINDICATORS) /DRAW REQUEST AND/OR BEGIN/END MARKS NL0001 /SET MASK AND ADRAW /GET THE BIT SNA CLA /SKIP IF SET JMS I (ODRAWAVERAGEVELOCITY) /DRAW AVERAGE VELOCITY JMS I (DRTLINE) /DRAW TIMELINE TAD ("O&177) /GET OUR CHARACTER JMP OVENTRY /CONTINUE THERE / COMES HERE IN VIEW MODE. VIEWMOD,JMS GETNEWPOSITION /GET NEW POSITION VFRCDIS,JMS I (PTRSETUP) /SETUP THE POINTERS NL6000 /SETUP THE DCA CNT /BUFFER COUNT NL7777 /SETUP THE DCA XR2 /OUTPUT REGISTER GDLOOP, JMS I [GETPACKET] /GET A FOUR-WORD PACKET CDF DFIELD /GOTO DISPLAY FIELD TAD LX /GET X-WORD DCA I XR2 /STASH IT TAD LY /GET Y-WORD DCA I XR2 /STASH IT TAD LTIME /GET TIME-WORD DCA I XR2 /STASH IT TAD LEXTRA /GET EXTRA-WORD DCA I XR2 /STASH IT CDF PRGFLD /BACK TO OUR FIELD JMS I [NXTPACKET] /GET ANOTHER PACKET ISZ CNT /DONE ENOUGH? JMP GDLOOP /NO, KEEP GOING JMS I [CLRSCREEN] /CLEAR THE SCREEN TAD (VADJUST) /GET OUR POINTER DCA ADJUST /SETUP ADJUST ROUTINE NL0001 /SET MASK AND TDRAW /GET THE BIT SNA CLA /SKIP IF SET JMS I (DRAWTIME) /DRAW TIME VALUES JMS I (DRAWX) /DRAW X VALUES JMS I (DRAWY) /DRAW Y VALUES JMS I (INDICATE) /DRAW INDICATORS NL0001 /SET MASK AND ADRAW /GET THE BIT SNA CLA /SKIP IF SET JMS I (DRAWAVERAGEVELOCITY) /DRAW AVERAGE VELOCITY JMS I (DRTLINE) /DRAW TIME LINE EMZAP, SKP /**** EDIT MODE **** 0000 TAD ("M-"V) /INDICATE EDIT MODE TAD ("V&177) /GET OUR CHARACTER OVENTRY,JMS I (DRAWVOM) /DRAW IT WITH THE OTHERS ANENTRY,JMS I [DFINISH] /FINISH THE PLOT JMP PLTLUP /GO BACK FOR MORE / GET NEW POSITION ROUTINE. RETURNS TO CALLER WHEN SOMETHING HAS CAUSED THE / CURRENT POSITION TO CHANGE, ELSE GOES TO THE MAIN LOOP. GETNEWP,INITIALIZE /GET NEW POSITION ROUTINE XLIST OFF / NL0001 /INDICATE LOW-ORDER CHANNEL / JMS I [GETA2D] /GET THE VALUE / CLL RTL /MOVE UP / MQL /TO LOW-ORDER // NL0000 /INDICATE HIGH-ORDER CHANNEL / JMS I [GETA2D] /GET THE VALUE / CLL RTR;RAR /MOVE DOWN / DAD; OFFSET /ADD ON CHARACTER-CONTROLLED OFFSET XLIST ON DLD; OFFSET /GET THE OFFSET DST; TEMPTR /STORE FOR NOW AND [7600] /CHECK FOR BAD BITS SZA CLA /SKIP IF NONE SET JMS BELDAR /MUST COMPLAIN ONCE TAD TEMPTR+1 /RESTORE HIGH-ORDER DAD; DOFFSET /ADD ON DISPLAY OFFSET DAD; MLIMIT /COMPARE TO BLOCK LIMIT SMA CLA /SKIP IF OK JMS BELDAR /ELSE COMPLAIN ONCE DCA BELLFLAG /CLEAR BELL FLAG / NOW CHECK IF WE HAVEN'T MOVED. DLD; TEMPTR /GET ACCEPTABLE VALUE DCM /INVERT FOR TESTING DAD; CURPTR /COMPARE TO CURRENT DPSZ /SKIP IF EQUAL JMP I GETNEWPOSITION /RETURN IF UNEQUAL / JUST RETURN FOR MORE INPUT UNTIL SOMETHING CHANGES. JMP PLTLUP /CONTINUE THERE PAGE / OVERDRAW SETUP ROUTINE. ODSETUP,.-. /OVERDRAW SETUP JMS I [STROUT] /OUTPUT STRINGS VECMODE /VECTOR MODE 0 /THIS ENDS THE LIST DLD; CURPTR /GET THE POINTER DST; PTR /SETUP DATA POINTER NL6000 /SETUP THE ASR; ZAP4, DEFRES /ADJUST IT DCA CNT /COUNTER DCA X /CLEAR X CAM /CLEAN UP NL0001 /SETUP HORIZONAL UPDATE FACTOR SHL; ZAP5, DEFRES /ADJUST IT DCA XUPDATE /STASH THE VALUE NL7777 /SETUP TOSSAWAY COUNT SHL; ZAP6, DEFRES /ADJUST IT SHL; OZAP1, DVFACTOR /ADJUST IT DCA TOSSVALUE /STASH THE VALUE JMP I ODSETUP /RETURN / POINTER SETUP ROUTINE. PTRSETU,.-. /SETUP POINTERS ROUTINE DLD; TEMPTR /GET NEW VALUE DST; CURPTR /SETUP CURRENT DISPLAY POINTER DST; PTR /SETUP RETRIEVAL POINTER JMP I PTRSETUP /RETURN / PLOT FINISH ROUTINE. DFINISH,.-. /PLOT FINISH ROUTINE / SINCE WE CAN'T DISABLE THE DISPLAY CURSOR, WE CAN SEND IT TO A NON-DISPLAYABLE / PLACE OFF THE SCREEN. TAD (1600) /SETUP DCA Y /NON-DISPLAYABLE Y JMS I [SETADR] /SETUP THE ADDRESS JMS I [STROUT] /OUTPUT STRINGS VECMODE /GOTO VECTOR MODE ADRBUFFER /OUTPUT ADDRESS 0 /THIS ENDS THE LIST JMP I DFINISH /RETURN / OVERVIEW X-PLOT ROUTINE. ODRAWX, .-. /DRAW X ROUTINE JMS ODSETUP /SETUP FOR OVERVIEW DRAWING ODXLUP, DLD; PTR /GET CURRENT POINTER DAD; MLIMIT /COMPARE TO BLOCK LIMIT SMA CLA /SKIP IF OK JMP I ODRAWX /RETURN IF TOO FAR TAD TOSSVALUE /GET TOSSAWAY VALUE DCA TOSSCNT /STASH THE COUNTER TOSXLUP,JMS I [GETPACKET] /GET A PACKET JMS I [NXTPACKET] /BUMP TO NEXT ISZ TOSSCNT /DONE ENOUGH? JMP TOSXLUP /NO, KEEP GOING TAD LX /GET LATEST AND [1777] /JUST DATA BITS CLL RTL /*4 TAD [4000] /MAKE IT UNSIGNED MQL MUY;[SF] /MULTIPLY BY SCALE FACTOR TAD [XAXIS] /ADD ON BASE DCA Y /STORE Y JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST TAD X /GET CURRENT X TAD XUPDATE /UPDATE IT DCA X /STORE BACK ISZ CNT /DONE ALL YET? JMP ODXLUP /NO, KEEP GOING JMP I ODRAWX /YES, RETURN / OVERVIEW Y-PLOT ROUTINE. ODRAWY, .-. /DRAW Y ROUTINE JMS ODSETUP /SETUP FOR OVERVIEW DRAWING ODYLUP, DLD; PTR /GET CURRENT POINTER DAD; MLIMIT /COMPARE TO BLOCK LIMIT SMA CLA /SKIP IF OK JMP I ODRAWY /RETURN IF TOO FAR TAD TOSSVALUE /GET TOSSAWAY COUNT DCA TOSSCNT /STASH THE COUNTER TOSYLUP,JMS I [GETPACKET] /GET A PACKET JMS I [NXTPACKET] /BUMP TO NEXT ISZ TOSSCNT /DONE ENOUGH? JMP TOSYLUP /NO, KEEP GOING TAD LY /GET LATEST AND [1777] /JUST DATA BITS CLL RTL /*4 TAD [4000] /MAKE IT UNSIGNED MQL MUY;[SF] /MULTIPLY BY SCALE FACTOR TAD [YAXIS] /ADD ON BASE DCA Y /STORE Y JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST TAD X /GET CURRENT X TAD XUPDATE /UPDATE IT DCA X /STORE BACK ISZ CNT /DONE ALL YET? JMP ODYLUP /NO, KEEP GOING JMP I ODRAWY /YES, RETURN / DRAW TIME LINE ROUTINE. DRTLINE,.-. /DRAW TIME LINE ROUTINE JMS I [STROUT] /OUTPUT STRINGS TLINE /DRAW TIME LINE 0 /THIS ENDS THE LIST JMP I DRTLINE /RETURN PAGE / OVERVIEW INDICATORS PLOT ROUTINE. ODRAWIN,.-. /DRAW INDICATORS ROUTINE JMS ODRSETUP /SETUP FOR DISPLAY TAD OVFACTOR /GET OVERVIEW FACTOR TAD [-5] /COMPARE TO LIMIT SPA CLA /SKIP IF SLOWER MODE TAD (JMP NOILINE) /PREVENT LINE DISPLAY ON FASTER MODES DCA LINZAP /STORE IN-LINE EITHER WAY DLD; CURPTR /GET CURRENT POINTER DST; PTR /SETUP DATA POINTER DPSZ /SKIP IF PROBLEM CASE SKP /SKIP IF NORMAL CASE JMP TOSDCHK /JUMP IF PROBLEM CASE OSDLUP, DLD; PTR /GET CURRENT POINTER DAD; MLIMIT /COMPARE TO BLOCK LIMIT SMA CLA /SKIP IF OK JMP I ODRAWINDICATORS /RETURN IF TOO FAR TAD TOSSVALUE /SETUP THE DCA TOSSCNT /INNER LOOP COUNT TOSDLUP,JMS I [GETPACKET] /GET A PACKET TAD (LPACK) /POINT TO IT DCA PNTR /STASH THE POINTER / CDF PRGFLD /GOTO DATA FIELD JMS I (FNDMARKS) /FIND MARKS IN LATEST PACKET JMP TOSDCHK /WEREN'T ANY DLD; CURPTR /GET BASE VALUE DCM /NEGATE DAD; PTR /NOW HAVE OFFSET LSR; 2 /%4 TO HAVE TEK POINTS LSR; OZAP4, DVFACTOR /ADJUST IT MQA /GET OFFSET DCA X /SAVE AS X COORDINATE TAD [XAXIS] /GET BASE DCA AXIS /STASH IT TAD LX /GET X VALUE JMS I [DRAWINDICATORS] /DRAW ON X PLOT TAD [YAXIS] /GET BASE DCA AXIS /STASH IT TAD LY /GET Y VALUE JMS I [DRAWINDICATORS] /DRAW ON Y PLOT / COMES HERE TO GO TO NEXT. TOSDCHK,JMS I [NXTPACKET] /BUMP TO NEXT ISZ TOSSCNT /DONE YET? JMP TOSDLUP /NO, KEEP GOING LINZAP, JMP NOILINE /OR 0000 NL2000 /ADJUST UP TAD CNT /NOW HAVE ADDRESS DCA X /STASH IT TAD (30) /GET LINE ADDRESS DCA Y /STASH IT JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS PPMODE /POINT PLOT MODE ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST NOILINE,ISZ CNT /DONE ALL POINTS? JMP OSDLUP /NO, KEEP GOING JMP I ODRAWINDICATORS /YES, RETURN ODRSETU,.-. /OVERVIEW INDICATORS SETUP ROUTINE CAM /CLEAN UP NL7777 /SETUP LOCAL COUNT SHL; OZAP3, DVFACTOR /ADJUST IT DCA TOSSVALUE /STORE COUNT VALUE TAD TOSSVALUE /GET IT BACK DCA TOSSCNT /SETUP INNER LOOP COUNT NOW NL6000 /SETUP THE DCA CNT /COUNTER JMP I ODRSETUP /RETURN / DRAW "V" OR "O" OR "M" (AND POSSIBLY "Y", "R", "G") AND RESOLUTION FACTOR ON / THE SCREEN ROUTINE. DRAWVOM,.-. /DRAW "V" OR "O" CDF MSGFLD /GOTO MESSAGE FIELD DCA I [DCHAR] /STORE IN MESSAGE CHARACTER TAD (1740) /GET X COORDINATE JMS I (DRAWLETTER) /DRAW THE PASSED CHARACTER CDF MSGFLD /GOTO MESSAGE FIELD TAD ZAPFACTOR /GET ZAP FACTOR TAD ["0&177] /MAKE IT ASCII DCA I [DCHAR] /STORE IN MESSAGE CHARACTER TAD (1760) /GET X COORDINATE JMS I (DRAWLETTER) /DRAW THE NUMBER TAD MDRAW /GET M FLIP-FLOP RAR /TO LINK SZL CLA /SKIP IF MARKS ON JMP TRYSEL /JUMP IF NOT CDF MSGFLD /GOTO MESSAGE FIELD TAD ("Y&177) /GET A "Y" DCA I [DCHAR] /STORE IN MESSAGE CHARACTER TAD (1720) /GET X COORDINATE JMS I (DRAWLETTER) /DRAW "Y" TRYSEL, TAD RDRAW /GET R FLIP-FLOP RAR /TO LINK SZL CLA /SKIP IF MARKS ON JMP TRYVEL /JUMP IF NOT CDF MSGFLD /GOTO MESSAGE FIELD TAD ("R&177) /GET AN "R" DCA I [DCHAR] /STORE IN MESSAGE CHARACTER TAD (1700) /GET X COORDINATE JMS I (DRAWLETTER) /DRAW "R" TRYVEL, TAD ADRAW /GET A FLIP-FLOP RAR /TO LINK SZL CLA /SKIP IF VELOCITY ON JMP I DRAWVOM /RETURN IF NOT CDF MSGFLD /GOTO MESSAGE FIELD TAD ["G&177] /GET A "G" DCA I [DCHAR] /STORE IN MESSAGE CHARACTER TAD (1660) /GET X COORDINATE JMS I (DRAWLETTER) /DRAW "A" JMP I DRAWVOM /RETURN PAGE / OFFSET COMMANDS. PHALF, TAD (2000) /MOVE FORWARD 1/2 SCREEN PQUARTE,TAD (2000) /MOVE FORWARD 1/4 SCREEN MQL /TO LOW-ORDER / NL0000 /WANT POSITIVE FORM JMP PCOMMON /CONTINUE THERE MHALF, TAD (2000) /MOVE BACKWARD 1/2 SCREEN MQUARTE,TAD (2000) /MOVE BACKWARD 1/4 SCREEN MQL /TO LOW-0RDER DCM /WANT NEGATIVE FORM PCOMMON,JMS LIMCHK /CHECK IF NEW VALUE IS OK DLD; TEMP /GET THE OK VALUE DST; OFFSET /STORE COMPOSITE JMP I [PLTFRC] /CONTINUE THERE / COMES HERE FOR UNIMPLEMENTED COMMAND CHARACTERS. DOBELL, CLA /CLEAN UP TAD ["G&37] /GET A JMS I [TERMOUT] /RING IT JMP I (PLTLUP) /KEEP GOING / COMES HERE FOR HELP COMMAND. DOHELP, JMS I [SCRMSG] /PRINT SCREEN MESSAGE HLPMSG /OPENING MESSAGE JMP I [PLTFRC] /KEEP GOING / COMES HERE TO HANDLE ESCAPE SEQUENCES. DOESC, TAD ["G&37] /GET A JMS I [TERMOUT] /RING IT ESCLP1, JMS I [RINTEST] /TRY TO GET INPUT SKP /WASN'T ANY JMP ESCLP1 /TOSS AND TRY AGAIN TAD (-5000) /SETUP THE DCA CNT /WASTE COUNT ESCLP2, JMS I [RINTEST] /TRY TO GET INPUT SKP /WASN'T ANY JMP ESCLP1 /TOSS AND TRY ALL OVER AGAIN ISZ CNT /QUIET LONG ENOUGH? JMP ESCLP2 /NO, KEEP GOING JMP I (PLTLUP) /YES, GO BACK FOR MORE INPUT / SHOULD NEVER GET HERE! KERROR, HLT /BARF! JMP I [SBOOT] /GOODBYE! / COMES HERE TO LOWER PLOT RESOLUTION. LPAREN, NL0001 /SET UPDATE FACTOR TAD ZAPFACTOR /GET CURRENT VALUE TAD PUTBACK /ADD ON PUT BACK FACTOR TAD [-7] /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF NOT TOO FAR JMP DOBELL /JUMP IF TOO FAR ISZ ZAPFACTOR /ALLOW UPDATE ZAPCOMM,JMS I [SETZAP] /SETUP NEW ZAP FACTOR JMP I [PLTFRC] /CONTINUE THERE / COMES HERE TO RAISE PLOT RESOLUTION. RPAREN, NL7777 /SET BACKUP FACTOR TAD ZAPFACTOR /TRY TO DECREMENT SPA /SKIP IF OK JMP DOBELL /JUMP IF NOT DCA ZAPFACTOR /STORE UPDATED VALUE JMP ZAPCOMMON /CONTINUE THERE / TIME PLOT CONTROL. TFLIP, JMS EDCHECK /CHECK IF IN EDIT MODE ISZ TDRAW /CHANGE STATE NOP /JUST IN CASE JMP I [PLTFRC] /CONTINUE THERE / BEGIN/END MARKS PLOT CONTROL. MFLIP, JMS EDCHECK /CHECK IF IN EDIT MODE ISZ MDRAW /CHANGE STATE NOP /JUST IN CASE JMP I [PLTFRC] /CONTINUE THERE / REQUEST MARKS PLOT CONTROL. SFLIP, JMS EDCHECK /CHECK IF IN EDIT MODE ISZ RDRAW /CHANGE STATE NOP /JUST IN CASE JMP I [PLTFRC] /CONTINUE THERE / AVERAGE VELOCITY PLOT CONTROL. AFLIP, ISZ ADRAW /CHANGE STATE NOP /JUST IN CASE JMP I [PLTFRC] /CONTINUE THERE / OVERVIEW COMMAND. OVERVIE,JMS EDCHECK /CHECK IF IN EDIT MODE TAD (OVIEWMODE-VIEWMODE) /SETUP ROUTINE ADDRESS SKP /DON'T CHECK AGAIN / VIEW COMMAND. VIEW, JMS EDCHECK /CHECK IF IN EDIT MODE TAD (VIEWMODE) /SETUP ROUTINE ADDRESS DCA MODE /STORE OPERATION MODE ADDRESS JMP I [PLTFRC] /CONTINUE THERE / JUSTIFY COMMAND. JUSTIFY,JMS I [GINPROCESS] /GET GRAPHICS INPUT VALUE JMP PCOMMON /CONTINUE THERE LIMCHK, .-. /LIMIT CHECK ROUTINE JMS I ADJUST /ADJUST THE VALUE DAD; OFFSET /ADD ON CURRENT OFFSET DST; TEMP /SAVE FOR NOW AND [7600] /CHECK FOR BAD BITS SZA CLA /SKIP IF OK JMP DOBELL /JUMP IF NOT TAD TEMP+1 /RESTORE HIGH-ORDER DAD; DOFFSET /ADD ON DISPLAY OFFSET DAD; MLIMIT /COMPARE TO BLOCK LIMIT SMA CLA /SKIP IF OK JMP DOBELL /ELSE COMPLAIN JMP I LIMCHK /RETURN WITH VALUE TESTED OK EDCHECK,.-. /CHECK IF IN EDIT MODE TAD I [EMZAP] /GET EDIT CONTROL WORD SNA CLA /SKIP IF NOT ZAPPED JMP DOBELL /COMPLAIN IF ZAPPED JMP I EDCHECK /NOT IN EDIT MODE, SO RETURN SCRMSG, .-. /SCREEN MESSAGE ROUTINE CLA /CLEAN UP DCA X /CLEAR X TAD [1777] /SETUP A DCA Y /GOOD Y JMS I [SETADR] /SETUP ADDRESS BUFFER JMS I [STROUT] /SEND STRINGS TO TERMINAL VECMODE /VECTOR MODE ADRBUFFER /ADDRESS ANOMOVE /GOTO ALPHA MODE SCHARS /WANT STANDARD CHARACTERS 0 /THIS ENDS THE LIST TAD I SCRMSG /GET THE ADDRESS ARGUMENT DCA .+2 /STORE IN-LINE JMS I [TERMPRT] /OUTPUT THE MESSAGE .-. /WILL BE PASSED MESSAGE ADDRESS ISZ SCRMSG /BUMP PAST ARGUMENT SCWATLP,JMS I [RINPUT] /GET A CHARACTER TAD [-"M!300] /COMPARE TO SZA CLA /SKIP IF IT MATCHES JMP SCWATLP /ELSE KEEP WAITING JMP I SCRMSG /RETURN PAGE / MAGNIFY (ZOOM) COMMAND. MAGNIFY,JMS MODECHECK /CHECK FOR VIEW MODE JMP OMAGNIFY /WAS OVERVIEW MODE / COMES HERE TO INCREASE DISPLAY MAGNIFICATION IN VIEW MODE. NL0001 /SET TENTATIVE INCREMENT TAD MAGFACTOR /ADD ON CURRENT VALUE TAD [-5] /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF OK JMP I [DOBELL] /ELSE COMPLAIN ISZ MAGFACTOR /BUMP THE MAGNIFICATION FACTOR / SINCE WE INCREASED MAGNIFICATION, WE CAN INCREASE RESOLUTION WITHOUT CHANGING / THE DRAWING TIME SIGNIFICANTLY. TAD ZAPFACTOR /GET CURRENT RESOLUTION FACTOR SNA CLA /SKIP IF SOMETHING SET JMP MAGCOMMON /ELSE IGNORE IT NL7777 /BACKUP TAD ZAPFACTOR /UPDATE IT DCA ZAPFACTOR /STORE BACK ISZ PUTBACK /KEEP TRACK OF THE CHANGE FOR LATER MAGCOMM,JMS SETMAGNIFY /SETUP NEW MAGNIFICATION FACTOR JMP I (ZAPCOMMON) /CONTINUE THERE / DEMAGNIFY (SHRINK) COMMAND. DEMAGNI,JMS MODECHECK /CHECK FOR VIEW MODE JMP ODEMAGNIFY /WAS OVERVIEW MODE / COMES HERE TO DECREASE DISPLAY MAGNIFICATION IN VIEW MODE. NL7777 /SET TENTATIVE DECREMENT TAD MAGFACTOR /TRY TO DECREMENT MAGNIFICATION FACTOR SPA /SKIP IF POSSIBLE JMP I [DOBELL] /ELSE COMPLAIN DCA MAGFACTOR /UPDATE THE MAGNIFICATION FACTOR TAD PUTBACK /SHOULD WE ADJUST RESOLUTION? SNA CLA /SKIP IF SO JMP MAGCOMMON /JUMP IF NOT NL7777 /BACKUP TAD PUTBACK /PUT BACK FACTOR DCA PUTBACK /UPDATE NL0001 /SET TENTATIVE INCREMENT TAD ZAPFACTOR /ADD ON CURRENT FACTOR TAD [-7] /COMPARE TO UPPER LIMIT SPA CLA /SKIP IF TOO FAR ISZ ZAPFACTOR /LOWER RESOLUTION JMP MAGCOMMON /CONTINUE THERE / COMES HERE TO INCREASE MAGNIFICATION IN OVERVEW MODE. OMAGNIF,NL7777 /SET TENTATIVE DECREMENT TAD OVFACTOR /TRY TO DECREMENT MAGNIFICATION FACTOR SPA /SKIP IF POSSIBLE JMP I [DOBELL] /ELSE COMPLAIN DCA OVFACTOR /UPDATE THE MAGNIFICATION FACTOR OVCOMMO,TAD OVFACTOR /GET MAGNIFICATION FACTOR JMS DOZAPS /ZAP IT IN OZAP1 /OVERVIEW PLOT TOSSAWAY COUNT SETUP / OZAP2 /OBSOLETE OZAP3 /OVERVIEW MARKS INNER LOOP COUNT OZAP4 /OVERVIEW MARKS X ADJUST OZAP5 /OVERVIEW DRAWTIME TIME ADJUST 0 /THIS ENDS THE LIST JMP I [PLTFRC] /CONTINUE THERE / COMES HERE TO DECREASE MAGNIFICATION IN OVERVIEW MODE. ODEMAGN,NL0001 /SET TENTATIVE INCREMENT TAD OVFACTOR /ADD ON CURRENT VALUE TAD [-10] /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF OK JMP I [DOBELL] /ELSE COMPLAIN ISZ OVFACTOR /BUMP THE MAGNIFICATION FACTOR JMP OVCOMMON /CONTINUE THERE / MODE CHECK ROUTINE. MODECHE,.-. /MODE CHECK ROUTINE TAD MODE /GET OPERATING MODE TAD (-VIEWMODE) /COMPARE TO VIEW MODE SNA CLA /SKIP IF OVERVIEW MODE ISZ MODECHECK /TAKE SKIP RETURN IF VIEW MODE JMP I MODECHECK /RETURN EITHER WAY SETMAGN,.-. /SETUP MAGNIFICTION FACTOR TAD MAGFACTOR /GET MAGNIFICATION FACTOR JMS DOZAPS /GO ZAP IT IN MZAP1 /VIEW MODE COUNT SETUP MZAP2 /VIEW MODE HORIZONTAL UPDATE MZAP3 /VIEW MODE INDICATOR'S COUNTER MZAP4 /VIEW MODE INDICATOR'S UPDATE MZAP5 /VIEW MODE DRAWTIME TIME ADJUST 0 /THIS ENDS THE LIST JMP I SETMAGNIFY /RETURN / STATUS WORD DRAWING ROUTINE. DRAWPS, .-. /DRAW EITHER STATUS WORD ROUTINE AND BCONTRL /GET REQUESTED BIT SZA CLA /SKIP IF OFF TAD (REMOMSG-PRESMSG) /CHANGE IF ON TAD (PRESMSG) /GET BASIC MESSAGE ADDRESS DCA DRPSARG /STORE IN-LINE TAD I DRAWPS /GET X-COORDINATE DCA X /STASH IT ISZ DRAWPS /BUMP TO NEXT TAD I DRAWPS /GET Y-COORDINATE DCA Y /STASH IT JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS LEVCOM /COMPLEMENT LEVEL VECMODE /GOTO VECTOR MODE ADRBUFFER /ADDRESS ANOMOVE /GOTO ALPHA MODE SCHARS /STANDARD CHARACTERS 0 /THIS ENDS THE LIST JMS I [TERMPRT] /OUTPUT THE MESSAGE DRPSARG,.-. /WILL BE MESSAGE POINTER JMS I [STROUT] /OUTPUT STRINGS LEVSET /USE SET LEVEL 0 /THIS ENDS THE LIST ISZ DRAWPS /BUMP PAST ARGUMENT JMP I DRAWPS /RETURN SETZAP, .-. /SETUP ZAP FACTOR TAD ZAPFACTOR /GET ZAP FACTOR JMS DOZAPS /GO ZAP IT IN ZAP1 /VIEW MODE COUNT ZAP2 /VIEW MODE POINTER UPDATE ZAP3 /VIEW MODE X UPDATE ZAP4 /OVERVIEW MODE COUNT ZAP5 /OVERVIEW MODE X UPDATE ZAP6 /OVERVIEW MODE TOSSAWAY COUNT 0 /THIS ENDS THE LIST JMP I SETZAP /RETURN / ZAPPING ROUTINE. DOZAPS, .-. /ZAPPING ROUTINE DCA TEMP /STASH THE VALUE DOZPLP, TAD I DOZAPS /GET AN ADDRESS SNA /END OF LIST? JMP I DOZAPS /YES, RETURN DCA PNTR /NO, STASH THE POINTER TAD TEMP /GET THE VALUE DCA I PNTR /ZAP IT IN ISZ DOZAPS /BUMP TO NEXT JMP DOZPLP /KEEP GOING PAGE / POSITION AND MARK COMMAND. POSIT, JMS I (EDCHECK) /CHECK FOR EDIT MODE DLD; OFFSET /GET CURRENT OFFSET DST; OFFSAVE /SAVE IT JMS I [GINPROCESS] /GET GRAPHICS INPUT JMS I (LIMCHK) /CHECK IF A GOOD POSITION JMS ETEST /SET EDIT MODE NOW DLD; TEMP /GET GOOD POSITION DST; OFFSET /STORE NEW VALUE JMP PEDIT /CONTINUE THERE ETEST, .-. /EDIT MODE TEST ROUTINE JMS I (EDCHECK) /CHECK IF ALREADY IN EDIT MODE DCA I [EMZAP] /TURN ON EDIT MODE JMP I ETEST /RETURN / EDIT MODE CHECK ROUTINE. EOK, .-. /CHECK IF OK TO DO IN EDIT MODE TAD I [EMZAP] /GET INDICATOR SZA CLA /SKIP IF IN EDIT MODE JMP I [DOBELL] /COMPLAIN IF NOT JMP I EOK /RETURN / EDIT COMMAND. EDIT, JMS ETEST /ENSURE NOT IN EDIT MODE ALREADY DLD; OFFSET /GET CURRENT OFFSET DST; OFFSAVE /SAVE IT PEDIT, CAM /CLEAN UP TAD MODE /GET CURRENT MODE DCA MODESAVE /SAVE IT TAD (VIEWMODE) /SETUP DCA MODE /VIEW MODE TAD MDRAW /GET BEGIN/END MARKS DISPLAY MODE DCA MDRAWSAVE /SAVE IT DCA MDRAW /ENABLE BEGIN/END MARKS TAD RDRAW /GET REQUEST MARKS DISPLAY MODE DCA RDRAWSAVE /SAVE IT DCA RDRAW /ENABLE REQUEST MARKS TAD TDRAW /GET TIME DRAW MODE DCA TDRAWSAVE /SAVE IT DCA TDRAW /ENABLE TIME DRAW TAD ADJUST /GET CURRENT ADJUST POINTER DCA ADJUSAVE /SAVE IT TAD PUTBACK /GET PUTBACK FACTOR DCA PUTBASAVE /SAVE IT DCA PUTBACK /CLEAR IT TAD MAGFACTOR /GET CURRENT MAGNIFICATION FACTOR DCA MAGSAVE /SAVE IT TAD (EMAGFACTOR) /GET OUR FACTOR DCA MAGFACTOR /SET IT UP JMS I (SETMAGNIFY) /ZAP IT IN TAD ZAPFACTOR /GET CURRENT ZAP FACTOR DCA ZAPSAVE /SAVE IT TAD (EZAPFACTOR) /GET OUR FACTOR EEXENTR,DCA ZAPFACTOR /SET IT UP JMS I [SETZAP] /ZAP IT IN JMP I [PLTFRC] /CONTINUE THERE / COMES HERE TO EXIT EDIT MODE. EEXIT, JMS EOK /CHECK IF OK TO LEAVE DLD; OFFSAVE /RESTORE THE DST; OFFSET /ORIGINAL OFFSET CAM /CLEAN UP TAD (SKP) /RESTORE THE DCA I [EMZAP] /PREVAILING MODE TAD MODESAVE /RESTORE THE DCA MODE /PREVIOUS MODE TAD MDRAWSAVE /RESTORE THE DCA MDRAW /ORIGINAL BEGIN/END MODE TAD RDRAWSAVE /RESTORE THE DCA RDRAW /ORIGINAL REQUEST DISPLAY MODE TAD TDRAWSAVE /RESTORE THE DCA TDRAW /ORIGINAL TIME DRAW MODE TAD ADJUSAVE /RESTORE THE DCA ADJUST /ORIGINAL ADJUST POINTER TAD PUTBASAVE /RESTORE THE DCA PUTBACK /ORIGINAL PUTBACK FACTOR TAD MAGSAVE /RESTORE THE DCA MAGFACTOR /ORIGINAL MAGNIFICATION FACTOR JMS I (SETMAGNIFY) /ZAP IT IN TAD ZAPSAVE /RESTORE THE ORIGINAL ZAP FACTOR JMP EEXENTRY /CONTINUE THERE ADJUSAV,.-. /ADJUST POINTER SAVED HERE MAGSAVE,.-. /MAGNIFICATION FACTOR SAVED HERE MDRAWSA,.-. /BEGIN/END MODE SAVED HERE MODESAV,.-. /VIEW/OVERVIEW MODE SAVED HERE OFFSAVE,ZBLOCK 2 /OFFSET SAVED HERE PTRSAVE,.-. /PTRSETUP SAVED HERE PUTBASA,.-. /PUTBACK FACTOR SAVED HERE RDRAWSA,.-. /REQUEST DISPLAY MODE SAVED HERE TDRAWSA,.-. /TIME DISPLAY MODE SAVED HERE ZAPSAVE,.-. /RESOLUTION FACTOR SAVED HERE PAGE / COMES HERE FOR EDITING BEGIN MARKS. EBEGIN, JMS I (EOK) /CHECK IF OK TAD (EBEGDO) /POINT TO DCA EPTR /OUR ROUTINE ECOMMON,JMS I [GINPROCESS] /GET INPUT DCA ESW /SAVE LEFT/RIGHT VALUE JMS I ADJUST /ADJUST THE VALUE DAD; CURPTR /ADD TO SCREEN BASE DST; PTR /STORE AS DATA POINTER JMS I [GETPACKET] /GET LATEST PACKET CDF DATFLD /GOTO DATA FIELD JMP I EPTR /GOTO PROPER ROUTINE / BEGIN MARK ROUTINE. EBEGDO, TAD I PTRLO /GET THE X-WORD AND [1777] /REMOVE BEGIN, BLINK BITS ISZ ESW /INSERT OR DELETE? TAD [4000] /INSERT BEGIN BIT DCA I PTRLO /STORE EITHER WAY ISZ PTRLO /BUMP TO Y-WORD TAD I PTRLO /GET THE Y-WORD AND [1777] /REMOVE END, MAXIMUM VELOCITY BITS EENDCOM,DCA I PTRLO /STORE BACK ISZ PTRLO /BUMP TO TIME-WORD ISZ PTRLO /BUMP TO EXTRA-WORD NL3777 /SET MASK AND I PTRLO /REMOVE SLOW-PHASE BIT ESTRCOM,DCA I PTRLO /STORE BACK ECOMXIT,CDF PRGFLD /BACK TO OUR FIELD DCA BDIRTY /FORCE IT TO BE WRITTEN JMP I [PLTFRC] /CONTINUE THERE / COMES HERE FOR EDITING END MARKS. EEND, JMS I (EOK) /CHECK IF OK TAD (EENDDO) /POINT TO DCA EPTR /OUR ROUTINE JMP ECOMMON /CONTINUE THERE / END MARK ROUTINE. EENDDO, TAD I PTRLO /GET THE X-WORD AND [1777] /REMOVE BEGIN, BLINK BITS DCA I PTRLO /STORE BACK ISZ PTRLO /BUMP TO NEXT TAD I PTRLO /GET THE Y-WORD AND [1777] /REMOVE END, MAXIMUM VELOCITY BITS ISZ ESW /INSERT OR DELETE? TAD [4000] /INSERT END BIT JMP EENDCOMMON /CONTINUE THERE / COMES HERE FOR EDITING START MARKS. ESTART, JMS I (EOK) /CHECK IF OK TAD (ESTRDO) /POINT TO DCA EPTR /OUR ROUTINE JMP ECOMMON /CONTINUE THERE / START MARK ROUTINE. ESTRDO, ISZ PTRLO /BUMP TO Y-WORD ISZ PTRLO /BUMP TO TIME-WORD ISZ PTRLO /BUMP TO EXTRA-WORD TAD I PTRLO /GET THE EXTRA-WORD AND (7774) /REMOVE START, FINISH BITS ISZ ESW /INSERT OR DELETE? TAD (2) /INSERT START BIT JMP ESTRCOMMON /CONTINUE THERE / COMES HERE FOR EDITING FINISH MARKS. EFINISH,JMS I (EOK) /CHECK IF OK TAD (EFINDO) /POINT TO DCA EPTR /OUR ROUTINE JMP ECOMMON /CONTINUE THERE / FINISH MARK ROUTINE. EFINDO, ISZ PTRLO /BUMP TO Y-WORD ISZ PTRLO /BUMP TO TIME-WORD ISZ PTRLO /BUMP TO EXTRA-WORD TAD I PTRLO /GET THE EXTRA-WORD AND (7774) /REMOVE START, FINISH BITS ISZ ESW /INSERT OR DELETE? IAC /INSERT FINISH BIT JMP ESTRCOMMON /CONTINUE THERE / TIME INDICATOR PLOT ROUTINE. DRAWTIM,.-. /TIME PLOT ROUTINE JMS I [STROUT] /OUTPUT THE TICKS /TICK MARKS FIRST 0 /THIS ENDS THE LIST DCA X /USE LEFT MARGIN FIRST DCA Y /ALWAYS USE LOWEST VERTICAL DLD; CURPTR /GET LATEST VALUE JMS I (TIMPRNT) /PLOT IT TAD (400) /SET FIRST QUARTER DCA X /SETUP X DLD; D2000 /GET INCREMENT JMS I ADJUST /ADJUST IT DAD; CURPTR /ADD LATEST VALUE JMS I (TIMPRNT) /PLOT IT TAD (1000) /SET FIRST HALF DCA X /SETUP X DLD; D4000 /GET INCREMENT JMS I ADJUST /ADJUST IT DAD; CURPTR /ADD LATEST VALUE JMS I (TIMPRNT) /PLOT IT TAD (1400) /SET THIRD QUARTER DCA X /SETUP X DLD; D6000 /GET INCREMENT JMS I ADJUST /ADJUST IT DAD; CURPTR /ADD LATEST VALUE JMS I (TIMPRNT) /PLOT IT JMP I DRAWTIME /RETURN EPTR, .-. /ROUTINE POINTER ESW, .-. /LEFT/RIGHT SWITCH PAGE / GRAPHICS IN MODE PROCESSING ROUTINE. GINPROC,.-. /GRAPHICS IN PROCESSING ROUTINE GINAGN, JMS GINPUT /GET USER INPUT POSITION JMS I (MODECHECK) /CHECK OPERATING MODE SKP /SKIP IF OVERVIEW MODE TAD MAGFACTOR /GET MAGNIFICATION IF IN VIEW MODE DCA ADJ1 /STORE IN-LINE TAD ADJ1 /GET IT BACK DCA ADJ2 /STORE IN-LINE TAD GINHORIZONTAL /GET INPUT POSITION LSR; ADJ1, .-. /ADJUST IT MQL /TO LOW-ORDER SWP /GET IT BACK WITH CLEAN LOW-ORDER SHL; ADJ2, .-. /NOW HAVE PROPER BIT LENGTH LSR; 12 /SETUP POSITION*4 TAD RCHAR /GET TERMINATING CHARACTER TAD (-"X!300) /COMPARE TO ABORT BUTTON VALUE SNA /SKIP IF OTHER JMP I [PLTFRC] /FORGET IT TAD (-"L+"X) /COMPARE TO LEFT BUTTON VALUE SNA /SKIP IF OTHER JMP I GINPROCESS /RETURN WITH LEFT BUTTON INDICATION TAD (-"R+"L) /COMPARE TO RIGHT BUTTON VALUE SZA CLA /SKIP IF IT MATCHES JMP GINBELL /COMPLAIN OF BAD TERMINATOR NL7777 /ADD 7777,0000 JMP I GINPROCESS /RETURN WITH RIGHT BUTTON INDICATION / COMES HERE IF OTHER (KEYBOARD) CHARACTER PRESSED. GINBELL,TAD ["G&37] /GET A JMS I [TERMOUT] /RING IT JMP GINAGN /TRY AGAIN / GIN MODE ROUTINE. RETURNS WITH TERMINATING CHARACTER IN RCHAR, HORIZONTAL / POSITION IN GINHORIZONTAL AND VERTICAL POSITION IN GINVERTICAL. THE INITIAL / COORDINATES FOR THE GIN CROSS-HAIR DISPLAY ARE TAKEN FROM GINHORIZONTAL AND / GINVERTICAL. GINPUT, .-. /GIN MODE ROUTINE CLA /CLEAN UP TAD GINHORIZONTAL /SETUP DCA X /X TAD GINVERTICAL /SETUP DCA Y /Y JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS VECMODE /GOTO VECTOR MODE ADRBUFFER /ADDRESS NOTERM /GIN MODE WITHOUT TERMINATOR CROSSADR /LOAD CROSSHAIR ADDRESS GINMODE /GRAPHICS INPUT MODE 0 /THIS ENDS THE LIST JMS I [RINPUT] /GET RETURN CHARACTER DCA RCHAR /STASH IT JMS I [RINPUT] /GET HIGH-X DCA CNT /SAVE IT JMS I [RINPUT] /GET LOW-X DCA GINHORIZONTAL /SAVE IT JMS I [RINPUT] /GET HIGH-Y DCA GINVERTICAL /SAVE IT JMS I [RINPUT] /GET LOW-Y DCA TEMP /SAVE IT TAD GINVERTICAL /GET HIGH-Y TAD [-40] /REMOVE ASCII BSW;CLL RAR /MOVE UP TAD TEMP /ADD ON LOW-Y TAD [-40] /REMOVE ASCII DCA GINVERTICAL /SAVE POSITION TAD CNT /GET HIGH-X TAD [-40] /REMOVE ASCII BSW;CLL RAR /MOVE UP TAD GINHORIZONTAL /ADD ON LOW-X TAD [-40] /REMOVE ASCII DCA GINHORIZONTAL /SAVE POSITION JMS I [DFINISH] /FINISH UP JMP I GINPUT /RETURN / SCREEN MESSAGE ROUTINE. SPRINT, .-. /SCREEN MESSAGE PRINT ROUTINE TAD DSCHARS/(SCHARS) /RESET THE DCA SPRZAP /CHARACTER SIZE SPRLOOP,TAD I SPRINT /GET X-POSITION ISZ SPRINT /BUMP TO NEXT CMA /INVERT FOR TEST SNA /SKIP IF NOT END OF LISTS JMP I SPRINT /RETURN IF AT END CMA /INVERT BACK DCA X /STASH X-POSITION TAD I SPRINT /GET Y-POSITION DCA Y /STASH IT ISZ SPRINT /BUMP TO NEXT TAD I SPRINT /GET MESSAGE POINTER DCA SPRARG /STORE IN-LINE JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /SEND STRINGS TO TERMINAL VECMODE /VECTOR MODE ADRBUFFER /ADDRESS ANOMOVE /GOTO ALPHA MODE SPRZAP, SCHARS /WANT STANDARD CHARACTERS 0 /THIS ENDS THE LIST JMS I [TERMPRT] /OUTPUT THE MESSAGE SPRARG, .-. /WILL BE PASSED MESSAGE ADDRESS ISZ SPRINT /BUMP NO NEXT JMP SPRLOOP /KEEP GOING / FINE PRINT ROUTINE. TPRINT, .-. /TINY PRINT ROUTINE TAD TPRINT /GET OUR CALLER DCA SPRINT /MAKE IT THEIRS TAD (TCHARS) /GET TINY SIZE JMP SPRLOOP-1 /CONTINUE THERE DRAWLET,.-. /DRAW A LETTER ROUTINE DCA X /SETUP PASSED X VALUE DCA Y /CLEAR Y / CDF PRGFLD /BACK TO OUR FIELD JMS I [SETADR] /SETUP ADDRESS BUFFER JMS I [STROUT] /SEND STRINGS TO TERMINAL VECMODE /VECTOR MODE ADRBUFFER /ADDRESS ANOMOVE /GOTO ALPHA MODE DSCHARS,SCHARS /WANT STANDARD CHARACTERS DCHAR /MESSAGE CHARACTER 0 /THIS ENDS THE LIST JMP I DRAWLETTER /RETURN / VIEW MODE ADJUSTMENT ROUTINE. VADJUST,.-. /ADJUSTMENT ROUTINE. ASR; MZAP5, 0 /ADJUST IT JMP I VADJUST /RETURN / OVERVIEW ADJUSTMENT ROUTINE. OADJUST,.-. /ADJUSTMENT ROUTINE SHL; OZAP5, DVFACTOR /ADJUST IT JMP I OADJUST /RETURN PAGE / INDICATOR ROUTINE. INDICAT,.-. /DRAW INDICATORS ROUTINE JMS INSETUP /SETUP INDICATORS DISPLAY INLOOP, CDF DFIELD /GOTO DISPLAY FIELD JMS FNDMARKS /FIND MARKS IN LATEST JMP INCHECK /WASN'T ANY CAM /CLEAN UP NL7776 /SET MASK AND PNTR /JUST GOOD BITS CLL RTR /%4 / AND [1777] /JUST GOOD BITS SHL; MZAP4, 0 /ADJUST IT DCA X /SETUP X TAD [XAXIS] /GET X'S BASE DCA AXIS /STASH IT NL7777 /BACKUP TAD PNTR /GET THE POINTER DCA XR2 /STASH IT CDF DFIELD /GOTO DATA FIELD TAD I XR2 /GET X VALUE JMS I [DRAWINDICATOR] /DRAW INDICATOR ON X POINT TAD [YAXIS] /GET Y'S BASE DCA AXIS /STASH IT CDF DFIELD /GOTO DATA FIELD TAD I XR2 /GET Y VALUE JMS I [DRAWINDICATOR] /DRAW INDICATOR ON Y POINT INCHECK,NL0004 /SET UPDATE FACTOR TAD PNTR /UPDATE THE POINTER DCA PNTR /STORE BACK ISZ CNT /DONE YET? JMP INLOOP /NO, KEEP GOING CDF PRGFLD /BACK TO OUR FIELD JMP I INDICATE /RETURN / FIND MARKS IN LATEST PACKET ROUTINE. / SETUP DATA FIELD AND PNTR FOR LATEST PACKET. FNDMARK,.-. /FIND MARKS ROUTINE NL0001 /SET INCREMENT TAD PNTR /POINT TO Y-WORD DCA TEMP /STASH THE POINTER NL0001 /SETUP MASK AND MDRAW /GET THE BIT SZA CLA /SKIP IF BEGIN/END MARKS NEEDED JMP NOMARKS /JUMP IF NOT TAD I PNTR /GET FIRST WORD SPA CLA /SKIP IF NOT A BEGIN MARK JMP FBEGIN /JUMP IF SOME FORM OF BEGINNING TAD I TEMP /GET SECOND WORD SPA /SKIP IF NOT AN END MARK JMP FEND /JUMP IF SOME FORM OF ENDING RAL /MOVE UP SPA CLA /SKIP IF NOT MAXIMUM VELOCITY MARK JMP MAXVELOCITY /JUMP IF MAXIMUM VELOCITY MARK ISZ TEMP /BUMP TO SPIKE WORD / DO SPIKE HANDLING HERE. SKP /DON'T BUMP AGAIN / COMES HERE IF BEGIN/END MARKS NOT WANTED. NOMARKS,ISZ TEMP /BUMP TO SPIKE WORD ISZ TEMP /BUMP TO REQUEST WORD FNDSEL, NL0001 /SET MASK AND RDRAW /GET THE BIT SZA CLA /SKIP IF OFF JMP FNDEXIT /RETURN IF REQUEST MARKS NOT NEEDED TAD I TEMP /GET FOURTH WORD RTR /MOVE UP REQUEST BITS SPA CLA /SKIP IF NOT A REQUEST FINISH MARK JMP FSELEND /JUMP IF A REQUEST FINISH MARK SZL /SKIP IF NOT A REQUEST START MARK JMP FSELBEGIN /JUMP IF A REQUEST START MARK FNDEXIT,CDF PRGFLD /BACK TO OUR FIELD JMP I FNDMARKS /RETURN / COMES HERE IF A BEGIN MARK. FBEGIN, NL2000 /SET BLINK MASK AND I PNTR /GET THE BIT SZA CLA /SKIP IF NOT A BLINK JMP BBLINK /JUMP IF A BLINK BEGIN MARK ISZ TEMP /BUMP TO SPIKE WORD ISZ TEMP /BUMP TO EXTRA WORD TAD I TEMP /GET EXTRA WORD SMA CLA /SKIP IF SLOW-PHASE BEGIN MARK BFAST, TAD ("B-"B-40) /MAKE IT "B" BSLOW, TAD ("B+40-"<) /MAKE IT LOWER-CASE "B" BBLINK, TAD ("<-"V-40) /MAKE IT "<" MAXVELO,TAD ("V+40-"S) /MAKE IT LOWER-CASE "V" FSELBEG,TAD ("S&177) /MAKE IT "S" CDF MSGFLD /GOTO MESSAGE FIELD DCA I [DCHAR] /STORE IN MESSAGE TAD [17] /SETUP POSITIVE INCREMENT FCOMMON,DCA DINCR /STASH IT ISZ FNDMARKS /BUMP RETURN ADDRESS JMP FNDEXIT /FINISH IT THERE / COMES HERE IF AN END MARK. FEND, NL2000 /SETUP BLINK MASK AND I PNTR /GET THE BIT SZA CLA /SKIP IF NOT A BLINK JMP EBLINK /JUMP IF A BLINK END MARK ISZ TEMP /BUMP TO SPIKE WORD ISZ TEMP /BUMP TO EXTRA WORD TAD I TEMP /GET EXTRA WORD SMA CLA /SKIP IF SLOW-PHASE BEGIN MARK EFAST, TAD ("E-"E-40) /MAKE IT "E" ESLOW, TAD ("E+40-">) /MAKE IT LOWER-CASE "E" EBLINK, TAD (">-"F) /MAKE IT ">" FSELEND,TAD ("F&177) /MAKE IT "F" CDF MSGFLD /GOTO MESSAGE FIELD DCA I [DCHAR] /STORE IN MESSAGE TAD (-17) /SETUP NEGATIVE INCREMENT JMP FCOMMON /CONTINUE THERE INSETUP,.-. /INDICATORS SETUP ROUTINE NL6000 /SETUP DISPLAY COUNT ASR; MZAP3, 0 /ADJUST IT DCA CNT /STORE THE COUNT DCA PNTR /SETUP DATA POINTER / WE MUST CHECK FOR THE FIRST BUFFER AND BYPASS THE LIMIT WORD. DLD; CURPTR /GET STARTING ADDRESS DPSZ /SKIP IF THIS IS THE FIRST DATA JMP INSTRT /JUMP IF NOT ISZ CNT /COUNT FIRST POINT NL0004 /POINT PAST DCA PNTR /INVALID DATA INSTRT, CLA /CLEAN UP JMP I INSETUP /RETURN PAGE DRAWIND,.-. /DRAW THE INDICATOR ROUTINE CDF PRGFLD /BACK TO OUR FIELD AND [1777] /JUST DATA BITS CLL RTL /MOVE UP TAD [4000] /MAKE IT UNSIGNED MQL MUY;[SF] /MULTIPLY BY SCALE FACTOR TAD AXIS /ADD ON DESIGNATED AXIS JMS INDRAW /DRAW INDICATOR LINE AND LETTER JMP I DRAWINDICATOR /RETURN INDRAW, .-. /INDICATOR LINE AND LETTER ROUTINE DCA Y /STASH THE Y VALUE JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS VECMODE /GOTO VECTOR MODE ADRBUFFER /OUTPUT ADDRESS 0 /THIS ENDS THE LIST TAD Y /GET Y TAD DINCR /ADD ON INCREMENT/DECREMENT VALUE DCA Y /STORE BACK JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS ADRBUFFER /OUTPUT ADDRESS 0 /THIS ENDS THE LIST TAD DINCR /GET INCREMENT/DECRMENT VALUE SPA CLA /SKIP IF POSITIVE TAD (-22) /ELSE MAKE IT MORE NEGATIVE TAD (3) /USE POSITIVE INCREMENT ANYWAY TAD Y /UPDATE Y DCA Y /STORE BACK JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS VECMODE /GOTO VECTOR MODE ADRBUFFER /OUTPUT ADDRESS ANOMOVE /GOTO ALPHA MODE TCHARS /WANT TINY CHARACTERS DCHAR /OUTPUT CHARACTER 0 /THIS ENDS THE LIST JMP I INDRAW /RETURN / SUPPORT ROUTINES. / X DATA PLOT ROUTINE. DRAWX, .-. /PLOT X-DATA ROUTINE JMS DRSETUP /SETUP DRAWING FACTORS DCA PNTR /CLEAR DATA POINTER FOR X-WORDS DOXLUP, CDF DFIELD /GOTO DISPLAY FIELD TAD I PNTR /GET A WORD CDF PRGFLD /BACK TO OUR FIELD AND [1777] /JUST DATA BITS CLL RTL /MOVE UP TAD [4000] /MAKE IT UNSIGNED MQL MUY;[SF] /MULTIPLY BY SCALE FACTOR TAD [XAXIS] /SETUP VERTICAL COORDINATE DCA Y /STASH IT JMS I [SETADR] /SETUP ADDRESS CHARACTERS JMS I [STROUT] /SEND IT ADRBUFFER /FROM HERE 0 /THIS ENDS THE LIST TAD PUPDATE /GET POINTER UPDATE FACTOR TAD PNTR /UPDATE TO NEXT DCA PNTR /STORE BACK TAD X /GET CURRENT X TAD XUPDATE /UPDATE IT DCA X /STORE BACK ISZ CNT /DONE ALL YET? JMP DOXLUP /NO, KEEP GOING JMP I DRAWX /YES, RETURN / Y DATA PLOT ROUTINE. DRAWY, .-. /PLOT Y-DATA ROUTINE JMS DRSETUP /SETUP DRAWING FACTORS NL0001 /SET INCREMENT DCA PNTR /STORE DATA POINTER FOR Y-WORDS DOYLUP, CDF DFIELD /GOTO DISPLAY FIELD TAD I PNTR /GET A WORD CDF PRGFLD /BACK TO OUR FIELD AND [1777] /JUST DATA BITS CLL RTL /MOVE UP TAD [4000] /MAKE IT UNSIGNED MQL MUY;[SF] /MULTIPLY BY SCALE FACTOR TAD [YAXIS] /SETUP VERTICAL COORDINATE DCA Y /STASH IT JMS I [SETADR] /SETUP ADDRESS CHARACTERS JMS I [STROUT] /SEND IT ADRBUFFER /FROM HERE 0 /THIS ENDS THE LIST TAD PUPDATE /GET POINTER UPDATE FACTOR TAD PNTR /UPDATE TO NEXT DCA PNTR /STORE BACK TAD X /GET CURRENT X TAD XUPDATE /UPDATE IT DCA X /STORE BACK ISZ CNT /DONE ALL YET? JMP DOYLUP /NO, KEEP GOING JMP I DRAWY /YES, RETURN DRSETUP,.-. /DRAWING FACTORS SETUP ROUTINE JMS I [STROUT] /SETUP THE VECMODE /VECTOR MODE 0 /THIS ENDS THE LIST NL6000 /SETUP COUNT ASR; ZAP1, DEFRES /ADJUST IT ASR; MZAP1, 0 /ADJUST IT AGAIN DCA CNT /STASH THE COUNTER DCA X /CLEAR X CAM /CLEAN UP NL0004 /SETUP POINTER UPDATE SHL; ZAP2, DEFRES /ADJUST IT DCA PUPDATE /STASH THE POINTER UPDATE FACTOR NL0001 /SETUP X UPDATE SHL; ZAP3, DEFRES /ADJUST IT SHL; MZAP2, 0 /ADJUST IT AGAIN DCA XUPDATE /STASH THE X UPDATE FACTOR JMP I DRSETUP /RETURN D4, 4; 0 /CONSTANT 0000,0004 D2000, 2000; 0 /CONSTANT 0000,2000 D4000, 4000; 0 /CONSTANT 0000,4000 D6000, 6000; 0 /CONSTANT 0000,6000 PUPDATE,.-. /POINTER UPDATE FACTOR PAGE / VIEW MODE AVERAGE VELOCITY ROUTINE. DRAWAVE,.-. /AVERAGE VELOCITY ROUTINE JMS I (INSETUP) /SETUP POINTERS, ETC. JMS I (VDINIT) /INITIALIZE DISPLAY PARAMETERS CAM /CLEAN UP AVNEXT, DST; OEVALUE /STORE (NEXT) PREVIOUS VALUE CAM /CLEAN UP TAD PNTR /GET CURRENT POINTER DCA OEPNTR /USE AS PREVIOUS POINTER NEXT TIME / LOCATE A BEGINNING POINT. FBLOOP, CDF DFIELD /GOTO DATA FIELD TAD I PNTR /GET X-WORD CDF PRGFLD /BACK TO OUR FIELD SMA /SKIP IF BEGINNING POINT JMP FBBUMP /JUMP IF NOT SHL; 2 /MOVE UP ASR; 16 /MOVE DOWN DST; BEGVALUE /STORE BEGINNING VALUE CLA /CLEAN UP TAD PNTR /GET CURRENT POINTER DCA BPNTR /SAVE FOR LATER FEBENTR,ISZ CNT /DONE ALL POINTS? JMP FELOOP /NO, KEEP GOING VEND, JMS I (VFIN) /FINISH THE PLOT JMP I DRAWAVERAGEVELOCITY /RETURN / COMES HERE TO TRY THE NEXT POINT. FBBUMP, NL0004 /SET INCREMENT TAD PNTR /UPDATE THE POINTER DCA PNTR /STORE BACK ISZ CNT /DONE ALL POINTS? JMP FBLOOP /NO, KEEP GOING / NO MORE POINTS, SO FINISH UP. JMP VEND /CONTINUE THERE FELOOP, TAD PNTR /GET CURRENT POINTER DCA XR1 /SETUP INDEXED VERSION CDF DFIELD /GOTO DATA FIELD TAD I PNTR /GET X-WORD MQL /SAVE IN CASE NEEDED TAD I XR1 /GET Y-WORD CDF PRGFLD /BACK TO OUR FIELD SMA CLA /SKIP IF AN ENDING POINT JMP FEBUMP /JUMP IF NOT MQA /GET X-WORD SHL; 2 /MOVE UP ASR; 16 /MOVE DOWN DST; ENDVALUE /STORE ENDING VALUE / CALCULATE DT=T[BEGIN]-T[PREVIOUS END]. CLA /CLEAN UP TAD OEPNTR /GET PREVIOUS END POINT CIA /NEGATE TAD BPNTR /NOW HAVE DT LSR; 2 /REDUCE TO 1.6 MS. UNITS JMS I (VELCALC) /CALCULATE DISPLAYABLE DX/DT DCA TEMP /SAVE IT FOR NOW CDF VELFLD /GOTO TABLE FIELD TAD TEMP /GET VELOCITY DCA I VXR /STASH IT CLL /CLEAR LINK NOW TAD PNTR /GET LOW-ORDER POINTER TAD CURPTR /ADD LOW-ORDER BASE DCA I VXR /STASH IT RAL /GET CARRY TAD CURPTR+1 /ADD HIGH-ORDER BASE DCA I VXR /STORE HIGH-ORDER POINTER CDF PRGFLD /BACK TO OUR FIELD TAD TEMP /GET VELOCITY TAD [SF%2+ZAXIS] /ADD ON CENTERING AND BASE LINE DCA Y /SETUP Y-COORDINATE JMS I (FTCHECK) /CHECK IF FIRST TIME TAD PNTR /GET POINTER MQL /TO LOW-ORDER JMS I [SETX] /SETUP X-COORDINATE JMS I [STROUT] /OUTPUT STRINGS ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST ISZ CNT /DONE ALL POINTS? SKP /SKIP IF NOT JMP I DRAWAVERAGEVELOCITY /RETURN IF SO DLD; ENDVALUE /GET CURRENT VALUE JMP AVNEXT /CONTINUE THERE / COMES HERE TO TRY THE NEXT POINT. FEBUMP, NL0004 /SET INCREMENT TAD PNTR /UPDATE POINTER DCA PNTR /STORE BACK JMP FEBENTRY /CONTINUE THERE SETX, .-. /SETUP X ROUTINE LSR; 2 /REDUCE PASSED VALUE TO 1.6 MS. UNITS DCA TEMP /SAVE PASSED VALUE TAD ADJUST /GET PREVAILING ROUINE DCA XR2 /STASH THE POINTER TAD I XR2 /GET "ASR" OR "SHL" CIA /NEGATE TAD (ASR+SHL) /NOW HAVE OPPOSITE VALUE DCA SEINST /STORE IN-LINE TAD I XR2 /GET THE PREVAILING FACTOR DCA SEARG /STORE IN-LINE TAD TEMP /GET PASSED VALUE BACK SEINST, ASR; SEARG, .-. /WILL BE ASR; FACTOR OR SHL; FACTOR SZA /BETTER BE SMALL ENOUGH HLT /ELSE BARF MQA /GET LOW-ORDER DCA X /STASH AS HORIZONTAL JMS I [SETADR] /SETUP ADDRESS JMP I SETX /RETURN BEGVALU,ZBLOCK 2 /VALUE AT BEGINNING POINT BPNTR, .-. /BEGINNING POINTER DT, .-. /DELTA-T ENDVALU,ZBLOCK 2 /VALUE AT ENDING POINT OEPNTR, ZBLOCK 2 /PREVIOUS ENDING POINTER OEVALUE,ZBLOCK 2 /VALUE AT PREVIOUS ENDING POINT PAGE / OVERVIEW MODE AVERAGE VELOCITY ROUTINE. ODRAWAV,.-. /AVERAGE VELOCITY ROUTINE JMS I (ODRSETUP) /SETUP COUNTERS DLD; CURPTR /GET OPENING VALUE DPSZ /SKIP IF PROBLEMATIC VALUE SKP /SKIP IF NOT JMP OVFIX0 /JUMP IF SO OVFIXEN,DST; PTR /SET IT UP DST; OEPNTR /INITIALIZE PREVIOUS END POINTER CAM /CLEAN UP DST; OEVALUE /CLEAR PREVIOUS END VALUE JMS I (VDINIT) /INITIALIZE DISPLAY PARAMETERS OFBLUP, DLD; PTR /GET LATEST POINTER DAD; MLIMIT /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF OK JMP OVEND /JUMP IF TOO FAR JMS I [GETPACKET] /GET LATEST VALUES TAD LX /GET X-WORD SMA /SKIP IF BEGINNING JMP OFBBUMP /JUMP IF NOT SHL; 2 /MOVE UP ASR; 16 /MOVE DOWN DST; BEGVALUE /SAVE SAVE BEGINNING VALUE DLD; PTR /GET POINTER DST; BEGPTR /SAVE AS BEGINNING POINTER OFELUP, DLD; PTR /GET CURRENT VALUE DAD; MLIMIT /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF OK JMP OVEND /JUMP IF TOO FAR JMS I [GETPACKET] /GET LATEST VALUES TAD LY /GET Y-WORD SMA CLA /SKIP IF END JMP OFEBUMP /JUMP IF NOT TAD LX /GET X-WORD SHL; 2 /MOVE UP ASR; 16 /MOVE DOWN DST; ENDVALUE /STORE AS END VALUE / CALCULATE DT=T[BEGIN]-T[PREVIOUS END]. DLD; OEPNTR /GET PREVIOUS END POINT DCM /NEGATE DAD; BEGPTR /ADD BEGIN POINTER LSR; 2 /REDUCE TO 1.6 MS. UNITS SZA /SKIP IF 12-BIT JMP ZEROVELOCITY /JUMP IF TOO LARGE MQA /GET LOW-ORDER JMS I (VELCALC) /CALCULATE DISPLAYABLE VALUE OF DX/DT SKP /DON'T USE ZERO ZEROVEL,CLA /USE ZERO VALUE DCA TEMP /SAVE VELOCITY CDF VELFLD /GOTO TABLE FIELD TAD TEMP /GET VELOCITY DCA I VXR /STASH IN TABLE TAD PTR /GET LOW-ORDER END POINTER DCA I VXR /STASH IT TAD PTR+1 /GET HIGH-ORDER END POINTER DCA I VXR /STASH IT CDF PRGFLD /BACK TO OUR FIELD TAD TEMP /GET VELOCITY TAD [SF%2+ZAXIS] /ADD ON BIAS PLUS BASE LINE DCA Y /SETUP Y JMS I (FTCHECK) /CHECK IF FIRST TIME DLD; CURPTR /GET BASE DCM /NEGATE DAD; PTR /NOW HAVE OFFSET JMS I [SETX] /SETUP X JMS I [STROUT] /OUTPUT STRINGS ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST / USE CURRENT VALUES NEXT TIME AS PREVIOUS ONES. DLD; ENDVALUE /GET END VALUE DST; OEVALUE /SETUP FOR NEXT TIME DLD; PTR /GET END POINTER DST; OEPNTR /SETUP FOR NEXT TIME CAM /CLEAN UP OFBBUMP,JMS OVBMPCHECK /CHECK IF WE'RE DONE JMP OFBLUP /KEEP GOING OFEBUMP,JMS OVBMPCHECK /CHECK IF WE'RE DONE JMP OFELUP /KEEP GOING / COMES HERE TO FIXUP FOR THE FIRST WORDS PROBLEM. OVFIX0, JMS OVBMPCHECK /BUMP PAST FIRST POINT DLD; D4 /GET NEW POINTER VALUE JMP OVFIXENTRY /CONTINUE THERE OVBMPCH,.-. /BUMP AND CHECK ROUTINE JMS I [NXTPACKET] /GOTO NEXT PACKET ISZ TOSSCNT /DONE ALL YET? JMP I OVBMPCHECK /NO, KEEP GOING TAD TOSSVALUE /RELOAD THE DCA TOSSCNT /INNER COUNTER ISZ CNT /DONE YET? JMP I OVBMPCHECK /NO, KEEP GOING OVEND, JMS I (VFIN) /FINISH THE DISPLAY JMP I ODRAWAVERAGEVELOCITY /RETURN TO MAIN CALLER PAGE VELCALC,.-. /VELOCITY CALCULATION ROUTINE DCA TDELTA /SAVE PASSED TIME VALUE / CALCULATE DX=X[BEGIN]-X[PREVIOUS END]. DLD; OEVALUE /GET PREVIOUS END VALUE DCM /NEGATE DAD; BEGVALUE /NOW HAVE DX DST; ASIGN /SAVE ARITHMETIC SIGN SPA /SKIP IF ALREADY POSITIVE DCM /ELSE MAKE IT SO MUY; (1161) /MULTIPLY BY 625 (/SEC) SWP /WANT HIGH-ORDER FIRST DCA TEMP /SO SAVE LOW-ORDER DVI; TDELTA /DIVIDE BY DT SWP /GET QUOTIENT DCA QUOTEMP /SAVE FOR LATER TAD TEMP /GET LOW-ORDER BACK SWP /REVERSE ORDER DVI; TDELTA /DIVIDE BY DT CLA /CLEAR REMAINDER MUY; (SF%2) /*125 NOW SWP /GET LOW-ORDER PRODUCT DCA TEMP+1 /STORE IT TAD QUOTEMP /GET HIGH-ORDER QUOTIENT SWP /REVERSE ORDER MUY; (SF%2) /*125 SZA CLA /SKIP IF NOT TRIPLE-PRECISION JMP FLATOP /ELSE USE MAXIMUM TAD TEMP+1 /GET LOW-ORDER PRODUCT SWP /REVERSE ORDER DVI; VELMAGNITUDE /DIVIDE BY RULER VALUE SZL CLA /SKIP IF NO OVERFLOW JMP FLATOP /JUMP IF OVERFLOW MQA /GET QUOTIENT TAD (-SF%2!4000) /COMPARE TO LIMIT SMA CLA /SKIP IF OK JMP FLATOP /JUMP IF NOT MQA /GET QUOTIENT SKP /DON'T USE MAXIMUM FLATOP, TAD (SF%2) /USE MAXIMUM ISZ ASIGN+1 /NEGATE? SKP /SKIP IF NOT CIA /YES, NEGATE IT JMP I VELCALC /RETURN VDINIT, .-. /DISPLAY INITIALIZE ROUTINE NL0001 /SETUP THE DCA VF /FIRST TIME SWITCH TAD [SF%2+ZAXIS] /ADD ON BIAS PLUS BASE LINE DCA Y /USE AS OPENING VERTICAL VALUE DCA X /CLEAR X VALUE JMS I [SETADR] /SETUP ADDRESS BUFFER JMS I [STROUT] /OUTPUT STRINGS VECMODE /GOTO VECTOR MODE ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST TAD [VTABLE-1] /SETUP THE DCA VXR /TABLE POINTER CDF VELFLD /GOTO TABLE FIELD DCA I VXR /STORE DUMMY VELOCITY TAD CURPTR /GET LOW-ORDER OPENING POINTER DCA I VXR /STORE AS DUMMY LOW-ORDER END POINTER TAD CURPTR+1 /GET HIGH-ORDER OPENING POINTER DCA I VXR /STORE AS DUMMY HIGH-ORDER END POINTER CDF PRGFLD /BACK TO OUR FIELD JMP I VDINIT /RETURN FTCHECK,.-. /FIRST TIME CHECK ROUTINE TAD VF /GET THE SWITCH SNA CLA /SKIP IF SET JMP I FTCHECK /JUST RETURN IF NOT SET CDF VELFLD /GOTO DATA FIELD TAD TEMP /GET SECOND VELOCITY DCA I (VTABLE) /STORE OVER FIRST ELEMENT / CDF PRGFLD /BACK TO OUR FIELD JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS VECMODE /GOTO VECTOR MODE ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST DCA VF /CLEAR THE SWITCH JMP I FTCHECK /RETURN VFIN, .-. /VELOCITY DISPLAY FINISH ROUTINE TAD [1777] /GET RIGHT-HAND VALUE DCA X /SET IT UP JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST JMP I VFIN /RETURN ASIGN, ZBLOCK 2 /ARITHMETIC SIGN QUOTEMP,.-. /HIGH-ORDER QUOTIENT TEMPORARY TDELTA, .-. /DELTA-T VALUE VF, .-. /FIRST TIME SWITCH PAGE / ANALYZE COMMAND. ANAL, NL0001 /SETUP MASK AND ADRAW /JUST THE BIT SZA CLA /SKIP IF OFF JMP I [DOBELL] /COMPLAIN OF NO VELOCITY TO DO DCA GOFFSET /CLEAR OFFSET NOW JMS I [STROUT] /OUTPUT STRINGS LEVCOM /ALL IN COMPLEMENT MODE 0 /THIS ENDS THE LIST JMS I (AMENU) /PUT UP MENU ANALUP, JMS I [GINPROCESS] /GET MOUSE INPUT CIF CODFLD /GOTO CODE FIELD JMS I [BOXDISPATCH] /CHECK IF MOUSE IS IN ANY ACTIVE BOX ABOXLIST-1 /LIST POINTER JMP ANALUP /NOT IN ANY BOX / COMES HERE IF THE MOUSE IS IN THE GAIN AND TIME CONSTANT BOX. ISGTC, JMS I (AMENU) /GET RID OF MENU SKP /DON'T DO OTHER THINGS YET / COMES HERE FOR ADDITIONAL GAIN MEASURMENTS. ISREGAI,JMS GCLR /CLEAR G-POINTS, GAIN MENU AND VALUES JMS I (GLABEL) /LABEL THE GAIN MEASUREMENTS SCREEN TAD ["G&177] /GET OUR INDICATOR JMS I (GET2) /GET TWO POINTS JMS I (GLABEL) /REMOVE LABEL JMS I (GMENU) /PUT UP GAIN MENU GTRANEN,JMS I (CVT2) /CALCULATE VELOCITY*TIME CIF CODFLD /GOTO CODE FIELD JMS I (PROGAIN) /GO PROCESS THE GAIN JMS I (DRWGAIN) /DRAW THE VALUES GMLOOP, JMS I [GINPROCESS] /GET MOUSE INPUT CIF CODFLD /GOTO CODE FIELD JMS I [BOXDISPATCH] /CHECK IF MOUSE IS IN ANY ACTIVE BOX GBOXLIST-1 /LIST POINTER JMP GMLOOP /WASN'T, SO KEEP GOING / COMES HERE IF IN GAIN TRANSFER TO CALIBRATOR BOX. ISGTRAN,TAD GOFFSET /GET OFFSET CIA /INVERT TAD GMAGNITUDE /ADD ON MAGNITUDE MQL /SAVE IT MQA /GET IT BACK SPA CLA /SKIP IF POSITIVE TAD (NGADJUST-GADJUST) /MAKE IT POINT TO NEGATIVE TAD (GADJUST) /GET POSITIVE ADDRESS DCA TEMP /STASH THE POINTER MQA /GET DIFFERENCE AGAIN SPA /SKIP IF POSITIVE ALREADY CIA /ELSE MAKE IT SO DCA I TEMP /STORE IN APPROPRIATE CALIBRATOR GOFSETE,JMS I (DRWGAIN) /ERASE THE VALUES JMP GTRANENTRY /CONTINUE THERE / COMES HERE IF IN THE GAIN OFFSET TRANSFER BOX. ISGOFFS,TAD GMAGNITUDE /GET THE MAGNITUDE DCA GOFFSET /MAKE IT THE OFFSET JMP GOFSETENTRY /CONTINUE THERE / COMES HERE IF THE MOUSE IS IN THE EXIT ANALYSIS BOX. ISEXANA,JMS I (AMENU) /GET RID OF MENU SKP /DON'T CLEAR OTHER MENU! / COMES HERE IF IN THE GAIN EXIT BOX. ISGEXIT,JMS GCLR /CLEAR THE G-POINTS, GAIN MENU, VALUES AFINISH,JMS I [STROUT] /OUTPUT STRINGS LEVSET /USE SET LEVEL 0 /THIS ENDS THE LIST JMP I (ANENTRY) /FINISH IT THERE / COMES HERE IF THE MOUSE IS IN THE TIME CONSTANT MEASUREMENT BOX. ISGTIME,JMS GCLR /CLEAR THE G-POINTS, GAIN MENU, VALUES DCA TCOFFSET /CLEAR OFFSET NOW SKP /DON'T DO OTHER THINGS YET / COMES HERE FOR ADDITIONAL TIME CONSTANT MEASUREMENTS. ISRETC, JMS TCLR /CLEAR T-POINTS, MENU AND VALUES JMS I (TLABEL) /LABEL FOR TIME CONSTANT MEASUREMENTS TAD ("T&177) /GET OUR INDICATOR JMS I (GET2) /GET TWO POINTS JMS I (TLABEL) /REMOVE LABEL JMS I (TMENU) /PUT UP TIME CONSTANT MENU TOFFENT,JMS I (CVT2) /CALCULATE VELOCITY*TIME CIF CODFLD /GOTO CODE FIELD JMS I (PROTC) /GO PROCESS THE TIME CONSTANT JMS I (DRWTC) /DRAW THE VALUES TCLOOP, JMS I [GINPROCESS] /GET MOUSE INPUT CIF CODFLD /GOTO CODE FIELD JMS I [BOXDISPATCH] /CHECK IF MOUSE IS IN ANY ACTIVE BOX TBOXLIST-1 /LIST POINTER JMP TCLOOP /WASN'T, SO KEEP GOING / COMES HERE IF IN THE TIME CONSTANT OFFSET TRANSFER BOX. ISTOFFS,JMS I (DRWTC) /ERASE VALUES JMS I (CVT2) /CALCULATE VELOCITY*TIME CIF CODFLD /GOTO CODE FIELD JMS I (PROTOFFSET) /GO PROCESS THE OFFSET JMP TOFFENTRY /CONTINUE THERE / COMES HERE IF IN THE TIME CONSTANT EXIT BOX. ISTEXIT,JMS TCLR /CLEAR THE SCREEN JMP AFINISH /FINISH UP THERE / COMES HERE IF THE MOUSE IS IN THE HARMONIC ANALYSIS BOX. ISHA, JMS I (AMENU) /GET RID OF MENU JMP AFINISH /FINISH IT THERE GCLR, .-. /GAIN SELECTIVE CLEAR ROUTINE JMS I (DRW2) /REMOVE G-POINTS JMS I (GMENU) /REMOVE GAIN MENU JMS I (DRWGAIN) /REMOVE VALUES JMP I GCLR /RETURN TCLR, .-. /TIME CONSTANT SELECTIVE CLEAR ROUTINE JMS I (DRW2) /REMOVE T-POINTS JMS I (TMENU) /REMOVE TIME CONSTANT MENU JMS I (DRWTC) /REMOVE VALUES JMP I TCLR /RETURN GLTIME, ZBLOCK 2 /LEFT TIME GMAGNIT,.-. /GAIN MAGNITUDE GNEWTIM,ZBLOCK 2 /HOLDING TIME GOFFSET,.-. /GAIN OFFSET GRTIME, ZBLOCK 2 /RIGHT TIME TCOFFSE,.-. /TIME CONSTANT OFFSET PAGE DECIMAL /MAKE IT EASIER TMENU, .-. /TIME CONSTANT MENU ROUTINE JMS I [BDRAW] /DRAW A BOX 0; 780-B-10 /FROM HERE 192; 780-10 /TO HERE JMS I [BDRAW] /DRAW A BOX 0; 780-B-B-10-10 /FROM HERE 192; 780-B-10-10 /TO HERE JMS I [TPRINT] /PRINT MESSAGES 0+14 /X-COORDINATE 780-10-18 /Y-COORDINATE TTOMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-10-38 /Y-COORDINATE OFMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-10-10-18 /Y-COORDINATE RETMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-10-10-38 /Y-COORDINATE ANALMSG /MESSAGE ADDRESS -1 /THIS ENDS THE LIST JMS I [DFINISH] /FINISH THE DISPLAY JMP I TMENU /RETURN TLABEL, .-. /TIME CONSTANT LABEL ROUTINE JMS I [BDRAW] /DRAW A BOX 334; 757 /FROM HERE 690; 779 /TO HERE JMS I [SPRINT] /PRINT MESSAGE 338 /X-COORDINATE 762 /Y-COORDINATE TCMMSG /MESSAGE ADDRESS -1 /THIS ENDS THE LIST JMP I TLABEL /RETURN DRWTC, .-. /DRAW TIME CONSTANT VALUES JMS I [BDRAW] /DRAW A BOX 636; 265 /FROM HERE 803; 304 /TO HERE JMS I [BDRAW] /DRAW A BOX 636; 505 /FROM HERE 803; 544 /TO HERE JMS I [TPRINT] /PRINT MESSAGES 658 /X-COORDINATE 528 /Y-COORDINATE TCOMSG /MESSAGE ADDRESS 640 /X-COORDINATE 288 /Y-COORDINATE TCONMSG /MESSAGE ADDRESS -1 /THIS ENDS THE LIST JMS I (DRWNUMBER) /DRAW NUMERIC VALUE 691 /X-COORDINATE 510 /Y-COORDINATE TOBUFFER /STRING ADDRESS JMS I (DRWNUMBER) /DRAW NUMERIC VALUE 676 /X-COORDINATE 270 /Y-COORDINATE TMBUFFER+3 /MESSAGE ADDRESS JMS I (DRWGAIN) /DRAW GAIN VALUES AS WELL JMP I DRWTC /RETURN PAGE AMENU, .-. /ANALYSIS MENU ROUTINE JMS BDRAW /DRAW A BOX 0; 780-B-10 /FROM HERE 192; 780-10 /TO HERE JMS BDRAW /DRAW A BOX 0; 780-B-B-10-10 /FROM HERE 192; 780-B-10-10 /TO HERE JMS BDRAW /DRAW A BOX 0; 780-B-B-B-10-10-10 /FROM HERE 192; 780-B-B-10-10-10 /TO HERE JMS I [TPRINT] /PRINT MESSAGES 0+14 /X-COORDINATE 780-10-18 /Y-COORDINATE GAINMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-10-38 /Y-COORDINATE TCONMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-10-10-18 /Y-COORDINATE HARMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-10-10-38 /Y-COORDINATE ANALMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-B-10-10-10-18 /Y-COORDINATE RETMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-B-10-10-10-38 /Y-COORDINATE ANALMSG /MESSAGE ADDRESS -1 /THIS ENDS THE LIST JMS I [DFINISH] /FINISH THE DISPLAY JMP I AMENU /RETURN GLABEL, .-. /GAIN LABEL ROUTINE JMS BDRAW /DRAW A BOX 396; 757 /FROM HERE 625; 779 /TO HERE JMS I [SPRINT] /PRINT MESSAGE 399 /X-COORDINATE 762 /Y-COORDINATE GMMSG /MESSAGE ADDRESS -1 /THIS ENDS THE LIST JMP I GLABEL /RETURN GMENU, .-. /GAIN MENU ROUTINE JMS BDRAW /DRAW A BOX 0; 780-B-10 /FROM HERE 192; 780-10 /TO HERE JMS BDRAW /DRAW A BOX 0; 780-B-B-10-10 /FROM HERE 192; 780-B-10-10 /TO HERE JMS BDRAW /DRAW A BOX 0; 780-B-B-B-10-10-10 /FROM HERE 192; 780-B-B-10-10-10 /TO HERE JMS BDRAW /DRAW A BOX 0; 780-B-B-B-B-10-10-10-10 /FROM HERE 192; 780-B-B-B-10-10-10-10 /TO HERE JMS I [TPRINT] /PRINT MESSAGES 0+14 /X-COORDINATE 780-10-18 /Y-COORDINATE TTOMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-10-38 /Y-COORDINATE CALMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-10-10-18 /Y-COORDINATE TTOMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-10-10-38 /Y-COORDINATE OFMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-B-10-10-10-18 /Y-COORDINATE TCONMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-B-10-10-10-38 /Y-COORDINATE MESMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-B-B-10-10-10-10-18 /Y-COORDINATE RETMSG /MESSAGE ADDRESS 0+14 /X-COORDINATE 780-B-B-B-10-10-10-10-38 /Y-COORDINATE ANALMSG /MESSAGE ADDRESS -1 /THIS ENDS THE LIST JMS I [DFINISH] /FINISH THE DISPLAY JMP I GMENU /RETURN OCTAL /BACK TO NORMAL / BOX DRAWING ROUTINE. BDRAW, .-. /BOX DRAWING ROUTINE JMS BGETXY /GET FIRST X, Y PAIR JMS I [STROUT] /OUTPUT STRINGS BLKFILL /USE BLOCK FILL MODE VECMODE /GOTO VECTOR MODE ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST JMS BGETXY /GET SECOND X, Y PAIR JMS I [STROUT] /OUTPUT STRINGS ADRBUFFER /ADDRESS VCDRAW /OUTPUT VECTORS 0 /THIS ENDS THE LIST JMP I BDRAW /RETURN BGETXY, .-. /GET X, Y PAIR TAD I BDRAW /GET X ARGUMENT DCA X /STASH IT ISZ BDRAW /BUMP TO NEXT TAD I BDRAW /GET Y ARGUMENT DCA Y /STASH IT ISZ BDRAW /BUMP TO NEXT JMS I [SETADR] /SETUP ADDRESS JMP I BGETXY /RETURN PAGE / GET TWO POINTS ROUTINE. GET2, .-. /GET TWO POINTS ROUTINE CDF MSGFLD /GOTO MESSAGE FIELD DCA I [DCHAR] /STORE PASSED VALUE CDF PRGFLD /BACK TO OUR FIELD TAD [17] /SETUP FOR DCA DINCR /POSITIVE INCREMENT DCA GLSW /NO LEFT POINT SEEN YET DCA GRSW /NO RIGHT POINT SEEN YET G2LOOP, TAD GLSW /GET LEFT SWITCH AND GRSW /AND WITH RIGHT SWITCH SZA CLA /SKIP IF LESS THAN TWO JMP I GET2 /RETURN WITH TWO POINTS DONE JMS I [GINPROCESS] /GET MOUSE POSITION DCA LRSW /SAVE LEFT/RIGHT FLAG MQA /GET HORIZONTAL VALUE CLL RAR;CLL RAR /%4 DCA GHVALUE /SAVE FOR NOW JMS I ADJUST /ADJUST TO PROPER DISPLAY VALUE DAD; CURPTR /NOW HAVE ABSOLUTE TIME DST; GNEWTIME /STASH IT FOR NOW CAM /CLEAN UP ISZ LRSW /LEFT BUTTON? JMP G2LEFT /YES G2RITE, TAD GRSW /GET OUR SWITCH SZA CLA /SKIP IF THERE IS NO PRIOR VALUE JMS GDRWCHK /DRAW OLD VALUE IF NECESSARY TAD GHVALUE /GET HOLDING VALUE DCA GRVALUE /SETUP OUR VALUE DLD; GNEWTIME /GET HOLDING TIME DST; GRTIME /SETUP OUR TIME JMS GDRWCHK /DRAW NEW VALUE IF NECESSARY NL0001 /INDICATE WE HAVE DCA GRSW /OUR POINT JMP G2LOOP /KEEP GOING G2LEFT, TAD GLSW /GET OUR SWITCH SZA CLA /SKIP IF THERE IS NO PRIOR VALUE JMS GDRWCHK /DRAW OLD VALUE IF NECESSARY TAD GHVALUE /GET HOLDING VALUE DCA GLVALUE /SETUP OUR VALUE DLD; GNEWTIME /GET HOLDING TIME DST; GLTIME /SETUP OUR TIME JMS GDRWCHK /DRAW NEW VALUE IF NECESSARY NL0001 /INDICATE WE HAVE DCA GLSW /OUR POINT JMP G2LOOP /KEEP GOING / CHECK AND DRAW VALUE ROUTINE. GDRWCHK,.-. /DRAW AND CHECK ROUTINE CAM /CLEAN UP TAD LRSW /GET LEFT/RIGHT SWITCH SZA CLA /SKIP IF CLEAR JMP GDLEFT /ELSE DO LEFT TAD GRVALUE /GET RIGHT VALUE DCA X /USE AS HORIZONTAL TAD (GRTIME) /POINT TO DCA GDRWARGUMENT /OUR TIME TAD GLSW /GET THE OTHER SWITCH JMP GDRWCOMMON /CONTINUE THERE / COMES HERE IF LEFT BUTTON WAS PRESSED. GDLEFT, TAD GLVALUE /GET LEFT VALUE DCA X /USE AS HORIZONTAL TAD (GLTIME) /POINT TO DCA GDRWARGUMENT /OUR TIME TAD GRSW /GET THE OTHER SWITCH GDRWCOM,SNA CLA /SKIP IF THERE IS ANOTHER POINT JMP GDRWIT /JUST DRAW OURS TAD GRVALUE /GET RIGHT VALUE CIA /NEGATE FOR TESTING TAD GLVALUE /COMPARE TO LEFT VALUE SNA CLA /SKIP IF DIFFERENT JMP I GDRWCHK /RETURN IF IDENTICAL WITHOUT DRAWING GDRWIT, DLD; GDRWARG,.-. /GET CORRECT TIME JMS I (VELSEARCH) /FIND CORRESPONDING VELOCITY TAD [SF%2+ZAXIS] /MAKE IT SCREEN ABSOLUTE JMS I (INDRAW) /DRAW INDICATOR THERE JMP I GDRWCHK /RETURN DRW2, .-. /DRAW THE TWO SELECTED POINTS ROUTINE TAD GLVALUE /GET LEFT HORIZONTAL VALUE DCA X /SETUP X DLD; GLTIME /GET LEFT TIME JMS I (VELSEARCH) /LOCATE ITS VELOCITY VALUE TAD [SF%2+ZAXIS] /ADJUST TO VERTICAL POSITION JMS I (INDRAW) /DRAW THE LINE / IF THE POINTS ARE IDENTICAL, THERE IS ONLY ONE POINT TO DISPLAY. TAD GLVALUE /GET LEFT VALUE CIA /INVERT FOR TESTING TAD GRVALUE /COMPARE TO RIGHT VALUE SNA CLA /SKIP IF DIFFERENT JMP I DRW2 /RETURN IF IDENTICAL TAD GRVALUE /GET RIGHT HORIZONTAL VALUE DCA X /SETUP X DLD; GRTIME /GET RIGHT TIME JMS I (VELSEARCH) /LOCATE ITS VELOCITY VALUE TAD [SF%2+ZAXIS] /ADJUST TO VERTICAL POSITION JMS I (INDRAW) /DRAW THE LINE JMP I DRW2 /RETURN GHVALUE,.-. /HOLDING VALUE GLSW, .-. /LEFT SWITCH GRSW, .-. /RIGHT SWITCH PAGE / VELOCITY SEARCH ROUTINE. VELSEAR,.-. /SEARCH FOR VELOCITY ROUTINE DST; VELTIME /SAVE PASSED TIME CAM /CLEAN UP TAD [VTABLE-1] /SETUP THE DCA XR1 /TABLE POINTER VSLOOP, TAD XR1 /GET CURRENT POINTER CIA /INVERT FOR TESTING TAD VXR /COMPARE TO LIMIT SNA CLA /SKIP IF NOT AT END OF LIST JMP USELAST /USE LAST ELEMENT IF SO JMS VELGET /GET AN ELEMENT DLD; VPTR /GET THE TIME DCM /INVERT FOR TEST DAD; VELTIME /COMPARE TO DESIRED SMA CLA /SKIP IF TOO FAR JMP VSLOOP /ELSE KEEP GOING TAD X /GET DESIGNATED X DCA VXSAVE /SAVE IT JMS VGETX /GET X[1] DCA VCX /SAVE IT TAD VELVALUE /GET VELOCITY VALUE[1] DCA VEL1 /SAVE IT TAD (-6) /SET BACKUP FACTOR TAD XR1 /POINT TO PREVIOUS DCA XR1 /STASH THE POINTER JMS VELGET /GET PROPER ELEMENT JMS VGETX /GET X[0] CIA /INVERT TAD VCX /NOW HAVE X[1]-X[0] DCA VCX /STORE IT TAD X /GET X[0] AGAIN CIA /INVERT TAD VXSAVE /NOW HAVE X-X[0] DCA VCX0 /STASH IT TAD VXSAVE /RESTORE THE DCA X /ORIGINAL X TAD VELVALUE /GET VELOCITY VALUE[0] CIA /INVERT TAD VEL1 /NOW HAVE V[1]-V[0] ASR; 14 /MOVE DOWN DST; TEMP /SAVE ARITHMETIC SIGN SPA /SKIP IF ALREADY POSITIVE DCM /ELSE MAKE IT SO MUY; VCX0 /(V[1]-V[0])*(X-X[0]) DVI; VCX /(V[1]-V[0])*(X-X[0])/(X[1]-X[0]) CLA MQA /GET QUOTIENT ISZ TEMP+1 /NEGATE? SKP /SKIP IF POSITIVE CIA /INVERT IT USELAST,TAD VELVALUE /ADD ON V[0] JMP I VELSEARCH /RETURN VELGET, .-. /GET VELOCITY ELEMENT ROUTINE CDF VELFLD /GOTO DATA FIELD TAD I XR1 /GET A VELOCITY VALUE DCA VELVALUE /STASH IT TAD I XR1 /GET LOW-ORDER TIME DCA VPTR /STASH IT TAD I XR1 /GET HIGH-ORDER TIME DCA VPTR+1 /STASH IT CDF PRGFLD /BACK TO OUR FIELD JMP I VELGET /RETURN VGETX, .-. /GET X VALUE DLD; CURPTR /GET BASE TIME DCM /NEGATE DAD; VPTR /NOW HAVE RELATIVE TIME JMS I [SETX] /ADJUST IT DOWN TAD X /GET CORRESPONDING X VALUE JMP I VGETX /RETURN ADDVEL, .-. /ADD ON TO VELOCITY ACCUMULATION DCA TEMP /SAVE HIGH-ORDER TAD TEMP /GET IT BACK SPA CLA /SKIP IF POSITIVE NL7777 /ELSE MAKE IT NEGATIVE DCA TEMP+1 /STORE EITHER WAY CLL /CLEAR LINK NOW MQA /GET LOW-0RDER TAD TXVEL+0 /ADD ON LOW-ORDER ACCUMULATON DCA TXVEL+0 /STORE BACK RAL /GET CARRY TAD TXVEL+1 /ADD ON MIDDLE TAD TEMP /ADD ON HIGH-ORDER DCA TXVEL+1 /STORE BACK RAL /GET CARRY TAD TXVEL+2 /ADD ON HIGH-ORDER TAD TEMP+1 /ADD ON EXTENSION DCA TXVEL+2 /STORE BACK JMP I ADDVEL /RETURN CURTIME,ZBLOCK 2 /CURRENT TIME ELEMENT VCX, .-. /X[1]-X[0] VCX0, .-. /X-X[0] VELTIME,ZBLOCK 2 /LATEST CORRESPONDING VELOCITY TIME VPTR, ZBLOCK 2 /VELOCITY TIME VXSAVE, .-. /DESIGNATED X SAVED HERE VEL1, .-. /VELOCITY VALUE[1] PAGE / VELOCITY-TIME PRODUCT ROUTINE. / RETURNS VELOCITY*TIME IN TXVEL+0 THROUGH TXVEL+2 EVALUATED FROM GLTIME THROUGH / GRTIME INCLUSIVE. GLTIME AND GRTIME WILL BE SWAPPED TO ENSURE GLTIME < GRTIME / IF NECESSARY. IF GLTIME=GRTIME OR NEARLY SO (BOTH USE THE SAME AVERAGE / VELOCITY SAMPLE) THEN VELOCITY*GLTIME (A SINGLE POINT EVALUATION) WILL BE / RETURNED. ALL POINTS TO THE RIGHT OF THE LAST AVERAGE VELOCITY EVALUATION ARE / IGNORED. IF GLTIME IS TO THE RIGHT OF THE LAST AVERAGE VELOCITY EVALUATION, / ZERO IS RETURNED. CVT2, .-. /CALCULATE V*T BETWEEN TWO POINTS / FIRST TEST IF THE TWO END POINTS ARE IDENTICAL. IF SO, USE GLTIME FOR A / SINGLE UNAVERAGED VALUE. DLD; GLTIME /GET LEFT POINT DCM /INVERT DAD; GRTIME /COMPARE TO RIGHT POINT DPSZ /SKIP IF IDENTICAL SKP /SKIP IF DIFFERENT JMP CVTONE /JUMP IF IDENTICAL / ENSURE THAT GLTIME IS EARLIER THAN GRTIME, ELSE SWAP THEM. SMA CLA /SKIP IF GLTIME IS LARGER JMP CVOK /JUMP IF GRTIME IS LARGER TAD GLVALUE /GET LEFT HORIZONTAL VALUE MQL /SAVE IT TAD GRVALUE /GET RIGHT HORIZONTAL VALUE DCA GLVALUE /SAVE AS NEW LEFT HORIZONTAL VALUE MQA /GET ORIGINAL LEFT HORIZONTAL VALUE DCA GRVALUE /SAVE AS NEW RIGHT HORIZONTAL VALUE DLD; GLTIME /GET LEFT VALUE DST; TEMP /SAVE IT DLD; GRTIME /GET RIGHT VALUE DST; GLTIME /STORE IN LEFT POINTER DLD; TEMP /GET LEFT VALUE DST; GRTIME /STORE IN RIGHT POINTER CVOK, CAM /CLEAN UP / CHECK IF THE LEFT AND RIGHT POINTS ACTUALLY USE THE SAME EVALUATION (ARE CLOSE / TOGETHER); IF SO, USE GLTIME TO CALCULATE A SINGLE UNAVERAGED VALUE. IF / GLTIME CORRESPONDS TO A TIME NEAR THE END OF THE LAST VELOCITY EVALUATION THEN / USE GLTIME TO CALCULATE A SINGLE UNAVERAGED VALUE. IF GLTIME RETURNS THE / MAXIMUM VALUE, THEN RETURN ZERO AS THERE ARE NO VELOCITY VALUES AVAILABLE. DLD; GRTIME /GET RIGHT-HAND LIMIT JMS I (SEARVEL) /LOCATE VELOCITY DLD; CURTIME /GET TIME FOR RIGHT-HAND DST; GRCTIME /SAVE IT DLD; GLTIME /GET LEFT-HAND LIMIT JMS I (SEARVEL) /LOCATE VELOCITY TAD VELVALUE /GET VELOCITY DCA VELARG /SAVE IT DLD; CURTIME /GET TIME FOR LEFT-HAND CLL RAL /MOVE UP FOR TEST SPA /SKIP IF VALIE JMP CVTZERO /JUMP IF NOT RAR /RESTORE DCM /NEGATE FOR TESTING DAD; GRCTIME /COMPARE TO RIGHT-HAND LIMIT TIME DPSZ /SKIP IF ZERO SKP /SKIP IF NO MATCH JMP CVTONE /JUMP IF IDENTICAL EVALUATION DLD; VPTR /GET NEXT INTERVAL TIME CLL RAL /MOVE UP FOR TEST SPA /SKIP IF OK JMP CVTONE /ELSE USE SINGLE VALUE / SINCE THE LEFT AND RIGHT POINTS ARE IN DIFFERENT INTERVALS, AND THE NEXT / INTERVAL IS VALID, START THE ACCUMULATION WITH (NEXTIME-GLTIME)*VELOCITY. DLD; GLTIME /GET LEFT TIME DCM /-LEFT TIME DAD; VPTR /NEXT TIME-LEFT TIME JMS I (MULVEL) /MULTIPLY BY LEFT TIME VELOCITY DST; TXVEL /STASH IT ASR; 14 /REPLICATE SIGN DCA TXVEL+2 /STORE HIGH-ORDER JMS I (VELGET) /SETUP NEXT POINT / MOVE UP TO NEXT INTERVAL. IF IT IS THE LAST VALID ONE (BECAUSE ITS NEXT TIME / IS THE UPPER LIMIT) THEN USE GRTIME-CURTIME (IF POSSIBLE). IF THIS IS A VALID / INTERMEDIATE INTERVAL THEN USE THE ENTIRE TIME INTERVAL*VELOCITY UNLESS / GRTIME < NEXT TIME IN WHICH CASE USE GRTIME-CURTIME. VMIDLUP,JMS I (VELNEXT) /GET NEXT ELEMENT DLD; VPTR /GET NEXT POINTER CLL RAL /MOVE UP FOR TEST SPA /SKIP IF VALID JMP ADDTAIL /JUMP IF NOT RAR /RESTORE DCM /INVERT FOR TEST DAD; GRTIME /COMPARE TO RIGHT-HAND LIMIT SPA CLA /SKIP IF OK JMP ADDTAIL /JUMP IF AT LIMIT DLD; CURTIME /GET INTERVAL BEGINNING DCM /NEGATE DAD; VPTR /NOW HAVE INTERVAL TIME JMS I (MULVEL) /MULTIPLY BY LATEST VELOCITY JMS I (ADDVEL) /ADD TO ACCUMULATION JMP VMIDLUP /KEEP GOING / COMES HERE TO ADD ON LAST INTERVAL (IF POSSIBLE). ADDTAIL,DLD; CURTIME /GET CURRENT TIME CLL RAL /MOVE UP FOR TEST SPA /SKIP IF OK JMP CVTEND /JUMP IF NOT RAR /RESTORE DCM /NEGATE DAD; GRTIME /NOW HAVE GRTIME - CURTIME JMS I (MULVEL) /MULTIPLY BY VELOCITY JMS I (ADDVEL) /ADD TO ACCUMULATION JMP CVTEND /FINISH THERE / COMES HERE IF WE USE GLTIME AS A SINGLE POINT. CVTONE, DLD; GLTIME /GET LEFT POINT JMS I (SEARVEL) /LOCATE ITS VELOCITY TAD VELVALUE /GET VELOCITY DCA VELARG /SET IT UP DLD; GLTIME /GET LEFT POINT TIME JMS I (MULVEL) /MULTIPLY BY VELOCITY SKP /DON'T USE ZERO! CVTZERO,CAM /USE ZERO DST; TXVEL /STASH IT ASR; 14 /REPLICATE SIGN DCA TXVEL+2 /STORE HIGH-ORDER CVTEND, CAM /CLEAN UP JMP I CVT2 /RETURN GRCTIME,ZBLOCK 2 /GRTIME'S CURRENT TIME PAGE / VELOCITY SEARCH ROUTINE. / RETURNS LATEST VELOCITY VALUE IN VELVALUE. RETURNS STARTING TIME FOR THE / INTERVAL IN CURTIME. RETURNS STARTING TIME OF THE NEXT INTERVAL IN VPTR. IF / THE NEXT INTERVAL IS NON-EXISTANT THE LARGEST POSITIVE INTEGER IS RETURNED IN / VPTR AS A FLAG TO PREVENT FURTHER CALLS. SEARVEL,.-. /SEARCH FOR VELOCITY ROUTINE DST; TEMP /SAVE PASSED VALUE CAM /CLEAN UP TAD [VTABLE-1] /SETUP THE DCA XR1 /TABLE POINTER / WHEN THE VELOCITY CALCULATIONS WERE DONE FOR THE DISPLAY, VXR WAS USED TO / STORE THE VALUES, SO IT POINTS TO THE LAST LOCATION USED IN THE TABLE. SVLOOP, TAD XR1 /GET CURRENT POINTER CIA /INVERT FOR TESTING TAD VXR /COMPARE TO LIMIT SNA CLA /SKIP IF NOT AT END JMP SVLAST /JUMP IF AT END JMS I (VELGET) /GET LATEST ELEMENT DLD; VPTR /GET LATEST POINTER DCM /NEGATE DAD; TEMP /COMPARE TO DESIRED SMA CLA /SKIP IF TOO FAR JMP SVLOOP /KEEP GOING DLD; VPTR /GET POINTER DST; TEMP /SAVE IT CAM /CLEAN UP TAD XR1 /GET POINTER TAD (-6) /BACK UP TO PREVIOUS DCA XR1 /STORE POINTER JMS I (VELGET) /GET PREVIOUS ELEMENT SVLENTR,DLD; VPTR /GET LASTEST POINTER SVZENTR,DST; CURTIME /SAVE AS LATEST TIME DLD; TEMP /GET NEXT POINTER DST; VPTR /SAVE AS NEXT TIME CAM /CLEAN UP JMP I SEARVEL /RETURN / COMES HERE IF AT END OF TABLE. SVLAST, NL7777 /SETUP LOW-ORDER VALUE DCA TEMP /STASH IT NL3777 /SETUP HIGH-ORDER VALUE DCA TEMP+1 /STASH IT TAD XR1 /GET THE POINTER TAD (-VTABLE+1) /COMPARE TO EMPTY VALUE SZA CLA /SKIP IF IT MATCHES JMP SVLENTRY /CONTINUE THERE DCA VELVALUE /ZERO VELOCITY VALUE DLD; TEMP /GET MAXIMUM VALUE JMP SVZENTRY /CONTINUE THERE / NEXT VELOCITY ELEMENT ROUTINE. VELNEXT,.-. /GET NEXT ELEMENT ROUTINE DLD; VPTR /GET NEXT TIME DST; CURTIME /USE AS CURRENT TIME CAM /CLEAN UP TAD VELVALUE /GET NEXT VELOCITY VALUE DCA VELARG /SAVE AS CURRENT VALUE TAD XR1 /GET OUR POINTER CIA /INVERT FOR TESTING TAD VXR /COMPARE TO LIMIT SNA CLA /SKIP IF NOT AT END JMP VNLAST /JUMP IF AT END JMS I (VELGET) /GET ANOTHER ELEMENT JMP I VELNEXT /RETURN / COMES HERE IF AT END OF LIST. VNLAST, NL7777 /SET LOW-ORDER MQL /LOAD IT NL3777 /SET HIGH-ORDER DST; VPTR /USE MAXIMUM VALUE CAM /CLEAN UP DCA VELVALUE /ZERO NEXT VELOCITY JMP I VELNEXT /RETURN / TIME*VELOCITY MULTIPLY ROUTINE. MULVEL, .-. /MULTIPLY PASSED TIME*VELOCITY LSR; 2 /REDUCE PASSED VALUE TO 1.6 MS UNITS DST; TEMP /STORE FOR NOW DLD; VELARG-1 /GET VELOCITY MULTIPLIER ASR; 14 /MOVE DOWN DST; MSIGN /STORE ARITHMETIC SIGN SPA /SKIP IF ALREADY POSITIVE DCM /ELSE MAKE IT SO MQA /GET ABSOLUTE VALUE BACK DCA UVEL /STASH IT TAD TEMP /GET LOW-ORDER MQL MUY;UVEL /*VELOCITY SWP /GET LOW-ORDER FIRST DCA LOPROD /STORE IT TAD TEMP+1 /GET HIGH-ORDER SWP /RESTORE MUY; UVEL /*VELOCITY SZA /SKIP IF DOUBLE-PRECISION ONLY HLT /ELSE BARF TAD LOPROD /GET LOW-ORDER PRODUCT SWP /REVERSE ORDER ISZ MSIGN+1 /WAS IT NEGATIVE? SKP /SKIP IF NOT DCM /NEGATE IF NEGATIVE SIGN REQUIRED JMP I MULVEL /RETURN LOPROD, .-. /LOW-0RDER PRODUCT TEMPORARY UVEL, /UNSIGNED VELOCITY ARGUMENT /**** ALSO LOW-ORDER MSIGN **** MSIGN, ZBLOCK 2 /ARITHMETIC SIGN PAGE DECIMAL /MAKE IT EASIER / INITIALIZE COMMAND. INISCRE,JMS I [CLRSCREEN] /CLEAR THE SCREEN / DRAW VELOCITY SCALE FACTOR STUFF. JMS I [VECDRAW] /DRAW VECTORS 4 /X-OFFSET 780-J /Y-OFFSET LRULER-1 /LIST POINTER / DRAW POSITIVE GAIN ADJUSTMENT FACTOR STUFF. 4 /X-OFFSET 780-J-J /Y-OFFSET LRULER-1 /LIST POINTER / DRAW NEGATIVE GAIN ADJUSTMENT FACTOR STUFF. 4 /X-OFFSET 780-J-J-J /Y-OFFSET LRULER-1 /LIST POINTER / DRAW ASSORTED LINES. 0 /X-OFFSET 0 /Y-OFFSET LBOX-1 /LIST POINTER 4 /X-OFFSET 0 /Y-OFFSET LBORDER-1 /LIST POINTER 4 /X-OFFSET 0 /Y-OFFSET IBORDER-1 /LIST POINTER -1 /THIS ENDS THE LISTS / DRAW ASSORTED MESSAGES. JMS I [SPRINT] /CALL SCREEN PRINT 323 /X-COORDINATE 780-J+119 /Y-COORDINATE VMBLURB /MESSAGE POINTER 341 /X-COORDINATE 780-J-J+119 /Y-COORDINATE GABLURB /MESSAGE POINTER 341 /X-COORDINATE 780-J-J-J+119 /Y-COORDINATE NGABLURB /MESSAGE POINTER 129 /X-COORDINATE 780-J-J-J-J+119 /Y-COORDINATE EMBLURB /MESSAGE POINTER 129 /X-COORDINATE 780-J-J-J-J+69 /Y-COORDINATE WBMSG /MESSAGE POINTER 665 /X-COORDINATE 780-J-J-J-J+119 /Y-COORDINATE RMBLURB /MESSAGE POINTER 665 /X-COORDINATE 780-J-J-J-J+69 /Y-COORDINATE WBMSG /MESSAGE POINTER 769 /X-COORDINATE 106 /Y-COORDINATE PRBLURB /MESSAGE POINTER -1 /THIS ENDS THE LISTS CIF CODFLD /GOTO CODE FIELD JMS I [CHKBCONTROL] /UPDATE STATUS NL0001 /INDICATE DATA MARKS JMS I (DRAWPS) /DRAW STATUS WORD 238 /X-POSITION 780-J-J-J-J+69 /Y-POSITION NL0002 /INDICATE REQUEST MARKS JMS I (DRAWPS) /DRAW STATUS WORD 776 /X-POSITION 780-J-J-J-J+69 /Y-POSITION DLD; VELMAGNITUDE /GET VELOCITY MAGNITUDE JMS I [DRAWIT] /DRAW BAR AND SCALE VALUES 780-J+1 /Y-COORDINATE DLD; GADJUST /GET POSITIVE GAIN ADJUSTMENT FACTOR JMS I [DRAWIT] /DRAW BAR AND SCALE VALUES 780-J-J+1 /Y-COORDINATE DLD; NGADJUST /GET NEGATIVE GAIN ADJUSTMENT FACTOR JMS I [DRAWIT] /DRAW BAR AND SCALE VALUES 780-J-J-J+1 /Y-COORDINATE INIGNOR,JMS I [GINPROCESS] /GET MOUSE INPUT DCA LRSW /SAVE LEFT/RIGHT SWITCH CIF CODFLD /GOTO CODE FIELD JMS I [BOXDISPATCH] /CHECK IF MOUSE IS IN ANY ACTIVE BOX INBOXLIST-1 /LIST POINTER JMP INIGNORE /NOT IN ANY BOX / COMES HERE IF THE MOUSE IS IN THE VELOCITY MAGNITUDE BOX. ISVMAGN,JMS I [PPROCESS] /UPDATE VELMAGNITUDE /VELOCITY MAGNITUDE 780-J+1 /Y-COORDINATE JMP INIGNORE /KEEP GOING / COMES HERE IF THE MOUSE IS IN THE POSITIVE GAIN ADJUSTMENT FACTOR BOX. ISGADJU,JMS I [PPROCESS] /UPDATE GADJUST /POSITIVE GAIN ADJUSTMENT FACTOR 780-J-J+1 /Y-COORDINATE JMP INIGNORE /KEEP GOING / COMES HERE IF THE MOUSE IS IN THE NEGATIVE GAIN ADJUSTMENT FACTOR BOX. ISNGADJ,JMS I [PPROCESS] /UPDATE NGADJUST /NEGATIVE GAIN ADJUSTMENT FACTOR 780-J-J-J+1 /Y-COORDINATE JMP INIGNORE /KEEP GOING / COMES HERE IF THE MOUSE IS IN THE EYE MOVEMENT MARK BOX. ISEMARK,CIF CODFLD /GOTO CODE FIELD JMS I [CHKBCONTROL] /UPDATE STATUS NL0001 /INDICATE DATA MARKS JMS I (DRAWPS) /DRAW STATUS WORD 238 /X-POSITION 780-J-J-J-J+69 /Y-POSITION TAD BCONTRL /GET CONTROL WORD CLL RAR /MOVE DOWN CML RAL /INVERT AND MOVE UP DCA BCONTRL /STORE BACK NL0001 /INDICATE DATA MARKS JMS I (DRAWPS) /DRAW STATUS WORD 238 /X-POSITION 780-J-J-J-J+69 /Y-POSITION ISRENTR,CIF CODFLD /GOTO CODE FIELD JMS I [WRITBLK] /WRITE OUT CURRENT BUFFER NL7777 /INVALIDATE THE DCA LATFLD /CURRENT BUFFER CIF CODFLD /GOTO CODE FIELD JMS I [STSETUP] /SETUP NEW STATUS BUFFER JMP INIGNORE /CONTINUE THERE / COMES HERE IF THE MOUSE IS IN THE REQUEST MARK BOX. ISRMARK,CIF CODFLD /GOTO CODE FIELD JMS I [CHKBCONTROL] /UPDATE STATUS NL0002 /INDICATE REQUEST MARKS JMS I (DRAWPS) /DRAW STATUS WORD 776 /X-POSITION 780-J-J-J-J+69 /Y-POSITION TAD BCONTRL /GET CONTROL WORD CLL RTR /MOVE DOWN CML RTL /INVERT AND MOVE UP DCA BCONTRL /STORE BACK NL0002 /INDICATE REQUEST MARKS JMS I (DRAWPS) /DRAW STATUS WORD 776 /X-POSITION 780-J-J-J-J+69 /Y-POSITION JMP ISRENTRY /CONTINUE THERE VELMAG, DVELMAG;0 /VELOCITY MAGNITUDE PAGE / LOCATE COMMAND. LOCATE, JMS I [CLRSCREEN] /CLEAR THE SCREEN / DRAW BEGINNING THRESHOLD STUFF. JMS I [VECDRAW] /DRAW VECTORS 4 /X-OFFSET 780-J /Y-OFFSET LRULER-1 /LIST POINTER / DRAW ENDING THRESHOLD STUFF. 4 /X-OFFSET 780-J-J /Y-OFFSET LRULER-1 /LIST POINTER / DRAW BEGINNING OFFSET STUFF. 4 /X-OFFSET 780-J-J-J /Y-OFFSET LRULER-1 /LIST POINTER / DRAW ENDING OFFSET STUFF. 4 /X-OFFSET 780-J-J-J-J /Y-OFFSET LRULER-1 /LIST POINTER / DRAW ASSORTED LINES. 0 /X-OFFSET 0 /Y-OFFSET LBOX-1 /LIST POINTER 4 /X-OFFSET 0 /Y-OFFSET LBORDER-1 /LIST POINTER -1 /THIS ENDS THE LISTS / DRAW ASSORTED MESSAGES. JMS I [SPRINT] /CALL SCREEN PRINT 401 /X-COORDINATE 780-J+119 /Y-COORDINATE BTBLURB /MESSAGE POINTER 415 /X-COORDINATE 780-J-J+119 /Y-COORDINATE ETBLURB /MESSAGE POINTER 374 /X-COORDINATE 780-J-J-J+119 /Y-COORDINATE BOBLURB /MESSAGE POINTER 386 /X-COORDINATE 780-J-J-J-J+119 /Y-COORDINATE EOBLURB /MESSAGE POINTER 769 /X-COORDINATE 106 /Y-COORDINATE PRBLURB /MESSAGE POINTER -1 /THIS ENDS THE LISTS DLD; BEGTHRESHOLD /GET BEGINNING THRESHOLD JMS I [DRAWIT] /DRAW BAR AND SCALE VALUES 780-J+1 /Y-COORDINATE DLD; ENDTHRESHOLD /GET END THRESHOLD JMS I [DRAWIT] /DRAW BAR AND SCALE VALUES 780-J-J+1 /Y-COORDINATE DLD; BEGOFFSET /GET BEGINNING OFFSET DCM /WANT POSITIVE FORM JMS I (NCONVERT) /CONVERT TO ROUNDED MS DST; BEGMS /SAVE FOR LATER JMS I [DRAWIT] /DRAW BAR AND SCALE VALUES 780-J-J-J+1 /Y-COORDINATE DLD; ENDOFFSET /GET ENDING OFFSET JMS I (NCONVERT) /CONVERT TO ROUNDED MS DST; ENDMS /SAVE FOR LATER JMS I [DRAWIT] /DRAW BAR AND SCALE VALUES 780-J-J-J-J+1 /Y-COORDINATE MIGNORE,JMS I [GINPROCESS] /GET MOUSE INPUT DCA LRSW /SAVE LEFT/RIGHT SWITCH CIF CODFLD /GOTO CODE FIELD JMS I [BOXDISPATCH] /CHECK IF MOUSE IS IN ANY ACTIVE BOX LPBOXLIST-1 /LIST POINTER JMP MIGNORE /NOT IN ANY BOX / COMES HERE IF THE MOUSE IS IN THE BEGIN THRESHOLD BOX. ISBEGTH,JMS I [PPROCESS] /UPDATE BEGTHRESHOLD /BEGINNING THRESHOLD 780-J+1 /Y-COORDINATE JMP MIGNORE /KEEP GOING / COMES HERE IF THE MOUSE IS IN THE END THRESHOLD BOX. ISENDTH,JMS I [PPROCESS] /UPDATE ENDTHRESHOLD /ENDING THRESHOLD 780-J-J+1 /Y-COORDINATE JMP MIGNORE /KEEP GOING / COMES HERE IF THE MOUSE IS IN THE BEGIN OFFSET BOX. ISBEGOF,JMS I [PPROCESS] /UPDATE BEGMS /CONVERTED BEGIN OFFSET 780-J-J-J+1 /Y-COORDINATE DLD; BEGMS /GET NEW CONVERTED BEGIN OFFSET JMS I (CONVNUMBER) /CONVERT BACK TO POINTER FORM DCM /WANT NEGATIVE FORM DST; BEGOFFSET /STORE NEW VALUE JMP MIGNORE /KEEP GOING / COMES HERE IF THE MOUSE IS IN THE END OFFSET BOX. ISENDOF,JMS I [PPROCESS] /UPDATE ENDMS /CONVERTED END OFFSET 780-J-J-J-J+1 /Y-COORDINATE DLD; ENDMS /GET NEW CONVERTED END OFFSET JMS I (CONVNUMBER) /CONVERT BACK TO POINTER FORM DST; ENDOFFSET /STORE NEW VALUE JMP MIGNORE /KEEP GOING / DOUBLE-PRECISION DATA. BEGOFFS,-DBEGOFFSET; -1 /BEGIN OFFSET FOR LOCATE BEGTHRE,DBEGTHRESHOLD; 0 /BEGIN THRESHOLD FOR LOCATE ENDBIAS,-20^4; -1 /END BIAS FOR LOCATE ENDOFFS,DENDOFFSET; 0 /END OFFSET FOR LOCATE ENDTHRE,DENDTHRESHOLD; 0 /END THRESHOLD FOR LOCATE GADJUST,DGADJUS;0 /POSITIVE GAIN CALIBRATOR NGADJUS,DNGADJU;0 /NEGATIVE GAIN CALIBRATOR / DECISION FUNCTION TABLE. F1MF2TA,6; 14; 22; 30 /DECISION FUNCTION COEFFICIENTS PAGE / COMES HERE IF MOUSE IS IN THE PROCEED BOX. LPEXIT, NL7777 /INDICATE NO DCA LOCNT /REQUEST MARKS YET NL0004 /SETUP DCA PTRLO /PAST THE DCA PTRHI /BLOCK LIMIT JMS I [SPRINT] /CALL SCREEN PRINT 743 /X-COORDINATE 61 /Y-COORDINATE GOBLURB /MESSAGE POINTER -1 /THIS ENDS THE LISTS JMS I [DFINISH] /FINISH UP THE DISPLAY OCTAL /BACK TO NORMAL L1LOOP, DLD; PTR /GET THE LATEST POINTER DAD; MLIMIT /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF OK JMP LOCEND /JUMP IF AT END JMS I [GETPACKET] /GET LATEST PACKET NL0002 /SET START MASK AND LEXTRA /GET THE BIT SNA CLA /SKIP IF START FOUND JMP L1NEXT /JUMP IF NOT DLD; PTR /GET THE CURRENT POINTER VALUE DST; BEGPTR /SAVE AS BEGINNING POINTER JMP L2LOOP /NOW GO LOOK FOR A FINISH MARK L1NEXT, JMS I [NXTPACKET] /BUMP TO NEXT PACKET JMP L1LOOP /KEEP GOING L2LOOP, DLD; PTR /GET THE POINTER DAD; MLIMIT /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF OK JMP LOCEND /JUMP IF NOT JMS I [GETPACKET] /GET LATEST PACKET NL0001 /SET FINISH MASK AND LEXTRA /GET THE BIT SNA CLA /SKIP IF FINISH FOUND JMP L2NEXT /JUMP IF NOT DLD; PTR /GET THE CURRENT POINTER VALUE DST; SAVPTR /SAVE FOR LATER DCM /INVERT IT FOR TESTING LATER DST; ENDLIMIT /SAVE AS END LIMIT VALUE JMS I (LOC8) /GO LOCATE SOME MOVEMENTS DCA LOCNT /INDICATE REQUEST MARKS WERE FOUND DLD; SAVPTR /GET PREVIOUS VALUE DST; PTR /RESTORE IT JMP L1LOOP /KEEP GOING L2NEXT, JMS I [NXTPACKET] /BUMP TO NEXT PACKET JMP L2LOOP /KEEP GOING LOCEND, ISZ LOCNT /ANY REQUEST MARKS FOUND? JMP I [PLTFRC] /YES, JUST RETURN JMS I [CLRSCREEN] /CLEAR THE SCREEN JMS I [SCRMSG] /OUTPUT THE NOLMSG /COMPLAINT MESSAGE JMP I [PLTFRC] /KEEP GOING / QUIT COMMAND. QUIT, JMS I [CLRSCREEN] /CLEAR THE SCREEN JMS I [SPRINT] /PRINT SCREEN MESSAGE 0 /X-COORDINATE 0 /Y-COORDINATE QUITMSG /MESSAGE POINTER -1 /THIS ENDS THE LISTS CIF CODFLD /GOTO CODE FIELD JMS I [WRITBLK] /(POSSIBLY) WRITE OUT OPEN BLOCK TAD [-200] /SETUP THE DCA CNT /BUFFER COUNT DCA PTRHI /CLEAR THE DCA PTRLO /DATA POINTER TAD (STATBUFFER-1) /SETUP THE DCA XR1 /BUFFER POINTER QUITLUP,CDF VELFLD /GOTO MESSAGE FIELD TAD I XR1 /GET AN ENTRY CDF PRGFLD /BACK TO OUR FIELD SZA CLA /SKIP IF ALREADY HANDLED JMS I [GETPACKET] /READ THIS ONE IN TO STRIP IT ISZ PTRHI /BUMP TO NEXT BUFFER ISZ CNT /DONE ALL YET? JMP QUITLUP /NO, KEEP GOING TAD (-21) /SETUP THE DCA TEMP /WASTE COUNT ISZ CNT /WASTED ENOUGH? JMP .-1 /NO, KEEP GOING ISZ TEMP /DONE YET? JMP .-3 /NO, KEEP GOING JMS I [CLRSCREEN] /CLEAR THE SCREEN JMP I [SBOOT] /GOODBYE! / CONVERT POINTER VALUE TO MS ROUTINE. NCONVER,.-. /NUMERIC CONVERT AND ROUND ROUTINE / SZA /BETTER BE SINGLE-PRECISION / HLT /ELSE BARF SHL; 1 /*2 DVI; (5) /%5 TAD [-2] /SHOULD WE ROUND UP? SMA SZA CLA /SKIP IF NO NL0001 /SET ROUNDING VALUE DCA TRND /STORE EITHER WAY DAD; TRND /ADD ON ROUNDING FACTOR JMP I NCONVERT /RETURN / CONVERT MS TO POINTER VALUE ROUTINE. CONVNUM,.-. /CONVERT MS TO POINTER VALUE DLD; PPRTEMP /GET BACK VALUE MUY; (5) /*5 DAD; D4 /ROUND UP ASR; 3 /%2%4 SHL; 2 /*4 JMP I CONVNUMBER /RETURN LOCNT, .-. /REQUEST MARKS FOUND FLAG TRND, ZBLOCK 2 /ROUNDUP FACTOR PAGE / LOCATE MOVEMENTS ROUTINE. LOC8, .-. /LOCATE SELECTED MOVEMENTS ROUTINE DLD; BEGPTR /GET BEGINNING POINTER VALUE DST; PTR /SET IT UP CAM /CLEAN UP DST; CUMSUM /CLEAR CUMULATIVE SUM JMS I (INITDEC) /INITIALIZE DECISION FUNCTION JMS MOVEUP /WASTE 13 POINTS BEGLUP, JMS LOCONE /GO DO A POINT DAD; BEGTHRESHOLD /COMPARE TO THRESHOLD VALUE SMA /SKIP IF AT A BEGIN JMP BEGBMP /JUMP IF NOT DLD; PTR /GET POINTER VALUE DST; BEGPTR /SAVE FOR LATER JMP ENDBMP /CONTINUE THERE BEGBMP, JMS I [NXTPACKET] /BUMP TO NEXT JMP BEGLUP /KEEP GOING ENDLUP, JMS LOCONE /GO DO A POINT DAD; ENDTHRESHOLD /COMPARE TO THRESHOLD VALUE SPA /SKIP IF LESS THAN THRESHOLD VALUE JMP ENDBMP /JUMP IF NOT DLD; PTR /GET CURRENT POINTER VALUE DST; SAV2PTR /SAVE FOR LATER DLD; BEGPTR /GET BEGINNING DISCOVERY POINTER DAD; BEGOFFSET /OFFSET TO PROPER PLACE DST; PTR /SETUP THE POINTER JMS I [GETPACKET] /READ IN THE DATA TO BE MODIFIED CLL /INDICATE BEGINNING JMS STORIT /STORE BEGINNING DLD; SAV2PTR /GET END DISCOVERY POINTER DAD; ENDBIAS /ADD ON BIAS TO MAKE OFFSET ALWAYS + DAD; ENDOFFSET /ADD ON OFFSET DST; PTR /SETUP THE POINTER JMS I [GETPACKET] /READ IN THE DATA TO BE MODIFIED STL /INDICATE END JMS STORIT /STORE END DLD; SAV2PTR /GET SAVED VALUE DST; PTR /RESTORE IT NL7775 /INDICATE WE WANT 25.6 MS JMS MOVEUP /MOVE UP THROUGH TIME JMP BEGBMP /GO BACK FOR MORE ENDBMP, JMS I [NXTPACKET] /BUMP TO NEXT JMP ENDLUP /KEEP GOING LOCONE, .-. /PROCESS ONE POINT ROUTINE DLD; PTR /GET CURRENT VALUE DAD; ENDLIMIT /COMPARE TO UPPER LIMIT OF REQUEST SMA CLA /SKIP IF OK JMP I LOC8 /ELSE RETURN JMS I [GETPACKET] /GET LATEST DATA TAD LX /GET X-WORD SHL; 2 /MOVE UP ASR; 2 /MOVE DOWN JMS I (CALDEC) /CALCULATE DECISION FUNCTION DCM /WANT NEGATIVE FORM JMP I LOCONE /RETURN MOVEUP, .-. /MOVE UP THE DATA POINTER ROUTINE TAD [-15] /SETUP THE DCA STORIT /WASTE COUNT DFILUP, JMS LOCONE /DO A POINT JMS I [NXTPACKET] /BUMP TO NEXT ISZ STORIT /WASTED ENOUGH? JMP DFILUP /NO, KEEP GOING JMP I MOVEUP /RETURN STORIT, .-. /BEGIN/END STORE ROUTINE CDF DATFLD /GOTO DATA FIELD TAD I PTRLO /GET X-WORD AND [1777] /JUST ANALOG BITS SNL /SKIP IF END TAD [4000] /MAKE IT A BEGIN DCA I PTRLO /STORE BACK ISZ PTRLO /BUMP TO NEXT TAD I PTRLO /GET Y-WORD AND [1777] /JUST ANALOG BITS SZL /SKIP IF BEGIN TAD [4000] /MAKE IT AN END DCA I PTRLO /STORE BACK ISZ PTRLO /BUMP TO TIME WORD ISZ PTRLO /BUMP TO EXTRA WORD NL3777 /SET MASK AND I PTRLO /REMOVE SLOW-PHASE BIT DCA I PTRLO /STORE BACK CDF PRGFLD /BACK TO OUR FIELD DCA BDIRTY /WRITE OUT DIRTY BUFFER JMP I STORIT /RETURN BEGPTR, ZBLOCK 2 /BEGIN POINTER FOR LOCATE CUMSUM, ZBLOCK 2 /CUMULATIVE SUM OF POSITION DECFUNC,ZBLOCK 2 /DECISION FUNCTION ENDLIMI,ZBLOCK 2 /END LIMIT FOR LOCATE SAVPTR, ZBLOCK 2 /SAVED PTR SAV2PTR,ZBLOCK 2 /SAVED PTR PAGE / DECISION FUNCTION CALCULATION. CALDEC, .-. /CALCULATE DECISION FUNCTION ASR; 14 /MAKE IT DOUBLE-PRECISION DST; LATPOSITION /SAVE IT NL0001 /SET INCREMENT TAD SMPTR /UPDATE TO NEXT AND (7767) /JUST GOOD BITS DCA SMPTR /STORE BACK TAD I SMPTR /GET OLDEST POINT MQL /SAVE IT TAD LATPOSITION /GET LATEST DCA I SMPTR /STORE IN BUFFER MQA /GET OLDEST ASR; 14 /TO LOW-ORDER DCM /NEGATE FOR SUBTRACTING DAD; CUMSUM /ADD ON CUMULATIVE SUM DAD; LATPOSITION /ADD ON LATEST POSITION DST; CUMSUM /STORE BACK ASR; 3 /DIVIDE BY 8 CLA MQA /GET LOW-ORDER PTINST, DCA DBUF+4+.-. /STORE IN DECISION BUFFER NL0001 /SET INCREMENT TAD PTINST /UPDATE TO NEXT AND (7767) /JUST GOOD BITS DCA PTINST /STORE BACK / INITIALIZE MULTIPLY LOOP. CAM /CLEAN UP DST; DECFUNCTION /CLEAR DECISION FUNCTION TAD RETINST /GET RETRIEVAL INSTRUCTION DCA GTINST /SET IT UP NL0001 /SET INCREMENT TAD RETINST /UPDATE TO NEXT AND (7767) /JUST GOOD BITS DCA RETINST /STORE BACK TAD (F1MF2TABLE-1) /POINT TO DCA XR1 /COEFFICIENT TABLE TAD [-4] /SETUP THE DCA CNT /MULTIPLY COUNTER / SETUP -[FIRST TERM]. NL0001 /GET UPDATE FACTOR TAD SUBINST /UPDATE TO NEXT VALUE AND (7767) /JUST GOOD BITS DCA SUBINST /STORE BACK SUBINST,TAD DBUF+0+.-. /GET FIRST POINT IN BUFFER CIA /WANT NEGATIVE FORM DCA MOLDEST /SAVE FOR LATER DECLOOP,NL0001 /SET INCREMENT TAD GTINST /UPDATE TO NEXT AND (7767) /JUST GOOD BITS DCA GTINST /STORE BACK TAD I XR1 /GET LATEST COEFFICIENT DCA MULARG /STORE IN-LINE GTINST, TAD DBUF+1+.-. /GET LATEST DECISION ELEMENT TAD MOLDEST /SUBTRACT OLDEST SPA /SKIP IF POSITIVE CIA /NEGATE TO MAKE IT SO MQL MUY;MULARG /MULTIPLY BY LATEST COEFFICIENT DAD; DECFUNCTION /ADD ON DECISION SUM DST; DECFUNCTION /STORE BACK ISZ CNT /DONE YET? JMP DECLOOP /NO, KEEP GOING JMP I CALDEC /YES, RETURN INITDEC,.-. /INITIALIZE DECISION FUNCTION ROUTINE TAD (BUF+7) /SETUP THE DCA SMPTR /SMOOTHING POINTER TAD (TAD DBUF+1-1) /SETUP THE DCA RETINST /RETRIEVAL INSTRUCTION TAD (DCA DBUF+4) /SETUP DCA PTINST /TAIL STORAGE TAD (TAD DBUF+7) /SETUP DCA SUBINST /HEAD RETRIEVAL POINTER TAD [-10] /SETUP THE DCA CNT /TABLE COUNT TAD (DCA BUF+0) /SETUP THE DCA CLRINST /CLEAR INSTRUCTION TAD (DCA DBUF+0) /SETUP THE DCA CLINST /CLEAR INSTRUCTION CLRINST,DCA BUF+0+.-. /CLEAR A WORD CLINST, DCA DBUF+0+.-. /CLEAR A WORD ISZ CLRINST /BUMP TO NEXT ISZ CLINST /BUMP TO NEXT ISZ CNT /DONE YET? JMP CLRINST /NO, GO BACK JMP I INITDEC /RETURN / THE REST OF THE PAGE IS AVAILABLE FOR ONCE-ONLY CODE PURPOSES. ONCE= . /ONCE-ONLY CODE GOES HERE BEGMS, ZBLOCK 2 /BEGIN OFFSET IN MS. ENDMS, ZBLOCK 2 /END OFFSET IN MS. ZBLOCK .+17&7760-. /EMPTY SPACE BUF, ZBLOCK 10 /SMOOTHING BUFFER GTPNTR, .-. /RETRIEVE POINTER FOR DECISION BUFFER LATPOSI,ZBLOCK 2 /LATEST POSITION VALUE MOLDEST,.-. /-[FIRST POINT IN DECISION BUFFER] MULARG, .-. /MULTIPLY ARGUMENT RETINST,TAD DBUF+1-1+.-. /RETRIEVAL INSTRUCTION SMPTR, BUF+7+.-. /SMOOTH BUFFER POINTER ZBLOCK .+17&7760-. /EMPTY SPACE DBUF, ZBLOCK 10 /DECISION BUFFER *ONCE /ONCE-ONLY CODE LOADS HERE / INITIALIZATION STARTS HERE. INITIAL,CIF CDF CODFLD /GOTO CODE FIELD JMP I .+1/(INIT2) /CONTINUE THERE INIT2 /THROUGH HERE / INITIALIZATION FINISHES HERE. INIFINI,JMS I [STROUT] /SEND STRINGS TO TERMINAL BLAMEM /BLANK THE ALPHA SCREEN UNGMEM /UNBLANK THE GRAPHICS SCREEN DSGMEM /DISPLAY THE GRAPHICS MEMORY NOLOG /NO DATA LOGGING MKEYS /REDEFINE MOUSE UDK KEYS NDSPACE /NON-DESTRUCTIVE SPACE IN GRAPHICS ALPHA MODE EGACLR /ENTER GRAPHICS ALPHA MODE, CLEAR SCREEN VECMODE /GOTO VECTOR MODE 0 /THIS ENDS THE LIST / SETUP SCREEN ADDRESS FOR OPENING ANNOUNCEMENT MESSAGE. JMS I [SCRMSG] /GIVE SCREEN MESSAGE ANNMSG /OPENING MESSAGE CIF CODFLD /GOTO CODE FIELD JMS I [STSETUP] /SETUP STATUS TABLE JMP I [PLTFRC] /CONTINUE THERE PAGE / GET LATEST PACKET ROUTINE. / CALL WITH: / "PTR" POINTS TO LATEST DATA NEEDED. / JMS I [GETPACKET] /CALL ROUTINE / RETURNS WITH "LPACK" CONTAINING REQUESTED DATA. LATEST DATA BUFFER / CORRESPONDS TO VALUE IN "PTR". GETPACK,.-. /GET LATEST PACKET ROUTINE CLA /CLEAN UP TAD PTRHI /GET HIGH-ORDER CIA /INVERT FOR TEST TAD LATFLD /COMPARE TO CURRENTLY READ IN FIELD SNA CLA /SKIP IF DIFFERENT JMP JUSTGETPACKET /JUMP IF THEY MATCH CIF CODFLD /GOTO CODE FIELD JMS I [WRITBLK] /WRITE OUT CURRENT BLOCKS TAD PTRHI /GET HIGH-ORDER DCA LATFLD /MAKE IT LATEST FIELD NL0001 /INDICATE THAT DCA BDIRTY /BUFFER MUST BE READ IN CIF CODFLD /GOTO CODE FIELD JMS I (READBLK) /GO READ IT IN JUSTGET,CDF DATFLD /GOTO DATA FIELD NL7777 /BACK UP TAD PTRLO /POINT TO DCA XR1 /DATA PACKET TAD I XR1 /GET X-WORD DCA LX /STASH IT TAD I XR1 /GET Y-WORD DCA LY /STASH IT TAD I XR1 /GET TIME-WORD DCA LTIME /STASH IT TAD I XR1 /GET EXTRA-WORD DCA LEXTRA /STASH IT CDF PRGFLD /BACK TO OUR FIELD JMP I GETPACKET /RETURN / BUMP TO NEXT PACKET ROUTINE. / CALL WITH: / JMS I [NXTPACKET] /CALL ROUTINE / "PTR" IS INCREMENTED TO THE NEXT PACKET OF INFORMATION. NXTPACK,.-. /BUMP TO NEXT PACKET ROUTINE NL0003 /SET INCREMENT-1 TAD PTRLO /GET LOW-ORDER DCA PTRLO /STORE (NEARLY) UPDATED VALUE ISZ PTRLO /BUMP TO NEXT SKP /SKIP IF NOT AT END OF BUFFER ISZ PTRHI /ELSE BUMP HIGH-ORDER AS WELL JMP I NXTPACKET /RETURN / PARAMETER PROCESSING ROUTINE. PPROCES,.-. /PARAMETER PROCESSING ROUTINE TAD I PPROCESS /GET ADDRESS ARGUMENT DCA PRARG1 /STORE IN-LINE TAD PRARG1 /GET IT BACK DCA PRARG2 /STORE IN-LINE TAD PRARG2 /GET IT BACK DCA PRARG3 /STORE IN-LINE ISZ PPROCESS /BUMP TO NEXT TAD I PPROCESS /GET Y-COORDINATE ARGUMENT DCA PRYAR1 /STORE IN-LINE TAD PRYAR1 /GET IT BACK DCA PRYAR2 /STORE IN-LINE DLD; PRARG1,.-. /GET THE VALUE JMS I [DRAWIT] /DRAW THE CURRENT VALUE PRYAR1, .-. /WILL BE Y-COORDINATE DLD; PRARG2, .-. /GET THE VALUE AGAIN DST; PPRTEMP /STORE FOR LATER DVI; [62] /DIVIDE BY 50 CLA MUY;[62] /MULTIPLY BY 50 DST; PBASE /SAVE AS BASE TAD GINHORIZONTAL /GET HORIZONTAL COORDINATE MQL DVI;[12] /%10 CLA MQA /GET QUOTIENT DCA MVALUE /SAVE FOR LATER ISZ LRSW /LEFT OR RIGHT BUTTON GOT US HERE? JMP MBLEFT /WAS LEFT BUTTON TAD MVALUE /GET MOUSE-DERIVED OFFSET TAD (-62) /COMPARE TO 50 SPA CLA /SKIP IF 50 OR GREATER TAD (-144) /MAKE IT -50 TAD [62] /-50 IF < 50; 50 IF >= 50 CLL /CLEAR LINK TENTATIVELY SMA /SKIP IF OK CML /POSITIVE WANTS SET LINK TAD PBASE /TRY TO UPDATE BASE SNL /SKIP IF OK JMP MNOCHANGE /JUMP IF NOT POSSIBLE TAD [-7640] /COMPARE TO PROBLEMATIC VALUE SNA /SKIP IF OTHER JMP MNOCHANGE /FORGET IT TAD (7640) /RESTORE VALUE DCA PBASE /UPDATE BASE VALUE TAD MVALUE /GET MOUSE-DERIVED OFFSET TAD (-62) /COMPARE TO CENTER VALUE SMA /SKIP IF LEFT OF CENTER DCA MVALUE /LOWER VALUE IF RIGHT OF CENTER CLA /CLEAN UP JMP RBUTENTRY /CONTINUE THERE / COMES HERE IF THE LEFT BUTTON WAS CLICKED. MBLEFT, TAD MVALUE /GET MOUSE-DERIVED OFFSET TAD (-62) /COMPARE TO CENTER VALUE SMA CLA /SKIP IF LEFT OF CENTER TAD (-764) /MOVE DOWN 1/2 SCREEN TAD GINHORIZONTAL /ADD ON CURRENT POSITION DCA GINHORIZONTAL /STORE BACK RBUTENT,TAD PBASE /GET THE BASE VALUE TAD MVALUE /ADD ON MOUSE-DERIVED OFFSET MQL /TO LOW-ORDER DST; PPRTEMP /STORE NEW VALUE MNOCHAN,DLD; PPRTEMP /GET NEW VALUE DST; PRARG3, .-. /STORE THE NEW VALUE JMS I [DRAWIT] /DRAW THE NEW VALUE PRYAR2, .-. /WILL BE Y-COORDINATE ISZ PPROCESS /BUMP PAST ARGUMENT JMP I PPROCESS /RETURN MVALUE, .-. /DERIVED MOUSE VALUE PBASE, ZBLOCK 2 /PARAMETER BASE PPRTEMP,ZBLOCK 2 /PROCESSED PARAMETER VALUE PAGE / BAR AND SCALE VALUE DRAWING ROUTINE. DRAWIT, .-. /DRAW BAR AND SCALE VALUES ROUTINE DST; DRWTEMP /SAVE PASSED VALUE CLA /CLEAN UP TAD I DRAWIT /GET PASSED Y-COORDINATE DCA DRWAR1 /STORE IN-LINE TAD I DRAWIT /GET IT AGAIN TAD (122) /ADD ON OFFSET FOR DIGITS DCA DRWAR2 /STORE IN-LINE DLD; DRWTEMP /GET PASSED VALUE JMS PDRAW /DRAW BAR DRWAR1, .-. /WILL BE Y-COORDINATE DLD; DRWTEMP /GET PASSED VALUE JMS OSCALE /OUTPUT SCALE VALUES DRWAR2, .-.+122 /WILL BE Y-COORDINATE ISZ DRAWIT /BUMP PAST ARGUMENT JMP I DRAWIT /RETURN / OUTPUT SCALE NUMBERS ROUTINE. OSCALE, .-. /OUTPUT SCALE NUMBERS ROUTINE / SZA /BETTER BE SINGLE-PRECISION / HLT /ELSE BARF DVI; [62] /DIVIDE BY 50 CLA MUY;[62] /MULTIPLY BY 50 CLA MQA /GET PRODUCT DCA TEMP /SAVE IT FOR LATER TAD I OSCALE /GET Y-COORDINATE VALUE DCA Y /STASH IT TAD (10) /GET INITIAL X-VALUE DCA X /STASH IT MQA /GET LEFT-SCALE VALUE JMS OUT4 /OUTPUT IT TAD X /GET X-COORDINATE TAD (764) /ADJUST TO CENTER POSITION DCA X /STORE BACK TAD TEMP /GET VALUE TAD [62] /ADJUST TO CENTER-SCALE VALUE JMS OUT4 /OUTPUT IT TAD X /GET X-COORDINATE TAD (670) /ADJUST TO RIGHT-SCALE POSITION DCA X /STORE BACK TAD TEMP /GET VALUE TAD (144) /ADJUST TO RIGHT-SCALE VALUE JMS OUT4 /OUTPUT IT ISZ OSCALE /BUMP PAST ARGUMENT JMP I OSCALE /RETURN / PARAMETER DRAWING ROUTINE. PDRAW, .-. /PARAMETER DRAW ROUTINE / SZA /BETTER BE SINGLE-PRECISION / HLT /ELSE BARF DVI; [62] /DIVIDE BY 50 MQL MUY;[12] /GET REMAINDER*10 SZA /BETTER BE SINGLE-PRECISION PRODUCT HLT /ELSE BARF MQA /GET THE PRODUCT DCA X /USE AS LEFT-HAND COORDINATE TAD I PDRAW /GET Y-COORDINATE DCA Y /STASH IT JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS LEVCOM /USE COMPLEMENT DATA LEVEL BLKFILL /USE BLOCK FILL MODE VECMODE /GOTO VECTOR MODE ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST TAD X /GET CURRENT X TAD (10) /ADD 8 DCA X /STORE BACK TAD Y /GET CURRENT Y TAD (117) /ADD 79 DCA Y /STORE BACK JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS ADRBUFFER /ADDRESS VCDRAW /USE VECTOR DRAW MODE LEVSET /USE SET DATA LEVEL 0 /THIS ENDS THE LIST ISZ PDRAW /BUMP PAST ARGUMENT JMP I PDRAW /RETURN / CLEAR THE SCREEN ROUTINE. CLRSCRE,.-. /CLEAR SCREEN ROUTINE JMS I [STROUT] /OUTPUT STRINGS EGACLR /CLEAR THE SCREEN 0 /THIS ENDS THE LIST JMP I CLRSCREEN /RETURN OUT4, .-. /OUTPUT 4 DIGITS ROUTINE CIF CODFLD /GOTO CODE FIELD JMS I (OUTIT) /OUTPUT THE DIGITS INTO THE BUFFER JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS LEVCOM /USE COMPLEMENT MODE VECMODE /GOTO VECTOR MODE ADRBUFFER /ADDRESS ANOMOVE /ALPHA MODE SCHARS /STANDARD SIZE CHARACTERS OUTB /DIGITS LEVSET /USE SET MODE 0 /THIS ENDS THE LIST JMP I OUT4 /RETURN DRWTEMP,ZBLOCK 2 /TEMPORARY FOR DRAWIT PAGE / TERMINAL GRAPHICS ALPHA MESSAGE PRINTING ROUTINE. TERMPRT,.-. /TERMINAL PRINTING ROUTINE CLA /CLEAN UP TAD I TERMPRT /GET MESSAGE POINTER DCA MSGPTR /STASH IT ISZ TERMPRT /BUMP PAST ARGUMENT TAD (140) /INITIALIZE TO LOWER-CASE CASZP1, DCA MSGCASE /**** /U **** CLA!400 MSGLUP, CDF MSGFLD /GOTO MESSAGE FIELD TAD I MSGPTR /GET LEFT HALF-WORD RTR;RTR;RTR /MOVE OVER JMS MSGPRNT /PRINT IT CDF MSGFLD /GOTO MESSAGE FIELD TAD I MSGPTR /GET RIGHT HALF-WORD JMS MSGPRNT /PRINT IT ISZ MSGPTR /BUMP TO NEXT PAIR JMP MSGLUP /KEEP GOING MSGPRNT,.-. /CHARACTER PRINT ROUTINE CDF PRGFLD /BACK TO OUR FIELD AND (77) /JUST SIX-BIT SNA /END OF MESSAGE? JMP I TERMPRT /YES, RETURN TO ORIGINAL CALLER DCA MSGCHAR /NO, SAVE FOR NOW TAD MSGCHAR /GET IT BACK TAD (-"%!200) /IS IT "%"? SNA /SKIP IF NOT JMP MSGCRLF /JUMP IF IT MATCHES TAD [-"^+100+"%] /IS IT "^" SNA CLA /SKIP IF NOT JMP MSGFLIP /JUMP IF IT MATCHES TAD MSGCHAR /GET THE CHARACTER AND [40] /DOES CASE MATTER? SNA CLA /SKIP IF NOT TAD MSGCASE /ELSE GET PREVAILING CASE TAD MSGCHAR /GET THE CHARACTER JMS I (TERMOUT) /PRINT THE CHARACTER JMP I MSGPRNT /RETURN MSGCRLF,JMS CRLF /DO A , JMP I MSGPRNT /RETURN MSGFLIP,TAD MSGCASE /GET CURRENT CASE CIA /INVERT IT TAD (140+100) /ADD SUM OF POSSIBLE VALUES CASZP2, DCA MSGCASE /**** /U **** CLA!400 JMP I MSGPRNT /RETURN DECIMAL /MAKE IT EASIER DRWGAIN,.-. /DRAW THE GAIN, ETC. ROUTINE JMS I [BDRAW] /DRAW GAIN BOX 856; 265 /FROM HERE 1023; 304 /TO HERE JMS I [BDRAW] /DRAW JUMP BOX 856; 505 /FROM HERE 1023; 544 /TO HERE JMS I [BDRAW] /DRAW OFFSET BOX 856; 740 /FROM HERE 1023; 779 /TO HERE JMS I [TPRINT] /DRAW MESSAGES 917 /X-COORDINATE 528 /Y-COORDINATE GMAGMSG /MESSAGE ADDRESS 858 /X-COORDINATE 288 /Y-COORDINATE VJMSG /MESSAGE ADDRESS 872 /X-COORDINATE 762 /Y-COORDINATE GOFMSG /MESSAGE ADDRESS -1 /THIS ENDS THE LIST JMS DRWNUMBER /OUTPUT SEQUENCE 911 /X-COORDINATE 510 /Y-COORDINATE GBUFFER /MESSAGE ADDRESS JMS DRWNUMBER /OUTPUT SEQUENCE 909 /X-COORDINATE 270 /Y-COORDINATE VJBUFFER /MESSAGE ADDRESS JMS DRWNUMBER /OUTPUT SEQUENCE 912 /X-COORDINATE 744 /Y-COORDINATE OFBUFFER /MESSAGE ADDRESS JMP I DRWGAIN /RETURN OCTAL /BACK TO NORMAL DRWNUMB,.-. /DRAW NUMERIC SEQUENCES ROUTINE TAD I DRWNUMBER /GET X VALUE DCA X /STASH IT ISZ DRWNUMBER /BUMP TO NEXT TAD I DRWNUMBER /GET Y VALUE DCA Y /STASH IT ISZ DRWNUMBER /BUMP TO NEXT TAD I DRWNUMBER /GET STRING ADDRESS DCA DRWNARGUMENT /STORE IN-LINE JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS VECMODE /GOTO VECTOR MODE ADRBUFFER /ADDRESS ANOMOVE /GOTO ALPHA MODE TCHARS /TINY CHARACTERS DRWNARG,.-. /WILL BE STRING ARGUMENT 0 /THIS ENDS THE LIST ISZ DRWNUMBER /BUMP PAST LAST ARGUMENT JMP I DRWNUMBER /RETURN / , ROUTINE. CRLF, .-. /, ROUTINE CLA /JUST IN CASE TAD ("M&37) /GET A JMS I (TERMOUT) /PRINT IT TAD ["J&37] /GET A JMS I (TERMOUT) /PRINT IT JMP I CRLF /RETURN MSGCASE,100 /ALPHABETIC CASE MSGCHAR,.-. /LATEST OUTPUT CHARACTER MSGPTR, .-. /MESSAGE POINTER PAGE / STRING OUTPUT ROUTINE. STROUT, .-. /STRING OUTPUT ROUTINE CLA /CLEAN UP STRLUP, TAD I STROUT /GET AN ARGUMENT ISZ STROUT /BUMP TO NEXT ARGUMENT FOR NEXT TIME SNA /SKIP IF END OF ARGUMENTS JMP I STROUT /RETURN IF NO MORE STRINGS DCA STRPTR /STASH THE LATEST POINTER STRLOOP,CDF MSGFLD /GOTO MESSAGE FIELD TAD I STRPTR /GET A CHARACTER CDF PRGFLD /BACK TO OUR FIELD 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 / REMOTE OUTPUT ROUTINE WHICH SWALLOWS RETURN CHARACTERS (OTHER THAN DC1/DC3 / PROTOCOL CHARACTERS); NOT FOR USE WITH GIN MODE. 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 / TEST FOR DC1/DC3 WHILE WAITING FOR OUTPUT READY. INTEST, .-. /TEST FOR DC1/DC3 INPUT ROUTINE JMS I [RINTEST] /TEST FOR A CHARACTER JMP I INTEST /WASN'T ANY TAD (-"S!300) /COMPARE TO <^S> SZA CLA /SKIP IF IT MATCHES JMP I INTEST /RETURN IF NOT INWAIT, JMS I [RINTEST] /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 / REMOTE INPUT <^C> TEST AND INPUT ROUTINE. RINTEST,.-. /GET AN INPUT CHARACTER CLA /CLEAN UP RKSFIOT /FLAG UP? JMP I RINTEST /NO, JUST RETURN RKRBIOT /YES, READ IT IN AND (177) /JUST SEVEN-BIT DCA RINCHAR /SAVE IT NL7775 /-3 TAD RINCHAR /COMPARE TO LATEST SNA /SKIP IF NOT <^C> ISZ I (SCRSIZE) /ELSE SET <^C> INDICATOR SPA SNA CLA /SKIP IF NOT ABORT CHARACTER JMP I [SBOOT] /ELSE LEAVE TAD RINCHAR /GET THE CHARACTER ISZ RINTEST /BUMP RETURN ADDRESS JMP I RINTEST /TAKE SKIP RETURN / REMOTE INPUT ROUTINE. RINPUT, .-. /REMOTE INPUT ROUTINE RINPLUP,JMS I [RINTEST] /CHECK FOR INPUT JMP RINPLUP /WASN'T ANY, SO WAIT FOR IT JMP I RINPUT /GOT A CHARACTER, RETURN / 4010 MODE ADDRESS SETUP ROUTINE. SETADR, .-. /ADDRESS SETUP ROUTINE CLA /CLEAN UP CDF MSGFLD /GOTO MESSAGE FIELD TAD Y /GET Y VALUE RAL;BSW /%40 AND (37) /JUST HIGH FIVE BITS TAD [40] /MAKE IT ASCII DCA I (ADRBUFFER+0) /STORE AS HI-Y TAD Y /GET Y AGAIN AND (37) /JUST FIVE LOW BITS TAD [140] /MAKE IT ASCII DCA I (ADRBUFFER+1) /STORE AS LO-Y TAD X /GET X VALUE RAL;BSW /%40 AND (37) /JUST HIGH FIVE BITS TAD [40] /MAKE IT ASCII DCA I (ADRBUFFER+2) /STORE AS HI-X TAD X /GET X AGAIN AND (37) /JUST FIVE MIDDLE BITS TAD (100) /MAKE IT ASCII DCA I (ADRBUFFER+3) /STORE AS LO-X CDF PRGFLD /BACK TO OUR FIELD JMP I SETADR /RETURN XLIST OFF // A-D INPUT ROUTINE. / /GETA2D, .-. /A-D INPUT ROUTINE / DCA TEMP /SAVE PASSED CHANNEL /KZAP, JMP I GETA2D /**** NOT /K **** NOP / TAD TEMP /GET IT BACK / ADLM /LOAD MULTIPLEXOR CHANNEL / ADST /START CONVERSION / ADSK /DONE YET? / JMP .-1 /NO, WAIT / ADRB /YES, READ IT IN / TAD (1000) /MAKE IT UNSIGNED / DCA A2DVAL /STORE THE VALUE / TAD TEMP /GET THE CHANNEL AGAIN / TAD (CHTABLE) /POINT TO TABLE ELEMENT / DCA TEMP /STASH THE POINTER / CDF MSGFLD /GOTO TABLE FIELD / TAD [10] /GET MINIMUM CHANGE NEEDED / TAD I TEMP /ADD ON PREVIOUS VALUE / CIA /INVERT FOR TEST / TAD A2DVAL /COMPARE TO LATEST / SMA CLA /SKIP IF NOT CHANGED ENOUGH / JMP USENAD /JUMP IF ENOUGH / TAD [10] /GET MINIMUM CHANGE NEEDED / TAD A2DVAL /ADD ON LATEST VALUE / CIA /INVERT FOR TEST / TAD I TEMP /COMPARE TO PREVIOUS VALUE / SMA CLA /SKIP IF NOT CHANGED ENOUGH / JMP USENAD /JUMP IF ENOUGH /NADENTR,TAD I TEMP /GET THE OLD VALUE / CDF PRGFLD /BACK TO OUR FIELD / JMP I GETA2D /RETURN / // COMES HERE IF NEW VALUE IS SUFFICIENTLY DIFFERENT TO REPLACE PREVIOUS ENTRY. / /USENAD, TAD A2DVAL /GET LATEST VALUE / AND [1770] /JUST GOOD BITS / DCA I TEMP /STORE IN TABLE / JMP NADENTRY /CONTINUE THERE XLIST ON PAGE / VECTOR DRAW ROUTINE. VECDRAW,.-. /DRAW VECTORS ROUTINE VECDLUP,TAD I VECDRAW /GET X-OFFSET ISZ VECDRAW /BUMP TO NEXT CMA /INVERT FOR TEST SNA /END OF LIST? JMP I VECDRAW /YES, RETURN CMA /INVERT IT BACK DCA VXOFF /STASH IT TAD I VECDRAW /GET Y-OFFSET DCA VYOFF /STASH IT ISZ VECDRAW /BUMP TO NEXT TAD I VECDRAW /GET LIST POINTER DCA XR2 /STASH IT VECLOOP,CDF MSGFLD /GOTO MESSAGE FIELD TAD I XR2 /GET AN X VALUE CMA /INVERT FOR TESTING SNA /END OF LIST? JMP VECEXIT /YES, WE'RE DONE CMA /INVERT BACK TAD VXOFF /ADD ON OFFSET DCA X /SETUP X TAD I XR2 /GET Y VALUE TAD VYOFF /ADD ON OFFSET DCA Y /SETUP Y JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS VECMODE /GOTO VECTOR MODE ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST CDF MSGFLD /GOTO MESSAGE FIELD TAD I XR2 /GET X VALUE TAD VXOFF /ADD ON OFFSET DCA X /SETUP X TAD I XR2 /GET Y VALUE TAD VYOFF /ADD ON OFFSET DCA Y /SETUP Y JMS I [SETADR] /SETUP ADDRESS JMS I [STROUT] /OUTPUT STRINGS ADRBUFFER /ADDRESS 0 /THIS ENDS THE LIST JMP VECLOOP /GO BACK FOR MORE VECEXIT,CDF PRGFLD /BACK TO OUR FIELD ISZ VECDRAW /BUMP TO NEXT JMP VECDLUP /GO BACK FOR MORE VXOFF, .-. /X-OFFSET VYOFF, .-. /Y-OFFSET / TIME PRINT ROUTINE. / CALL WITH: / X SET TO HORIZONTAL LOWER-LEFT CELL COORDINATE FOR "T" IN THE STRING. / Y SET TO VERTICAL LOWER-LEFT CELL COORDINATE FOR "T" IN THE STRING. / JMS I [TIMPRNT] /CALL ROUTINE / AC, MQ CONTAINS THE POINTER VALUE IN WORDS FOR THE ADDRESS OF THE DESIRED TIME / DISPLAY. UNITS ARE 4 WORDS=.0016 SECONDS. TIME VALUE WILL BE PRINTED IN THE / FORM "T= XXX.XXX" WHERE THE VALUE IS ROUNDED UP ACCORDINGLY. TIMPRNT,.-. /TIME PRINT ROUTINE JMS TMPRNT /SETUP DIGITS JMS I [SETADR] /SETUP ADDRESS BUFFER FROM X, Y JMS I [STROUT] /OUTPUT STRINGS TO TERMINAL VECMODE /GOTO VECTOR MODE ADRBUFFER /SETUP CELL ADDRESS ANOMOVE /GOTO GRAPHICS ALPHA MODE SCHARS /WANT STANDARD CHARACTERS TMBUFFER /SEND "T= XXX.XXX" 0 /THIS ENDS THE LIST JMP I TIMPRNT /RETURN TMPRNT, .-. /TIME DIGIT SETUP ROUTINE DCA DIV /SAVE PASSED VALUE RDF /GET CALLING FIELD TAD (CIF CDF) /TURN INTO CIF CDF CALLING FIELD DCA TMPREXIT /STORE IN-LINE FOR EXIT LATER CDF PRGFLD /GOTO OUR FIELD TAD DIV /RESTORE AC SHL; 1 /*2 JMS DIV; 5 /%5 TAD [-2] /CHECK FOR ROUNDING UP SMA SZA CLA /SKIP IF NO ROUNDING NEEDED NL0001 /ELSE ROUND UP DCA RND /STORE EITHER WAY TAD (TMBUFFER+11) /SETUP THE DCA TPTR /BUFFER POINTER TAD HIQUO /RESTORE HIGH-ORDER DAD; RND /ROUND UP JMS DIVSTR /CALCULATE AND STORE LOWEST DIGIT JMS DIVSTR /DO NEXT DIGIT JMS DIVSTR /DO NEXT DIGIT JMS BCKUP /AVOID "." JMS DIVSTR /DO NEXT DIGIT JMS DIVSTR /DO NEXT DIGIT JMS DIVSTR /DO NEXT DIGIT TMPREXI,.-. /WILL BE CIF CDF RETURN FIELD JMP I TMPRNT /RETURN TO CALLER BCKUP, .-. /POINTER BACKUP ROUTINE NL7777 /SET BACKUP FACTOR TAD TPTR /BACKUP THE POINTER DCA TPTR /STORE UPDATED VALUE JMP I BCKUP /RETURN DIVSTR, .-. /DIVIDE AND OUTPUT A DIGIT JMS DIV; 12 /DIVIDE BY TEN TAD ["0&177] /MAKE IT ASCII CDF MSGFLD /GOTO MESSAGE FIELD DCA I TPTR /STASH THE DIGIT CHARACTER CDF PRGFLD /BACK TO OUR FIELD JMS BCKUP /BACKUP THE POINTER TAD HIQUO /RESTORE THE QUOTIENT JMP I DIVSTR /RETURN / DOUBLE-PRECISION DIVIDE ROUTINE. / CALL WITH: / AC, MQ CONTAIN THE DIVIDEND. / JMS DIV; DIVISOR /CALL ROUTINE / RETURNS WITH REMAINDER IN AC, LOW-ORDER QUOTIENT IN MQ, HIGH-ORDER QUOTIENT IN / HIQUO. WORKS FOR ANY DOUBLE-PRECISION VALUE DIVIDED BY ANY SINGLE-PRECISION / VALUE EXCEPT ZERO (WHICH IS *NOT* CHECKED FOR). DIV, .-. /DIVIDE ROUTINE DST; DIVTMP /SAVE PASSED VALUE CLA /CLEAN UP TAD I DIV /GET DIVISOR DCA DIVSOR /STASH IT ISZ DIV /BUMP PAST ARGUMENT TAD DIVTMHI /RESTORE HIGH-ORDER DIVIDEND MQL DVI;DIVSOR /DIVIDE HIGH-ORDER FIRST SWP /WANT HIGH-ORDER QUOTIENT DCA HIQUO /STASH IT TAD DIVTMLO /GET LOW-ORDER DIVIDEND SWP /NOW SET FOR DIVIDE DVI; DIVSOR /DIVIDE HIGH-ORDER REMAINDER.LOW-ORDER JMP I DIV /RETURN DIVSOR, .-. /DIVISOR DIVTMP, ZBLOCK 2 /DIVIDE TEMPORARY DIVTMLO=DIVTMP /LOW-ORDER TEMPORARY DIVTMHI=DIVTMP+1 /HIGH-ORDER TEMPORARY HIQUO, .-. /HIGH-ORDER QUOTIENT RND, .-.; 0 /ROUNDUP FACTOR TPTR, .-. /STRING POINTER PAGE FIELD PRGFLD%10 /DUMP THE LITERALS NOW FIELD CODFLD%10 /SECONDARY CODE FIELD *10 /DEFINE AUTO-INDEX AREA XR1, .-. /AUTO-INDEX REGISTER NUMBER 1 XR2, .-. /AUTO-INDEX REGISTER NUMBER 2 *20 /GET PAST AUTO-INDEX AREA CCNT, .-. /COUNTER CTEMP, ZBLOCK 2 /TEMPORARY ECHOSW, 0 /ECHO SWITCH INCHAR, .-. /LATEST INPUT CHARACTER P7TEMP, .-. /PRINTING ROUTINE TEMPORARY PAGE /START AT THE BEGINNING / BUFFER CONTROL CHECK ROUTINE. CHKBCON,.-. /BUFFER CONTROL CHECK ROUTINE TAD [-200] /SETUP THE DCA CCNT /BUFFER COUNT TAD [STATBUFFER-1] /SETUP THE DCA XR1 /BUFFER POINTER CDF VELFLD /GOTO DATA FIELD CHKBLUP,TAD I XR1 /GET A STATUS WORD SZA CLA /SKIP IF ZERO JMP CHKBDONE /JUMP IF NOT ISZ CCNT /CHECKED ALL YET? JMP CHKBLUP /NO, KEEP GOING CDF PRGFLD /GOTO MAIN FIELD DCA I [BCONTRL] /CLEAR CONTROL WORD TO REFLECT STATUS CHKBDON,CIF CDF PRGFLD /GOTO CALLING FIELD JMP I CHKBCONTROL /RETURN / BUFFER CONTROL WORD INITIALIZE ROUTINE. STSETUP,.-. /SETUP BUFFER CONTROL WORDS ROUTINE TAD I [BLKLIMIT] /GET BLOCK LIMIT CLL RTR;RTR;RAR /CONVERT TO FIELD COUNT CIA /INVERT FOR COUNTING DCA CCNT /STASH THE COUNT TAD I [BCONTRL] /GET CONTROL WORD VALUE MQL /STASH IT TAD [STATBUFFER-1] /SETUP THE DCA XR1 /BUFFER POINTER CDF VELFLD /GOTO TABLE FIELD STLOOP, MQA /GET THE CONTROL VALUE DCA I XR1 /STORE A WORD ISZ CCNT /DONE ALL YET? JMP STLOOP /NO, KEEP GOING STLUP2, TAD XR1 /GET THE CURRENT POINTER TAD (-STATBUFFER-177) /COMPARE TO UPPER LIMIT SNA CLA /SKIP IF NOT THERE YET JMP STDONE /DONE IF AT END / TAD (KEEPALL) /GET CLEAR VALUE DCA I XR1 /STORE A CLEAR WORD JMP STLUP2 /KEEP GOING STDONE, CIF CDF PRGFLD /BACK TO CALLING FIELD JMP I STSETUP /RETURN / WRITE BUFFER ROUTINE. / CALL WITH: / CLA /ENSURE CLEAR AC / CDF PRGFLD /SETUP CALLING FIELD / CIF CODFLD /GOTO ROUTINE FIELD / JMS I [WRITBLK] /CALL ROUTINE / ENSURES THAT DATA IS WRITTEN OUT. WRITBLK,.-. /WRITE BLOCKS ROUTINE TAD I (BDIRTY) /GET BUFFER STATUS SZA CLA /SKIP IF BUFFER IS DIRTY JMP WRIBXIT /ELSE JUST RETURN TAD I (LATFLD) /GET LATEST FIELD CLL RTL;RTL;RAL /MOVE UP DCA WRIBLK /STORE IN-LINE CDF CODFLD /INDICATE OUR FIELD CIF PRGFLD /GOTO THEIR FIELD JMS I [SYSIO] /CALL I/O ROUTINES 0000 /ADDRESS 00^100+DATFLD+DATUNIT+WRITE /FUNCTION WRIBLK, .-. /WILL BE LATEST BLOCK CDF PRGFLD /BACK TO MAIN FIELD NL7777 /INDICATE THE BUFFER DCA I (BDIRTY) /IS NOW CLEAN WRIBXIT,CIF PRGFLD /GOING TO MAIN FIELD JMP I WRITBLK /RETURN / READ BUFFER ROUTINE. / CALL WITH: / CLA /ENSURE CLEAR AC / CDF PRGFLD /ENSURE DATA FIELD / CIF CODFLD /GOTO CODE FIELD / JMS I (READBLK) /CALL ROUTINE / ENSURES THAT LATEST FIELD IS READ IN. READBLK,.-. /READ BLOCKS ROUTINE TAD I (BDIRTY) /GET CURRENT STATUS SPA SNA CLA /SKIP IF NOT READ IN YET JMP READBXIT /ELSE JUST RETURN TAD I (LATFLD) /GET LATEST FIELD TAD (STATBUFFER) /POINT TO HIS STATUS WORD DCA CTEMP /STASH THE POINTER TAD I (LATFLD) /GET LATEST FIELD CLL RTL;RTL;RAL /TURN INTO BLOCK NUMBER DCA REDBLK /STORE IN-LINE CDF CODFLD /INDICATE OUR FIELD CIF PRGFLD /GOTO CODE FIELD JMS I [SYSIO] /CALL I/O ROUTINES 0000 /ADDRESS 00^100+DATFLD+DATUNIT /FUNCTION REDBLK, .-. /WILL BE LATEST BLOCK / CHECK IF BUFFER NEEDS TO BE STRIPPED AND MARKED DIRTY. CDF VELFLD /GOTO TABLE FIELD TAD I CTEMP /GET THE BUFFER STATUS SNA /SKIP IF STRIPPING REQUIRED JMP BUFOK /JUMP IF NOT CLL RAR /DATA STRIP BIT TO LINK SZA CLA /SKIP IF REQUEST BITS SHOULD BE KEPT TAD (3) /ELSE SET REQUEST BITS FOR CLEAR MASK CMA /INVERT TO FORM MASK DCA EXMASK /SAVE IT SNL /SKIP IF WE SHOULD STRIP THE DATA NL6000 /ELSE RETAIN THESE BITS TAD [1777] /WANT THE REST NO MATTER WHAT DCA DAMASK /STORE THE DATA MASK DCA I CTEMP /CLEAR STATUS WORD TAD REDBLK /GET LATEST BLOCK SNA CLA /SKIP IF OTHER THAN HEADER FIELD NL0004 /ELSE SKIP THE HEADER WORDS DCA CTEMP /STASH THE POINTER CDF DATFLD /GOTO DATA FIELD CLRLOOP,TAD I CTEMP /GET AN X-WORD AND DAMASK /STRIP UNWANTED BITS DCA I CTEMP /STORE BACK ISZ CTEMP /BUMP TO Y-WORD TAD I CTEMP /GET A Y-WORD AND DAMASK /STRIP UNWANTED BITS DCA I CTEMP /STORE BACK ISZ CTEMP /BUMP TO TIME-WORD ISZ CTEMP /BUMP TO EXTRA-WORD TAD I CTEMP /GET EXTRA-WORD AND EXMASK /STRIP UNWANTED BITS DCA I CTEMP /STORE BACK ISZ CTEMP /DONE YET? JMP CLRLOOP /NO, KEEP GOING SKP /WE WANT THE BUFFER MARKED DIRTY / COMES HERE IF THE BUFFER WAS CLEAN. BUFOK, NL7777 /INDICATE THE BUFFER IS CLEAN CDF PRGFLD /BACK TO CALLING FIELD DCA I (BDIRTY) /STORE NEW BUFFER STATUS READBXI,CIF CDF PRGFLD /BACK TO CALLING FIELD JMP I READBLK /RETURN DAMASK, .-. /DATA STRIPPING MASK EXMASK, .-. /EXTRA-WORD STRIPPING MASK PAGE / GAIN PROCESSING ROUTINE. PROGAIN,.-. /GAIN PROCESSING ROUTINE JMS CALVTV /CALCULATE V*T/T DCA I [GMAGNITUDE] /SAVE AS GAIN MAGNITUDE TAD I [GOFFSET] /GET OFFSET CIA /NEGATE TAD I [GMAGNITUDE] /ADD ON GAIN MAGNITUDE DCA MMO /SAVE DIFFERENCE TAD MMO /GET IT BACK SPA CLA /SKIP IF POSITIVE TAD [NGADJUST-GADJUST] /MAKE IT NEGATIVE POINTER TAD [GADJUST] /GET POSITIVE POINTER DCA GCPTR /STORE IN-LINE TAD MMO /GET DIFFERENCE AGAIN SPA /SKIP IF POSITIVE CIA /ELSE INVERT IT CDF CODFLD /GOTO OUR FIELD MQL MUY;[144] /*100 CDF PRGFLD /GOTO MAIN FIELD DVI; GCPTR, .-. /DIVIDE BY CALIBRATOR CLA MQA /GET PRODUCT CDF CODFLD /INDICATE OUR FIELD JMS I [OUTIT] /TURN INTO DIGITS TAD [OUTB-1] /SETUP THE DCA XR1 /DIGIT POINTER TAD (GBUFFER-1) /SETUP THE DCA XR2 /OUTPUT POINTER CDF MSGFLD /GOTO MESSAGE FIELD TAD I XR1 /GET A WORD DCA I XR2 /PUT A WORD TAD I XR1 /GET A WORD DCA I XR2 /PUT A WORD ISZ XR2 /BYPASS "." TAD I XR1 /GET A WORD DCA I XR2 /PUT A WORD TAD I XR1 /GET A WORD DCA I XR2 /PUT A WORD TAD (VJBUFFER-1) /SETUP THE DCA XR2 /OUTPUT POINTER TAD MMO /GET DIFFERENCE AGAIN JMS OUTSN /OUTPUT THE EFFECTIVE MAGNITUDE TAD (OFBUFFER-1) /SETUP THE DCA XR2 /OUTPUT POINTER CDF PRGFLD /GOTO MAIN FIELD TAD I (GOFFSET) /GET GAIN OFFSET JMS OUTSN /OUTPUT THE OFFSET CIF CDF PRGFLD /GOING TO MAIN FIELD JMP I PROGAIN /RETURN CALVTV, .-. /CALCULATE V*T/V ROUTINE CDF PRGFLD /GOTO MAIN FIELD TAD I [TXVEL+2] /GET HIGHEST VT WORD SPA /SKIP IF POSITIVE CMA /ELSE INVERT IT SZA /BETTER BE ZERO HLT /ELSE BARF DLD; TXVEL+0 /GET VT SPA /SKIP IF POSITIVE DCM /ELSE INVERT IT CDF CODFLD /GOTO OUR FIELD DAD; D10 /ADD ON 8 TO ROUND UP LSR; 4 /%16 CDF PRGFLD /GOTO MAIN FIELD DST; TXVEL+0 /STORE BACK DLD; GLTIME /GET LEFT TIME DCM /-LEFT TIME DAD; GRTIME /RIGHT TIME-LEFT TIME CDF CODFLD /GOTO CODE FIELD LSR; 2+4 /%16 CDF PRGFLD /GOTO MAIN FIELD SZA /BETTER BE ZERO HLT /ELSE BARF MQA /GET TIME DCA I [CNT] /STASH IT DLD; TXVEL+0 /GET VT DVI; CNT /%T CLA MQA /GET V ISZ I [TXVEL+2] /WAS IT NEGATIVE? SKP /SKIP IF NOT CIA /ELSE INVERT IT JMP I CALVTV /RETURN OUTSN, .-. /OUTPUT SIGNED NUMBER ROUTINE DCA OUTMP /SAVE PASSED VALUE TAD OUTMP /GET IT BACK SPA /SKIP IF ALREADY POSITIVE CIA /ELSE MAKE IT SO CDF CODFLD /INDICATE OUR FIELD JMS I [OUTIT] /TURN INTO DIGITS TAD [OUTB-1] /SETUP THE DCA XR1 /DIGIT POINTER TAD OUTMP /GET THE VALUE AGAIN SPA CLA /SKIP IF POSITIVE NL0002 /TAD ("--"+) /ELSE MAKE IT NEGATIVE TAD ("+&177) /USE POSITIVE AT LEAST CDF MSGFLD /GOTO MESSAGE FIELD DCA I XR2 /STORE IN MESSAGE TAD [-4] /SETUP THE DCA CNT /MOVE COUNT OUMVLP, TAD I XR1 /GET A WORD DCA I XR2 /PUT A WORD ISZ CNT /DONE ALL? JMP OUMVLP /NO, KEEP GOING JMP I OUTSN /RETURN D10, 10; 0 /CONSTANT 0000,0010 MMO, .-. /MAGNITUDE-OFFSET OUTMP, .-. /OUTPUT TEMPORARY PAGE / TIME CONSTANT PROCESSING ROUTINE. PROTC, .-. /TIME CONSTANT ROUTINE CDF PRGFLD /ENSURE MAIN FIELD TAD I (TCOFFSET) /GET THE OFFSET SPA CLA /SKIP IF POSITIVE NL7777 /ELSE SET SIGN INVERSION DCA MUSIGN /SAVE EITHER WAY TAD I (TCOFFSET) /GET THE OFFSET SPA /SKIP IF ALREADY POSITIVE CIA /ELSE NEGATE IT DCA MUARG /STORE MULTIPLY ARGUMENT DLD; GLTIME /GET LEFT TIME DCM /-LEFT TIME DAD; GRTIME /RIGHT TIME-LEFT TIME CDF CODFLD /GOTO OUR FIELD LSR; 2 /%4 TO 1.6 MS UNITS DST; MUTEMP /STASH IT CLA MUY;MUARG /MULTIPLY LOW-ORDER SWP /GET PRODUCT DCA LOW /STASH IT TAD MUTEMP+1 /GET HIGH-ORDER SWP /REVERSE MUY; MUARG /MULTIPLY HIGH-ORDER DST; MID /SAVE MIDDLE AND HIGH CAM /CLEAN UP ISZ MUSIGN /NEGATE? SKP /SKIP IF NOT JMS NEG3 /NEGATE IF SO JMS NEG3 /WANT -QUANTITY CDF PRGFLD /GOTO MAIN FIELD CLL /CLEAR CARRY FIRST TAD I [TXVEL+0] /GET LOW-ORDER V*T TAD LOW /ADD LOW-ORDER DCA LOW /STORE LOW-ORDER RAL /GET CARRY TAD I [TXVEL+1] /ADD MIDDLE V*T TAD MID /ADD ON MIDDLE DCA MID /STORE MIDDLE RAL /GET CARRY TAD I [TXVEL+2] /ADD HIGH-ORDER V*T TAD HIGH /ADD ON HIGH-ORDER DCA HIGH /STORE HIGH TAD HIGH /GET IT BACK SPA CLA /SKIP IF ALREADY POSITIVE JMS NEG3 /ELSE NEGATE ENTIRE QUANTITY TAD I [GOFFSET] /GET GAIN OFFSET CIA /NEGATE TAD I [GMAGNITUDE] /GAIN MAGNITUDE-GAIN OFFSET SPA /SKIP IF ALREADY POSITIVE CIA /ELSE NEGATE IT DCA DVSOR /SAVE AS DIVISOR CDF CODFLD /GOTO OUR FIELD DLD; MID /GET HIGH-ORDER AND MIDDLE DVI; DVSOR /DIVIDE SWP /GET HIGH-ORDER QUOTIENT DCA TIMCONSTANT+1 /STASH IT TAD LOW /GET LOW-ORDER SWP /REVERSE DVI; DVSOR /DIVIDE SWP /GET LOW-ORDER QUOTIENT DCA TIMCONSTANT /STASH IT TAD (TOBUFFER-1) /SETUP THE DCA XR2 /OUTPUT POINTER CDF PRGFLD /ENSURE MAIN FIELD TAD I (TCOFFSET) /GET THE OFFSET JMS I (OUTSN) /OUTPUT IT TO STRING CDF CODFLD /BACK TO OUR FIELD DLD; TIMCONSTANT /GET THE TIME CONSTANT VALUE SHL; 2 /*4 CIF PRGFLD /GOTO CALLING FIELD JMS I (TMPRNT) /SETUP DIGITS CIF CDF PRGFLD /GOTO MAIN FIELD JMP I PROTC /RETURN NEG3, .-. /TRIPLE-PRECISION NEGATE CLA CLL /CLEAN UP TAD LOW /GET LOW-ORDER CIA /INVERT IT DCA LOW /STORE BACK TAD MID /GET MIDDLE CMA /INVERT IT SZL /SKIP IF NO CARRY CLL IAC /ELSE ADD ONE DCA MID /STORE BACK TAD HIGH /GET HIGH-ORDER CMA /INVERT IT SZL /SKIP IF NO CARRY CLL IAC /ELSE ADD ONE DCA HIGH /STORE BACK JMP I NEG3 /RETURN LOW, .-. /LOW-ORDER MID, .-. /MIDDLE HIGH, .-. /HIGH DVSOR, .-. /DIVISOR MUARG, .-. /MULTIPLIER MUSIGN, .-. /MULTIPLY INVERSION FLAG MUTEMP, ZBLOCK 2 /MULTIPLICAND TEMPORARY TIMCONS,ZBLOCK 2 /TIME CONSTANT VALUE PAGE / TIME CONSTANT OFFSET PROCESSING ROUTINE. PROTOFF,.-. /PROCESS TIME CONSTANT OFFSET ROUTINE JMS I (CALVTV) /CALCULATE VELOCITY*TIME/TIME DCA I (TCOFFSET) /STORE NEW OFFSET CIF CDF PRGFLD /GOTO CALLING FIELD JMP I PROTOFFSET /RETURN TO CALLER OUTIT, .-. /DIGIT OUTPUT ROUTINE MQL /TO LOW-ORDER RDF /GET CALLING FIELD TAD [CIF CDF] /TURN INTO CIF CDF RETURN FIELD DCA OUTITXIT /STORE IN-LINE FOR EXIT LATER TAD (OUTB+3) /SETUP THE DCA OPTR /STRING POINTER TAD [-4] /SETUP THE DCA OCNT /STRING COUNT OUTITLP,CDF CODFLD /GOTO OUR FIELD DVI; [12] /DIVIDE BY 10 TAD ["0&177] /MAKE IT ASCII CDF MSGFLD /GOTO MESSAGE FIELD DCA I OPTR /STORE IN STRING NL7777 /SET BACKUP FACTOR TAD OPTR /BACKUP THE POINTER DCA OPTR /STORE BACK ISZ OCNT /DONE YET? JMP OUTITLP /NO, KEEP GOING OUTITXI,.-. /WILL BE CIF CDF RETURN FIELD JMP I OUTIT /RETURN OCNT, .-. /STRING COUNTER OPTR, .-. /STRING POINTER PAGE / LOCATE MOUSE IN BOXES AND DISPATCH ROUTINE. BOXDISP,.-. /LOCATE AND DISPATCH ROUTINE CLA /CLEAN UP CDF PRGFLD /ENSURE OUR FIELD TAD I BOXDISPATCH /GET THE LIST POINTER DCA XR1 /STORE IT BXDSLP, CDF MSGFLD /GOTO MESSAGE FIELD TAD I XR1 /GET POTENTIAL LOWER-LEFT X COORDINATE CMA /INVERT FOR TESTING SNA /SKIP IF NOT AT END OF LIST JMP BOXDEXIT /JUMP IF AT END IAC /WANT COMPLEMENTED FORM DCA MLOWX /STORE -(LOWER-LEFT X) TAD I XR1 /GET LOWER-LEFT Y CIA /INVERT IT DCA MLOWY /STORE -(LOWER-LEFT Y) TAD I XR1 /GET UPPER-RIGHT X CIA /INVERT IT DCA MUPX /STORE -(UPPER-RIGHT X) TAD I XR1 /GET UPPER-RIGHT Y CIA /INVERT IT DCA MUPY /STORE -(UPPER-RIGHT Y) TAD I XR1 /GET DISPATCH ADDRESS DCA CTEMP /STASH IT CDF PRGFLD /GOTO MAIN FIELD TAD I (GINHORIZONTAL) /GET HORIZONTAL ADDRESS TAD MUPX /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF LESS JMP BXDSLP /JUMP IF OUT OF RANGE TAD I (GINHORIZONTAL) /GET HORIZONTAL ADDRESS TAD MLOWX /COMPARE TO LOWER LIMIT SPA CLA /SKIP IF MORE JMP BXDSLP /JUMP IF OUT OF RANGE TAD I (GINVERTICAL) /GET VERTICAL ADDRESS TAD MUPY /COMPARE TO UPPER LIMIT SMA CLA /SKIP IF LESS JMP BXDSLP /JUMP IF OUT OF RANGE TAD I (GINVERTICAL) /GET VERTICAL ADDRESS TAD MLOWY /COMPARE TO LOWER LIMIT SPA CLA /SKIP IF MORE JMP BXDSLP /JUMP IF OUT OF RANGE CIF PRGFLD /GOTO MAIN FIELD JMP I CTEMP /GO TO DISPATCH ROUTINE BOXDEXI,ISZ BOXDISPATCH /BUMP PAST ARGUMENT CIF CDF PRGFLD /GOING TO MAIN FIELD JMP I BOXDISPATCH /RETURN TO CALLER MLOWX, .-. /-(LOWER-LEFT X) MLOWY, .-. /-(LOWER-LEFT Y) MUPX, .-. /-(UPPER-RIGHT X) MUPY, .-. /-(UPPER-RIGHT Y) / TERMINAL SUPPORT ROUTINES. / <^C>, ETC. CHECKING ROUTINE. CHKUP, .-. /CHECK FOR <^C>, ETC. ROUTINE JMS CTLCTST /CHECK FOR <^C>, ETC. TAD (-"O!300) /COMPARE TO <^O> SNA /SKIP IF DIFFERENT JMP DOUO /JUMP IF IT MATCHES TAD (-"S+"O) /COMPARE TO <^S> SZA CLA /SKIP IF IT MATCHES JMP I CHKUP /RETURN IF NOT JMS CTLCTST /CHECK FOR <^C>, ETC. TAD (-"Q!300) /COMPARE TO <^Q> SZA CLA /SKIP IF IT MATCHES JMP .-3 /JUMP IF NOT JMP I CHKUP /RETURN IF SO DOUO, TAD ("^&177) /GET AN "^" JMS P7OUT /PRINT IT TAD ("O&177) /GET AN "O" JMS P7OUT /PRINT IT NL4000 /SET INVERSION BIT TAD ECHOSW /INVERT ECHO STATUS DCA ECHOSW /STORE IT BACK JMP I CHKUP /RETURN / <^C> TEST ROUTINE. CTLCTST,.-. /TEST 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-BIT DCA INCHAR /SAVE IT NL7775 /-3 TAD INCHAR /COMPARE TO CHARACTER CIF CDF PRGFLD /MIGHT BE GOING TO MAIN FIELD SNA /SKIP IF NOT <^C> ISZ I [SCRSIZE] /ELSE SET SOFT INDICATOR SPA SNA CLA /SKIP IF GREATER THAN <^C> JMP I [SBOOT] /ELSE GET OUT OF HERE CIF CDF CODFLD /COME BACK TO OUR FIELD CHKKCC, KCCIOT /OR 0000 /**** CONSOLE **** 0000 TAD INCHAR /GET THE CHARACTER JMP I CTLCTST /RETURN / CONSOLE OUTPUT ROUTINE. P7CH, .-. /SEVEN-BIT PRINT ROUTINE DCA P7TEMP /SAVE PASSED VALUE P7AGN, JMS CHKUP /CHECK FOR <^C>, ETC. TAD ECHOSW /GET ECHO SWITCH SPA CLA /SKIP IF ECHO ON JMP P7OFF /ELSE FORGET IT TAD P7TEMP /GET THE VALUE P7TSF, TSFIOT /**** CONSOLE **** CIF MCS+10 P7JMP, JMP P7AGN /**** CONSOLE **** JMS OUTCON P7TLS, TLSIOT /**** CONSOLE **** JMP P7AGN P7OFF, JMS CHKUP /CHECK FOR <^C>, ETC. JMP I P7CH /RETURN / DEDICATED OUTPUT ROUTINE. P7OUT, .-. /DEDICATED OUTPUT ROUTINE P7OTSF, TSFIOT /**** CONSOLE **** CIF MCS+10 P7OJMP, JMP P7OTSF /**** CONSOLE **** JMS OUTCON P7OTLS, TLSIOT /**** CONSOLE **** JMP P7OTSF CLA /CLEAN UP JMP I P7OUT /RETURN PAGE PAGE 36 /GET NEAR END OF FIELD / INITIALIZATION CONTINUES HERE. INIT2, SWAB /WE WANT MODE "B" NOP /JUST IN CASE CAM /CLEAN UP / CHECK IF SYSTEM DEFINITELY SUPPORTS KRS INSTRUCTION. CDF PRGFLD /GOTO DATA FIELD TAD I [SBOOT] /GET BOOTSTRAP INSTRUCTION CDF CODFLD /BACK TO OUR FIELD TAD (-JMSSYSIO) /COMPARE TO POSSIBLE VALUE SNA CLA /SKIP IF DIFFERENT JMP CHKCOVRLAY /JUMP IF IT MATCHES / SINCE WE CAN'T BE CERTAIN THAT KRS WORKS, KRB MUST BE USED, AND KCC IS / USELESS; THE SOFT <^C> BIT MUST BE USED. ISZ I (CHKKRS) /TURN "KRSIOT" ISZ I (CHKKRS) /INTO "KRBIOT" DCA I (CHKKCC) /DESTROY "KCCIOT" / CHECK IF THE OVERLAY IS PRESENT. CHKCOVR,NL0002 /SET "C" BIT MASK CDF PRGFLD /GOTO MAIN FIELD AND I [SCRSIZE] /GET THE BIT SNA CLA /SKIP IF SET JMP NOOVERLAY /JUMP IF NOT TAD I [SCRSIZE] /GET THE CORE SIZE WORD CDF CODFLD /BACK TO OUR FIELD RTR;RAR /MOVE DOWN THE MCS BITS AND (70) /JUST MCS BITS TAD (CIF 10) /MAKE INTO "CIF MCS+10" DCA I (CHKKSF) /STORE OVER THE "KSFIOT" TAD I (CHKJMP) /GET THE "JMP I CTLCTST" DCA I (CHKKRS) /STORE OVER THE "KRSIOT" OR "KRBIOT" TAD (JMS INCON) /GET INPUT CALL DCA I (CHKJMP) /STORE OVER THE "JMP I CTLCTST" DCA I (CHKKCC) /DESTROY THE "KCCIOT" TAD I (CHKKSF) /GET THE "CIF MCS+10" DCA I (P7TSF) /STORE OVER "TSFIOT" TAD I (P7JMP) /GET "JMP P7AGN" DCA I (P7TLS) /STORE OVER "TLSIOT" TAD (JMS OUTCON) /GET OUTPUT CALL DCA I (P7JMP) /STORE OVER "JMP P7AGN" TAD I (P7TSF) /GET "CIF MCS+10" DCA I (P7OTSF) /STORE OVER "TSFIOT" TAD I (P7OJMP) /GET "JMP P7OTSF" DCA I (P7OTLS) /STORE OVER "TLSIOT" TAD I (P7JMP) /GET "JMS OUTCON" DCA I (P7OJMP) /STORE OVER "JMP P7OTSF" NOOVERL,CLL /CLEAN UP CDF PRGFLD /GOTO MAIN FIELD TAD I (SWAL) /GET /A-/L SWITCHES AND (400) /JUST /D SWITCH SZA CLA /SKIP IF NOT SET STL /ELSE SET LINK FOR LATER TAD I (SWMX) /GET /M-/X SWITCHES AND (100) /JUST /R SWITCH SZA CLA /SKIP IF NOT SET NL0001 /ELSE SET THE BIT RAL /NOW HAVE INITIAL BUFFER CONTROL DCA I [BCONTRL] /STORE IT / CHECK IF DATA IS VALID. CDF CODFLD /INDICATE OUR FIELD CIF PRGFLD /GOTO MAIN FIELD JMS I [SYSIO] /CALL I/O ROUTINES 0000 /TRANSFER ADDRESS 1^100+DATFLD+DATUNIT /FUNCTION WORD 0000 /BLOCK CDF DATFLD /GOTO DATA FIELD TAD I (0000) /GET THE HEADER WORD CDF PRGFLD /BACK TO MAIN FIELD DCA I [BLKLIMIT] /STASH IT TAD I [BLKLIMIT] /GET IT BACK AND (37) /JUST ILLEGAL BITS SZA CLA /SKIP IF ALL OFF JMP BADATA /JUMP IF NOT TAD I [BLKLIMIT] /GET IT AGAIN SZA /SKIP IF BAD JMP DATAOK /JUMP IF OK BADATA, CDF CODFLD /GOTO OUR FIELD TAD I MPTR /GET A MESSAGE CHARACTER SNA /SKIP IF NOT AT END JMP BADEND /JUMP IF END OF MESSAGE JMS I [P7CH] /PRINT THE CHARACTER ISZ MPTR /BUMP TO NEXT JMP BADATA /KEEP GOING BADEND, CIF CDF PRGFLD /GOTO MAIN FIELD JMP I [SBOOT] /GOODBYE! / COMES HERE IF THE DATA IS APPARENTLY VALID. DATAOK, MQL /TO LOW-ORDER CDF CODFLD /GOTO OUR FIELD SHL; 7 /MOVE UP DCM /WANT NEGATIVE FORM CDF PRGFLD /GOTO MAIN FIELD DST; MLIMIT /STORE AS UPPER LIMIT FOR UPDATING CAM /CLEAN UP RKIEIOT /PREVENT TERMINAL INTERRUPTS RTLSIOT /SET OUTPUT FLAG CIF CDF PRGFLD /GOING TO MAIN FIELD JMP I (INIFINISH) /CONTINUE THERE MPTR, BDMSG /MESSAGE POINTER PAGE / INVALID DATE COMPLAINT MESSAGE. BDMSG, "M&37 / "J&37 / "I&177 "N&177+40 "V&177+40 "A&177+40 "L&177+40 "I&177+40 "D&177+40 " &177 "D&177 "A&177+40 "T&177+40 "A&177+40 " &177 "F&177 "O&177+40 "R&177+40 "M&177+40 "A&177+40 "T&177+40 "!&177 " &177 "-&177 "-&177 " &177 "A&177 "B&177+40 "O&177+40 "R&177+40 "T&177+40 "I&177+40 "N&177+40 "G&177+40 "M&37 / "J&37 / 0 /THIS ENDS THE LIST /BDMSG, TEXT "%^I^NVALID ^D^ATA ^F^ORMAT! -- ^A^BORTING%^" FIELD CODFLD%10 /DUMP THE LITERALS NOW FIELD MSGFLD%10 /MESSAGE FIELD *0 /START AT THE BEGINNING / TEXT MESSAGES, ETC. ANALMSG,TEXT "^A^NALYSIS^" ANNMSG, TEXT "^D^ATA ^A^NALYSIS ^V"/ANNOUNCEMENT MESSAGE VERSION%12^66+VERSION+6060 /VERSION DIGITS "^^100+REVISION /REVISION TEXT "%%^T^YPE ? FOR HELP^" TEXT "%%P^RESS ^R^ETURN NOW TO CONTINUE...%" BOBLURB,TEXT "^B^EGIN ^O^FFSET (MSEC)" BTBLURB,TEXT "^B^EGIN ^T^HRESHOLD" CALMSG, TEXT "^C^ALIBRATOR^" EMBLURB,TEXT "^E^YE ^M^OVEMENT ^M^ARKS^" EOBLURB,TEXT "^E^ND ^O^FFSET (MSEC)" ETBLURB,TEXT "^E^ND ^T^HRESHOLD" GABLURB,TEXT "^P^OSITIVE ^G^AIN ^C^ALIBRATOR^" GAINMSG,TEXT "^G^AIN AND^" GMAGMSG,TEXT "^G^AIN^" GMMSG, TEXT "^G^AIN ^M^EASUREMENT^" GOBLURB,TEXT "^L^OCATING...% " TEXT " ^P^LEASE ^W^AIT^" GOFMSG, TEXT "^G^AIN ^O^FFSET" HARMSG, TEXT "^H^ARMONIC^" HLPMSG,TEXT "^C^HARACTER ^A^CTION%%" TEXT "^O^ O ^O^VERVIEW %" TEXT "^V^ V ^V^IEW %" TEXT "^T^ T FLIP ^T^IME DISPLAY%" TEXT "^R^ R FLIP ^R^EQUEST MARKS DISPLAY %" TEXT "^G^ G FLIP AVERA^G^E VELOCITY DISPLAY%" TEXT "^Y^ Y FLIP E^Y^E MOVEMENT MARK DISPLAY %" TEXT "^A^ A ^A^NALYZE%" TEXT "^M^ M ^M^ARK DATA%" TEXT "^D^ D ^D^ISPLAY PREVIOUS (EXIT MARKING)%" TEXT "^B^ B EDIT ^B^EGIN (MARKING ONLY)%" TEXT "^E^ E EDIT ^E^ND (MARKING ONLY)%" TEXT "^S^ S EDIT ^S^TART (MARKING ONLY)%" TEXT "^F^ F EDIT ^F^INISH (MARKING ONLY) %" TEXT "^X^ X E^X^PAND VIEW OF PLOT%" TEXT "^Z^ Z ^Z^OOM VIEW OF PLOT%" TEXT "^P^ P ^P^OSITION AND MARK DATA %" TEXT "^L^ L ^L^OCATE EYE MOVEMENTS %" TEXT "^I^ I ^I^NITIALIZE PARAMETERS%" TEXT "^Q^ Q ^Q^UIT %" TEXT "^J^ J ^J^USTIFY POSITION %" TEXT "< , ^F^ORWARD 1/2 SCREEN %" TEXT "> . ^B^ACKWARD 1/2 SCREEN%" TEXT "^[^ [ ^F^ORWARD 1/4 SCREEN %" TEXT "^]^ ] ^B^ACKWARD 1/4 SCREEN%" TEXT "( 9 ^D^ECREASE RESOLUTION%" TEXT ") 0 ^I^NCREASE RESOLUTION%" TEXT "? / THIS ^H^ELP SCREEN %" TEXT "%^P^RESS ^R^ETURN TO CONTINUE...%" MESMSG, TEXT "^M^EASUREMENT" NGABLUR,TEXT "^N^EGATIVE ^G^AIN ^C^ALIBRATOR^" NOLMSG, TEXT "^N^O ^D^ATA ^R^EQUEST ^M^ARKS!%%" TEXT "^P^RESS ^R^ETURN TO CONTINUE...%^" OFMSG, TEXT "^O^FFSET^" PRBLURB,TEXT "^P^ROCEED" PRESMSG,TEXT "^P^RESERVED" QUITMSG,TEXT "^C^LOSING ^D^ATA ^F^ILE...^" REMOMSG,TEXT "^R^EMOVED" RETMSG, TEXT "^E^XIT^" RMBLURB,TEXT "^R^EQUEST ^M^ARKS" TCMMSG, TEXT "^T^IME ^C^ONSTANT ^M^EASUREMENT" TCOMSG, TEXT "^T/C O^FFSET^" TCONMSG,TEXT "^T^IME ^C^ONSTANT" TTOMSG, TEXT "^T^RANSFER TO" VJMSG, TEXT "^V^ELOCITY ^J^UMP" VMBLURB,TEXT "^A^VERAGE ^V^ELOCITY ^M^AGNITUDE^" WBMSG, TEXT "WILL BE" / TERMINAL SEQUENCES. / X-Y ADDRESS BUFFER. ADRBUFF,ZBLOCK 5 /ADDRESS TRANSMISSION BUFFER / 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 / BLOCK FILL VECTOR MODE. BLKFILL,ESC; "B&37; 0 /BLOCK FILL MODE / CLEAR GRAPHICS MEMORY. CLRMEM, ESC; "Y&37; 0 /CLEAR GRAPHICS MEMORY / LOAD CROSSHAIR POSITION. CROSSAD,ESC; "/&177; "F&177+40; 0 /LOAD CROSSHAIR POSITION / DISPLAY MARK CHARACTER. DCHAR, .-.; 0 /DISPLAY MARK CHARACTER / 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 / GAIN VALUE BUFFER. GBUFFER,"0&177; "0&177; ".&177; "0&177; "0&177 /GAIN VALUE 0 / ENTER GRAPHICS INPUT MODE. GINMODE,ESC; "Z&37; 0 /ENTER GIN MODE / USE CLEAR DATA LEVEL. LEVCLR, ESC; "B&37; 0 /CLEAR DATA LEVEL / USE COMPLEMENT DATA LEVEL. LEVCOM, ESC; "U&37; 0 /COMPLEMENT DATA LEVEL / USE SET DATA LEVEL. LEVSET, ESC; "A&37; 0 /SET DATA LEVEL / UDK SEQUENCE FOR MOUSE KEYS. MKEYS, ESC; "[&177; "2&177; "0&177; "6&177 /REDEFINE MOUSE UDK ";&177; "0&177; ";&177; "0&177; "-&177 "U&177+40; "/&177; "\&177; "0&177 "1&177; "4&177; "/&177 ESC; "[&177; "2&177; "0&177; "4&177 ";&177; "0&177; ";&177; "0&177; "-&177 "U&177+40; "/&177; "\&177; "0&177 "3&177; "0&177; "/&177 ESC; "[&177; "2&177; "0&177; "2&177 ";&177; "0&177; ";&177; "0&177; "-&177 "U&177+40; "/&177; "\&177; "0&177 "2&177; "2&177; "/&177; 0 / INITIALIZATION FOR MOUSE KEYS UPSTROKES (OBSOLETE). / ESC; "[&177; "2&177; "0&177; "5&177 / ";&177; "0&177; ";&177; "0&177; "-&177 / "U&177+40; "/&177; "\&177; "0&177 / "2&177; "6&177; "/&177 / ESC; "[&177; "2&177; "0&177; "3&177 / ";&177; "0&177; ";&177; "0&177; "-&177 / "U&177+40; "/&177; "\&177; "0&177 / "2&177; "6&177; "/&177 / ESC; "[&177; "2&177; "0&177; "1&177 / ";&177; "0&177; ";&177; "0&177; "-&177 / "U&177+40; "/&177; "\&177; "0&177 / "2&177; "6&177; "/&177; 0 / NON-DESTRUCTIVE CHARACTER IN GRAPHICS ALPHA MODE. NDSPACE,ESC; "/&177; "2&177; "L&177+40 /SPACE JUST MOVES 0 / NO DATA LOGGING TO DISPLAY LIST. NOLOG, ESC; "/&177; "0&177; "L&77; 0 /NO DISPLAY LIST LOGGING / NO TERMINATION CHARACTER WHEN EXITING GIN MODE. NOTERM, ESC; "/&177; "1&177; "T&177+40 /NO GIN MODE TERMINATOR 0 / GAIN OFFSET VALUE BUFFER. OFBUFFE,"+&177; "0&177; "0&177; "0&177; "0&177 /GAIN OFFSET VALUE 0 / 4-DIGIT OUTPUT BUFFER. OUTB, ZBLOCK 5 /DIGITS OUTPUT BUFFER / ENTER POINT PLOT MODE. PPMODE, FS; 0 /ENTER POINT PLOT MODE / STANDARD CHARACTER SIZE IN GRAPHICS ALPHA MODE. SCHARS, ESC; "8&177; 0 /USE STANDARD SIZE CHARACTERS / TINY CHARACTER SIZE IN GRAPHICS ALPHA MODE. TCHARS, ESC; "9&177; 0 /USE TINY SIZE CHARACTERS / TIME PRINTOUT BUFFER. TMBUFFE,"T&177; "=&177; " &177; "X&177; "X&177 /"T= XXX.XXX" BUFFER "X&177; ".&177; "X&177; "X&177; "X&177 0 / TIME CONSTANT OFFSET PRINTOUT BUFFER. TOBUFFE,"+&177; "0&177; "0&177; "0&177; "0&177 /TIME CONSTANT OFFSET VALUE 0 / UNBLANK GRAPHICS MEMORY. UNGMEM, ESC; "[&177; "2&177; "/&177 /UNBLANK GRAPHICS MEMORY "V&177+40; 0 / VECTOR DRAW MODE. VCDRAW, ESC; "C&37; 0 /VECTOR DRAW MODE / GOTO VECTOR MODE (FROM POINT PLOT MODE). VECMODE,"]&37; 0 /GOTO VECTOR MODE / VELOCITY JUMP VALUE BUFFER. VJBUFFE,"+&177; "0&177; "0&177; "0&177; "0&177 /VELOCITY JUMP VALUE 0 / 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) DECIMAL /MAKE IT EASIER / ANALYSIS MENU PARAMETER BOX DISPATCH LIST. ABOXLIS,0; 780-B-10; 192; 780-10 ISGTC 0; 780-B-B-20; 192; 780-B-20 ISHA 0; 780-B-B-B-30; 192; 780-B-B-30 ISEXANALYSIS -1 /THIS ENDS THE LIST / GAIN MENU PARAMETER BOX DISPATCH LIST. GBOXLIS,0; 780-B-10; 192; 780-10 ISGTRANSFERTOCALIBRATOR 0; 780-B-B-20; 192; 780-B-20 ISGOFFSET 0; 780-B-B-B-30; 192; 780-B-B-30 ISGTIME 0; 780-B-B-B-B-40; 192; 780-B-B-B-40 ISGEXIT 0; 0; 1023; 780-B-B-B-B-B-50 ISREGAIN -1 /THIS ENDS THE LIST / INITIALIZE ADDITIONAL BORDER VECTOR LIST. IBORDER,0^10; 780-J-J-J-B-B; 100^10; 780-J-J-J-B-B 0^10; 780-J-J-J-B; 100^10; 780-J-J-J-B 0^10; 780-J-J-J; 100^10; 780-J-J-J 50^10; 780-J-J-J-B-B; 50^10; 780-J-J-J -1 /THIS ENDS THE LIST / INITIALIZE PARAMETER BOX DISPATCH LIST. INBOXLI,0; 780-J; 1024-1; 780-1 ISVMAGNITUDE 0; 780-J-J; 1024-1; 780-J-1 ISGADJUST 0; 780-J-J-J; 1024-1; 780-J-J-1 ISNGADJUST 0^10+4; 780-J-J-J-B-B; 50^10+4;780-J-J-J ISEMARK 50^10+4;780-J-J-J-B-B; 100^10+4;780-J-J-J ISRMARK PBXLEFT;PBXLOWER; PBXRITE;PBXUPPER PLTFRC -1 /THIS ENDS THE LIST / LOCATE BORDER VECTOR LIST. LBORDER,0; 0; 100^10; 0 0; 780-J-J-J-J; 100^10; 780-J-J-J-J 0; 0; 0; 780-1 100^10; 0; 100^10; 780-1 -1 /THIS ENDS THE LIST / LOCATE PROCEED BOX VECTOR LIST. LBOX, PBXLEFT;PBXLOWER; PBXRITE;PBXLOWER PBXLEFT;PBXLOWER; PBXLEFT;PBXUPPER PBXLEFT;PBXUPPER; PBXRITE;PBXUPPER PBXRITE;PBXUPPER; PBXRITE;PBXLOWER PBXLEFT;PBXUPPER-30; PBXRITE;PBXUPPER-30 -1 /THIS ENDS THE LIST / LOCATE PARAMETER BOX DISPATCH LIST. LPBOXLI,0; 780-J; 1024-1; 780-1 ISBEGTHRESHOLD 0; 780-J-J; 1024-1; 780-1-J ISENDTHRESHOLD 0; 780-J-J-J; 1024-1; 780-1-J-J ISBEGOFFSET 0; 780-J-J-J-J; 1024-1; 780-1-J-J-J ISENDOFFSET PBXLEFT;PBXLOWER; PBXRITE;PBXUPPER LPEXIT -1 /THIS ENDS THE LIST / LOCATE RULER VECTOR LIST. LRULER,/0^10; 0; 0^10; J 1^10; 0; 1^10; T 2^10; 0; 2^10; T 3^10; 0; 3^10; T 4^10; 0; 4^10; T 5^10; 0; 5^10; S 6^10; 0; 6^10; T 7^10; 0; 7^10; T 8^10; 0; 8^10; T 9^10; 0; 9^10; T 10^10; 0; 10^10; M 11^10; 0; 11^10; T 12^10; 0; 12^10; T 13^10; 0; 13^10; T 14^10; 0; 14^10; T 15^10; 0; 15^10; S 16^10; 0; 16^10; T 17^10; 0; 17^10; T 18^10; 0; 18^10; T 19^10; 0; 19^10; T 20^10; 0; 20^10; M 21^10; 0; 21^10; T 22^10; 0; 22^10; T 23^10; 0; 23^10; T 24^10; 0; 24^10; T 25^10; 0; 25^10; S 26^10; 0; 26^10; T 27^10; 0; 27^10; T 28^10; 0; 28^10; T 29^10; 0; 29^10; T 30^10; 0; 30^10; M 31^10; 0; 31^10; T 32^10; 0; 32^10; T 33^10; 0; 33^10; T 34^10; 0; 34^10; T 35^10; 0; 35^10; S 36^10; 0; 36^10; T 37^10; 0; 37^10; T 38^10; 0; 38^10; T 39^10; 0; 39^10; T 40^10; 0; 40^10; M 41^10; 0; 41^10; T 42^10; 0; 42^10; T 43^10; 0; 43^10; T 44^10; 0; 44^10; T 45^10; 0; 45^10; S 46^10; 0; 46^10; T 47^10; 0; 47^10; T 48^10; 0; 48^10; T 49^10; 0; 49^10; T 50^10; 0; 50^10; L 51^10; 0; 51^10; T 52^10; 0; 52^10; T 53^10; 0; 53^10; T 54^10; 0; 54^10; T 55^10; 0; 55^10; S 56^10; 0; 56^10; T 57^10; 0; 57^10; T 58^10; 0; 58^10; T 59^10; 0; 59^10; T 60^10; 0; 60^10; M 61^10; 0; 61^10; T 62^10; 0; 62^10; T 63^10; 0; 63^10; T 64^10; 0; 64^10; T 65^10; 0; 65^10; S 66^10; 0; 66^10; T 67^10; 0; 67^10; T 68^10; 0; 68^10; T 69^10; 0; 69^10; T 70^10; 0; 70^10; M 71^10; 0; 71^10; T 72^10; 0; 72^10; T 73^10; 0; 73^10; T 74^10; 0; 74^10; T 75^10; 0; 75^10; S 76^10; 0; 76^10; T 77^10; 0; 77^10; T 78^10; 0; 78^10; T 79^10; 0; 79^10; T 80^10; 0; 80^10; M 81^10; 0; 81^10; T 82^10; 0; 82^10; T 83^10; 0; 83^10; T 84^10; 0; 84^10; T 85^10; 0; 85^10; S 86^10; 0; 86^10; T 87^10; 0; 87^10; T 88^10; 0; 88^10; T 89^10; 0; 89^10; T 90^10; 0; 90^10; M 91^10; 0; 91^10; T 92^10; 0; 92^10; T 93^10; 0; 93^10; T 94^10; 0; 94^10; T 95^10; 0; 95^10; S 96^10; 0; 96^10; T 97^10; 0; 97^10; T 98^10; 0; 98^10; T 99^10; 0; 99^10; T / 100^10; 0; 100^10; J 0^10; J; 100^10; J 0^10; L; 100^10; L -1 /THIS ENDS THE LIST / TIME CONSTANT MENU DISPLATCH LIST. TBOXLIS,0; 780-B-10; 192; 780-10 ISTOFFSET 0; 780-B-B-20; 192; 780-B-20 ISTEXIT 0; 0; 1023; 780-B-B-B-B-B-50 ISRETC -1 /THIS ENDS THE LIST OCTAL /BACK TO NORMAL / LINE STRING. TLINE, "]&37 /TICK MARK STRING " +0&177; " +100+30&177 /HIGH-Y, LOW-Y " +0&177; " +40+0&177 /HIGH-X, LOW-X " +0&177; " +100+30&177 /HIGH-Y, LOW-Y " +37&177; " +40+37&177 /HIGH-X, LOW-X 0 / TICK MARK STRING. TICKS, "]&37 " +0&177; " +100+23&177 /HIGH-Y, LOW-Y " +0&177; " +40+0&177 /HIGH-X, LOW-X " +0&177; " +100+35&177 /HIGH-Y, LOW-Y " +0&177; " +40+0&177 /HIGH-X, LOW-X "]&37 " +0&177; " +100+23&177 /HIGH-Y, LOW-Y " +10&177; " +40+0&177 /HIGH-X, LOW-X " +0&177; " +100+35&177 /HIGH-Y, LOW-Y " +10&177; " +40+0&177 /HIGH-X, LOW-X "]&37 " +0&177; " +100+23&177 /HIGH-Y, LOW-Y " +20&177; " +40+0&177 /HIGH-X, LOW-X " +0&177; " +100+35&177 /HIGH-Y, LOW-Y " +20&177; " +40+0&177 /HIGH-X, LOW-X "]&37 " +0&177; " +100+23&177 /HIGH-Y, LOW-Y " +30&177; " +40+0&177 /HIGH-X, LOW-X " +0&177; " +100+35&177 /HIGH-Y, LOW-Y " +30&177; " +40+0&177 /HIGH-X, LOW-X "]&37 " +0&177; " +100+23&177 /HIGH-Y, LOW-Y " +37&177; " +40+37&177 /HIGH-X, LOW-X " +0&177; " +100+35&177 /HIGH-Y, LOW-Y " +37&177; " +40+37&177 /HIGH-X, LOW-X 0 / KEYBOARD DISPATCH TABLE. KTABLE, KERROR / KERROR / KERROR / KERROR / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / KERROR / DOBELL / KERROR / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOESC / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL / DOBELL /! DOBELL /" DOBELL /# DOBELL /$ DOBELL /% DOBELL /& DOBELL /' LPAREN /( RPAREN /) DOBELL /* DOBELL /+ PHALF /, DOBELL /- MHALF /. DOHELP // RPAREN /0 DOBELL /1 DOBELL /2 DOBELL /3 DOBELL /4 DOBELL /5 DOBELL /6 DOBELL /7 DOBELL /8 LPAREN /9 DOBELL /: DOBELL /; PHALF /< DOBELL /= MHALF /> DOHELP /? DOBELL / ANAL /A EBEGIN /B DOBELL /C EEXIT /D EEND /E EFINISH /F AFLIP /G DOBELL /H INISCREEN /I JUSTIFY /J DOBELL /K LOCATE /L EDIT /M DOBELL /N OVERVIEW /O POSIT /P QUIT /Q SFLIP /R ESTART /S TFLIP /T DOBELL /U VIEW /V DOBELL /W DEMAGNIFY /X MFLIP /Y MAGNIFY /Z PQUARTER /[ DOBELL /\ MQUARTER /] DOBELL /^ DOBELL / DOBELL / ANAL / EBEGIN / DOBELL / EEXIT / EEND / EFINISH / AFLIP / DOBELL / INISCREEN / JUSTIFY / DOBELL / LOCATE / EDIT / DOBELL / OVERVIEW / POSIT / QUIT / SFLIP / ESTART / TFLIP / DOBELL / VIEW / DOBELL / DEMAGNIFY / MFLIP / MAGNIFY / PQUARTER / DOBELL / MQUARTER / DOBELL / DOBELL / NOPUNCH /PREVENT BINARY OUTPUT FIELD VELFLD%10 /FIELD FOR VELOCITY BUFFER, ETC. *200 /FOR COMPATIBILITY / BUFFER STATUS WORDS. STATBUF,ZBLOCK 200 /BUFFER CONTROL WORDS HERE / VELOCITY TABLE. VTABLE, ZBLOCK 1000^3 /VELOCITY AND TIME STORED HERE ENPUNCH /RESUME BINARY OUTPUT $ /THAT'S ALL FOLK!