.NLIST TTM .TITLE PSET .IDENT /RICE01/ ; ; SETS UP PARAMETERS FOR COLOR DISPLAY. TABLE 2 HOLDS ; INFORMATION FOR DISPLAY ; .PSECT ; ; CALL PSET(IER,IPAGE,ISKIP,IDIFF,ITYPE,DATA,NWORDS, ; LABELS,IHILO,HILO,ILABSIZ) ; IER = 0 NO ERROR ; IER = NON ZER INADEQUATE SPACE FOR SETUP ; IPAGE = PAGE NO FOR PARAM DISPLAY (0 TO 15) ; ISKIP = NON ZERO TO SKIP 1 LINE AFTER PREVIOUS ENTRY ; IDIFF = 0 DON'T DISPLAY DIFFERENCE ; ITYPE = NO OF WORDS OF PRECISION INTEGER VARIABLE ; 1,2 ARE NO. OF WORDS OF PRECISION ; 0 IS SINGLE PRECISION FLOAT PT ; DATA = ARRAY OF DATA TO DISPLAY ; NWORDS = NUMBER OF WORDS OF DATA ; LABEL = ARRAY OF LABELS 4 CHAR PER LABEL ; IHILO = ARRAY SPECIFYING LIMITS TO BE PLACED (ARRAY ; IS 1 OR 2 WORDS LONG) ; COMBINE THE BELOW VALUES FOR THE LIMITS SPECIFIED ; 1 = LO LIM ; 2 = HI LIM ; 4 = PURPLE LIMITS ; 8 = VALUE IS CHANGEABLE ; HILO = ARRAY OF HILO VALUES ; ; TABLE FORMAT ; ; Word -2 Skip count if skip line bit set ; WORD 0 Address of next entry (0 if this is last entry) ; BYTE 2 #OF VARIABLES+ (200 SKIP LINE)+ (100 STORE DIFF) ; BYTE 3 #200+ PAGE#+ (100 DOUBLE WD.)+ (40 FLOATING)+ (20 CHANGEABLE) ; WORD 4 ADDRESS OF ARRAY ; WORD 6 LINE # ; WORD 10..... N 2WORD LABELS ; ........... ; IN.ERR = 0 IN.PAG = 2 IN.SKP = 4 IN.DIF = 6 IN.TYP = 10 IN.DAT = 12 IN.SIZ = 14 IN.LAB = 16 IN.MOD = 20 IN.LIM = 22 .macro PARAM,P CALL PARAM .word P .endm PARAM: MOVB @(SP),R0 ; Get parameter number ADD #2,(SP) ASR R0 BCS 10$ ; Odd address ? CMP R0,-2(R5) ; Compare with list BGT 10$ ; None ? ASL R0 ADD R5,R0 ; Check current one CMP (R0),#-1 ; Null ? BEQ 10$ MOV (R0),R0 CLC RETURN 10$: SEC RETURN ERROR: JMP BPARM PSET:: MOV #^RT ,-(SP) ; SET UP FOR TRACEBACK MOV #^RPSE,R4 JSR R4,NAM$ CMPB (R5)+,#8. ; Get size of params BLT ERROR ; OK ? INC R5 PARAM IN.DAT ; Data address available ? BCS ERROR ; No ? PARAM IN.TYP ; Data type avail ? BCS ERROR PARAM IN.LAB ; Data label available ? BCS ERROR PARAM IN.PAG ; Page number available ? BCS ERROR PARAM 0 BCC 20$ CLR (R0) ; NO ERROR YET 20$: MOV #SAVE,R2 ; FIRST WORD TO SET UP MOV #100000,(R2) ; WILL BE HEADER WORD MOV #1,R3 PARAM IN.SIZ BCS 40$ MOVB (R0),R3 ; NUMBER OF VARIABLES 40$: BIC #177700,R3 ; CLEAR EXTRA BITS BNE 45$ RETURN 45$: MOV R3,DCTR ; NUMBER OF WORDS IN ENTRY ADD DCTR,(R2) ; ADD IN COUNT MOV @IN.PAG(R5),R0 BIC #177760,R0 ; STRIP OFF SW (0 TO 16) BISB R0,1(R2) ; PUT SWITCH IN TABL2 PARAM IN.MOD BCS 50$ BIT #10,(R0) ; TEST IF VALUE FOR INPUT BEQ 50$ ; NOT AN INPUT PARAM BIS #10000,(R2) ; YES CHANGEABLE 50$: CLR R1 ; NUMBER OF WORDS CLR R4 ; NUMBER OF EXTRA ENTRIES IN LIST CMP @IN.TYP(R5),#1 ; TYPE OF DATA? BGE NOFLT ; INTEGER TYPE BIS #20000,(R2) ; FLOAT PT INDICATOR BR SNGL2 ; DO NOT SET DOUBLE WD NOFLT: BEQ SNGL ; SINGLE PRECISION BIS #40000,(R2) ; DOUBLE PRECISION SNGL2: INC R1 ; DOUBLE WORD SNGL: INC R1 ; R1=WORDS/VARIABLE PARAM IN.DIF ; DIFFERENCE REQUESTED? BCS 10$ ; No TST (R0) BEQ 10$ ; NO INC R4 ; AN EXTRA ENTRY BIS #100,(R2) ; YES, MARK IT 10$: PARAM IN.MOD BCS 30$ ; No limits ? BIT #1,(R0) ; LOWER LIMIT? BEQ 20$ ; NO INC R4 ; AN EXTRA ENTRY 20$: BIT #2,(R0) ; UPPER LIMIT? BEQ 30$ ; NO INC R4 ; AN EXTRA ENTRY 30$: ASL R3 ; # WORDS FOR LABELS ADD #3,R3 ; 3 WORD HEADER PARAM IN.SKP ; Skip requested ? BCS 40$ TST (R0) BEQ 40$ ; No ADD #1,R3 ; An extra word for skip count BIS #200,(R2) ; And mark the header word 40$: MUL R4,R1 ; EXTRA WORDS/VARIABLE MUL DCTR,R1 ; EXTRA WORDS ADD R1,R3 ; ADD TO LIST LENGTH ASL R3 ; NUMBER OF BYTES JSR PC,BREQW ; REQUEST ZEROED WORD BUFFER BCS OFLO2 param IN.SKP ; Skip count? BCS 50$ MOV (R0),R2 BEQ 50$ ; No BIC #177740,R2 ; Limit skip to 32 max MOV R2,(R3)+ ; Yes save it 50$: MOV #SVT2,R2 ; ADDRESS OF LIST 60$: TST (R2) ; END OF LIST? BEQ 70$ ; YES MOV (R2),R2 ; NO BR 60$ 70$: MOV SAVE,2(R3) ; LIST HEADER MOV IN.DAT(R5),4(R3) ; ADDRESS OF ARRAY TO DISP MOV R3,(R2) ; LINK IN LIST MOV R3,R2 ; NOW HAVE A BUFFER ADD #6,R2 ; POINTS TO LABELS ; ;CALCULATE LAST LOC USED ON SCOPE TO BE SURE ALL WDS FIT ;SAVE HIGHEST LOC IN TAG FOR THIS SWITCH # ;GET ADDR OF LABELS AND HILO SWITCHES ;HI BIT OF LABEL CHARS ARE USED AS HI-LO SWITCHES ; MOV IN.LAB(R5),R3 ; ADDRESS OF LABEL ARRAY CLR R4 PARAM IN.MOD BCS LABL MOV (R0),R4 ; SPEC FOR HI,LO LABL: MOV IN.LIM(R5),R1 ; ARRAY FOR HI,LO SPEC MOV R2,R0 ; NEXT ENTRY CMP (R2)+,(R2)+ ; SKIP LABEL JSR PC,CHARGT JSR PC,CHARGT BIT #1,R4 ; LO LIM? BEQ 10$ ; NO CALL LIMIT ; SET LIMIT 10$: JSR PC,CHARGT JSR PC,CHARGT BIT #2,R4 ; HI LIM? BEQ 30$ ; NO CALL LIMIT ; YES, SET LIMIT 30$: PARAM IN.DIF BCS 40$ TST (R0) ; DIFFERENCE? BEQ 40$ ; NONE MOV #FL0,R1 ; FLOATING ZERO CALL LIMIT2 40$: DEC DCTR ; DECREMENT DATA COUNT BNE LABL ; 1 LABEL AND HILO/DATA WD EXIT: RETURN ; RETURN FL0: .WORD 0,0 ; ZERO IN ANY FORMAT DCTR: .WORD 0 ; DATA COUNTER (# OF ENTRIES) SAVE: .WORD 0 ; SAVES FIRST WORD OF LIST ; ; MOVE 1 CHARACTER FROM (R3)+ TO (R2)+ ; CHARGT: MOVB (R3)+,(R0) BICB #200,(R0) CMPB (R0),#40 ; IS IT GREATER THAN BLANK BGE 10$ ; YES MOVB #' ,(R0) ; NO, SUBSTITUTE BLANK 10$: INC R0 ; NEXT CHAR TO MOVE RTS PC ; ; SET LIMIT ; LIMIT: BIS #100000,-2(R0) ; LIMIT FLAG LIMIT2: CMP @IN.TYP(R5),#1 ; TYPE OF DATA? BEQ 10$ ; SINGLE MOV (R1)+,(R2)+ ; first word 10$: MOV (R1)+,(R2)+ ; Second or only word RETURN ; ; OUTPUT THE PSET ERROR MESSAGE ; OFLO2: PARAM IN.ERR BCS 10$ MOV #-1,(R0) ; TELL USER 10$: CLR R1 ; MESSAGE, NOT STOP MOV #EMES,R0 ; ERROR MESSAGE ADDRESS JMP $ERRLG EMES: .WORD MESS,0 MESS: .ASCIZ /NOT ENOUGH SPACE FOR PSET - EXTEND TASK/ .END