;;;MODIFICATION HISTORY ;;; ;;; 15 NOV 75 OBTAINED FROM DEC (KLDCP REV 7) ;;; 15 NOV 75 CONVERTED TO PALX FORMAT ;;; 19 DEC 75 BUG FIXES, BREAK, DDT CMD, PCF CMD ;;; 30 MAR 76 MODIFIED TO COEXIST WITH ITS IOELEVEN PROGRAM .SBTTL CONSOLE PACKAGE FOR KL10/11 INTERFACE, 9-SEPT-75 CONSL: ;MOV #PR7,PS ;DISABLE INTERRUPTS ;MOV #PR7,EMTVEC+2 MOV #STACK,SP ;RESET STACK MOV #$STUF,R0 ;SETUP FOR STACK UNDERFLOW MOV R0,(SP) 1$: PUSH R0 MOV SP,$KONSP KONSL: MOV $KONSP,SP ;RESET STACK POINTER TTPINI ;INIT TTY POINTERS CLR DDTFLG CLR IFILEF CLR HLPPNT CLR PCMDFLG PFORCE ;ALL OUTPUT TO TTY JSR PC,$CKSUM ;COMPUTE CHECKSUM OF "KLDCP" CMP R0,$ILDSUM ;DOES IT MATCH AS LOADED ? BEQ 2$ ;YES, OK !!!! MOV R0,$ILDSUM ;NO, ONLY REPORT CHANGES PMSG 2$: TST JFILEF BNE $$CONSL PMSG BR $$CONSL $KONSL: TTIBRK ;GET BREAK CHAR FROM LAST OPERATION BCS $KONS1 ;NO DATA CMPB #',,R0 ;WAS LAST BREAK A COMMA ? BEQ $RPT ;BR IF YES, CONTINUE STRING PROCESS CMPB #' ,R0 ;WAS LAST BREAK A SPACE ? BEQ $RPT ;YES, CONTINUE STRING PROCESS CMPB #TAB,R0 ;WAS LAST BREAK A TAB ? BEQ $RPT ;YES, CONTINUE STRING PROCESS TST R0 BEQ 11$ ;NULL, EOL CMP #LF,R0 ;IS IT LF ? BEQ 11$ ;YES CMP #ALTMOD,R0 BEQ 11$ ;IS IT ALTMODE ? CMP #CR,R0 ;IS IT A CR ? BNE 2$ ;NO, INVALID TERMINATION 11$: TST RPTFLG ;PRESENTLY DOING A REPEAT ? BEQ $KONS1 ;BR IF NO JSR PC,$PTTYC ;CHECK OPERATOR INTERRUPT 1$: MOV #$INBUF+2,$INPTC ;REPEAT, REDO COMMAND BR $RPT 2$: JMP $CMDER $$CONSL:CLR RPTFLG CLR DVDIRF ;CLEAR DEVICE DIRECTORY FLAG $KONS1: TST PCMDFLG ;DOING PROGRAM COMMAND ? BEQ 1$ ;NO JMP PCMDE ;YES, RETURN TO PROGRAM 1$: TST IFILEF ;PROCESSING INDIRECT FILE ? BEQ 2$ ;NO JMP IFILIN ;YES, GET CHARS FROM STORAGE 2$: TST JFILEF ;DOING DOUBLE INDIRECT ? BPL $KONS2 ;NO JMP JFILIN ;YES, GET CHARS FROM STORAGE $KONS2: MOV SP,$KONSP ;SAVE STACK POINTER TSTB TENRUN ;IF TEN IS RUNNING, BNE 2$ ;DON'T GIVE COMMAND PROMPT 1$: PFORCE PNTCI '> PMSG <. _> 2$: RUNLP ;RUN LOOP &/OR READ IN A TTY LINE BCC $RPT ;RESPONSE, GO PROCESS CMP #$INBUF,$INPTR ;ANYTHING BEEN TYPED ? BNE 1$ ;YES, REPROMPT BR 2$ $RPT: CLR ALLFLG ;CLEAR ALL PRINT FLAG TTISDL ;READ ONE CHARACTER BCC $CMDER ;...NUMBER, ILLEGAL 1$: CMPB #';,R0 BEQ $$CONSL ;SEMICOLON, LOCAL COPY ONLY CMPB #'.,R0 BEQ $RPT ;DOT, IGNORE MOVB R0,$KDCEN ;PLACE IN END OF DECODER TTICHR ;READ SECOND CHARACTER BCS $KONS1 ;EVEN 1 CHAR CMDS ARE 2 CHAR MIN. CMPB #12,R0 ;IF THIS CHAR IS A LINE FEED BEQ $KONS1 ;..1ST CHAR MUST HAVE BEEN CR, IGNORE CMPB #15,R0 ;IF THIS CHAR A CR BEQ 3$ ;THIS IS A SINGLE LETTER COMMAND CMPB #33,R0 ;IF ALTMODE BEQ 3$ ; DITTO MOVB R0,$KDCEN+1 ;PLACE SECOND IN END OF DECODER ;THE COMMAND PORTION OF THE INPUT STRING IS READY TO BE DECODED 4$: MOV $KDCEN,R0 ;COMMAND TO R0 MOV #$KDCRE,R1 ;ADDRESS OF LIST TO R1 2$: CMP R0,(R1)+ ;TEST FOR COMMAND BNE 2$ ;NOT FOUND YET CLR $KDCEN CLR ENQFLG JMP @$DISPH-$KDCRE-2(R1) ;EXIT TO SELECTED SUBROUTINE 3$: MOVB #40,$KDCEN+1 ;MAKE SINGLE LETTER COMMAND BR 4$ ;LETTER & SPACE FOR LOOKUP $CMDER: PNTCI '? BR $$$CC $$CNTLC:CLR DIAFLG CLRB TENRUN ;CLEAR PDP-10 RUNNING FLAG TST PCMDFLG ;DOING PROGRAM COMMAND ? BNE $$$CC ;YES CLR PRGRUN ;CLEAR PROGRAM RUNNING FLAG $$$CC: SETFLG $TTLKF TST DEVTYP ;IN ACT10 MODE ? BPL 1$ ;NO TST ENQFLG ;DOING APT10 COMMAND ? BEQ 1$ ;NO COMCLR ;ACT10, CLEAR COMM, THEN TO CONSL 1$: PUSH $FORCE ;SAVE FORCED PRINTING FLAG PFORCE PCRLF ;FORCE PRINT ERROR POP $FORCE ;RESTORE TST PCMDFLG ;DOING PROGRAM COMMAND ? BEQ 2$ ;NO JMP PCMDE1 ;YES, TAKE ERROR RETURN 2$: CLR JFILEF ;CLEAR DOUBLE INDIRECT FLAG JMP KONSL .SBTTL CONSOLE DISPATCH TABLE $KDCRE: .ASCII /R / ;REPEAT OPERATOR .ASCII /FX/ ;DIAGNOSTIC FUNCTION EXECUTE .ASCII /FW/ ;DIAGNOSTIC FUNCTION WRITE .ASCII /FR/ ;DIAGNOSTIC FUNCTION READ .ASCII /FS/ ;DIAGNOSTIC FUNCTION SYNC .ASCII /DA/ ;DIAGNOSTIC DEPOSIT INTO AR .ASCII /EX/ ;PDP-10 INSTRUCTION EXECUTE .ASCII /MR/ ;MASTER RESET ;PDP-10 EXAMINE/DEPOSIT FUNCTIONS .ASCII /EM/ ;EXAMINE 10 AT ADR AND PRINT .ASCII /DM/ ;DEPOSIT DATA IN 10 ADDRESS .ASCII /EN/ ;EXAMINE AND PRINT NEXT 10 ADDRESSES .ASCII /DN/ ;DEPOSIT DATA INTO NEXT 10 ADDRESSES .ASCII /MZ/ ;MEMORY ZERO ;START/STOP FUNCTIONS .ASCII /SP/ ;STOP 10, CLEAR RUN FLOP .ASCII /RN/ ;START 10, SET RUN FLOP .ASCII /SI/ ;SINGLE INSTRUCTION,PUSH CONTINUE .ASCII /PL/ ;PULSE CLOCK .ASCII /BU/ ;BURST CLOCK .ASCII /SM/ ;START MICRO CODE,SUPPORT EXAMINE/DEPOSIT .ASCII /ST/ ;START AT 10 ADDRESS .ASCII /SW/ ;PDP-10 SWITCHES .ASCII /AC/ ;"AC BLK" SELECTION .ASCII /MC/ ;PDP-10 MONITOR CONTINUE .ASCII /EP/ ;SET EOP INTERVAL ;PDP-11 FUNCTIONS .ASCII /SE/ ;START 11 AT ADR .ASCII /EE/ ;EXAMINE 11 AT ADR AND PRINT .ASCII /DE/ ;DEPOSIT DATA IN 11 ADDRESS .ASCII /EB/ ;EXAMINE 11 BYTE .ASCII /DB/ ;DEPOSIT 11 BYTE .ASCII /ZE/ ;ZERO ELEVEN ;RAM FUNCTIONS .ASCII /EC/ ;EXAMINE C-RAM AT ADDRESS AND PRINT .ASCII /DC/ ;DEPOSIT DATA INTO C-RAM ADDRESS .ASCII /RC/ ;READ C-RAM, FR'S 140-141-142-143 .ASCII /ED/ ;EXAMINE D-RAM AT ADDRESS AND PRINT .ASCII /DD/ ;[START DDT] OR DEPOSIT D-RAM .ASCII /MM/ ;MICRO-CODE SYNC MARK .ASCII /MU/ ;MICRO-CODE SYNC UNMARK .ASCII /MT/ ;MICRO-CODE TIME CHANGE ;CLOCK OPERATIONS .ASCII /CS/ ;CLOCK SOURCE .ASCII /CR/ ;CLOCK RATE ;PROCESSOR PARITY FUNCTIONS .ASCII /PD/ ;DISABLE PARITY STOP .ASCII /PE/ ;ENABLE PARITY STOP ;INTERNAL E-BOX REGISTER READ FUNCTIONS .ASCII /AR/ ;READ & PRINT AR REGISTER .ASCII /BR/ ;READ & PRINT BR REGISTER .ASCII /MQ/ ;READ & PRINT MQ REGISTER .ASCII /FM/ ;READ & PRINT FM REGISTER .ASCII /AD/ ;READ & PRINT ADDER .ASCII /PC/ ;READ & PRINT PC .ASCII /VM/ ;READ & PRINT VMA .ASCII /SC/ ;READ & PRINT SC REGISTER .ASCII /FE/ ;READ & PRINT FE REGISTER .ASCII /ER/ ;READ & PRINT E-BUS REGISTER .ASCII /PI/ ;READ & PRINT PI SYSTEM .ASCII /AL/ ;PRINT ALL, C-RAM & REGISTERS ;CACHE OPERATIONS .ASCII /CE/ ;CACHE ENABLE .ASCII /CI/ ;CACHE INVALIDATE .ASCII /CF/ ;CACHE FLUSH ;REPEAT CONTROL .ASCII /RP/ ;REPEAT & PRINT OR RP04 SELECT .ASCII /TD/ ;TIME DELAY ;CONSOLE (TTY) CONTROL FUNCTION .ASCII /TP/ ;SET TTY PAGE LENGTH .ASCII /TW/ ;SET TTY PAGE WIDTH .ASCII /TF/ ;SET TTY FILL COUNT .ASCII /TT/ ;SWITCH TO REMOTE TELETYPE OPERATION ; .ASCII /LP/ ;LINE PRINTER SELECTION .ASCII /KL/ ;KLINIK SELECTION ;KL10 MONITOR (PROGRAM & ACT10) COMMANDS .ASCII /B / ;BOOT .ASCII /LI/ ;LOGIN .ASCII /H / ;HELP .ASCII /P / ;PROGRAM .ASCII /LT/ ;LOAD TEN .ASCII /LE/ ;LOAD ELEVEN .ASCII /LR/ ;LOAD RAM .ASCII /LB/ ;LOAD ELEVEN BINARY .ASCII /V / ;VERFIY PROGRAM .ASCII /S / ;SCRIPT .ASCII /M / ;MASTER SCRIPT .ASCII /C / ;COMMENT/CORRECTIVE ACTION .ASCII /GO/ ;GO START PROGRAM .ASCII /LO/ ;LOGOUT .ASCII /GS/ ;GENERATE SCRIPT ; .ASCII /CD/ ;PDP-11 CORE DUMP .ASCII /TA/ ;ACT10 TO RP04 TRANSFER .ASCII /WF/ ;DECTAPE TO RP04 WRITE .ASCII /WU/ ;RP04 TO DECTAPE WRITE .ASCII /UI/ ;DECTAPE INITIALIZE .ASCII /UD/ ;DECTAPE DELETE .ASCII /US/ ;DECTAPE SALVAGE .ASCII /FL/ ;FLAP DECTAPE .ASCII /RE/ ;'RENM' RENAME RP04 FILE .ASCII /T / ;TIME .ASCII /BT/ ;BOOT TEN .ASCII /AT/ ;SWITCH TO ACT10 MODE .ASCII /DT/ ;SWITCH TO DECTAPE MODE, SELECT UNIT .ASCII /RX/ ;SWITCH TO FLOPPY MODE, SELECT UNIT .ASCII /DI/ ;DIRECTORY, DECTAPE/RP04/FLOPPY .ASCII /BP/ ;BREAKPOINT TRAP LAYER .ASCII /BC/ ;BREAKPOINT CONTINUE .ASCII /RG/ ;TYPE OUT BREAK STUFF .ASCII /RB/ ;REMOVE BREAKPOINTS .ASCII /HC/ ;ERROR HALT CONTINUE .ASCII /RI/ ;REINITIALIZE SYSTEM .ASCII /I / ;INDIRECT COMMAND FILE PROCESS .ASCII /J / ;DOUBLE INDIRECT COMMAND FILE .ASCII /JC/ ;"J" FILE CONTINUE .ASCII /IT/ ;TURN ON I.T.S. PROG .ASCII /DS/ ;DISK STATUS $KDCEN: 0 ;ERROR TRAP FOR NONEXISTANT COMMANDS ;DISPATCH TABLE $DISPH: .RPT ;REPEAT OPERATION .DFXCT ;DIAGNOSTIC FUNCTION EXECUTE .DFWRT ; " " WRITE .DFRD ; " " READ .FS ; " " SYNC .DA ; " DEPOSIT INTO AR .XCT ;EXECUTE 10 INSTRUCTION .MRESET ;MASTER RESET .EXM ;EXAMINE 10 .DP ;DEPOSIT 10 .EXMNX ;EXAMINE NEXT 10 .DPNX ;DEPOSIT NEXT 10 .MZ ;MEMORY ZERO $SP ;STOP 10 $RN ;RUN 10 $SI ;SINGLE INSTRUCT 10 .PL ;PULSE 10 .BU ;BURST CLOCK .SM ;START MACHINE $ST ;START 10 $SW ;SWITCHES 10 .AC ;"AC BLK" SELECTION $MC ;MONITOR CONTINUE .EP ;SET EOP INTERVAL .SE ;START ELEVEN .EE ;EXAMINE ELEVEN .DE ;DEPOSIT ELEVEN .EB ;EXAMINE 11 BYTE .DB ;DEPOSIT 11 BYTE .ZE ;ZERO ELEVEN $EC ;EXAMINE C_RAM $DC ;DEPOSIT C-RAM $RC ;READ C-RAM $ED ;EXAMINE D_RAM $DDTX ;[START DDT] OR DEPOSIT D_RAM .MM ;MICRO-CODE MARK .MU ;MICRO-CODE UNMARK .MT ;MICRO-CODE TIME CHANGE .CS ;SELECT CLOCK SOURCE .CR ;SELECT CLOCK RATE .PD ;PROCESSOR PARITY DISABLE .PE ;PROCESSOR PARITY ENABLE .AR ;READ REGISTERS .BR .MQ .FM .AD .PC .VM .SC .FE .ERG .PI ;READ & PRINT PI SYSTEM .ALL ;PRINT ALL .CE ;CACHE ENABLE .CI ;CACHE INVALIDATE .CF ;CACHE FLUSH .RPTP ;REPEAT & PRINT .TD ;TIME DELAY $TP ;SET TTY PAGE LENGTH $TW ;SET TTY PAGE WIDTH $TF ;SET TTY FILL PARAMETER $TT ;SWITCH TO REMOTE TTY ; $LPT ;LINE PRINTER SELECTION .KLINIK ;KLINIK SELECTION ;KL10 MONITOR (PROGRAM & ACT10) COMMANDS $BOOT ;BOOT SYSTEM $LOGIN ;LOG IN $HELP ;HELP $PROG ;LOAD PROGRAM $LDT ;LOAD TEN $LDE ;LOAD ELEVEN $LDR ;LOAD RAM $LDB ;LOAD ELEVEN BINARY $VERIFY ;VERIFY PROGRAM $SCRPT ;SCRIPT REQUEST $MSCP ;MASTER SCRIPT REQUEST $COMNT ;COMMENT $GO ;PROGRAM GO $LOGO ;LOG OUT $GSCP ;GENERATE SCRIPT ; $CD ;PDP-11 CORE DUMP $TA ;ACT10 TO RP04 TRANSFER $WF ;DECTAPE TO RP04 WRITE FILE $WU ;RP04 TO DECTAPE WRITE $UI ;DECTAPE INITIALIZE $UD ;DECTAPE DELETE $US ;DECTAPE SALVAGE $UF ;DECTAPE FLAP $RE ;'RENM' RP04 RENAME FILE $TIME ;TIME $BOOTT ;BOOT PDP-10 $AT ;SELECT ACT-10 MODE $DT ;SELECT DECTAPE MODE & UNIT $RX ;SELECT FLOPPY MODE & UNIT $DI ;DIRECTORY, DECTAPE/RP04/FLOPPY .BP ;BREAKPOINT INSERTION .BC ;BREAKPOINT CONTINUE .RG ;PRINT SAVED REGISTERS .RB ;REMOVE BREAKPOINTS .HC ;HALT CONTINUE .RI ;REINITIALIZE CONSOLE $IFILE ;INDIRECT FILE $JFILE ;DOUBLE INDIRECT FILE $JC ;J FILE CONTINUE $ITS ;TURN ON I.T.S. PROG DSKSTS ;PRINT DISK STATUS $CMDER ;NO SUCH COMMAND .SBTTL DIAGNOSIC CONSOLE UTILITY COMMAND PROCESS ;UTILITY PROGRAM CHECK $KLUCK: CMP PID,PIDU ;UTILITY PROGRAM IN CORE ? BNE 1$ CMP PID+2,PIDU+2 BNE 1$ CMP PDVER,#DECVER ;PROPER VERSION ? BNE 1$ RTS PC ;OK 1$: PMSG JMP $CNTLC PIDU: .RAD50 /KLDCPU/ ;TRANSFER FROM APT10 DISPATCH $TA: JSR PC,$KLUCK ;UTILITY IN CORE ? JMP @TAPT ;YES ;WRITE FILE FROM DTA/FLOPPY DISPATCH $WF: JSR PC,$KLUCK ;UTILITY IN CORE ? JMP @WFILE ;YES $WU: JSR PC,$KLUCK JMP @WUTAPE $UI: JSR PC,$KLUCK JMP @UINIT $UD: JSR PC,$KLUCK JMP @UFDELE $US: JSR PC,$KLUCK JMP @USALV $UF: JSR PC,$KLUCK JMP @UFLAP ;REMOTE TELETYPE COMMUNICATIONS DISPATCH $TT: JSR PC,$KLUCK ;UTILITY IN CORE ? JMP @REMOTE ;YES ;RP04 DISK DIRECTORY DISPATCH $RPDIR: JSR PC,$KLUCK ;UTILITY IN CORE ? JMP @DSKDIR ;YES ;CHECK FOR I.T.S. IOELEVEN PROGRAM IN CORE ITSCHK: CMP PID,PIDI BNE 1$ CMP PID+2,PIDI+2 BNE 1$ RTS PC ;OK 1$: PMSG CLR ITSFLG MOV #PR7,PS ;TURN OFF INTS AGAIN MOV #PR7,EMTVEC+2 JMP $CNTLC PIDI: .RAD50 /IOELEV/ ;THE "ITS" COMMAND COMES HERE $ITS: TTICHR ;MAKE SURE 3RD CHAR IS "S" BCS 1$ CMPB R0,#'S BNE 1$ 20$: TTICHR ;COULD BE ITS OFF COMMAND BCS 1$ CMPB R0,#40 BEQ 20$ CMPB R0,#'O BNE 2$ TTICHR BCS 1$ CMPB R0,#'F BNE 1$ TTICHR BCS 1$ CMPB R0,#'F BNE 1$ TTITRM JSR PC,ITSOF1 ;TURN IOELEV OFF JMP $KONSL 2$: TTBTRM JSR PC,ITSCHK ;MAKE SURE IOELEV IS AROUND MOV #-1,ITSFLG MOV #PR0,PS ;TURN ON INTERRUPTS MOV #PR0,EMTVEC+2 JSR PC,@#3000 ;GET PROGRAM INITIALIZED, WILL RETURN IF TEN NOT RUNNING JMP $KONSL ;RETURN TO COMMAND PROC 1$: JMP $CMDER ;SUBROUTINE TO TURN ITS OFF IF ON. CLOBBERS NO REGISTERS, ;BUT DOES DO A RESET. ITSOFF: TST ITSFLG BNE 1$ RTS PC 1$: MOV R0,-(SP) PMSG JSR PC,ITSOF1 MOV (SP)+,R0 RTS PC ITSOF1: CLR ITSFLG 30$: TSTB @$TPS BPL 30$ RESET ;IS THIS DESIRABLE? ;GOTTA FLUSH INTERRUPTS SOMEHOW CLR R0 SOB R0,. ;DELAY 100 MS FOR LUCK RTS PC .SBTTL CONSOLE COMMAND REPEAT CONTROL .RPT: SETFLG RPTFLG ;SET REPEAT FLAG .RPTX: PNORML JMP $RPT .RPTP: TTISDL BCC 1$ ;NUMBER TTBACK MOV #177400,RPTFLG ;SET REPEAT & PRINT BR .RPTX 1$: JMP $RP ;MUST BE RP04 SELECTION .SBTTL PROGRAM CONSOLE COMMAND PROCESS $PRGNPT:SETFLG ;PROGRAM COMMAND, NO PRINT PCMDNF BR $PRGXX $PRGCMD:CLR PCMDNF $PRGXX: SETFLG PCMDFLG ;SET PROGRAM COMMAND FLAG TST R0 BEQ 2$ ;USE CURRENT INPUT BUFFER, R0=0 CMP #-1,R0 BNE 3$ MOV #$OUTBF,R0 ;USE OUTPUT BUFFER, R0 = -1 MOV R0,$OUTPT 3$: JSR PC,$PCMDX ;TRANSFER COMMAND TO INPUT BUFFER 2$: MOV #$INBUF,$INPTC ;SET PICKUP POINTER MOV SP,$$SVSP ;SAVE STACK POINTER JMP $RPT ;PROCESS COMMAND PCMDE: MOV $$SVSP,SP ;RESTORE STACK POINTER CLR PCMDFLG CLR PCMDNF CLR ENQFLG EXIT PCMDE1: MOV $$SVSP,SP PCMDE3: CLR PCMDFLG ;ERROR, C-BIT SET RETURN CLR PCMDNF CLR HLPPNT EXITERR PCMDE2: MOV $$SVSP,SP BIS #NBIT,14(SP) ;CONTROL C DURING TYPEOUT BR PCMDE3 ;NBIT & CBIT SET RETURN $PCMDX: MOV #$INBUF,R1 ;MOVE COMMAND TO INPUT BUFFER $DIASX=. 1$: MOVB (R0)+,(R1)+ ;TRANSFER CHARS BNE 1$ ;TILL NULL DEC R1 MOVB #CR,(R1)+ MOVB #LF,(R1)+ MOV R1,$INPTR ;SAVE EOL POINTER RTS PC ;PROGRAM INDIRECT CCL FILE PROCESS $TTICCL:MOV IFINP,R1 ;XFER CHARS INTO INPUT BUFFER TSTB (R1) ;FIRST CHAR A NULL ? BEQ 1$ ;YES, FINISHED JSR PC,IJFILX MOV R1,IFINP ;RESAVE POINTER EXIT 1$: EXITERR ;FINISHED, C-BIT SET RETURN ;INDIRECT COMMAND FILE PROCESS IFILIN: MOV IFINP,R1 ;XFER CHARS INTO INPUT BUFFER TSTB (R1) ;FIRST CHAR A NULL ? BEQ IFILX1 ;YES, FINISHED JSR PC,IJFILX MOV R1,IFINP ;RESAVE STORAGE POINTER TST JFILEF ;DON'T PRINT "I" IF UNDER "J" BNE 3$ IFILX=. $PMSG ;PRINT COMMAND LINE $INBUF 3$: JMP $RPT ;GO PROCESS IFILX1: JMP CONSL ;FINISHED ;DOUBLE INDIRECT COMMAND FILE PROCESS JFILIN: TST PRGRUN ;PROGRAM PRESENTLY RUNNING ? BEQ 3$ ;NO JMP $KONS2 ;YES, WAIT TILL IT'S DONE 3$: MOV JFINP,R1 ;XFER CHARS INTO INPUT BUFFER TSTB (R1) ;FIRST CHAR A NULL ? BEQ 2$ ;YES, FINISHED JSR PC,IJFILX MOV R1,JFINP ;RESAVE STORAGE POINTER BR IFILX 2$: CLR JFILEF BR IFILX1 IJFILX: MOV #$INBUF,R0 MOV R0,$INPTC 1$: MOVB (R1)+,(R0)+ BNE 1$ MOV R0,$INPTR RTS PC .SBTTL DIAGNOSTIC FUNCTIONS ;DIAGNOSTIC FUNCTION EXECUTE .DFXCT: DFLEGAL ;FUNCTION LEGAL ? TTISDO ;GET FUNCTION CMP R0,#037 ;FUNCTION VALID ? BGT $DFERR ;FX IS 000 TO 037 DFXCT ;DF EXECUTE BR .DFX ;RETURN TO CONSOLE ;DIAGNOSTIC FUNCTION WRITE .DFWRT: DFLEGAL ;FUNCTION LEGAL ? TTISDO ;GET FUNCTION CMP R0,#040 BLT $DFERR CMP R0,#077 BGT $DFERR ;FW IS 040 TO 077 MOV R0,R2 ;SAVE FUNCTION TTIS36 ;GET DATA MOV R0,R1 ;PUT ADR OF 36BITS IN R1 MOV R2,R0 ;FUNCTION IN R0 DFWRT ;DIAGNOSTIC FUNCTION WRITE .DFX: JMP $KONSL ;DIAGNOSTIC FUNCTION SYNC, GENERATES PULSE AT "A36E1" .FS: DFLEGAL ;FUNCTION LEGAL ? TTITRM DFXCTT 74 ;SYNC IS FUNCTION EXECUTE 74 BR .DFX $DFERR: PMSG JMP $CNTLC ;DIAGNOSTIC READ AND PRINT .DFRD: DFLEGAL ;FUNCTION LEGAL ? CLR R3 TTISDO ;GET FUNCTION MOV R0,R2 TTIBRK BCS $DFERR CMPB #COMMA,R0 ;IF BREAK IS A COMMA, MULTIPLE DFRD BNE 1$ INC R3 TTCOCT MOV R0,R4 ;SAVE LAST DFRD 1$: TSTB RPTFLG BNE 2$ MOV R2,R0 PNTOCS PSLASH 2$: MOV R2,R0 BEQ 21$ ;FR 0 USED TO READ E-BUS CMP R0,#100 BLT $DFERR CMP R0,#177 BGT $DFERR ;FR IS 100 TO 177 21$: MOV #.DFRDA,R1 DFRDMV TSTB RPTFLG BNE 3$ MOV R1,R0 PNT36B ;PRINT IN BINARY 3$: TST R3 BEQ 4$ PCRLF CMP R2,R4 BHIS 4$ INC R2 BR 1$ 4$: BR ALLEXT .DFDP: DFLEGAL ;FUNCTION LEGAL ? MOV #.DFRDA,R1 DFRDMV ;READ THE E-BUS TSTB RPTFLG BNE .DFX .DFDPC: MOV #.DFRDA,R0 PNT36 ;PRINT IT OUT ALLEXT: TST ALLFLG ;DOING ALL ? BNE 1$ ;YES TSTB RPTFLG ;DOING A REPEAT ? BNE 2$ ;YES ALLEX1=. PCRLF 2$: BR .DFX 1$: RTS PC ;ALL, CONTINUE .MQ: TTITRM $ALLMQ=. PMSGR 1$: MOV #DPMQ,R0 BR .DFDP .FM: DFLEGAL ;FUNCTION LEGAL ? TTITRM $ALLFM=. TSTB RPTFLG BNE 1$ PNTCI "FM DFRDT ;READ FM ADDRESS DPFMA MOV @.DAT2,R0 SHIFTR 5 BIC #177760,R0 PNTODT 2 PNTCI '/ 1$: MOV #DPFM,R0 BR .DFDP $DPERR: JMP $DFERR .AR: TTICHR BCS $DPERR CMPB #'X,R0 ;IS COMMAND 3 LETTERS ? BEQ 1$ ;BR IF 3RD LETTER IS X TTBTRM $ALLAR=. PMSGR 2$: MOV #DPAR,R0 BR .DFDP ;READ AND PRINT AR 1$: TTITRM $ALARX=. PMSGR 3$: MOV #DPARX,R0 BR .DFDP .AD: TTICHR BCS $DPERR CMPB #'X,R0 ;IS COMMAND 3 LETTERS ? BEQ 1$ ;BR IF 3RD LETTER IS X CMPB #'B,R0 BEQ .ADB ;ADB, PRINT ADDRESS BREAK TTBTRM $ALLAD=. PMSGR 2$: MOV #DPAD,R0 BR .DFDP ;READ AND PRINT AD 1$: TTITRM $ALADX=. PMSGR 3$: MOV #DPADX,R0 BR .DFDP ;READ AND PRINT ADX .BR: TTICHR BCS $DPERR CMPB #'X,R0 ;IS COMMAND 3 LETTERS ? BEQ 1$ ;BR IF 3RD LETTER IS X TTBTRM $ALLBR=. PMSGR
2$: MOV #DPBR,R0 BR .DFDP ;READ AND PRINT BR 1$: TTITRM $ALBRX=. PMSGR 3$: MOV #DPBRX,R0 BR .DFDP ;READ AND PRINT THE BRX .ERG: TTICHR BCS $DPER1 CMPB #'G,R0 BNE $DPER1 TTITRM $ALLEB: PMSGR MOV #DPERG,R0 BR .DFDP ;READ & PRINT EBUS REGISTER ;MASTER RESET .MRESET:TTITRM MRESET BR .DAX ;DEPOSIT INTO AR .DA: DFLEGAL ;FUNCTION LEGAL ? TTIS36 ;GET 36 BIT AR DATA MOV R0,R1 ;ADR OF 36 BITS TO R1 JSR R5,WIRAR1 ;CALL IR/AR WRITE ROUTINE .DAX: JMP $KONSL .PC: TTICHR BCS $DPER1 CMPB #'F,R0 BEQ .PCF TTBTRM $ALLPC=. PMSG TST TENRUN ;PDP-10 PRESENTLY RUNNING ? BEQ 1$ ;NO, GO AHEAD THEN DFXCTT CLRRUN ;CLEAR RUN TDELAY ;WAIT FOR HALT LOOP DFXCTT STPCLK ;STOP CLOCK DFPC ;READ PC PUSH R0 DFXCTT STRCLK ;START CLOCK DFXCTT SETRUN ;SET RUN DFXCTT CONBUT ;SET CONTINUE POP R0 BR PCVMAP ;GO PRINT 1$: DFPC PCVMAP: PNTADR TST ALLFLG BNE 1$ JMP ALLEX1 ;RETURN TO CONSOLE 1$: RTS PC ;ALL, RETURN TO ROUTINE .VM: DFLEGAL ;FUNCTION LEGAL ? TTICHR BCS $DPER1 CMPB #'A,R0 BEQ 1$ CMPB #'H,R0 BEQ .VMH BR $DPER1 1$: TTITRM $ALVMA=. PMSG DFVMA BR PCVMAP $DPER1: JMP $DFERR .VMH: TTITRM $ALVMH=. PMSG DFVMAH BR PCVMAP .ADB: DFLEGAL ;FUNCTION LEGAL ? TTITRM PMSG DFADB BR PCVMAP ;PCF COMMAND - PRINT THE PC FLAGS .PCF: TTITRM TST TENRUN ;TEN MUST BE STOPPED WHILE FLAGS ARE GOBBLED BEQ 1$ DFXCTT CLRRUN TDELAY DFXCTT STPCLK JSR PC,PCF DFXCTT STRCLK DFXCTT SETRUN DFXCTT CONBUT BR 2$ 1$: JSR PC,PCF 2$: JMP ALLEX1 ;CRLF AND RETURN TO KONSL PCF: PMSG MOV #PCFTBL,R5 CLR R4 ;R4 ZERO IF THIS IS FIRST FROB TYPED 1$: MOVB (R5)+,R0 ;GET DIAG FUNC FOR NEXT BIT BEQ 9$ ;BR IF END OF TABLE DFRD ;GET BIT INTO DTE REG MOV @.DAT1,R2 ;BITS 0-3 MOV @.DAT2,R1 ;BITS 4-19 .REPT 4 ASL R1 ROL R2 .ENDR ;BITS 0-7 (4.9-4.2) RIGHT ALIGNED IN R2 MOVB (R5)+,R1 ;GET MASK FOR BIT OF INTEREST BPL 2$ COM R2 ;BIT BACKWARDS IN HARDWARE NEG R1 2$: MOV (R5)+,R0 ;GET POINTER TO BIT NAME STRING BIT R1,R2 BEQ 3$ TST R4 ;IF NOT FIRST, PUT A COMMA, SPACE BEQ 4$ PNTCI ", 4$: PNTAL ;BIT IS ON, GIVE NAME INC R4 3$: BR 1$ ;LOOP BACK FOR NEXT BIT 9$: RTS PC ;PC FLAGS TABLE ;FIRST BYTE IS DIAG FCN, SECOND IS MASK FOR BIT (NEGATIVE => BIT COMPLEMENTED) ;SECOND WORD -> ASCIZ BIT NAME .MACRO PCFTE NAME,DFN,MASK .LIT $$ZZQ,<.ASCIZ\NAME\> .BYTE DFN,MASK .WORD $$ZZQ .ENDM PCFTBL: PCFTE OV,131,40 PCFTE CRY0,131,20 PCFTE CRY1,131,10 PCFTE FOV,132,20 PCFTE FPD,130,2 PCFTE USER,134,-40 PCFTE IOTLSR,136,4 PCFTE PUBLIC,135,20 PCFTE ADB INH,137,40 PCFTE TRP 2,130,40 PCFTE TRP 1,130,4 PCFTE FXU,132,10 PCFTE DIV,131,2 0 .FE: TTITRM $ALLFE: PMSGR 1$: MOV #DPFE,R4 BR FESCP .SC: TTITRM $ALLSC: PMSGR 1$: MOV #DPSC,R4 FESCP: DFLEGAL ;FUNCTION LEGAL ? MOV R4,R0 DFRD MOV @.DAT2,R3 ;GET LO-ORDER 5 BITS SWAB R3 ;FROM 7-11 OF DEXWDS BIC #177740,R3 MOV R4,R0 INC R0 DFRD MOV @.DAT2,R0 ;GET HI-ORDER 5 BITS SHIFTR 3 BIC #176037,R0 BIS R3,R0 ;COMBINE HI & LO ORDER BITS TSTB RPTFLG BNE 1$ PNTODT 4 PSPACE 1$: JMP ALLEXT ;PRINT PRIORITY INTERRUPT FUNCTIONS .PI: DFLEGAL ;FUNCTION LEGAL ? TTITRM JSR PC,$ALPIG ;PRINT PI GENS JSR PC,$ALPIH ;PRINT PI HOLDS JSR PC,$ALPIO ;PRINT PI ON'S PCRLF JMP $KONSL $ALPIG: PMSG DFRDT READ1 ;READ PI GENS ;FR 101, BITS 11-17 $ALPIY: MOV @.DAT2,R0 SHIFTR 2 $ALPIX: BIC #177600,R0 ;DATA IS ONLY 7 BITS PNTODT 3 RTS PC $ALPIH: PMSG < PI HOLD/> DFRDT READ0 ;READ PI HOLDS MOV @.DAT2,R0 ;FR 100, BITS 03-09 MOV @.DAT1,R1 ROR R1 ROR R0 SHIFTR 9. BR $ALPIX $ALPIO: PMSG < PI ON/> DFRDT READ0 ;READ PI ONS BR $ALPIY ;FR 100, BITS 11-17 ;PRINT ALL - C-RAM & REGISTERS .ALL: TTICHR BCS 1$ CMPB #'L,R0 BNE 1$ TTITRM DFLEGAL ;FUNCTION LEGAL ? PNTCPU JMP $KONSL 1$: JMP $DFERR ;ERROR $PNTCPU:SETFLG ALLFLG ;SET ALL FLAG PUSH RPTFLG CLR RPTFLG JSR PC,$ALLEC ;PRINT C-RAM JSR PC,$ALLAR ;PRINT AR JSR PC,$ALLBR ;PRINT BR JSR PC,$ALLAD ;PRINT ADDER JSR PC,$ALLSC ;PRINT SC JSR PC,$ALLPC ;PRINT PC PCRLF JSR PC,$ALARX ;PRINT ARX JSR PC,$ALBRX ;PRINT BRX JSR PC,$ALADX ;PRINT ADX JSR PC,$ALLFE ;PRINT FE JSR PC,$ALVMA ;PRINT VMA PCRLF JSR PC,$ALLMQ ;PRINT MQ JSR PC,$ALLFM ;PRINT FM JSR PC,$ALLEB ;PRINT EBUS REGISTER JSR PC,$ALVMH ;PRINT VMA HELD PCRLF ;THESE JUST TAKE UP TIME DURING MICROCODE TRACING, SO HAVE BEEN COMMENTED OUT ; JSR PC,$ALPIG ;PRINT PI GENS ; JSR PC,$ALPIH ;PRINT PI HOLDS ; JSR PC,$ALPIO ;PRINT PI ON'S ; PCRLF POP RPTFLG CLR ALLFLG EXIT .SBTTL PDP-10 START/STOP FUNCTIONS ;THESE REQUIRE STANDARD MICROCODE TO DO ANYTHING WORTHWHILE! ;STOP PDP-10, CLEAR RUN FLOP $SP: TTITRM TENSP ;STOP TEN BCC 1$ JMP .XCTER ;DID NOT STOP PROPERLY 1$: CLR PRGRUN BR $RNX ;HOPE ENOUGH DELAY BUILT IN ;CONTINUE PDP-10 FROM OLD PC. ASSUME CLOCK MAY BE OFF $RN: TTICHR CMPB #'P,R0 BEQ $RNP TTBTRM $RNN: CLR CLKPE ;CLEAR CLOCK PARITY ENABLES MOV #20,R2 MOV PEBITS,R1 ;GET ENABLE BITS BEQ 2$ ;NOT ENABLED BIT R2,R1 ;AR/ARX PARITY ENABLED ? BEQ 1$ ;NO BIS #2,CLKPE ;YES, SET ENABLE BIT 1$: BIS #1,CLKPE ;SET CLOCK STOP ENABLE 2$: DFWRTT CLKPE LDCHK2 ;LOAD ENABLE FUNCTION REGISTER 3$: BIC R2,R1 MOV R1,CLKPE ;SETUP FM,CRAM,DRAM, FS DFWRTT CLKPE LDCHK1 ;LOAD CONDITION ENABLE REGISTER DFXCTT ;GET CLOCK RUNNING STRCLK DFXCTT ;SET RUN AND LET 'ER GO SETRUN DFXCTT ;SET CONTINUE BUTTON CONBUT SETFLG TENRUN ;SET TEN RUN FLAG SETFLG PRGRUN ;SET PROGRAM RUNNING FLAG $RNX: JMP $KONSL $RNP: TTITRM ;RUN WITH MICRO TRACE DFXCTT ;STOP CLOCK SO WON'T RUN UNTIL WE'RE READY STPCLK DFXCTT ;SET RUN AND LET 'ER GO SETRUN JMP SIPNT ;PUSH CONTINUE & START TRACING ;START PDP-10 DDT $DDTX: TTISDL BCS 1$ ;NON-NUMBER JMP $DD ;NUMBER, MUST BE FOR D-RAM 1$: CMPB #'T,R0 BEQ 2$ ;"DDT", START PDP-10 AT "DDTSRT" JMP $DFERR 2$: TTITRM MOV TDDT,$$STJRS ;SET UP JRST INSTRUCTION MOVB TDDT+2,$$STJRS+2 ;I WISH THE HARDWARE PROVIDED AND EASY WAY TO CLEAR "USER" ;MAYBE WE SHOULD PUT A SPECIAL JRST IN THE MICRCODE? ;INSTEAD, A WARNING: DFRDT 134 BIT #2,@.DAT1 BNE 3$ PMSG JMP $CNTLC 3$: CLR TENTTY MOV #$$STJRS,R0 EXCT ;DO JRST TO DDT START ADDRESS BCC $RNN ;AND GO SAY -10 IS RUNNING $DDTER: JMP .XCTER ;OR BARF IF UCODE HUNG ;SINGLE INSTRUCT PDP-10. ASSUME CLOCK IS RUNNING AND RUN IS SET $SI: TENSP ;STOP TEN BCS $DDTER ;DID NOT STOP PROPERLY, BARF CLR R5 TTISDL BCS 4$ ;NON-NUMBER TTIDEC BCS 2$ ;NO ARG, DO ONCE MOV R0,R5 2$: DFXCTT ;PRESS CONTINUE PULSER CONBUT TDELAY ;SMALL TIME DELAY DEC R5 ;COMPLETED REQUESTED INSTRUCTIONS ? BGT 2$ JMP $KONSL ;YES, RETURN TO CONSOLE 4$: CMPB #'P,R0 BNE 2$ 5$: TTITRM ;"SIP",SINGLE INSTRUCT AND PRINT DFXCTT ;STOP CLOCK STPCLK JMP SIPNT ;REST SAME AS LAST OF "EXP" ;DIAGNOSTIC FUNCTION LEGALITY CHECK $DFLEGAL:TST TENRUN ;PDP-10 PRESENTLY RUNNING ? BNE 1$ ;YES, OPERATION ILLEGAL, ABORT EXIT 1$: PMSG JMP $$$CC ;PULSE THE E-BOX CLOCK .PL: DFLEGAL ;FUNCTION LEGAL ? CLR TENCLK ;TURN OFF CLOCK IF ON TTISDL BCS 1$ ;NO ARG, DO ONCE TTIDEC BCS 1$ ;DO ONCE ANYWAY MOV R0,R1 ;SAVE PULSE COUNT BR 2$ 1$: CLR R1 2$: ECLOK BCC 3$ JSR R1,$ECTIM 3$: DEC R1 ;DONE REQUESTED CLOCKS ? BGT 2$ ;NOT YET .PLX: JMP $KONSL ;START MICROCODE IDLE. ;SUPPORT EXAMINE, DEPOSIT, AND EXECUTE OPERATIONS. .SM: TTITRM SM ;DO THE EMT BCS .XCTER BR .PLX ;CACHE INVALIDATE .CI: MOV #$$CI,R0 .CIF: TTITRM DFLEGAL ;FUNCTION LEGAL ? EXCT BCS .XCTER ;FAILED BR .PLX ;OK, RETURN TO CONSOLE ;CACHE FLUSH .CF: MOV #$$CF,R0 BR .CIF $$CI: IO10 DATAI,CCA,,0 ;INVALIDATE WITHOUT CORE UPDATE $$CF: IO10 BLKO,CCA,,0 ;SWEEP CACHE, VALIDATING CORE .EVEN ;EXECUTE A PDP10 INSTRUCTION. .XCT: TENSP ;STOP TEN BCS .XCTER ;DID NOT STOP PROPERLY TTISDL BCS 1$ ;NON-NUMBER TTIS36 EXCT BCS .XCTER BR .XCT2 1$: CMPB #'P,R0 ;"EXP" = EXECUTE & PRINT BNE .XCT1 TTIS36 LODAR ;LOAD INTO AR BCS .XCTER SIPNT=. PNORML DFXCTT ;SET CONTINUE BUTTON CONBUT 2$: ECLOK ;CLOCK TO GET STARTED BCC 3$ JSR R1,$ECTIM 3$: BIT #HALTLP,@.DIAG1 BNE 2$ ;TILL WE LEAVE HALT LOOP PNTCPU ;PRINT C-RAM & REGISTERS 4$: ECLOK ;CLOCK BCC 5$ JSR R1,$ECTIM 5$: PNTCPU ;& PRINT TILL BACK TO HALT LOOP BIT #HALTLP,@.DIAG1 BEQ 4$ .XCT2: JMP $KONSL .XCT1: CMPB #'T,R0 ;"EXT" = EXECUTE & TRACE SETUP BNE .CNSER TTIS36 LODAR ;LOAD INTO AR BCS .XCTER DFXCTT ;SET CONTINUE BUTTON CONBUT BR .XCT2 .XCTER: PMSG JMP $CNTLC .CNSER: JMP $DFERR ;BURST THE KL10 CLOCK .BU: DFLEGAL ;FUNCTION LEGAL ? CLR TENCLK ;TURN OFF CLOCKK IF ON TTISDL BCS 2$ ;NO ARG, DO ONCE TTIDEC BCS 2$ ;DO ONCE ANYWAY 1$: BURST ;PERFORM BURST BR .XCT2 2$: MOV #1,R0 ;DO ONE BURST BR 1$ ;SELECT CLOCK SOURCE .CS: TTISDL BCC 1$ MOV CLKDFL,R0 SR R0,2 .CSR=. BIC #177774,R0 PNTNBR PCRLF JMP $CONSL 1$: TTISDO CMP R0,#2 BGT .CSRER SHIFTL 2 BIC #14,CLKDFL ;CLEAR OLD SOURCE .CCMN1: BIS R0,CLKDFL ;SET NEW SOURCE .CCMN: DFLEGAL ;FUNCTION LEGAL ? TST TENRUN BEQ 1$ TENSP ;STOP TEN BCS .XCTER ;DID NOT STOP PROPERLY 1$: DFWRTT ;WRITE TO CLOCK CLKDFL LDSEL JMP $KONSL .CSRER: JMP $PARA ;SELECT CLOCK RATE .CR: TTISDL BCC 1$ MOV CLKDFL,R0 BR .CSR 1$: TTISDO CMP R0,#3 BGT .CSRER BIC #3,CLKDFL ;CLEAR OLD RATE BR .CCMN1 ;PROCESSOR PARITY DISABLE .PD: TTITRM CLR PEBITS ;CLEAR PARITY ENABLE BITS JMP $CONSL ;PARITY ENABLED AND CLOCK ERROR STOP MESSAGES $PEAR: .ASCIZ %, AR/ARX% $PEFM: .ASCIZ %, FM PARITY% $PECR: .ASCIZ %, CRAM PARITY% $PEDR: .ASCIZ %, DRAM PARITY% $PEFS: .ASCIZ %, FS PROBE% .EVEN ;PROCESSOR PARITY ENABLE ;PARITY ENABLE BITS ARE CODED AS FOLLOWS: ; AR/ARX, FM, CRAM, DRAM, FS ; 0 = PARITY DISABLED ; 37 WOULD = ALL ENABLED .PE: TTISDL BCC 1$ 20$: PMSG MOV PEBITS,R1 ;PRINT PARITY ENABLE BITS MOV R1,R0 PNTODT 2 10$: BIT #20,R1 BEQ 11$ $PMSG $PEAR ;AR/ARX PAGE FAIL 11$: BIT #10,R1 BEQ 12$ $PMSG $PEFM ;FM PARITY 12$: BIT #4,R1 BEQ 13$ $PMSG $PECR ;CRAM PARITY 13$: BIT #2,R1 BEQ 14$ $PMSG $PEDR ;DRAM PARITY 14$: BIT #1,R1 BEQ 15$ $PMSG $PEFS ;FS PROBE 15$: PCRLF 3$: JMP $CONSL 1$: TTISDO CMP R0,#37 BGT .CSRER MOV R0,PEBITS ;SAVE BR 20$ ;MICRO-CODE SYNC MARK ROUTINES .MU: MOV #-1,R5 ;MICRO UNMARK BR .MMC .MM: CLR R5 ;MICRO MARK .MMC: DFLEGAL ;FUNCTION LEGAL ? TTICRA ;GET C-RAM ADDRESS MOV R0,$ECADR RCRAM ;READ C-RAM TST R5 BNE 3$ BIS #20,4(R0) ;SET MARK BIT BR .MMX 3$: BIC #20,4(R0) ;CLEAR MARK BIT .MMX: MOV R0,R1 MOV $ECADR,R0 WCRAM ;WRITE C-RAM BACK JMP $KONSL ;MICRO-CODE TIME FIELD CHANGE ROUTINE .MT: DFLEGAL ;FUNCTION LEGAL ? TTICRA MOV R0,$ECADR TTISDO CMP R0,#3 ;TIME FIELD IS 0-3 BGT .CSRER MOV R0,R5 MOV $ECADR,R0 RCRAM ;READ C-RAM BIC #12,(R0) ;CLEAR OLD TIME CLR R4 BIT #2,R5 BEQ 1$ BIS #10,R4 1$: BIT #1,R5 BEQ 2$ BIS #2,R4 2$: BIS R4,(R0) ;SET NEW TIME BR .MMX ;CACHE ENABLE ;CACHE ENABLE BITS ARE CODED AS FOLLOWS: ; 10 = CACHE 0 ; 4 = CACHE 1 ; 2 = CACHE 2 ; 1 = CACHE 3 ; 17 WOULD = ALL CACHES ENABLED .CE: TTISDL ;GET ENABLE CODE BCS 20$ ;CR, PRINT ENABLE 1$: TTISDO CMP R0,#17 ;ENABLE IS 0 TO 17 BGT 2$ MOV R0,CLKDFL+4 ;PUT IN CLOCK DEFAULT PARAMETER WORD BR 20$ 2$: JMP $PARAM 20$: PMSG MOV CLKDFL+4,R1 MOV R1,R0 PNTODT ;PRINT CODE 2 21$: CLR R2 BIT #10,R1 ;CACHE 0 ENABLED ? BEQ 22$ JSR PC,.CEP 22$: INC R2 BIT #4,R1 ;CACHE 1 ENABLED ? BEQ 23$ JSR PC,.CEP 23$: INC R2 BIT #2,R1 ;CACHE 2 ENABLED ? BEQ 24$ JSR PC,.CEP 24$: INC R2 BIT #1,R1 ;CACHE 3 ENABLED ? BEQ 25$ JSR PC,.CEP 25$: PCRLF JMP $CONSL .CEP: PMSG <, CACHE > MOV R2,R0 PNTNBR ;PRINT CACHE ENABLE DIGIT RTS PC ;AC BLOCK SELECTION ;SETS UP "PAGDFL" WORD USED BY "DATAO PAG,0" ;DURING "STD,STM,STL & DDT" START COMMANDS ;SAME "PAGDFL" WORD USED BY "DATAO PAG,20" ;DURING AC BLOCK SELECTION COMMAND .AC: DFLEGAL MOV #PAGDFL+2,R5 TTISDL ;ALLOW FOR "ACBLK" OR "AC BLK" BCC 5$ ;NUMBER CMPB #'B,R0 BNE 5$ TTICHR CMPB #'L,R0 BNE 5$ TTICHR CMPB #'K,R0 BNE 5$ TTISDL ;ANY NUMBER ? BCS 4$ ;NO, PRINT PRESENT SELECTION TTISDO ;GET SELECTION DIGIT CMP R0,#7 ;MUST BE 0 TO 7 BGT 5$ BEQ 3$ ;IF BLK #7, GIVE UCODE WARNING 1$: PUSH R0 PMSG MOV (R5),R0 SHIFTR 11. PNTNBR PNTCI ", POP R0 SHIFTL ;PLACE SELECTION DIGIT IN BITS 6-8 11. BIC #034000,(R5) BIS R0,(R5) ;INSERT IN PAGE DEFAULT WORD 4$: PMSG MOV (R5),R0 ;PRINT PRESENT AC BLOCK SELECTION SHIFTR 11. PNTNBR PCRLF EXAMT ;SAVE MEM LOCATION 20 20 $SAV20 BCS 6$ DPOSVT ;PUT DATAO PAG ARGUMENT IN 20 20 PAGDFL BCS 6$ MOV #DATPAG,R0 EXCT ;EXECUTE DATAO PAG BCS 6$ DPOSVT ;RESTORE 20 20 $SAV20 BCS 6$ JMP $CONSL 3$: PUSH R0 PMSG POP R0 BR 1$ 6$: PMSG JMP $CNTLC 5$: JMP $PARAM ;ERROR DATPAG: IO10 DATAO,PAG,,20 ;SELECT AC BLOCK .EVEN ;START PDP10 AT ADDRESS SPECIFIED AS LOWER 18 BITS OF 36-BIT ARGUMENT. $ST: TTISDL BCS 4$ ;NON-NUMBER TTIS36 ;READ ADDRESS, LEAVE R0 POINTING AT IT $$ST=. CLR R5 5$: MOV #$$STJRS,R1 ;STUFF ADDRESS INTO JRST MOVB (R0)+,(R1)+ MOVB (R0)+,(R1)+ BICB #3,(R1) BISB (R0),(R1) ;DO LAST TWO BITS 3$: TST R5 ;ADDRESS START ? BNE 31$ ;NO, PERFORM FULL SYSTEM RESET BR 11$ ;YES, JUST DO JRST 1$: PUSH R0 EXCT ;EXECUTE A TEN INSTR BCS $STERR POP R0 ADD #5,R0 DEC R1 BNE 1$ ;DO ANOTHER JSR PC,$TI36C ;ZERO SELECTED AC BLOCK MOV #$DRAM,R1 MOV #16.,R0 ;FROM AC0 TO AC17 D10ZRO ;NECESSARY FOR FM PARITY BCS $STERR 11$: MOV #$$STJRS,R0 EXCT ;EXECUTE JRST TO START ADR BCS $STERR CLR TENTTY ;TURN OFF "TENCHR" ROUTINE JSR PC,$CMCLR ;CLEAR COMMON STORAGE MOV #100.,$ENDCT ;REPORT EOP EVERY 100 JMP $RNN 31$: SM ;START MACHINE BCS $STERR DPOSVT ;DEPOSIT "DATAO PAG,0" ARGUMENT 0 ;IN AC0, SELECTS CURRENT AC USAGE PAGDFL BCS $STERR SETFLG ;SET TEN RUN FLAG TENRUN TENSW ;DEPOSIT PDP-10 SWITCHES BCC 32$ JMP C10SWE ;SWITCH ERROR 32$: MOV #4.,R1 MOV #$STTB1,R0 BR 1$ 4$: CMPB #'D,R0 ;IF "STD", START 10 DIAGNOSTIC BNE 6$ MOV #TDIAG,R0 7$: TTITRM $$$ST=. MOV #-1,R5 BR 5$ 6$: CMPB #'L,R0 ;IF "STL", START PDP-10 LOADER BNE 8$ MOV #TLDR,R0 BR 7$ 8$: CMPB #'M,R0 ;IF "STM", START PDP-10 MONITOR BNE 11$ MOV #TMON,R0 ;IF NONE, START AT LAST START ADR BR 7$ $STERR: JMP .XCTER $STTB1: IO10 CONO,APR,,267760 ;RESET APR IO10 CONO,PI,,10000 ;PI SYSTEM CLEAR IO10 CONO,PAG,,0 ;PAGING SYSTEM CLEAR IO10 DATAO,PAG,,0 ;USER BASE CLEAR & AC SELECT .EVEN .CNERR: JMP $PARA .SBTTL PDP-10 DEPOSIT AND EXAMINE CONSOLE FUNCTIONS .DP: MOV #.DPXAD,R5 TTISDL BCS .DPS TTIS36 MOV (R0)+,(R5)+ ;LOW ADDRESS MOV (R0),(R5) ;HIGH ADDRESS .DPNX1: TST -(R5) .DPCOM: TTIS36 ;GET DATA MOV R5,R1 ;PTR TO ADR JSR PC,$TENRN DPOS ;DO IT BCS 1$ JMP $KONSL 1$: PMSG JSR R1,$DFTM1 .DPNX: MOV #.DPXAD,R5 ADD #1,(R5)+ ;BUMP LOW ADC (R5) ;CARRY TO HIGH BR .DPNX1 .DPS: BVS .DPCOM ;COLON, USE PRESENT ADDRESS BR .CNERR $TENRN: BIT #ERRSTP,@.DIAG1 ;TEN CLOCK RUNNING ? BEQ 1$ ;YES, OK JMP TENCERR ;NO, REPORT IT 1$: RTS PC ;MEMORY ZERO ; "MZ ADR,COUNT" .MZ: DFLEGAL ;FUNCTION LEGAL ? TTIS36 ;INPUT PDP-10 START ADDRESS MOV $DRAM,MMDAT ;SAVE IT MOV $DRAM+2,MMDAT+2 MOV #MMDAT,R1 ;POINTER FOR D10ZRO TTIS36 ;INPUT NUMBER OF PDP-10 WORDS BCS 1$ MOV $DRAM+2,R2 ;PICK UP NUMBER OF 64K MOBIES BEQ 2$ BPL 4$ MOV #XMEMSZ/64.,R2 ;MZ 0,-1. DON'T TRY TO CLEAR CLR $DRAM ; 4096 MILLION WORDS. 4$: CLR R0 ;CLEAR ONE SMALL MOBY D10ZRO BCS 3$ JSR PC,$TIRDY ;ALLOW ^C IN THIS SLOW LOOP BCS 69$ CMPB $TICHR,#CNTRLC BNE 69$ JMP $TICC ;^C, ABORT 69$: INC MMDAT+2 ;BUMP ADDRESS DEC R2 BGT 4$ 2$: MOV $DRAM,R0 ;CLEAR FINAL FRACTIONAL MOBY BEQ 5$ ;EXACT MULTIPLE OF 64K D10ZRO ;ZERO MEMORY BCS 3$ 5$: JMP $KONSL 1$: MOV #1,$DRAM ;NO COUNT SPECIFIED BR 2$ ;SO CLEAR ONE WORD 3$: PMSG JSR R1,$DFTM1 .EXM: MOV #.DPXAD,R5 CLR R3 TTISDL BCS .EXMSP ;NON-NUMBER TTIS36 ;GET PDP-10 ADDRESS MOV (R0)+,(R5)+ ;SAVE LOW 16 BITS MOV (R0),(R5) ;SAVE HIGH BITS TST -(R5) TTIBRK ;GET BREAK BCS .CNERR CMPB #',,R0 BNE .EXCOM COM R3 ;COMMA, MULTIPLE PRINT PNORML TTIS36 ;GET ENDING ADDRESS MOV (R0),R4 ;SAVE LOW 16 BITS .EXCOM: MOV R5,R0 JSR PC,$TENRN EXAM BCS 3$ 5$: TSTB RPTFLG BNE 1$ MOV R5,R0 PNTADR PNTBAK ;BACKUP POINTER TO WIPE OUT SPACE PSLASH MOV #$DRAM,R0 PNT36 TST R3 ;DOING MULTIPLE PRINT ? BEQ 2$ PCRLF CMP (R5),R4 BEQ 2$ INC (R5) ;INCREMENT LOW 16 BITS, 64K BR .EXCOM ;DO NEXT ADDRESS 2$: PCRLF 1$: JMP $KONSL 3$: BMI 4$ PMSG JSR R1,$DFTM1 4$: $PMSGR $EBPAR ;E-BUS PARITY ERROR BR 5$ .EXMSP: BVS .EXMNX ;COLON OR SLASH, EXAMINE NEXT BNE .EXCOM ;NONE, EXAMINE SAME SUB #1,(R5)+ ;UPARROW, EXAMINE PREVIOUS SBC (R5) BR .EXMN1 .EXMNX: MOV #.DPXAD,R5 ADD #1,(R5)+ ADC (R5) .EXMN1: INC $INPTC CLR R3 TST -(R5) BR .EXCOM .SBTTL CONSOLE IDLE RUN LOOP ;PROVIDES PDP-10 SUPPORT WHEN "TENRUN" SET ;AND ADDITIONALY PDP-10 MONITOR SUPPORT IF "MONMODE" SET $RUNLP: TSTB TENRUN ;PDP-10 RUN TIME SUPPORT ? BNE 1$ JMP $TTILIN ;NO, CONSOLE COMMAND INPUT 1$: CLR DDTTM2 ;SETUP DDT MODE TIMEOUT ;LOOPS BACK TO HERE IF NOTHING TO DO. 2$: TST ITSFLG ;USING I.T.S. IO-ELEVEN PROGRAM? BEQ 11$ ;NO, USE D.E.C. STUFF JSR PC,ITSCHK ;YES, MAKE SURE IT'S STILL IN CORE JSR PC,@#3000 ;IT IS, CALL IT BCS MTTYI0 ;RETURNS WITH CARRY SET => TEMPORARY KLDCP CMD MODE. ;OTHERWISE, PROBABLY 10 HALTED. CHECK IT OUT. 11$: BIT #KLRUN,@.DIAG1 BNE 3$ JMP TENDEAD ;PDP-10 HALTED 3$: BIT #ERRSTP,@.DIAG1 ;PDP-10 CLOCK ERROR STOP ? BEQ 31$ JMP TENCERR ;YES, REPORT 31$: BIT #TO11DB,@.STDTE BNE TENCMD ;PDP-10 REQUESTED SERVICE 4$: JSR PC,C10COP ;PERFORM CLOCK OPERATIONS 5$: TST MONMODE ;MONITOR SUPPORT MODE ? BEQ 20$ ;NO 6$: JSR PC,$TIRDY ;TTY INPUT FLAG SET ? BCC MTTYIN ;YES, SEND CHAR TO 10 7$: TST MTTYOF ;TTY OUTPUT IN PROGRESS ? BEQ 2$ ;NO 8$: JSR PC,$TORDY ;TTY OUTPUT COMPLETED ? BCC MTTYOC ;YES, NOTIFY 10 BR 2$ ;STAY IN MONITOR LOOP 20$: TST DDTFLG ;PDP-10 DDT INPUT MODE ? BEQ 21$ ;NO 23$: DEC DDTTM2 ;WAITED LONG ENOUGH ? BNE 2$ ;NOT YET CLR DDTFLG ;YES, REVERT TO CONSOLE MODE 21$: JSR PC,$TIRDY ;ANY TTY INPUT YET ? BCS 2$ ;NO, STAY IN RUN LOOP JMP $TILRN ;YES, GO INPUT ;MONITOR TELETYPE CHARACTER INPUT MTTYIN: MOVB $TICHR,R0 ;GET INPUT CHAR CMPB R0,#MSWCHR ;MONITOR TO "KLDCP" SWITCH CHAR ? BNE MTTYI1 MTTYI0: PMSG <\KLDCP\. _> ;PROMPT FOR TEMPORARY KLDCP MODE JMP $TTILIN ;AND READ ONE KLDCP COMMAND LINE MTTYI1: MOV R0,TENDAT DPOSVT ;SEND CHAR TO TEN $DTF11 TENDAT BCS MTTYER ;FAILED D10MON ;SET -1 TO 10 TTY INPUT FLAG $DTMTI BCS MTTYER C10DN1: MOV #INT10S,@.STDTE ;DING TEN BR $RUNLP MTTYER: JMP C10TIE ;MONITOR TELETYPE OUTPUT COMPLETE MTTYOC: D10MON ;SET -1 TO 10 TTY OUTPUT DONE FLAG $DTMTD BCS MTTYER CLR MTTYOF ;CLEAR OUTPUT IN PROGRESS BR C10DN1 ;CAUSE DTE20 INTERRUPT ;MONITOR TELETYPE OUTPUT ROUTINE MTTYO: MOV R5,R0 ;GET OUTPUT CHAR BIC #177400,R0 ;STRIP TO 8 BITS, 10 DOES PARITY MOVB R0,$TOCHR ;PRINT CHAR JSR PC,$TOOUT SETFLG MTTYOF ;SET OUTPUT IN PROGRESS FLAG MTTYX: BR C10DON ;ALLOW 10 TO CONTINUE ;MONITOR MODE CONTROL MTTYC: SETFLG ;SET MONMODE BR MTTYX MTTYCF: CLR MONMODE ;CLEAR BR MTTYX $MC: SETFLG ;CONSOLE MONITOR CONTINUE MONMODE JMP $CONSL MTTYS: MOV MONMODE,R0 ;SEND 10 MONITOR TTY STATE JMP C10TIX .SBTTL PDP-10 RUN TIME SUPPORT TENCMD: EXAMT ;GET COMMAND CODE $DTCMD $ECMD BCC 1$ BPL 2$ ;EXAMINE FAILED $PMSG $EBPAR ;E-BUS PARITY ERROR 2$: BR C10DNX 1$: MOV $ECMD,R5 MOV R5,R1 SWAB R1 BIC #177760,R1 SL R1,1 JMP @CMD10T(R1) ;DISPATCH TO ROUTINE CMD10T: C10TO ;TTY OUT C10PRG ;PROGRAM CONTROL C10CLK ;CLOCK C10SW ;SWITCHES C10TO ;TTY OUT C10TI ;TTY IN C10PNT ;PRINT CONTROL C10DDT ;DDT INPUT MODE MTTYO ;MONITOR TTY OUTPUT MTTYC ;MONITOR TTY MODE CONTROL ON MTTYCF ;MONITOR TTY MODE CONTROL OFF MTTYS ;MONITOR TTY STATE C10DNX ;14-17 UNUSED NOW C10DNX C10DNX C10DNX C10DON: MOV #INT11C,@.STDTE ;CLEAR DONG D10MON ;SET -1 TO 10 "$DTFLG" $DTFLG ;DTE20 OPERATION COMPLETE FLAG BCS C10DNX JMP $RUNLP ;WAIT FOR NEXT COMMAND C10DNX: CLR TENRUN PMSG BR $$TDX TENCERR:CLR TENRUN CLR KLCLKR ;CLEAR TEN RUNNING PFORCE PMSG <\KL10 CLOCK ERROR STOP> DFRDT 106 BIT #BIT5,@.DAT3 ;FIELD SERVICE ? BEQ 1$ $PMSG $PEFS ;FS PROBE 1$: DFRDT 105 BIT #BIT5,@.DAT3 ;FM PARITY ? BEQ 2$ $PMSG $PEFM ;FM PARITY 2$: DFRDT 104 BIT #BIT5,@.DAT3 ;CRAM PARITY ? BEQ 3$ $PMSG $PECR ;CRAM PARITY 3$: DFRDT 103 BIT #BIT5,@.DAT3 ;DRAM PARITY ? BEQ 4$ $PMSG $PEDR ;DRAM PARITY 4$: PNTCPU ;PRINT ALL CPU INFORMATION BR $$TDX TENDEAD: CLR TENRUN ;CLEAR TEN RUN FLAG PFORCE PMSG <\KL10 HALTED > SETFLG ALLFLG JSR PC,$ALLPC JSR PC,$ALVMA .IF DF MBYHLT PCRLF MOV #111,R0 ;GET APR FM BLOCK 1,2,4 (BITS 4.1-4.3) ;ALSO 3.7-3.9 GET PREV AC BLOCK MOV #$DRAM,R1 ;INTO $DRAM (HANDY BUFFER) DFRDMV MOVB $DRAM+3,R0 ;BITS 4-11 BIC #-100,R0 ;GET JUST CURRENT*8+PREVIOUS PUSH R0 ;SAVE SELECTED BLOCK PMSG MOV #-1,R0 PRGCMD BCS $$TDX PMSG MOV #-1,R0 PRGCMD PMSG POP R0 MOVB R0,PAGDFL+3 ;STORE INTO PAGE DEFAULT WORD ASR R0 ; SO PREVIOUS BLOCK GETS RESTORED ASR R0 ;THEN EXTRACT CURRENT BLOCK ASR R0 PNTOCS ;NOW DO AC BLK N COMMAND PCRLF MOV #-1,R0 PRGCMD .ENDC ;MBYHLT $$TDX: PCRLF ;TEN BLEW UP (FELL FLAT?) MOV #7,R5 ;((WAS MOWED DOWN BY A FELL FLAT DISK?)) 1$: PBELL ;GO FEEP FEEP FEEP FEEP FEEP CLR R0 3$: DEC R0 BNE 3$ DEC R5 BNE 1$ JMP $CONSL C10TO: SETFLG TENTTY ;ALLOW "TENCHR" TO OPERATE MOV #$TNBUF,$TNPTC ;RESET 10 INPUT POINTERS MOV #$TNBUF,$TNPTR MOV R5,R1 ;GET ASCII CHAR PLDBUF ;PUT IN TTY OUT BUFFER C10DNJ: BR C10DON C10TI: CLR DDTFLG CMP #$OUTBF,$OUTPT ;ANY OUTPUT WAITING ? BNE C10TIZ ;YES 11$: CMP $TNPTC,$TNPTR ;CURRENT BUFFER EMPTY ? BGE C10TIZ ;YES MOV $TNPTC,R1 ;GET CHAR POINTER MOVB (R1)+,R0 ;FETCH CHAR FROM 10 BUFFER MOV R1,$TNPTC C10TIX: MOV R0,TENDAT ;PUT CHAR IN 28-35 OF TEN WORD DPOSVT ;DEPOSIT IN FROM 11 WORD $DTF11 TENDAT BCC C10DNJ C10TIE: PMSG BR $$TDX C10TIZ: TTILIN ;INPUT LINE FOR TEN BCS 5$ ;NO RESPONSE MOV #$TNBUF,R1 3$: TTICHR ;GET CHAR FROM INPUT BCS 4$ ;EMPTY MOVB R0,(R1)+ ;PUT IN TEN BUFFER BR 3$ 4$: MOV R1,$TNPTR ;UPDATE 10 EOL POINTER MOV #$TNBUF,$TNPTC ;SET PICKUP POINTER TO START BR C10TI ;GO SEND FIRST CHAR TO TEN 5$: CLR R0 ;NULL = TIMEOUT BR C10TIX C10PNT: MOV R5,R1 ;GET CONTROL BYTE BIC #177400,R1 MOV R1,$FORCE ;PUT IN FORCE FLAG CLR DDTFLG ;CLEAR DDT MODE C10X: JMP C10DON C10SW: DPOSVT ;LOAD SWITCHES INTO FROM 11 WORD $DTF11 SWS10 BCC C10X C10SWE: PMSG BR $$TDX $SW: MOV #SWS10,R5 TTISDL BCS 1$ ;NON-NUMBER, TYPE PRESENT TTIS36 MOV (R0)+,(R5)+ ;PUT IN SWITCH WORD MOV (R0),(R5) 2$: TENSW ;DO PDP-10 SWITCHES BCS C10SWE ;ERROR JMP $KONSL 1$: PFORCE MOV R5,R0 ;PRINT CURRENT SWITCHES PNT36 PCRLF BR 2$ C10DDT: SETFLG DDTFLG ;SET FOR DDT MODE INPUT PFORCE ;SET FORCED PRINTOUT CMP #$OUTBF,$OUTPT ;ANY OUTPUT WAITING ? BEQ 2$ ;NO SETFLG $TTLKF ;PREVENT INPUT CHECKS PRINTT ;YES, PRINT IT 2$: TTLOOK ;GET INPUT CHAR BCS 3$ ;NOTHING THERE, SEND ZERO 3$: CMPB R0,#MSWCHR BEQ 4$ ;BREAK => RETURN TO KLDCP CMPB R0,#CNTRLX ;CONTROL X, NEXT LINE IS CONSOLE CMD BNE C10TIX PNTCI "^X JMP $TTILIN 4$: JMP MTTYI0 C10PRG: MOV R5,R1 ;GET CONTROL FIELD BIC #177760,R1 SL R1,1 JMP @C10PT(R1) ;DISPATCH C10PT: TENDEAD ;HALT C10P1 ;FATAL C10P2 ;ERROR HALT C10P3 ;END OF PROGRAM C10P4 ;END OF PASS C10P5 ;GIVE PDP-10 CLOCK DEFAULT WORD DIASEL ;"DIAMON" FILE SELECTION DIARD ;"DIAMON" FILE READ P10CMD ;PDP-10 PROGRAM COMMAND C10DNX C10DNX C10DNX C10DNX C10DNX C10DNX C10DNX C10P2: CLRB TENRUN C10P1: CLR TENCLK C10X1: BR C10X C10P3: CLRB TENRUN ;TURN OFF TEN RUNNING ERREOP ;END OF PROGRAM C10P4: EOP BR C10X C10P5: DPOSVT $DTF11 CLKDFL BCS C10CER BR C10CX C10CLK: MOV R5,R1 BIC #177774,R1 SL R1,1 JMP @C10CPT(R1) C10CPT: C10C0 ;DISABLE C10C1 ;ENABLE C10C2 ;ENABLE & WAIT C10C3 ;READ PDP-10 CLOCK COUNT C10C0: CLR TENCLK C10CX: BR C10X1 C10C3: DPOSVT ;LOAD CLOCK COUNT INTO FROM 11 WORD $DTF11 CLKCNT BCS C10CER ;ERROR BR C10CX C10C1: SETFLG TENCLK C10CX1: BIC #200,KWLKS 1$: TSTB KWLKS ;WAIT FOR CLOCK BPL 1$ ;THEN CLEAR TO ALLOW FOR BIC #200,KWLKS ;16MS BEFORE 1ST CLOCK MOV #CLKCNT,R0 ;INIT CLOCK COUNTER CLR (R0)+ CLR (R0)+ CLR (R0) BR C10CX C10C2: EXAMT ;GET WAIT COUNT FROM TO 11 WORD $DTT11 C10CW BCS C10CER MOV #177400,TENCLK BR C10CX1 C10COP: TSTB KWLKS ;CLOCK FLAG SET ? BPL 1$ ;NO, RETURN BIC #200,KWLKS ;CLEAR FLAG INC $TTYTIM ;COUNT TTY TIMER CMP SWR,$$SWR ;PDP-11 CONSOLE SWITCHES CHANGED ? BEQ 3$ ;NO PUSH R0 TENSW ;YES, DO PDP-10 SWITCHES BCS C10CER ;ERROR POP R0 3$: TSTB TENRUN ;IS 10 RUNNING ? BEQ 1$ ;NO TST TENCLK BEQ 1$ ;CLOCK NOT ENABLED ADD #1,CLKCNT ;INCREMENT PDP-10 CLOCK COUNT ADC CLKCNT+2 ADC CLKCNT+4 TSTB TENCLK ;DOING WAIT ? BNE 2$ ;NO CMP CLKCNT,C10CW ;WAITED LONG ENOUGH ? BNE 1$ ;NOT YET 2$: PUSH D10MON ;SET -1 TO 10 "$DTCLK" $DTCLK BCS C10CER MOV #INT10S,@.STDTE ;DING TEN POP 1$: RTS PC C10CER: CLR TENCLK PMSG JMP $$TDX ;PDP-10 SWITCH REGISTER $TENSW: MOV SWR,$$SWR ;GET PDP-11 SWITCHES MOV $$SWR,$SWS10+2 MOV #$SWS10,R1 ;POSITION FOR 0 TO 15 OF MOV #4,R3 ;PDP-10 SWITCH REGISTER PROL36 MOV #$SWS10+2,R4 MOV #SWS10+2,R5 BIC #17,(R4) ;CLEAR 16-19 FROM NEW BIC #177760,(R5) ;CLEAR 4-15 FROM OLD BIS (R4)+,(R5)+ ;INSERT BITS 4-15 BIC #177760,(R4) ;CLEAR HI JUNK FROM NEW BIC #17,(R5) ;CLEAR 0-3 FROM OLD BIS (R4),(R5) ;INSERT BITS 0-3 TSTB TENRUN ;PDP-10 RUNNING ? BEQ 1$ ;NO DPOSVT ;DEPOSIT PDP-10 SWITCH REGISTER $DTSWR ;IN DTE20 COMM AREA SWS10 BCS 2$ ;ERROR $TCX=. 1$: EXIT 2$: EXITERR ;RETURN ;PDP-10 LAST TYPED CHARACTER ROUTINE $TENCHR:TSTB TENRUN ;PDP-10 RUNNING ? BEQ $TCX ;NO TST TENTTY ;TTY DEPOSIT ALLOWED ? BEQ $TCX ;NO PUSH R0 DPOST ;YES, SEND LAST TYPED CHAR $DTCHR $TNCHR POP R0 BR $TCX ;DON'T CARE IF FAILED .SBTTL PDP-10 PROGRAM COMMAND P10CMD: MOV #-1,R0 ;USE OUTPUT BUFFER PRGCMD ;& PROGRAM COMMAND BCS DIANF ;C-BIT SET, ERROR BR DIAFND ;PASSED .SBTTL "DIAMON" FILE SELECTION AND READ ROUTINES DIASEL: MOV #$INBUF,R1 ;PUT "P" & "SPACE" FIRST MOV #"P ,(R1)+ ;IN CASE ACT10 LOAD MOV #$OUTBF,R0 ;TRANSFER "DIAMON" FILE.EXT MOV R0,$OUTPT ;TO INPUT BUFFER JSR PC,$DIASX MOV #$INBUF+2,$INPTC ;SET PICKUP POINTER NAMEXT ;SETUP FILE NAME.EXT SETFLG LDCNTL ;SET LOAD CONTROL TO HELP SETFLG DIAFLG ;SET PROCESSING TO "DIAMON" MODE JMP DEVFIL ;GO LOOKUP & READ FIRST ASCII LINE ;RETURN HERE WHEN FILE FOUND DIAFND: CLR R0 ;SET FOUND INDICATOR $DIAFX: JMP C10TIX ;USE 10 TTY INPUT ROUTINE ;RETURN HERE WHEN FILE NOT FOUND DIANF: MOV #-1,R0 ;SET NOT FOUND INDICATOR BR $DIAFX ;"DIAMON" FILE READ DIARD: JSR PC,$TI36C ;CLEAR 36 BIT WORD STORAGE CMP $INPTC,$INPTR ;ANY CURRENT INPUT ? BLE DIARNL ;NO 1$: JMP ACTLD2 ;GO READ NEXT INPUT LINE DIARNL=. ;RETURN HERE WITH NEW LINE SETUP 2$: MOV #5,R2 ;5 ASCII CHARS PER 36 BIT WORD 3$: CMP $INPTC,$INPTR ;EOL ? BGT 4$ ;YES MOVB @$INPTC,R0 ;GET FILE LINE CHAR INC $INPTC MOV #7,R1 JSR PC,SHFT36 ;SHIFT 36 BIT WORD LEFT 7 BISB R0,$DRAM ;INSERT NEW ASCII BYTE DEC R2 ;DONE 5 CHARS ? BGT 3$ ;NOT YET 4$: CLR R1 ;LEFT JUSTIFY FOR PDP-10 ASCII JSR PC,SHFT36 DPOSVT ;LOAD INTO FROM 11 WORD $DTF11 $DRAM BCC 6$ ;OK 5$: PMSG JMP $$TDX DIAEOF=. ;DIAMON READ END-OF-FILE D10MON ;SET FROM 11 WORD -1 $DTF11 BCS 5$ ;ERROR 6$: JMP C10DON ;TELL 10 TO CONTINUE .SBTTL PDP-11 CONSOLE FUNCTIONS ;START PDP11 AT ADDRESS GIVEN .SE: TTISDL BCS 2$ ;NON-NUMBER 1$: TTOCTE ;READ AN OCTAL ADDRESS 4$: MOV R0,SEADR ;GO TO ADDRESS IN R0 JMP SRT11 2$: CMPB #'D,R0 ;"D", START DIAGNOSTIC BEQ 3$ CMPB #'C,R0 ;"C", START CONSOLE BNE $$CMDE MOV #PRGSRT,R0 BR 4$ 3$: MOV #3000,R0 BR 4$ ;EXAMINE ELEVEN AT ADDRESS GIVEN .EE: MOV #1,R5 BR .EEB .EB: CLR R5 .EEB: MOV #.EADR,R2 CLR R3 TTISDL BCS 6$ ;NON-NUMBER TTCOCT ;READ AN OCTAL ADDRESS MOV R0,R1 MOV R0,(R2) ;SAVE ADR FOR DEPOSIT TTIBRK ;GET BREAK CHAR BCS $$PARA CMPB #COMMA,R0 BNE 2$ INC R3 ;SET MULTIPLE PRINT FLAG PNORML TTCOCT ;GET LAST ADDRESS MOV R0,R4 ;SAVE END ADR 2$: BIC R5,R1 ;IF WORD, MAKE EVEN 21$: MOV R1,R0 MOV R1,(R2) ;SAVE ADDRESS PNTOCT ;PRINT ADDRESS PSLASH 1$: TST R5 ;BYTE ? BEQ 3$ ;YES MOV (R1),R0 PNTOCT ;PRINT CONTENTS OF ADDRESS BR 4$ 3$: MOVB (R1),R0 BIC #177400,R0 PNTOCS ;PRINT BYTE CONTENTS 4$: TST R3 BEQ 5$ PCRLF CMP R1,R4 BHIS 5$ INC R1 ;INCREMENT ADDRESS ADD R5,R1 ;IF WORD, INC BY 2 BR 2$ 5$: PCRLF JMP $KONSL 6$: BEQ 7$ ;UPARROW BVC 61$ ;NONE INC (R2) ;EXAMINE NEXT 11 ADDRESS ADD R5,(R2) 61$: MOV (R2),R1 INC $INPTC ;ADVANCE PAST TERMINATOR BR 2$ 7$: DEC (R2) SUB R5,(R2) BR 61$ ;ZERO ELEVEN .ZE: TTOCTE ;GET START ADDRESS MOV R0,R5 TTCOCT ;GET END ADDRESS 1$: CLR (R5)+ ;ZERO 11 CMP R5,R0 ;COMPLETED ? BLOS 1$ ;NO JMP $CONSL ;DEPOSIT ELEVEN DATA .DE: MOV #1,R5 ;DEPOSIT 11 WORD BR .DEB .DB: CLR R5 ;DEPOSIT 11 BYTE .DEB: MOV #.EADR,R2 TTISDL BCS 5$ ;NON-NUMBER TTCOCT ;READ OCTAL ADDRESS 1$: MOV R0,R1 TST R5 BEQ 2$ BIT R5,R0 BNE $$PARA ;WORD, ODD ADDRESSES ILLEGAL 2$: TTISDL BCS $$CMDE TTCOCT ;GET DATA MOV R1,(R2) TST R5 ;BYTE ? BEQ 3$ MOV R0,(R1) ;STOW IT BR 4$ 3$: MOVB R0,(R1) ;STOW 11 BYTE 4$: JMP $KONSL 5$: BVC $$CMDE ;IF COLON, USE PREVIOUS EXAMINE ADDRESS MOV (R2),R0 BR 1$ $$PARA: JMP $PARA $$CMDE: JMP $CMDE .SBTTL KL10 MONITOR & ACT10 COMMAND ROUTINES $VERIFY:SETFLG VERIFY PNORML BR $PROG1 $LDT: MOV #1,LDOVRD ;LOAD TEN, OVERRIDE EXT BR $PROG2 $LDE: MOV #2,LDOVRD ;LOAD ELEVEN, OVERRIDE EXT BR $PROG2 $LDR: MOV #3,LDOVRD ;LOAD RAM, OVERRIDE EXT BR $PROG2 $LDB: MOV #6,LDOVRD ;LOAD ELEVEN BIN, OVERRIDE EXT BR $PROG2 $PROG: CLR LDOVRD ;CLEAR OVERRIDE $PROG2: CLR VERIFY $PROG1: CLR LDCNTL ;CLEAR LOAD CONTROL FLAG CLR SRTFLG ;CLEAR SELF START FLAG CLRB CONSOL-1 ;OVERLAY INUSE INDICATOR BR $HELP1 ;GO LOAD PROGRAM $JFILE: SETFLG JFILEF ;SET DOUBLE INDIRECT FLAG CLR PRGRUN ;CLEAR PROGRAM RUNNING FLAG MOV #TOUTBF+5000,IFINP ;SETUP STORAGE POINTER BR $IIX $IFILE: MOV #TOUTBF,IFINP ;SETUP STORAGE POINTER $IIX: CLR PCMDFLG ;CLEAR PROGRAM COMMAND SETFLG IFILEF ;SET INDIRECT FILE FLAG CLR @IFINP ;CLEAR 1ST BUFFER WORD CLRB CONSOL-1 ;OVERLAY INUSE INDICATOR $HELP: CLR LDOVRD ;CLEAR LOAD OVERRIDE FOR H,I,J SETFLG LDCNTL ;SET LOAD CONTROL TO "HELP" PNORML TST DEVTYP BPL $HELP1 JMP ACTFIL ;ACT10 HELP $HELP1: JMP DVLOAD ;RP04/DECTAPE/FLOPPY HELP $AT: TTITRM SETFLG DEVTYP ;SET ACT10 MODE COMCLR ;CLEAR COMMUNICATIONS BR $DTX $DT: CLR FLOPPY TTISDL BCS $DTC ;LETTER TTISDO ;GET UNIT SELECTION DIGIT CMP R0,#7 ;MUST BE 0 TO 7 BGT $CMDEJ SWAB R0 ;PUT IN PROPER PLACE FOR TC11 MOV R0,DTUNIT ;SAVE IT $RXX: CLR DEVTYP ;SET DECTAPE MODE $DTX: JMP $KONSL $RX: SETFLG FLOPPY TTISDL BCS $DTC ;LETTER TTISDO ;GET SELECTION DIGIT CMP R0,#1 ;MUST BE EITHER 0 OR 1 $CMDEJ: BGT $CMDE BNE $RX.1 MOV #RXU1,R0 $RX.1: MOV R0,RXUNIT ;SAVE FOR RX11/RX01 FLOPPY BR $RXX $DTC: CMP #"CO,$INBUF+2 ;IS COMMAND 'DTCOPY'/'RXCOPY' ? BNE 1$ CMP #"PY,$INBUF+4 BNE 1$ JSR PC,$KLUCK ;UTILITY IN CORE ? TST FLOPPY BEQ 2$ JMP @RXCOPY ;FLOPPY COPY 2$: JMP @DTCOPY ;YES 1$: JMP $CMDER $GO: INC $INPTC $$GO: MOV PGOCTL,R0 ;GO, START PROGRAM JMP @LDSTRT(R0) LDSTRT: SRT11X SRT10 $JC: TTITRM SETFLG ;SET J FILE FLAG TO CONTINUE JFILEF ;INTERRUPTED J FILE PROCESS BR $DTX SRT11X: MOV PGOADR,SEADR SRT11: TST SEADR BEQ 1$ ;IF ADR 0, START AT 3000 BIT #1,SEADR BNE ADRERR ;ODD ADDRESSES NOT ALLOWED 2$: JSR PC,$CMCLR ;CLEAR COMMON STORAGE CLR IFILEF ;END INDIRECT PROCESS SETFLG PRGRUN MOV #STACK-2,R0 ;PASS STACK BASE ADR IN R0 MOV R0,SP ;RESET STACK TST EMTLDD ;CLOBBER IN EMT VECTOR IF NECC. BEQ 10$ MOV EMTLDD,EMTVEC MOV EMTLDD+2,EMTVEC+2 10$: JMP @SEADR ;START 11 PROGRAM AT LOAD ADDRESS 1$: MOV #3000,SEADR BR 2$ ;ACT10 TIME REQUEST $TIME: TTBTRM TST DEVTYP BPL $TIME1 ;ONLY LEGAL IN ACT10 MODE COMENQ ;REQUEST APT10 SERVICE MOV #$INBUF,R0 COMCMD ;SEND COMMAND $PMSG ;PRINT INPUT LINE CINBF COMCLR $TIME3: JMP $CONSL $TIME1: JMP NONACT ;NON ACT10 $LOGO: $LOGIN: TST DEVTYP ;ONLY LEGAL IN ACT10 MODE BPL $TIME1 TTITRM COMENQ ;REQUEST SERVICE MOV #$INBUF,R0 COMCMD ;SEND COMMAND COMEOT BR $TIME3 SRT10: MOV #TGOADR+2,R0 MOV #PGOADR+2,R1 ;PUT LOAD ADR IN 10 GO ADR MOV (R1),(R0) MOV -(R1),-(R0) JMP $$$ST ;GO TO 10 START ROUTINE $COMNT: TST DEVTYP ;ACT10 MODE ? BPL 1$ ;NO, LOCAL ONLY COMENQ ;REQUEST APT10 SERVICE MOV #$INBUF,R0 COMCMD ;SEND MESSAGE COMEOT 1$: BR $TIME3 ;BACK TO CONSOLE $BOOT: $SCRPT: $MSCP: $GSCP: $BOOTT: JMP $CMDER ADRERR: PMSG BR COMNER $PARA: PMSG BR COMNER $CMDE: JMP $CMDER NONACT: PMSG BR COMNER NORESP: PMSG COMNER: JMP $CNTLC ;REINITIALIZE SYSTEM .RI: CLR $ONETM JMP START .SBTTL LINE PRINTER SELECTION ROUTINE .IFNZ 0 ;TURN OFF TO SAVE SPACE? $LPT: PMSG TTILIN TTIYES BCS $LPT ;JUNK BMI 10$ ;NO MOV #NOLP,ERRVEC ;DO WE HAVE A LINE PRINTER CONTROLLER ? MOV $LPS,R0 TST (R0) TST R0 BNE 1$ ;LP11 MOV #LP20A,R0 TST (R0) TST R0 BNE 2$ ;LP20A MOV #LP20B,R0 TST (R0) TST R0 BNE 2$ ;LP20B MOV #$TIMOT,ERRVEC PMSG JMP $CNTLC 1$: CLR LPTYPE ;LP11 - TYPE = 0 BR 3$ 2$: MOV R0,LPTYPE ;LP20 - TYPE = CONTROLLER BASE ADDRESS 3$: MOV #$TIMOT,ERRVEC SETFLG LPTFLG TST LPTYPE BNE 5$ TST @$LPS ;LP11 - LPT OK ? BMI 20$ ;NO 4$: JMP $CONSL 5$: JSR PC,LP20INI ;INITIALIZE LP20 BCS 20$ ;ERROR BR 4$ 10$: CLR LPTFLG ;TURN OFF LINE PRINTER BR 4$ 20$: PMSG BR $LPT NOLP: CLR R0 ;NO LP CONTROLLER BUS TRAP RTI .SBTTL LP20 INITIALIZATION ROUTINE LP20INI:MOV LPTYPE,R5 ;SETUP BASE ADDRESS MOV #LPLINI!LPRERR,(R5) ;CLEAR LP20 MOV #VFUDAT,R0 ;SETUP VFU BUFFER MOV R0,LPBSAD(R5) ;SETUP BUFFER ADDRESS MOV #037756,(R0)+ ;VFU LOAD CODE & ALL CHANS MOV #77,(R0)+ MOV #100,R1 ;SET FOR 64 LINES ON PAGE 1$: CLR (R0)+ DEC R1 BNE 1$ MOV #167400,(R0) ;VFU STOP LOAD CODE MOV #-206,LPBCTR(R5) ;206 BYTE XFER MOV #LPVLOD!LPPENB!LPGO,(R5) ;VFU LOAD & GO JSR PC,LP20DN ;WAIT FOR DONE BCS 3$ ;ERROR CLR LPCBUF(R5) ;CLEAR LP20 RAM MOV #LPLINI!LPRERR,(R5) MOV #-1000,R0 ;LOCATION COUNT MOVB #LPPENB,(R5) ;PARENB & NOT GO 2$: CLR LPRAMD(R5) ;CLEAR INC LPCBUF(R5) ;INCREMENT ADDRESS INC R0 ;COUNT IT BNE 2$ ;IF NOT DONE, GO BACK CLC ;COMPLETED, C-BIT CLEAR RETURN RTS PC 3$: SEC ;ERROR, C-BIT SET RETURN RTS PC .ENDC ;TURN OFF TO SAVE SPACE? .SBTTL CONSOLE TELETYPE FUNCTIONS $TP: MOV #$TPLIN,R5 ;SET TTY PAGE LENGTH BR $TPW $TW: MOV #$PGWID,R5 ;SET TTY PAGE WIDTH $TPW: TTISDL BCS $PARAM TTIDEC ;SPECIFIED IN DECIMAL BCS $DECN ;WASNT A DECIMAL NUMBER MOV R0,(R5) ;SET IT UP $TPWF: JMP $CONSL ;RETURN TO CONSOLE FOR NEXT COMMAND ;TTY FILL CHARACTER PARAMETER $TF: TTISDO CMP R0,#5 ;CHECK FILL PARAMETER UPPER LIMIT BGT $FILPL MOV R0,$TTYFL ;SET TTY FILL PARAMETER BR $TPWF ;MESSAGES TO OPERATOR $DECN: $FILPL: $OCTN: $PARAM: JMP $PARA .SBTTL KLINIK FIELD SERVICE REMOTE DIAGNOSTICS ENABLE .KLINIK:CMP #"IN,$INBUF+2 BNE 2$ CMP #"IK,$INBUF+4 BNE 2$ TST DL11EFLG ;PRESENTLY ENABLED ? BEQ 1$ ;NO KLUNK=. CLR DL11EFLG ;YES, CLEAR IT PMSG JMP $CNTLC 1$: CLR @$FSTKS ;INITIALIZE BIS #DLDTR!DLRTS,@$FSTKS ;SET DATA TERMINAL READY BIT #DLCTS,@$FSTKS ;DO WE HAVE CLEAR TO SEND ? BEQ FSDISC ;NO COM DL11EFLG ;ENABLE KLINIK PMSG JMP $CNTLC 2$: JMP $CMDER ;DL11E DISCONNECT, CLEAR TO SEND NOT SET FSDISC: CLR DL11EFLG PMSG <\DL11E NOT CLR TO SEND, > BR KLUNK .SBTTL DISK STATUS PRINTER ;DS n TELLS YOU ALL ABOUT RP04 #n. PDP10 MUST BE STOPPED SINCE WE USE ITS RH10 DSKSTS: DFLEGAL ;10 MUST NOT BE RUNNING TTCOCT ;DISK NUMBER TO R0 BIC #-8,R0 ;TRUNCATE TO LOW 3 BITS MOV R0,R2 ;SAVE DSK # ASL R2 ;SHIFTED LEFT 2 BITS ASL R2 EXAMT ;SAVE LOCATION 20 .WORD 20,$SAV20 MOV #TENDAT,R4 ;3-WORD BLOCK TO HOLD PDP10 DATAO/DATAI WORD MOV #DSKSTB,R3 ;ADDRESS TABLE OF REGISTERS TO DISPLAY 10$: MOVB (R3)+,R0 ;GET CHAR BEQ 99$ ;NULL MEANS ALL REGS DISPLAYED PNTCHR MOVB (R3)+,R0 ;GIVE NAME OF REG PNTCHR MOVB (R3)+,R0 PNTCHR PSPACE CLR (R4)+ ;CLEAR 1.1-2.7 OF WORD TO DATAO WITH MOV R2,(R4) ;DRIVE NUMBER TO 3.1-3.3 MOVB (R3)+,R0 ;GET REGISTER NUMBER, WHICH GOES TO 4.4-4.9 CLR R1 ;R1 WILL GET LOW 2 BITS, R0 HIGH 4 ASR R0 ROR R1 ASR R0 ROR R1 BIS R1,(R4)+ ;LOW 2 BITS TO 4.4-4.5 MOV R0,(R4) ;HIGH 4 BITS TO 4.6-4.9 CMP -(R4),-(R4) ;RESTORE POINTER TO 36-BIT WORD DPOSVT ;PUT TENDAT INTO 20 .WORD 20,TENDAT BCS 69$ MOV #DTO270,R0 ;EXECUTE DATAO 270,20 EXCT BCS 69$ ;LOST, GIVE IT UP MOV #DTI270,R0 ;EXECUTE DATAI 270,20 EXCT BCS 69$ EXAMT ;GET BACK 20 .WORD 20,TENDAT ;1.1-2.7 IS THE INTERESTING STUFF MOV TENDAT,R0 ;PRINT 6 DIGITS PNTOCT PCRLF ;WHAT THE HELL, DON'T TRY TO PUT MULTIPLE PER LINE BR 10$ ;NEXT REGISTER 69$: PMSG ;HERE IF EXAMINE/DEPOSIT FAILS OR SOMETHING JMP $CNTLC 99$: DPOSVT ;RESTORE 20 .WORD 20,$SAV20 BCS 69$ JMP $KONSL ;DONE WITH COMMAND, CONTINUE EXECUTING LINE DTI270: IO10 DATAI,270,0,20,0 ;DATAI 270,20 DTO270: IO10 DATAO,270,0,20,0 ;DATAO 270,20 ;TABLE OF DISK REGISTER NAMES (3 CHARS) AND REGISTER NUMBERS (1 BYTE) ;TERMINATE WITH NULL CHARACTER DSKSTB: .ASCII /DCL/ .BYTE 0 .ASCII /STS/ .BYTE 1 .ASCII /ATN/ .BYTE 4 .ASCII /ER1/ .BYTE 2 .ASCII /ER2/ .BYTE 14 .ASCII /ER3/ .BYTE 15 .ASCII /CCY/ .BYTE 13 .ASCII /CYL/ .BYTE 12 .ASCII /ADR/ .BYTE 5 .BYTE 0 .EVEN