@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@RT11ߋtv ?B-NO BOOT ON VOLUME @w p@w l wN׭ ׭ w H  @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ߋtv ?B-NO BOOT ON VOLUME @w p@w l wN׭ ׭ w H  @J f @wr Z @& 7 h BLOCK@ X IS BAD  -̂@ R   # @ jw 7 r7 t &"B g wD0 ѕ /Rì/    ~ s// ` b|]/ FD 1  8 /s//-w    s/ eOykQ.c!OyЎkQc!OykQ c!Oy kQ c!OyHkQ# c!OypkQc!OykQ)c!Cy_kQ c!Cy_kQ c!Cy_kQ c!FyQkQc!MykQc!Fy(kQ c!&kQ4 c!PykQ,c!Cy`kQc!:dHE  c! @kQD TO ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THETHE I/D TBL ; INFO FROM THE PREVIOUS 'NEW'. ;DEFAULTS: WINDOWSIZE=BUFSIZE IF <= SCOPESIZE, ELSE = SCOPESIZE ; OPTION='NEW' INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQU; START=1 DEDI: JSR R5,DEEOL ;CHK ANY EXCESS BUFRS/CONSTANTS .BYTE 2,10 MOVB @#DEFLG1,R1 ;SAV PREVIOUS DISPLY TYPE .IPMENT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPIFDF GT40$ JSR PC,@#DEGTOF ;TURN GT40 OFF .ENDC CLR @#DEDID ;INHIBIT DEFAULT-DATA-EDITOR-CMDS CLRB @#DEFLG1 ;INHIBIT c! KkQ c!:d!kQ c!.SkQc!*KkQxc!&kQc!AywkQc!AywkQc!%PLIED BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; CARL RALSTON ; ASSEMBLY PARAMETER: GT40$ IF DEFINED WILL ASSEMBLE CODE FOR GT40 ; ELSE FOR VR14 ;GT40$=1 ;DEFINITIONS R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 EXIT=0 CRLFC0=3}  yhH#&E C}C T~^ C&|&C{3X {3X ,@ C COLST=6 TEXT=7 FFLOAT=15 EXP=16 .IFDF SPDDI$ .IFDF CAPS$ .GLOBL DEFLCK,DEEOL,DENORM .IFNDF SPNDI$ .GLOBL DESCA,dD 3C T~X+CZhM Cw C&X C&4X& Cyh  #yhE  #yh #DEMXMN,DEADJ .ENDC .ENDC .GLOBL DEDI,DEDIB2,DEDATA,DEASGN,DECMD,DEFLG1,DELST,DEONE,DEDID .GLOBL IFIX,MULT,DEDIT1,DEFORE,zGX C,@ #,E  #}E  #y}  Cy} C&vr C:L1CyL" CyDECMD1,DEFLG4,QA,QADATF,DEOFY .GLOBL DISYBU,DISST,DIST,DISN,DISCU,DISSC,DISOFY,DEDYSZ,DEDXSZ .GLOBL DISTYP,DISCI,DISOFX,DISSZXL"E  CyL"  CyL" CyL"^Cy  CyD  C%#'jLmjL,DISTOP,DISBOT,DEOFYD .GLOBL DISBUF,DEDATT,FLOAT,DETLE .IFDF VR14$ .GLOBL DINIT .ENDC .IFDF GT40$ .GLOBL DISMPO,DEDBCB,.TITLE SPOV2 ;LAB APPLICATIONS-11 DISPLAY COMMAND ;DEC-11-SLABA-C-LA16 ;FILE ID SPOV2.1 ;FILE: SPOV2.MAC .CSECT SPOV2 ;CGINIT,DEGTOF,DEGTON,GTDISP,DEFREE,DETOP .GLOBL DEGIDF,DEGFXF,DECDID,GTRCAL,DISSKP,DISGRA,DEGFCJ .ENDC ;ROUTINES CALLED:DEFOPYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONORE,IFIX,MULT,DINIT,DEADJ,FLOAT,DETLE ; DESCA,DEMXMN,DEEOL,DENORM,QA,GINIT ; DEGTOF,DEGTON,GTDISP ;---DDI B [WINDOWSIZE[STLY ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANART]] [NEW OR OLD] ;IF NEW-DISPLAY A BUFFER (S# OR F#) WITH 'WINDOWSIZE' BEING ; THE TOTAL #PTS TO DISPLAY AT ANY ONE TIME. ;Y OTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AN 'START' IS THE 1ST PT DISPLYED SUCH THAT ; START+WINDOW <= BUFSIZ AND WINDOW <= SCOPE SIZE ;IF OLD-DISPLAY A BUFR B BUT USE OUT DEDIB2: CLR @#DEDID ;THESE TWO INSTR WERE CLRB @#DEFLG1 ;REPEATED FOR 'AAD CMD' MOV @#DEOFYD,R1 ASL R1 ;R1=SCO WAS ASSIGNED BNE DEDI7A MOV #21.,R0 JMP DEDIEE ;ASSIGN TBL IS EMPTY,ERR. DEDI7A: MOVB @#DECMD,@#DEASGN ;SET F# OF 1ST PE SIZE TST @#DEDATT ;POS-NEG-DATA? BNE DEDI2 ;NO ASR R1 ;YES - R1=HALF-SCOPE-SIZE DEDI2: DEC R1 MOV R1,DEDIWI ;TENTRY CLRB @#DECMD+3 ;SET TYPE & # FOR MOVB @#DEASGN+1,@#DECMD+2 ;S.P. BUFR IN DECMD+2 ; NOW SCALE THE F.P. DATA DOWN EMP STORAGE JSR R5,@#FLOAT BR DEDI2A DEDIWI DEDI2A: MOV R0,@#DENORM ;'DENORM' IS NOW SETUP MOV R1,@#DENORM+2 CMP #17- 'DEADJ' GETS F.P. DATA VIA ; 'DECMD' AND DEPOSITS IT VIA 'DECMD+2 MOV #DEASGN+2,R5 ;ADDR+2 OF 1ST S.P. ASSIGN ENTRY IS P7777,@#DECMD1+4 ;START WAS SPECIF ? BNE DEDI3 ;YES CLR (PC)+ ;NO, SAV (DEFAULT-1) VALUE DEDIST: 0 CMP #177777,@#DECMDUT JSR PC,DEADJ ;IN R5 FOR 'DEADJ' MOV @#DECMD+2,@#DECMD ;THE S.P. BUF IS ALWAYS DISPLYED BR DEDI9 .ENDC ; TIME TO F1 ;WINDOWSIZE WAS SPECIF ? BNE DEDI5 ;YES MOV @#DEDATA+2,R0 ;NO, SAV DEFAULT VALUE CMP R0,@#DEDXSZ ;DEFAULT > SCOPESIZIND MULT & OFFSET SO GT40 DISPLY CAN SCALE DOWN ; THE F.P. DATA FOR DISPLY .IFDF GT40$ ;GT40 VERSION FOR F.P. BUFR MOVBE? BLOS DEDI6 ;NO MOV @#DEDXSZ,R0 ;YES DEFAULT = SCOPESIZE BR DEDI6 DEDI3: JSR R5,@#IFIX BR DEDI4A DECMD1+4 DEDI @#DECMD,@#DEASGN ;SET F# OF 1ST ENTRY MOV #DECMD,R1 ;NEED TYPE & # OF B, & CLR R0 ;NEED START OF B, & MOV @#DEDATA,R5 DISPLY JSR R5,QA 20000+400+20 ;NULL ANS OK+SILENT QUES+ALPHA CMD DEDADR TSTB @#QADATF ;ANY ALPHAN CHAR GIVEN? BEQ 4A: DEC R0 ;(START-1) MOV R0,DEDIST ;SAV (START-1) BGE DEDI5 ;START-1<0? MOV #17.,R0 ;YES--(ERR) JMP DEDIEE DEDIDEDIB2 ;NO--USE DEFAULT NEW TST R0 ;'N' OR 'O' WAS SPECIF? BPL DEDI1 ;YES MOV #15.,R0 JMP DEDIEE ;NO,ILLEG CHAR-5: JSR R5,@#IFIX BR DEDI6 DECMD1 DEDI6: MOV R0,DEDIWI ;SAV WINDOW SIZE BGT DEDI6A MOV #18.,R0 JMP DEDIEE ;WINDOWSI-(ERR) DEDI1: BEQ DEDIB2 ;N WAS SPECIF ;COME HERE ONLY WHEN USING 'OLD' PARAMETERS MOV #177777,(PC)+ ;O WAS SPECIF--SZE < 1--(ERR) DEDI6A: CMP R0,@#DEDXSZ ;WINDOW > SCOPE SIZE ? BLOS DEDI6B ;NO MOV #20.,R0 JMP DEDIEE ;YES--(ERR) DEDET FLG! DEDIWI: 0 ;SAVE WINDOW SIZE CMP R1,#1 BNE DEDIB3 ;PREVIOUS DISPLY WASNT 'DDI' (ERR) MOV #DEDIT1,R0 ;GET 1STI6B: ADD DEDIST,R0 ;(ST-1) + WINDOW CMP R0,@#DEDATA+2 ;(ST-1) + WINDOW > BUFSIZ ? BLOS DEDI7 MOV #19.,R0 JMP DEDIEE I/D TBL ADDR TST DIST(R0) ;WAS A BUFR CMD GIVEN BTWN DISPLY CMDS? BNE DEDI7 ;NO DEDIB3: MOV #16.,R0 JMP DEDIEE ;YES;YES--(ERR) ;TIME TO FIND OUT IF B IS SP OR FP ; FIRST SAV 'DECMD'(THE TRUE TYPE & #) SINCE ; FP-VR14 DATA CODE WILL CHAN--(ERR) BECAUSE 'OLD' PARAMS ARE GONE ; ---DEDIB2---IS AN ENTRY PT USED BY THE DATA ANALYSIS ROUTINE ; UPON COMPLETION OF GE IT DEDI7: JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES MOV @#DECMD,(PC)+ ;TYPE/# OF B(SAV FOR AWHILE) DEDIMD: 0 CLTHE 'AAD' CMD ; COME HERE ONLY WHEN NEED TO DEFINE A 'NEW' DISPLY ; 1ST SET UP 'DENORM' ; GET'START' AND 'WINDOW' & CHK THEM R @#DEDID+2 ;ONLY 1 DISPLY TSTB @#DECMD+1 ;WHAT TYPE IS B? BEQ DEDI8 ;SNGL .IFDF VR14$ TSTB @#DEASGN+1 ;A S.P. BUFRSITY VALUE IN R2 MOVB @#DECMD,R0 ;GET # DEC R0 ASL R0 ASL R0 ;(#-1)4--F.P. TAKES 4BYTES/DATUM MOV @#DEDATA+2,R5 DEONE+2 ;2ND TBL DOESNT EXIST .IFDF VR14$ JSR PC,@#DINIT .ENDC .IFDF GT40$ ; SET UP DISPLY BUFR CONTROL BLK (DEDBCB);BUFSIZ JSR PC,@#MULT ADD @#DEDATA+12,R5 ;4*(#-1)*BUFSIZ+ADR OF 1ST F.P. BUFR MOV #177776,R1 ;SET DATA TYPE (F.P.=-2) MOV #DEDBCB,R1 ;ADDR OF BUFR CTRL BLK MOV @#DEFREE,(R1) ;SET BUFR ADDR = 1ST FREE LOC MOV @#DETOP,R2 ;TOP OF FREE COMOV #6,R2 ;SET INTENSITY (BRIGHT=6) BR DEDI10 .ENDC ; CODE FOR S.P. BUFS FOLLOWS DEDI8: CLRB @#DEASGN ;CLR F# OF 1SRE SUB (R1)+,R2 ;TOP-1ST FREE LOC TST (R2)+ ;(TOP-1ST FREE)+2 MOV R2,(R1) ;SET BUFSIZ=(TOP-FREE)+2 JSR PC,@#GINIT T ENTRY ;PUT ST.ADR. OF S.P BUFFER IN R5 ; PUT DATA TYPE (S.P.=0) IN R1 ; PUT STATUS WORD FOR CHAN/INTENSITY IN R2 DEDI9 JSR PC,@#GTDISP ;CALL GT40 'DISPLY MODULE' TST R0 BEQ DEDI13 MOV #22.,R0 JMP DEDIEE ;GT40 BUFR NEEDS EXCEEDED DEDI1: MOVB @#DECMD,R0 ;GET# DEC R0 ;#-1 ASL R0 ;(#-1)*2 (S.P. TAKES 2 BYTES) MOV @#DEDATA+2,R5 ;BUFSZ JSR PC,@#MULT ;3: .IFDF RT11$ MOV @#DEDBCB,R0 ;GET DISPLY BUFFER ADDR .INSRT ;TELL GRAPHICS ABOUT IT MOV #DEGFCJ,R0 ;GET FREE CUR,(#-1)*BUFSZ ADD @#DEDATA+6,R5 ;2*(#-1)*BUFSZ +ADR OF 1ST BUF MOV #1,R1 ;SET DATA TYPE (SP=1) .IFDF VR14$ CLR R2 ;SELINES ;SUBR CALL ADDRESSES .INSRT ;TELL GRAPHICS ABOUT THEM .ENDC JSR PC,@#DEGTON ;TURN GT40 ON .ENDC MOV DET CHAN/INTEN .ENDC .IFDF GT40$ MOV #6,R2 .ENDC ;FILL IN I/D TBL DEDI10: MOV #DEDIT1,R0 ;ADR OF I/D TBL .IFDF GTDIMD,@#DEDID ;ENABLE DEFAULT-DATA-EDITOR-CMDS MOVB #1,@#DEFLG1 ;ENABLE DISPLAY CMDS .IFDF GT40$ MOVB #-1,@#GTRCAL TSTB40$ MOVB #1,DISSKP(R0) CLRB DISGRA(R0) .ENDC MOV R5,DISYBU(R0) ;BUFADR MOV R1,DISTYP(R0) ;DATA TYPE MOV R2,DISCI(R @#DEGIDF BNE DEDI12 TSTB @#DEGFXF BEQ DEDI14 DEDI12: TST (SP)+ JMP @#DECDID .ENDC DEDI14: RTS PC ;ALL DONE ;ERR0) ;CHAN/INTENSITY TST DEDIWI ;OPTION 'OLD' WANTED? BMI DEDI11 ;YES MOV @#DEDATA+2,DISBUF(R0) ;BUFSZ (# DATA PTS) MORS DEDIEE: TST (SP)+ ;GET NORMAL RETN OFF STACK JMP @#DEFORE ;CMD LIST USED BY 'QA' TO FIND OPTION DEDADR: .BYTE 3 DEC R5 ;NEED SIZE-1 OF B TO JSR PC,DEMXMN ;FIND MAX-MIN TO JSR PC,DESCA ;FIND MULT & OFFSET FOR SCALING MOV #DEASGNOV DEDIST,DISST(R0) ;START-1 MOV DEDIWI,DIST(R0) ;WINDOW SIZE MOV #1,DISN(R0) ;N=1 CLRB DISCU(R0) ;CURSOR FLG=0 CLRB +2,R5 MOV R1,(R5)+ ;SAV 'MULT' IN ASSIGN TBL MOV R2,(R5)+ MOV R3,(R5)+ ;SAV 'OFFSET' IN ASSIGN TBL MOV R4,(R5) MOV #DISSC(R0) ;SCA FAC=0 CLRB DEFLG4 ;CLEAR WINDOW FLG CLR DISOFX(R0) ;X-AXIS OFFSET MOV @#DEOFY,DISOFY(R0) ;Y-AXIS OFFSEDEDIT1,R0 ;ADDR IF 1ST I/D TBL ADD #DISMPO,R0 ;INDEX FOR STORING: MOV R1,(R0)+ ;'MULT' IN I/D TBL MOV R2,(R0)+ MOV R3T MOV @#DEDXSZ,DISSZX(R0) ;SCOPE SIZE X MOV @#DEDYSZ,DISTOP(R0) ;TOP OF DISPLY CLR DISBOT(R0) ;BOT OF DISPLY=0 ;SET I/,(R0)+ ; & OFFSET IN TBL MOV R4,(R0) ; PUT ST ADDR OF F.P. DATA BUFR IN R5 ; PUT DATA TYPE (F.P. = -2) IN R1 ; PUT INTEND TBL ADDR IN DELST & DEONE DEDI11: MOV #DEDIT1,@#DELST CLR @#DELST+2 ;2ND TBL DOESNT EXIST MOV #DEDIT1,@#DEONE CLR @#CK,DEEOL .ENDC .GLOBL DEMO,DEDATA,DEGET,DEPUT,DECMD,DEFORE,DETLE ;ROUTINES CALLED DEEOL,DEGET,DEPUT,DEFLCK,DEFORE,DETLE CMD1,#177777 ;1ST OPTION EXISTS? BNE DENO1 ;YES CMP @#DECMD,@#DECMD+2 ;NO B1=B2? BEQ DENO7 ;YES, EVERYTHING IS OK MOV ;---BMO B1 B2--- ;MOVE DATA OF B1 INTO B2 ;BOTH B1 & B2 MUST BE SPECIFIED ;IF B1 IS F.P. AND B2 IS S.P. THE TRANSF COULD CAU #177777,R0 ;NO, THEREFOR TRANSFR CONTENTS MOV @#DEDATA,R1 ;OF B1 TO B2 DENO0: INC R0 JSR R5,@#DEGET DECMD JSR R5,@#DEPSE AN FPMP ; ERROR DUE TO FIXING DATA TO +-15 BITS. ;ALL OTHER COMBINATIONS (B1,B2 BOTH F.P. OR S.P.) OR ; (B1 S.P. & B2 F.P.UT DECMD+2 DEC R1 BNE DENO0 ;TRANSFR NOT DN YET BR DENO7 ;TRANSFR IS DN! DENO1: CMP @#DECMD1+4,#-1 ;2ND OPTION MUST E) WILL CAUSE A TRANSF ; FROM B1 DIRECTLY TO B2 WITH NO PROBLEM DEMO: JSR R5,DEEOL ;CHK EXCESS BUFRS/CONSTANTS .BYTE 4,0 XIST BNE DENO2 ;YES IT DOES JMP DENOE1 ;NO ---(ERR) DENO2: MOV @#DEDATA,DENO10 ;SET DN CTR = DATASIZE MOV #-1,DENOR0 ;IJSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES TST @#DECMD+2 ;B2 WAS SPECIFIED? BMI DEME1 ;NO-- ERR MOV @#DEDATA,R1 ;YES NDEX PTR USED BY DEGET MOV @#DECMD1+2,-(SP) ;PUT 1ST VALUE ON STACK MOV @#DECMD1,-(SP) MOV @#DECMD1+6,-(SP) ;PUT 2ND VALUE CLR R0 DEMO2: JSR R5,@#DEGET DECMD JSR R5,@#DEPUT DECMD+2 INC R0 DEC R1 BNE DEMO2 JSR PC,@#DEFLCK ;OUTPUT BUFR M ON STACK MOV @#DECMD1+4,-(SP) JSR R4,@#$POLSH $CMR,.+2 BMI DENO3 ;L,H VALUES ENTERED IN ORDER MOV @#DECMD1,R0 ;H,L EAY BE F.P. RTS PC DEME1: MOV #23.,R0 ;SPECIFY A 2ND BUFR TST (SP)+ ;POP NORMAL RTN OFF STACK JMP @#DEFORE .ENDC ;NTERED, THUS REVERSE ORDER MOV @#DECMD1+2,R1 MOV @#DECMD1+4,@#DECMD1 MOV @#DECMD1+6,@#DECMD1+2 MOV R0,@#DECMD1+4 MOV R--- NORMALIZE COMMAND --- .IFDF SPDNO$ .IFDF CAPS$ .GLOBL DEOPBU,DEADJ,DEFLCK,DESCA,DEMXMN,DEEOL,DEFMCK .GLOBL DEFMK0,DE1,@#DECMD1+6 DENO3: MOV (PC)+,R0 DENOR0: 0 INC R0 JSR R5,@#DEGET ;GET DATUM FROM B1 DECMD MOV (SP)+,DENO11 ;SAV F.P. DFMK1 .ENDC .GLOBL DENO,DEDATA,DECMD,$POLSH,$CMR,DEGET,DEPUT,SAVARG,DETLE .GLOBL $MLR,$SBR,FORMAT,DEFORE,DECMD1,RSTARG ;ROATUM MOV (SP),DENO11+2 ; ALSO MOV DENO11,-(SP) ;LEAVE DATUM ON STACK MOV @#DECMD1+6,-(SP) ;PUT H ON STACK MOV @#DECMD1+4UTINES CALLED: DEFLCK,$POLSH,DEMXMN,DEGET,DEPUT,DESCA ; FORMAT,DEFMCK,DEEOL,DEFORE,DEOPBU,SAVARG,RSTARG,DETLE ;---DNO B1 B2 ,-(SP) JSR R4,@#$POLSH $CMR,.+2 BMI DENO4 ;DATUM < H MOV @#DECMD1+6,-(SP) ;DATUM >= H, THUS PUT H ON STACK MOV @#DECML H--- ;L&H ARE OPTIONAL-WHEN SPECIFIED, EACH DATUM OF B1 OUTSIDE THESE ;LIMITS IS SET TO ITS CORRESP. LIMIT. ALL DATA IS ;ND1+4,-(SP) BR DENO6 DENO4: MOV @#DECMD1+2,-(SP) ;PUT L ON STACK MOV @#DECMD1,-(SP) MOV DENO11+2,-(SP) ;PUT DATUM ON STACKORMALIZED TO THESE LIMITS. ;IF OPTIONS ARE ABSENT, DATA IS NORMALIZED REL. TO MAX-MIN VALS DENO: JSR R5,DEEOL ;CHK EXCESS BU MOV DENO11,-(SP) JSR R4,@#$POLSH $CMR,.+2 BMI DENO5 ;L < DATUM MOV @#DECMD1+2,-(SP) ;L >= DATUM, THUS PUT L ON STACK,1 .BYTE 'N ;NEW .BYTE 'O ;OLD .BYTE 0 .EVEN .ENDC ;---MOVE COMMAND--- .IFDF SPBMO$ .IFDF CAPS$ .GLOBL DEFLFRS/CONSTANTS .BYTE 4,10 JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES JSR PC,@#DEOPBU ;CHK OPTIONAL BUFR,B1,B2 CMP @#DEFMCK MOVB DEFMK1,DENO15+1 MOV DENOMO,DEFMK0 MOV DENOMO+2,DEFMK0+2 JSR PC,DEFMCK MOVB DEFMK1,DENO16+1 ;THIS IS THE ACUX MOV R2,DEMAX+2 MOV R3,DEMIN MOV R4,DEMIN+2 ;OUTPUT MAX-MIN VALS IN SPECIFIED FORMAT ;THIS IS THE SET UP DEMMX: MOTAL OUTPUT JSR R5,@#FORMAT .BYTE CRLFC0,TEXT .ASCII /SCA FAC= / .BYTE 0 DENO15: .BYTE 16 ;FL=15,EXP=16 .BYTE 0 ;#DEV PC,R2 TST -(R2) SUB #DEMMX-DEMAX,R2 ;R2=ADDR OF DEMAX RELOCATED MOV R2,R4 ADD #4,R4 ;R4=ADDR OF DEMIN RELOCATED M MOV @#DECMD1,-(SP) BR DENO6 DENO5: MOV @#DENO11+2,-(SP) ;PUT DATUM ON STACK MOV @#DENO11,-(SP) DENO6: MOV DENOR0,R0 JC.PL. .BYTE 6 ;#SIG. DIG. .EVEN DENO17: DENOMU ;ADR OF SCA FAC .BYTE CRLFC0,TEXT .ASCII /OFFSET= / .BYTE 0 DENO16SR R5,@#DEPUT ;PUT CLIPPED VALUE IN B2 DECMD+2 DEC (PC)+ ;CLIPPING IS DONE? DENO10: 0 ;DN CTR =BUFSIZ INITIALLY BNE DE: .BYTE 16,0,6 .EVEN DENO18: DENOMO ;ADDR OF OFFSET .BYTE CRLFC0,EXIT .EVEN RTS PC ;ERROR DENOE1: MOV #10.,R0 NO3 ;NO ; NOW NORMALIZE THE DATA OF B2(POINTED TO BY DECMD+2) ; FIRST MUST FIND MAX-MIN OF B2 DENO7: MOV #DECMD+2,R1 ;TY;IF 1 OPTION IS SPECIF,SO MUST OTHER TST (SP)+ ;POP NORMAL RTN OFF STACK JMP @#DEFORE ;TAGS USED DENO11: 0,0 ;TEMP SAPE & # OF B2 CLR R0 ;ST PT =0 MOV @#DEDATA,R5 DEC R5 ;#PTS-1 = #PTS TO SCAN FOR MAX-MIN JSR PC,DEMXMN JSR PC,DESCAVE OF F.P. DATUM FROM 'DEGET' DENOMU: 0,0 ;SAVED SCA FAC AFTER SCALING DENOMO: 0,0 ;SAVED OFFSET AFTER SCALING .ENDC ; MOV R1,DENOMU MOV R2,DENOMU+2 MOV R3,DENOMO MOV R4,DENOMO+2 MOV #-1,R0 ;R0 IS NOW INDEX FOR DEGET/DEPUT MOV @#DEDA---MAX-MIN COMMAND--- .IFDF SPBMM$ .IFDF CAPS$ .GLOBL DEFXCU,DEOPBU,DEMXMN,DEEOL,DEFMCK .GLOBL DEFMK0,DEFMK1 .ENDC .GTA,R5 ;R5 IS DN CTR DENO8: INC R0 ;CURRENT INDEX MOV R0,DENOR0 ;POLSH DESTROYS REGS JSR PC,@#SAVARG MOV R2,-(SP) ;PUT SCLOBL DEMM,DECMD,DEDATA,FORMAT,DETLE ;ROUTINE CALLED: DEFXCU,DEMXMN,FORMAT,DEFMCK,DEOPBU,DETLE ; DEEOL ;---BMM B--- ;DEA FAC ON STACK MOV R1,-(SP) JSR R5,@#DEGET ;PUT DATUM ON STACK DECMD+2 MOV R4,-(SP) ;PUT OFFSET ON STACK MOV R3,-(SP) TERMINE THE MAX & MIN VALUE OF B BETWEEN THE ;FIXED CURSORS IF ACTIVE. IF NOT ACTIVE, OVER THE ;ENTIRE DATA ARRAY. ; ;MAXVA JSR R4,@#$POLSH ;(DATUM-OFFSET)*SAC FAC $SBR,$MLR,.+2 MOV DENOR0,R0 JSR R5,@#DEPUT ;PUT NORMALIZED VALUE IN B2 DECMD+2L ='DEMAX' ;MINVAL ='DEMIN' DEMM: JSR R5,DEEOL ;CHK EXCESS BUFRS/CONSTANTS .BYTE 2,0 JSR PC,@#DETLE ;CHK OTHER CMD STRIN JSR PC,@#RSTARG DEC R5 ;NORMALIZE DONE YET? BNE DENO8 ;NO ;TYPE OUT SCA FACTOR IN SPECIFIED FORMAT ;THIS IS THE SETG EXCESSES JSR PC,@#DEOPBU ;CHK OPTIONAL BUFR,B JSR PC,@#DEFXCU ;CHK IF CURSORS ARE ACTIVE TST R4 BMI DEMM3 ;CURSORS AR UP JSR PC,@#DEFLCK ;OUTPUT BUFR MAYBE F.P. DENOX: MOV PC,R2 TST -(R2) SUB #DENOX-DENOMU,R2 ;R2=ADDR OF DENOMU RELOCATEE NOT ACTIVE MOV R4,R0 ;START PT SUB R4,R5 ;(#PTS-1) TO SEARCH BR DEMM4 DEMM3: CLR R0 ;START PT=0 (INACTIVE) MOV @#DD MOV R2,DENO17 ADD #4,R2 ;ADDR OF DENOMO RELOCATED MOV R2,DENO18 MOV DENOMU,DEFMK0 MOV DENOMU+2,DEFMK0+2 JSR PC,DEEDATA,R5 ;GET DATA SIZE DEC R5 ;R5=DATA SIZE-1 DEMM4: MOV #DECMD,R1 ;R1=ADR OF 'TYPE/#' OF B JSR PC,@#DEMXMN MOV R1,DEMADEGET,DEPUT,DETLE,DEEOL ;--- BAD B1 B2 B3 --- B2+B1=B3 --- ;--- BSU B1 B2 B3 --- B2-B1=B3 --- ;--- BMU B1 B2 B3 --- B2*B1=B+2 ;B2 WAS NOT SPECIFIED; COPY B1 BR DEAS3 DEAS2: TST @#DECMD+4 BPL DEAS4 ;B3 WAS SPECIFIED DEAS3: MOV @#DECMD+2,@#DECMD3 --- ;--- BDI B1 B2 B3 --- B2/B1=B3 --- ;IF B2 & B3 ARE NOT SPECIFIED, THEN THEY DEFAULT TO B1 ;IF B3 IS NOT SPECIFIED, IT D+4 ;B3 WAS NOT SPECIFIED, COPY B2 DEAS4: RTS PC .ENDC ;--- MULTIPLY & OFFSET & FREE COMMAND --- ;---DIVIDE & WINDOW & DRAWEFAULTS TO B2 DEAD: JSR PC,DEAS1 DEAD1: MOV R0,@#DECMD1 ;SAVE INDEX PTR JSR R5,@#DEGET ;PUT DATUM FROM B2 ONTO STACK DEC COMMAND--- .IFDF SPSAD$ .IFDF CAPS$ .GLOBL DEOPBU,DEFLCK,DEMXMN,DEEOL .IFNDF SPNDI$ .GLOBL DEADJ,DESCA .ENDC .ENMD+2 JSR R5,@#DEGET ;PUT DATUM FROM B1 ONTO STACK DECMD JSR R4,@#$POLSH $ADR,.+2 MOV @#DECMD1,R0 ;$POLSH DESTROYS REGSDC .GLOBL DEOF,DEMU,DEDV,$MLR,$ADR,$DVR,$POLSH,DEDATA .GLOBL DEGET,DEPUT,DEFLG2,DECMD,DECMD1,DETLE ;ROUTINES CALLED: DEGET, JSR R5,@#DEPUT ;PUT RESULT FROM STACK INTO B3 DECMD+4 INC R0 CMP R0,@#DEDATA ;DONE? (R0=DATASIZE) BMI DEAD1 ;NO BRDEPUT,$POLSH,DEOPBU,DEFLCK,DETLE,DEEOL ;--- SAD B1 B2 CONSTANT --- B1+CONSTANT=B2 --- ;--- SMU B1 B2 CONSTANT --- B1*CONSTANOV R2,DEMM9 MOV R4,DEMM10 MOV DEMAX,DEFMK0 MOV DEMAX+2,DEFMK0+2 JSR PC,DEFMCK MOVB DEFMK1,DEMM5+1 MOV DEMIN,DEFMK0 DEASS DESU: JSR PC,DEAS1 DESU1: MOV R0,@#DECMD1 JSR R5,@#DEGET DECMD+2 JSR R5,@#DEGET DECMD JSR R4,@#$POLSH $SBR, MOV DEMIN+2,DEFMK0+2 JSR PC,DEFMCK MOVB DEFMK1,DEMM6+1 ;THIS IS THE ACTUAL OUTPUT JSR R5,@#FORMAT .BYTE CRLFC0,TEX.+2 MOV @#DECMD1,R0 JSR R5,@#DEPUT DECMD+4 INC R0 CMP R0,@#DEDATA BMI DESU1 BR DEASS DEBMU: JSR PC,DEAS1 DEBMU1:T .ASCII /MAX VALUE=/ .BYTE 0,COLST,12. DEMM5: .BYTE 16 ;FLOAT=15, EXP=16 .BYTE 0 ;# DEC.PLACES .BYTE 6 ;#SIG. DIG. MOV R0,@#DECMD1 JSR R5,@#DEGET DECMD+2 JSR R5,@#DEGET DECMD JSR R4,@#$POLSH $MLR,.+2 MOV @#DECMD1,R0 JSR R5,@#D .EVEN DEMM9: DEMAX ;ADR OF MAX VALUE .BYTE CRLFC0,TEXT .ASCII /MIN VALUE=/ .BYTE 0,COLST,12. DEMM6: .BYTE 16 ;FLOATEPUT DECMD+4 INC R0 CMP R0,@#DEDATA BMI DEBMU1 BR DEASS DEBDI: JSR PC,DEAS1 DEBDI1: MOV R0,@#DECMD1 JSR R5,@#DEGET=15,EXP=16 .BYTE 0 ;#DEC. PL. .BYTE 6 ;#SIG. DIG. .EVEN DEMM10: DEMIN ;ADR OF MIN VALUE .BYTE CRLFC0,EXIT .EVEN DECMD+2 JSR R5,@#DEGET DECMD JSR R4,@#$POLSH $DVR,.+2 MOV @#DECMD1,R0 JSR R5,@#DEPUT DECMD+4 INC R0 CMP R0, RTS PC ;TAGS USED DEMAX: 0,0 ;HOLDS MAXIMUM VALUE DEMIN: 0,0 ;HOLDS MINIMUM VALUE .ENDC ;--- ADD & SUB & MUL & DIV COM@#DEDATA BMI DEBDI1 DEASS: MOV @#DECMD+4,@#DECMD+2 ;CHK OUTPUT BUFR (F.P. OR GT40) JSR PC,@#DEFLCK ;BUFR MUST BE IN 'DECMDMANDS --- .IFDF SPBAD$ .IFDF CAPS$ .GLOBL DEFLCK,DEMXMN,DEEOL .IFNDF SPNDI$ .GLOBL DEADJ,DESCA .ENDC .ENDC .GLOBL D+2' FOR 'DEFLCK' RTS PC DEAS1: JSR R5,DEEOL ;CHK EXCESS BUFRS/CONSTANTS .BYTE 6,0 JSR PC,@#DETLE ;CHK OTHER CMD STRINEAD,DESU,DEBMU,DEBDI,DECMD,DECMD1,DETLE .GLOBL $POLSH,$ADR,$SBR,$MLR,$DVR,DEDATA,DEGET,DEPUT ;ROUTINES CALLED:DEFLCK,$POLSH,G EXCESSES CLR R0 ;R0 IS INDEX PTR FOR 'DEGET & DEPUT' TST @#DECMD+2 BPL DEAS2 ;B2 WAS SPECIFIED MOV @#DECMD,@#DECMD @#DECMD1,-(SP) JSR R4,@#$POLSH $MLR,.+2 MOV @#DECMD+4,R0 JSR R5,@#DEPUT DECMD+2 INC R0 CMP R0,@#DEDATA BMI DEMUDISET .ENDC .IFDF GT40$ BNE DEWI1 MOV #DEDIT1,R0 CLRB DISGRA(R0) MOVB #1,DISSKP(R0) JSR PC,@#GTSET MOV #DEDIT2,R1 BR DEOMD DEDV: JSR PC,DEAMD DEDV1: MOV R0,@#DECMD+4 JSR R5,@#DEGET DECMD MOV @#DECMD1+2,-(SP) MOV @#DECMD1,-(SP) 0 CLRB DISGRA(R0) MOVB #1,DISSKP(R0) JSR PC,@#GTSET RTS PC DEWI1: TSTB @#DEFLG1 ;A DISPLY IS UP? BEQ DEWI5 ;NO, JSR R4,@#$POLSH $DVR,.+2 MOV @#DECMD+4,R0 JSR R5,@#DEPUT DECMD+2 INC R0 CMP R0,@#DEDATA BMI DEDV1 DEOMD: JSR PC,SO RETURN JSR PC,@#DEGTOF ;YES, TURN OFF GT40 MOV #DEDIT1,R0 MOVB #1,DISGRA(R0) MOVB #1,DISSKP(R0) MOV #DEDIT2,R0 @#DEFLCK RTS PC DEAMD: JSR R5,DEEOL ;CHK EXCESS BUFRS/CONSTANTS .BYTE 4,4 JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSESMOVB #1,DISGRA(R0) MOVB #1,DISSKP(R0) DEWI3: MOVB #1,@#GTRCAL JSR PC,@#GTDISP TST R0 BEQ DEWI2 MOV #22.,R0 ;GT40 BU JSR PC,DEOPBU ;CHK OPTIONAL BUFRS B1,B2 CLR R0 ;INDEX FOR 'DEGET & DEPUT' RTS PC .ENDC .IFDF SPDFR$ ;--- DFR COMFR NEEDS EXCEEDED DEWI4: TST (SP)+ ;GET NORMAL RTN OFF STACK JMP @#DEFORE DEWI2: JSR PC,@#DEGTON ;TURN GT40 BAK ON .EMAND --- ;THIS FUNCTION SIMPLY CLEARS THE FREE CURSOR FLG IF IT ;IS SET, OR SETS IT IF IT IS CLEARED .GLOBL DEFR,DEWI,DEDR,DENDC DEWI5: RTS PC ;---DLI COMMAND--- ;THIS FUNCTION SIMPLY CLEARS THE DRAW FLG IT IT WAS SET ;OR SETS IT IF IT IS CLEARED XCUR,DEDPO,DE4POT,DEFLG1 .GLOBL DED1CO,DED2CO,DEFLG4,DEDIT1,DEDIT2,DEFORE .GLOBL DEFLG2,DEDXSZ .IFDF GT40$ .GLOBL DEGFCJ,DE DEDR: COM DEFLG2 .IFDF GT40$ BNE DEDR1 ;FLG JUST SET MOV #DEGLIX,@#DEGLIJ+2 ;FLG JUST CLRD RTS PC DEDR1: MOV #DEGLIJ,DEGLIX,DEGFC,DEGLI .GLOBL GTCCMD,DISGRA,DISSKP,GTSET,GTRCAL,GTDISP,DEGTON .GLOBL DEGTOF,GTTCMD,GTNCMD,DEDTA .ENDC .IFGLI,@#DEGLIJ+2 .ENDC CLR @#DE4POT ;SET 'SUM OF 4 POTS'=0 RTS PC ;---DEDPO (POINTS CMD)---DEDTA (TBLDLTA CMD)--- DET=B2 --- ;---SDI B1 B2 CONSTANT---B1/CONSTANT=B2--- ;IF B2 IS NOT SPECIFIED, THEN IT DEFAULTS TO B1 DEOF: JSR PC,DEAMD DEODF VR14$ .GLOBL DITCMD,DICCMD,DISET .ENDC DEFR: CLR @#DE4POT COMB @#DEFLG1+1 .IFDF GT40$ BNE DEFR1 ;FLG JUST SET F1: MOV R0,@#DECMD+4 ;SAVE R0 JSR R5,@#DEGET ;PUT DATUM FROM B1 ONTO STACK DECMD ;PTR TO 'TYPE/#' OF B1 MOV @#DECMD1+ MOV #DEGLIJ,@#DEGFCJ+2 ;FLG JUST CLRD RTS PC DEFR1: MOV #DEGFC,@#DEGFCJ+2 .ENDC RTS PC ;---DEXCUR (FIX CURSOR CMD)-2,-(SP) MOV @#DECMD1,-(SP) ;PUT 'CONSTANT' ONTO STACK. JSR R4,@#$POLSH $ADR,.+2 MOV @#DECMD+4,R0 ;$POLSH DESTROYS REGS-- DEXCUR: CLR @#DE4POT .IFDF GT40$ JSR PC,@#GTCCMD .ENDC .IFDF VR14$ JSR PC,@#DICCMD .ENDC RTS PC ;---DWI JSR R5,@#DEPUT ;PUT RESULT FROM STACK INTO B2 DECMD+2 ;PTR TO 'TYPE/#' OF B2 INC R0 CMP R0,@#DEDATA ;DONE? (R0=DAT COMMAND--- ;THIS FUNCTION SIMPLY CLEARS THE WINDOW FLG IF IT IS SET ;OR SETS IT IF IT IS CLEARED DEWI: CLR @#DED1CO CLR ASIZE) BMI DEOF1 BR DEOMD DEMU: JSR PC,DEAMD DEMU1: MOV R0,@#DECMD+4 JSR R5,@#DEGET DECMD MOV @#DECMD1+2,-(SP) MOV@#DED2CO ;SET STARTS IN I/D TBLS =0 COMB DEFLG4 .IFDF VR14$ MOV #DEDIT1,R0 JSR PC,@#DISET MOV #DEDIT2,R0 JSR PC,@#PC,@#DEGTOF CLR @#DED1CO CLR @#DED2CO JSR PC,@#GTNCMD DEDPT: MOV #DEDIT1,R0 MOVB #1,DISSKP(R0) MOV #DEDIT2,R0 MOVB IED BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; CARL RALSTON ; ASSEMBLY PARAMETER: GT40$ IF DEFINED WILL ASSEMBLE CODE FO#1,DISSKP(R0) TSTB @#DEFLG1 ;A DISPLY IS UP? BNE DEWI3 ;YES RTS PC ;NO, SO RETURN .ENDC .IFDF VR14$ CMP R0,@#DEDXSR GT40 ; ELSE FOR VR14 ;GT40$=1 ;DEFINITIONS R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 .IFDF SPBST$ Z ;#PTS > SCOPESIZE? BLOS DEDPO1 MOV #20.,R0 JMP @#DEFORE DEDPO1: JSR PC,@#DITCMD RTS PC .ENDC .ENDC .IFDF CAPS$ .GLOBL DEFXCU,DEOPBU,DEFLCK,DEEOL .GLOBL DEFRCU,DEPVOT,DESTRP .ENDC .GLOBL DEST,DECMD,FLOAT,DECMD1,DETLE .GLOBL DEGET,DEPUT,$POLSH,$ADR,$SBR,$DVR .GLOBL DEDATA,DEFORE,QA,QAERR ;ROUTINES CALLED: DEFXCU,$POLSH,FLOAT,DEGET,DEPUT,DEFORE,DETLE ; DEFRCU,DEPVOT,DESTRP,DEOPBU,QA,DEFLCK,DEEOL ;---BST B1 B2 OPTION--- ;OPTION P - REPLACE THE DATA BETWEEN THE 'FIXED' CURSORS ; WITH THE BEST STRAIGHT LINE ;OPTION B - SUBTRACT A SLOPING BASELINE,DETERMINED BY THE ; FREE CURSO.TITLE SPOV4 ;LAB APPLICATIONS-11 STRIP COMMAND ;DEC-11-SLABA-C-LA18 ;FILE ID SPOV4.1 ;FILE: SPOV4.MAC .CSECT SPOV4 ;COPRS, FROM THE DATA OF B1 AND PLACE ; RESULTS IN B2. ; THE BASELINE BECOMES THE ZERO LINE. ; IF THE TWO FREE CURSORYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLYS OR FIXED COINCIDE NO STRIP IS DONE ; AND AN ERROR MESSAGE IS OUTPUT ; THE SAME HAPPENS IF B1 IS NOT BEING DISPLAYED ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY ; THIS OPTION (USES FREE CURSORS) CAN APPLY ONLY TO ; 1ST ENTRY OF 'DELST' DEST: JSR R5,DEEOL ;CHK EXCESS BUFRS/CONSTOTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND ANTS .BYTE 4,0 JSR PC,@#DEOPBU ;CHK OPTIONAL BUFRS B1,B2 ;CALL QA TO FIND OPTION JSR R5,QA 400+20 ;SILENT QUEST + ATO ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THE ILPHAN CMD DESTAD ;CMD LIST ADDR TSTB @#QAERR BEQ DEST2 MOV #15.,R0 JMP DESTEE ;(BAD OPTION) DEST2: TST R0 BNE DPO: .IFDF GT40$ JSR PC,@#DEGTOF ;TURN OF GT40 CMP R0,@#DEDXSZ ;#PTS > SCOPESIZE? BLOS DEDPO1 ;NO MOV #20.,R0 NFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQUIP ;YES--(ERR) BR DEWI4 DEDPO1: CLR @#DED1CO CLR @#DED2CO ;SET I/D TBL STARTS = 0 JSR PC,@#GTTCMD BR DEDPT DEDTA: JSR MENT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLEST8 ;NO DEST9: INC R0 ;YES CMP R0,@#DEDATA BNE DEST10 ;COPY REMAINING PTS OF B1 TO B2 JSR PC,@#DEFLCK RTS PC ;THE ASSOC IMAG BUFR. DESM: JSR R5,DEEOL ;CHK EXCESS BUFRS/CONSTANTS .BYTE 4,0 JSR PC,@#DEOPBU ;CHK OPTIONAL BUFRS B1,B2 DEST20 ;OPTION #B WANTED JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES JSR PC,@#DEFXCU TST R4 BMI DESTE1 ;FIXED CURALL DONE DEST10: JSR R5,@#DEGET DECMD JSR R5,@#DEPUT DECMD+2 BR DEST9 ;OPTION #2 FOR STRIP IS CARRIED OUT HERE. DSORS NOT DESPL(ERR) MOV R5,@#DECMD1 SUB R4,@#DECMD1 ;'DECMD+6' HOLDS DX ;TIME TO COPY THE BEGINNING PTS NOT IN THE STRIP EST20: JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES JSR PC,@#DEFRCU ;CALL FREE CURSOR ROUTINE TST R0 BMI DESTE2 ;FREE CLR R0 DEST5: CMP R0,R4 ;MORE PTS TO COPY BHI DEST6 ;NO JSR R5,@#DEGET ;YES DECMD JSR R5,@#DEPUT DECMD+2 INC CURSORS NOT ACTIVE (ERR) JSR PC,@#DEPVOT ;GET PIVOT LINE (SLOPE + INTCPT) ;TIME TO DO BASELINE STRIP: CLR R0 ;R0=INDEX R0 BR DEST5 ;TIME TO DO STRIP -DO A LITTLE HOUSEKEEPING 1ST DEST6: MOV R5,R0 JSR R5,@#DEGET DECMD ;GET Y2 ONTO STACK FOR 'DEGET & DEPUT' DEST21: JSR PC,@#DESTRP ;STRIP A DATA PT. MOV @#DECMD1+16,-(SP) MOV @#DECMD1+14,-(SP) ;GET STRIPPED VA MOV R4,R0 JSR R5,@#DEGET DECMD ;GET Y1 ONTO STACK MOV (SP)+,@#DECMD1+4 MOV (SP),@#DECMD1+6 ;SAV AWAY F.P. Y1 MOVLUE JSR R5,DEPUT DECMD+2 ;STORE STRIPPED VALUE IN B2 INC R0 CMP R0,@#DEDATA ;R0=DATASIZE? BNE DEST21 ;NOT DONE Y @#DECMD1+4,-(SP) ;LEAVE Y1 ON STACK TOO MOV R0,@#DECMD1+10 ;SAVE R0 ($POLSH EATS REGS) MOV R5,@#DECMD1+12 ;SAVE R5 (CTR FET JSR PC,@#DEFLCK RTS PC ;ALL DONE ;ERRORS DESTE1: MOV #26.,R0 ;FIX CURSORS NOT UP BR DESTEE DESTE2: MOV #27.,R0OR E.O. STRIP) JSR R4,@#$POLSH $SBR,.+2 JSR R5,@#FLOAT BR DEST7 DECMD1 ;GET F.P. DX DEST7: MOV R1,-(SP) MOV R0,- ;FREE CURSORS NOT UP DESTEE: TST (SP)+ ;POP 'NORMAL RTN' OFF STACK. JMP @#DEFORE ;COMMAND LIST USED BY 'QA' TO FIND O(SP) ;PUT F.P. DX ON STACK JSR R4,@#$POLSH $DVR,.+2 ;SLOPE=(Y2-Y1)/DX MOV (SP)+,@#DECMD1 MOV (SP)+,@#DECMD1+2 ;SAVE FPTION DESTAD: .BYTE 3,1 .BYTE 'P ;PEAK STRIP .BYTE 'B ;BASELINE STRIP .BYTE 0 .EVEN .ENDC ;---SMOOTH COMMAND--- .P. SLOPE AWAY ;HOUSEKEEPING IS OVER DEST8: MOV @#DECMD1+6,-(SP) MOV @#DECMD1+4,-(SP) ;PUT CURRENT Y1 ONTO STACK MOV @#DEC .IFDF SPBSM$ .IFDF CAPS$ .GLOBL DEOPBU,DEFLCK,DEEOL .ENDC .GLOBL DESM,DECMD,DEDATA,SAVARG,RSTARG,DEGET,DEPUT .GLOBL $POLMD1+2,-(SP) MOV @#DECMD1,-(SP) ;PUT SLOPE ONTO STACK JSR R4,@#$POLSH $ADR,.+2 ;CURRENT YVAL + SLOPE = NEW YVAL INC @#SH,$ADR,$MLR,DEFORE,QA,QAERR,DECMD1,DETLE ;ROUTINES CALLED: DEOPBU,SAVARG,RSTARG,DEGET,DEPUT ; $POLSH,DEFORE,QA,DEFLCK,DETLEDECMD1+10 MOV @#DECMD1+10,R0 ;SET INDEX FOR 'DEPUT' MOV (SP)+,@#DECMD1+4 MOV (SP),@#DECMD1+6 ;SAVE AWAY THIS NEW YVAL ,DEEOL ;---BSM B1 B2 OPTION--- ;OPTION =3P(3PT) =NP(5,7,9,11 PT) =H1(HANNING#1) =H2(HANNING#2) ;HANNING #1 SMOOTHS ONLY MOV @#DECMD1+4,-(SP) ;AND LEAVE IT ON STACK JSR R5,@#DEPUT DECMD+2 CMP R0,@#DECMD1+12 ;STRIP DONE? (R0=CURSOR#2) BNE D1 BUFR(REAL OR IMAG) ;HANNING #2 SMOOTHS BOTH BUFRS (REAL & IMAG) BUT ASSUMES THAT ; THE REAL BUFR IS IMMEDIATELY FOLLOWED BY R PC,DESMO ;CALL COMMON SMOOTH ROUTINE JSR PC,@#DEFLCK ;CHK IF F.P. BUFR RTS PC ;ERRORS DESME1: MOV #28.,R0 BR DESMER4=#PTSMO INC R0 JSR PC,@#SAVARG ;SAV R0-R5 CLR -(SP) CLR -(SP) ;INITIATE 'RUNNING SUM'=0 DESMO4: MOV 2(R2),-(SP) MOE DESME2: MOV #29.,R0 ;NOT ENOUGH BUFR SPACE DESMEE: TST (SP)+ ;POP NORMAL RTN OFF STACK JMP @#DEFORE ;COMMAND LIST USEV (R2)+,-(SP) ;PUT NXT 'COEFF' ON STACK TST (R2)+ ;MOV PTR TO NXT COEFF JSR R5,@#DEGET DECMD ;PUT DATUM FROM B1 ON STACD BY 'QA' TO FIND OPTION DESMAD: .BYTE 5,2 .BYTE '3,'N,'H,'H,0 ;3P,NP,H1,H2 .BYTE 'P,'P,'1,'2,0 .EVEN ;COMMON SMOOTH K = Y(I-) DEC R4 ADD R4,R0 JSR R5,@#DEGET DECMD ;PUT DATUM FROM B1 ON STACK = Y(I+) MOV R0,@#DECMD1+4 MOV R2,@#DECROUTIN DESMO: MOV R0,-(SP) ;SAVE OPTION # ON STACK ;TIME TO FIND NEW ADDR OF 'COEFF TBL' TO BE USED AND 'RING BUFR' ;TO BMD1+10 MOV R4,@#DECMD1+6 ;SAVE R0 & R2 & R4 JSR R4,@#$POLSH $ADR,$MLR,$ADR,.+2 ;(Y(I-) + Y(I+))*C + SUM MOV @#DECMD1+6,R;CALL QA TO GET OPTION JSR R5,QA 400+20 ;SILENT QUEST + ALPHANU CMD DESMAD ;CMD LIST USED BY QA TSTB @#QAERR BEQ DE USED. ;REMEMBER THIS CODE COULD BE MOVED AROUND ASL R0 ;MAKE R0 (0,2,4, OR 6)'WORD CONSCIOUS' MOV DESMTB(R0),R2 DESMXESM1 MOV #15.,R0 JMP DESMEE ;(BAD OPTION) DESM1: JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES CMP R0,#3 BNE DESM6 ;H: ADD PC,R2 TST -(R2) ADD #DESM3P-DESMX,R2 ;R2 NOW HOLDS ADDR OF COEFF TBL MOV R2,@#DECMD1 ;SAVE LOC OF COEFF TBL DESMXX:ANNING #2 IS DESIRED--ASSUME LIKE BUFRS (BOTH F.P. OR BOTH S.P.) MOV @#DECMD+2,R2 SUB @#DECMD,R2 ;R2=B2-B1 BPL DESM2 ;B MOV PC,R5 TST -(R5) ADD #DESMRG-DESMXX,R5 ;R5 NOW HOLDS ADDR OF RING BUFR MOV R5,@#DECMD1+2 ;SAVE LOC OF RING BUFR ;1S1<=B2 (R2>=0) NEG R2 ;R2=-R2 (ABS VAL) MOVB @#DECMD,R1 ;R1=B1'S # (LARGEST OF 2 NUMBERS) BR DESM3 DESM2: MOVB @#DECMD+2T (#PTSMO-1)/2 CANNOT BE SMOOTHED. THEY ARE AVERAGED IN ;PAIRS INSTEAD CLR R0 ;INDEX FOR 'DEGET & DEPUT' MOV (R2),R3 ;R2 ,R1 ;R1=B2'S # (LARGEST OF 2 NUMBERS) DESM3: DEC R2 ;SEE IF R2 /B2-B1/ WAS 1 BEQ DESME1 ;B1 &B2 ARE CONTIGUOUS BUFRS (FMT PTS TO WD0 OF COEFF TBL ASR R3 ;R3=(#PTSMO-1)/2 DESMO1: JSR PC,@#SAVARG ;$POLSH DESTROYS REGS JSR PC,DESM10 ;COMMON ROUTINERR) INC R1 ;WILL NEED TO USE THE NXT # BUFR TSTB @#DECMD+1 ;SEE IF OKAY BEQ DESM4 ;S.P. BUFRS IN USE CMP R1,@#DEDATA+E TO DO AVERAGE JSR PC,@#RSTARG ;RESTORE R0-R5 MOV @#DECMD1+4,(R5)+ ;PUT'AV VAL' INTO RING BUFR MOV @#DECMD1+6,(R5)+ DEC10 ;F.P. BUFRS IN USE BHI DESME2 ;NOT ENOUGH F.P. BUFR SPACE (ERR) BR DESM5 DESM4: CMP R1,@#DEDATA+4 BHI DESME2 ;NOT E R3 ;ALL AVERAGED PAIRS DONE YET? BEQ DESMO2 ;YE INC R0 ;NO BR DESMO1 ;TIME TO DO ACTUAL SMOOTH DESMO2: MOV #1777NOUGH S.P. BUFR SPACE (ERR) DESM5: JSR PC,DESMO ;CALL COMMON SMOOTH ROUTINE INC @#DECMD ;B1 GOES TO B2 INC @#DECMD+2 ;B377,R0 ;R0=-1 (INDEX PTR FOR DEGET ETC) MOV @#DEDATA,R3 SUB (R2),R3 ;R3=DATASIZE-(#PTSMO-1) [DNCTR] MOV @#DECMD1+2,R5 ;R5= GOES TO B4 ;ALL SMOOTHS REQUIRING EXACTLY 1 SMOOTH (OPTION 3P,NP,H1) OR A ;2ND SMOOTH (OPTION H2) COME HERE. DESM6: JSPTR TO WD0 OF RING BUFR DESMO3: MOV @#DECMD1,R2 ;R2=PTR TO WD0 OF COEFF TBL MOV (R2)+,R4 ;R2 NOW PTS TO 1ST COEFF INC R4 ; B2 MOV @#DECMD1,R3 MOV (R3),R3 ASR R3 ;R3=(#PTSMO-1)/2 DESMO7: INC R0 JSR PC,DESM20 ;COMMON ROUTINE TO PUT PT AWAY ,135307 ;C(N/2)-2 (F.P. .2429) 0,0 ;C(N/2)-3 0,0 ;C(N/2)-4 0,0 ;C(N/2)-5 ;HANNING DESMHN: 2 ;(#PT-1)SMOOTH 13 DEC R3 BNE DESMO7 ;NOT DONE YET! MOV (SP)+,R0 ;RESTORE OPTION # RTS PC ;---DESM10--- ;THIS ROUTINE AVERAGES 2 CONSEC7600,0 ;C1 (F.P. -.25) 37600,0 ;C0 (F.P. .25) ;TBLS & TAGS DESMTB: 0 ;ADDR OF 'DESM3P' REL TO ITSELF DESMNP-DESM3P UTIVE DATUMS FROM B1 AND STORES ;THE RESULT IN DECMD1+4 AND DECMD1+6 DESM10: CLR -(SP) MOV #40000,-(SP) ;PUT F.P. 1/2 ON S;ADDR OF 'DESMNP' REL TO 'DESM3P' DESMHN-DESM3P ;ADDR OF 'DESMHN' REL TO 'DESM3P' DESMHN-DESM3P ; " " " " " TACK JSR R5,@#DEGET DECMD ;GET DATUM FROM B1 INC R0 JSR R5,@#DEGET DECMD ;GET NXT DATUM FROM B1 JSR R4,@#$POLSH " DESMRG: 0,0,0,0,0,0,0,0,0,0 ;RING BUFFR .ENDC $ADR,$MLR,.+2 MOV (SP)+,@#DECMD1+4 MOV (SP)+,@#DECMD1+6 ;PUT AVE VAL AWAY FOR MINUTE RTS PC ;---DESM20--- ;(1)THIS ROUTINE GETS NXT SMOOTHED PT FROM RING BUFR (VIA R5) ;AND PUTS RESULT INTO B2 (R0 IS SET OK) ;(2) PUT THAT LAST SMOOTHED VALUE (WAITING IN DECMD1+4 & DECMD1+6) ;INTO OPEN SLOT OF RING BUFR (VIA R5+) ;(3) DO AN E.O. RING BUFR CHK DESM20: MOV 2(R5),-(S4 MOV @#DECMD1+10,R2 MOV @#DECMD1+4,R0 ;RESTORE R0 & R2 & R4 TST R4 ;FINISHED SMOOTHING CURRENT PT? BEQ DESMO5 ;YES P) MOV (R5),-(SP) ;GET NXT SMO PT FROM RING BUFR JSR R5,@#DEPUT DECMD+2 ;PUT VAL IN B2 MOV @#DECMD1+4,(R5)+ MOV @#DEDEC R4 SUB R4,R0 ;R0=R0-R4 BR DESMO4 DESMO5: MOV (SP)+,@#DECMD1+4 MOV (SP)+,@#DECMD1+6 ;SAV 'SMOOTHED VAL' FOR MINUTE CMD1+6,(R5)+ ;PUT LAST SMO VAL IN OPEN SLOT MOV @#DECMD1,R1 ;PTR TO WD0 OF COEFF TBL =R1 MOV (R1),R1 ;R1=WD0 OF TBL (#PTSMJSR PC,@#RSTARG ;RESTORE R0-R5 JSR PC,DESM20 ;COMMON ROUTINE TO PUT PT AWAY DEC R3 ;SMOOTH IS DONE? BNE DESMO3 ;NO ;LO-1) ASL R1 ;R1=2*WD0 OF TBL ADD @#DECMD1+2,R1 ;R1=E.O. RING BUFR+2 CMP R5,R1 ;E.O.RING BUFR YET? BMI DESM21 ;NO MOAST (#PTSMO-1)/2 CANNOT BE SMOOTHED MOV @#DECMD1,R3 ;YES MOV (R3),R3 ASR R3 ;R3=(#PTSMO-1)/2 MOV R3,R4 DESMO6: JSR PV @#DECMD1+2,R5 ;YES--R5 PTS TO WD0 OF RING BUFR DESM21: RTS PC ;TABLES OF COEFFICIENTS FOR VARIOUS TYPES OF SMOOTHING ;3 PTC,@#SAVARG ;SAV R0-R5 ADD R4,R0 JSR PC,DESM10 ;COMMON ROUTINE TO DO AVERAGING JSR PC,@#RSTARG ;RESTORE R0-R5 INC R0 JS SMOOTH DESM3P: 2 ;(#PT-1)SMOOTH 37600,0 ;C1(F.P. .25) 37600,0 ;C0(F.P. .25) ;5 PT SMOOTH (ALSO USED FOR 7,9,11 PR PC,DESM20 ;COMMON ROUTINE TO PUT PT AWAY DEC R3 BNE DESMO6 ;NOT DONE YET! ;PUT THE LAST (#PTSMO-1)/2 OF RING BUFR INTOT SMOOTHS) DESMNP: 4 ;N=(#PT-1)SMOOTH 137257,101573 ;C(N/2) (F.P. -0.0857) 37657,110227 ;C(N/2)-1 (F.P. .3429) 37570SOFTWARE, OR ANY OTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON? BEQ DEOPN0 ;NO MOV #56.,R0 ;YES BR DEOPN4 DEOPN0: JSR PC,@#DEGTOF ;TURN GT40 OFF! .ENDC JSR R5,@#FORMAT ;ISSUE CR SUCH SYSTEM AND TO ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN LF BEFORE CALLING 'CSI' .BYTE CRLFC0,EXIT .EVEN MOV SP,R1 DEOPN1: .CSIGEN DEFREE,#DEFEXT ;FROM TERMINAL MOV R0,DEFREE ;IN DEC. ;THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENTR0 PTS TO FREE CORE AREA MOV R1,SP INC FLGOPN ;SET FLG WHEN FILES ARE OPEN ;TIME TO CLEAR DATA EDITOR I/O INFORMATION TA BY DIGITAL EQUIPMENT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WBLE MOV #OFILE,R0 ;R0=ADDR OF I/O INFO TABLE MOV #9.,R1 ;R1=9 SETS OF INFO (9 POSSIBLE FILES) CLR R2 ;CHANNEL CTR (EVEHICH IS NOT SUPPLIED BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; CARL RALSTON ;ASSEMBLY PARAMETER: GT40$ IF DEFINED WILL AN BYTE) DEOPN2: MOV #177777,(R0)+ ;1ST WD OF SET (CURR. REL. FILE BLK.) MOV R2,(R0)+ ;2ND WD OF SET (CURR. PT. & CHAN #) INSSEMBLE CODE FOR GT40 ;VR14$ IF DF WILL ASSEMBLE CODE FOR VR14 ;THIS MODULE IS USED ONLY WITH RT-11 CRLFC0=3 EXIT=0 DEEC R2 DEC R1 ;ALL NINE SETS ARE CLEARED YET? BNE DEOPN2 ;NO RTS PC ;YES DEFEXT: .RAD50 /DATDATDATDAT/ ;ERROR DEOPRWD=52 ;RT-11 EMT ERROR CODE LOC .GLOBL DEOPN,DEINP,DEOUT,DEREW,DECLO,DEFLG1,FORMAT .GLOBL FLGOPN,DEFREE,DEFORE,OFILE,DEBTN3: MOV #30.,R0 ;ERR--FILES ARE STILL OPEN DEOPN4: TST (SP)+ ;GET NORMAL RETN OFF STACK JMP @#DEFORE ;---MCL(OSE)--- ;THOP,QA,DETLE .GLOBL QAANS,IFILE,DECMD,DEDATA,IFIX,QAERR,MULT .GLOBL DECMD1 .IF DF GT40$ .GLOBL GTRCAL,DEGTOF,DEDBCB .ENDCIS ROUTINE CLOSES ALL OUTPUT FILES THAT WERE WRITTEN INTO. ; OUTPUT FILES OPENED, BUT NEVER WRITTEN INTO ARE DELETED ;ALL INPU ;ROUTINES CALLED DEFORE,QA,IFIX,MULT,FORMAT,DEFLCK,DETLE .MCALL .CSIGEN,.CLOSE,.SRESET,.REGDEF,..V1.. .REGDEF ..V1.. T FILES ARE CLOSED. RT-11 IGNORES ANY CHANNELS NOT OPENED ;ALL NON-RESIDENT HANDLERS ARE RELEASED FROM CORE ; AND ALL TENTATI ;---MOP(EN)--- ;THIS ROUTINE CHECKS TO SEE IF ANY RT-11 FILES ARE OPEN ;IF ANY ARE OPEN, AN ERR IS OUTPUT FOLLOWED BY A RETUVE FILES ARE DELETED DECLO: JSR PC,@#DETLE ;CHK ANY CMD STRING EXCESSES TST @#OFILE ;1ST OUTPUT FILE ACCESSED? BMI DECLO.TITLE SPOV5 ;LAB APPLICATIONS-11 OPEN,INPUT,OUTPUT,REWIND,CLOSE ;DEC-11-SLABA-C-LA19 ;FILE ID SPOV5.1 ;FILE: SPOV5.MAC .CSRN ; TO THE DATA EDITOR (#) ;IF NONE ARE OPEN, THE GENERAL MODE OF THE CSI IS CALLED ; TO ENABLE THE USER TO ENTER HIS FILEECT SPOV5 ;COPYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICS ; LIMIT IS 3 OUTPUT FILES AND 6 INPUT FILES ;ALL RT-11 HANDLERS WILL IMMEDIATELY FOLLOW THE CORE BUFRS DEOPN: JSR PC,@#DENSE FOR USE ONLY ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS ETLE ;CHK ANY CMD STRING EXCESSES TST FLGOPN ;ANY FILES OPEN BNE DEOPN3 ;YES .IFDF GT40$ TSTB @#DEFLG1 ;ANY DISPLAY UP1 .CLOSE 0 ;YES, CLOSE IT DECLO1: TST @#OFILE+4 ;2ND ONE? BMI DECLO2 .CLOSE 1 ;YES, CLOSE IT DECLO2: TST @#OFILE+10 ;3ETC OUTPUT OR INPUT FILE ; R1=INDEX FOR B, R2=DNCTR, R4=PTR TO CORRECT ENTRY OF I/O TBL ; R5=ADDR OF BUFR B DEINP: JSR PCRD ONE? BMI DECLO3 .CLOSE 2 ;YES CLOSE IT DECLO3: .CLOSE 3 ;CLOSE ANY INPUT FILES WHICH .CLOSE 4 ;MAY BE OPEN .CLOSE,DEIOA ;ON RETURN R1,R2,R4 ARE SET UP JSR PC,DEFILE ;GET FILE# & PUT PTR IN R4 TSTB 3(R4) ;CURR PT OF CURR BLK=0? BNE DEI 5 .CLOSE 6 .CLOSE 7 .CLOSE 10 .SRESET ;RELEASE HANDLERS & DELETE TENTATIVE FILES ;NOW DO SOME HOUSEKEEPING MOVNP1 ;NO INC (R4) ;YES, INC REL. BLK DEINP1: JSR PC,DEIOB ;CHK IF NEED TO UPDATE REL. BLK ;AND CURR. PT ANY FURTHER J @#DEBTOP,@#DEFREE ;RESET FREE CORE TO 'BUFR TOP' CLR @#DEFLG1 ;CLR FR CUR FLG & DISPLY INACTIVE CLR FLGOPN ;SIGNALS NO FILSR PC,DESETB ;GET ADDR OF 'B' INTO R5 ;DETERMINE WHICH '.READW' TO DO DEINP2: JSR PC,DEREAD ;DO .READW BCC DEINP4 ;READES ARE OPEN .IF DF GT40$ INCB @#GTRCAL ;SET GT40 RECALCULATION FLAG JSR PC,@#DEGTOF .IFDF RT11$ MOV @#DEDBCB,R0 ;REMOV WAS SUCCESSFUL TST DEERWD ;RT-11 ERROR - WAS IT EOF? BNE DEINPE ;NO (FILE ERROR) DEINP3: MOV @#DECMD,@#DECMD+2 ;YES, FINE GT40 DISPLAY BUFFER .REMOV .ENDC .ENDC RTS PC ;---MRE(WIND) FILE#--- ;THIS ROUTINE RESETS CURR. PT=0 AND REL. BLK=ISHED THIS CMD EARLY JSR PC,@#DEFLCK ;POSSIBLY JUST READ INTO A F.P.BUFR RTS PC DEINP4: TSTB @#DECMD+1 ;B IS A S.P. BUFR? -1 ;FOR THE FILE SPECIFIED VIA FILE# ;FILE# IS SPECIF AS O1,O2,O3 OR I1,I2,I3,I4,I5,I6 DEREW: JSR PC,DEFILE ;GET PTR TO C BEQ DEINP5 ;YES JSR PC,DETRIN ;NO (F.P) CALL TRANSFER-IN-ROUTN DEINP5: JSR PC,DETRIN ;CALL TRANSF-IN-ROUTN DEC R2 ;TRANSORRECT I/O TBL ENTRY MOV #177777,(R4) ;REL. BLK TO RESET TO (-1) CLRB 3(R4) ;CURR. PT IS RESET TO 0 RTS PC ;---MIN(PUT)FR TO B IS COMPLETE YET? BEQ DEINP3 ;YES JOB IS DONE TSTB 3(R4) ;TRANSF. BUFR IS EMPTY? BNE DEINP4 ;NO INC (R4) ;YES B #PTS FILE-POSITION BUF-POSITION FILE#--- ;'BUF-POSITION' IS THE NUMBERED POSITION WITHIN DATA BUFFER, B ; WHERE THE INPUT INCR REL. BLK BR DEINP2 ;DO ANOTHER .READW ;ERROR DEINPE: MOV #31.,R0 ;BAD FILENAME OR DEVICE TST (SP)+ ;GET NORMADATA WILL BEGIN. 1 IS THE 1ST VALUE IN B. ; (DEFAULT=START OF B) ;'FILE-POSITION' SPECIFIES THE NUMBER OF POINTS TO SKIP OVERL RTN OFF STACK JMP @#DEFORE ;---MOU(TPUT) B #PTS FILE-POSITION BUF-POSITION FILE#--- ;SEE EXPLANATION OF ---INPUT--- AND R ; IN AN INPUT FILE (STARTING FROM THE LAST ACCESSED) ; POINT OF THE FILE) BEFORE BEGINNING TRANSFER (DEFAULT=0) ;'#PTS' SPEPLACE THE WORDS ;'INPUT DATA' WITH 'OUTPUT DATA', & 'READ INTO' WITH 'WRITE TO' ;R1=INDEX FOR B, R2=DNCTR, R4=PTR TO CORRECT ECIFIES THE NUMBER OF POINTS TO READ INTO B. ; (DEFAULT=SIZE OF BUFFER B) ;'FILE#' SPECIFIES WHICH RT-11 FILE, OPENED VIA THEENTRY OF I/O TBL DEOUT: JSR PC,DEIOA ;ON RETN R1,R2,R4 ARE SET UP JSR PC,DEFILE TST (R4) ;A BLK WAS WRITTEN OUT ALREADY? 'OPEN' COMMAND ; IS TO BE USED IN THE TRANSFER ; FORMAT IS I# OR O#, WHERE # IS 1,2,3,... AND ; REPRESENTS THE 1ST, 2ND, BMI DEOUT1 ;NO WE ARE JUST STARTING TSTB 3(R4) ;YES - BLK WRITTEN WAS FULL? BEQ DEOUT2 ;YES JSR PC,DEREAD ;NO, DO A DECMD1 DEIO2: MOV R0,@#DECMD+4 ;TEMP STORAGE FOR # PTS ;SET UP # PTS TO READ IN CMP #177777,@#DECMD1+4 ;# SKPS SPECIF?FR' (VIA CURR. PT) AND PUTS IT ;INTO BUFFER 'B' (VIA R1) DETRIN: CLR (PC)+ DEINOT: 0 ;TEMP LOC MOVB 3(R4),DEINOT ;GET C BNE DEIO3 ;YES CLR R0 ;NO DEFAULT = 0 BR DEIO4 DEIO3: JSR R5,@#IFIX BR DEIO4 DECMD1+4 DEIO4: MOV R0,@#DECMD+2 ;TEURR. PT. ASL DEINOT ;MAKE VALUE 'WORD' CONSCIOUS ADD #DEBUTR,DEINOT ;ADD BASE ADDR OF TRANSF. BUFR. MOV @DEINOT,-(SP) ;PUMP STORAGE FOR # SKPS ;SET UP BUF-POSITION CMP #177777,@#DECMD1+10 ;BUF-POSITIOM SPECIF? BNE DEIO5 ;YES CLR R0 ;NO T DATUM FROM TR.BUF ON STACK MOV R5,R0 ;GET ADDR OF 'B' ADD R1,R0 ;R0=INDEXED ADDR OF 'B' MOV (SP)+,(R0) ;GET DATUM FROM READ INTO TRANSF BUFR BCS DEOUT7 ;READ WAS NOT SUCCESSFUL (ERROR) BR DEOUT2 DEOUT1: INC (R4) ;INC REL. BLK # DEOUT2: JSDEFAULT=0 BR DEIO7 DEIO5: JSR R5,@#IFIX BR DEIO6 DECMD1+10 DEIO6: DEC R0 ;POSITION # -1 BMI DEIOE3 ;BUF POS =0 DEIOR PC,DEIOB JSR PC,DESETB ;GET ADDR OF 'B' INTO R5 ;TIME TO DO TRANSFER DEOUT3: TSTB @#DECMD+1 ;B IS A S.P. BUFR? BEQ D7: MOV R0,R1 ;R1=INDEX FOR BUFR 'B' MOV @#DECMD+4,R2 ;R2=DNCTR (# PTS TO TRANSF) MOV @#DECMD+2,R3 ;R3=# SKPS ;(POSITION EOUT4 ;YES JSR PC,DETROT ;NO - F.P. CALL TRANSF-OUT-ROUTN DEOUT4: JSR PC,DETROT ;CALL TRANSF-OUT-ROUTN TSTB 3(R4) ;TRANSF-1)+(#PTS)<=BUFSIZ MUST HOLD TRUE MOV R1,R4 ADD R2,R4 CMP R4,@#DEDATA+2 BHI DEIOE1 ;FMT ERR (ARGS ARE CONTRARY) ;C BUFR FULL (CURR PT=0) BNE DEOUT5 ;NO JSR PC,DEWRT ;DO CORRECT .WRITW BCS DEOUT7 INC (R4) ;INC REL BLK DEOUT5: DEC R2HECK IF B IS F.P. BUFFER TSTB @#DECMD+1 BEQ DEIO7A ;S.P. ASL R3 ;F.P. - DBL # SKPS ASL R1 ; DBL INDEX PTR VALUE DE ;TRANSF IS COMPLETE? BNE DEOUT3 ;NO TSTB 3(R4) ;YES - TRANS. BUFR JUST WRITTEN? (CURR PT=0) BEQ DEOUT6 ;YES JSR PC,IO7A: ASL R1 ;MAKE INDEX PTR 'WORD CONSCIOUS' RTS PC DEIOE3: MOV #11.,R0 ;BUF POS <1 BR DEIOE4 DEIOE1: MOV #12.,R0 ;(DEWRT ;NO BCS DEOUT7 DEOUT6: RTS PC ;ERRORS DEOUT7: TST DEERWD ;RT/11 ERROR - WAS IT EOF? BNE DEOUT8 ;NO MOV #32.,RBUF-POSITION)+(#PTS) EXCEED BUFSIZ DEIOE4: CMP (SP)+,(SP)+ ;POP 2 RETURNS OFF STACK JMP @#DEFORE ;---INOUTB--- ;THIS ROUT0 ;YES BR DEOUT9 DEOUT8: MOV #31.,R0 ;FILE NOT OPEN OR HARDWARE ERROR DEOUT9: TST (SP)+ ;GET NORMAL RETURN OFF STACK JMINE CHECKS TO SEE IF THE # OF SKPS + CURR PT ; WITHIN THE CURR REL BLK, WOULD NECESSITATE ; UPDATING THE REL. BLK # AND CONSP @#DEFORE ;---INOUTA-- ;THIS ROUTINE PROCESSES ALL ARGUMENTS ENTERED VIA THE ;'INPUT' OR 'OUTPUT' COMMAND. EXCEPT FILE# EQUENCTLY THE ; CURRENT PT. DEIOB: CLR DEIOBB MOVB 3(R4),DEIOBB ;GET CURR. PT. # ADD R3,DEIOBB ;CURR. PT + #SKPS = DEI;SETUP # SKPS FOR FILE (FILE POSITION) DEIOA: JSR R5,DEEOL ;CHK EXCESS BUFRS/CONSTANTS .BYTE 2,14 CMP #177777,@#DECMD1 ;#O10: CMP #400,(PC)+ DEIOBB: 0 ;TEMP LOC BHI DEIO11 INC (R4) ;INC REL. BLK NUMBER SUB #400,DEIOBB BR DEIO10 DEIO11: PTS SPECIF? BNE DEIO1 ;YES MOV @#DEDATA+2,R0 ;NO DEFAULT = BUFSIZ BR DEIO2 DEIO1: JSR R5,@#IFIX ;FIX # SKPS BR DEIO2 MOVB DEIOBB,3(R4) ;RESET CURR. PT. # RTS PC ;---DETRIN--- ;THIS ROUTINE GETS ONE WD OF DATA FROM THE ;TRANSFER BUFFR 'DEBUR5 ;# -1 ASL R5 ;2BYTES/WD TSTB @#DECMD+1 ;'B' IS F.P. BEQ DESET1 ;NO S.P. ASL R5 ;YES F.P. MOV @#DEDATA+12,R3 ;AD MOVB 2(R4),@R0 ;INSERT CHANNEL # EMT 375 ;.READW & .WRITW ARE SAME EMT RTS PC ARGAR: .BYTE 0,0 ;CHANNEL # & CODE, UPDDR OF 1ST F.P. BUFR BR DESET2 DESET1: MOV @#DEDATA+6,R3 ;ADDR OF 1ST S.P. BUFR DESET2: MOV @#DEDATA+2,R0 ;BUFSIZE JSR PC,@ATED 0 ;RELATIVE BLOCK #, UPDATED DEBUTR ;BUFFER ADDR 400 ;WORD COUNT 0 ;MUST BE 0 ;TRANSFER BUFFER IS LOCATE#MULT ;R5 WILL HOLD FINAL PRODUCT ADD R3,R5 ;R5 NOW=START ADDR. RTS PC ;---DEFILE--- ;THIS ROUTINE GETS FILE # ENTERED VD HERE! DEBUTR: .BLKW 400 ;400 WD BUFR GOES HERE IA 'INPUT' OR 'OUTPUT' ;OR 'REWIND' CMD. IT SETS A PTR TO CORRESP. I/O-INFO-TBL ;ENTRY AND RETURNS PTR IN R4 DEFILE: JSR R5,QA 400+100 ;SILENT QUEST + MIX MODE + DEIOAD ;CMD LIST ADDR TSTB @#QAERR BNE DEIOE2 ;FMT ERR (BAD FILE #) MOV @#QAANS,R4 ;GET # (1-3) OR (1-6) DEC R4 BMI DEIOE2 ;FMT ERR (FILE #<1) ASL R4 ASL R4 TST R0 ;I OR O SPECIF? BNE DEI STACK & PUT INTO 'B' INCB 3(R4) ;BMP CURR. PT ADD #2,R1 ;BMP 'B' PTR BY 1 WORD RTS PC ;---DETROT--- ;THIS ROUTINE GO8 ;I WAS SPECIF TO 'QA' CMP R4,#10 ;O WAS SPECIF TO 'QA' BHI DEIOE2 ;FMT ERR (OFILE #>3) ADD #OFILE,R4 ;R4 IS PTR TO IETS ONE WD OF DATA FROM THE BUFFR 'B' (VIA) R1) ;AND PUTS IT INTO THE TRANSF BUFFR 'DEBUFR' (VIA CURR. PT) DETROT: MOV R5,R0/O INFO TBL BR DEIO9 DEIO8: CMP R4,#24 BHI DEIOE1 ;FMT ERR (IFILE #>6) ADD #IFILE,R4 ;R4 IS PTR TO I/O INFO TBL DEIO9: ;PUT ADDR OF 'B' ON STACK ADD R1,R0 ;ADD INDEXED VALUE MOV (R0),-(SP) ;PUT DATUM FROM 'B' ON STACK CLR DEINOT MOVB 3(JSR PC,@#DETLE ;CHK ANY CMD STRING EXCESSES RTS PC ;COMMON EXIT ;ERRORS DEIOE2: MOV #31.,R0 ;FILE NOT OPEN CMP (SP)+R4),DEINOT ;GET CURR PT ASL DEINOT ;MAKE IT 'WORD' CONSCIOUS ADD #DEBUTR,DEINOT ;ADD IN BASE ADDR OF TRANSF. BUFR. MOV (S,(SP)+ ;POP 2 RETURNS OFF STACK JMP @#DEFORE ;CMD LIST FOR QA DEIOAD: .BYTE 3,1 .BYTE 'O,'I,'0 ;R0=0 (O) ;R0=1 (I) .P)+,@DEINOT INCB 3(R4) ADD #2,R1 RTS PC ;---DESETB--- ;THIS ROUTINE CALCULATES THE ADDR OF BUFFER 'B' AND ;RETURNS ADEVEN ;SUBROUTINE TO DO .READW OR .WRITW ;THE CHANNEL NUMBER AND RELATIVE BLOCK NUMBER ARE ;POINTED TO BY R4. ;THIS UPDATES DR IN R5 ;ALGORITHM: GET (#-1) OF 'B' ;MULT BY 2 IF 'B' IS S.P.; ; MULT BY 4 IF 'B' IS F.P. ; MULT BY BUFFER SIZE OF 'B'; THE PROGRAM REQUEST AREA FOR RT-11 .ENABLE LSB DEWRT: MOV #11*400,-(SP) ;CODE FOR .WRITW BR 2$ DEREAD: MOV #10*400,-(SP); ADD RESULTANT PRODUCT TO STARTING ADDR OF ; S.P. OF F.P. BUFFERS WHICHEVER APPLIES DESETB: MOVB @#DECMD,R5 ;GET # DEC ;CODE FOR .READW 2$: MOV #ARGAR+2,R0 ;R0 => ARGMENT AREA MOV @R4,@R0 ;REL. BLK # MOV (SP)+,-(R0) ;CODE FOR READ OR WRITE TO ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THE : .ASCII /ERR-SPECIFY DIFFERENT BUFR TYPES/ .BYTE 0 DEM2: .ASCII /ERR-SPECIFY A BUFR/ .BYTE 0 DEM3: .ASCII /ERR-SPECIFY A INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQUIBUFR SIZE>0/ .BYTE 0 DEM4: .ASCII /ERR-YOU HAVE NO DISPLAY-SPECIFY A BUFR/ .BYTE 0 DEM5: .ASCII /ERR-TOTAL BUFR NEEDS EXCEPMENT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPED FREE CORE/ .BYTE 0 DEM6: .ASCII /ERR-DDI CMD NEEDED PRIOR TO FULL-MODE/ .BYTE 0 DEM7: .ASCII /ERR-BUFR MUST BE SNGL PRELIED BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; CARL RALSTON ;---DERROR--- ;THIS COMMON ERROR ROUTINE IS CALLED BY THE DC/ .BYTE 0 DEM8: .ASCII /ERR-SPECIFY DEV & SU IN ORDER/ .BYTE 0 DEM9: .ASCII /ERR-ILLEGAL DEV ( OR SU SWITCH )/ .BYTE 0 ATA EDITOR WITH THE ;# OF THE ERROR-MESSAGE-TO-BE-OUTPUT IN R0 (NEG,1,2,3...) ;DEFINITIONS R0=%0 R5=%5 PC=%7 CRLFC0=3 DEM10: .ASCII /ERR-SPECIFY BOTH L & H/ .BYTE 0 DEM11: .ASCII /ERR-BUFPOSITION MUST BE >= 1/ .BYTE 0 DEM12: .ASCII /ERR-BU TEXT=7 TEXTA=10 SINGL=12 EXIT=0 .GLOBL DERROR,FORMAT,FORMAA,TTYOCH DERROR: CLRB @#TTYOCH ;ALWAYS OUTPUT ERROR TO TTY FPOSITION + #PTS > BUFR SIZE +1/ .BYTE 0 DEM13: .ASCII /ERR-BAD DATA VALUE/ .BYTE 0 DEM14: .ASCII /ERR-E.O.PAPERTAPE/ .B TST R0 ;FPMP ERROR? BPL DERR0 ;NO! NEG R0 ;GET SET TO OUTPUT FPMP'S # MOVB R0,DERRE ;ERROR CLASS SWAB R0 MOVB R0,DYTE 0 DEM15: .ASCII /ERR-ILLEGAL OPTION NAME/ .BYTE 0 DEM16: .ASCII /ERR-OPTION 'O' NOT ALLOWED NOW/ .BYTE 0 DEM17: .ASCIERREE ;ERROR # JSR R5,@#FORMAT .BYTE CRLFC0,TEXT .ASCII /ERR-NUMERICAL-FPMP= / .BYTE 0,SINGL,200 .EVEN DERRE: 0 ;HOI /ERR-START CANNOT BE < 1/ .BYTE 0 DEM18: .ASCII /ERR-WINDOW CANNOT BE < 1/ .BYTE 0 DEM19: .ASCII /ERR-START + WINDOW > BLDS ERROR CLASS OF FPMP ERROR .BYTE TEXT .ASCII /,/ .BYTE 0,SINGL,200 .EVEN DERREE: 0 ;HOLDS ERROR # OF FPMP ERROR UFR SIZE + 1/ .BYTE 0 DEM20: .ASCII /ERR-WINDOW > SCOPE SIZE/ .BYTE 0 DEM21: .ASCII /ERR-ASSIGN A SNGL PREC BUFR/ .BYTE .TITLE SPOV6 ;LAB APPLICATIONS-11 ERROR MESSAGES ;DEC-11-SLABA-C-LA20 ;FILE ID SPOV6.1 ;FILE: SPOV6.MAC .CSECT SPOV6 ;CO.BYTE EXIT .EVEN RTS PC DERR0: .IFNDF SPERR$ MOV R0,DERR1 JSR R5,@#FORMAT .BYTE CRLFC0,TEXT .ASCII /E/ .BYTE 0,PYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLSINGL,200 .EVEN DERR1: 0 .BYTE EXIT .EVEN RTS PC .ENDC .IFDF SPERR$ DEC R0 ASL R0 ;COMPUTE ADDR OF ERROR MESSY ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANYAGE ADD #DEMESS,R0 MOV (R0),DERRAD ;SAV IT AWAY FOR 'FORMAA' MOV #DERR,R0 ;ADDR USED BY 'FORMAA' JSR PC,@#FORMAA RTS OTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND PC DERR: .BYTE TEXTA .EVEN DERRAD: 0 ;ADDR OF MESSAGE PUT HERE 0 ;EXIT .IFDF RT11$ .NLIST BEX .ENDC DEM1BUFR SIZE MUST BE > 4 PTS/ .BYTE 0 DEM25: .ASCII /ERR-FREE CURSORS HAVE SAME X-POSITION/ .BYTE 0 DEM26: .ASCII /ERR-FIX CUX FILES OPEN/ .BYTE 0 DEM56: .ASCII *ERR-I/O CONFLICT* .BYTE 0 .EVEN .IFDF RT11$ .LIST BEX .ENDC DEMESS: DEM1,DERSORS NOT UP/ .BYTE 0 DEM27: .ASCII /ERR-FREE CURSORS NOT UP/ .BYTE 0 DEM28: .ASCII /ERR-SPECIFIED BUFRS CANNOT BE CONTIGUM2,DEM3,DEM4,DEM5,DEM6,DEM7,DEM8,DEM9 DEM10,DEM11,DEM12,DEM13,DEM14,DEM15,DEM16,DEM17,DEM18,DEM19 DEM20,DEM21,DEM22,DEM23,DEOUS/ .BYTE 0 DEM29: .ASCII /ERR-INSUFFICIENT BUFR SPACE/ .BYTE 0 DEM30: .ASCII /ERR-FILE(S) STILL OPEN/ .BYTE 0 DEM31: M24,DEM25,DEM26,DEM27,DEM28,DEM29 DEM30,DEM31,DEM32,DEM33,DEM34,DEM35,DEM36,DEM37,DEM38,DEM39 DEM40,DEM41,DEM42,DEM43,DEM44,.ASCII /ERR-FILE NOT OPEN OR HARDWARE ERROR/ .BYTE 0 DEM32: .ASCII /ERR-E.O.FILE/ .BYTE 0 DEM33: .ASCII /ERR-DUAL DISPLAY DEM45,DEM46,DEM47,DEM48,DEM49 DEM50,DEM51,DEM52,DEM53,DEM54,DEM55,DEM56 .ENDC .END NEEDED/ .BYTE 0 DEM34: .ASCII /ERR-BUFR IS NOT DISPLAYED/ .BYTE 0 DEM35: .ASCII /ERR-BOTH CURVES NEED SAME CURSOR STATUS/ .TITLE SPOV7 ;LAB APPLICATIONS-11 DATA DEFINE COMMAND ;DEC-11-SLABA-C-LA21 ;FILE NAME SPOV7.MAC ;FILE ID SPOV7.1 .CSECT SPO .BYTE 0 DEM36: .ASCII /ERR-BUFR TYPE IS NOT SNGL PREC/ .BYTE 0 DEM37: .ASCII /ERR-BUFR SIZE MUST BE A POWER OF 2/ .BYTE V7 ;COPYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FO0 DEM38: .ASCII /ERR-BUFR SIZE IS < 8/ .BYTE 0 DEM39: .ASCII /ERR-BUFR SIZE IS > PROGRAM LIMIT/ .BYTE 0 DEM40: .ASCII /ERR USE ONLY ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARR-BAD CMD NAME/ .BYTE 0 DEM41: .ASCII /ERR-SPECIFY A NUMBER/ .BYTE 0 DEM42: .ASCII /ERR-INCORRECT CMD FMT/ .BYTE 0 DEM4E, OR ANY OTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH S3: .ASCII /ERR-BAD DELAY VALUE/ .BYTE 0 DEM44: .ASCII /ERR-BAD CLOCK RATE/ .BYTE 0 DEM45: .ASCII /ERR-BAD BUFR TYPE/ .BYYSTEM AND TO ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC.TE 0 DEM46: .ASCII /ERR-INCORRECT FMT OF INPUT DATA/ .BYTE 0 DEM47: .ASCII /ERR-NONEXISTENT BUFR/ .BYTE 0 DEM48: .ASCII / ;THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGERR-NONEXISTENT HARDWARE/ .BYTE 0 DEM49: .ASCII /ERR-127 BUFRS OF ONE TYPE IS MAX/ .BYTE 0 DEM50: .ASCII /ERR-#PTS + #SKPSITAL EQUIPMENT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS > BUFR SIZE/ .BYTE 0 DEM51: .ASCII /ERR-SPECIFY 4 BUFRS/ .BYTE 0 DEM52: .ASCII /ERR-TOO MANY BUFRS SPECIFIED/ .BYTE 0 NOT SUPPLIED BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; CARL RALSTON ;BDD [P] OR [A] ;BUFFER DEFINE DATA COMMAND ;RE0 DEM22: .ASCII /ERR-NO ROOM FOR DISPLAY BUFR/ .BYTE 0 DEM23: .ASCII /ERR-SPECIFY A 2ND BUFR/ .BYTE 0 DEM24: .ASCII /ERR-DEM53: .ASCII /ERR-UNNECESSARY CONSTANT SPECIFIED/ .BYTE 0 DEM54: .ASCII /ERR-E.O. CASSETTE/ .BYTE 0 DEM55: .ASCII /ERR-MAR R2 CMPB #3,DEFLG1 BNE DEDEF4 MOV DEOFYD,R2 ASR R1 ASR R0 DEDEF4: MOV R0,@#DEDI2S+1 ;STORE Y OFFSET IN ADD R2,R0 TTOM ;ID WILL GO WHERE THE RIGHT FREE CURSOR IS. DEID: COMB @#DEGIDF ;TEST TO PUT ID UP OR DOWN BNE DEID1 MOV #DEGIDX,@# MOV R0,@#DEDI1S+1 ;DISPLAY TABLE MOV R1,-(SP) JSR R4,@#$POLSH $IR,.+2 MOV (SP)+,@#DENORM ;STORE F.P. DENORM MOV (SP)+DEGCID-2 ;TAKE ID DOWN AND RTS PC ;FLAG IS 0. DEID1: MOV #DEIDT1,R3 ;GET TOP OR SINGLE PARAMETER ;TABLE. MOV @#DEDYGISTER DEFINITION R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 PC=%7 SP=%6 .IFDF SPBDD$ ;ASSEMBLY PARAMETER ;GT40$=1 ;,@#DENORM+2 RTS PC DEDEFT: .BYTE 3,1,'A,'P,0 .EVEN .ENDC ;---DID--- ;DISPLAY CURVE ID ROUTINE - GT-40. ;TYPE OUT CUASSEMBLE CODE FOR GT40 ;VR14$ ;ASEMBLE CODE FOR VR14 ;DA$4 ;CODE FOR DUAL DISPLAY ;DA$10 ;CODE FOR FREE CURSOR VALUES ;DARVE ID - VR14 .IFDF SPDID$ .IFDF VR14$ .GLOBL DEID,DEFLG1,DEDIT1,DEDIT2,DEDID,DELST,FORMAT DEID: TSTB DEFLG1 ;AT LE$11 ;CODE OFR FIXED CURSOR VALUES ;SYMBOL DEFINITIONS QASIL=400 QAALP=20 QANULA=20000 EXIT=0 CRLFC0=3 TEXT=7 SINGL=AST 1 DISPLY IS UP? BEQ DEID1 ;NO, RTN THEN! MOV #DEDIT1,R3 ;TYPE OUT ID OF 1ST CURVE JSR PC,DEIDSU CMPB DEFLG1,#1 ;MO12 EXP=16 ;GLOBAL SYMBOLS .GLOBL QA,QADATF,DEFORE,DEOFY,DEDI1S,DEDI2S .GLOBL $POLSH,$IR,DENORM .GLOBL DEDEFD,DEOFYD,DEDRE THAN 1 DISPLY IS UP? BLOS DEID1 ;NO RTN THEN! MOV #DEDIT2,R3 ;TYPE OUT ID OF 2ND CURVE JSR PC,DEIDSU DEID1: RTS PC ATT,DEFLG1 ;THIS ROUTINE SETS THE DATA TYPE ;THE DISPLAY OFFSET AND DENORM, NORMALIZE ;CONSTANT ARE SET. ;IF POS DATA ONLY DEIDSU: MOV #DEDID+1,R1 ;FIND ID SLOT FOR THIS CURVE CMP R3,@#DELST BEQ DEID2 MOV #DEDID+3,R1 DEID2: MOVB #'S,DEID4 T, X AXIS IS AT 0 ON SCOPE ;OTHERWISE IN MIDDLE OF SCOPE ;AND THE DATA IS NORMALIZED TO TEST FULL SCOPE ;OR HALF SCOPE ;DEOFYSTB (R1) BEQ DEID3 MOVB #'F,DEID4 DEID3: MOVB -(R1),DEID5 JSR R5,FORMAT .BYTE TEXT DEID4: .BYTE 0,0 ;'S OR 'F; E.O. T CONTAINS THE HALF SCOPE OFFSET. ;---BDD---BUFFER DEFINE DATA---- ;CALL VIA BDD [POVA] ;P FOR POSITIVE ONLY DATA ;A FOR ALL-EXT .BYTE 12,200 ;OUTPUT "#" IN DEID5 IN S.P. FMT .EVEN DEID5: 0 ;ID VALUE TO OUTPUT .BYTE CRLFC0,EXIT .EVEN RTS PNEG & POS. DEDEFD: JSR R5,QA QASIL+QAALP+QANULA DEDEFT TSTB @#QADATF ;TEST FOR COMMAND BEQ DEDEF1 TST R0 ;TEST FORC .ENDC .IFDF GT40$ .GLOBL DEGIDF,DEGIDX,DEGCID,DEDYSZ,DEG2ID .GLOBL DEFLG1,DEDID,DELST,FORMAB,DEID,DEID1 .GLOBL DEGXL, P OR A BEQ DEDEF1 BPL DEDEF2 MOV #17,R0 TST (SP)+ JMP @#DEFORE ;POS VALUES ONLY DEDEF2: CLR R0 ;SET Y OFFSET TDEGYL,DEGXR,DEGYR,DEDIT1,DEDIT2 ;THIS ROUTINE IS USED TO PUT UP THE CURVE ID, FOR A ;SINGLE OR DUAL DISPLAY. THE FORMAT IS O 0 MOV #1,@#DEDATT MOV @#DEOFYD,R1 ;SET DENORM=FULL SCOPE ASL R1 BR DEDEF3 ;ALL NUMBERS AVAILABLE DEDEF1: MOV @#DSXXX OR FXXX. ;THE ID WILL GO IN RIGHT HAND CORNERS TOP AND ;BOTTOM, FOR DUAL DISPLAYS AND JUST TOP FOR A SINGLE ;DISPLAY. IEOFYD,R0 ;SET Y OFFSET TO HALF SCOPE MOV R0,R1 ;SET DENORM TO HALF SCOPE CLR @#DEDATT DEDEF3: DEC R1 MOV R0,@#DEOFY CLF THE FREE CURSOR WERE ON WHEN THE ;DID COMMAND WAS GIVEN THE SINGLE OR TOP ID WILL ;GO WHERE THE LEFT FREE CURSOR IS. THE BOSKIP CHAR. MODE WORD. MOV #DEDID+1,R1 ;FIND THE DEDID SLOT CMP (R3)+,@#DELST ;FOR THIS CURVE BEQ DEIDS3 MOV #DEDID+3,R1 R PC,DEDFRO JSR PC,RSTARG JSR PC,SAVARG MOV R4,DEFMK0 MOV R5,DEFMK0+2 ;GET YR VALUE JSR PC,DEFMCK MOVB DEFMK1,DEDFRB DEIDS3: MOV #'S,R2 ;STOR S OR F. TSTB (R1) BEQ DEIDS4 MOV #'F,R2 DEIDS4: MOVB R2,(R0)+ MOVB -(R1),DEIDON ;STORE CURVE MOVB #'Y,DEDFRA JSR PC,DEDFRO ;OUTPUT YR VALUE JSR PC,RSTARG DEDFR: RTS PC DEDFRO: JSR R5,FORMAT .BYTE TEXT,40 ;(A NUMBER IN MOV R0,R5 ;OUTF TABLE. MOVB #40,(R0)+ ;PUT SPACES IN DISPLAY MOV #20040,(R0) ;BUFFER MOV #DEIDCL,R0 ;ADDRESS BLANK) DEDFRA: .ASCII /XL / .BYTE 0 ;E.O.TEXT .BYTE EXP DEDFRB: .BYTE 0 ;# OF DEC PL (TO BE FILLED IN) .BYTE 7 ;#SIG OF OUTPUT BUFFER FROM JSR PC,FORMAB ;FORMAB IS IN R5, COMMAND ;TABLE ADDRESS IN R0. RTS PC ;ASCII NUMBER STORED IN .FIG .EVEN DEFMK0 ;ADDR OF DATUM TO OUTPUT .BYTE CRLFC0,EXIT .EVEN RTS PC .ENDC .ENDC .IFDF GT40$ .IFDF DA ;DISPLAY TABLE. DEIDCL: .BYTE 12,200 ;OUTPUT FORMAT TABLE .EVEN DEIDON: 0,0 DEIDT1: DEGCID+2,0,DEGXL,DEGYL,DEDIT1 ;$10 .GLOBL DEGCUF,DEGFCX,DEGFCL,DEFLG1,DEGXL,DEDYSZ,DEDFRC .GLOBL DEGYL,DGFCL1,DGFCL2,DGFCL3,DGFCL4,DE4POT ;THIS ROUTINE SZ,R0 ;CALCULATE TOP OF SCREEN. SUB #17,R0 MOV R0,DEIDT1+2 JSR PC,DEIDSU ;PUT UP ID. MOV #DEGIDX,DEG2ID-2 ;SET DISPLAY BTOP ID PARAMETERS DEIDT2: DEG2ID+2,10,DEGXR,DEGYR,DEDIT2 ;BOTTOM ID PARAMETERS .ENDC ;---DFV--- ;DISPLAY FREE CURSOR VALUFFER TO MOV #103400,DEG2ID+6 ;SET INTENSITY 6 CMPB #3,DEFLG1 ;SKIP DUAL ID. BEQ DEID3 ;TEST FOR DOV OR DSP CMPB #2,DEFUES. ;TYPE OUT FREE CURSOR VALUES - VR14 .IFDF VR14$ .IFDF DA$10 .GLOBL DEDFRC,DEDID,DECMD,SAVARG,RSTARG,$POLSH,$IR,FORMLG1 ;COMMANDS. BNE DEID2 MOV #102600,DEG2ID+6 ;SET INTENSITY 3 FOR DOV DEID3: MOV #DEG2ID,DEG2ID-2 ;DUAL DISPLAY, SET DISPLAT DEDFRC: MOV DEDID,DECMD ;IS THERE A DISPLY? BEQ DEDFR ;NO RTN THEN! JSR PC,DEFRCU ;YES TST R0 ;CURSORS UP? BMI AY ;BUFFER 2 ID'S. MOV #DEIDT2,R3 JSR PC,DEIDSU ;PUT UP ID. DEID2: MOV #DEGCID,DEGCID-2 ;HOOK ID'S INTO GT-40 ;DIDEDFR ;NO JSR PC,SAVARG MOV R0,-(SP) ;GET X-POSITION OF LF CURSOR JSR R4,$POLSH $IR,.+2 ;FLOAT IT MOV (SP)+,DEFMK0 SPLAY OF FREE CURSORS ;AND LINE. RTS PC ;ID DISPLAY SUBROUTINE DEIDSU: MOV (R3)+,R0 ;STORE ADDRESS IN DISPLAY BUFF MOV (SP)+,DEFMK0+2 ;SEND THRU MY FORMAT CHK JSR PC,DEFMCK MOVB DEFMK1,DEDFRB ;#DEC PL MOV #"XL,DEDFRA JSR PC,DEDFRO ;OER ;OF ID IN R0. TSTB DEFLG1+1 ;TEST FOR FREE CURSOR. BNE DEIDS1 MOV #01700,(R0)+ ;FREE CURSOR OFF STORE ID MOV (R3UTPUT XL VALUE JSR PC,RSTARG JSR PC,SAVARG MOV R2,DEFMK0 MOV R3,DEFMK0+2 ;GET YL VALUE JSR PC,DEFMCK MOVB DEFMK1,DED)+,(R0)+ ;IN DEFAULT POSITION. ADD #4,R3 BR DEIDS2 DEIDS1: TST (R3)+ ;MOVE R3 UP MOV @(R3)+,(R0) ;FREE CURSOR ON, STORFRB MOVB #'Y,DEDFRA JSR PC,DEDFRO ;OUTPUT YL VALUE JSR PC,RSTARG JSR PC,SAVARG MOV R1,-(SP) ;GET X-POSITION OF RT CURSE POSITION BIC #40000,(R0)+ ;CLEAR INTENSITY BIT MOV @(R3)+,(R0)+ ;OF FREE CURSOR IN ID DISPLAY TABLE. DEIDS2: TST (R0)+ ;OR JSR R4,$POLSH $IR,.+2 MOV (SP)+,DEFMK0 MOV (SP)+,DEFMK0+2 JSR PC,DEFMCK MOVB DEFMK1,DEDFRB MOV #"XR,DEDFRA JSGFCL2-10 DGFCL3-10 DGFCL4-10 .ENDC .ENDC ;---DCV--- ;DISPLAY FIX CURSOR VALUES ;TYPE OUT FIX CURSOR VALUES .IFDF,DEDFXC,DEDFX1 .GLOBL DEGCS1,DEGCS2,DEGCS3,DEGCS4 .IFDF DA$4 .GLOBL DEGCS5,DEGCS6,DEGCS7,DEGCS8,DEGCSB .ENDC ;THIS ROU VR14$ .IFDF DA$11 .GLOBL DEDFXC,DEDID,DECMD,DEGET,FORMAT,SAVARG,RSTARG DEDFXC: MOV DEDID,DECMD ;IS THERE A DISPLY? BETINE SETS UP THE DISPLAY POSITION OF THE ;FIX CURSORS DISPLAYED VALUES. DEDFXC: COMB DEGFXF ;TEST DISPLAY FLAG BNE DEDFX1Q DEDFX2 ;NO RTN! JSR PC,DEFXCU ;YES TST R4 ;CURSORS UP? BMI DEDFX1 ;NO JSR PC,DEDFC ;YES TYPE OUT VALUES DEDFX1: MO MOV #DEGCX,DEGCST-2 ;TURN DISPLAY OFF RTS PC DEDFX1: CLR DE4POT ;CLEAR POT SUM TSTB DEFLG1+1 ;TEST FOR FREE CURSOR V DEDID+2,DECMD ;IS THERE A 2ND DISPLY BEQ DEDFX2 ;NO JSR PC,DEFXCU ;YES TST R4 ;CURSORS UP? BMI DEDFX2 ;NO JSR PC,BNE DEDFX3 ;ON, WHEN COMMAND MOV #1435,R0 ;GIVEN, IF SO, SET TO MOV DEDYSZ,R1 ;DEFAULT POSITION SUB #207,R1 BR DEDFX2 DEDFC ;YES TYPE OUT VALUES DEDFX2: RTS PC DEDFC: MOV R4,R0 ;INDEX VAL FOR DEGET INC R4 MOV R4,DEDFXP ;X-POS OF LF CURSO DEDFX3: MOV DEGXL,R0 ;SET TO FREE CURSOR BIC #40000,R0 ;VALUE MOV DEGYL,R1 DEDFX2: MOV #4,R3 ;STORE POSITIONS OF LINES R JSR R5,DEGET DECMD MOV (SP)+,DEFMK0 MOV (SP)+,DEFMK0+2 ;VALUE OF LF CURSOR JSR PC,SAVARG JSR PC,DEFMCK MOVB DEFM .IFDF DA$4 MOV #DEGCX,DEGCSB-2 CMPB #1,DEFLG1 ;TEST FOR DUAL DISPLAY BEQ DEDFX4 MOV #DEGCSB,DEGCSB-2 MOV #10,R3 .ENK1,DEDFXD JSR PC,RSTARG MOVB #'L,DEDFXA+1 MOVB #'L,DEDFXB+1 JSR PC,DEDFXO ;OUTPUT VALUES MOV R5,R0 ;INDEX OF 'DEGET DC DEDFX4: MOV #DEDFXT,R4 DEDFX5: MOV (R4)+,R2 ;STORE X,Y POSITIONS MOV R0,(R2)+ ;IN DISPLAY BUFFER MOV R1,(R2) SUB #30, INC R5 MOV R5,DEDFXP ;X-POS OF RT CURSOR JSR R5,DEGET DECMD MOV (SP)+,DEFMK0 MOV (SP)+,DEFMK0+2 ;VALUE OF RT CURSOR R1 DEC R3 BNE DEDFX5 MOV #DEGCST,DEGCST-2 RTS PC DEDFXT: DEGCS1-12 DEGCS2-10 DEGCS3-12 DEGCS4-10 .IFDF DA$4 SETS UP THE POSITION ON THE SCOPE TO ;DISPLAY THE FREE CURSOR VALUES DEDFRC: COMB DEGCUF ;TEST TO DISPLAY F.C.V. BNE DEDF JSR PC,SAVARG JSR PC,DEFMCK MOVB DEFMK1,DEDFXD JSR PC,RSTARG MOVB #'R,DEDFXA+1 MOVB #'R,DEDFXB+1 JSR PC,DEDFXO ;OUT1 MOV #DEGFCX,DEGFCL-2 ;TURN DISPLAY OFF. RTS PC DEDF1: CLR DE4POT ;CLEAR POT SUM TSTB DEFLG1+1 ;TEST FOR F. CURSORS. PUT VALUES RTS PC DEDFXO: JSR R5,FORMAT .BYTE TEXT DEDFXA: .ASCII /XL / .BYTE 0 ;E.O.TEXT .BYTE 12,200 ;S.P. FMT BNE DEDF3 MOV #1435,R0 ;SET TO DISPLAY AT DEFAULT MOV DEDYSZ,R1 ;POSITION SUB #47,R1 BR DEDF2 DEDF3: MOV DEGXL,R0 ; .EVEN DEDFXP: 0 ;VAL OF X POSITION OF CURSOR .BYTE CRLFC0,TEXT DEDFXB: .ASCII /YL / .BYTE 0 ;E.O.TEXT .BYTE EXP DDISPLAY AT F.C. LOC. BIC #40000,R0 MOV DEGYL,R1 DEDF2: MOV #4,R3 ;STORE POSITIONS OF 4 LINES MOV #DEDFRT,R4 DEDF4: MOV EDFXD: .BYTE 0 ;#DEC PL (TO BE FILLED IN) .BYTE 7 ;# SIG.FIG. .EVEN DEFMK0 ;ADDR OF DATUM TO OUTPUT .BYTE CRLFC0,EXI(R4)+,R2 MOV R0,(R2)+ MOV R1,(R2) SUB #30,R1 DEC R3 BNE DEDF4 MOV #DEGFCL,DEGFCL-2 RTS PC DEDFRT: DGFCL1-10 DT .EVEN RTS PC .ENDC .ENDC .IFDF GT40$ .IFDF DA$11 .GLOBL DEGFXF,DEGCX,DEGCST,DEFLG1,DE4POT .GLOBL DEGXL,DEGYLWHICH I/D TBL IS USED TO DISPLY THE BUFR POINTED TO ;BY'DECMD'AND PUT IT IN R1. IF THIS BUFR IS NOT A DISPLAYABLE BUFR ;RETURN DEFRCU: MOV #100000,R0 ;MAYBE FREE CURSORS ARE INACTIVE CMP @#DECMD,@#DEDID ;IS B ONE OF THE DISPLY BUFS? BEQ DEFRC1 ; R4=-1 ;CONVERT THE FIXED CURSOR VALUES XC1 & XC2 OF ;A GIVEN I/D TBL TO THE ACTUAL LOCATION WITHIN THE ;BUFFER. APPLIES ONLYES CMP @#DECMD,@#DEDID+2 ;NOT SO FAR BNE DEFR4 ;NO IT ISNOT DEFRC1: TSTB @#DEFLG1+1 BEQ DEFR4 ;THEY ARE INACTIVE MY TO SNGL WD Y-DATA. ;ON RETURN, R4=START LOC AND R5=END LOC (START LOC=0 FOR 1ST PT) ;IF CURSORS ARE INACTIVE, R4=-1. DEFXOV @#DELST,R2 ;GET ADDR OF 1ST I/D TBL ;TIME TO CALC X1 AND X2 MOV @#DEPOTS,(PC)+ ;POT0 DEFRT1: 0 ;TEMPORARY JSR PC,DCU: MOV #177777,R4 ;MAYBE CURSORS ARE NOT ACTIVE OR ;BUFR NOT DISPLYED CMP @#DECMD,@#DEDID ;IS B ONE OF THE DISPLY BUFS?EFRS1 MOV DEFRT,-(SP) ;PUT X1 ON STACK MOV @#DEPOT1,DEFRT1 ;POT1 JSR PC,DEFRS1 MOV DEFRT,-(SP) ;PUT X2 ON STACK MOV BNE DEFXC1 ;NOT SO FAR MOV @#DELST,R1 ;YES BR DEFXC2 DEFXC1: CMP @#DECMD,@#DEDID+2 BNE DEFX1 ;NO MOV @#DELST+2,R1 R2,R5 ;LET R5=ADDR OF 1ST I/D TBL ;TIME TO CALC Y1 AND Y2 MOV @#DEPOT2,R0 ;R0=POT2 CMP R0,@#DEDYSZ ;POT READING > SCOP DEFXC2: TSTB DISCU(R1) ;WE'LL SEE IF CURSORS ARE ACTIVE. BEQ DEFX1 ;THE'RE NOT ACTIVE MOV DIST(R1),R0 ;GET T SUB DISXC1(E SIZE Y? BLOS DEFR00 ;NO MOV @#DEDYSZ,R0 ;YES DEFR00: SUB DISOFY(R5),R0 ;R0=Y1-OFFSET (I/D TBL) JSR PC,DEFRS2 ;NOW R1),R0 ;(T-XC1) =R0 MOV DISN(R1),R5 ;N =R5 JSR PC,@#MULT ;(T-XC1)*N =R5 ADD DISST(R1),R5 ;ST+(T-XC1)*N MOV R5,R4 ;SAVE DO 'SCALE BACK #1' ON Y1 MOV R1,-(SP) MOV R0,-(SP) ;SAVE Y1 FOR THE MOMENT. MOV @#DEPOT3,R0 ;R0=POT3 CMP R0,@#DEDYSZ 'START LOC' IN R4 MOV DISXC1(R1),R0 ;XC1 SUB DISXC2(R1),R0 ;XC1-XC2=R0 MOV DISN(R1),R5 ;N=R5 JSR PC,@#MULT ;(XC1-XC2)*N=;POT READING > SCOPE SIZE Y? BLOS DEFR01 ;NO MOV @#DEDYSZ,R0 ;YES DEFR01: SUB DISOFY(R5),R0 ;R0=Y2-OFSET (I/D TBL) JSR5 ADD R4,R5 ;ST+(T-XC2)*N='END LOC' DEFX1: RTS PC ;DONE RTN .ENDC .ENDC .IFDF VR14$ .IFDF DA$10 .GLOBL DEASGN,SR PC,DEFRS2 ;NOW DO 'SCALE BACK #1' ON Y2 MOV R1,-(SP) MOV R0,-(SP) ;SAVE Y2 FOR THE MOMENT ;SEE IF WE NEED TO SCALE FURTAVARG,RSTARG,DECMD,$MLR,$ADR,DEGET,DEFLG1 .GLOBL DELST,DEPOTS,DEPOT1,DEPOT2,DEPOT3,DEDID,$POLSH .GLOBL $SBR,$DVR,MULT,FLOAT,DEHER DUE TO A F.P. BUFFER TSTB @#DEDID+1 ;DISPLAYING A F.P. BUF? BEQ DEFR3 ;NO CMPB @#DEDID,@#DEASGN ;GET CORRECT ENTRY CMD1,DEDXSZ .GLOBL DISOFY,DIST,DISST,DISSC,DEDYSZ,$IR,$RI,$MLR,$ADR ;ROUTINES CALLED: MULT,DIVR,FLOAT,$POLSH,SAVARG,RSTARG,DOF ASSIGN TBL BEQ DEFR1 ;1ST ENTRY MOV #DEASGN+14,DEFRT1 ;2ND ENTRY BR DEFR2 DEFR1: MOV #DEASGN+2,DEFRT1 DEFR2: JSR PC DEGCS5-12 DEGCS6-10 DEGCS7-12 DEGCS8-10 0 ;FOR THE LINKER .ENDC .ENDC .ENDC .IFDF VR14$ .IFDF DA$11 .GLOBEGET ;---DEFRCU--- ;IF FREE CURSORS ARE ACTIVE, CONVERT THEIR READINGS ;RELATIVE TO THE DISPLAY SPECIFIED BY THE 1ST ENTRY L MULT,DECMD,DEDID,DELST .GLOBL DISST,DISN,DIST,DISCU,DISXC1,DISXC2 ;ROUTINES CALLED: MULT ;---DEFXCU--- ;FIRST DETERMINE OF 'DELST' ;RETURN X1 IN R0, X2 IN R1, Y1 IN R2,R3, Y2 IN R4,R5 ;IF FREE CURSORS ARE NOT ACTIVE RETURN '100000' IN R0. BACK UP BNE DEFR10 BR DEFR12 DEFR11: ASR R0 ;THUS SCALE BACK DOWN DEC R3 BNE DEFR11 DEFR12: MOV R0,DEFRT1 ;GET REA .ENDC .END ,DEFRS3 ;NOW DO 'SCALE BACK #2' ON Y2 MOV (SP)+,DEFRT MOV (SP)+,DEFRT+2 ;SAVE Y2 FOR A MOMENT JSR PC,DEFRS3 ;NOW DO 'SCDY TO FLOAT THE VALUE. JSR R5,@#FLOAT BR DEFR13 DEFRT1 DEFR13: RTS PC ;THIS SUBROUTINE CALC F.P. (YVAL/SCA)+OFFSET---AALE BACK #2' ON Y1 MOV DEFRT+2,-(SP) MOV DEFRT,-(SP) ;PUT Y2 BACK ON STACK ;AT THIS POINT THE STACK HOLDS F.P. Y2,Y1 AND SSSIGN--- ;'DEFRT1' HOLDS PTR TO CORRECT ASSIGN TBL SCA FAC ;YVAL IS ON TOP OF STACK DEFRS3: MOV (SP)+,DEFRS4+2 ;LET YVAL STI.P. X2,X1 ;IN THAT ORDER. DEFR3: MOV (SP)+,R4 ;RTN Y2 IN R4,R5 MOV (SP)+,R5 MOV (SP)+,R2 ;RTN Y1 IN R2,R3 MOV (SP)+,LL BE ON TOP MOV DEFRT1,R0 MOV 2(R0),-(SP) MOV (R0),-(SP) ;PUT SCA FAC ON STACK JSR R4,@#$POLSH $DVR,.+2 MOV DEFRT1R3 MOV (SP)+,R1 ;RTN X2 IN R0 MOV (SP)+,R0 ;RTN X1 IN R1 DEFR4: RTS PC ;TAGS USED DEFRT: 0,0 ;HOLDS Y1 TEMPORARILY ,R0 MOV 6(R0),-(SP) MOV 4(R0),-(SP) ;PUT OFFSET ON STACK JSR R4,@#$POLSH $ADR,.+2 DEFRS4: JMP @#0 .ENDC .ENDC . ;THIS SUBROUTINE CALC (WINDOWSIZE)*POT*N/DEDXSZ + ST ;THE POT READING IS PASSED VIA DEFRT1. ;THE RESULT IS LEFT IN DEFRT IFDF VR14$ .GLOBL SAVARG,RSTARG,$POLSH,$CMR,$MLR ;ROUTINES CALLED: $POLSH,SAVARG,RSTARG ;---DEFMCK--- ; THIS ROUTINE CALC DEFRS1: MOV DIST(R2),R5 ;WINDOWSIZE MOV DISN(R2),R0 ;N JSR PC,@#MULT MOV R5,DEFRT ;N*WINDOW JSR PC,@#SAVARG MOV DISTHE # OF DECIMAL PLACES FOR A ; NUMBER. 0.LE.N.LT.10 IS OUTPUT AS X.XXXXX, ; 10.LE.N.LT.100 IS OUTPUT AS XX.XXXX ETC. ; LIM =ST(R2),-(SP) ;PUT START ON STACK JSR R4,@#$POLSH $IR,.+2 ;FLOAT IT MOV DEFRT1,-(SP) ;PUT POT ON STACK JSR R4,@#$POL10,100,1000,ETC DEFMCK: JSR PC,@#SAVARG MOV #6,(PC)+ ;SET #DEC.PL.=6 DEFMK1: 0 CLR -(SP) MOV #41040,-(SP) ;PUT 10. OSH $IR,.+2 ;FLOAT IT MOV DEFRT,-(SP) ;PUT (N*WINDOW) ON STACK JSR R4,@#$POLSH $IR,.+2 ;FLOAT IT MOV @#DEDXSZ,-(N STACK MOV 2(SP),-(SP) MOV 2(SP),-(SP) ;COPY IT FOR LIM, STACK=LIM,10. DEFMK2: MOV 2(SP),-(SP) MOV 2(SP),-(SP) ;COPY LSP) ;PUT SCOPE SIZE X ON STACK JSR R4,@#$POLSH ;FLOAT IT $IR,$DVR,$MLR,$ADR,.+2 MOV (SP)+,DEFRT ;SAVE X1 OR X2 TEMP JIM,STACK=LIM,LIM,10. MOV DEFMK0+2,-(SP) MOV DEFMK0,-(SP) ;PUT NUMBER ON STACK BIC #100000,(SP) ;KEEP # POSITIVE JSR R4SR PC,@#RSTARG RTS PC ;THIS SUBROUTINE CALC THE F.P. (POT-OFFSET)*2^(-SCA FAC)---I/D--- ;THE (POT-OFFSET) IS PASSED VIA R0,@#$POLSH ;CMP LIM,N AND BRANCH $CMR,.+2 ;IF LIM.GT.N BGT DEFMK3 DEC DEFMK1 ;SET #DEC.PL. =1LESS BEQ DEFMK3 ;DON TO THIS ROUTINE ;THE SCALE BACK F.P. VALUE IS RETN IN R0,R1 DEFRS2: MOVB DISSC(R5),R3 ;GET 'I/D TBL' SCA. FAC. BEQ DEFR12 E IF 0 DEC.PL. MOV 2(SP),-(SP) MOV 2(SP),-(SP) ;COPY LIM MOV 12(SP),6(SP) MOV 10(SP),4(SP) ;COPY 10. JSR R4,@#$POLSH ;NO SCALING 'WAS' DONE BPL DEFR11 ;SCALING UP 'WAS' DONE DEFR10: ASL R0 ;SCALING DOWN 'WAS' DONE INC R3 ;THUS SCALE ;MULT LIM*10.=LIM $MLR,.+2 ;STACK=LIM,10. BR DEFMK2 DEFMK3: ADD #10,SP JSR PC,@#RSTARG RTS PC DEFMK0: 0,0 .ENDC LIED BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; CARL RALSTON ;AAD S# [S#] RATE [P,F,N] [C] ;T# #C S D F ;A/D SAMPLER ROETCHED. ;MIX,#1,#2,#3,ALP. ;MIX IS CHANNEL TYPE AND FIRST CHANNEL FROM QA MIXED MODE. ;#1 IS AN INTEGER =# OF CHANNELS ;#2 IUTINE ;SPAAD$ MUST BE DEFINED IN A CONDITIONAL ASSEMBLY FILE .IFDF SPAAD$ ;REGISTER DEFINITIONS R0=%0 R1=%1 R2=%2 R3S AN INTEGER =# OF SWEEPS ;#3 IS F.P. AND IS THE DELAY IN SECONDS ;ALP IS I FOR INTEGER OR F IS FOR F.P. OUTPUT ;THESE VALU=%3 R4=%4 R5=%5 SP=%6 PC=%7 ;ASSEMBLY PARAMETER ;AD$1=1 ;DISPLAY WHILE SAMPLING IF DEFINED ;NO DISPLAY IF NOT ;GT4ES ARE USED TO BUILD THE A/D SAMPLE TABLE. ;A/D SAMPLE ROUTINE IS CALLED ;THE OUTPUT IS RETURNED AS SINGLE PRECISION OR F.P. 0$=1 ;GT40 CODE ;VR14$=1 ;VR14 CODE ;RT11$ ;DEFINED = RT11 SYSTEM ;QA SYMBOL DEFINITIONS QAALP =20 QASIL =400 QANU ; ERROR CONDITIONS ;1. B#1, RATE MUST BE SPECIFIED ;2. RATE IS A NUMBER GREATER THAN .0003 AND LESS THAN 166,666 ;3. BLA =20000 QAMIX =100 QASPN =1 QAFLO =10 ;GLOBAL SYMBOLS .GLOBL QA,QADATF,QAANS,QAERR .GLOBL DEDATS,DEDATA,DEDATF,DECMD,DECMD1 .GLOBL DED1TY,DED1BA,DEDIT1,DEADSB .GLOBL CRLF,TYPCH,MULT .GLOBL $POLSH,$MLR,$DVR .GLOBL DEFORE,DEFLG1,ADSAM,TTYBUF,.TITLE SPOV8 ;LAB APPLICATIONS-11 AD CALL OVERLAY ;DEC-11-SLABA-C-LA22 ;FILE SPOV8.MAC ;FILE ID SPOV8.1 .CSECT SPOV8 ;CODESAD .IFDF VR14$ .GLOBL DISET .ENDC .IFDF GT40$ .IFDF RT11$ .GLOBL DEDBCB .ENDC .GLOBL DEFREE,DETOP,DELST,DEONE,DEDIPYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONL1S .GLOBL GTSET .ENDC ;ROUTINES CALLED: QA, MULT, $POLSH,DEFORE ;THIS IS THE CALLING ROUTINE FOR THE DATA ANALYSIS MODULY ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANYE ;WHICH CALLS THE A/D SAMPLE ROUTINE. ;THE INPUT TO THIS ROUTINE IS FROM THE TELETYPE ;VIA THE COMMAND ; AD B#1 B#2 RATE DI OTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM ANDSP-TYPE C ;B#1 IS THE FIRST SUM BUFFER TO BE USED, THE VALUE IS IN DECMD TABLE. ;B#2 IS FOR DMA ONLY, AND IS THE CURRENT SWEEP TO ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THE TEMP BUFFER ;AND IS THE SECOND ENTRY OF THE DECMD TABLE. ;RATE IS A F.P. # IN TABLE DECMD1. ;DISP-TYPE IS FOR GT40 AND VR14 INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQUIAND ;DEFINES THE TYPE OF DISPLAY AND TYPE OF DATA ACQUISITION ;N FOR NO DISPLAY ;P FOR GRAPH PLOT ;F FOR FULL DISPLAY ;IF CPMENT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPP IS TYPED THE FOLLOWING DATA IS FETCHED ;NO ANSWER TO ANY OF THE FOLLOWING QUESTIONS, CAUSES THE ;REST OF THE DATA NOT TO BE FS MUST BE A NON ZERO, POSITIVE INTEGER, MAX IS 32767 ;12. DELAY IS A NUMBER LESS THAN 4294.967295 AND SUCH THAT THE RATE ; ;GET # OF CHANNELS QASIL+QASPN+QANULA JSR PC,ADSUB2 MOV @#QAANS,R0 ;STORE # OF CHANNELS -1. DEC R0 MOV R0,ADNOFC BMUSED FOR DELAY IS THE SAME OR SLOWER THAN THE SAMPLING RATE. ; A GOOD RUE OF THUMB IS 1-RATE, LT. ;13 THE OUTPUT TYPE MUST I AD2A JSR R5,QA ;GET # OF SWEEPS QASIL+QASPN+QANULA JSR PC,ADSUB2 MOV @#QAANS,ADNOFS ;STORE # OF SWEEPS BLE AD2A JBE I OR F, S.P. BUFFERS CAN NOT BE FLOATED. ;14. IF A DELAY ERROR IS FOUND. THE MESSAGE "DELAY RATE TOO ; FAST" IS PRINTEDSR R5,QA ;GET DELAY QASIL+QAFLO+QANULA JSR PC,ADSUB2 MOV @#QAANS,ADDELY ;STORE DELAY MOV @#QAANS+2,ADDELY+2 JSR R5,QA. ; ERRORS PRINTED BY SUBROUTINE ;DELAY VALUE BAD ;CLOCK RATE ERROR ;BAD BUFFER TYPE ;INCORRECT FORMAT ;NON-EXISTEN ;GET OUTPUT DATA TYPE. QASIL+QAALP+QANULA ADCOM1 JSR PC,ADSUB2 ;TEST FOR I,F COMMAND. MOVB R0,ADDATY ;STORE OUTPUT TYPT BUFFER ;AFTER AN ERROR THE DISPLAY COMMAND ;SHOULD BE GIVEN AGAIN TO RESET THE DISPLAY DESAD: CLR ADNOFC ;SET VALUES TO DE FLAG IF ;SET AD3: TSTB ADDTYP ;TEST DISP TYPE BNE AD3A CMPB #1,DEFLG1 ;IF TYPE F, A SINGLE ;DISPLAY MUST BE ONEFAULT VALUES. CLR ADDELY CLR ADDELY+2 CLR ADCHTY CLR (PC)+ ;DATA OUTPUT TYPE F.P.=1 ADDATY: .BYTE 0,0 ;LEAVE AS INTE BEQ AD3A MOV #6,R0 ;PRINT ERO:ROR JMP AD17 AD3A: MOVB @#DECMD+1,ADDOUP ;SET THE TYPE OF ;BUFFER TO USE BEQ AD4 GER=0 CLR ADCHN CLR ADDTYP MOV #1,ADNOFS ;# OF SWEEPS MOVB @#DECMD+1,ADDATY ;SET FORMAT TYPE ;GET INPUT .IFDF AD$1 MOV #177777,@#DED1TY ;SET DISPLAY TYPE TO D.P. AD4: MOV AD1ML+2,-(SP) ;FIND THE SAMPLE RATE MOV AD1ML,-(SP) ;IN MICROSECONDS#1 MUST BE D.P. IF #OF SWEEPS IS GREATER THAN 16. ;4. THE BUFFER NUMBER MUST BE A VALUE SUCH THAT THE TOTAL BUFFER ; AREA JSR R5,QA ;TEST FOR DISPLAY TYPE,SAMPLE TYPE QASIL+QAALP ADCOM3 TSTB @#QAERR BNE AD2 DEC R0 ;SET DISPLAY,SAMPLE NEEDED DOES NOT EXCEED, BUFFER AVAILABILITY. ;5. B#2 IS SPECIFIED FOR DMA, IT CAN BE S.P. OR F.P. BUFFER. ;A SINGLE SWEEP DMATYPE AND MOVB R0,ADDTYP ;STORE IT AWAY. .ENDC .IFNDF AD$1 MOVB #-1,ADDTYP ;SET DISPLAY TYPE TO NO DISPLAY .ENDC AD1 SAMPLE DOES NOT NEED B #2. ;6. C IS THE ONLY VALID CONTINUE CHAR. ;7. THE ANSWERS ON EACH COMMAND LINE MUST BE IN ORDER. ;A: JSR R5,QA ;TEST FOR C COMMAND, ADD INPUT QASIL+QAALP+QANULA ADCOM2 TSTB @#QADATF ;TEST FOR NO C COMMAND BEQ AD3 TS8. CHANNEL TYPE AND FIRST CHANNEL IS C OR D AND A ;9. POSITIVE NUMBER. ;10. #OF CHANNELS IS A POSITIVE NON ZERO NUMBER, ; ST R0 ;TEST FOR A COMMAND ERROR. BEQ AD1 AD2: MOV #17,R0 ;TYPE MESSAGE ILLEGAL OPTION AD2C: JMP AD17 AD2A: JMP ADSU2 AD2BUCH THAT THE AVAILABLE ; BUFFER SPACE IS NOT EXCEEDED. FOR EXAMPLE IF THESE ARE 4 ; S.P. BUFFERS AND 3 CHANNELS WILL BE: MOV #54,R0 ;TYPE ERROR-BAD CLOCK RATE BR AD2C AD1: JSR R5,QA ;GET CHANNEL TYPE AND QAMIX+QANULA ;FIRST CHANEL # ADME SAMPLED STARTING WITH ; BUFFER S3, THEN THE COMMAND IS IN ERROR, SINCE THE BUFFERS ; MUST BE CONTIGUOUS ;11. #OF SWEEPS ADCOM2 JSR PC,ADSUB2 MOVB R0,ADCHTY ;SET CHANNEL TYPE MOVB @#QAANS,ADCHN ;STORE 1ST CHANNEL #. BMI AD2A JSR R5,QA FIXD ;FIX TO A D.P. #. MOV R1,ADDELY ;STORE DELAY AS D.P. #. MOV R2,ADDELY+2 CLR R1 ;FIND ADDRESS OF SUM BUFFER. JSR PCSPLAY MOV #177777,R0 MOV R0,@#DECMD1 ;TO BUFFER DATA IS MOV R0,@#DECMD1+2 ;PUT INTO MOV R0,@#DECMD1+4 MOV R0,@#DECMD1+,ADFBA MOV R5,ADBUFA TST (R1)+ ;ADD 2 .IFDF GT40$ TSTB ADDTYP ;TEST FOR GRAPH PLOT DISPLAY BLE AD5A MOV @#DEFREE,R6 TST (SP)+ JMP @#DEADSB ;CONVERT D.P. DATA TO FLOATING POINT AD7: MOV ADCOUT,R5 ;MULT. # OF BUFFERS X SIZE MOV ADNOFC0 ;GET DISPLAY BUFFER ADDRESS AND SIZE MOV R0,ADGRAB NEG R0 ADD @#DETOP,R0 TST (R0)+ ;ADD 2 & C=0 ROR R0 ;UNSIGNED D,R0 INC R0 JSR PC,@#MULT ;R5 HAS THE # OF POINTS TO PROCESS. MOV ADBUFA,R4 ;ADDRESS OF BUFFERS. AD13: MOV (R4)+,R0 ;LOW OIV BY 2 MOV R0,ADGRAS MOV #DEDIT1,@#DELST ;SET DISPLAY ADDRESSES AND 0 SCALE CLR @#DELST+2 ;FOR GRAPHPLOT MOV #DEDIT1,@#RDER OF DATA MOV (R4)+,R1 ;HIGH ORDER MOV #230,R2 ;EXPONENT FOR 24 BITS OF MONITOR. AD9: BIT #177600,R1 ;TEST TO SHIFT LEFDEONE CLRB @#DEDI1S AD5A: .ENDC TSTB ADCHTY ;TEST FOR DMA BEQ AD5 TST DECMD(R1) BPL AD5B ;ERROR IF NO BUFFER INPUT BNE AD11 ASL R0 ;SHIFT LEFT AND REDUCE EXP. ROL R1 DEC R2 BEQ AD10A ;VALUE MUST HAVE BEEN ZERO BR AD9 AD11: BT ;FOR TEMP STORAGE, & # OF SWAP GT 1. CMP #1,ADNOFS ;TEST FOR 1 SWEEP BEQ AD5D AD18: JMP ADSU2 AD5D: TSTB ADDOUP IT #177400,R1 ;TEST IF DONE SHIFTING BEQ AD10 ASR R1 ;SHIFT RIGHT AND ADD 1 TO EXP. ROR R0 INC R2 BR AD11 AD10: BI;MUST BE S.P. BEQ AD5C BR AD18 ;GET ADDRESS OF TEMP BUFFER AD5B: JSR PC,ADFBA AD5C: MOV R5,ADBADM AD5: TSTB ADDATY C #177600,R1 ;CLEAR EXPONENT OF F.P. WORD. SWAB R2 ;GET EXP IN POSITION AND ADD CLC ;TO HIGH PART OF F.P. WORD ROR R2 ;TEST FOR F.P. OUTPUT BEQ AD6 TSTB ADDOUP ;ERROR IF USING S.P. BUFFER. BEQ AD18 AD6: MOVB @#DECMD,R0 ;TEST IF TOO MANY C ADD R2,R1 AD10A: SUB #4,R4 ;SET TO STORE DATA HIGH LOW. MOV R1,(R4)+ MOV R0,(R4)+ DEC R5 ;TEST IF DONE BNE AD13 BRHANNELS ADD ADNOFC,R0 ;ARE REQUESTED TO BE USED. MOV @#DEDATS,R1 TSTB @#DECMD+1 BEQ AD12 MOV @#DEDATF,R1 AD12: CMP R0 AD19 ADSUB2: TSTB @#QADATF ;TEST FOR NO ANSWER BNE ADSUB1 TST (SP)+ ;SKIP REST OF QUESTIONS JMP AD3 ADSUB1: TSTB @#QAE,R1 BLOS AD14 ;BRANCH IF NO ERROR. JMP AD20 AD14: MOV @#DEDATA+2,ADCOUT ;SET POINTS PER SWEEP. MOV ADBUFA,@#DED1BA ;SET RR ;TEST FOR ERROR BNE ADSU1 RTS PC ;ELSE EXIT ADSU1: TST (SP)+ ;ERROR, CALL ERROR ADSU2: MOV #56,R0 ;TYPE ERROR INCOR MOV @#DECMD1+2,-(SP) MOV @#DECMD1,-(SP) JSR R4,@#$POLSH $DVR,.+2 JSR PC,ADFIXD ;FIX TO A D.P. NUMBER. MOV R1,ADRATEDISPLAY ADDRESS. MOV #DEDIT1,R0 .IFDF VR14$ JSR PC,DISET .ENDC .IFDF GT40$ TSTB ADDTYP ;TEST FOR FULL DISPLAY BNE ;STORE RATE AS A D.P. #. MOV R2,ADRATE+2 BNE AD15 ;TEST FOR RATE CMP R1,#7 ;TOO FAST BLO AD2B AD15: MOV AD1ML+2,-(SP AD14A JSR PC,GTSET .ENDC AD14A: JSR R5,ADSAM ;CALL A/D SAMPLES ROUTINE ADBUFA-.-2 BR AD16 ;ERROR RETURN TSTB ADDATY) ;PUT DELAY IN MICRO SECONDS MOV AD1ML,-(SP) MOV ADDELY+2,-(SP) MOV ADDELY,-(SP) JSR R4,@#$POLSH $MLR,.+2 JSR PC,AD ;TEST TO CONVERT DATA TO F.P. BNE AD7 TSTB ADDOUP ;TEST FOR D.P. BEQ AD19 RTS PC AD19: MOV #1,@#DED1TY ;RESET THE DIRECT FORMAT BR AD17 AD16: CMP R0,#3 ;TEST FOR TYPE 3 ERROR BNE AD16A MOV #22.,R0 BR AD17 AD16A: ADD #53,R0 ;TYPE ERR BHI ADFXD5 CMP R0,#24. ;COMPARE EXPONENT, TO SHIFT BEQ ADFXD2 ;MONTISSA INTO A D.P. BHI ADFXD3 ;NUMBER MOV #24.,R3 OR FROM A/D AD17: MOV #1,@#DED1TY TST (SP)+ JMP @#DEFORE ;CALL ERROR EXIT AD20: MOV #57,R0 ;TYPE ERROR NONBUFFER. BR AD SUB R0,R3 ADFXD1: ASR R2 ;SHIFT RIGHT ROR R1 DEC R3 BNE ADFXD1 BR ADFXD2 ADFXD3: SUB #24.,R0 ;SHIFT LEFT ADFXD417 ;A/D SAMPLE TABLE TO PASS TO A/D ROUTINE ADBUFA: 0 ;ADDRESS OF SUM BUFFER ADRATE: 0,0 ;RATE ADDELY: 0,0 ;DELAY : ASL R1 ROL R2 DEC R0 BNE ADFXD4 ADFXD2: RTS PC ADFXD5: TST (SP)+ ;ERROR EXIT JMP AD2B ;SUBROUTINE TO FIND A BUFADCHTY: .BYTE 0 ;=1 FOR DMA, OTHERWISE 0 ADDOUP: .BYTE 0 ;1 FOR D.P., 0 FOR S.P. ADCHN: 0 ;FIRST CHANNEL TO SAMPLE FROM FER ADDRESS ;ENTER WITH ORDER OF BUFFER IN R1, =0 FOR FIRST BUFFER. ADFBA: MOV @#DEDATS+2,R2 ;ADDRESS OF S.P. BUFFERS MOV @ ADNOFC: 0 ;# OF CHANNELS -1 ADCOUT: 0 ;# OF POINTS PER SWEEP ADNOFS: 0 ;# OF SWEEPS ADBADM: 0 ;DMA TEMP BUFFER ADRES#DEDATA+2,R0 ;SIZE OF BUFFERS TSTB DECMD+1(R1) BEQ ADFBA1 MOV @#DEDATF+2,R2 ;ADDRESS OF F.P. BUFFERS ASL R0 ;DOUBLE SIZS ADDTYP: .BYTE 0 ;DISPLAY TYPE ;=0 FOR FULL DISPLAY ;=1 FOR GRAPH PLOT ;=-1 FOR NO DISPLAY .EVEN .IFDF GT4E FOR F.P. ADFBA1: MOVB DECMD(R1),R5 ;GET BUFFER NUMBER BMI ADFBA2 DEC R5 JSR PC,@#MULT ;MULTIPLY POSITION X SIZE ASL R0$ ADGRAB: 0 ;GRAPH PLOT BUFFER FOR GT-40 ADGRAS: 0 ;SIZE .ENDC ;ADFIXD ;SUBROUTINE TO FIX A FLOATING POINT NUMBER T5 ;MULT BY 2 FOR ADDRESS ADD R2,R5 ;ADDRESS IN R5 RTS PC ADFBA2: TST (SP)+ BR AD20 ;COMMAND LIST FOR INPUT ADCOM1:O ;A DOUBLE PRECISION INTEGER ;THE NUMBER IS ASSUMED TO BE POSITION ;REGISTING R0,R1,R2 AN DISTROYED ;CALLING SEQUENCES ;FL .BYTE 3,1,'I,'F,0 .IFDF LPS11$ ADCOM2: .BYTE 3,1,'C,'D,0 .ENDC .IFDF AR11$ ADCOM2: .BYTE 2,1,'C,0 .ENDC .IFDF GT4OATING POINT NUMBER IS ON THE STACK ;JSR PC, ADFIXD ;D.P. NUMBER RETURNED IN R1,R2, LOW ORDER IN R1 ADFIXD: MOV (SP)+,R2 ;SAV0$ ADCOM3: .BYTE 4,1,'N,'F,'P,0 .ENDC .IFDF VR14$ ADCOM3: .BYTE 3,1,'N,'F,0 .ENDC ADMES: .ASCII /T# #C S D F/ .BYTEE PC MOV (SP)+,R0 ;EXPONENT WORD OF F.P. #. MOV (SP)+,R1 ;LOWER MANTISSA OF F.P. #. MOV R2,-(SP) MOV R0,R2 BMI ADFXD5 15,12,0 .EVEN ;FLOATING VALUES AD1ML: 45164,22000 ;.FLT2 1000000 .ENDC .END ;ERROR IF F.P. # NEG. BEQ ADFXD2 ;DONE IF 0 BIC #177600,R2 ;HIGH MANTISSA IN R2 BIS #200,R2 ;SET MOST SIGNIFIGANT BIT ;ALWAYS ASSUMED SET. ASL R0 ;GET EXPONENT INTO BITS SWAB R0 ;0-7 OF R0 FROM BITS BIC #177400,R0 ;7-14 OF F.P. NUMBER.TITLE SPOV9 ;LAB APPLICATIONS-11 DUAL DISPLAY COMMANDS ;DEC-11-SLABA-C-LA23 ;FILE ID SPOV9.1 ;FILE: SPOV9.MAC .CSECT SPOV9. SUB #200,R0 ;SUB. 200 TO GET REAL EXPONENT CMP R0,#1. BLO ADFXD5 ;EXPONENT MUST BE CMP R0,#32. ;1 .LE. EXP .LE. 32 ;COPYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR T,DISBUF .IFDF VR14$ .GLOBL DINIT .ENDC .IFDF GT40$ .GLOBL DISMPO,GINIT,DEDBCB,DEFREE,DETOP,GTDISP,DEGFCJ .GLOBL DEGT,@#DEGTOF ;TURN OFF GT40 .ENDC CLR @#DEDID ;INHIBIT DEFAULT-DATA-EDITOR-CMDS CLRB @#DEFLG1 ; " ALL DISPLAYS ;CALL OF,DEGTON,DEGIDF,DEGFXF,DECDID,GTRCAL,DISSKP,DISGRA .ENDC ;ROUTINES CALLED:FLOAT,IFIX,QA,MULT,DETLE,DEADJ,DESCA ; DEMXMN,'QA' FOR NEW OR OLD JSR R5,QA 20000+400+20 ;NULL ANS OK+SILENT GUEST+ALPHA CMD DEDUAD TSTB @#QADATF ;ANY ALPHA CHAR GDEEOL,DEFORE,DINIT,GINIT,GTDISP ; DEGTON,DEGTOF ;---DSP B1[B2][W1[W2[S1[S2]]]][NEW OR OLD]--- ;---DOV B1[B2][W1[W2[S1[S2]]]IVEN? BEQ DEDU5 ;NO--USE DEFAULT-NEW TST R0 ;'N' OR 'O' WAS SPECIF? BPL DEDU3 ;YES MOV #15.,R0 JMP DEDUEE ;NO--ILLUSE ONLY ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE,][NEW OR OLD]--- ;IF NEW-DISPLAY BUFFERS(S.P. OR F.P. OR MIXED) WITH ; WINDOWSIZES(W1,W2)BEING THE TOTAL #PTS TO DISPLAY AT AN OR ANY OTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSY ; ONE TIME AND STARTING PTS(S1,S2) BEING THE 1ST PT ; DISPLAYED IN EACH CORRESPONDING BUFFER SUCH THAT ; (START-1)+WINDOW SCOPE SIZE? BLOS DEDU14 ;NO MOV @#DEDXSZ,DEDUW1 ;YES, DEFAULT = SCOPE SIZE BR DEDU14DECMD+2,@#DECMD ;THE SP BUF IS ALWAYS DISPLAYED DEDU20: MOV @#DEDID+2,@#DECMD+2 ;DECMD+2 MAY HAVE BEEN DESTROY TSTB @#DECMD+3 DEDU12: JSR R5,@#IFIX BR DEDU13 DECMD1 DEDU13: MOV R0,DEDUW1 ;SAVE W1 (R1) BLE DEDU1C ;W1 < 1--(ERR) CMP #177777,@#D ;WHAT TYPE IS B2? BEQ DEDU25 ;SNGL PREC! JSR PC,DEDUAS ;FP -- CHK FOR ASSIGN SP BUFR. TST R0 BNE DEDU22 DEDU21: MOV #EG CHAR--(ERR) DEDU3: BEQ DEDU5 ;'N' WAS SPECIF ;COME HERE ONLY WHEN USING 'OLD' PARAMETERS ;MUST CHECK TO SEE IF PREVIOUSECMD1+4 ;W2 WAS SPECIF? BNE DEDU15 ;YES DEDU14: MOV DEDUW1,R0 ;NO -- SAVE W2=W1 (R0) BR DEDU16 DEDU15: JSR R5,@#IFIX BR DISPLAY WAS DUAL AND THAT A ;BUFR CMD WAS NOT GIVEN BETWEEN DISPLAY CMDS. JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES DEDU16 DECMD1+4 DEDU16: MOV R0,(PC)+ ;SAVE W2 DEDUW2: 0 BGT DEDU1D ;W2 < 1? DEDU1C: MOV #18.,R0 ;YES JMP DEDUEE DEDMOV #177777,DEDUW1 ;O WAS SPECIF--SET FLG! NEG R1 ;NEG PREV DISPLY TYPE # ADD DEDUFL,R1 ADD #2,R1 ;PREV DISPLY TYPE WAS U1D: MOV @#DEDXSZ,R4 ;SCOPE SIZE X CMP R0,R4 ;W2 > SCOPE SIZE ? BHI DEDU17 ;YES--(ERR) ADD DEDUS2,R0 ;NO CMP R0,@#DEDASAME ? BNE DEDU4 ;NO--ILLEG CMD--(ERR) MOV #DEDIT1,R0 ;YES GET 1ST I/D TBL ADDR TST DIST(R0) ;BUFR CMD GIVEN BTWN DISPLAYTA+2 ;(S2-1)+W2>BUFSIZ? BHI DEDU1E ;YES -- (ERR) MOV DEDUW1,R0 ;GET W1 CMP R0,R4 ;W1 > SCOPE SIZE ? BLOS DEDU1F ;NO CMDS? BNE DEDU18 ;NO DEDU4: MOV #16.,R0 JMP DEDUEE ;YES--(ERR)OLD PARAMS ARE GONE ;COME HERE ONLY WHEN NEED TO DEFINE DEDU17: MOV #20.,R0 JMP DEDUEE ;YES--(ERR) DEDU1F: ADD DEDUS1,R0 CMP R0,@#DEDATA+2 ;(S1-1)+W1>BUFSIZ? BLOS DEDU18 DEDU1A 'NEW' DISPLAY ;GET STARTS AND WINDOWS & CHECK THEM OUT. DEDU5: JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES CMP #177777E: MOV #19.,R0 JMP DEDUEE ;YES -- (ERR) ;TIME TO FIND OUT IF B1 & B2 ARE SP OR FP OR MIXED. DEDU18: TST @#DECMD+2 ;B2 WA,@#DECMD1+10 ;S1 WAS SPECIF? BNE DEDU6 ;YES CLR (PC)+ ;SAVE S1=DEFAULT-1 DEDUS1: 0 ;SAVED (START-1) #1 BR DEDU8 DEDUS SPECIF. BPL DEDU19 ;YES MOV @#DECMD,@#DECMD+2 ;B2 DEFAULTS TO B1 DEDU19: MOV @#DECMD,(PC)+ ;SAVE DECMD FOR AWHILE DEDUD IN DECMD JSR PC,DEADJ ;FOR 'DEADJ' TO SCALE! MOV @#DECMD+4,@#DECMD ;RESTORE SP-B1 BR DEDU25 ;THIS ROUTINE SETS 'SP BUFTO BY R1 ;THEN FINDS MULT & OFFSET SO GT40 DISPLAY CAN ;SCALE DOWN THE F.P. DATA FOR DISPLAY. DEDUSC: CLR R0 ;START OF B R TYPE' IN DECMD+3, ;CHKS IF AN ASSIGNED SP BUFR IS AVAILABLE FOR THE F.P. DATA ;RETURNS R0 = 0(NONE) =1(1ST) =-1(2ND) DEDU MOV @#DEDATA,R5 DEC R5 ;SIZE -1 TO FIND JSR PC,DEMXMN ;MAX-MIN TO FIND JSR PC,DESCA ;MULT & OFFSET RTS PC ;THIS ROUAS: CLRB @#DECMD+3 ;SP-TYPE=0 MOV #1,R0 TSTB @#DEASGN+1 ;A SP BUFR WAS ASSIGNED? BEQ DEDUA1 ;NO -- RETURN (ERR) TSTB @#TINE STORES MULT & OFFSET (R1,R2,R3,R4) IN ;CORRECT 'ASSIGN TBL' ENTRY AND IN CORRECT I/D TBL DEDUSV: MOV R1,(R5)+ ;SAVE 'MUDEASGN ;YES -- ENTRY IS ALREADY TAKEN? BEQ DEDUA2 ;NO -- RETURN R0=1 TSTB @#DEASGN+13 ;YES -- A 2ND S.P. BUFR WAS ASSIGNED?LT' IN ASSIGN TBL MOV R2,(R5)+ MOV R3,(R5)+ ;SAVE 'OFFSET' IN ASSIGN TBL MOV R4,(R5) MOV R1,(R0)+ ;SAVE 'MULT' IN I/D TB BEQ DEDUA1 ;NO -- RETURN (ERR) DEC R0 ;YES -- RETURN R0=-1 DEDUA1: DEC R0 DEDUA2: RTS PC .ENDC .IFDF GT40$ TSTB L MOV R2,(R0)+ MOV R3,(R0)+ ;SAVE 'OFFSET' IN I/D TBL MOV R4,(R0) RTS PC .ENDC ;PUT THE FOLLOWING I/D TBL VALUES ON @#DECMD+1 ;WHAT TYPE IS B1? BEQ DEDU20 ;SNGL! MOVB @#DECMD,@#DEASGN ;F.P -- SET F# OF 1ST ASSIGN MOV #DECMD,R1 ;NEED TYPETHE STACK FIRST FOR ;B2 THEN B1 IN THIS ORDER: BOT,TOP,OFY,WI,ST,CI,TYP,BUFADR DEDU25: TST DEDUFL ;'SPL' OR 'DOV' ? BNE D & # OF B1 JSR PC,DEDUSC ;FIND MULT + OFFSET FOR SCALING MOV #DEASGN+2,R5 ;ADDR+2 OF ASSIGN TBL ENTRY MOV #DEDIT1,R0 ;USE EDU26 ;'SPL' WANTED CLR -(SP) ;'DOV'--SETUP B2-- BOT=0 MOV @#DEDYSZ,-(SP) ;TOP=SCOPE SIZE MOV @#DEOFY,-(SP) ;OFY='DEOFY'1ST I/D TBL FOR B1 STUFF ADD #DISMPO,R0 JSR PC,DEDUSV ;SAVE MULT + OFFSET AWAY. DEDU20: TSTB @#DECMD+3 ;WHAT TYPE IS B2? MOV DEDUW2,-(SP) ;WINDOW #2 MOV DEDUS2,-(SP) ;START2-1 MOV @#DECMD+2,@#DECMD+4 ;PASS B2 (TYPE & #) JSR PC,DEDUFX CLR BEQ DEDU25 ;SNGL TSTB @#DEASGN ;1ST ASSIGN TBL ENTRY TAKEN? BNE DEDU21 ;YES, USE THE 2ND MOVB @#DECMD+2,@#DEASGN ;NO -- -(SP) ;--SETUP B1-- BOT=0 MOV @#DEDYSZ,-(SP) ;TOP=SCOPE SIZE MOV @#DEOFY,-(SP) ;OFY MOV DEDUW1,-(SP) ;WINDOW #1 MOV DED21.,R0 JMP DEDUEE ;NO FREE ASSIGN BUF -- (ERR) DEDU22: BMI DEDU23 ;USE 2ND ENTRY MOVB @#DECMD+2,@#DEASGN ;SET F# OF 1ST ESET F# OF 1ST ASSIGN MOV #DECMD+2,R1 ;NEED TYPE & # OF B2 JSR PC,DEDUSC ;FIND MULT & OFFSET FOR SCALING. MOV #DEASGN+2,R5 NTRY MOVB @#DEASGN+1,@#DECMD+2 ;TYPE & # OF SP BUFR IN DECMD+2 MOV #DEASGN+2,R5 ;ADDR+2 OF 1ST SP ASSGN ENTRY BR DEDU24 D;ADDR+2 OF ASSIGN TBL ENTRY BR DEDU22 DEDU21: MOVB @#DECMD+2,@#DEASGN+12 ;SET F# OF 2ND ASSIGN MOV #DECMD+2,R1 ;NEED TYPE &EDU23: MOVB @#DECMD+2,@#DEASGN+12 ;SET F# OF 2ND ENTRY MOVB @#DEASGN+13,@#DECMD+2 ;TYPE & # OF SP BUFR IN DECMD+2 MOV #DEASG # OF B2. JSR PC,DEDUSC ;FIND MULT & OFFSET FOR SCALING MOV #DEASGN+14,R5 ;ADDR+2 OF ASSIGN TBL ENTRY DEDU22: MOV #DEDIT2,RN+14,R5 ;ADDR+2 OF 2ND SP ASSGN ENTRY DEDU24: MOV @#DECMD,@#DECMD+4 ;SAVE SP-B1 TEMPORARILY MOV @#DEDID+2,@#DECMD ;NEED FP-B20 ;USE 2ND I/D TBL FOR B2 STUFF ADD #DISMPO,R0 JSR PC,DEDUSV BR DEDU25 ;THIS ROUTINE FINDS THE MAX-MIN OF BUFR POINTED CHANNELS .ENDC .IFDF GT40$ ADD #3,4(SP) ;INTENSITY GOES TO 6 .ENDC BR DEDU27 DEDU26: CLR -(SP) ;'SPL'--SET UP B2-- B #DEDIT1,R0 ;R0 MUST HOLD I/D TBL ADDR MOV R0,@#DELST MOV R0,@#DEONE JSR PC,DEDUTB MOV #DEDIT2,R0 MOV R0,@#DELST+2 MOT=0 MOV @#DEOFYD,-(SP) ;TOP=HALF SCOPE SIZE MOV @#DEOFY,-(SP) ASR (SP) ;OFY='DEOFY'/2 MOV DEDUW2,-(SP) ;WINDOW #2 MOOV R0,@#DEONE+2 JSR PC,DEDUTB BR DEDU28 ;THIS ROUTINE SETS UP THE I/D TBL WHOSE ADDR IS IN R0 ;MANY VALUES ARE ON STACK-V DEDUS2,-(SP) ;START2-1 MOV @#DECMD+2,@#DECMD+4 ;PASS B2 (TYPE & #) JSR PC,DEDUFX MOV @#DEOFYD,-(SP) ;--SET UP B1-- BOT=H-LASTLY, CALL INIT DEDUTB: MOV (SP)+,R1 ;GET 'RTN PC' OFF STACK .IFDF GT40$ MOVB #1,DISSKP(R0) CLRB DISGRA(R0) .ENDC ALF SIZE MOV @#DEDYSZ,-(SP) ;TOP=Y-SCOPE SIZE MOV @#DEOFY,-(SP) ASR (SP) ADD @#DEOFYD,(SP) ;OFY='DEOFY'/2+DEOFYD MOV D MOV (SP)+,DISYBU(R0) ;BUF ADDR MOV (SP)+,DISTYP(R0) ;DATA TYPE MOV (SP)+,DISCI(R0) ;CHAN/INTENSITY TST DEDUW1 ;OPTION 'EDUW1,-(SP) ;WINDOW #1 MOV DEDUS1,-(SP) ;START1-1 MOV @#DECMD,@#DECMD+4 ;PASS B1 (TYPE & #) JSR PC,DEDUFX BR DEDU27 ;OLD' WANTED? BPL DEDUT2 ;NO ADD #12,SP ;YES, POP ST,WI,OFY,TOP,BOT OFF STACK BR DEDUT1 DEDUT2: MOV @#DEDATA+2,DISBUF(R0THIS ROUTINE PUTS THE CI,TYP,BUFADR ON STACK ;TYPE & # BUFR IS PASSED IN DECMD+4 DEDUFX: MOV (SP)+,R1 ;MOV 'RTN PC' OFF STAC) ;BUF SIZE (# DATA PTS) MOV (SP)+,DISST(R0) ;START-1 MOV (SP)+,DIST(R0) ;WINDOW SIZE MOV #1,DISN(R0) ;N=1 CLRB DISCU(R0K .IFDF VR14$ CLR -(SP) ;CI=0 .ENDC .IFDF GT40$ CLR -(SP) ;CI=0 FOR THE MINUTE TST DEDUFL ;SPLIT OR DOV? BEQ DE) ;FIX CURSOR FLG=0 CLRB DISSC(R0) ;SCA FAC=0 CLRB DEFLG4 ;CLEAR WINDOW FLG CLR DISOFX(R0) ;X-AXIS OFFSET MOV (SP)+,DISDUF1 ;DOV! ADD #3,(SP) ;SPLIT CI=6 DEDUF1: ADD #3,(SP) ;DOV CI=3 (FOR NOW) .ENDC TSTB @#DECMD+5 BEQ DEDUF2 ;SP BUFROFY(R0) ;Y-AXIS OFFSET MOV @#DEDXSZ,DISSZX(R0) ;SCOPE SIZE X MOV (SP)+,DISTOP(R0) ;TOP OF DISPLAY MOV (SP)+,DISBOT(R0) ;BO MOV #177776,-(SP) ;FP BUFR---TYPE=-2 MOVB @#DECMD+4,R0 ;GET # DEC R0 ASL R0 ASL R0 ;4*(#-1)--FP TAKE 4 BYTES/DATUM T OF DISPLAY DEDUT1: .IFDF VR14$ JSR PC,@#DINIT ;VR14 INIT .ENDC .IFDF GT40$ JSR PC,@#GINIT ;GT40 INIT .ENDC JMP MOV @#DEDATA+2,R5 ;BUFSIZE JSR PC,@#MULT ADD @#DEDATA+12,R5 ;4*(#-1)*BUFSIZE+ADDR OF 1ST FP MOV R5,-(SP) ;BUFR ADDR OF FP(R1) ;RETURN VIA R1 ;FINISH UP! IF GT40, SET DISPLAY BUFR CTRL BLK (DEDBCB) AND ; CALL GT40 DISPLAY MODULE. ;FOR BOTH GT40 BUFR BR DEDUF3 DEDUF2: MOV #1,-(SP) ;---TYPE=1 MOVB @#DECMD+4,R0 ;GET # DEC R0 ASL R0 ;2*(#-1)--SP TAKES 2 BYTES/DATU OR VR14 SET DEDID & DEFLG1 ; NOTE: DEDID+2 SET UP EARLIER DEDU28: .IFDF GT40$ MOV #DEDBCB,R1 ;ADDR OF BUFR CTRL BLK MM MOV @#DEDATA+2,R5 ;BUFSIZE JSR PC,@#MULT ADD @#DEDATA+6,R5 ;2*(#-1)*BUFSIZE+ADDR OF 1ST SP MOV R5,-(SP) ;BUFR ADDR OF OV @#DEFREE,(R1) ;DISPL BUF ADR=1ST FREE LOC MOV @#DETOP,R2 ;TOP OF FREE CORE SUB (R1)+,R2 ;TOP-1ST FREE LOC TST (R2)+ ;(US1,-(SP) ;START1-1 MOV @#DECMD,@#DECMD+4 ;PASS B1 (TYPE & #) JSR PC,DEDUFX .IFDF VR14$ ADD #1000,4(SP) ;USE DIFF SCOPE SP BYTE DEDUF3: JMP (R1) ;RETURN VIA R1 ;TIME TO FILL IN I/D TBLS AND CALL INIT AND FILL IN ;DELST AND DEONE DEDU27: MOVLE'S CMDS, WHILE ONLY THE ;DISPLAY DESIGNATED BY THE 1ST ENTRY OF 'DELST' ;WILL BE REFERENCED BY ANY DEFAULT-DATA-EDITOR ;CMDURSORS ARE UP FOR BOTH DISPLAYS)-THE DATA OF B ; IS ROTATED UNTIL THE DATA DESIGNATED BY THE LEFT ; CURSORS HAVE THE SAME BUFFS. (INTEGRATE, DERIVATIVE, ETC.) ;IF TWO DISPLAYS ARE NOT UP-THIS CMD IS IGNORED DETOPB: JSR R5,DEEOL ;CHK EXCESS BUFRS/CONSER POSITION. ;CASE2(FIXED CURSORS ARE DOWN FOR BOTH DISPLAYS)-THE DATA OF B ; IS ROTATED UNTIL THE ITS 1ST DISPLAYED PT OCCUPITOP-1ST FREE)+2 MOV R2,(R1) ;DISPL BUF SIZE=(TOP-FREE)+2 JSR PC,@#GTDISP ;CALL GT40 DISPLAY MODULE TST R0 BNE DEDUE3 ;TANTS .BYTE 2,0 JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES TST @#DEDID+2 ;2 DISPLAYS ARE UP? BEQ DETBE1 ;NO, --(ERR)GT40 BUF NEEDS EXCEEDED .IFDF RT11$ MOV @#DEDBCB,R0 ;GET DISPLY BUFFR ADDR .INSRT ;TELL GRAPHICS ABOUT IT MOV #DEGFCJ, CMP #177777,@#DECMD ;A BUFR WAS SPECIF? BEQ DETB2 ;NO CMP @#DECMD,@#DEDID ;B(TYPE &#) SAME AS DEDID? BEQ DETB1 ;YES R0 ;GET ADDR OF BUFS FOR ;FREE CUR, LINES ,ETC .INSRT ;TELL GRAPHICS ABOUT IT .ENDC JSR PC,@#DEGTON ;TURN GT40 ON CMP @#DECMD,@#DEDID+2 ;B(TYPE &#) SAME AS DEDID+2? BNE DETBE2 ;NO, 'B' NOT DISPLAYED--(ERR) MOV @#DEDID+2,R1 ;YES--SWITCH .ENDC MOV DEDUD0,@#DEDID ;ENABLE DEFAULT-DATA-EDITOR-CMDS MOVB #2,@#DEFLG1 ;INITIALLY SET FOR 'DOV' TST DEDUFL ;'DOV' ? DEDID & DEDI2+2 MOV @#DEDID,@#DEDID+2 MOV R1,@#DEDID MOV @#DELST+2,R1 ;AND--SWITCH DELST & DELST+2 MOV @#DELST,@#DELST+2 BEQ DEDU29 ;YES INCB @#DEFLG1 ;NO, 'SPLIT' (FLG=3) DEDU29: .IFDF GT40$ MOVB #-1,@#GTRCAL TSTB @#DEGIDF BNE DEDU30 MOV R1,@#DELST DETB1: CLR @#DEONE+2 ;DISPLAY CMDS USE ONLY B BR DETB4 DETB2: CMP @#DELST,#DEDIT1 ;DELST HOLD I/O TBL ADDR TSTB @#DEGFXF BEQ DEDU31 DEDU30: TST (SP)+ JMP @#DECDID .ENDC DEDU31: RTS PC ;ALL DONE! ;ERRORS DEDUE3: MOV #22 #1? BEQ DETB3 ;YES MOV @#DEDID+2,R1 ;NO--SWITCH DEDID & DEDID+2 MOV @#DEDID,@#DEDID+2 MOV R1,@#DEDID MOV @#DELST+2,R.,R0 ;BUFR NEEDS DEDUEE: TST (SP)+ ;GET NORMAL RTN OFF STACK JMP @#DEFORE ;CMD LIST USED BY 'QA' TO FIND OPTION NEW OR O1 ;AND--SWITCH DELST & DELST+2 MOV @#DELST,@#DELST+2 MOV R1,@#DELST DETB3: MOV @#DELST+2,@#DEONE+2 ;DISPLAY CMDS USE BOTH LD DEDUAD: .BYTE 3,1,'N,'O,0 .EVEN .ENDC ;---BUFFER DESIGNATE COMMAND--- .IFDF SPDTB$ .IFDF CAPS$ .GLOBL DEEOLDETB4: MOV @#DELST,@#DEONE RTS PC ;ERROR DETBE1: MOV #33.,R0 ;DUAL DISPLY NEEDED BR DETBEE DETBE2: MOV #34.,R0 ;BUF .ENDC .GLOBL DETOPB,DEDID,DECMD,DELST,DEONE,DEDIT1,DEFORE,DETLE ;ROUTINES CALLED: DEFORE,DETLE,DEEOL ;---DTB [B]--- ;R IS NOT DISPLYED DETBEE: TST (SP)+ ;GET NORMAL RTN OFF STACK JMP @#DEFORE .ENDC ;---BUFFER ALIGN COMMAND--- .IFDF SIF TWO DISPLAYS ARE UP, THIS CMD DESIGNATES EITHER ONE ;OF THE TWO BUFFERS (B1 OR B2) TO BE USED FOR ;THE DEFAULT-DISPLAY-DATAPBAL$ .IFDF CAPS$ .GLOBL DEFXCU,DEEOL .ENDC .GLOBL DEALGN,DECMD,DEDID,DELST,DISST,DEDATA .GLOBL DEGET,DEPUT,DEFORE,DETL-EDITOR-CMDS AND FOR THE ;DISPLAY MODULES'S CMDS. ;IF B IS NOT SPECIFIED, BOTH DISPLAYS WILL BE AFFECTED ;BY THE DISPLAY MODUE ;ROUTINES CALLED: DEGET,DEPUT,DEFORE,DEFXCU,DETLE,DEEOL ;---BAL [B]--- ;THIS CMD ASSUMES DUAL DISPLAYS. ;CASE1(FIXED C DEAL4: MOV @#DEDID+2,@#DECMD JSR PC,DEFXCU ;GET LEFT CURSOR POSITION 2ND DISP MOV R4,DELF2 ;CURSORS OF 2ND DISPLAY UP? BM BLO DEROT3 ;NO SUB @#DEDATA,R0 ;YES,INDEX=INDEX-BUFSIZ DEROT3: CMP R0,R2 ;LOOPED BAK ONTO AN 'OLD' DATUM? BNE DEROT4I DEAL5 ;NO INC R3 ;YES BR DEAL6 DEAL5: DEC R3 DEAL6: BEQ DEALE2 ;R3=0--(ERR-CURSORS 'UP & DOWN') BPL DEAL7 ;R3=2 (C ;NO INC R2 ;YES, CHANGE "BEGIN PT" MOV DEOLD+2,-(SP) MOV DEOLD,-(SP) JSR R5,@#DEPUT ;FILL IN EMPTY SLOT IN B DECURSORS 'UP' ON BOTH) MOV @#DELST,R1 ;R3=-2 (CURSORS 'DOWN' ON BOTH) MOV DISST(R1),DELF1 ;(START-1) OF 1ST DISPLAY MOV @#DEMD DEC R3 ;DN YET? BNE DEROT1 ;NO BR DEROT5 ;YES DEROT4: JSR R5,@#DEGET ;GET DATUM & SAV IT IN 'NEW' DECMD MOVLST+2,R1 MOV DISST(R1),DELF2 ;(START-1) OF 2ND DISPLAY ;AT THIS POINT R2=0 (1ST DISPLAY IS B) OR =1(2ND DISPLAY IS B) ;'DE (SP)+,DENEW MOV (SP)+,DENEW+2 MOV DEOLD+2,-(SP) MOV DEOLD,-(SP) ;PUT DATUM(SAV IN 'OLD') INTO JSR R5,@#DEPUT ;THE JUSLF1' HOLDS LEFT CURSOR POSTION OF 1ST DISPLAY OR (START-1) ;'DELF2' " " " " " 2ND " " " DEAL7: MT VACATED SLOT DECMD MOV DENEW,DEOLD MOV DENEW+2,DEOLD+2 ;OLD=NEW DEC R3 ;DN YET? BNE DEROT2 ;NO DEROT5: RTS PC ES ; THE SAME BUFFER POSITION AS THE 1ST DISPLAYED PT OF THE ; OTHER BUFFER. ;B DEFAULTS TO THE 1ST ENTRY OF 'DEDID'. ;IF CUOV DELF2,R1 SUB DELF1,R1 ;#ROTATES=DELF2-DELF1 TST R2 ;'B' IS 1ST DISPLAY? BEQ DEAL8 ;YES NEG R1 ;NO, #ROTATES=DELF1-RSORS ARE UP ON ONE DISPLAY, BUT DOWN ON THE OTHER ;AN ERROR IS RETURNED. DEALGN: JSR R5,DEEOL ;CHK EXCESS BUFRS/CONSTANTS DELF2 MOV @#DEDID+2,@#DECMD ;SET UP 'DECMD' FOR 'DEROT' BR DEAL9 DEAL8: MOV @#DEDID,@#DECMD ;SET UP 'DECMD' FOR 'DEROT' DE .BYTE 2,0 JSR PC,@#DETLE ;CHK OTHER CMD STRING EXCESSES TST @#DEDID+2 ;DUAL DISPLAYS? BNE DEAL0 ;YES MOV #33.,R0 JMPAL9: TST R1 BEQ DEAL10 ;#ROTATES=0--THUS RETURN BPL DEAL11 ;#ROTATES>0 ADD @#DEDATA,R1 ;#ROTATES<0- R1=BUFSIZ+#ROTATES DEALEE ;NO--(ERR) DEAL0: CMP #177777,@#DECMD ;'B' WAS SPECIF? BNE DEAL1 ;YES MOV @#DEDID,@#DECMD ;B DEFAULTS TO 'DEDID' DEAL11: JSR PC,DEROT DEAL10: RTS PC ;GIVEN A CIRCULAR BUFFER OF 'N' DATUMS, ROTATE THE ;DATA 'M' DATUM POSITIONS FROM LOW TO DEAL1: CLR R2 ;R2 TELLS WHICH DISPLAY IS 'B' CMP @#DECMD,@#DEDID ;'B' IS 1ST DISPLAY? BEQ DEAL2 ;YES (R2=0) CMP @#DECMD HIGH CORE ;N=BUFFER SIZE, M IS IN R1. 'M' MUST BE <='N'. ;CIRCULAR BUFFER IS DESIGNATED BY DECMD ; R0=INDEX FOR DEGET & DEPU,@#DEDID+2 ;'B' IS 2ND DISPLAY? BNE DEALE1 ;NO--( ERR) INC R2 ;YES (R2=1) ;FIX CURSORS 'UP' OR 'DOWN' FOR 'BOTH' DISPLAT ; R1=#ROTATES ; R2=USED TO TELL WHENEVER "THE ROTATE" LOOPS BACK ONTO ITSELF ; R3=DATASIZE (DN CTR) DEROT: MOV @#DEDATA,YS? DEAL2: CLR R3 ;R3 TELLS IF BOTH ARE 'UP' OR 'DOWN' MOV @#DEDID,@#DECMD ;'DEFXCU' NEEDS B IN DECMD JSR PC,DEFXCU ;GETR3 ;DNCTR=BUFSIZ CLR R2 ;BEGIN WITH 1ST PT DEROT1: MOV R2,R0 ;GET NEW BEGIN PT JSR R5,@#DEGET ;GET DATUM FROM B DEC LEFT CUR POS OF 1ST DISP. MOV R4,DELF1 ;CURSORS OF 1ST DISPLAY UP? BMI DEAL3 ;NO INC R3 ;YES BR DEAL4 DEAL3: DEC R3 MD MOV (SP)+,DEOLD MOV (SP)+,DEOLD+2 ;SAV IT DEROT2: ADD R1,R0 ;BMP INDEX BY #ROTATES CMP R0,@#DEDATA ;INDEX>BUFSIZ? E NOT ACTIVE ;OR BUFR NOT DISPLYED CMP @#DECMD,@#DEDID ;IS B ONE OF THE DISPLY BUFS? BNE DEFXC1 ;NOT SO FAR MOV @#DE.TITLE SPCOM1 ;LAB APPLICATIONS-11 ;DEC-11-SLABA-C-LA ;FILE ID SPCOM1.1 ;FILE: SPCOM1.MAC ;COPYRIGHT (C) 1974,1975 ;DIGILST,R1 ;YES BR DEFXC2 DEFXC1: CMP @#DECMD,@#DEDID+2 BNE DEFX1 ;NO MOV @#DELST+2,R1 DEFXC2: TSTB DISCU(R1) ;WE'LL SEE IFTAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ;SINGLE COMPUTER SYS CURSORS ARE ACTIVE. BEQ DEFX1 ;THE'RE NOT ACTIVE MOV DIST(R1),R0 ;GET T SUB DISXC1(R1),R0 ;(T-XC1) =R0 MOV DISN(R1),R5TEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES ;THEREOF, MAY ;N =R5 JSR PC,@#MULT ;(T-XC1)*N =R5 ADD DISST(R1),R5 ;ST+(T-XC1)*N MOV R5,R4 ;SAVE 'START LOC' IN R4 MOV DISXC1(R1),R0 NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES ;TO THES ;XC1 SUB DISXC2(R1),R0 ;XC1-XC2=R0 MOV DISN(R1),R5 ;N=R5 JSR PC,@#MULT ;(XC1-XC2)*N=R5 ADD R4,R5 ;ST+(T-XC2)*N='END LOE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THE INFORMATION IN THIS DOCUMENTC' DEFX1: RTS PC ;DONE RTN .ENDC .IFDF SPPWR$!SPDNO$!SPBMM$!SPSAD$!SPBDE$!SPBIN$!SPBST$!SPBSM$ ;---DEOPBU--- ;THIS SU IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;DEC ABROUTINE IS CALLED BY ANY DATA EDITING FUNCTION,ALL OF WHOSE ;BUFRS(1 OR 2) MAY BE OPTIONAL. ;IF B1 IS NOT SPECIFIED,IT DEFAULSSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ;LDP SOFTWARTS TO 1ST ENTRY OF 'DEDID'. ;IF'DEDID' IS EMPTY (NO DISPLY IS UP),THEN ERROR. ;B2 DEFAULTS TO B1 .GLOBL DECMD,DEDID,DEFORE ;YES ;ERRORS DEALE1: MOV #34.,R0 ;BUFR NOT DISPLYED BR DEALEE DEALE2: MOV #35.,R0 ;CURSOR ERROR DEALEE: TST (SP)+ ;E DEVELOPMENT, 1974-5 ; CARL RALSTON .IFDF SPPWR$!SPBMM$!SPBIN$!SPBST$!SPBAL$ .GLOBL MULT,DECMD,DEDID,DELST .GLOBL DISSTGET NORMAL RETURN OFF STACK JMP @#DEFORE ;TAGS USED DELF1: ;LEFT CUR POS OR(ST-1) OF 1ST DISPLAY DEOLD: 0,0 ;TEMP ST,DISN,DIST,DISCU,DISXC1,DISXC2 ;ROUTINES CALLED: MULT ;---DEFXCU--- ;FIRST DETERMINE WHICH I/D TBL IS USED TO DISPLY THE ORAGE FOR 'DEROT' DELF2: ;LEFT CUR POS OR(ST-1) OF 2ND DISPLAY DENEW: 0,0 ;TEMP STORAGE FOR 'DEROT' .ENDC BUFR POINTED TO ;BY'DECMD'AND PUT IT IN R1. IF THIS BUFR IS NOT A DISPLAYABLE BUFR ;RETURN R4=-1 ;CONVERT THE FIXED CURSOR VALUES XC1 & XC2 OF ;A GIVEN I/D TBL TO THE ACTUAL LOCATION WITHIN THE ;BUFFER. APPLIES ONLY TO SNGL WD Y-DATA. ;ON RETURN, R4=START LOC AND R5=END LOC (START LOC=0 FOR 1ST PT) ;IF CURSORS ARE INACTIVE, R4=-1. DEFXCU: MOV #177777,R4 ;MAYBE CURSORS ARDEOBE1: CMP (SP)+,(SP)+ ;POP 2 RETURNS OFF STACK MOV #4,R0 JMP @#DEFORE .ENDC +2'. ;IT ALSO PUTS THE SCA FAC IN ADDR+0,+2 WHOSE ;ENTRY ADDR IS PASSED VIA R5 DEADJ: MOV R5,-(SP) ;SAV ADDR FOR SCA FAC MOV #DECMD,R1 ;ADR OF 'TYPE/#' FOR B MOV @#DEDATA,R5 ;DATASIZE DEC R5 ;(#PTS-1) TO SEARCH FOR MAX-MIN CLR R0 ;ST.PT OF S.TITLE SPCOM2 ;LAB APPLICATIONS-11 ;DEC-11-SLABA-C-LA ;FILE ID SPCOM2.1 ;FILE: SPCOM2.MAC ;COPYRIGHT (C) 1974,1975 ;DIGIEARCH=0 JSR PC,@#DEMXMN ;MAX (R1,R2), MIN (R3,R4) JSR PC,@#DESCA MOV (SP)+,R5 ;RESTORE S.P. ASSIGN ENTRY ADDR MOV R1,(R5TAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ;SINGLE COMPUTER SYS) ;FL.PT. SCA. FACTOR MOV R2,2(R5) MOV R3,4(R5) MOV R4,6(R5) ;FL.PT. OFFSET ;NOW SCALE THE DATA DOWN---SCALED DATA=(DATUTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES ;THEREOF, MAYM-OFFSET)*SCA FAC MOV @#DEDATA,DEDICT ;DN CTR CLR R0 DEDI4: MOV R0,(PC)+ DEDICT: 0 ;DN CTR (TRANSF F.P. TO S.P.) JSR NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES ;TO THES PC,@#SAVARG MOV R2,-(SP) MOV R1,-(SP) ;FL.PT.SCA.FAC. JSR R5,@#DEGET DECMD ;GET DATUM MOV R4,-(SP) MOV R3,-(SP) ;E LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THE INFORMATION IN THIS DOCUMENTGET OFFSET JSR R4,@#$POLSH $SBR,$MLR,.+2 ;(DATUM-OFFSET)*SCA FAC MOV DEDIR0,R0 JSR R5,@#DEPUT DECMD+2 ;PUT DATUM AW IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;DEC AAY JSR PC,@#RSTARG INC R0 DEC (PC)+ DEDIR0: 0 ;SV INDEX VAL FOR 'DEGET & DEPUT' BNE DEDI4 RTS PC .ENDC ;---DEFSSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ;LDP SOFTWARLCK--- ;THIS ROUTINE CHECKS THE OUTPUT BUFR POINTED TO BY 'DECMD+2' TO SEE ;IF IT IS BEING DISPLAYED ;IF IT IS,A FURTHER CHEE DEVELOPMENT, 1974-5 ; CARL RALSTON .IFNDF SPNDI$ .GLOBL DECMD,DEDATA,$POLSH,$MLR,$CMR,DEGET,DEPUT,DEDID,DEASGN .GLOBL $DCK IS MADE TO SEE IF IT IS A F.P. BUFR ;AND IF SO, THE DATA IN THE F.P. BUFR IS MOVED TO THE ;ASSOC 'ASSIGNED S.P. BUFR' ONCE VR,$SBR,SAVARG,RSTARG,DENORM .IFDF GT40$ .GLOBL GTRCAL,DELST,DISMPO .ENDC ;ROUTINES CALLED:DEMXMN,DESCA,DEGET,DEPUT,$POLIT IS SCALED DOWN ;THIS APPLIES TO 'VR14' DISPLAY. ;IF GT40 DISPLAY A FLAG IS SIMPLY SET TO TELL GT40 DISPLY ROUTINE TO ;RECA DEOPBU: TST @#DECMD BPL DEOPB1 ;B1 IS SPECIF MOV @#DEDID,@#DECMD ;B1 IS NOT SPECIF BEQ DEOBE1 ;'DEDID' IS EMPTY(ERSH ; SAVARG,RSTARG,DEADJ ;GT40$- IF DEFINED WILL ASSEMBLE CODE NEEDED FOR GT40 VERSION ;OF DATA EDITOR ;---DEADJ--- ;R) DEOPB1: TST @#DECMD+2 BPL DEOPB2 ;BE IS SPECIF MOV @#DECMD,@#DECMD+2 ;B2 DEFAULTS TO B1 DEOPB2: RTS PC ;ERRORS THIS ROUTINE SCALES DATA POINTED TO BY 'DECMD' DOWN BY THE SCALE ;FACTOR IN R1,R2 AND STORES IT IN A BUFR POINTED TO BY 'DECMDECMD,@#DEASGN ;IS IT THE 1ST ENTRY? BNE DEFLC2 ;NO, THE 2ND MOVB @#DEASGN+1,@#DECMD+2 ;YES, '#' OF B2 IS SET TO 1ST ENTRYS VAL OF MIN ON STACK JSR R4,@#$POLSH $CMR,.+2 BPL DESCA4 ;/MAX/>=/MIN/ JSR PC,@#RSTARG ;/MIN/ > /MAX/ MOV R3,R1 MOLCULATE ITS DISPLAY BUFR WHENEVER THE BUFR IN QUESTION ;IS BEING DISPLAYED. ;THE MULT & OFFSET IS CALC & STUCK IN THE CORRECT MOV #DEASGN+2,R5 ;R5=ADDR+2 IF 1ST ASSIGN ENTRY BR DEFLC3 DEFLC2: MOVB @#DEASGN+13,@#DECMD+2 ;'#' OF B2 IS SET TO 2ND ENTASSIGN TBL ENTRY ;AND IN THE CORRECT I/D TBL. .GLOBL DECMD,DEDID DEFLCK: CMP @#DECMD+2,@#DEDID ;BUFR IS BEING DISPLYED? RY MOV #DEASGN+14,R5 ;R5=ADDR+2 OF 2ND ASSIGN ENTRY DEFLC3: JSR PC,@#DEADJ ;CALL 'DEADJ'--DO SCALE .ENDC DEFLC4: RTS PC BEQ DEFLC1 ;YES--IT IS THE 1ST ENTRY CMP @#DECMD+2,@#DEDID+2 ;MAYBE ITS THE 2ND ENTRY BNE DEFLC4 ;BUFR IS NOT BEING DIS .IFNDF SPNDI$ ;---DESCA--- ;CALL: JSR PC,DESCA ;INPUT: R1=H.ORD OF MAX VAL, R2=L.ORD OF MAX VAL ; R3=H.ORD OF MIN VAL, R4PLAYED! DEFLC1: .IFDF GT40$ INCB @#GTRCAL ;TELL GT40 TO RECALC BUFR TSTB @#DECMD+3 BEQ DEFLC4 ;BUFR IS SP! MOV #DECM=L.ORD OF MIN VAL ;FUNCTION: ; IF MAX>MIN>=0, OFFSET=MIN, MULT=DENORM/(MAX-MIN) ; IF MIN=0? BPL DESCA1 ;YES MOV R2,-(SP) ;,@#DEDID ;B2 IS 1ST DISPLY ? BNE DEFLC3 ;NO MOV @#DELST,R0 ;YES, ADDR OF 1ST I/D TBL BR DEFLC5 DEFLC3: MOV @#DELST+2,RNO, PUT OFFSET(MAX) ON STACK MOV R1,-(SP) BR DESCA2 DESCA1: TST R3 ;MIN VAL >= 0? BMI DESCA3 ;NO MOV R4,-(SP) ;YES, P0 ;ADDR OF 2ND I/D TBL DEFLC5: ADD #DISMPO,R0 ;INDEX FOR STORING: MOV R1,(R0)+ ;'MULT' IN I/D TBL MOV R2,(R0)+ MOV R3,UT OFFSET(MIN) ON STACK MOV R3,-(SP) DESCA2: MOV @#DENORM+2,-(SP) ;PUT DENORM ON STACK MOV @#DENORM,-(SP) MOV R2,-(SP) ;P(R0)+ ;'OFFSET' IN I/D TBL MOV R4,(R0) MOV R1,(R5)+ ;ALSO SAV 'MULT' IN ASIGN TBL MOV R2,(R5)+ MOV R3,(R5)+ ;AND 'OFFUT MAX ON STACK MOV R1,-(SP) MOV R4,-(SP) ;PUT MIN ON STACK MOV R3,-(SP) JSR R4,@#$POLSH ;MULT=DENORM/(MAX-MIN) $SBR,$SET' IN ASSIGN TBL MOV R4,(R5) .ENDC .IFDF VR14$ TSTB @#DECMD+3 BEQ DEFLC4 ;BUFR IS S.P. MOV @#DECMD+2,@#DECMD ;F.DVR,.+2 BR DESCA6 DESCA3: CLR -(SP) ;PUT OFFSET(0) ON STACK CLR -(SP) BIC #100000,R1 ;ABS VAL OF MAX BIC #100000,R3 ;AP. BUFR IS B1 FOR 'DEADJ' CLR @#DECMD+2 ;'TYPE' OF B2 IS SET FOR S.P. ;NOW TO FIND THE ASSOC 'ASSIGNED S.P. BUFR' CMPB @#DBS VAL OF MIN JSR PC,@#SAVARG MOV R2,-(SP) MOV R1,-(SP) ;PUT ABS VAL OF MAX ON STACK MOV R4,-(SP) MOV R3,-(SP) ;PUT ABP),R1 MOV (SP)+,R3 ;MAXVAL: R1=H.ORD,R2=L.ORD MOV (SP),R2 ;MINVAL=MAXVAL TO START WITH MOV (SP)+,R4 TST R5 BEQ DEMMD1,R0 INC (R0) ;TOO MANY CONSTANTS? BEQ DEEOL3 ;NO MOV #53.,R0 ;YES DEEOL2: JMP @#DEFORE DEEOL3: RTS R5 .END N5 DEMMN1: INC R0 ;BMP BUF INDEX PTR JSR PC,@#SAVARG ;POLSH DONT SAV REGS. JSR R5,@#DEGET ;GET NXT DATUM DEMMX2: 0 ;PTR TO 'TYPE/#' OF B MOV (SP)+,DEMMSV ;SAVE FL.PT. RESULT MOV (SP),DEMMSV+2 ; ALSO MOV DEMMSV,-(SP) ;LEAVE RESULT ON STACK. .TITLE SPCOM3 ;LAB APPLICATIONS-11 ;DEC-11-SLABA-C-LA ;FILE ID SPCOM3.1 ;FILE: SPCOM3.MAC ;COPYRIGHT (C) 1974,1975 ;DIGI MOV R2,-(SP) ;PUT MAXVAL ON STACK MOV R1,-(SP) JSR R4,@#$POLSH ;DO A COMPARE OF $CMR,.+2 ;MAXVAL WITH CURRENT VALUE BMTAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ;SINGLE COMPUTER SYSV R4,R2 ;PUT GREATER OF 2 ABS VALS IN R1,R2 BR DESCA5 DESCA4: JSR PC,@#RSTARG ;GREATER OF 2 ABS VALS ALREADY IN R1,R2 DESCAI DEMMN2 ; CURRENT VALUE= MAXVAL MOV DEMMSV+2,R2 ;REPLACE MAXVAL 5: MOV @#DENORM+2,-(SP) MOV @#DENORM,-(SP) ;PUT 'DENORM' ON STACK MOV R2,-(SP) MOV R1,-(SP) ;PUT LARGER OF 2 ABS VALS ON SBR DEMMN4 DEMMN2: JSR PC,@#RSTARG ;POLSH DESTROYS REGS. JSR PC,@#SAVARG MOV DEMMSV+2,-(SP) ;PUT CURRENT VALUE BACK MOV DETACK JSR R4,@#$POLSH ;'DENORM'/(MAX-MIN) IF POS-NEG DATA $DVR,.+2 ;OR DESCA6: MOV (SP)+,R1 MOV (SP)+,R2 ;RTNED IN R1,R2 MMSV,-(SP) ;ON STACK MOV R4,-(SP) ;PUT MINVAL ON STACK MOV R3,-(SP) JSR R4,@#$POLSH ;DO A COMPARE OF $CMR,.+2 ;MINVAL W= MULT MOV (SP)+,R3 MOV (SP)+,R4 ;RTNED IN R3,R4 = OFFSET RTS PC DESCA7: MOV #40200,R1 ;MULT=1 CLR R2 CLR R3 ;OFFSETITH CURRENT VALUE BPL DEMMN3 ; CURRENT VALUE >= MINVAL JSR PC,@#RSTARG ;CURRENT VALUE < MINVAL MOV DEMMSV,R3 ;REPLACE MIN=0 CLR R4 RTS PC .ENDC ;---DEMXMN--- ;CALL: JSR PC,DEMXMN ; ADR OF 'TYPE/#' OF BUF IN R1 ; ST.PT. WITHIN BUF IN VAL MOV DEMMSV+2,R4 BR DEMMN4 DEMMN3: JSR PC,@#RSTARG DEMMN4: DEC R5 ;DECR 'DONE CTR' BGT DEMMN1 ;NOT DONE YET DEMMN5R0, USED BY 'DEGET' ; (#PTS-1) TO SEARCH IN R5 ; ;THIS ROUTINE FINDS THE MAX /MIN VALUES OF A ;BUFFER GIVEN THE STARTIN: RTS PC ;BYE,BYE DEMMSV: 0,0 ; ---DEEOL--- ; CALL: JSR R5,DEEOL ; .BYTE A,B WHERE A= AN OFFSET TO 'DECMD' ; AND BG PT AND # PTS TO SEARCH ;IN THE BUFFER. R0-R5 ARE NOT SAVED. ;MAXVAL IS IN R1,R2 AND MINVAL IS IN R3,R4 ON RTN. .GLOBL SA=AN OFFSET TO DECMD1 ; THE PURPOSE OF THIS ROUTINE IS TO CHECK IF USER ENTERED TOO ; MANY BUFRS AND/OR CONSTANTS AS PART OF A VARG,RSTARG,DEGET,$POLSH,$CMR .GLOBL DEFORE,DECMD,DECMD1 ;ROUTINES CALLED: SAVARG,RSTARG,DEGET,$POLSH,DEFORE DEMXMN: MOV CMD STRING DEEOL: MOVB (R5)+,R0 ;GET OFFSET TO 'DECMD' ADD #DECMD,R0 INC (R0) ;TOO MANY BUFRS? BEQ DEEOL1 ;NO MOV #R1,DEMMX1 ;TYPE/# OF B MOV R1,DEMMX2 ;TYPE/# OF B JSR R5,@#DEGET ;GET 1ST/ DATUM DEMMX1: 0 ;PTR TO 'TYPE/#' OF B MOV (S52.,R0 ;YES BR DEEOL2 DEEOL1: MOVB (R5)+,R0 ;GET OFFSET TO 'DECMD1' BMI DEEOL3 ;IF NEG, OMIT THIS PART OF CHK ADD #DECMDEFLG1 .GLOBL DELST,DEPOTS,DEPOT1,DEPOT2,DEPOT3,DEDID,$POLSH .GLOBL $SBR,$DVR,MULT,FLOAT,DECMD1,DEDXSZ,DEFORE .GLOBL DISOFY,DFER TSTB @#DEDID+1 ;DISPLAYING A F.P. BUF? BEQ DEFR3 ;NO CMPB @#DEDID,@#DEASGN ;GET CORRECT ENTRY OF ASSIGN TBL BEQ DIST,DISST,DISSC,DEDYSZ,$IR,$RI,$ADR ;ROUTINES CALLED: MULT,DIVR,FLOAT,$POLSH,SAVARG,RSTARG,DEGET ; DEFORE ;---DEFRCU---EFR1 ;1ST ENTRY MOV #DEASGN+14,DEFRT1 ;2ND ENTRY BR DEFR2 DEFR1: MOV #DEASGN+2,DEFRT1 DEFR2: JSR PC,DEFRS3 ;NOW DO 'SCA ;IF FREE CURSORS ARE ACTIVE, CONVERT THEIR READINGS ;RELATIVE TO THE DISPLAY SPECIFIED BY THE 1ST ENTRY OF 'DELST' ;RETURN XLE BACK #2' ON Y2 MOV (SP)+,DEFRT MOV (SP)+,DEFRT+2 ;SAVE Y2 FOR A MOMENT JSR PC,DEFRS3 ;NOW DO 'SCALE BACK #2' ON Y1 1 IN R0, X2 IN R1, Y1 IN R2,R3, Y2 IN R4,R5 ;IF FREE CURSORS ARE NOT ACTIVE RETURN '100000' IN R0. DEFRCU: MOV #100000MOV DEFRT+2,-(SP) MOV DEFRT,-(SP) ;PUT Y2 BACK ON STACK ;AT THIS POINT THE STACK HOLDS F.P. Y2,Y1 AND S.P. X2,X1 ;IN THAT O,R0 ;MAYBE FREE CURSORS ARE INACTIVE CMP @#DECMD,@#DEDID ;IS B ONE OF THE DISPLY BUFS? BEQ DEFRC1 ;YES CMP @#DECMD,@#DRDER. DEFR3: MOV (SP)+,R4 ;RTN Y2 IN R4,R5 MOV (SP)+,R5 MOV (SP)+,R2 ;RTN Y1 IN R2,R3 MOV (SP)+,R3 MOV (SP)+,R1 ;REDID+2 ;NOT SO FAR BNE DEFR4 ;NO IT ISNOT DEFRC1: TSTB @#DEFLG1+1 BEQ DEFR4 ;THEY ARE INACTIVE MOV @#DELST,R2 ;GET ATN X2 IN R0 MOV (SP)+,R0 ;RTN X1 IN R1 DEFR4: RTS PC ;TAGS USED DEFRT: 0,0 ;HOLDS Y1 TEMPORARILY ; THIS SUBROUTINE CDDR OF 1ST I/D TBL ;TIME TO CALC X1 AND X2 MOV @#DEPOTS,(PC)+ ;POT0 DEFRT1: 0 ;TEMPORARY JSR PC,DEFRS1 MOV DEFRT,-(SALC (WINDOWSIZE)*POT*N/DEDXSZ + ST ; THE POT READING IS PASSED VIA DEFRT1. ; THE RESULT IS LEFT IN DEFRT DEFRS1: MOV DIST(RTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES ;THEREOF, MAYP) ;PUT X1 ON STACK MOV @#DEPOT1,DEFRT1 ;POT1 JSR PC,DEFRS1 MOV DEFRT,-(SP) ;PUT X2 ON STACK MOV R2,R5 ;LET R5=ADDR NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES ;TO THES OF 1ST I/D TBL ;TIME TO CALC Y1 AND Y2 MOV @#DEPOT2,R0 ;R0=POT2 CMP R0,@#DEDYSZ ;POT READING > SCOPE SIZE Y? BLOS DEFRE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THE INFORMATION IN THIS DOCUMENT00 ;NO MOV @#DEDYSZ,R0 ;YES DEFR00: SUB DISOFY(R5),R0 ;R0=Y1-OFFSET (I/D TBL) JSR PC,DEFRS2 ;NOW DO 'SCALE BACK #1' ON IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;DEC A Y1 MOV R1,-(SP) MOV R0,-(SP) ;SAVE Y1 FOR THE MOMENT. MOV @#DEPOT3,R0 ;R0=POT3 CMP R0,@#DEDYSZ ;POT READING > SCOPE SSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ;LDP SOFTWARSIZE Y? BLOS DEFR01 ;NO MOV @#DEDYSZ,R0 ;YES DEFR01: SUB DISOFY(R5),R0 ;R0=Y2-OFSET (I/D TBL) JSR PC,DEFRS2 ;NOW DO E DEVELOPMENT, 1974-5 ; CARL RALSTON .IFDF SPBIN$!SPBST$ .IFNDF SPNDI$ .GLOBL DEASGN,SAVARG,RSTARG,DECMD,$MLR,$ADR,DEGET,'SCALE BACK #1' ON Y2 MOV R1,-(SP) MOV R0,-(SP) ;SAVE Y2 FOR THE MOMENT ;SEE IF WE NEED TO SCALE FURTHER DUE TO A F.P. BUFZE X ON STACK JSR R4,@#$POLSH ;FLOAT IT $IR,$DVR,$MLR,$ADR,$RI,.+2 MOV (SP)+,DEFRT ;SAVE X1 OR X2 TEMP JSR PC,@#RSTARGOAT DX BR DEPVT1 DECMD1 DEPVT1: MOV R0,@#DECMD1 MOV R1,@#DECMD1+2 ;SAVE DX AWAY JSR R4,@#$POLSH $SBR,.+2 ;(Y2-Y1) RTS PC ;THIS SUBROUTINE CALC THE F.P. (POT-OFFSET)*2^(-SCA FAC)---I/D--- ;THE (POT-OFFSET) IS PASSED VIA R0 TO THIS ROUTI MOV @#DECMD1+2,-(SP) MOV @#DECMD1,-(SP) JSR R4,@#$POLSH $DVR,.+2 ;'MPIVOT'=(Y2-Y1)/DX MOV (SP)+,@#DECMD1 MOV (SP)+NE ;THE SCALE BACK F.P. VALUE IS RETN IN R0,R1 DEFRS2: MOVB DISSC(R5),R3 ;GET 'I/D TBL' SCA. FAC. BEQ DEFR12 ;NO SCALING ,@#DECMD1+2 ;SAME AWAY 'MPIVOT' JSR PC,RSTARG ;RSTR R0-R5 MOV R3,-(SP) MOV R2,-(SP) ;PUT 'Y1' BACK ON STACK MOV @#DECM'WAS' DONE BPL DEFR11 ;SCALING UP 'WAS' DONE DEFR10: ASL R0 ;SCALING DOWN 'WAS' DONE INC R3 ;THUS SCALE BACK UP BNED1+2,-(SP) MOV @#DECMD1,-(SP) ;PUT 'MPIVOT' ON STACK MOV R0,@#DECMD1+4 JSR R5,@#FLOAT BR DEPVT2 DECMD1+4 ;FLOAT 'X1 DEFR10 BR DEFR12 DEFR11: ASR R0 ;THUS SCALE BACK DOWN DEC R3 BNE DEFR11 DEFR12: MOV R0,DEFRT1 ;GET READY TO FLOAT TH' DEPVT2: MOV R1,-(SP) MOV R0,-(SP) ;PUT F.P. 'X1' ON STACK JSR R4,@#$POLSH $MLR,$SBR,.+2 MOV (SP)+,@#DECMD1+4 MOV (E VALUE. JSR R5,@#FLOAT BR DEFR13 DEFRT1 DEFR13: RTS PC ;THIS SUBROUTINE CALC F.P. (YVAL/SCA)+OFFSET---ASSIGN--- ;'DESP)+,@#DECMD1+6 ;SAV AWAY BPIVOT RTS PC ;ERRORS DEPVE1: MOV #25.,R0 ;CURSORS HAVE SAME X-POSITION CMP (SP)+,(SP)+ ;FRT1' HOLDS PTR TO CORRECT ASSIGN TBL SCA FAC ;YVAL IS ON TOP OF STACK DEFRS3: MOV (SP)+,DEFRS4+2 ;LET YVAL STILL BE ON TOP POP 2 RETURNS OFF STACK JMP @#DEFORE .ENDC ;---DESTRP--- ;GIVEN R0 (INDEX FOR DEGET & DEPUT) WHERE R0=0,1,2,... ;CALC Y MOV DEFRT1,R0 MOV 2(R0),-(SP) MOV (R0),-(SP) ;PUT SCA FAC ON STACK JSR R4,@#$POLSH $DVR,.+2 MOV DEFRT1,R0 MOV 6(R0(R0)=Y(R0)-(MPIVOT*X(R0)+BPIVOT). ;THIS GIVES THE DATA VALUE MINUS THE PIVOT LINE VALUE. ;THE NEW Y(R0) IS STORED DECMD1+14,DE),-(SP) MOV 4(R0),-(SP) ;PUT OFFSET ON STACK JSR R4,@#$POLSH $ADR,.+2 DEFRS4: JMP @#0 ;---DEPVOT-- ;THIS ROUTINE IS CMD1+16 .GLOBL SAVARG,DECMD1,DEGET,FLOAT,$POLSH,$MLR .GLOBL $ADR,$SBR,RSTARG,DECMD DESTRP: JSR PC,SAVARG ;SAVE R0-R5 TILCALLED IMMEDIATELY AFTER THE FREE CURSOR ;ROUTINE IS CALLED. THE SLOPE (MPIVOT) AND INTERCEPT (BPIVOT) ;OF THE LINE PASSING TL RETURN MOV R0,@#DECMD1+12 ;SAVE R0 FOR CURRENT USE JSR R5,@#DEGET DECMD ;GET Y(I) FROM B1 ONTO STACK MOV @#DECMD1+2),R5 ;WINDOWSIZE MOV DISN(R2),R0 ;N JSR PC,@#MULT MOV R5,DEFRT ;N*WINDOW JSR PC,@#SAVARG MOV DISST(R2),-(SP) ;PUTHRU THE 2 FREE CURSORS ARE CALC ;AND RETURNED IN DECMD1,DECMD1+2(MPIVOT) & DECMD1+4,DECMD1+6(BPIVOT) ;ON IMPUT, X1 (R0), X2(R1 START ON STACK JSR R4,@#$POLSH $IR,.+2 ;FLOAT IT MOV DEFRT1,-(SP) ;PUT POT ON STACK JSR R4,@#$POLSH $IR,.+2 ;F), Y1(R2,R3), Y2(R4,R5) DEPVOT: SUB R0,R1 ;R1=DX BEQ DEPVE1 ;DX=0 (BAD!) JSR PC,@#SAVARG ;SAV R0-R5 MOV R5,-(SP) LOAT IT MOV DEFRT,-(SP) ;PUT (N*WINDOW) ON STACK JSR R4,@#$POLSH $IR,.+2 ;FLOAT IT MOV @#DEDXSZ,-(SP) ;PUT SCOPE SI MOV R4,-(SP) ;PUT Y2 ON STACK MOV R3,-(SP) MOV R2,-(SP) ;PUT Y1 ON STACK MOV R1,@#DECMD1 ;SAV DX JSR R5,@#FLOAT ;FL6,-(SP) MOV @#DECMD1+4,-(SP) ;GET 'BPIVOT' ONTO STACK MOV @#DECMD1+2,-(SP) MOV @#DECMD1,-(SP) ;GET 'MPIVOT' ONTO STACK E DEVELOPMENT, 1974-5 ; CARL RALSTON .IFDF SPPWR$!SPDNO$!SPBMM$!SPBIN$ .GLOBL SAVARG,RSTARG,$POLSH,$CMR,$MLR ;ROUTINES CJSR R5,@#FLOAT ;R0=DECMD1+12=X(I) BR DESTR1 DECMD1+12 DESTR1: MOV R1,-(SP) MOV R0,-(SP) ;PUT X(I) ONTO STACK JSR R4,@ALLED: $POLSH,SAVARG,RSTARG ;---DEFMCK--- ; THIS ROUTINE CALC THE # OF DECIMAL PLACES FOR A ; NUMBER ('DEFMK0'). 0.LE.N.LT.#$POLSH $MLR,$ADR,$SBR,.+2 ;Y(I)=Y(I)-(MPIVOT*X(I)+BPIVOT) MOV (SP)+,@#DECMD1+14 MOV (SP)+,@#DECMD1+16 ;RETURN STRIPPED Y10 IS OUTPUT AS X.XXXXX, ; 10.LE.N.LT.100 IS OUTPUT AS XX.XXXX ETC. ; LIM =10,100,1000,ETC DEFMCK: JSR PC,@#SAVARG MOV #5(I) JSR PC,RSTARG RTS PC .ENDC ,(PC)+ ;SET #DEC.PL.=5 DEFMK1: 0 CLR -(SP) MOV #41040,-(SP) ;PUT 10. ON STACK MOV 2(SP),-(SP) MOV 2(SP),-(SP) ;COPY IT FOR LIM, STACK=LIM,10. DEFMK2: MOV 2(SP),-(SP) MOV 2(SP),-(SP) ;COPY LIM,STACK=LIM,LIM,10. MOV DEFMK0+2,-(SP) MOV DEFMK0,-(SP) ;PUT NUMBER ON STACK BIC #100000,(SP) ;KEEP # POSITIVE JSR R4,@#$POLSH ;CMP LIM,N AND BRANCH $CMR,.+2 ;IF L.TITLE SPFMCK ;LAB APPLICATIONS-11 ;DEC-11-SLABA-C-LA ;FILE ID SPFMCK.1 ;FILE: SPFMCK.MAC ;COPYRIGHT (C) 1974,1975 ;DIGIIM.GT.N BGT DEFMK3 DEC DEFMK1 ;SET #DEC.PL. =1LESS BEQ DEFMK3 ;DONE IF 0 DEC.PL. MOV 2(SP),-(SP) MOV 2(SP),-(SP) TAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ;SINGLE COMPUTER SYS;COPY LIM MOV 12(SP),6(SP) MOV 10(SP),4(SP) ;COPY 10. JSR R4,@#$POLSH ;MULT LIM*10.=LIM $MLR,.+2 ;STACK=LIM,10. BRTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES ;THEREOF, MAY DEFMK2 DEFMK3: ADD #10,SP JSR PC,@#RSTARG RTS PC DEFMK0: 0,0 .ENDC NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES ;TO THES.TITLE SPMXMN ;LAB APPLICATIONS-11 ;DEC-11-SLABA-C-LA ;FILE ID SPMXMN.1 ;FILE: SPMXMN.MAC ;COPYRIGHT (C) 1974,1975 ;DIGIE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THE INFORMATION IN THIS DOCUMENTTAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ;SINGLE COMPUTER SYS IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;DEC ATEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES ;THEREOF, MAYSSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ;LDP SOFTWAR NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES ;TO THESNXT DATUM DEMMX2: 0 ;PTR TO 'TYPE/#' OF B MOV (SP)+,DEMMSV ;SAVE FL.PT. RESULT MOV (SP),DEMMSV+2 ; ALSO MOV DEMMSV,-(SP) ;LEAVE RESULT ON STACK. MOV R2,-(SP) ;PUT MAXVAL ON STACK MOV R1,-(SP) JSR R4,@#$POLSH ;DO A COMPARE OF $CMR ;MAXVAL.TITLE FFTLNK FFT LINKAGE ;LAB APPLICATION-11 FFT LINKAGE SUBROUTINE ;DEC-11-SLABA-C-LA10 ;FILE SPFFTL.MAC ;FILE ID SPFFTL. WITH .+2 ;CURRENT VALUE BMI DEMMN2 ; CURRENT VALUE= MAXVAL M1 .CSECT SPFFTL ;COPYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDEE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THE INFORMATION IN THIS DOCUMENTOV DEMMSV+2,R2 ;REPLACE MAXVAL BR DEMMN4 DEMMN2: JSR PC,@#RSTARG ;POLSH DESTROYS REGS. JSR PC,@#SAVARG MOV DEMMSV+2,-(SP) IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;DEC A ;PUT CURRENT VALUE BACK MOV DEMMSV,-(SP) ;ON STACK MOV R4,-(SP) ;PUT MINVAL ON STACK MOV R3,-(SP) JSR R4,@#$POLSH ;DO ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ;LDP SOFTW COMPARE OF $CMR ;MINVAL WITH .+2 ;CURRENT VALUE BPL DEMMN3 ;CURRENT VALUE >= MINVAL JSR PC,@#RSTARG ;CURRENT VALUEARE DEVELOPMENT, 1974-5 ; CARL RALSTON .GLOBL SAVARG,RSTARG,DEGET,$POLSH,$CMR .GLOBL DEFORE,DECMD,DECMD1 ;ROUTINES CALLED < MINVAL MOV DEMMSV,R3 ;REPLACE MINVAL MOV DEMMSV+2,R4 BR DEMMN4 DEMMN3: JSR PC,@#RSTARG DEMMN4: DEC R5 ;DECR 'DONE CT: SAVARG,RSTARG,DEGET,$POLSH,DEFORE ;---DEMXMN--- ;CALL: JSR PC,DEMXMN ; ADR OF 'TYPE/#' OF BUF IN R1 ; ST.PT. WITHIN BUFR' BGT DEMMN1 ;NOT DONE YET DEMMN5: RTS PC ;BYE,BYE DEMMSV: 0,0 ;---DEEOL--- ;CALL: JSR R5,DEEOL ; .BYTE A,B WHERE IN R0, USED BY 'DEGET' ; (#PTS-1) TO SEARCH IN R5 ;THIS ROUTINE FINDS THE MAX /MIN VALUES OF A ;BUFFER GIVEN THE STA A= AN OFFSET TO 'DECMD' ; AND B=AN OFFSET TO DECMD1 ;THE PURPOSE OF THIS ROUTINE IS TO CHECK IF USER ENTERED TOO ;MANY BURTING PT AND # PTS TO SEARCH ;IN THE BUFFER. R0-R5 ARE NOT SAVED. ;MAXVAL IS IN R1,R2 AND MINVAL IS IN R3,R4 ON RTN. DEMXMFRS AND/OR CONSTANTS AS PART OF A CMD STRING DEEOL: MOVB (R5)+,R0 ;GET OFFSET TO 'DECMD' ADD #DECMD,R0 INC (R0) ;TOO MANN: MOV R1,DEMMX1 ;TYPE/# OF B MOV R1,DEMMX2 ;TYPE/# OF B JSR R5,@#DEGET ;GET 1ST/ DATUM DEMMX1: 0 ;PTR TO 'TYPE/#' OF B Y BUFRS? BEQ DEEOL1 ;NO MOV #52.,R0 ;YES BR DEEOL2 DEEOL1: MOVB (R5)+,R0 ;GET OFFSET TO 'DECMD1' BMI DEEOL3 ;IF NEG, MOV (SP),R1 MOV (SP)+,R3 ;MAXVAL: R1=H.ORD,R2=L.ORD MOV (SP),R2 ;MINVAL=MAXVAL TO START WITH MOV (SP)+,R4 TST R5 ;M OMIT THIS PART OF CHK ADD #DECMD1,R0 INC (R0) ;TOO MANY CONSTANTS? BEQ DEEOL3 ;NO MOV #53.,R0 ;YES DEEOL2: JMP @#DEAYBE WE ARE DONE BEQ DEMMN5 DEMMN1: INC R0 ;BMP BUF INDEX PTR JSR PC,@#SAVARG ;POLSH DONT SAV REGS. JSR R5,@#DEGET ;GET FORE DEEOL3: RTS R5 .END SP=%6 PC=%7 .IFDF CAPS$ .GLOBL FFTC,L.CMAD .ENDC .GLOBL DEFF,DECMD,DECMD1,DEDATA,DEDATS .GLOBL DEFORE,DETLE,FORR IN NONE. FWRD FFT TST R0 ;R0=-1 MEANS NEITHER I NOR F ;=1 MEANS F, =0 MEANS I BMI L.ERR ;MINUS IS ERROR BNE L.IN1MAT .GLOBL QA,QADATF,QAERR ; FORMAT COMMAND DEFINITIONS CRLFC0= 3 ;CR-LF COMBINATION TEXT= 7 ;TEXT OUTPUT SING= 11 ;BR IF FORWARD TRANSFORM INC L.INV ;SET FOR INVRS XFORM L.IN1: MOV @#DEDATA+2,L.N ;GET N - NO. OF DATA POINTS JSR PC,@#D;OUTPUT A S.P. DECIMAL VALUE EXIT= 0 ;EXIT INTERPRETER ; .SBTTL INITIALIZATION AND ERROR CHECKING ;FFT COMMAND MUST BE IN TETLE ;ONE LAST ERROR CHECK ; .SBTTL CALL TO FFTC ;CALL THE FFT SUBROUTINE JSR R5,FFTC ;CALL THE FFT SUBROUTINE L.N-.-HE FOLLOWING FORMAT. ; FFT SI [SJ] [DIRECTION] ;WHERE SI IS THE REAL BUFFER, SJ IS THE IMAGINARY ;BUFFER, AND DIRECTION IS EI2 MOVB ERRTBL(R0),R3 ;GET SPARTA ERR CODE BNE L.ERR ;BR IF ERROR JSR R5,FORMAT ;L.SCLF CONTAINES THE SCALE FACTOR .BYTETHER 'F' OR ABSENT FOR A ;FORWARD TRANSFORM AND 'I' FOR AN INVERSE TRANSFORM. DEFF: MOV R1,-(SP) ;SAVE REGISTERS MOV R2,-( CRLFC0,TEXT .ASCII \SF = \ .BYTE 0,SING ;OUTPUT A DECIMAL VALUE .BYTE 0 ;NEXT PARM IS ADDR OF SIGNED INTEGER .EVEN SP) MOV R3,-(SP) MOV #36.,R3 ;SINGLE PRECISION ONLY TSTB @#DECMD+1 ;SI MUST BE SPECIFIED AND BNE L.ERR0 ;MUST BE SNGL L.SCLF .BYTE CRLFC0,EXIT .EVEN CLR R0 ;INDICATE NO ERROR L.RTN: MOV (SP)+,R3 ;RESTORE REGISTERS MOV (SP)+,R2 MOV (SPR A LICENSE FOR USE ONLY ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICEPRCSN TSTB @#DECMD+3 ;SJ IS OPTIONAL. IF SPECI- BEQ L.IN0 ;FIED, IT MUST BE SNGL PRCSN. BPL L.ERR ;JUMP IF ERROR MOV . THIS SOFTWARE, OR ANY OTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR@#DECMD,@#DECMD+2 ;UNSPECIFIED. MAKE INCB @#DECMD+2 ;SJ, S(I+1) ;COMPUTE ADDRESSES OF VECTORS L.IN0: MOVB @#DECMD,R0 ;S USE ON SUCH SYSTEM AND TO ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES NGL PRCSN BUFF NO. MOV #47.,R3 ;NON-EXISTENT BUFFER JSR PC,L.BFAD ;GET ADDR OF REAL BUFF MOV R1,L.REP ;IN XR1. XR0&XR2 ZAREMAIN IN DEC. ;THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMPPED MOVB @#DECMD+2,R0 ;IMAG BUFF NO. TO XR0 JSR PC,L.BFAD ;GET ADDR OF IMAG BUFF MOV R1,L.IMP ;STASH IT MOV #52.,R3 ;AMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUINY EXTRA BUFFERS SPECIFIED? TSTB @#DECMD+4 BPL L.ERR ;BR IF ERROR MOV #53.,R3 ;ANY UNNECESSARY CONST? INC @#DECMD1 BPMENT WHICH IS NOT SUPPLIED BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; LARRY PEARSON JAN. 1974 ; CARL RALSTON MAR. 1975 NE L.ERR ;BR IF ERROR ;TEST FOR FORWARD OR INVERSE TRANSFORM CLR L.INV ;SET FOR FORWARD XFORM JSR R5,QA 20420 L.C ;SPFFT$ MUST BE DIFINED IN AN ASSEMBLY FILE .IFDF SPFFT$ ;DEFINITIONS R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 MAD MOV #42.,R3 ;INCORRECT CMD FORMAT TST @#QAERR ;ANY ERRORS BNE L.ERR TSTB @#QADATF ;ANY DATA FOUND? BEQ L.IN1 ;BC,L.BFAD ;ADDR IS RTND IN R1 L.BFAD: MOV @#DEDATS+2,R1 ;ADDR OF FIRST BUFFER MOV @#DEDATA+2,R2 ;GET NUMBER OF POINTS ASL ORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMENT BY DIGITAL EQUIPMER2 ;MPY BY 2 FOR WORDS CMPB R0,@#DEDATS ;LEGAL BUFFER NO.? BGT L.BERR ;JUMP IF ERROR L.BF1: DEC R0 ;DECR BUFFER NO. BLNT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIEE L.BFRT ;JMP IF DONE ADD R2,R1 ;SET ADDR TO NXT BUFF BR L.BF1 L.BFRT: RTS PC ; .SBTTL FFTLNK TEMPORARY STORAGE AND PAD BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; BOB DAY DEC. 1972 ; LARRY PEARSON SEPT. 1973 ; CARL RALSTON MAR. 1975 ;DRAMETERS ;FFT PARAMETERS L.N: 0 ;NUMBER OF POINTS L.REP: 0 ;ADDRESS OF REAL ARRAY L.IMP: 0 ;ADDRESS OF IMAGINARY ARRAY L.EFINITIONS ;R0 DEFINED IS INTERPRETED AS MEANING A SOURCE IS ;ASSEMBLED WITH FFTC AND PRECEEDS IT. IN THIS CASE, ;FFTC IS INV: 0 ;=0 FOR FORWARD, =1 FOR INVERSE TRANSFORM L.SCLF: 0 ;SCALE FACTOR. NUMBER OF TIMES DATA DIVIDED BY 2 L.CMAD: .BYTE 3,NOT GLOBALIZED. .IF NDF,R0 .GLOBL FFTC R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 .ENDC .SBTTL 1,'I,'F,0 ;FFT COMMAND OPTIONS - F OR I ;FFT TO SPARTA ERROR CODE CONVERSION TABLE ERRTBL: .BYTE 0,38.,39.,37.,38. .EVENFAST FOURIER TRANSFORM DEFINITIONS .IIF NDF,EAE,EAE=0 ;0 - NON-EAE, 1 - EAE .IIF NDF,EIS,EIS=0 ;0 - NON-EIS, 1 - EIS .II .ENDC F NDF,NON,NON=1-EAE-EIS ;NON>0 FOR SOFTWARE MULTIPLY .IIF NDF,F.MAXN,F.MAXN=1024. ;MAXIMUM NUMBER OF POINTS ;THIS SUBROUTINE CAN PROCESS F.HMXN= F.MAXN/2 ;HALF MAXN .IFGT EAE F.PROD= 177302 F.MPLI= 177304 F.MCND= 177306 F.SHFT= 177316 .TITLE FFT ;LAB APPLICATIONS-11 FAST FOURIER TRANSFORM SUBROUTINE ;DEC-11-SLABA-C-LA2 ;FILE FFT.MAC ;FILE ID FFT.1 ;COPYR .ENDC ;MPYCNT IS AN OPTIMIZATION VARIABLE FOR PROCESSORS WITHOUT ;HARDWARE MULTIPLY. IT MAY BE LEGALLY DEFINED AS ONE OF )+,R1 RTS PC ;MAIN RETURN L.ERR0: BPL L.ERR ;BR IF FLOATING POINT BUFFER MOV #2.,R3 ;MUST SPECIFY A BUFFER BR L.ERR IGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY O L.BERR: TST (SP)+ ;ERROR IN BUFFER NUMBER. FIX STACK L.ERR: MOV #DEFORE,6(SP) ;CHANGE RTN TO ERR ROUTINE MOV R3,R0 BR L.RN A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTTN ; .SBTTL L.BFAD - SUBROUTINE TO COMPUTE ADDR OF BUFFER ;LOCAL SUBROUTINE TO COMPUTE ADDRESS OF A SINGLE ;PRECISION BUFFEHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE ON SUCH SYSTEM AND TOR. CLOBBERS R0, R1, AND R2. ;ADDRESS IS RETURNED IN R1. ;CALLING SEQUENCE: ; MOVB BUFNO,R0 ;BUFNO CONTAINS BUFF NO. ; JSR P ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIN IN DEC. ;THE INFMPYCNT=1. SEE THE MULTIPLY SUBROUTINE FOR MORE DETAILS. .IIF NDF,MPYCNT,MPYCNT=1 ;MAXIMUM SPEED .IF EQ,F.MAXN-1024. M ERROR FOR ZERO N TST R3 ;TEST N BLE F.ERR INC R0 ;SET ERROR FOR N TOO BIG CMP #F.MAXN,R3 ;N GT MAX VALUE? BLT F.ERRFLAG= 1 .MACRO TBL,A,B,C,D,E,F,G,H .WORD A .ENDM .ENDC .IF EQ,F.MAXN-2048. MFLAG= 1 .MACRO TBL,A,B,C,D,E,F,G,H ;JMP IF ERROR INC R0 ;SET ERROR FOR N NOT A POWER OF 2 MOV R3,R1 ;CALCULATE POWER OF 2 & CLR R4 ;TEST N. COMPUTE R I .WORD A,E .ENDM .ENDC .IF EQ,F.MAXN-4096. MFLAG= 1 .MACRO TBL,A,B,C,D,E,F,G,H .WORD A,C,E,G .ENDM .ENDC .N XR4 F.IN2: ROR R1 BCS F.IN3 INC R4 BR F.IN2 F.IN3: BNE F.ERR ;JMP IF N NOT PWR OF 2 INC R0 ;SET ERROR FOR N LESS TIF EQ,F.MAXN-8192. MFLAG= 1 .MACRO TBL,A,B,C,D,E,F,G,H .WORD A,B,C,D,E,F,G,H .ENDM .ENDC .IF NDF,MFLAG .ERROR F.HAN 8 SUB #2,R4 ;ADJUST R FOR MAIN LOOP BLE F.ERR ;JMP IF N LT 8 MOV R4,(PC)+ ;STASH R F.R: 0 ;(LOG N)-2 ;CALCULATMAXN;F.MAXN MUST BE 1024, 2048, 4096, OR 8192 .ENDC .SBTTL FFT INITALIZATION ;ERROR IN PARAMETERS F.ERR: JMP F.EXIT E INCREMENT FOR THE TRIG TABLE CLR R1 MOV #F.MAXN/2,R2 F.IN4: ASR R2 INC R1 CMP R4,R1 BGT F.IN4 MOV R2,(PC)+ ;TRI ;CALLING SEQUENCE: ; JSR R5,FFTC ; N-2-. ;PIC ARGUMENT POINTER ; ... ; ... ;N: VALUE ;CONTAINS NUMBER OF POINTS ;REPG TABLE INCREMENT F.HH: 0 CLR @F.SCLF ;INITIALIZE SCALE FACTOR .SBTTL FFT MAIN LOOP PROCESSING F.MAIN: MOV #1,(PC)+ ;: POINTER ;CONTAINS ADDR OF REAL ARRAY ;IMP: POINTER ;CONTAINS ADDR OF IMAG ARRAY ;INV: VALUE ;CONTAINS TRANSFORM DIRECTION1 SUBGROUP IN FIRST COLUMN F.LL: 0 ;# OF SUBGROUPS WITHIN COLUMN ASL R3 ;XR3 CONTAINS N. ADDRESSES ;GO BY 2'S MOV R ; ;=0 FWRD, =1 INVRS TRANSFORM ;SCLF: VARIABLE ;SCALE FACTOR. NUMBER OF TIMES DIVIDED BY 2 FFTC: MOV R1,-(SP) ;SAVE RE3,(PC)+ ;M IS POINTER TO NEXT SUBGP F.M: 0 MOV #F.ORT1-F.NXTI,F.ORTN ;SET UP RETURN FROM OFLOW RTN MOV R4,(PC)+ ;XR4 CONTAIGISTERS MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) ;CONVERT ARGUMENT TO AN ADDRESS. ARGUMENT IS OF ;THE FOLLOWING FORM: NS R. START MAIN F.L: 0 ;LOOP:(LOG N)-2 TIMES MOV PC,R0 ;ADDR OF F.REF1 TO R0 ADD #F.TRIG-.,R0 ;COMPUTE ADDR OF F.TRIG ; ARGN-.-2 MOV (R5)+,R0 ; ARGN-.-2 TO R0 AND INCR R5 ADD R5,R0 ;COMPUTE ARGN MOV (R0)+,R3 ;GET NUMBER OF POINTS MOV R MOV R0,(PC)+ ;SAVE IT FOR TABLE LOOK-UP F.TRGP: 0 BR F.SKP8 F.OFL2: TST (SP)+ ;CLEAR STACK F.OFL4: TST (SP)+ JMP F.OFL3,(PC)+ ;STASH IT F.N: 0 ;NUMBER OF DATA PTS MOV (R0)+,(PC)+ ;POINTER TO REAL ARRAY F.REP: 0 MOV (R0)+,(PC)+ ;POINTER TO F.SKP8: F.NXTC: MOV F.M,(PC)+ ;OFFSET OF NEXT SUBGROUP F.ORG: 0 ;ORGIN OF EACH SUBGROUP ASR F.M ;M=M/2 CLR (PC)+ ;PO IMAGINARY ARRAY F.IMP: 0 MOV (R0)+,(PC)+ ;=0 FOR FWRD, =1 FOR INVRS XFORM F.INV: 0 MOV R0,(PC)+ ;POINTER TO SCALE FACTOR INTER TO TOP HALF SUBGROUP F.A1: 0 MOV F.M,(PC)+ ;POINTER TO BOTTOM HALF SUBGROUP F.A2: 0 MOV F.LL,(PC)+ ;NUMBER OF SUBGRO ;THE FOLLOWING OCTAL VALUES: 1, 2, 4, 10, OR 20. TO MINIMIZE ;STOREAGE REQUIREMENTS, SET MPYCNT=20 TO MAXIMIZE SPEED, ;SET F.SCLF: 0 MOV R5,-(SP) ;SAVE R5 FOR RETURN CLR R0 ;R0 USED FOR ERROR RETURN ;TEST FOR LEGAL VALUE OF N INC R0 ;SET INC @#F.SHFT MOV @R5,F.TRT MOV R3,-(R4) MOV R1,@#F.MCND INC @#F.SHFT ADD @R5,F.TRT BVS F.OFLO MOV R2,(R4)+ MOVF.L BLE F.SKP1 ;GO DO NEXT COLUMN JMP F.NXTC ; " F.OFLO: .IF GT NON CMP (SP)+,(SP)+ ;CLEAR STACK .ENDC F. R1,(R4) INC @#F.SHFT MOV @R5,R1 MOV R3,-(R4) MOV R0,@#F.MCND INC @#F.SHFT SUB @R5,R1 BVS F.OFLO .ENDC .SBTTOFLR: MOV (SP)+,R5 ;RESTORE REGISTERS MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 CMP (SP)+,(SP)+ ;CLEAR STACK JMP F.OFL ;UPS PER COL F.K: 0 F.NXTS: CLR (PC)+ ;START NEXT SUBGROUP F.H: 0 ;POWER OF W CLR (PC)+ ;J IS ADRS INDEX - STEP BY 2'S L FFT EIS CONDITIONAL CODE .IF GT,EIS MOV R2,R4 ;FORM 2ND HALF SUBGROUP ENTRY MUL R0,R4 ASHC #1,R4 ;LONG ARITHMATIC F.J: 0 MOV F.A1,R2 ;SET UP SUBGP HALF ADDRESSES MOV R2,R4 ADD F.REP,R2 ;R2 POINTS TO 1ST HALF REAL ADD F.IMP,R4 ;R4 POISHIFT LEFT 1 MOV R4,F.TRT MOV R3,R4 MUL R1,R4 ASHC #1,R4 ADD R4,F.TRT BVS F.OFLO MOV R2,R4 MUL R1,R4 ASHC #1,NTS TO 1ST HALF IMAG MOV F.A2,R3 ; " MOV R3,R5 ADD F.REP,R3 ;R3 POINTS TO 2ND HALF REAL ADD F.IMP,R5 ;R5 POINTS TOR4 MOV R4,R1 MOV R3,R4 MUL R0,R4 ASHC #1,R4 SUB R4,R1 BVS F.OFLO .ENDC .SBTTL FFT NON CONDITIONAL CODE .IF 2ND HALF IMAG F.SBGP: F.ORT1: MOV @R2,R0 ;GET 1ST HALF, REAL MOV @R4,R1 ;GET 1ST HALF, IMAG MOV R0,-(SP) ;TEMP ADD @R GT,NON MOV R3,-(SP) ;PUT SIN & COS ON THE STACK MOV R2,-(SP) MOV R2,R5 ;FORM 2ND HALF SUBGROUP ENTRY MOV R0,R4 JSR P3,(SP) ;DON'T ADD DIRECTLY, SINCE YOU BVS F.OFL4 ;DON'T WANT TO ALTER THE DATA MOV R1,-(SP) ;TEMP ADD @R5,(SP) ;BEFORE CHC,F.MUL MOV R3,F.TRT MOV 2(SP),R5 MOV R1,R4 JSR PC,F.MUL ADD R3,F.TRT BVS F.OFLO MOV (SP)+,R5 MOV R1,R4 JSR PCECKING FOR OVERFLOW BVS F.OFL2 SUB @R3,R0 ;FORM SR-TR BVS F.OFL2 SUB @R5,R1 ;FORM SI-TI BVS F.OFL2 MOV R2,-(SP) ;S,F.MUL MOV R3,R1 MOV (SP)+,R5 MOV R0,R4 JSR PC,F.MUL SUB R3,R1 BVS F.OFLR .ENDC .SBTTL FFT END-OF-MAIN-LOOP COAVE REGISTERS 2-5 MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) MOV F.TRGP,R4 ;ADDR OF TRIG TBLE TO XR4 MOV R4,R5 CMP F.H,#DE MOV (SP)+,R5 ;RESTORE REGISTERS MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,(R4)+ ;INSERT TRANSFORMED POINTSF.HMXN ;LOOK UP SINE AND COSINE BLE F.HOP1 ;(2 BYTES = 1 WORD) SUB F.H,R4 ;H GT 512 MOV F.MAXN(R4),R3 ;SINE ADD F.H,R5 MOV (SP)+,(R2)+ ; " MOV (PC)+,(R3)+ ; " F.TRT: 0 ;TEMPORARY MOV R1,(R5)+ ;INSERT TRANFORMED PTS ADD F.HH,F.H MOV -F.HMXN(R5),R2 ;COSINE NEG R2 ;NEGATE COSINE BR F.HOP2 F.HOP1: ADD F.H,R4 ;H LE 512 MOV (R4),R3 ;SINE SUB F.H ;INCREMENT POWER OF W ADD #2,F.J ;INC POINTER W/IN SUBGROUP CMP F.M,F.J BLE F.SKP4 ;CONTINUE XFORM OF THE SUBGROUP ,R5 MOV F.HMXN(R5),R2 ;COSINE F.HOP2: TST F.INV BEQ F.HOP3 ;NO, SKIP NEG R3 ;YES, NEGATE SINE .SBTTL FFT EAE CONDITIJMP F.SBGP ; " F.SKP4: ADD F.ORG,F.A1 ;INIT FOR NEXT SUBGROUP ADD F.ORG,F.A2 DEC F.K BLE F.SKP5 ;GO DO NEXT SUBGRONAL CODE F.HOP3: .IF GT,EAE MOV #F.PROD,R5 MOV #F.MPLI,R4 MOV R2,(R4)+ ;FORM 2ND HALF SUBGROUP ENTRY MOV R0,(R4) OUP JMP F.NXTS ; " F.SKP5: ASL F.LL ;#SUBGPS IS DOUBLE FOR NEXT COL ASL F.HH ;LOC. IN TRIG TBL IS DOUBLE TOO DEC NEG R5 ;YES, NEGATE BOTTOM POINT NEG R4 ; " F.SP11: MOV R0,(R2)+ ;STORE THE POINTS MOV R1,(R3)+ CMP (R2)+,(R3)+ ;INCRE ASR R5 ;DO 4 COMPLEX POINTS AT A TIME TO ASR R5 ;REDUCE LOOP OVERHEAD MOV F.REP,R2 MOV F.IMP,R3 F.OFLP: .REPT 4 AMENT POINTERS MOV R5,(R2)+ MOV R4,(R3)+ DEC (SP) BGT F.SPL1 TST (SP)+ ;CLEAR STACK ;END OF FIRST SPECIAL LOOP SR (R2)+ ASR (R3)+ .ENDR DEC R5 BNE F.OFLP MOV (SP)+,R3 MOV (SP)+,R2 INC @F.SCLF MOV PC,R5 ;SET R5 TO F.NXTI F.SBTTL FFT SECOND SPECIAL LOOP ;SECOND SPECIAL LOOP BR F.SKP3 F.OFL1: JMP F.OFL F.SKP3: MOV F.REP,R2 MOV F.IMP,R3 MOV.NXTI: ADD (PC)+,R5 ;COMPUTE RESTART ADDRESS (RTN) F.ORTN: 0 ;CONTAINS "RTN-F.NXTI" WHERE RTN ;IS THE RESTART LOCATION #F.ORT3-F.NXTI,F.ORTN ;SET UP OVERFLOW RETURN F.SPL2: F.ORT3: MOV @R2,R0 MOV @R3,R1 MOV R0,R4 MOV R1,R5 ADD 2(R2),R0 RTS R5 ;RESTORES R5 AND XFERS TO RTN .SBTTL FFT SOFTWARE MULTIPLY SUBROUTINE ;MULTIPLY SUBROUTINE FOR FFT .IF GT,NON BVS F.OFL1 ADD 2(R3),R1 BVS F.OFL1 SUB 2(R2),R4 BVS F.OFL1 SUB 2(R3),R5 BVS F.OFL1 MOV R0,(R2)+ MOV R1,(R3)+ F.MUL: CLR R3 ;CLEAR PRODUCT SIGN TST R4 BPL F.MUL1 ;JUMP IF MULTIPLIER PLUS INC R3 ;NOTE MINUS NEG R4 ;MAKE PLUS JUMP TO OVERFLOW ROUTINE .SBTTL FFT FIRST SPECIAL LOOP ;DONE WITH (LOG N)-2 COLUMNS ;NOW DO 2 SPECIAL LOOPS ;FIRST SPECI MOV R4,(R2)+ MOV R5,(R3)+ DEC @SP BNE F.SPL2 TST (SP)+ ;CLEAR STACK ;END OF SECOND SPECIAL LOOP .SBTTL FFT BIT RAL LOOP F.SKP1: MOV F.N,-(SP) ;K=N/4 ASR (SP) MOV (SP),-(SP) ASR (SP) MOV F.REP,R2 ;R2 KEEPS TRACK OF CURRENT FOUR REEVERSAL ;DO BIT REVERSAL MOV #1,R2 MOV F.N,R5 ;ROUTINE TO REVERSE R+2 BITS F.REVS: MOV R2,R4 ;TEMPORARY ADD R5,AL MOV F.IMP,R3 ;R3 KEEPS TRACK OF CURRENT FOUR IMAG F.SPL1: MOV #F.ORT2-F.NXTI,F.ORTN ;SET UP OVERFLOW ROUTINE F.ORT2: MOV R4 ;SET MARKER CLR R3 ;R3 HOLDS REVERSED BITS ASR R4 F.REV1: ROL R3 ;REVERSE THE BITS ASR R4 ; " BNE F.REV1 ; " @R2,R0 MOV @R3,R1 MOV R0,R4 MOV R1,R5 ADD 4(R2),R0 ;REAL PART OF FIRST HALF BVS F.OFL1 ADD 4(R3),R1 ;IMAG PART OF FICMP R3,R2 BLE F.NSCR ASL R2 ASL R3 MOV F.REP,R0 ;SWAP REAL VALUES MOV R0,R1 ADD R2,R0 ADD R3,R1 MOV @R0,R4 MOVRST HALF BVS F.OFL1 SUB 4(R2),R4 ;1ST POINT IN 2ND HALF OF SBGP BVS F.OFL1 SUB 4(R3),R5 BVS F.OFL1 MOV R0,(R2)+ ;STO @R1,@R0 MOV R4,@R1 MOV F.IMP,R0 ;SWAP IMAG VALUES MOV R0,R1 ADD R2,R0 ADD R3,R1 MOV @R0,R4 MOV @R1,@R0 MOV R4,@RE THE POINTS MOV R1,(R3)+ MOV R4,2(R2) MOV R5,2(R3) MOV #F.ORT4-F.NXTI,F.ORTN ;SET UP OVERFLOW ROUTINE F.ORT4: MOV (R2R1 ASR R2 F.NSCR: INC R2 CMP R5,R2 BGT F.REVS ;ALL DONE - RETURN TO CALLER CLR R0 ;CLEAR ERROR FLAG F.EXIT: MOV ),R0 ;DO 2ND POINTS IN SUBGROUP MOV (R3),R1 MOV R0,R4 MOV R1,R5 ADD 4(R2),R0 BVS F.OFL1 ADD 4(R3),R1 BVS F.OFL1 (SP)+,R5 ;RESTORE REGISTERS MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 RTS R5 ;MAIN EXIT. R0 CONTAINS ERROR SUB 4(R3),R5 ;REAL PART BVS F.OFL1 NEG R4 ADD 4(R2),R4 ;IMAGINARY PART BVS F.OFL1 TST F.INV BEQ F.SP11 ;NO, SKIP NO. .SBTTL FFT OVERFLOW SCALING ROUTINE ;OVERFLOW ROUTINE F.OFL: MOV R5,-(SP) MOV R2,-(SP) MOV R3,-(SP) MOV F.N,R5 E F.MUL3 ;JUMP IF MORE TO GO .ENDC ROR F.MULS ;GET SIGN BCC F.MUL5 ;JUMP IF ANSWER IS PLUS NEG R4 ;NEGATE LOW ORDER 12156,12207,12240,12271,12321,12352,12403 TBL 12434,12465,12515,12546,12577,12630,12661,12711 TBL 12742,12773,13024,13054,1310OF PRODUCT ADC R3 ;DO A DOUBLE PRECISION NEGATE NEG R3 F.MUL5: RTS PC .ENDC .SBTTL FFT SINE/COSINE TABLE ;SINE/COSIN5,13136,13167,13217 TBL 13250,13301,13332,13362,13413,13444,13474,13525 TBL 13556,13607,13637,13670,13721,13751,14002,14033 TE TABLE F.TRIG: TBL 00000,00031,00062,00113,00145,00176,00227,00260 TBL 00311,00342,00373,00424,00456,00507,00540,00571 TBBL 14063,14114,14145,14175,14226,14257,14307,14340 TBL 14371,14421,14452,14503,14533,14564,14615,14645 TBL 14676,14726,14757,1L 00622,00653,00704,00736,00767,01020,01051,01102 TBL 01133,01164,01215,01247,01300,01331,01362,01413 TBL 01444,01475,01526,015010,15040,15071,15121,15152 TBL 15203,15233,15264,15314,15345,15376,15426,15457 TBL 15507,15540,15570,15621,15651,15702,15732560,01611,01642,01673,01724 TBL 01755,02006,02037,02071,02122,02153,02204,02235 TBL 02266,02317,02350,02401,02433,02464,02515,,15763 TBL 16014,16044,16075,16125,16156,16206,16237,16267 TBL 16320,16350,16401,16431,16461,16512,16542,16573 TBL 16623,166502546 TBL 02577,02630,02661,02712,02743,02775,03026,03057 TBL 03110,03141,03172,03223,03254,03305,03336,03370 TBL 03421,034524,16704,16735,16765,17016,17046,17076 TBL 17127,17157,17210,17240,17270,17321,17351,17402 TBL 17432,17462,17513,17543,17573,17,03503,03534,03565,03616,03647,03700 TBL 03731,03762,04014,04045,04076,04127,04160,04211 TBL 04242,04273,04324,04355,04406,044624,17654,17705 TBL 17735,17765,20016,20046,20076,20127,20157,20207 TBL 20237,20270,20320,20350,20401,20431,20461,20511 TBL 237,04470,04521 TBL 04553,04604,04635,04666,04717,04750,05001,05032 TBL 05063,05114,05145,05176,05227,05260,05311,05342 TBL 050542,20572,20622,20652,20703,20733,20763,21013 TBL 21044,21074,21124,21154,21204,21235,21265,21315 TBL 21345,21375,21426,21456F.MUL1: TST R5 BPL F.MUL2 ;JUMP IF MULTIPLICAND PLUS INC R3 ;NOTE MINUS NEG R5 ;MAKE PLUS F.MUL2: MOV R3,(PC)+ ;SAVE S373,05424,05455,05507,05540,05571,05622,05653 TBL 05704,05735,05766,06017,06050,06101,06132,06163 TBL 06214,06245,06276,06327,IGN OF PRODUCT F.MULS: 0 CLR R3 ;CLEAR HIGH ORDER PRODUCT .IF NE,MPYCNT-1 ;NO LOOPING IF MPYCNT=1 MOV #MPYCNT,R2 ;SET LO06360,06411,06442,06473 TBL 06524,06555,06606,06637,06670,06721,06752,07003 TBL 07034,07065,07116,07147,07200,07231,07262,0731OP COUNT F.MUL3: ROR R3 ;SHIFT PRODUCT .ENDC ROR R4 ;SHIFT MULTIPLIER BCC .+4 ;JUMP IF MULTIPLIER BIT ZERO ADD R5,R33 TBL 07344,07374,07425,07456,07507,07540,07571,07622 TBL 07653,07704,07735,07766,10017,10050,10101,10132 TBL 10163,10214,102 ;ADD IN MULTIPLICAND .REPT <20/MPYCNT>-1 ROR R3 ;SHIFT PRODUCT ROR R4 ;SHIFT MULTIPLIER BCC .+4 ;JUMP IF MULTIPLIER44,10275,10326,10357,10410,10441 TBL 10472,10523,10554,10605,10636,10666,10717,10750 TBL 11001,11032,11063,11114,11145,11175,1 BIT ZERO ADD R5,R3 ;ADD IN MULTIPLICAND .ENDR .IF NE,MPYCNT-1 ;NO LOOPING IF MPYCNT=1 DEC R2 ;DECREMENT LOOP CNT BN1226,11257 TBL 11310,11341,11372,11423,11453,11504,11535,11566 TBL 11617,11650,11701,11731,11762,12013,12044,12075 TBL 12125,330,23360,23410,23440,23470,23520 TBL 23550,23600,23627,23657,23707,23737,23767,24017 TBL 24047,24077,24126,24156,24206,24236,,36614,36642 TBL 36670,36716,36744,36772,37020,37046,37074,37122 TBL 37150,37176,37224,37252,37300,37326,37354,37401 TBL 374224266,24316 TBL 24345,24375,24425,24455,24505,24534,24564,24614 TBL 24644,24674,24723,24753,25003,25033,25062,25112 TBL 251427,37455,37503,37531,37557,37605,37632,37660 TBL 37706,37734,37761,40007,40035,40063,40110,40136 TBL 40164,40212,40237,40265,40,25171,25221,25251,25301,25330,25360,25410 TBL 25437,25467,25517,25546,25576,25625,25655,25705 TBL 25734,25764,26014,26043,260313,40340,40366,40414 TBL 40441,40467,40515,40542,40570,40615,40643,40671 TBL 40716,40744,40771,41017,41044,41072,41117,41145 73,26122,26152,26201 TBL 26231,26261,26310,26340,26367,26417,26446,26476 TBL 26525,26555,26604,26634,26663,26713,26742,26772 TBL 41172,41220,41245,41273,41320,41346,41373,41420 TBL 41446,41473,41521,41546,41573,41621,41646,41673 TBL 41721,41746,41773TBL 27021,27050,27100,27127,27157,27206,27236,27265 TBL 27314,27344,27373,27423,27452,27501,27531,27560 TBL 27607,27637,27666,,42021,42046,42073,42120,42146 TBL 42173,42220,42245,42272,42320,42345,42372,42417 TBL 42444,42471,42517,42544,42571,42616,42627715,27745,27774,30023,30052 TBL 30102,30131,30160,30210,30237,30266,30315,30345 TBL 30374,30423,30452,30501,30531,30560,306043,42670 TBL 42715,42742,42767,43014,43041,43066,43113,43140 TBL 43165,43212,43237,43264,43311,43336,43363,43410 TBL 43435,437,30636 TBL 30665,30714,30744,30773,31022,31051,31100,31127 TBL 31156,31205,31235,31264,31313,31342,31371,31420 TBL 31447,314462,43507,43534,43560,43605,43632,43657 TBL 43704,43731,43755,44002,44027,44054,44100,44125 TBL 44152,44177,44223,44250,44275,76,31525,31554,31603,31632,31661,31710 TBL 31737,31766,32015,32044,32073,32122,32151,32200 TBL 32227,32255,32304,32333,32362,344321,44346,44373 TBL 44417,44444,44471,44515,44542,44566,44613,44640 TBL 44664,44711,44735,44762,45006,45033,45057,45104 TBL2411,32440,32467 TBL 32516,32544,32573,32622,32651,32700,32727,32755 TBL 33004,33033,33062,33110,33137,33166,33215,33243 TBL 45130,45155,45201,45225,45252,45276,45323,45347 TBL 45373,45420,45444,45470,45515,45541,45565,45612 TBL 45636,45662,45707,45733272,33321,33350,33376,33425,33454,33502,33531 TBL 33560,33606,33635,33664,33712,33741,33767,34016 TBL 34045,34073,34122,341533,45757,46003,46027,46054 TBL 46100,46124,46150,46174,46221,46245,46271,46315 TBL 46341,46365,46411,46435,46461,46505,46531,40,34177,34225,34254,34302 TBL 34331,34360,34406,34435,34463,34511,34540,34566 TBL 34615,34643,34672,34720,34747,34775,35023,356555 TBL 46601,46625,46651,46675,46721,46745,46771,47015 TBL 47041,47065,47111,47135,47161,47204,47230,47254 TBL 47300,47324,,21506,21536,21566,21616 TBL 21647,21677,21727,21757,22007,22037,22067,22117 TBL 22147,22200,22230,22260,22310,22340,22370,224052 TBL 35100,35127,35155,35203,35232,35260,35306,35335 TBL 35363,35411,35440,35466,35514,35542,35571,35617 TBL 35645,35673,320 TBL 22450,22500,22530,22560,22610,22640,22670,22720 TBL 22750,23000,23030,23060,23110,23140,23170,23220 TBL 23250,23300,235722,35750,35776,36024,36052,36101 TBL 36127,36155,36203,36231,36257,36305,36334,36362 TBL 36410,36436,36464,36512,36540,365667,57600,57620,57641,57662,57702,57723 TBL 57744,57764,60005,60026,60046,60067,60107,60130 TBL 60150,60171,60211,60232,60252,607012,67027,67044 TBL 67061,67076,67112,67127,67144,67161,67175,67212 TBL 67227,67243,67260,67275,67311,67326,67342,67357 TBL 47350,47373,47417,47443,47467,47512 TBL 47536,47562,47605,47631,47655,47700,47724,47750 TBL 47773,50017,50043,50066,50112,5013273,60313,60334 TBL 60354,60375,60415,60435,60456,60476,60516,60537 TBL 60557,60577,60620,60640,60660,60700,60721,60741 TBL 65,50161,50204 TBL 50230,50254,50277,50323,50346,50371,50415,50440 TBL 50464,50507,50533,50556,50601,50625,50650,50673 TBL 5070761,61001,61021,61041,61062,61102,61122,61142 TBL 61162,61202,61222,61242,61262,61302,61322,61342 TBL 61362,61402,61422,6144217,50742,50765,51011,51034,51057,51103,51126 TBL 51151,51174,51220,51243,51266,51311,51334,51357 TBL 51403,51426,51451,51474,5,61462,61502,61521,61541 TBL 61561,61601,61621,61640,61660,61700,61720,61737 TBL 61757,61777,62017,62036,62056,62076,62115,6211517,51542,51565,51610 TBL 51633,51656,51701,51724,51747,51772,52015,52040 TBL 52063,52106,52131,52154,52177,52221,52244,5226735 TBL 62154,62174,62213,62233,62253,62272,62312,62331 TBL 62351,62370,62407,62427,62446,62466,62505,62524 TBL 62544,62563,62 TBL 52312,52335,52360,52402,52425,52450,52473,52516 TBL 52540,52563,52606,52630,52653,52676,52720,52743 TBL 52766,53010,530602,62622,62641,62660,62700,62717 TBL 62736,62755,62774,63014,63033,63052,63071,63110 TBL 63127,63146,63165,63204,63223,63243,33,53055,53100,53123,53145,53170 TBL 53212,53235,53257,53302,53324,53347,53371,53414 TBL 53436,53460,53503,53525,53547,53572,563262,63301 TBL 63320,63336,63355,63374,63413,63432,63451,63470 TBL 63507,63526,63544,63563,63602,63621,63640,63656 TBL 636753614,53637 TBL 53661,53703,53725,53750,53772,54014,54036,54061 TBL 54103,54125,54147,54171,54214,54236,54260,54302 TBL 54324,,63714,63732,63751,63770,64006,64025,64044 TBL 64062,64101,64120,64136,64155,64173,64212,64230 TBL 64247,64265,64304,64322,64354346,54370,54412,54434,54456,54500,54522 TBL 54544,54566,54610,54632,54654,54676,54720,54742 TBL 54764,55006,55030,55051,550740,64357,64375,64414 TBL 64432,64450,64467,64505,64523,64541,64560,64576 TBL 64614,64632,64651,64667,64705,64723,64741,64757 3,55115,55137,55161 TBL 55202,55224,55246,55270,55311,55333,55355,55377 TBL 55420,55442,55464,55505,55527,55550,55572,55614 TTBL 64775,65013,65032,65050,65066,65104,65122,65140 TBL 65156,65174,65211,65227,65245,65263,65301,65317 TBL 65335,65353,65370,BL 55635,55657,55700,55722,55743,55765,56006,56030 TBL 56051,56072,56114,56135,56157,56200,56221,56243 TBL 56264,56305,56327,565406,65424,65442,65460,65475 TBL 65513,65531,65546,65564,65602,65617,65635,65652 TBL 65670,65706,65723,65741,65756,65774,66016350,56371,56413,56434,56455 TBL 56476,56520,56541,56562,56603,56624,56645,56667 TBL 56710,56731,56752,56773,57014,57035,570561,66027 TBL 66044,66062,66077,66114,66132,66147,66165,66202 TBL 66217,66235,66252,66267,66304,66322,66337,66354 TBL 66371,664,57077 TBL 57120,57141,57162,57203,57224,57245,57266,57307 TBL 57327,57350,57371,57412,57433,57454,57474,57515 TBL 57536,575506,66424,66441,66456,66473,66510,66525 TBL 66542,66557,66574,66611,66626,66643,66660,66675 TBL 66712,66727,66744,66761,66776,673,73205 TBL 73216,73230,73241,73252,73264,73275,73307,73320 TBL 73331,73343,73354,73365,73376,73410,73421,73432 TBL 73443,736617,76624,76631,76636,76643,76647,76654 TBL 76661,76666,76672,76677,76704,76711,76715,76722 TBL 76726,76733,76740,76744,76751455,73466,73477,73510,73521,73532,73543 TBL 73554,73565,73576,73607,73620,73631,73642,73653 TBL 73664,73675,73706,73717,73730,,76755,76762,76766 TBL 76773,76777,77003,77010,77014,77021,77025,77031 TBL 77036,77042,77046,77052,77057,77063,77067,77073 TB73740,73751,73762 TBL 73773,74003,74014,74025,74036,74046,74057,74070 TBL 74100,74111,74121,74132,74143,74153,74164,74174 TBLL 77077,77103,77110,77114,77120,77124,77130,77134 TBL 77140,77144,77150,77154,77160,77164,77170,77173 TBL 77177,77203,77207,77 74205,74215,74225,74236,74246,74257,74267,74277 TBL 74310,74320,74330,74341,74351,74361,74371,74401 TBL 74412,74422,74432,744213,77216,77222,77226,77232 TBL 77235,77241,77245,77250,77254,77260,77263,77267 TBL 77272,77276,77301,77305,77310,77314,77317,67373,67410,67424,67441,67455,67472,67506,67523 TBL 67537,67553,67570,67604,67620,67635,67651,67665 TBL 67702,67716,67732,677442,74452,74462,74472,74502 TBL 74512,74523,74533,74542,74552,74562,74572,74602 TBL 74612,74622,74632,74642,74652,74661,74671,76,67762,67777,70013,70027 TBL 70043,70057,70073,70107,70123,70137,70153,70167 TBL 70203,70217,70233,70247,70263,70277,70313,704701 TBL 74711,74720,74730,74740,74747,74757,74767,74776 TBL 75006,75016,75025,75035,75044,75054,75063,75073 TBL 75102,75111,327 TBL 70343,70357,70372,70406,70422,70436,70452,70465 TBL 70501,70515,70530,70544,70560,70573,70607,70623 TBL 70636,70652,775121,75130,75140,75147,75156,75166 TBL 75175,75204,75214,75223,75232,75241,75250,75260 TBL 75267,75276,75305,75314,75323,75330665,70701,70714,70730,70743,70757 TBL 70772,71006,71021,71034,71050,71063,71077,71112 TBL 71125,71140,71154,71167,71202,712152,75341,75350 TBL 75357,75366,75375,75404,75413,75422,75431,75440 TBL 75447,75456,75464,75473,75502,75511,75520,75526 TBL 755,71231,71244 TBL 71257,71272,71305,71320,71334,71347,71362,71375 TBL 71410,71423,71436,71451,71464,71477,71512,71525 TBL 715335,75544,75552,75561,75570,75576,75605,75613 TBL 75622,75631,75637,75646,75654,75663,75671,75677 TBL 75706,75714,75723,75731,77,71552,71565,71600,71613,71626,71640,71653 TBL 71666,71701,71713,71726,71741,71753,71766,72001 TBL 72013,72026,72041,72053,725737,75746,75754,75762 TBL 75771,75777,76005,76013,76021,76030,76036,76044 TBL 76052,76060,76066,76074,76102,76110,76116,76124066,72100,72113,72125 TBL 72140,72152,72165,72177,72211,72224,72236,72250 TBL 72263,72275,72307,72322,72334,72346,72360,72373 TBL 76132,76140,76146,76154,76162,76170,76176,76203 TBL 76211,76217,76225,76233,76240,76246,76254,76261 TBL 76267,76275,7630 TBL 72405,72417,72431,72443,72455,72470,72502,72514 TBL 72526,72540,72552,72564,72576,72610,72622,72634 TBL 72646,72657,726712,76310,76316,76323,76331,76336 TBL 76344,76351,76357,76364,76372,76377,76405,76412 TBL 76417,76425,76432,76437,76445,76452,76,72703,72715,72727,72741,72752 TBL 72764,72776,73010,73021,73033,73045,73056,73070 TBL 73102,73113,73125,73136,73150,73162,731457,76464 TBL 76472,76477,76504,76511,76516,76523,76530,76535 TBL 76543,76550,76555,76562,76567,76574,76601,76605 TBL 76612,733,77734,77735,77736,77740,77741 TBL 77742,77743,77744,77745,77746,77747,77750,77751 TBL 77752,77753,77754,77754,77755,77756,7OFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; LARRY PEARSON DEC. 1973 ; CARL RALST7757,77760 TBL 77761,77761,77762,77763,77764,77764,77765,77766 TBL 77766,77767,77767,77770,77770,77771,77771,77772 TBL 77772,ON MAR. 1975 ; .SBTTL DEFINITIONS ; FPO BK [BJ BK] ; BK(I) = BI(I) * BI(I) + BJ(I) * BJ(I) ;IF BJ AND BK ARE NOT SPECIFIE77773,77773,77774,77774,77775,77775,77775 TBL 77776,77776,77776,77776,77777,77777,77777,77777 TBL 77777,77777,77777,77777,7777D, J = I+1, K = I+2 R0=%0 R1=%1 R2=%2 R3=%3 R4=%4 R5=%5 SP=%6 PC=%7 ;SPFPO$ MUST BE DEFINED IN AN ASSEMBLY 7,77777,77777,77777 .WORD 77777 .END FILE .IFDF SPFPO$ .GLOBL DEPW,DEPH,DECMD,DECMD1,DEDATA,DEDATS .GLOBL DEFORE,DEGET,DEPUT,FORMAT,DEDATF,DETLE .GLOBL QA,QADATF,QAERR .GLOBL $ADR,$MLR,$POLSH SQRT$= 1 ;CAUSES SQUARE ROOT SUBROUTINE IN FNCTN TO BE ASSEMBLED ATAN$= 1 ;CAUSES ARC-TANGENT SUBROUTINE IN FNCTN TO BE ASSEMBLED ; .SBTTL POWER SPECTRUM INITIALIZATION DEPW: MOV R1,-(SP) ;SAVE REGISTERS .TITLE FPO & FMP COMMANDS ;LAB APPLICATIONS-11 POWER SPECTRUM AND MAGNITUDE PHASE ANGLE ;DEC-11-SLABA-C-LA11 ;FILE SPPWR.MAC MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) MOV #DECMD,R1 ;POINTER TO COMMAND TABLE MOV R1,R2 MOV #2.,R0 ;77323 TBL 77326,77331,77335,77340,77343,77347,77352,77355 TBL 77360,77364,77367,77372,77375,77400,77403,77406 TBL 77412,77415 ;FILE ID SPPWR.1 .CSECT SPPWR ;COPYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS,77420,77423,77426,77431,77434,77437 TBL 77442,77444,77447,77452,77455,77460,77463,77466 TBL 77470,77473,77476,77501,77503,775 FURNISHED UNDER A LICENSE FOR USE ONLY ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE C06,77511,77513 TBL 77516,77520,77523,77526,77530,77533,77535,77540 TBL 77542,77545,77547,77552,77554,77556,77561,77563 TBL 77OPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PE565,77570,77572,77574,77576,77601,77603,77605 TBL 77607,77611,77613,77616,77620,77622,77624,77626 TBL 77630,77632,77634,77636,RSON EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHAL77640,77642,77643,77645 TBL 77647,77651,77653,77655,77656,77660,77662,77664 TBL 77665,77667,77671,77672,77674,77676,77677,7770L AT ALL TIMES REMAIN IN DEC. ;THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONST1 TBL 77702,77704,77705,77707,77710,77712,77713,77715 TBL 77716,77717,77721,77722,77723,77725,77726,77727 TBL 77731,77732,777RUED AS A ;COMMITMENT BY DIGITAL EQUIPMENT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS S ;K = J+1 = I+2 MOV #47.,R0 ;NON-EXISTENT BUFFER CODE TSTB 1(R3) ;SINGLE OR FLOATING BUFFERS? BGT P.SET2 ;BR IF FLOATINST (R1)+ BMI M.ERR TST (R1)+ BMI M.ERR TST (R1)+ BMI M.ERR MOV #53.,R0 ;UNNECESSARY CONST? INC @#DECMD1 BNE M.EG CMPB (R3),@#DEDATS ;K LEGAL BUFFER? BGT P.ERR P.SET1: MOV #42.,R0 ;INCORRECT FORMAT CODE TST (R3)+ ;IF BK IS NOT SPECRR ;BR IF ERROR JSR PC,@#DETLE ;ONE LAST ERROR CHECK CLR M.M ;INITALIZE M ; .SBTTL MAGNITUDE AND PHASE ANGLE CALCULATIONSIFIED BMI P.ERR ;IT IS AN ERROR MOV #52.,R0 ;TOO MANY BUFFERS? TST (R3) BPL P.ERR ;BR IF ERROR MOV #53.,R0 ;UNNECE M.MAIN: MOV M.M,R0 ;GET M JSR R5,DEGET ;GET BI(M) ON STACK DECMD MOV 2(SP),-(SP) ;DUP BI(M) MOV 2(SP),-(SP) MOV (SPSSARY CONST? INC @#DECMD1 BNE P.ERR ;BR IF ERROR JSR PC,@#DETLE ;ONE LAST ERROR CHECK CLR P.M BR P.MAIN P.SET2: CMPB),M.A ;SAVE BI(M) MOV 2(SP),M.A+2 JSR R4,$POLSH $MLR,.+2 ;SQUARE BI(M) MOV M.M,R0 ;GET M JSR R5,DEGET ;GET BJ(M) ON (R3),@#DEDATF ;K LEGAL BUFFER? BLE P.SET1 ;BR IF OK P.ERR: MOV #DEFORE,12(SP) ;REPLACE RTN ADDR WITH ERROR ;ROUTINE'S STACK DECMD+2 MOV 2(SP),-(SP) ;DUP BJ(M) MOV 2(SP),-(SP) MOV (SP),M.B ;SAVE BJ(M) MOV 2(SP),M.B+2 JSR R4,$POLSH $MADDRESS BR P.RTN1 ;GO RESTORE REGISTERS AND EXIT ;TO THE ERROR HANDLER ; .SBTTL COMPUTATION OF POWER SPECTRUM P.MAINLR ;SQUARE BJ(M) $ADR,.+2 ;ADD SQUARES MOV (SP)+,M.C ;SAVE SUM OF SQUARES MOV (SP)+,M.C+2 JSR R5,SQRT ;TAKE SQUARE R: MOV P.M,R0 JSR R5,DEGET ;GET BI(M) ON STACK DECMD MOV 2(SP),-(SP) ;DUPLICATE BI(M) ON STACK MOV 2(SP),-(SP) JSR R4,$OOT OF SUM BR M.MSQX M.C M.MSQX: MOV R1,-(SP) ;STACK RESULT MOV R0,-(SP) MOV M.M,R0 ;GET M JSR R5,DEPUT ;STORE BK(M)POLSH $MLR,.+2 ;SQUARE BI(M) MOV P.M,R0 ;RESTORE M JSR R5,DEGET ;GET BJ(M) ON STACK DECMD+2 MOV 2(SP),-(SP) ;DUPLICA DECMD+4 JSR R5,ATAN2 ;COMPUTE PHASE ANGLE BR M.MATX M.A,M.B M.MATX: MOV R1,-(SP) ;STACK IT MOV R0,-(SP) MOV M.M,R0TE BJ(M) ON STACK MOV 2(SP),-(SP) JSR R4,$POLSH $MLR ;SQUARE BJ(M) $ADR,.+2 ;ADD SQUARES MOV P.M,R0 ;RESTORE M J ;GET M JSR R5,DEPUT ;STORE BL(M) DECMD+6 INC M.M ;INCR M CMP M.M,@#DEDATA+2 ;DONE? BLT M.MAIN CLR R0 ;NO ERRORS SR R5,DEPUT ;POP BK(M) OFF THE STACK DECMD+4 INC P.M ;INCREMENT M CMP P.M,@#DEDATA+2 ;DONE? BLT P.MAIN CLR R0 ;NO ER M.EXIT: JSR PC,DEOV10 M.EXT1: MOV (SP)+,R5 ;RESTORE REGISTERS MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 RTSPECIFY A BUFFER CODE TST (R2)+ ;TEST IF BI SPECIFIED AND SET R2 ;TO POINT TO BJ SPECS BMI P.ERR MOV R2,R3 TST (R3ROR P.RTN: JSR PC,DEOV10 P.RTN1: MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 RTS PC ; .SBTTL )+ ;TEST IF BJ SPECIFIED AND SET R3 ;TO POINT TO BK SPECS BPL P.SET1 ;BR IF BJ IS SPECIFIED ;BJ AND BK ARE UNSPECIFIMAGNITUDE AND PHASE ANGLE INITIALIZATION DEPH: MOV R1,-(SP) ;SAVE REGISTERS MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) MOED. SET J = I+1, K = I+2 MOV (R1),(R2) ;BJ = B(I+1) INCB (R2) ;J = I+1 MOV (R2),(R3) ;BK = B(J+1) = B(I+2) INCB (R3) V R5,-(SP) MOV #51.,R0 ;FOUR BUFFERS MUST BE SPECIFIED MOV #DECMD,R1 TST (R1)+ ;SPECIFIED FOR THE MP CMP BMI M.ERR TS PC M.ERR: MOV #DEFORE,12(SP) ;REPLACE RETURN ADDRESS WITH ;ENTRY TO ERROR HANDLER BR M.EXT1 ; .SBTTL TEMPORARY DA ;TREAT AS INFINITY DIV$39: JSR R4,$POLSH $DVR,UPL$39 ;GET ARG1/ARG2 UPL$39: TST @4(R5) ;IF ARG2 >0, BIAS =0 BGE ATE$39 TA STORAGE M.A: 0,0 ;DATA ELEMENT FROM BI M.B: 0,0 ;DATA ELEMENT FROM BJ M.C: 0,0 ;C = A*A + B*B P.M: M.M: 0,0 ;TEMP ST ;IF ARG2<0, BIAS=SIGN(ARG1)*PI MOV #040511,8.(SP) ;PI MOV #007733,10.(SP) TST @2(R5) ;TEST ARG1 BGE ATE$39 ADD #1000OREAGE FOR NUMBER OF POINTS ;THE FLOATING POINT SUBROUTINES IN THIS MODULE WERE EXTRACTED FROM ;THE "FPMP" SOURCE FOR USE WIT00,8.(SP) ;-PI ATE$39: TST @SP ;SET CODES BR AT1$39 ;JOIN MAIN ROUTINE INF$39: ADD #18.,SP ;FLUSH STACK MOV #040311,R0 H "SPARTA". SOME SYMBOLS WERE CHANGED. ; .SBTTL $ATN03 .IFDF ATAN$ ; ATAN V003A .GLOBL ATAN,ATAN2; .IFNDF FPU .G;ANS = SIGN(ARG1)*PI/2 MOV #007733,R1 TST @2(R5) ;TEST ARG1 BGE INR$39 ;JUMP IF +PI/2 ADD #100000,R0 ;-PI/2 INR$39: RLOBL $ADR,$SBR,$MLR,$DVR,$POLSH,$POPR3; .ENDC ; THE FORTRAN ATAN AND ATAN2 FUNCTIONS ; CALLING SEQUENCE FOR ATAN: ; JSR R5,TS R5 ;RETURN TO USER ATAN: CLR -(SP) ;CLEAR SIGN FLAG CLR -(SP) ;CLEAR ATAN2 BIAS CLR -(SP) CLR -(SP) ;CLEAR QUADRATAN ; BR A ; .WORD ARGUMENT ADDRESS ;A: ; RETURNS ARCTAN(ARG) IN R0 AND R1. ; ; CALLING SEQUENCE FOR ATAN2: ; JSR R5,ATAANT BIAS CLR -(SP) MOV 2(R5),R4 ;GET ARG ADDRESS MOV 2(R4),-(SP) ;GET LOW ORDER ARG MOV @R4,-(SP) ;GET HIGH ORDER AT1$3N2 ; BR A ; .WORD ARGUMENT 1 ADDRESS ; .WORD ARGUMENT 2 ADDRESS ;A: ; RETURNS ACRTAN(ARG1/ARG2) IN R0 AND R1. ; IF ABS(ARG9: BGE PLU$39 ;JUMP IF QUADRANT 1 OR 3 ADD #100000,@SP ;GET ABS VALUE INC 12.(SP) ;FLAG - PLU$39: CMP @SP,#40200 ;CHECK I1/ARG2) > 2**24, THE RESULT IS ; SIGN(ARG1)*PI/2. ; IF ARG2 <0 THE RESULT IS ARCTAN(ARG1/ARG2) + ; SIGN(ARG1)*PI. F0=%1 F <1. BLO LE1$39 ;JUMP IF <1. BGT GT1$39 ;>1. TST 2(SP) ;CHECK LOW ORDER BEQ LE1$39 ;=1. GT1$39: MOV #140311,4(SP) F1=%1 F2=%2 F3=%3 F4=%4 F5=%5 .IFNDF FPU ATAN2: CLR -(SP) ;CLEAR SIGN FLAG CLR -(SP) ;CLEAR ATAN2 BIAS CLR -(S;-PI/2 MOV #007733,6(SP) ;ATAN(X)=PI/2-ATAN(1/X) DEC 12.(SP) ;ADJUST SIGN MOV 2(SP),-(SP) ;MOVE ARG DOWN MOV 2(SP),-(SPP) CLR -(SP) ;CLEAR QUADRANT BIAS CLR -(SP) MOV 2(R5),R4 ;GET FIRST ARG ADDRESS MOV 2(R4),-(SP) ;GET FIRST ARG MOV @R) MOV #40200,4(SP) ;INSERT 1. CLR 6(SP) JSR R4,$POLSH ;COMPUTE 1./X $DVR,LE1$39 LE1$39: MOV 2(SP),-(SP) ;MOVE ARG DOWN 4,-(SP) MOV @SP,R0 ;ARG1 TO R0 MOV 4(R5),R4 ;GET SECOND ARG ADDRESS MOV 2(R4),-(SP) ;GET SECOND ARG MOV @R4,-(SP) MOV MOV 2(SP),-(SP) CLR 4(SP) CLR 6(SP) CMP @SP,#037611 ;TAN(15) BLO L15$39 ;JUMP IF LESS THAN TAN(15) BHI TNS$39 ;JUM @SP,R1 ;ARG2 TO R1 BEQ INF$39 ;JUMP IF DENOMINATOR IS 0 ASL R0 ;GET ABS VAL ARG1 CLRB R0 ;GET EXPONENT SWAB R0 ASP IF > CMP 2(SP),#030243 BLOS L15$39 TNS$39: MOV #040006,4(SP) ;INSERT PI/6 MOV #005222,6(SP) MOV @SP,R0 ;ARG TO REGS L R1 CLRB R1 ;GET EXPONENT ARG2 SWAB R1 SUB R1,R0 ;GET EXPONENT DIFFERENCE CMP #26.,R0 ;CHECK MAGNITUDE BLT INF$39 MOV 2(SP),R1 MOV #131727,-(SP) ;PUSH -ROOT 3 MOV #140335,-(SP) MOV R1,-(SP) MOV R0,-(SP) ;PUSH ARG CLR -(SP) ;PUSH RG1 MOV @R4,R1 ;HIGH ORDER ARG2 BEQ INF$39 ;JUMP IF DENOMINATOR 0 ASL R0 CLRB R0 SWAB R0 ;EXPONENT OF ARG1 ASL R1 R1 ;COUNT ADDF (R0)+,F1 ;F1:= F1* X**2 + C(I) BGT XPD$39 ;LOOP MULF F2,F1 ;F1:= F1*X ADDF F3,F1 ;PI/6 OR 0.0 SUBF CLRB R1 SWAB R1 ;EXPONENT OF ARG2 SUB R1,R0 ;GET EXPONENT DIFFERENCE CMP #26.,R0 ;CHECK MAGNITUDE BLT INF$39 ;TRE F4,F1 ;P(X)-QUAD BIAS TST R4 ;TEST SIGN FLAG BEQ SG1$39 ;NO ADJUSTMENT NEGF F1 ;NEGATE RESULT FOR (-1,0)&(1,INF) SG1AT AS INFINITE LDF PI$39,F3 ;INITIALIZE BIAS=PI LDF @R3,F0 ;GET ARG1 CFCC BGE A1P$39 ;JUMP IF ARG1>0 NEGF F3 ;BIAS=$39: ADDF F5,F1 ;ATAN2 BIAS EXI$39: STF F1,-(SP) ;MOVE RESULT TO STACK MOV (SP)+,R0 ;AND THEN TO REGISTERS MOV (SP)+,R1 1. MOV #40200,-(SP) MOV #131727,-(SP) ;PUSH ROOT3 MOV #040335,-(SP) MOV R1,-(SP) ;PUSH ARG MOV R0,-(SP) JSR R4,$POLSSIGN(ARG1)*PI A1P$39: LDF @R4,F1 ;GET ARG2 CFCC BLT A2M$39 CLRF F3 ;IF ARG2>0, BIAS=0 A2M$39: DIVF F1,F0 ;ARG1/ARG2, H ;TRANSFORM ARG ; (ROOT3*X-1)/(ROOT3 +X) $MLR,$SBR,UP$39,$SBR,$DVR,L15$39 L15$39: MOV @SP,R0 ;GET ARG MOV 2(SP),R1 MOVSET FLOAT CC BR AT1$39 ;JOIN MAIN ROUTINE INF$39: LDF PI2$39,F1 ;RESULT=SIGN(ARG1)*PI/2 TST @R3 ;TEST ARG1 BGE EXI$39 R1,-(SP) ;GET THREE COPIES MOV R0,-(SP) MOV R1,-(SP) MOV R0,-(SP) JSR R4,$POLSH $MLR ;GET ARG**2 PLY$39 ;SET UP ;+PI/2 NEGF F1 ;-PI/2 BR EXI$39 ATAN: SETF ;SET FP MODE FOR FPU CLRF F3 ;CLEAR ATAN2 BIAS LDF @2(R5),F0 ;GET AR COEFFICIENTS $MLR,$ADR,$MLR,$ADR,$MLR,$ADR $MLR,$ADR,$MLR,$ADR $ADR ;P(X)+0 IF X<=1, P(X)-PI/2 IF X>1 SGN$39 ;ADJUSGUMENT AT1$39: CLR R4 ;CLEAR SIGN FLAG CFCC ;GET SIGN OF ARGUMENT STF F3,F5 ;F5=ATAN2 BIAS CLRF F3 ;CLEAR QUADRANT BT SIGN $ADR ;ADD ATAN2 BIAS $POPR3,EXI$39 ;POP RESULT TO REGS EXI$39: TST (SP)+ ;POP SIGN FLAG RTS R5 ;RETURN TO USEIAS BGE PLU$39 ;JUMP IF QUADRANT 1 OR 3 ABSF F0 ;ABS(X) INC R4 ;FLAG - PLU$39: LDF #1.0,F1 ;1.0 CMPF F0,F1 ;CHECK R UP$39: MOV (SP)+,10.(SP) ;MOVE STACK ITEM UP MOV (SP)+,10.(SP) JMP @(R4)+ PLY$39: MOV (SP)+,R0 ;POP POLY ARG MOV (IF X<=1.0 CFCC BLE LE1$39 GT1$39: DEC R4 ;X>1.0, ADJUST SIGN FLAG DIVF F0,F1 ;1.0/X LDF F1,F0 ;ATAN(X)=PI/2-ATAN(1/XSP)+,R1 MOV #CON$39+4,R2 ;POINT TO COEFFICIENT TABLE MOV #5,R3 ;LOOP 5 BR PY1$39 PY2$39: MOV R1,-(SP) ;PUSH ARG MOV R0) LDF PI2$39,F3 ;QUADRANT BIAS=PI/2 LE1$39: STF F3,F4 ;F4=QUADRANT BIAS CLRF F3 ;F3=0.0 CMPF T15$39,F0 ;COMPARE TAN(1,-(SP) PY1$39: MOV -(R2),-(SP) ;PUSH CONSTANT MOV -(R2),-(SP) DEC R3 ;COUNT BGT PY2$39 JMP @(R4)+ SGN$39: TST 8.(SP5) : X CFCC BGE L15$39 ;X<= TAN(15) LDF PI6$39,F3 ;F3=PI/6 LDF F0,F1 MULF RT3$39,F0 SUBF #1.0,F0 ;X*ROOT3-1.0 AD) ;CHECK SIGN FLAG BEQ SG1$39 ADD #100000,@SP ;NEGATE RESULT FOR (-1,0) & (1,INF) SG1$39: JMP @(R4)+ .ENDC .IFDF FPUDF RT3$39,F1 ;X+ROOT3 DIVF F1,F0 ;(X*ROOT3-1.0)/(X+ROOT3) L15$39: LDF F0,F2 ;X MULF F0,F0 ;X**2 MOV #FCO$39,R0 ;POIN ATAN2: SETF ;SET FP MODE FOR FPU MOV 2(R5),R3 ;ADDRESS OF ARG1 MOV 4(R5),R4 ;ADDRESS OF ARG2 MOV @R3,R0 ;HIGH ORDER ATER TO POLYNOMIAL CONSTANTS MOV #4,R1 ;COUNT OF COEFFICIENTS LDF (R0)+,F1 ;INITIALIZE ACCUMULATOR XPD$39: MULF F0,F1 DEC ASL R0 ;DUMP SIGN CMP R0,#63000 BLO ONE$20 ;JUMP IF EXPONENT MAGNITUDE < 2**-28 .IFNDF FPU TST -(SP) ;SAVE SPACE FORUMENT REDUCTION SETI ;SHORT INTEGERS MOV #FCO$20,R0 ;POINTER TO CONSTANTS LDCFD @R4,F2 ;GET ARGUMENT MODD (R0)+,F2 ;F SCALE CLR -(SP) ;PUSH A 1. MOV #40200,-(SP) MOV 2(R4),-(SP) ;GET LOW ORDER ARGUMENT MOV @R4,-(SP) ;HIGH ORDER MOV 2(2=FRACT(X*LOG2(E)) STCDI F3,R4 ;R4=INT (X*LOG2(E)) LDD #1.0,F0 ;F0=1.0 DIVD (R0)+,F2 ;Y=F2/(2*LOG2(E)) SETF LDCDF FR4),-(SP) ;NEED TWO COPIES OF IT MOV @R4,-(SP) JSR R4,$POLSH ;ENTER POLISH MODE PLE$20,$MLR ;PUSH LOG2(E) $RI ;FIX LO2,F2 ;REST IN SINGLE PRECISION CFCC ;TEST FOR UNDERFLOW BEQ SC1$20 ;APPROXIMATION RESULT IS 1.0 LDF F2,F3 MULF F3,F3G2(E)*X ESV$20 ;SAVE EXPONENT SCALE $IR ;FLOAT IT PLE$20,$DVR,$SBR ;PUSH LOG2(E) CFR$20 ;PUSH CONTINUED FRACTION C ;Y*Y ADDF (R0)+,F3 ;B1+Y*Y LDF (R0)+,F1 DIVF F3,F1 ;A1/(B1+Y*Y) ADDF F2,F1 ADDF (R0)+,F1 ;A0+Y+A1/(B1+Y*Y) DIVF FONSTANTS $MLR ;Y*Y $ADR ;B1+Y*Y $DVR ;A1/(B1+Y*Y) $ADR ;Y+A1/(B1+Y*Y) $ADR ;A0+Y+A1/(B1+Y*Y) $DVR ;Y/(A01,F2 ;Y/(A0+Y+A1/(B1+Y*Y)) MULF #2.0,F2 SUBF F2,F0 ;1-2*Y/. . . MULF F0,F0 ;(1-2*Y/. . . )**2 SC1$20: STF F0,-(SP) ;MO+Y+A1/(B1+Y*Y)) INC$20 ;-2*Y/(A0+Y+A1/(B1+Y*Y)) $ADR ;1-2*Y/......... DUP$20 ;DUPLICATE IT $MLR ;(1-2*Y/.....)**VE APPROXIMATION TO STACK .ENDC .IFNDF FPU ZFR$20: CMP (SP)+,(SP)+ ;FLUSH CFRACT ARG ;RESULT IS 1. .ENDC SCL$20: RTS R5 ;EXIT PI$39: 040511,007733 ;PI PI2$39: 040311,007733 ;PI/2 T15$39: 037611,030243 ;TAN(15) PI6$39: 040006,005222 2 SCL$20 ;EXIT POLISH MODE AND SCALE RESULT INC$20: ADD #100200,@SP ;MULTIPLY BY -2.0 JMP @(R4)+ ;GO BACK TO LIST DUP;PI/6 RT3$39: 040335,131727 ;ROOT3 .ENDC FCO$39: 037305,035302 ;.0963034789 137421,056514 ;-.1419574624 037514,143333 ;.$20: MOV 2(SP),-(SP) ;DUPLICATE STACK ITEM MOV 2(SP),-(SP) JMP @(R4)+ PLE$20: MOV #125073,-(SP) ;PUSH LOG2(E) MOV #40271999773201 137652,125244 ;-.3333331319 CON$39: 040200,000000 ;.9999999999 .ENDC ; .SBTTL $EXP04 .IFDF EXP$ ; EXP V000,-(SP) JMP @(R4)+ ESV$20: MOV @SP,10.(SP) ;SAVE EXPONENT SCALE JMP @(R4)+ CFR$20: ROL @SP ;SHIFT MODIFIED ARG ROL 4A .GLOBL EXP,$ERRA; .IFNDF FPU .GLOBL $ADR,$SBR,$MLR,$DVR,$IR,$RI,$POLSH; .ENDC ; EXP THE REAL EXPONENTIATION ROUTIR0 ;SAVE SIGN SUB #400,@SP ;DIVIDE BY 2. BLOS ZFR$20 ;UNDERFLOW. MAKE ARG 0 ROR R0 ;GET SIGN BACK ROR @SP MOV @SP,RNE ; CALLING SEQUENCE: ; JSR R5,EXP ; BR A ; .WORD ARG ADDRESS ;A: ; RETURNS EXPONENTIAL IN R0 AND R1. F0=%0 F1=%1 0 ;GET MODIFIED ARGUMENT MOV 2(SP),R1 ;IN REGISTERS MOV #036602,-(SP) ;PUSH -12.01501675 MOV #141100,-(SP) MOV R1,-(SP) F2=%2 F3=%3 EXP: MOV 2(R5),R4 ;GET ARGUMENT POINTER MOV @R4,R0 ;GET HIGH ORDER ARG BGT POS$20 ;JUMP IF ARG + CMP R0, MOV R0,-(SP) MOV #071571,-(SP) ;PUSH 601.8042667 MOV #042426,-(SP) MOV #056133,-(SP) ;PUSH 60.0901907 MOV #041560,-(S#141662 BHI ZER$20 ;JUMP IF EXPONENT < -88.7 BR SMT$20 POS$20: CMP R0,#41660 BHI OVR$20 ;JUMP IF EXPONENT > 87 SMT$20:P) MOV R1,-(SP) MOV R0,-(SP) MOV R1,-(SP) MOV R0,-(SP) JMP @(R4)+ .ENDC .IFDF FPU SETD ;DOUBLE PRECISION ARGLOG2(E) DOUBLE PRECISION 024534,013761 040470,125073 ;2*LOG2(E) DOUBLE PRECISION 024534,013761 041560,056133 ;B1=60.0901INITIAL ESTIMATE LDF @2(R5),F2 ;GET X LUP$41: LDF F0,F1 ;E=E' LDF F2,F0 ;X DIVF F1,F0 ;X/E ADDF F1,F0 ;X/E+E DE907 042426,071571 ;A1=601.8042667 141100,036602 ;A0=-12.01501675 .ENDC .ENDC ; .SBTTL $SQT03 .IFDF SQRT$ ; SQRT VC R0 ;COUNT DIVF #2.0,F0 ;E'=(X/E+E)/2 BGT LUP$41 STF F0,-(SP) ;RESULT TO STACK MOV (SP)+,R0 ;AND THENCE TO R0,R1 003A .GLOBL SQRT,$ERR; .IFNDF FPU .GLOBL $ADR,$DVR,$POLSH; .ENDC ; SQRT THE REAL SQUARE ROOT FUNCTION ; CALLING SEQMOV (SP)+,R1 RTS R5 ;EXIT ERR$41: JSR R5,$ERR ;ERROR 4,11 RTS R5 ;EXIT .BYTE 4,11. ZER$41: CLR R0 CLR R1 RTS R5UENCE: ; JSR R5,SQRT ; BR A ; #ARG ;A: ; RETURNS THE SQUARE ROOT IN R0 AND R1. F0=%0 F1=%1 F2=%2 .IFDF FPU SQRT: .ENDC .ENDC .ENDC ;ASSEMBLY PARAMETERS ;GT40$ ;IF DEFINED ASSEMBLE CODE FOR GT40 ;VR14$ ;IF DF CODE FOR VR14 .I MOV @2(R5),R1 ;GET HIGH ORDER ARGUMENT .ENDC .IFNDF FPU SQRT: MOV R5,-(SP) MOV 2(R5),R5 ;GET ARGUMENT ADDRESS MOV @R5,FDF CAPS$ .GLOBL DEMXMN .ENDC .GLOBL DEDATA,$POLSH,$MLR,$CMR,DEDID,DEASGN .GLOBL $DVR,$SBR,SAVARG,RSTARG .GLOBL DELST,DEGER1 ;GET HIGH ORDER ARGUMENT .ENDC BMI ERR$41 ;ERROR IF ARGUMENT NEGATIVE BEQ ZER$41 ;FAST EXIT IF ZERO .IFNDF FPU MT,DEPUT .IFDF GT40$ .GLOBL GTRCAL,DISMPO .ENDC ;ROUTINES CALLED:DEMXMN,DESCA,$POLSH ; SAVARG,RSTARG ;---DEOV10--- OV #3,-(SP) ;PUSH ITERATION COUNT .ENDC ASR R1 ;FORM INITIAL ESTIMATE ADD #20100,R1 CLR -(SP) ;USE ONLY HIGH ORDER PAR ;THIS ROUTINE CHKS BUFRS POINTED TO BY 'DEDID & DEDID+2' TO SEE ;IF EITHER ONE IS A F.P. BUFR AND ;IF GT40 DISPLAY A FLAG IS TS FIRST MOV R1,-(SP) ;'CAUSE ADD AND DIVIDE ARE .IFNDF FPU CLR -(SP) ;FASTER THAT WAY MOV @R5,-(SP) CLR -(SP) MOV SET TO TELL GT40 DISPLY ROUTINE TO ;RECALCULATE ITS DISPLAY BUFR WHENEVER THE BUFR IN QUESTION ;IS BEING DISPLAYED. FOR BOTH R1,-(SP) LUP$41: JSR R4,$POLSH ;ENTER POLISH MODE $DVR,$ADR,UPL$41 ;(X/E+E) UPL$41: SUB #200,@SP ;(X/E+E)/2 DEC 4(SP) ;COGT40 & VR14 ;THE MULT & OFFSET IS CALC & STUCK IN THE CORRECT ASSIGN TBL ENTRY ;AND IN THE CORRECT I/D TBL. FOR VR14, THE DATMOV (SP)+,R0 ;GET APPROXIMATION RESULT MOV (SP)+,R1 .IFNDF FPU MOV (SP)+,R4 ;GET INT(X*LOG2(E)) .ENDC SWAB R4 ;MAKE IUNT LOOP BEQ OUT$41 MOV 2(R5),-(SP) ;USE LOW ORDER PARTS MOV @R5,-(SP) ;TOO FROM NOW ON MOV 6(SP),-(SP) MOV 6(SP),-(SPNTO EXPONENT MODIFIER CLRB R4 ASR R4 ADD R4,R0 ;ADD IN EXPONENT MODIFIER BMI OVR$20 ;TEST OVERFLOW RTS R5 ONE$20:) BR LUP$41 ;GO FOR ANOTHER ITERATION OUT$41: MOV (SP)+,R0 ;GET RESULT INTO R0,R1 MOV (SP)+,R1 TST (SP)+ ;POP ITERATION CLR R1 MOV #40200,R0 ;EXP(TINY) = 1. RTS R5 OVR$20: MOV #2404,R0 ;ERROR 4,5 BR ECL$20 ZER$20: MOV #2405,R0 ;ERROR 5,5 COUNTER RTN$41: MOV (SP)+,R5 RTS R5 ;RETURN TO CALLER ERR$41: JSR R5,$ERR ;ERROR 4,11 BR RTN$41 .BYTE 4,11. ZER$41: ECL$20: JSR R5,$ERRA CLR R0 ;RETURN 0 CLR R1 RTS R5 .IFDF FPU ; ORDER-DEPENDENT CONSTANTS FCO$20: 040270,125073 ;CLR R0 CLR R1 BR RTN$41 .ENDC .IFDF FPU MOV #3,R0 ;ITERATION COUNT SETF ;SINGLE PRECISION FP LDF (SP)+,F0 ;GET R (PC)+ TEMP1: 0 JSR PC,DEFLC1 DEFLC0: TSTB @#DEDID+3 BNE DEFLC2 RTS PC DEFLC2: MOV #DEDID+2,R1 MOV (R1),TEMP2 MOV =0, OFFSET=MIN, MULT=DENORM/(MAX-MIN) ; IF MIN=0? BPL DESCA1 ;YES MOV R2,-(SP) ;NO, PUT OFFSET(MAX) ON STACKN TBL ENTRY IS 1ST ? BEQ DEFLC3 ;YES ADD #12,R5 ;NO, ADDR+2 OF 2ND ENTRY DEFLC3: .IFDF GT40$ ADD #DISMPO,R0 ;INDEX F MOV R1,-(SP) BR DESCA2 DESCA1: TST R3 ;MIN VAL >= 0? BMI DESCA3 ;NO MOV R4,-(SP) ;YES, PUT OFFSET(MIN) ON STACK MOOR STORING: MOV R1,(R0)+ ;'MULT' IN I/D TBL MOV R2,(R0)+ MOV R3,(R0)+ ;'OFFSET' IN I/D TBL MOV R4,(R0) .ENDC .IFDF VV R3,-(SP) DESCA2: MOV @#DENORM+2,-(SP) ;PUT DENORM ON STACK MOV @#DENORM,-(SP) MOV R2,-(SP) ;PUT MAX ON STACK MOV R1,-(SR14$ CLR TEMP1 ;SET UP FOR S.P. BUFR TYPE AND #,THEN DEC R5 ;SAVE IN TEMP1 MOVB (R5),TEMP1 INC R5 .ENDC MOV R1,(R5P) MOV R4,-(SP) ;PUT MIN ON STACK MOV R3,-(SP) JSR R4,@#$POLSH ;MULT=DENORM/(MAX-MIN) $SBR,$DVR,.+2 BR DESCA6 DESCA3:)+ ;ALSO SAV 'MULT' IN ASIGN TBL MOV R2,(R5)+ MOV R3,(R5)+ ;AND 'OFFSET' IN ASSIGN TBL MOV R4,(R5) .IFDF VR14$ ;NOW SCA CLR -(SP) ;PUT OFFSET(0) ON STACK CLR -(SP) BIC #100000,R1 ;ABS VAL OF MAX BIC #100000,R3 ;ABS VAL OF MIN JSR PC,@#SAVLE THE DATA DOWN ;SCALED DATA = (DATUM - OFFSET)*SCAFAC MOV @#DEDATA,DEDICT ;DN CTR CLR R0 DEFLC4: MOV R0,(PC)+ DEDIR0:ARG MOV R2,-(SP) MOV R1,-(SP) ;PUT ABS VAL OF MAX ON STACK MOV R4,-(SP) MOV R3,-(SP) ;PUT ABS VAL OF MIN ON STACK JSR 0 JSR PC,@#SAVARG MOV R2,-(SP) MOV R1,-(SP) ;FL.PT. SCA FAC JSR R5,@#DEGET TEMP2 ;GET DATUM MOV R4,-(SP) MOV R3R4,@#$POLSH $CMR,.+2 BPL DESCA4 ;/MAX/>=/MIN/ JSR PC,@#RSTARG ;/MIN/ > /MAX/ MOV R3,R1 MOV R4,R2 ;PUT GREATER OF 2 A,-(SP) ;GET OFFSET JSR R4,@#$POLSH $SBR,$MLR,.+2 ;(DATUM-OFFSET)*SCA FAC MOV DEDIR0,R0 JSR R5,@#DEPUT TEMP1 ;PUT DABS VALS IN R1,R2 BR DESCA5 DESCA4: JSR PC,@#RSTARG ;GREATER OF 2 ABS VALS ALREADY IN R1,R2 DESCA5: MOV @#DENORM+2,-(SP) MOTUM IN S.P. BUFR JSR PC,@#RSTARG INC R0 DEC (PC)+ DEDICT: 0 BNE DEFLC4 .ENDC RTS PC ;---DESCA--- ;CALL: JSR PC,DV @#DENORM,-(SP) ;PUT 'DENORM' ON STACK MOV R2,-(SP) MOV R1,-(SP) ;PUT LARGER OF 2 ABS VALS ON STACK JSR R4,@#$POLSH ;'DENA IS ;SCALED DOWN & PUT IN THE S.P. BUFR DEOV10: TSTB @#DEDID+1 BEQ DEFLC0 MOV #DEDID,R1 MOV (R1),(PC)+ TEMP2: 0 CLESCA ;INPUT: ; R1=H.ORD OF MAX VAL, R2=L.ORD OF MAX VAL ; R3=H.ORD OF MIN VAL, R4=L.ORD OF MIN VAL ;FUNCTION: ; IF MAX>MIN>N IN DEC. ;THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE ;WITHOUT NOTICE AND SHOULD NOT BE CONSTRUED AS A ;COMMITMETO POINT TO THE DESIRED BUFFER NUMBER - BUFFER TYPE ;BYTE PAIR IN THE DECMD LIST. R0 WILL BE INCREMENTED BY 2 ;WHEN IT RETURNNT BY DIGITAL EQUIPMENT CORPORATION. ;DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ;ITS SOFTWARE ON EQUIPMENTS. R1 MUST BE SET TO POINT TO THE FIRST ;SINGLE PRECISION BUFFER. R2 MUST BE SET TO THE BYTE ;INCREMENT BETWEEN BUFFERS. R1ORM'/(MAX-MIN) IF POS-NEG DATA $DVR,.+2 ;OR DESCA6: MOV (SP)+,R1 MOV (SP)+,R2 ;RTNED IN R1,R2 = MULT MOV (SP)+,R3 MOV WHICH IS NOT SUPPLIED BY DEC. ;LDP SOFTWARE DEVELOPMENT, 1974-5 ; LARRY PEARSON DEC. 1973 ; CARL RALSTON MAR. 1975 ;SP(SP)+,R4 ;RTNED IN R3,R4 = OFFSET RTS PC DESCA7: MOV #40200,R1 ;MULT=1 CLR R2 CLR R3 ;OFFSET=0 CLR R4 RTS PC .ENDCFAC$ MUST BE DEFINED IN AN ASSEMBLY FILE .IFDF SPFAC$ ;DEFINITIONS R0= %0 R1= %1 R2= %2 R3= %3 R4= %4 R5= %5 SP= %6 PC= %7 .IFDF CAPS$ .GLOBL FFTC,F.R,F.MUL .ENDC .GLOBL DEAC,DECC .GLOBL DECMD,DEDATA,DEDATS,DEFORE,FORMAT,DECMD1,DETLE .IFNDF EAE EAE=0 .ENDC .IFNDF EIS EIS=0 .ENDC .IFNDF NON NON=1-EAE-EIS .ENDC ; FORMAT COMMAND DEFINITIONS CRLFC0= 3 ;CR-LF COMBINATION TEXT= 7 ;TEXT OUTPUT SING= 11 ;OUTPUT A S.P. DECIMAL VALUE EXIT= 0 ;EXIT INTERPRETER ; .SBTTL CORRELATION ENTRY AND INITIALIZATION ;AUTO CORRELATION ENTRY DEAC: MOV #-1,R0 ;SET FOR AUTOCORRELATI.TITLE SPCOR AUTO & CROSS ;LAB APPLICATIONS-11 CORRELATION COMMANDS ;DEC-11-SLABA-C-LA12 ;FILE SPCOR.MAC ;FILE ID SPCOR.1 .ON BR C.SETU ;CROSS CORRELATION ENTRY DECC: CLR R0 ;SET FOR CROSS CORRELATION ;SETUP ROUTINE - SAVE REGISTERS AND COCSECT SPCOR ;COPYRIGHT (C) 1974,1975 ;DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ;THIS SOFTWARE IS FURNISHED UNDER A LMPUTE BUFFER ADDRESSES C.SETU: MOV R1,-(SP) ;SAVE REGISTERS MOV R2,-(SP) MOV R3,-(SP) MOV R4,-(SP) JSR R5,C.SET2 ;SAVICENSE FOR USE ONLY ON A ;SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION ;OF THE ABOVE COPYRIGHT NOTICE. THIE R5 & LOAD IT WITH A PNTR ;TO THE FOLLOWING SUBROUTINE. ;SUBROUTINE TO TEST FOR S.P. BUFFERS AND TO CONVERT THEM TO ;AS SOFTWARE, OR ANY OTHER COPIES ;THEREOF, MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY ;OTHER PERSON EXCEPT FOR USE DDRESSES. THIS SUBROUTINE MUST FOLLOW THE "JSR R5,C.SET2" ;INSTRUCTION ABOVE FOR THE "JSR PC,(R5)" INSTRUCTIONS TO WORK ;WHICON SUCH SYSTEM AND TO ONE WHO AGREES ;TO THESE LICENSE TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE ;SHALL AT ALL TIMES REMAIH ARE USED AFTER "C.SET2:". REGISTERS R0, R1, AND R2 MUST ;BE INITIALIZED PRIOR TO CALLING THIS SUBROUTINE. R0 MUST BE ;SET @#DEDATS+2,R1 ;ADDR OF FIRST S.P. BUFFER MOV @#DEDATA+2,R2 ;NMBR OF ELEMENTS IN BUFFER ASL R2 ;MULTIPLY BY 2 FOR WORDS JSCALLS ;PERFORM TRANSFORM ON BUFFER 1 C.FF1: JSR R5,FFTC C.N1-.-2 MOV F.R,R1 ;R1 = LOG2(# POINTS)-2 CMPB (R1)+,(R1)+R PC,(R5) ;CONVERT BUFFER TYPE & # TO ADDR MOV R4,C.REP1 ;POINTER TO FIRST REAL BUFFER - SI TST (R0) ;IS BUFFER SJ SPECIFI ;R1 = LOG2(# POINTS) ASL R1 ;R1 = 2 * LOG2(# POINTS) SUB C.SCL1,R1 ;R1 = 2*LOG2(# POINTS)-SCL1 MOVB ERRTBL(R0),R0 ;TRANSED BMI C.SET3 ;BR IF NOT C.SET5: JSR PC,(R5) ;CONVERT BUFFER TYPE & NUMBER TO ADDR TST (SP) ;AUTO OR CROSS CORRELATION? LATE ANY FFT ERROR ;TO A SPARTA ERROR CODE BNE C.ERR TST (SP) ;AUTO OR CROSS CORRELATION? BNE C.CRSP ;BR IF AUTO BNE C.SET4 ;BR IF AUTO MOV R4,C.REP2 ;POINTER TO SECOND REAL BUFFER - SJ JSR PC,(R5) ;DO SAME FOR SK MOV R4,C.IMP1 ;SK ;PERFORM TRANSFORM ON BUFFER 2 JSR R5,FFTC C.N2-.-2 ;SINCE FFT TYPE ERRORS ARE FOUND IN THE CALL ABOVE, NO TEST ;IS N IS IMAG BUFFER USED WITH SI JSR PC,(R5) ;DO SAME FOR SL MOV R4,C.IMP2 ;SL IS IMAG BUFFER USED WITH SJ BR C.CLR ;GO CLEAEEDED HERE. SUB C.SCL2,R1 ;R1 = 2*LOG2(# POINTS)-SCL1-SCL2 BR C.CRSP ;GO DO CROSS POWER SPECTRUM C.ERR: TST (SP)+ ;CL, R2, AND R5 ARE LEFT UNCHANGED. ;R4 CONTAINS THE ADDRESS OF THE S.P. BUFFER. C.SETA: MOVB (R0)+,R3 ;BUFFER NUMBER TO R3 TR IMAG BUFFERS ; SPECIFY BUFFERS SJ, SK, AND SL C.SET3: MOV R0,R4 ;#DECMD+2 MOV R4,R3 TST -(R3) ;R3 = #DECMD MOV (STB (R0)+ ;BUFFER TYPE MUST BE S.P. BNE C.ERR0 ;BR IF NOT S.P. MOV R1,R4 ;ADDR OF FIRST S.P. BUFFER CMPB R3,@#DEDATS ;LR3)+,(R4)+ ;(DECMD+2)=(DECMD) INCB (R3) ;J = I + 1 TST (SP) ;AUTO OR CROSS? BNE C.SET5 ;BR IF AUTO MOV (R3)+,(R4)+ ;(EGAL BUFFER NUMBER BGT C.ERR1 ;BR IF A BAD BUFFER NUMBER C.STA1: DEC R3 ;DECR BUFFER NUMBER BEQ C.STAR ;BR IF BUFFER ADDDECMD+4)=(DECMD+2) INCB (R3) ;K = I + 2 MOV (R3)+,(R4)+ ;(DECMD+6)=(DECMD+4) INCB (R3) ;L = I + 3 BR C.SET5 C.SET4:R COMPUTED ADD R2,R4 ;COMPUTE ADDRESS OF NEXT BUFFER. BR C.STA1 C.STAR: RTS PC C.ERR0: BPL C.ERR2 ;BR IF FLOATING MOV R4,C.IMP1 TSTB (R0) ;CHECK FOR EXCESS BUF SPECS BPL C.ERR3 ;BR IF TOO MANY ; .SBTTL CLEAR IMAGINARY BUFFERS C.CLR: MOV #2.,R0 ;SPECIFY A BUFFER ;COMMAND FORMAT BR C.STAE C.ERR1: MOV #47.,R0 ;BUFFER NON-EXISTENT C.STAE: TST (SP)+ ;CJSR PC,@#DETLE ;ONE LAST ERROR CHECK MOV @#DEDATA+2,R0 ;NMBR OF ELEMENTS IN BUFFER MOV C.IMP1,R1 MOV C.IMP2,R2 MOV R0,C.LEAR RTN FROM STACK BR C.ERR C.ERR2: MOV #7.,R0 ;BUFF MUST BE SP BR C.STAE C.ERR3: MOV #52.,R0 ;EXTRA BUFFER SPECIFIED N1 ;NMBR OF POINTS FOR FFT MOV R0,C.N2 MOV R0,(PC)+ ;USED IN FINAL CALCULATIONS C.TMPN: 0 ;COUNTS DOWN FROM N CLR C.IN BR C.ERR C.ERR4: MOV #53.,R0 ;UNNECESSARY CONSTANT SPECIFIED BR C.ERR C.SET2: MOV R0,-(SP) ;KEEP AUTO/CROSS CORR SWITCH OV1 ;DIRECTION OF FFT IS FWRD CLR C.INV2 TST (SP) ;AUTO OR CROSS CORR? BEQ C.CLR1 ;BR IF CROSS MOV R1,R2 ;WASTE SOME N STACK INC @#DECMD1 ;TEST FOR ANY CONST SPECIFIED BNE C.ERR4 ;BR IF ERROR MOV #DECMD,R0 ;POINTER TO COMMAND TABLE MOV TIME, SAVE SOME CORE. ;CLEAR IMAG1 TWICE. C.CLR1: CLR (R1)+ CLR (R2)+ DEC R0 BNE C.CLR1 ; .SBTTL CORRELATION FFT SWITCH C.SWIT: 0 BEQ C.CSP1 ;BR IF CROSS CORRELATION MOV R0,R2 ;C.REP1 REPLACED C.REP2 MOV R1,R3 ;C.IMP1 REPLACES C.IM*IMAG(B) BVS C.OFLO ;SCALE IF OVERFLOW MOV C.TMPR,(R0)+ ;STORE XPROD IN SI & SJ OR SK IF XCORR MOV C.TMPI,(R1)+ ;AND INCRP2 SUB C.SCL1,C.SCLF ;SCLF = 2*LOG2(# POINTS)-SCL1-SCL1 C.CSP1: .IFG EAE MOV #F.MPLI,R4 ;EAE HARDWARE ADDRESSES MOV #F.PREMENT POINTERS CMP (R2)+,(R3)+ DEC C.TMPN ;ARE WE DONE? BNE C.CSP1 ;BR IF MORE TO DO .ENDC ; .SBTTL DITTO - NON VEROD,R5 MOV (R0),(R4)+ ;MPLI=REAL(A) MOV (R2),(R4) ;MCND=REAL(B) INC @#F.SHFT MOV (R5),(PC)+ ;TMPR=REAL(A)*REAL(B) C.SWITSION .IFG NON MOV R2,-(SP) ;MULTIPLY SUBR ZAPS R2-R5 MOV R3,-(SP) MOV (R2),(PC)+ ;REAL(B) C.BR: 0 MOV (R3),(PC)+ ;I: 0 ;TEMPORARY FOR REAL PART OF XPROD MOV (R1),-(R4) ;MPLI=IMAG(A) MOV (R3),@#F.MCND ;MCND=IMAG(B) INC @#F.SHFT ADD (RMAG(B) C.BI: 0 MOV (R0),R4 ;MPLI=REAL(A) MOV C.BR,R5 ;MCND=REAL(B) JSR PC,F.MUL MOV R3,(PC)+ ;TMPR=REAL(A)*REAL(B) C5),C.TMPR ;TMPR=REAL(A)*REAL(B)+IMAG(A)*IMAG(B) BVS C.OFLO ;GO SCALE IF OVERFLOW MOV (R1),(R4)+ ;MPLI=IMAG(A) MOV (R2),(R.TMPR: 0 MOV (R1),R4 ;MPLI=IMAG(A) MOV C.BI,R5 ;MCND=IMAG(B) JSR PC,F.MUL ADD R3,C.TMPR ;TMPR=REAL(A)*REAL(B)+IMAG(A)*4) ;MCND=REAL(B) INC @#F.SHFT MOV (R5),(PC)+ ;TMPI=IMAG(A)*REAL(B) C.TMPI: 0 ;TEMPORARY FOR IMAG PART OF XPROD MOV (R0)IMAG(B) BVS C.OFLO ;SCALE IF OVERFLOW MOV (R1),R4 ;MPLI=IMAG(A) MOV C.BR,R5 ;MCND=REAL(B) JSR PC,F.MUL MOV R3,(PC)+,-(R4) ;MPLI=REAL(A) MOV (R3),@#F.MCND ;MCND=IMAG(B) INC @#F.SHFT SUB (R5),C.TMPI ;TMPI=IMAG(A)*REAL(B)-REAL(A)*IMAG(B) ;TMPI=IMAG(A)*REAL(B) C.TMPI: 0 MOV (R0),R4 ;MPLI=REAL(A) MOV C.BI,R5 ;MCND=IMAG(B) JSR PC,F.MUL SUB R3,C.TMPI ;TMPIBVS C.OFLO ;GO SCALE IF OVERFLOW MOV C.TMPR,(R0)+ ;STORE XPROD IN S1 AND S2 MOV C.TMPI,(R1)+ ;AND INCREMENT POINTERS CMP =IMAG(A)*REAL(B)-REAL(A)*IMAG(B) BVS C.OFLO ;SCALE IF OVERFLOW MOV (SP)+,R3 ;RESTORE POINTERS MOV (SP)+,R2 MOV C.TMPR,(EAR AUTO/CROSS CORR SWITCH FROM STACK MOV #DEFORE,12(SP) ;MAKE RETURN TO ERROR ROUTINE BR C.RTN ;FFT TO SPARTA ERROR CODE(R2)+,(R3)+ DEC C.TMPN ;ARE WE DONE? BNE C.CSP1 ;BR IF MORE TO DO .ENDC ; .SBTTL DITTO - EIS VERSION .IFG EIS M CONVERSION TABLE ERRTBL: .BYTE 0,38.,39.,37.,38. .EVEN ; .SBTTL COMPUTATION OF CROSS POWER SPECTRUM - EAE VERSION ;CROSOV (R0),R4 ;MPLI=REAL(A) MUL (R2),R4 ;MCND=REAL(B) ASHC #1,R4 MOV R4,(PC)+ ;TMPR=REAL(A)*REAL(B) C.TMPR: 0 MOV (R1),RS POWER SPECTRUM OF COMPLEX FREQUENCY DOMAIN BUFFERS ;"A" (S1=REAL, S3=IMAG) AND "B" (S2=REAL, S4=IMAG) YIELDS "C" ;(S1=REAL, 4 ;MPLI=IMAG(A) MUL (R3),R4 ;MCND=IMAG(B) ASHC #1,R4 ADD R4,C.TMPR ;TMPR=REAL(A)*REAL(B)+IMAG(A)*IMAG(B) BVS C.OFLO ;S2=IMAG). ;REAL(C) = REAL(A)*REAL(B) + IMAG(A)*IMAG(B) ;IMAG(C) = IMAG(A)*REAL(B) + REAL(A)*IMAG(B) C.CRSP: MOV R1,(PC)+ ;SGO SCALE IF OVERFLOW MOV (R1),R4 ;MPLI=IMAG(A) MUL (R2),R4 ;MCND=REAL(B) ASHC #1,R4 MOV R4,(PC)+ ;TMPI=IMAG(A)*REAL(B)AVE SCALE FACTOR C.SCLF: 0 MOV C.REP1,R0 MOV C.IMP1,R1 MOV C.REP2,R2 MOV C.IMP2,R3 MOV (SP)+,(PC)+ ;STORE AUTO/CROSS C.TMPI: 0 MOV (R0),R4 ;MPLI=REAL(A) MUL (R3),R4 ;MCND=IMAG(B) ASHC #1,R4 SUB R4,C.TMPI ;TMPI=IMAG(A)*REAL(B)-REAL(A) ;PRODUCE CORRELATION COEFFICIENTS C.N1-.-2 ;FROM THE CROSS POWER SPECTRUM ;NO FFT ERROR CHECKING IS DONE HERE SINCE FFT T MOV (SP)+,R2 BR C.CSP1 ;CORRELATION DATA AREA ;FFT TABLE FOR COMPLEX ARRAY A C.N1: 0 ;NUMBER OF POINTS C.REP1: 0 ;POIYPE ERRORS WOULD ;HAVE BEEN DETECTED IN THE FIRST CALL. ADD C.SCL1,C.SCLF ;SCLF = SCL1 + SCL2 + SCLI + (-2 * LOG2(# POINTS)NTER TO REAL(A) C.IMP1: 0 ;POINTER TO IMAG(A) C.INV1: 0 ;DIRECTION OF TRANSFORM C.SCL1: 0 ;SCALE FACTOR COMPUTED BY FFTC ;) ;PRINT THE SCALE FACTOR JSR R5,FORMAT ;C.SCLF CONTAINS THE SCALE FACTOR .BYTE CRLFC0,TEXT .ASCII \SF = \ .BYTE 0,TABLE FOR COMPLEX ARRAY B C.N2: 0 C.REP2: 0 C.IMP2: 0 C.INV2: 0 C.SCL2: 0 .ENDC SING ;OUTPUT A DECIMAL VALUE .BYTE 0 ;NEXT PARM IS ADDR OF SIGNED INTEGER .EVEN C.SCLF .BYTE CRLFC0,EXIT .EVEN ;RETURN TO SPARTA C.RTN: MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 MOV (SP)+,R2 MOV (SP)+,R1 RTS PC ;RETURN FROM WHENCE WE CAME UNLESS ;ERROR OCCURRED, THEN TO "DEFORE" ; .SBTTL SCALING ROUTINE C.OFLO: .IFG NON MOV (SP)+,R3 ;RESTORE PO .TITLE PARAM ;FILE NAME: PARAM.ASM ;THIS IS AN ASSEMBLY PARAMETER FILE TO BE ASSEMBLED ALONG ;WITH THE STANDARD LAB APPINTERS MOV (SP)+,R2 .ENDC SUB #2,C.SCLF ;UPDATE THE SCALE FACTOR MOV C.REP1,R4 MOV C.IMP1,R5 MOV C.N1,-(SP) ;TOTAL NLICATIONS MODULES, USED TO BUILD THE ;THE FOLLOWING PROGRAMS (BABY,CHILD,PARENT,GRAMP). RT11$=1 ;RT11 OPERATING SYSTEM IS IUMBER OF POINTS SUB C.TMPN,(SP) ;MINUS NUMBER LEFT TO SQ & SUM BEQ C.OFL2 ;BR IF OVERFLOW ON FIRST POINTS C.OFL1: ASR (R4)N USE ;TTYR11 MODULE TTYR$2=1 ;LPT IS AVAILABLE ;OUTF MODULE FORTX$=1 ;ASCII TEXT OUTPUT FORSP$=1 ;SING PREC OUTP+ ;SCALE THE CROSS PRODUCTS ASR (R4)+ ;ALREADY CALCULATED TST C.SWIT ;AUTO OR CROSS CORR? BMI C.OFL4 ;BR IF AUTO ASRUT FORFL$=1 ;FL PT OUTPUT ;QA MODULE QASDO$=1 ;SING,DBL,OCTAL INPUT QAALP$=1 ;ALPHANUMERIC INPUT (LIST COMPARE) ;GE (R5)+ ASR (R5)+ C.OFL4: DEC (SP) ;REDUCE NUMBER OF XPRODS REMAINING BNE C.OFL1 ;BR IF MORE TO GO ;SCALE REMAINING FRENS MODULE SAVRG$=1 ;SAVE & RESTORE REGISTERS LISTC$=1 ;LIST COMPARE MULT$=1 ;MULTIPLY MULTS$=1 ;SIGNED MULTIPLY DIV$=1 ;DQUENCY DOMAIN C.OFL2: MOV R2,(SP) ;TOP OF STACK IS TEMPORARY MOV R3,-(SP) ;WE NEED REGISTERS 2 & 3 MOV C.TMPN,-(SP) ;AGAIVIDE ;GTDISP MODULE GTD$7=1 ;ACCEPT SCOPE PARAMETERS GTD$C=1 ;CHECK 'DISSKP' FLG IN EACH I/D TBL ;ADSAM MODULE R0)+ ;STORE XPROD IN SI & SJ OR SK IF XCORR MOV C.TMPI,(R1)+ ;AND INCREMENT POINTERS CMP (R2)+,(R3)+ DEC C.TMPN ;ARE WE DIN TOP OF STACK IS TEMP C.OFL3: ASR (R2)+ ASR (R3)+ TST C.SWIT ;AUTO OR CROSS CORR? BMI C.OFL5 ;BR IF AUTO ASR (R4)+ ONE? BNE C.CSP1 .ENDC ; .SBTTL COMPUTE CORRELATION COEFFICIENTS INC C.INV1 ;SET FOR INVERSE TRANSFORM JSR R5,FFTC ASR (R5)+ C.OFL5: DEC (SP) BNE C.OFL3 TST (SP)+ ;CLEAR TEMPORARY OFF STACK MOV (SP)+,R3 ;RESTORE POINTERS IN R1 & R3 IN A DATA BUFFER 1$: MOV #DATABF,R1 ;R1 HOLDS DATA BUFFER ADDRESS MOV #10.,R2 ;R2=CTR FOR THE 10 INTEGERS $QA QASP,MESS2 SING ;SING PREC OUTPUT .BYTE 200 ;THE VALUE IS AT 9$: .EVEN 9$: 0 ;DATUM TO BE OUTPUT .BYTE EXIT .EVEN RTS PC LPS11$=1 ;USING LPS HARDWARE AD$1=1 ;A DISPLAY IS SHOWN GT40$=1 ;DISPLAY IS ON GT40 AD$5=1 ;LED READOUT IS INCLUDED ;ANSWER TYPE IS SING PREC & ADDR OF MESSAGE 2$: TSTB QADATF ;TEST FOR DATA FOUND BEQ 1$ ;NO DATA FOUND, TRY EXAMPLE AGAIN TSTB QAERR ;TEST FOR VALID DATA BEQ 3$ ;DATUM IS OKAY $TYPMS #MESS4 ;USE TTY MOD TO TYPE ERROR BR 1$ ;TRY EXAMPLE AG .TITLE BABY ;FILE NAME: BABY.MAC ;THIS IS A PROGRAM WHICH SIMPLY ACCEPTS 10 INTEGERS VIA ;TERMINAL AND WRITES THEM BACKAIN 3$: MOV QAANS,(R1)+ ;PUT DATUM IN BUFFER DEC R2 ;10 INTEGERS READ IN YET? BEQ 4$ ;YES $QA QASP+QASIL ;REMAINING 9 D TO THE TERMINAL ;THE PURPOSE OF THIS PROGRAM IS TO ILLUSTRATE HOW ONE USES THE ;LAB APPLICATIONS MODULES(TTYR11.MAC,QA.MAC,OATA RETRIEVED VIA ;SILENT QUESTION OPTION OF QA ;SILENT QUEST + SING PREC NUMBER BR 2$ ;AT THIS POINT ALL 10 INTEUTF.MAC,GENS.MAC) ;ASSEMBLY INSTRUCTIONS ;BABY=BABY ;TTY=PARAM.ASM,TTYR11 ;QA=PARAM.ASM,QA ;OUTF=PARAM.ASM,OUTF ;GENSGERS ARE IN THE DATA BUFFER. ;USE THE OUTPUT FORMATTER TO WRITE BACK THE 10 INTEGERS 4$: MOV #DATABF,R1 ;R1=DATA BUFFER ADDR=PARAM.ASM,GENS ;LINKING INSTRUCTIONS ;BABY=BABY,TTY,QA,OUTF,GENS,SPFPMP ;RUNTIME INSTRUCTIONS ;BOOT UP RT11 ; .R BABESS MOV #10.,R2 ;R2=DONE CTR CLR R4 ;R4=NUMBER OF DATA/TERMINAL LINE $FRMAT ;CALL THE FORMATTER TO: .BYTE CRLFC0 ;IY ;GLOBAL SYMBOLS ;TTYR11 MODULE .GLOBL TTYICH,TTYOCH,TTYBFA,TTYBUF ;QA MODULE .GLOBL QADATF,QAERR,QAANS ;OUTF MOSSUE A CR LF .BYTE TEXT ;OUTPUT THE TEXT IN THE NEXT LINE .ASCIZ /USING INTEGER FORMAT/ .BYTE EXIT ;EXIT FROM FORMAT MODDULE .GLOBL FORBUF ;DEFINITIONS USING MACROS .MCALL .REGDEF,$QADEF,$OUTDE .MCALL $MOV,$CALL,$CRLF,$TYPMS,$QA,$FRMAT .REGULE .EVEN 5$: ADD #1,R4 ;INC NUMBER OF DATA/LINE MOV R4,R5 ;NUMBER OF DATA FOR CURRENT OUTPUT LINE MOV #1,R3 ;R3 HOLDSDEF $QADEF $OUTDE ;START OF THE PROGRAM 'BABY' ;SETUP CONTROL INFORMATION FOR TTY MODULE START: CLRB TTYICH ;0=INPUT IS THE COLUMN START VALUE $FRMAT .BYTE CRLFC0,EXIT ;ISSUE A CR LF & THEN EXIT .EVEN 6$: MOVB R3,8$ ;PICKUP THE 'COLST' VAL FROM TERMINAL CLRB TTYOCH ;0=OUTPUT TO TERMINAL MOV #BUFOVR,TTYBFA ;SETUP 'BUFFER FULL' JMP ADDRESS ;USE FORMAT MODULE UE FOR NEXT DATUM MOV (R1)+,9$ ;GET NEXT DATUM FROM BUFFER JSR PC,7$ ;OUTPUT THE DATUM DEC R2 ;DONE YET? BEQ START ;YTO ISSUE 3 LINE FEEDS $FRMAT .BYTE LINES,3 .BYTE EXIT .EVEN ;USE TTY MODULE TO OUTPUT A MESSAGE $CRLF $TYPMS ES DEC R5 ;IS OUR LINE DONE YET? BEQ 5$ ;YES ADD #10.,R3 ;MOVE OVER TO NEXT COLUMN BR 6$ ;ROUTINE CALLS FORMATTER #MESS1 ;R0 = ADDR OF MESSAGE $CRLF ;USE QA TO TYPE OUT A '#' & RECEIVE TTY INPUT ; 10 INTEGERS WILL BE TYPED IN & STORED TO OUTPUT A SING PREC NUMBER 7$: $FRMAT .BYTE COLST ;POSITION THE COLUMN POINTER 8$: .BYTE 0 ;COLUMN START VALUE .BYTE ;TTYR11 MODULE .GLOBL TTYICH,TTYOCH,TTYBFA,TTYBUF ;QA MODULE .GLOBL QADATF,QAERR,QAANS ;OUTF MODULE .GLOBL FORBUF ;R0 = SIZE OF FREE CORE MOV R0,BUFPNT+2 ;PUT SIZE IN BUF CTRL BLK ;SETUP CONTROL INFORMATION FOR TTY MODULE CLRB TTYICH GTDISP MODULE .GLOBL GTRCAL ;EXTERNAL REF BY 'CHILD' TO 'SPFPMP' .GLOBL FLOAT ;DEFINITIONS BY MACROS .MCALL .REGDEF,$Q ;0=INPUT IS FROM TERMINAL CLRB TTYOCH ;0=OUTPUT TO TERMINAL MOV #BUFOVR,TTYBFA ;SETUP 'BUFFER FULL' JMP ADDRESS ;USE FOADEF,$OUTDE,$GTDEF .MCALL $MOV,$CALL,$CRLF,$TYPMS,$QA,$FRMAT .MCALL $GINIT,$GINT0,$GTDIS,$SAV05,$RST05 .REGDEF $QADEF $OUTDRMAT MODULE TO ISSUE 3 LINE FEEDS $FRMAT .BYTE LINES,3 .BYTE EXIT .EVEN ;USE TTY MODULE TO OUTPUT A MESSAGE $CRE ;DEFINE I/D TBL OFFSETS, GLOBALIZE ALL OFFSETS & SET I/D TBLSIZ $GTDEF BUFSIZ=10. ;DATA BUFFER HAS 10 POINTS ;START OLF $TYPMS #MESS1 $CRLF ;USE QA TO TYPE OUT A '#' & RECEIVE TTY INPUT ; 10 INTEGERS WILL BE TYPED IN & STORED IN A DATA B ;ROUTINE TO OUTPUT WARNING IF ONE EXCEEDS LENGTH OF TTY LINE BUFOVR: $TYPMS #MESS3 BR START ;MESSAGES MESS1: .ASCIZ F PROGRAM 'CHILD' ;SETUP INIT/DISPLAY TABLE START: MOV #IDTAB1,R1 ;R1 = I/D TBL ADDR MOV #BUFSIZ,DISBUF(R1) ;STORE BUFFE/**BABY EXAMPLE** ENTER 10 INTEGERS/ MESS2: .ASCIZ /# / MESS3: .ASCIZ /INPUT LINE TOO LONG/ MESS4: .ASCIZ /BAD DATA/ .EVEN R SIZE IN TBL CLR DISXBU(R1) ;0=Y DATA DISPLAY ONLY MOV #DATABF,DISYBU(R1) ;STORE Y DATA BUF ADDR IN TBL MOV #1,DISTYP(R1) ;BUFFERS TTYBUF: .BLKB 72. ;BUFFER USED BY TTY MODULE FORBUF=TTYBUF DATABF: .BLKW 10. ;DATA BUFFER IS 10 WORDS LONG ;DISPLAY SING.PREC.DATA CLRB DISSC(R1) ;DONOT SCALE THE DATA CLRB DISCU(R1) ;DONOT DISPLAY FIX CURSORS CLR DISST(R1) ;DIS.END START PLAY BEGINS WITH 1ST BUF PT MOV #1,DISN(R1) ;DISPLAY EVERY POINT MOV #BUFSIZ,DIST(R1) ;DISPLAY ALL OF BUFFER MOV #7,DISCI( .TITLE CHILD ;FILE NAME: CHILD.MAC ;THIS IS A PROGRAM WHICH SIMPLY ACCEPTS 10 INTEGERS VIA THE ;TERMINAL, DISPLAYS THEMR1) ;CHOOSE HIGHEST INTENSITY CLR DISOFX(R1) ;START DISPLAY ON LF OF SCREEN MOV #600,DISOFY(R1) ;0 WILL BE AT CENTER OF SCOP ON A GT40 & WRITES THEM BACK TO THE TERMINAL ;THE PURPOSE OF THIS PROGRAM IS TO ILLUSTRATE HOW ONE USES THE ;LAB APPLICATIONE MOV #2000,DISSZX(R1) ;USE FULL WIDTH OF SCREEN MOV #1377,DISTOP(R1) ;UPPER BOUND OF DISPLAY CLR DISBOT(R1) ;LOWER BOUND S MODULES(TTYR11.MAC,QA.MAC,OUTF.MAC,GENS.MAC,GTDISP.MAC) ;ASSEMBLY INSTRUCTIONS ;CHILD=PARAM.ASM,VTMAC,CHILD ;TTY=PARAMOF DISPLAY MOVB #1,DISSKP(R1) ;RECALCULATE DISPLAY BUFFER ;CALL THE 'GINIT' ROUTINE FOR EACH I/D TBL ;TO SET UP REMAINING .ASM,TTYR11 ;QA=PARAM.ASM,QA ;OUTF=PARAM.ASM,OUTF ;GENS=PARAM.ASM,GENS ;DISPLY=PARAM.ASM,GTDISP ;LINKING INSTRUCTIONS ;PARAMETERS IN THE I/D TBL FOR THE DISPLAY $GINIT #IDTAB1 ;SETUP BUFFER CONTROL BLOCK MOV FREE+2,BUFPNT ;1ST FREE LOCACHILD=CHILD,TTY,QA,OUTF,GENS,SPFPMP/C ;VTLIB,DISPLY ;RUNTIME INSTRUCTIONS ;BOOT UP RT11 ; .R CHILD ;GLOBAL SYMBOLS TION IN CORE MOV @#54,R0 ;USING RT11 TO FIND THE TOP OF TST -(R0) ;FREE CORE .MCALL .SETTOP .SETTOP SUB FREE+2,R0 ;: $GINT0 #PNTR ;SET 'GTRCAL' FLG AND CALL 'GTDISP' ROUTINE MOVB #1,GTRCAL ;CALCULATE THE DISPLAY BUFFER $GTDIS TST R0 DEC PLACES & 5 SIGN FIG .EVEN 9$: 0 ;FL PT DATUM TO BE OUTPUT 0 ;LOW ORDER PART .BYTE EXIT .EVEN RTS PC ;ROUT BNE ERROR ;DISPLAY BUFFER OVERFLOW ;TELL GT40 DISPLAY HANDLER ABOUT OUR DISPLAY BUFFER .LNKRT .INSRT BUFPNT ;DISPLINE TO OUTPUT WARNING IF ONE EXCEEDS LENGTH OF TTY LINE BUFOVR: MOV #MESS3,R0 10$: $TYPMS 11$: JMP START ;ERROR MESSAGE AY BUF ADDR .START ;TURN ON GT40 ;ASK USER WHEN TO CONTINUE $QA QANAOK,MESS5 ;NULL ANS - ONLY A CR IS EXPECTED ;A ERROR: MOV #MESS6,R0 BR 10$ .DSABL LSB ;MESSAGES MESS1: .ASCIZ /**CHILD EXAMPLE** ENTER 10 INTEGERS/ MESS2: .ASCISK USER THE QUESTION .STOP ;TURN OFF GT40 WHEN USER HITS CR .REMOV BUFPNT ;REMOVE DISPLAY BUF FROM HANDLER ;USE THE OUZ /# / MESS3: .ASCIZ /INPUT LINE TOO LONG/ MESS4: .ASCIZ /BAD DATA/ MESS5: .ASCIZ /HIT 'CR' TO CONTINUE/ MESS6: .ASCIZ /DISPTPUT FORMATTER TO WRITE BACK THE 10 INTEGERS MOV #DATABF,R1 ;R1=DATA BUFFER ADDRESS MOV #10.,R2 ;R2=DONE CTR CLR R4 ;RLAY BUFFER OVRFLO/ .EVEN ;BUFFERS TTYBUF: .BLKB 72. ;BUFFER USED BY TTY MODULE FORBUF=TTYBUF DATABF: .BLKW 10. ;DATA4=NUMBER OF DATA/TERMINAL LINE $FRMAT .BYTE CRLFC0 .BYTE TEXT .ASCIZ /USING EXPONENTIAL FORMAT/ .BYTE EXIT .EVEN . BUFFER IS 10 WORDS LONG IDTAB1: .BLKB TBLSIZ ;LOCATION OF I/D TABLE ;BUFFER CONTROL BLOCK BUFPNT: 0 ;DISPLAY BUFFEDSABL LSB .ENABL LSB 5$: ADD #1,R4 ;INC NUMBER OF DATA/LINE MOV R4,R5 ;NUMBER OF DATA FOR CURRENT OUTPUT LINE MOV #1,R3R ADDR 0 ;FREE CORE AVAILABLE 0 ;OFFSET VALUE DSPLST: IDTAB1 ;DISPLAY LIST 0 CRVLST: 0 ;LIST OF GT40 BUFFER UFFER .ENABL LSB 1$: MOV #DATABF,R1 ;R1 HOLDS DATA BUFFER ADDRESS MOV #10.,R2 ;R2=CTR FOR THE 10 INTEGERS $QA QASP,MES ;R3 HOLDS THE 'COLST' VALUE $FRMAT .BYTE CRLFC0,EXIT .EVEN 6$: MOVB R3,8$ ;PICKUP THE 'COLST' VALUE FOR NEXT DATUM MS2 ;ANSWER TYPE IS SING PREC & ADDR OF MESSAGE 2$: TSTB QADATF ;TEST FOR DATA FOUND BEQ 1$ ;NO DATA FOUND, TRY EXAMPLE AGAIOV (R1)+,Y ;GET NEXT DATUM FROM BUFFER $SAV05 ;FPMP DESTROYS ALL REGISTERS JSR R5,FLOAT ;CALL 'SPFPMP' TO FLOAT DATUM N TSTB QAERR ;TEST FOR VALID DATA BEQ 3$ ;DATUM IS OKAY $TYPMS #MESS4 ;USE TTY MOD TO TYPE ERROR BR 1$ ;TRY EXAMPLE BR Z .WORD Y Y: 0 ;HOLDS DATUM TO BE FLOATED Z: MOV R0,9$ ;HIGH ORDER PART OF FL.PT.VALUE MOV R1,9$+2 ;LOW ORDER PART AGAIN 3$: MOV QAANS,(R1)+ ;PUT DATUM IN BUFFER DEC R2 ;10 INTEGERS READ IN YET? BEQ 4$ ;YES $QA QASP+QASIL ;REMAINING 9OF FL.PT.VALUE $RST05 ;RESTORE ALL REGISTERS JSR PC,7$ ;OUTPUT THE DATUM DEC R2 ;DONE YET? BEQ 11$ ;YES DEC R5 ; DATA RETRIEVED VIA ;SILENT QUESTION OPTION OF QA ;SILENT QUEST + SING PREC NUMBER BR 2$ ;AT THIS POINT ALL 10 INIS OUR LINE DONE YET? BEQ 5$ ;YES ADD #13.,R3 ;BUMP 'COLST' VALUE BY 10 BR 6$ ;ROUTINE CALLS FORMATTER TO OUTPUT A FLTEGERS ARE IN THE DATA BUFFER. ;NOW DISPLAY THE 10 INTEGERS ;CALL 'GINIT0' ROUTINE TO PASS 4 POINTERS VIA 'PNTR' TABLE 4$ PT NUMBER IN E-FMT 7$: $FRMAT .BYTE COLST 8$: .BYTE 0 ;COLUMN START VALUE .BYTE EXP ;E-FMT OUTPUT .BYTE 200+4,5 ;2LRB DISCU(R1) ;FIX CURSOR FLG IS OFF CLR DISST(R1) ;ST-1 =0 MOV #1,DISN(R1) ;DISPLAY EVERY POINT MOV #BUFSIZ,DIST(R1) ;NUM .TITLE PARENT ;FILE NAME: PARENT.MAC ;THIS PROGRAM COLLECTS 64 DATA VALUES FROM THE LPS VIA CHAN#0 ;IT THEN DISPLAYS THBER OF PTS TO DISPLAY MOV #7,DISCI(R1) ;INTENSITY OF DISPLAY CLR DISOFX(R1) ;X-OFFSET =0 MOV #600,DISOFY(R1) ;Y-OFFSET = CE VALUES AND LAST OF ALL TYPES THEM OUT ;THE PURPOSE OF THIS EXAMPLE IS TO ILLUSTRATE HOW ONE USES ;THE LAB APPLICATIONS MODULENTER OF SCOPE MOV #2000,DISSZX(R1) ;X-AXIS SIZE MOV #1377,DISTOP(R1) ;TOP OF SCOPE CLR DISBOT(R1) ;BOTTOM OF DISPLAY MOES(TTYR11.MAC,QA.MAC,OUTF.MAC,GENS.MAC ;GTDISP.MAC,ADSAM.MAC) ;ASSEMBLY INSTRUCTIONS ;PARENT=PARAM.ASM,VTMAC,PARENT ;TTVB #1,DISSKP(R1) ;RECALCULATE DISPLAY BUFFER ;CALL THE 'GINIT' ROUTINE FOR EACH I/D TBL $GINIT #IDTAB1 ;SETUP BUFFER CY=PARAM.ASM,TTYR11 ;QA=PARAM.ASM,QA ;OUTF=PARAM.ASM,OUTF ;GENS=PARAM.ASM,GENS ;DISPLY=PARAM.ASM,GTDISP ;ADSAM=PARAM.ASM,VTMONTROL BLOCK & COMPLETE A/D SAMPLING TBL MOV FREE+2,BUFPNT ;1ST FREE LOCATION IN CORE MOV @#54,R0 ;USING RT11 TO FIND TOPAC,ADSAM ;LINKING INSTRUCTIONS ;PARENT=PARENT,TTY,QA,OUTF,GENS,SPFPMP/C ;VTLIB,DISPLY,ADSAM ;RUNTIME INSTRUCTIONS ;BO OF TST -(R0) ;FREE CORE .MCALL .SETTOP .SETTOP SUB FREE+2,R0 ;R0 = SIZE OF FREE CORE MOV R0,BUFPNT+2 ;PUT SIZE IN BOT UP RT11 ; .R PARENT ;GLOBAL SYMBOLS ;TTYR11 MODULE .GLOBL TTYICH,TTYOCH,TTYBFA,TTYBUF ;QA MODULE .GLOBL QADATF,QUF CTRL BLK MOV R0,ADGRAS ;PUT FREE CORE SIZE IN A/D TBL MOV BUFPNT,ADGRAB ;DISPLY BUF ADDR IN A/D TBL ;SETUP CONTROL INFAERR,QAANS ;OUTF MODULE .GLOBL FORBUF ;GTDISP MODULE .GLOBL GTRCAL ;ADSAM MODULE .GLOBL ADSCAL,ADMAXV,LPSVEC,LPSSAD,ORMATION FOR TTY MODULE CLRB TTYICH ;0=INPUT IS FROM TERMINAL CLRB TTYOCH ;0=OUTPUT TO TERMINAL MOV #BUFOVR,TTYBFA ;SEADDTYB,ADDTAB,ADGTON,ADGTOF ;DEFINITIONS USING MACROS .MCALL .REGDEF,$QADEF,$OUTDE,$GTDEF .MCALL $MOV,$CALL,$CRLF,$TYPMS,$TUP 'BUFFER FULL' JMP ADDRESS ;USE FORMAT MODULE TO ISSUE 3 LINE FEEDS $FRMAT .BYTE LINES,3 .BYTE EXIT .EVEN ;USQA,$FRMAT,$GINIT,$GINT0,$GTDIS .MCALL $ADSAM .REGDEF $QADEF $OUTDE ;DEFINE I/D TBL OFFSETS, GLOBALIZE ALL OFFSETS & SET IE TTY MODULE TO OUTPUT A MESSAGE $CRLF $TYPMS #MESS1 $CRLF .ENABL LSB ;CALL 'GINIT0' ROUTINE TO PASS 4 POINTERS VIAADDRESSES 0 ;FILLED IN BY GTDISP MODULE PNTR: DSPLST DSPLST CRVLST BUFPNT FREE: .LIMIT ;1ST WRD GIVES START OF/D TBLSIZ $GTDEF BUFSIZ=64. ;DATA BUFFER HAS 64 POINTS ;START OF PROGRAM 'PARENT' ;SETUP INIT/DISPLAY TABLE START: STACK ;2ND WRD GIVES START OF FREE CORE .END START BIS #100,@#44 ;INHIBIT TT WAIT MOV #IDTAB1,R1 ;R1 = I/D TBL ADDR MOV #BUFSIZ,DISBUF(R1) ;BUFFER SIZE CLR DISXBU(R1) ;0=Y-DATA DISPLAY MOV #DATABF,DISYBU(R1) ;Y-DATA BUF ADDR MOV #1,DISTYP(R1) ;DISPLAY TYPE = S.P. CLRB DISSC(R1) ;SCA FAC =0 C 'PNTR' TABLE 4$: $GINT0 #PNTR ;SET 'GTRCAL' FLG AND CALL 'GTDISP' ROUTINE MOVB #1,GTRCAL ;CALCULATE THE DISPLAY BUFFEF TTY LINE BUFOVR: MOV #MESS3,R0 10$: $TYPMS 11$: JMP START ;ERROR MESSAGE ERROR: MOV #MESS6,R0 BR 10$ .DSABL LR $GTDIS TST R0 BNE ERROR ;DISPLAY BUFFER OVERFLOW ;TELL GT40 DISPLAY HANDLER ABOUT OUR DISPLAY BUFFER .LNKRT .ISB ;MESSAGES MESS1: .ASCIZ /**PARENT EXAMPLE** READY TO COLLECT DATA/ MESS3: .ASCIZ /INPUT LINE TOO LONG/ MESS5: .ASCIZNSRT BUFPNT ;DISPLAY BUF ADDR .START ;TURN ON GT40 ;TIME TO DO A/D SAMPLING ;UPON RETURN FROM SAMPLING A 64 WORD BUFFER /HIT 'CR' TO CONTINUE/ MESS6: .ASCIZ /DISPLAY BUFFER OVRFLO/ .EVEN ;BUFFERS TTYBUF: .BLKB 72. ;BUFFER USED BY TTY MODU WILL CONTAIN THE DATA $ADSAM SAMTBL,ERROR .START ;ADSAM JUST TURNED GT40 OFF ON EXITING ;THUS,IT MUST BE TURNED BALE FORBUF=TTYBUF DATABF: .BLKW 64. ;DATA BUFFER IS 64 WORDS LONG IDTAB1: .BLKB TBLSIZ ;LOCATION OF I/D TABLE ;DEFINITICK ON ;ASK USER WHEN TO CONTINUE $QA QANAOK,MESS5 ;NULL ANS - ONLY A CR IS EXPECTED ;ASK USER THE QUESTION .STOP ONS & VECTORS USED BY ADSAM MODULE ADSCAL=IDTAB1+DISSC ADDTYB=IDTAB1+DISYBU ADDTAB=IDTAB1 ADMAXV: 1377 ;SCOPE SIZE IN ;TURN OFF GT40 WHEN USER HITS CR .REMOV BUFPNT ;REMOVE DISPLAY BUF FROM HANDLER ;USE THE OUTPUT FORMATTER TO WRITE BACK THEY-DIRECTION LPSVEC: 340 ;LPS A/D VECTOR LPSSAD: 170400 ;LPS A/D STATUS REG ;BUFFER CONTROL BLOCK BUFPNT: 0 ;DISPL 10 INTEGERS MOV #DATABF,R1 ;R1=DATA BUFFER ADDRESS MOV #BUFSIZ,R2 ;R2=DONE CTR MOV #6,R4 ;R4=NUMBER OF DATA/TERMINAL LAY BUFFER ADDR 0 ;FREE CORE AVAILABLE 0 ;OFFSET VALUE DSPLST: IDTAB1 ;DISPLAY LIST 0 CRVLST: 0 ;LIST OF GT40INE $FRMAT .BYTE CRLFC0 .BYTE TEXT .ASCIZ *YOUR A/D DATA* .BYTE EXIT .EVEN 5$: MOV R4,R5 ;NUMBER OF DATA FOR CURRE BUFFER ADDRESSES 0 ;FILLED IN BY GTDISP MODULE PNTR: DSPLST DSPLST CRVLST BUFPNT ;SAMPLE TABLE FOR ADSAM MODULNT OUTPUT LINE MOV #1,R3 ;R3 HOLDS THE 'COLST' VALUE $FRMAT .BYTE CRLFC0,EXIT .EVEN 6$: MOVB R3,8$ ;PICKUP THE 'COLSTE SAMTBL: DATABF ;ADBUFA (DATA BUF ADDR) 103240 ;ADRATE (10 DATA/SEC) HIGH ORD 1 ;ADRATE LOW ORD 0 ;ADDELY (0 D' VALUE FOR NXT DATUM MOV (R1)+,9$ ;GET NXT DATUM FROM BUFFER JSR PC,7$ ;OUTPUT THE DATUM DEC R2 ;DONE YET? BEQ 11$ ;ELAY) HIGH ORD 0 ;ADDELY LOW ORD .BYTE 0 ;ADCHTY (REG CHAN SAMPLING) .BYTE 0 ;ADDOUP (SING PREC BUFFER) 0 ;ADCHN (YES DEC R5 ;IS OUR LINE DONE YET? BEQ 5$ ;YES ADD #10.,R3 ;BUMP 'COLST' VALUE BY 10 BR 6$ ;ROUTINE CALLS FORMATTERSTART SAMPLING WITH CH#0) 0 ;ADNOFC (#CH-1 TO SAMPLE) BUFSIZ ;ADCOUT (# OF PTS TO SAMPLE) 1 ;ADNOFS (# SWEEPS TO TAK TO OUTPUT A SING PREC NUMBER 7$: $FRMAT .BYTE COLST 8$: .BYTE 0 ;COLUMN START VALUE .BYTE SING ;SING PREC OUTPUT .BE) 0 ;ADBADM (DMA OPTION NOT USED) .BYTE 1 ;ADDTYP (GRAPH PLOT) .EVEN ADGRAB: 0 ;ADDR OF DISPLY BUF-TO BE FILLED IN YTE 200 .EVEN 9$: 0 ;DATUM TO BE OUTPUT .BYTE EXIT .EVEN RTS PC ;ROUTINE TO OUTPUT WARNING IF ONE EXCEEDS LENGTH O ADGRAS: 0 ;DISPLY BUF SIZE-TO BE FILLED IN ;THESE ROUTINES USED BY ADSAM MODULE ADGTON: .START ;TURN ON GT40 RTS PCUCTIONS ;BOOT UP RT11 ; .R GRAMP ;GLOBAL SYMBOLS ;TTYR11 MODULE .GLOBL TTYICH,TTYOCH,TTYBFA,TTYBUF ;QA MODULE .GLOR1) CLR DISBOT(R1) MOVB #1,DISSKP(R1) ;CALL THE 'GINIT' ROUTINE FOR EACH I/D TBL $GINIT #IDTAB1 $GINIT #IDTAB2 ;BL QADATF,QAERR,QAANS ;OUTF MODULE .GLOBL FORBUF ;GTDISP MODULE .GLOBL GTRCAL ;ADSAM MODULE .GLOBL ADSCAL,ADMAXV,LPSSETUP BUFFER CONTROL BLOCK & COMPLETE A/D SAMPLING TBL MOV FREE+2,BUFPNT ;1ST FREE LOCATION IN CORE MOV @#54,R0 ;USING RTVEC,LPSSAD,ADDTYB,ADDTAB,ADGTON,ADGTOF ;DEFINITIONS BY MACROS .MCALL .REGDEF,$QADEF,$OUTDE,$GTDEF .MCALL $MOV,$CALL,$CRLF,11 TO FIND THE TOP OF TST -(R0) ;FREE CORE .MCALL .SETTOP .SETTOP SUB FREE+2,R0 ;R0 = SIZE OF FREE CORE MOV R0,BUFPNT ADGTOF: .STOP ;TURN OFF GT40 RTS PC FREE: .LIMIT ;1ST WRD GIVES START OF STACK ;2ND WRD GIVES START OF FREE CO$TYPMS,$QA,$FRMAT .MCALL $GINIT,$GINT0,$GTDIS,$ADSAM,$FFTC .REGDEF $QADEF $OUTDE ;DEFINE I/D TBL OFFSETS, GLOBALIZE ALL OFFRE .END START SETS & SET I/D TBLSIZ $GTDEF BUFSIZ=64. ;DATA BUFFER HAS 64 POINTS ;START OF PROGRAM 'GRAMP' ;SETUP INIT/DISPLAY TABLES START: BIS #100,@#44 ;INHIBIT TT WAIT MOV #IDTAB1,R1 ;R1 = I/D TBL #1 ADDR MOV #BUFSIZ,DISBUF(R1) ;BUFFER SIZE CLR DISXBU(R1) ;0=Y-DATA DISPLAY MOV #DATABF,DISYBU(R1) ;Y-DATA BUF ADDR MOV #1,DISTYP(R1) ;DISPLAY TYPE = S.P. CLRB DISSC(R1) .TITLE GRAMP ;FILE NAME: GRAMP.MAC ;THIS PROGRAM COLLECTS 64 DATA VALUES FROM THE LPS VIA CHAN#0 ;IT THEN DISPLAYS THE ;SCA FAC =0 CLRB DISCU(R1) ;FIX CURSOR FLG IS OFF CLR DISST(R1) ;ST-1 =0 MOV #1,DISN(R1) ;DISPLAY EVERY POINT MOV #BUFSIVALUES USING A SINGLE DISPLAY. ;IT THEN USES A DUAL DISPLAY AND DOES AN FFT ON THE DATA,SHOWING ;REAL & IMAGINARY PARTS. THEN Z,DIST(R1) ;NUMBER OF PTS TO DISPLAY MOV #7,DISCI(R1) ;INTENSITY OF DISPLAY CLR DISOFX(R1) ;X-OFFSET =0 MOV #600,DISOFY(R1IT TYPES OUT THE REAL DATA BUFFER ;THE PURPOSE OF THIS EXAMPLE IS TO ILLUSTRATE HOW ONE USES ;THE LAB APPLICATIONS MODULES(TTY) ;Y-OFFSET = CENTER OF DISPLAY MOV #2000,DISSZX(R1) ;X-AXIS SIZE MOV #1377,DISTOP(R1) ;TOP OF DISPLAY CLR DISBOT(R1) ;BOTR11.MAC,QA.MAC,OUTF.MAC,GENS.MAC ;GTDISP.MAC,ADSAM.MAC,FFT.MAC) ;ASSEMBLY INSTRUCTIONS ;GRAMP=PARAM.ASM,VTMAC,GRAMP ;TTTOM OF DISPLAY MOVB #1,DISSKP(R1) ;RECALCULATE DISPLAY BUFFER MOV #IDTAB2,R1 ;NOW SET UP I/D TBL #2 MOV #BUFSIZ,DISBUF(RY=PARAM.ASM,TTYR11 ;QA=PARAM.ASM,QA ;OUTF=PARAM.ASM,OUTF ;GENS=PARAM.ASM,GENS ;DISPLY=PARAM.ASM,GTDISP ;ADSAM=PARAM.ASM,VTM1) CLR DISXBU(R1) MOV #IMAGBF,DISYBU(R1) MOV #1,DISTYP(R1) CLRB DISSC(R1) CLRB DISCU(R1) CLR DISST(R1) MOV #1,DISNAC,ADSAM ;FFT=FFT ;LINKING INSTRUCTIONS ;GRAMP=GRAMP,TTY,QA,OUTF,GENS,SPFPMP/C ;VTLIB,DISPLY,ADSAM,FFT ;RUNTIME INSTR(R1) MOV #BUFSIZ,DIST(R1) MOV #7,DISCI(R1) CLR DISOFX(R1) MOV #600,DISOFY(R1) MOV #2000,DISSZX(R1) MOV #1377,DISTOP(AS JUST BEEN READ INTO 'DATABF' ;SHOW DUAL DISPLAY OF 'DATABF' AND 'IMAGBF' ;FIRST CLEAR 'IMAGBF' MOV #IMAGBF,R0 ;R0 = BUF.BYTE CRLFC0,EXIT .EVEN 6$: MOVB R3,8$ ;PICKUP THE 'COLST' VALUE FOR NEXT DATUM MOV (R1)+,9$ ;GET NEXT DATUM FROM BUFFER FER ADDR MOV #BUFSIZ,R1 ;R1 = DN CTR 1$: CLR (R0)+ DEC R1 ;BUFFER CLR YET? BNE 1$ ;NO MOV #IDTAB2,DSPLST+2 ;ADD 2ND I JSR PC,7$ ;OUTPUT THE DATUM DEC R2 ;DONE YET? BEQ 11$ ;YES DEC R5 ;IS OUR LINE DONE YET? BEQ 5$ ;YES ADD #10.,R3/D TBL TO DISPLY LIST ;FIX UP I/D TBLS FOR THE DUAL DISPLAY MOV #IDTAB1,R1 MOV #1100,DISOFY(R1) ;CENTER OF TOP DISPLAY ;BUMP 'COLST' VALUE BY 10 BR 6$ ;ROUTINE CALLS FORMATTER TO OUTPUT A SING PREC NUMBER 7$: $FRMAT .BYTE COLST 8$: .B MOV #600,DISBOT(R1) ;BOTTOM OF TOP DISPLAY MOV #IDTAB2,R1 MOV #600,DISTOP(R1) ;TOP OF BOTTOM DISPLAY MOV #300,DISOFY(R1YTE 0 ;COLUMN START VALUE .BYTE SING ;SING PREC OUTPUT .BYTE 200 .EVEN 9$: 0 ;DATUM TO BE OUTPUT .BYTE EXIT .EVEN) ;CENTER OF BOTTOM DISPLAY MOVB #1,GTRCAL ;TELL DISPLAY MODULE TO $GTDIS ;RECALCULATE BOTH DISPLAYS TST R0 BNE ERROR RTS PC ;ROUTINE TO OUTPUT WARNING IF ONE EXCEEDS LENGTH OF TTY LINE BUFOVR: MOV #MESS3,R0 10$: $TYPMS 11$: JMP START ;DISPLAY BUFFER OVRFLO .START ;ADSAM JUST TURNED GT40 OFF ON EXITING ;THUS, IT MUST BE TURNED BACK ON ;ASK USER WH ;ERROR MESSAGE ERROR: MOV #MESS6,R0 BR 10$ .DSABL LSB ;MESSAGES MESS1: .ASCIZ /**GRAMP EXAMPLE** READY TO COLLE+2 ;PUT SIZE IN BUF CTRL BLK MOV R0,ADGRAS ;PUT SIZE IN A/D TBL MOV BUFPNT,ADGRAB ;DISPLY BUF ADDR IN A/D TBL ;SETUP CONTEN TO DO THE FFT $QA QANAOK,MESS7 ;NULL ANS - ONLY A CR IS EXPECTED ;TIME TO DO THE FFT IS RIGHT NOW $FFTC N ;FFT ROL INFORMATION FOR TTY MODULE CLRB TTYICH ;0=INPUT IS FROM TERMINAL CLRB TTYOCH ;0=OUTPUT TO TERMINAL MOV #BUFOVR,TTYIS DONE - MUST ASK DISPLAY MODULE TO RECALCULATE ;THE DISPLAY BUFFERS. FFT JUST CHANGED THEM. MOVB #1,GTRCAL $GTDIS TSTBFA ;SETUP 'BUFFER FULL' JMP ADDRESS ;USE FORMAT MODULE TO ISSUE 3 LINE FEEDS $FRMAT .BYTE LINES,3 .BYTE EXIT .EVEN R0 BNE ERROR ;DISPLAY BUFFER OVRFLO .DSABL LSB .ENABL LSB ;ASK USER WHEN TO CONTINUE $QA QANAOK,MESS5 ;NULL ANS ;USE TTY MODULE TO OUTPUT A MESSAGE $CRLF $TYPMS #MESS1 $CRLF .ENABL LSB ;CALL 'GINIT0' ROUTINE TO PASS 4 POI - ONLY A CR IS EXPECTED ;ASK USER THE QUESTION .STOP ;TURN OFF GT40 WHEN USER HITS CR .REMOV BUFPNT ;REMOV DISPLAY NTERS VIA 'PNTR' TABLE 4$: $GINT0 #PNTR ;SET 'GTRCAL' FLG AND CALL 'GTDISP' ROUTINE MOVB #1,GTRCAL ;CALCULATE THE DISPBUF FROM HANDLER ;USE THE OUTPUT FORMATTER TO WRITE BACK THE 64 INTEGERS MOV #DATABF,R1 ;R1=DATA BUFER ADDRESS MOV #BUFSLAY BUFFER $GTDIS TST R0 BNE ERROR ;DISPLAY BUFFER OVERFLOW ;TELL GT40 DISPLAY HANDLER ABOUT OUR DISPLAY BUFFER .LIZ,R2 ;R2=DONE CTR MOV #6,R4 ;R4=NUMBER OF DATA/TERMINAL LINE $FRMAT .BYTE CRLFC0 .BYTE TEXT .ASCIZ /THE REAL DATA/ NKRT .INSRT BUFPNT ;DISPALY BUFR ADDR .START ;TURN ON GT40 ;TIME TO DO A/D SAMPLING $ADSAM SAMTBL,ERROR ;DATA H .BYTE EXIT .EVEN 5$: MOV R4,R5 ;NUMBER OF DATA FOR CURRENT OUTPUT LINE MOV #1,R3 ;R3 HOLDS THE 'COLST' VALUE $FRMAT TAB1+DISSC ADDTYB=IDTAB1+DISYBU ADDTAB=IDTAB1 ADMAXV: 1377 ;SCOPE SIZE IN Y-DIRECTION LPSVEC: 340 ;LPS A/D VECTOR LPSA .IIF DIF A,B MOV A,B .ENDC .ENDM .MACRO $CALL ENTRY .GLOBL ENTRY JSR PC,ENTRY .ENDM .MACRO $SOB RX,A .IFDF LVN40SAD: 170400 ;LPS A/D STATUS REG ;BUFFER CONTROL BLOCK BUFPNT: 0 ;DISPLAY BUFFER ADDR 0 ;FREE CORE AVAILABLE 0 !LVN45 SOB RX,A .IFF DEC RX BNE A .ENDC .ENDM .MACRO $SPL N .IFDF LVN45 SPL N .IFF .IIF NE N MOVB #N*^O40,@# ;OFFSET VALUE DSPLST: IDTAB1 ;DISPLAY LIST 0 ;EVENTUALLY WILL HOLD 'IDTAB2' ADDR 0 CRVLST: 0 ;LIST OF GT40 BUFF-2 .IIF EQ N CLRB @#-2 .ENDC .ENDM .MACRO $SAV05 $CALL .ENDM .MACRO $RST05 $CALL .ENDM .MACRO $SER ADDRESSES 0 ;FILLED IN BY GTDISP MODULE 0 PNTR: DSPLST DSPLST CRVLST BUFPNT ;SAMPLE TABLE FOR ADSAM MODULEAV14 $CALL .ENDM .MACRO $RST14 $CALL .ENDM .MACRO $LSTCP COMPAR,CHAR $MOV ,<-(SP)> $MOV , $CALL .ENDM .MACRO $MULT A,B $MOV , $MOV , $CALL .ENDM .MACRO $MULTS A,B $MO 0 ;ADDELY LOW ORD .BYTE 0 ;ADCHTY (REG CHAN SAMPLING) .BYTE 0 ;ADDOUP (SING PREC) 0 ;ADCHN (CH#0) 0 ;ADNOFC (#CV , $MOV , $CALL .ENDM .MACRO $DIVR A,B $MOV , $MOV , $CALL .ENDM .MACRH - 1) BUFSIZ ;ADCOUT (# OF PTS) 1 ;ADNOFS (# SWEEPS) 0 ;ADBADM (DMA OPTION NOT USED) .BYTE 1 ;ADDTYP (GRAPH PLOTO $MUL SRC,RX .IFDF EIS MUL SRC,RX .IFF .NTYPE .SYM,RX .IIF NE .SYM .ERROR ;REGISTER MUST BE R0 .IF NB SRC .IIF DI) .EVEN ADGRAB: 0 ;ADDR OF DISPLY BUF-TO BE FILLED IN ADGRAS: 0 ;DISPLY BUF SIZE-TO BE FILLED IN ;THESE ROUTINES USEDF SRC,R1 MOV SRC,R1 .ENDC .GLOBL MULR0 JSR PC,MULR0 .ENDC .ENDM .MACRO $DIV SRC,RX .IFDF EIS DIV SRC,RX .IFF . BY ADSAM MODULE ADGTON: .START ;TURN ON GT40 RTS PC ADGTOF: .STOP ;TURN OFF GT40 RTS PC ;PARAMETER TABLE FOR FFTNTYPE .SYM,RX .IIF NE .SYM,.ERROR ;REGISTER MUST BE R0 .IF NB SRC .IIF DIF SRC,-(SP) MOV SRC,-(SP) .ENDC .GLOBL DIVR0 CT DATA/ MESS3: .ASCIZ /INPUT LINE TOO LONG/ MESS5: .ASCIZ /HIT 'CR' TO CONTINUE/ MESS6: .ASCIZ /DISPLAY BUFFER OVRFLO/ MESS MODULE N: BUFSIZ ;#PT IN BUFFER DATABF ;ADDR OF REAL ARRAY IMAGBF ;ADDR IF IMAGINARY ARRAY 0 ;DIRECTION 0=FORW7: .ASCIZ /HIT 'CR' WHEN READY FOR FFT/ .EVEN ;BUFFERS TTYBUF: .BLKB 72. ;BUFFER USED BY TTY MODULE FORBUF=TTYBUF DATARD, 1=INVERSE 0 ;SCA FAC IS RETURNED HERE FREE: .LIMIT ;1ST WRD GIVES START OF STACK ;2ND WRD GIVES START OF FRABF: .BLKW 64. ;DATA BUFFER IS 64 WORDS LONG IMAGBF: .BLKW 64. ;IMAGINARY BUFFER USED FOR FFT IDTAB1: .BLKB TBLSIZ ;LOCATEE CORE .END START ION OF I/D TABLE #1 IDTAB2: .BLKB TBLSIZ ;LOCATION OF 1/D TABLE #2 ;DEFINITIONS & VECTORS USED BY ADSAM MODULE ADSCAL=ID;LAB APPLICATIONS-11 SYSTEM MACRO FILE ;DEC-11-SLABA-C-LA ;FILENAME LABMAC.SML ;FILE ID LABMAC.4 .MACRO $MOV A,B .IF NB .MACRO $TYPCH CHAR $MOV , $CALL .ENDM .MACRO $TYPMS ADDR $MOV , $CALL .ENDM .MACBARLM> .ENDM .MACRO $ATINT PARTBL $MOV , $CALL .ENDM .MACRO $ATSAM $CALL .ENDM .MACRO RO $CRLF $CALL .ENDM .MACRO $QA ANSTYP,MESPTR,CMDTBL .GLOBL QA JSR R5,QA ANSTYP .IIF NB MESPTR MESPTR .IIF $CSINT PARTBL $MOV , $CALL .ENDM .MACRO $CSAMP MASK $MOV , $CALL .ENDM .MACRNB CMDTBL CMDTBL .ENDM .MACRO $FRMAT .GLOBL FORMAT JSR R5,FORMAT .ENDM .MACRO $FRMAA CMDTBL $MOV , $CALLO $NVELO PARTBL $MOV , $CALL .ENDM .MACRO $PEAK PARTBL $MOV , $CALL .ENDM .M .ENDM .MACRO $FRMAB CMDTBL,BUF $MOV , $MOV , $CALL .ENDM .MACRO $FFTC N .GLOACRO $MERGE $CALL .ENDM .MACRO $HTPST PARTBL $MOV , $CALL .ENDM .MACRO $HTISI PARTBL $MOBL FFTC JSR R5,FFTC .WORD N-2-. .ENDM .MACRO $ADSAM PARTBL,ERR .GLOBL ADSAM JSR R5,ADSAM .WORD PARTBL-.-2 BR ERR V , $CALL .ENDM .MACRO $STINT PARTBL $MOV , $CALL .ENDM .MACRO $STGO $CALL <.ENDM .MACRO $GINIT IDTBL $MOV , $CALL .ENDM .MACRO $GINT0 PNTR $MOV , $CALL .STGO> .ENDM .MACRO $STSTO $CALL .ENDM .MACRO $QADEF QASP =1 QADP =2 QAOCT =4 QAFLO =10 QAALP =20 QASTRENDM .MACRO $GTDIS $CALL .ENDM .MACRO $DINIT IDTBL $MOV , $CALL .ENDM .MACRO $DINT0 PNTR G =40 QAMIX =100 QANOP =200 QASIL =400 QADWA =1000 QAMESO =2000 QAAO =4000 QANQ =10000 QANAOK =20000 QAOFF =40000 . $MOV , $CALL .ENDM .MACRO $DISPL $CALL .ENDM .MACRO $CTINT PARTBL $MOV , $ENDM .MACRO $ADDEF ;RELATIVE LPS11, DR11K, & AR11 STATUS REG. ADDR. .IIF NDF ADSR$ ADSR$=170400 ADSAD =ADSR$ ADBUF =2+ADSADCALL .ENDM .MACRO $CTIBU DPIDNO,INADR,LBI $MOV , $MOV , $MOV , $CALL CLKSAD =4+ADSAD CLKBUF =6+ADSAD .IFDF AR11$ VCSTAT =10+ADSAD VCX =12+ADSAD VCY =14+ADSAD CLKCTR =16+ADSAD .ENDC .IFDF .ENDM .MACRO $CTOBU $CALL .ENDM .MACRO $CTSTR $CALL .ENDM .MACRO $BAINT BUFSIZ $MOV ,LPSDR$ DIOSAD =10+ADSAD DIBUF =12+ADSAD DOBUF =14+ADSAD .ENDC .IFDF DR11K$ .IIF NDF DRSR$ DRSR$=167770 DIOSAD =DRSR$ DIB $CALL .ENDM .MACRO $BAGET LOCPTR $MOV , $CALL .ENDM .MACRO $BAREL BUFADR $MOV ,UF =2+DIOSAD DOBUF =4+DIOSAD .ENDC .IFDF LPS11$ VCSTAT =16+ADSAD VCX =20+ADSAD VCY =22+ADSAD DMAREG =36+ADSAD .ENDC ;RE $CALL .ENDM .MACRO $BAWDS NUMB $MOV , $CALL .ENDM .MACRO $BAGTM LOCPTR,NUMB $MOV .ENDM .MACRO $TYTST NODATA $CALL BR NODATA .ENDM PTR>, $MOV , $CALL .ENDM .MACRO $BARLM BUFADR,NUMB $MOV , $MOV , $CALL