.TITLE SHOWDC ; JOB-handler Data communication display ; uses NO handler, does synchronous ; terminal I/O .MCALL .EXIT, .PRINT,.MTPS, .SCCA, .GTJB, .INTEN,.SPND .MCALL .DSTAT,.SERR, .CSISPC,.GTLIN,.SYNCH,.FORK, .RSUM .ENABL LC ; Displays of any selected DEVICE with CACHE macro ; H.H. NKG-AZG AUG-85 CONSOL= 177564 ;Terminal-transmitter adres for I/O printout. ; Q-Element layout: Offset: ; ---------------- Q$LINK ------ -4 / 0 ; Q$CSW -2 / 2 ; Q-Element pointer => Q$BLKN 0 / 4 ; Q$JNUM Q$UNIT Q$FUNC 2 / 6 ; Q$BUFF 4 /10 ; Q$WCNT 6 /12 ; Q$COMP 10/14 Q$LINK = -4 Q$CSW = -2 Q$BLKN = 0 Q$FUNC = 2 Q$JNUM = 3 Q$UNIT = 3 Q$BUFF = 4 Q$WCNT = 6 Q$COMP = 10 .PSECT INISIO START: ;------------------ Open channels on device/job -----------------------; MOV #JOB,R5 .GTJB #AREA,R5 MOV (R5),SYNBLK+2 MOV @#54,R4 ADD 402(R4),R4 MOV R4,$FKPTR .SCCA #AREA,#CCFLAG ; INPUT: MOV SP,R4 ; Save SP. .GTLIN #LINE,#INPTXT ; Without .GTLIN CSI does not carry .CSISPC #OUTSPC,#DEFEXT,#LINE ; on error! BCC 1$ .PRINT #ERRCSI BR 2$ 1$: MOV (SP)+,R5 ; Load option count. DEC R5 ; Any more options? BMI END ; No- go restore SP. MOV (SP)+,R3 ; Load option description. CMPB R3,#'H ; Display HELP info? BNE 3$ ; Yes- go do it. .PRINT #HELP ; Display HELP info 2$: MOV R4,SP ; Restore Stack Pointer for new BR INPUT ; command. 3$: .PRINT #ERROPT BR 2$ ;=================== Process Input line =======================; END: MOV R4,SP ; Restore SP from before CSISPC. TST IFSPEC+2 ; File specified? BNE 1$ TST IFSPEC ; Device specified BNE 10$ ; Again if no input 1$: .PRINT #CMDERR BR INPUT 10$: .DSTAT #DKSTAT,#IFSPEC ;Get disk information. BCS ERRDK1 MOV DKSTAT+4,R2 BEQ ERRDK2 ADD #6,R2 ;Points to Cache loc. in disk-H. TST @R2 BNE ERRDK3 MOV DKSTAT+4,DKCQEA ;Handler entry address ADD #2,DKCQEA ;Point to CQE of DEVICE. .MTPS #340 MOV #TYPEIO,@R2 ;Enable disk link. .MTPS #0 .SPND EXIT: .MTPS #340 MOV DKSTAT+4,R2 ADD #6,R2 ;Points to Cache loc. in disk-H. CLR @R2 ;Disable DEVICE driver LINK 1st. ; -------------------------------- .EXIT ERRDK1: .PRINT #DK1 BR EXITIN ERRDK2: .PRINT #DK2 BR EXITIN ERRDK3: .PRINT #DK3 EXITIN: .EXIT ; ** R1 = Q-Element pointer ; ** R3 = String pointer ;-----------------------------------------------------------------------; TYPEIO: MOV @DKCQEA,R1 MOV #" ,IOTXT TST Q$WCNT(R1) ;READ? BMI 2$ MOV #"RD,IOTXT BR 3$ 2$: MOV #"WT,IOTXT 3$: TSTB Q$FUNC(R1) ;SPFUN? BEQ 4$ MOV #"SF,IOTXT 4$: MOV #OUTP,R3 ;ASCII output comes here. MOV @Q$CSW(R1),R0 ;Fetch CSW CALL CNV8 MOVB #'@,(R3)+ MOVB Q$UNIT(R1),R0 ;CONVERT UNIT BIC #177770,R0 CALL CNV10 MOVB #'U,(R3)+ MOV Q$WCNT(R1),R0 ;CONVERT WORD COUNT CALL CNV10 MOVB #'W,(R3)+ MOV Q$BLKN(R1),R0 ;CONVERT BLOCK ADRES CALL CNV10 MOVB #'B,(R3)+ MOVB Q$FUNC(R1),R0 ;CONVERT SPFUN VALUE CALL CNV10 MOVB #'F,(R3)+ MOV Q$BUFF(R1),R0 ;CONVERT BUFFER ADDRESS CALL CNV8 MOVB #'A,(R3)+ MOV Q$COMP(R1),R0 ;CONVERT COMPLETION ADDRESS CALL CNV8 MOVB #'C,(R3)+ ; ; Check on Command or End packet ; TST Q$BLKN(R1) ;CONVERT BLOCK ADRES BLE GOON MOVB #'C,R5 MOV Q$WCNT(R1),R0 CMP R0,#5 BEQ 10$ MOVB #'E,R5 CMP R0,#-5 BNE GOON 10$: MOVB #15,(R3)+ MOVB #12,(R3)+ MOVB #' ,(R3)+ MOVB R5,(R3)+ MOVB #'>,(R3)+ MOV Q$BUFF(R1),R2 MOV #5,R1 20$: MOV (R2)+,R0 CALL CNV8 SOB R1,20$ MOVB #'<,(R3)+ GOON: CLRB (R3) MOV #IOTXT,R0 CALL TYPE TST CCFLAG ;Can we go on? BEQ 1$ .SYNCH #SYNBLK RETURN .RSUM MOV @SP,-(SP) ;Copy return adres. CLR 2(SP) ;Make interrupt return. .MTPS #340 ;Prio -> 7 .INTEN 0 ;Enter system state. .FORK XXFBLK 1$: RETURN ;--------------------------- Storage ------------------------------; ;RAD50 filespecs from CSISPC. OUTSPC: OFSPEC: .BLKW 5. ; Output filespec. .BLKW 5.*2. ; Channels 1 and 2. IFSPEC: .BLKW 4. ; Input filespec. .BLKW 4.*6. ; Channels 4-9. DEFEXT: .WORD 0,0,0,0 ; Default extensions for CSISPC. ;------------------------ $FKPTR: .WORD 0 XXFBLK: .WORD 0,0,0,0 SYNBLK: .WORD 0,0,0,0,5,-1,0 JOB: .BLKW 8. AREA: .BLKW 6 DKSTAT: .BLKW 4 DKCQEA: .WORD 0 CCFLAG: .WORD 0 IOTXT: .WORD 0 .ASCII /=> / OUTP: .BLKB 160. LINE: .BLKB 82. DK1: .ASCIZ /No DEVICE:/ DK2: .ASCIZ /DEVICE: not LOADed/ DK3: .ASCIZ /DEVICE: LINKED!/ INPTXT: .ASCII \Specifie device for I/O display> \<200> HELP: .ASCII /Give valid device spec. such as> RK0:/<15><12> .ASCIZ /NO filename !!/ CMDERR: .ASCIZ \SHOWDC-W-Illegal device spec.! Type /H\ ERRCSI: .ASCIZ /SHOWDC-W-.CSI error/ ERROPT: .ASCIZ /SHOWDC-W-.CSI illegal option/ .EVEN TYPE: TSTB @#CONSOL ;Can we print it? BPL TYPE MOVB (R0)+,@#CONSOL+2 TSTB (R0) ;CRLF Terminator here? BEQ PCRLF CMPB (R0),#200 ;Terminator here? BNE TYPE RETURN PCRLF: MOV #CRLF,R0 BR TYPE CRLF: .BYTE 12,15,200,200 ;----------------------------------------------------------- ; Routine converts bits to decimal or octal ASCII string. ; R0; Contains bits to be converted ; R3; Points to output area ; Size of area should be nr. digits plus two ; On return R3 points to string terminator ; Note: Contens of R0, R3, R4 and R5 is changed!! ; Contens of R1 and R2 is saved and restored!! FORMAT=7. FORMAT=FORMAT-1 .IIF LT,FORMAT-6 FORMAT=6 CNV10:: MOV R2,-(SP) MOV #10.,R2 MOV R0,R5 BGE CONT .IIF NDF FORMAT MOVB #'-,(R3)+ NEG R0 BR CONT CNV8:: MOV R2,-(SP) MOV #8.,R2 CLR R5 CONT: MOV R1,-(SP) .IIF DF FORMAT,CLR R4 CALL CONVRT MOVB #200,@R3 MOV (SP)+,R1 MOV (SP)+,R2 RETURN CONVRT: MOV R0,R1 CLR R0 DIV R2,R0 MOV R1,-(SP) .IIF DF FORMAT,INC R4 TST R0 BEQ 1$ CALL CONVRT 1$: .IF DF FORMAT NEG R4 BEQ 30$ ADD #FORMAT,R4 BEQ 15$ 10$: MOVB #' ,(R3)+ SOB R4,10$ 15$: TST R5 BLT 20$ MOVB #' ,(R3)+ BR 30$ 20$: MOVB #'-,(R3)+ 30$: .ENDC ;FORMAT MOVB (SP)+,@R3 BISB #'0,(R3)+ RETURN .END START