.TITLE CONFIGURATION .SBTTL NOTES ; ; (LATER) ; ; ; FOR ALL PCB'S ENTER: ; ; POLL ADDRESS?(2-CHAR ASCII OF 2 CNTL-V'S IF NOT DEF'D) ; TERMINAL TYPE?(6 ASCII CHAR NAME) ; BAUD RATE?(5 ASCII CHAR RATE VALUE) ; TRUNK?(0 OR 1) ; MAXIMUM LINE SIZE?(VALUE 1-160. CHARS) ; CR DELAY?(VALUE 0-20., 0=NONE) ; FF DELAY?(VALUE 0-20., 0=NONE) ; ECHO INPUT?(Y OR N) ; ; NOTE: POLL ADDRESS, TERMINAL TYPE (TRUNK), BAUD RATE, AND ; MAXIMUM LINE SIZE (158.) ** ONLY ** QUESTIONS ASKED ; FOR A TRUNK PORT DEFINITION ; .PAGE .SBTTL LOCAL DATA ; .GLOBL PCB,POLTAB,TTYPE,BRTAB,PCBDAT ; .MCALL .PRINT,.TTYIN,.TTYOUT,.EXIT,.LOOKUP .MCALL .ENTER,.READW,.WRITW,.DELETE,.CLOSE ; .GLOBL AREA ; FIL: .RAD50 "MD0" ;CONFIGURATION .RAD50 "BMU" ;OUTPUT .RAD50 "XCN" ;FILE .RAD50 "NEW" ;NAME ; PCBNUM: .WORD 0 ;CURRENT PCB # TRKDEF: .WORD 0 ;TRUNK DEFINED COUNTER ; INP: .BLKW 10. ;INPUT BUFFER (20. CHAR) INPC: .WORD 0 ;AND CHAR COUNTER INPL: .WORD 0 ;CHAR SIZE FOR INPUT ; PTR1: .WORD PCB ;CONFIGURATION PTR2: .WORD POLTAB ;PROCESS PTR3: .WORD TTYPE ;TABLE PTR4: .WORD BRTAB ;PTRS ; .PAGE .SBTTL MAINLINE LOGIC ; CONFIG: ;**** ENTRY POINT **** .PRINT #MS1 ;SAY HELLO .LOOKUP #AREA,#1,#FIL ;DOES A FILE EXIST?? BCS 10$ ;IF ERROR, NO - CONTINUE 4$: MOV #1,-(SP) ;SET SIZE MOV #MS2,R1 ;SET PROMPT PTR 'DESTROY' JSR PC,PROMPT ;GET A 'Y' OR 'N' CMPB #'Y,INP ;'YES'??? BEQ ZERO ;THAT'S WHAT HE SAID .PRINT #MS18 ;NO - SAY GOODBYE .CLOSE #1 ;CLOSE THE FILE .EXIT ;AND GET OUT 10$: .ENTER #AREA,#1,#FIL,#3 ;CREATE A 3 BLOCK FILE BCC ZERO ;GOOD CREATION .PRINT #MS4 ;SIGNAL CREATION ERROR .EXIT ;AND GET OUT ZERO: MOV #PCB,R0 ;INIT PTR 10$: CMP #TTYPE,R0 ;ARE WE AT THE TYPE TABLE?? BLOS 20$ ;YES CLR (R0)+ ;NO - CLEAR THIS WD BR 10$ 20$: CMP #PCBDAT,R0 ;ARE WE FINISHED?? BLOS 30$ ;YES MOVB #'*,(R0)+ ;NO - FILL THE AREAS MOVB #'*,(R0)+ ;WITH ASTERISCS BR 20$ 30$: .PRINT #MS5 ;SIGNAL START OF INPUT PHASE MOV PTR1,R0 ;PRESET PCB PTR IN R0 CLR INP ;PRESET INPUT AREA TRUNK: PORT: MOV #MS7,R1 ;SET PROMPT PTR 'PORT' CONCOM: CLR R2 MOV PCBNUM,R3 ;GET THE PCB # DIV #10.,R2 ;ISOLATE BOTH DIGITS ; HIGH-ORDER IN R2, LOW ORDER IN R3 ADD #60,R2 ;CONVERT BINARY ADD #60,R3 ;TO ASCII MOVB R2,6(R1) ;INSERT INTO MSG MOVB R3,7(R1) ;AT PORT # POSITION MOVB #-1,P.ECH(R0) ;PRESET ECHO CHAR FLAG MOV #-1,(R0) ;SHOW PORT NOT DEF'D S1: CMPB INP,#SYNC ;POSSIBLE END OF EDIT?? BNE 5$ ;NO CMPB INP+1,#'E ;MAYBE, 'E' ND?? BNE 5$ ;NO CMP #CONSOL,PCBNUM ;YES - CONSOLE DEFINITION?? BNE 7$ ;YES - SKIP REST, ELSE FORCE RETRY 5$: MOV #2,-(SP) ;SET SIZE JSR PC,PROMPT ;GET POLL ADR 7$: CMP #CONSOL,PCBNUM ;CONSOLE PORT?? BEQ 10$ ;YES - THIS ** MUST ** BE DEFINED!!!!! CMPB #SYNC,INP ;DEFINED? BNE 10$ ;** YES ** ; ; INPUT OF SYNC AND ANOTHER CHAR MEANS NOT DEF'D ; JMP NEXPRT ;MOVE PTRS 10$: CMPB #40,INP ;VALID INPUT?? BGT 20$ ;NO - IT'S A CONTROL CHAR CMPB #40,INP+1 ;VALID INPUT?? BLE 30$ ;YES 20$: JSR PC,ERROR ;BAD INPUT BR S1 ;ASK AGAIN 30$: MOV INP,@PTR2 ;SAVE THE POLL ADR MOVB PCBNUM,P.SOU(R0) ;SHOW PORT DEFINED CMPB #CONSOL,PCBNUM ;IS THIS A TRUNK?? BGT 40$ ;YES TST TRKDEF ;NO - IS A TRUNK DEFINED?? BNE 40$ ;YES .PRINT #MS19 ;NO - SIGNAL ERROR .CLOSE #1 ;CLOSE FILE .EXIT ;AND EXIT 40$: INC TRKDEF ;COUNT TRUNK/PORT DEF'D S2: MOV #MS8,R1 ;SET PROMPT PTR 'TERMINAL TYPE' MOV #6,-(SP) ;SET SIZE JSR PC,PROMPT ;ASK INPUT MOV PTR3,R2 ;GET TTYPE PTR MOV INP,(R2) ;SAVE THE MOV INP+2,2(R2) ;TERMINAL TYPE MOV INP+4,4(R2) ;ENTERED S3: MOV #MS9,R1 ;SET PROMPT PTR 'BAUD RATE' MOV #5,-(SP) ;SET SIZE JSR PC,PROMPT ;ASK INPT MOV #5,R4 ;STORE MOV PTR4,R3 ;THE MOV #INP,R2 ;BAUD 10$: MOVB (R2)+,(R3)+ ;RATE SOB R4,10$ ;ENTERED S4: CMPB #CONSOL,PCBNUM ;TRUNK PCB?? BGT S5 ;YES 5$: MOV #MS10,R1 ;SET PROMPT PTR 'TRUNK' MOV #1,-(SP) ;SET SIZE JSR PC,PROMPT ;ASK INPUT CMPB #'0,INP ;TRUNK 0?? BNE 20$ ;NO TSTB PCB ;TRUNK 0 DEF'D?? BEQ 30$ ;YES 10$: JSR PC,ERROR ;NO ERROR BR S4 20$: CMPB #'1,INP ;TRUNK 1?? BNE 10$ ;NO - ERROR TSTB PCB+PCBLEN ;TRUNK 1 DEF'D?? BLT 10$ ;** NO ** 30$: MOVB INP,P.DST(R0) ;SET THE TRUNK # BICB #376,P.DST(R0) ;IN BINARY, PLEASE S5: MOV #MS11,R1 ;SET PROMPT PTR 'LINE SIZE' MOV #3,-(SP) ;SET SIZE JSR PC,PROMPT ;ASK INPUT JSR PC,A2D ;CONVERT TO BINARY BCC 20$ ;OKAY 10$: JSR PC,ERROR ;ERRORS BR S5 20$: CMP #BUFSIZ,R4 ;VALID MAX?? BLO 10$ ;** NO ** TST R4 ;VALID MIN?? BLOS 10$ ;** NO ** CMPB #CONSOL,PCBNUM ;TRUNK?? BLOS 30$ ;NO ADD #PDATA-TDATA+2,R4 ; YES ADD PROTOCOL TO SIZE 30$: ;************* RELEASE 18 ****************** INC R4 ;ACCEPT FULL INPUT ;************** RELEASE 18 ******************** MOVB R4,P.LSIZ(R0) ;SET VALUE S6: CMP #CONSOL,PCBNUM ;TRUNK?? BLE 10$ ;NO JMP S9 ;** YES ** 10$: MOV #MS12,R1 ;SET PROMPT PTR 'CR DELAY' MOV #2,-(SP) ;SET SIZE JSR PC,PROMPT ;ASK INPUT JSR PC,A2D ;CONVERT IT BCC 30$ ;OKAY 20$: JSR PC,ERROR ;ERRORS BR 10$ 30$: TST R4 ;VALID MIN?? BLO 20$ ;** NO ** CMP #20.,R4 ;VALID MAX?? BLO 20$ ;** NO ** MOVB R4,P.CRD(R0) ;SET CR DELAY VALUE S7: MOV #MS13,R1 ;SET PROMPT PTR 'FF DELAY' MOV #2,-(SP) ;SET SIZE JSR PC,PROMPT ;ASK INPUT JSR PC,A2D ;CONVERT IT BCC 20$ ;OKAY 10$: JSR PC,ERROR ;ERRORS BR S7 20$: TST R4 ;VALID MIN?? BLO 10$ ;** NO ** CMP #20.,R4 ;VALID MAX?? BLO 10$ ;** NO ** MOVB R4,P.FFD(R0) ;SAVE FF DELAY VALUE S8: MOV #MS14,R1 ;SET PROMPT PTR 'ECHO INPUT' MOV #1,-(SP) ;SET SIZE JSR PC,PROMPT ;ASK INPUT CMPB #'Y,INP ;YES?? BEQ 10$ ;THATS WHAT HE SAID CMPB #'N,INP ;NO?? BEQ S9 ;YES JSR PC,ERROR ;ERRORS BR S8 10$: MOVB #1,P.ECHO(R0) ;SET ECHO FLAG S9: ;********************************************************** ; MOVB #3,P.STAT(R0) ;TRURN ON BOTH STATS MOVB #177,P.WIND(R0); AT WINDOW OF 128. SE7. SECS MOVB #177,P.STIM(R0) ;SET TIMER TO INITIAL VALUE ; JMP NEXPRT ;FOR NOW **NO** STATS OPTIONS ; ;********************************************************** MOV #MS15,R1 ;SET PROMPT PTR 'STATS' MOV #1,-(SP) ;SET SIZE JSR PC,PROMPT ;ASK INPUT JSR PC,A2D ;CONVERT IT BCC 20$ ;OKAY 10$: JSR PC,ERROR ;ERRORS BR S9 20$: TST R4 ;VALID MIN?? BLO 10$ ;** NO ** CMP #3,R4 ;VALID MAX?? BLO 10$ ;** NO ** MOVB R4,P.STAT(R0) ;SET STATS BITS S10: MOV #MS16,R1 ;SET PROMPT PTR 'WINDOW' MOV #3,-(SP) ;SET SIZE JSR PC,PROMPT ;ASK INPUT JSR PC,A2D ;CONVERT IT BCC 20$ ;OKAY 10$: JSR PC,ERROR ;ERRORS BR S10 20$: TST R4 ;VALID MIN?? BLO 10$ ;** NO ** CMP #255.,R4 ;VALID MAX?? BLO 10$ ;** NO ** MOVB R4,P.WIND(R0) ;SET STATS WINDOW VALUE NEXPRT: .PRINT #MS20 ;SAY END OF PORT'S DEF INC PCBNUM ;NEXT PORT ADD #PCBLEN,PTR1 ;NEXT PCB MOV PTR1,R0 ;PRESET FOR NEXT PASS ADD #2,PTR2 ;NEXT POLTAB ADD #6,PTR3 ;NEXT TTYPE ADD #5,PTR4 ;NEXT BRTAB 10$: CMP #MAXPRT-1,PCBNUM ;FINISHED?? BLT FINI ;YES JMP PORT ;NO FINI: .PRINT #MS17 ;TELL ABOUT FILE STORAGE .WRITW #AREA,#1,#PCB,#PCBDAT-PCB+2/2,#0 ;WRITE DATA BCC 20$ ;OKAY 10$: .PRINT #MS4 ;FILE ERROR .CLOSE #1 ;CLOSE FILE .EXIT 20$: .CLOSE #1 ;CLOSE FILE BCS 10$ ;ERROR .PRINT #MS18 ;SAY WE'RE DONE .EXIT .PAGE .SBTTL SUPPORT SUBROUTINES ; ERROR: MOV R0,-(SP) ;SAVE R0 .PRINT #MS3 MOV (SP)+,R0 ;RESTORE R0 RTS PC A2D: ; CONVERT 'INP' TO BINARY IN R4, C-BIT ON = ERROR MOV R0,-(SP) ;SAVE MOV R1,-(SP) ;WORK MOV R2,-(SP) ;REG'S MOV R5,-(SP) ; MOV #INP,R5 ;SET INPUT PTR CLR R1 ;PRESET RESULT MOV INPL,R2 ;MAX # CHAR TO DECODE 10$: MOVB (R5)+,R4 ;GET CHAR BIC #177600,R4 ;SCRUB PARITY CMP #60,R4 ;VALID?? BLOS 30$ ;MAYBE 20$: MOV (SP)+,R5 MOV (SP)+,R2 ;RESET MOV (SP)+,R1 ;WORK MOV (SP)+,R0 ;REG'S SEC ;SIGNAL ERROR RTS PC ;EXIT 30$: CMP #71,R4 ;VALID?? BLO 20$ ;NO - ERROR CLC ;YES MUL #10.,R1 ;SHIFT RESULT BIC #60,R4 ;ADD THIS ADD R4,R1 ;DIGIT MOV R0,-(SP) ;FOR TIMING'S CLR R0 ;SAKE, OUTPUT .TTYOUT R0 ;A NULL TO MOV (SP)+,R0;SLOW THIS ROUTINE DOWN BIC #60,R2 ;TO BE SAFE SOB R2,10$ ;REPEAT UNTIL COMPLETE MOV R1,R4 ;SET EXIT VALUE MOV (SP)+,R5 MOV (SP)+,R2 ;RESET MOV (SP)+,R1 ;WORK MOV (SP)+,R0 ;REG'S CLC ;GOOD CONVERSION RTS PC ;EXIT PROMPT: ; PRINT R1 MSG, ACCEPT INPUT AS PER SIZE @ 2(SP) & CLEAN STACK ; **** DON'T **** EXIT UNTIL INPUT SIZE IS SATISFIED MOV 2(SP),INPL ;SAVE DESIRED INP LEN MOV (SP)+,(SP) ;CLEAN STACK MOV R0,-(SP) ;SAVE MOV R2,-(SP) ;REG'S 10$: .PRINT R1 ;PRINT THE PROMPT 15$: CLR INPC ;RESET INPUT CNTR MOV #INP,R2 ;SET INP PTR 20$: .TTYIN R0 ;GET CHAR FROM CONSOLE BIC #177600,R0 ;SCRUB PARITY CMP #DEL,R0 ;DELETE A CHAR?? BNE 25$ ;NO DEC INPC ;YES BLE 15$ ;RESET BUFFER, NOTHING LEFT DEC R2 ;RESET PTR 25$: CMP #CR,R0 ;DONE? BEQ 40$ ;MAYBE CMP #LF,R0 ;LINE-FEED ECHO??? BEQ 20$ ;YES - IGNOR IT MOVB R0,(R2)+ ;NO - STORE CHAR INC INPC ;AND CNT IT CMP INPC,INPL ;OVERSIZE?? BLOS 20$ ;NOT YET 30$: JSR PC,ERROR ;TYES - ERROR BR 10$ ;RE-PROMPT FOR INPUT 40$: CMP INPC,INPL ;PROPER SIZE?? BNE 30$ ;NO - ERROR MOV (SP)+,R2 ; YES - RESET MOV (SP)+,R0 ;REG'S AND RTS PC ;EXIT ; .PAGE .SBTTL MESSAGES MS1: .ASCIZ /** BMUX CONFIGURATION MODE **/ MS2: .ASCIZ /DO YOU WANT TO DESTROY PRIOR CONFIGURATION (Y OR N)?/ MS3: .ASCIZ /INVALID INPUT/ MS4: .ASCIZ /FILE CREATION ERROR/ MS5: .ASCIZ /BEGINNING CONFIGURATION OF PORTS/ MS6: .ASCII /** NOT USED **/ MS7: .ASCII /PORT 00/ .BYTE CR,LF .ASCIZ /POLL ADDRESS (2-CHAR ASCII)?/ MS8: .ASCIZ /OWNER (6-CHAR ASCII NAME)?/ MS9: .ASCIZ /SITE (5-CHAR VALUE)?/ MS10: .ASCIZ /TRUNK (0 OR 1)?/ MS11: .ASCIZ /MAXIMUM LINE SIZE (001-160)?/ MS12: .ASCIZ /CR DELAY (00-20 NULLS)?/ MS13: .ASCIZ /FF DELAY (00-20 NULLS)?/ MS14: .ASCIZ /ECHO INPUT CHARACTERS (Y OR N)?/ MS15: .ASCIZ /STATISTICS (0-3)?/ MS16: .ASCIZ /SAMPLE WINDOW (001-255 SEC)?/ MS17: .BYTE CR,LF .ASCII /** CONFIGURATION COMPLETE **/ .BYTE CR,LF .ASCIZ /STORING CONFIGURATION ONTO DISK/ MS18: .ASCIZ /** END OF CONFIGURATION **/ MS19: .ASCIZ /** NO TRUNK DEFINED **/ MS20: .ASCII /** END OF THIS PORT'S DEFINITION **/ .BYTE LF,0 .EVEN .END CONFIG