SUBTTL *SPCCPU* SPECIAL BASIC CPU PROCESSOR CONTROL, 26-FEB-76 ;NEW DEFINITIONS USED BY THE KL10 SUBROUTINE PACKAGE AC0= 0 DIAGNOS=30000 ;PDP-10 DIAGNOSTIC START ADDRESS DDT= 10000 ;PDP-10 DDT START ADDRESS DIAMON= 20000 ;PDP-10 DIAMON LOADER START ADDRESS DONG11= 1B22 ;11 DOORBELL (FROM THE 10) ;DTE20 DEVICE CODES DTE== 200 ;DTE0 DTE0== 204 DTE1== 204 DTE2== 210 DTE3== 214 ;KL10 EPT COMMUNICATION AREA $STD= 440 ;PDP-10 DIAGNOSTIC START ADDRESS $DDT= 441 ;PDP-10 DDT START ADDRESS $STL= 442 ;PDP-10 LOADER START ADDRESS $STM= 443 ;PDP-10 MONITOR START ADDRESS $DTFLG= 444 ;DTE20 OPERATION COMPLETE FLAG $DTCLK= 445 ;DTE20 CLOCK INTERRUPT FLAG $DTCI= 446 ;DTE20 CLOCK INTERRUPT INSTRUCTION $DTT11= 447 ;DTE20 10 TO 11 ARGUMENT $DTF11= 450 ;DTE20 11 TO 10 ARGUMENT $DTCMD= 451 ;DTE20 TO 11 COMMAND WORD $DTSEQ= 452 ;DTE20 OPERATION SEQUENCE NUMBER $DTOPR= 453 ;DTE20 OPERATIONAL DTE # $DTCHR= 454 ;DTE20 LAST TYPED CHARACTER $DTMTD= 455 ;DTE20 MONITOR TTY OUTPUT COMPLETE FLAG $DTMTI= 456 ;DTE20 MONITOR TTY INPUT FLAG $DTSWR= 457 ;DTE20 CONSOLE SWITCH REGISTER ;SPECIAL "FIXED" REASSIGNMENTS $$LOC=. ;SAVE CURRENT LOCATION LOC 30000 $$BEGIN:JRST $$START ;SETUP SPECIAL START JRST $$START ;"DIAMON" CHAIN START ADDRESS LOC 440 $STD: JRST BEGIN ;SETUP FOR "STD" LOC 443 $STM: JRST $SPEC ;SIMPLE RUN CONTROL LOC 30057 $BEGEND:JRST $SPBEND ;SETUP SPECIAL "BEGEND" ;SPECIAL MUUO, TRAP & PAGE FAIL SETUP LOC 420 $$420: HALT . ;KI10 PAGE FAIL $$421: JFCL ;OVERFLOW $$422: HALT . ;PUSHDOWN OVERFLOW $$423: HALT . ;TRAP 3 $$424: 0 ;MMUO $$425: 0 ;MMUO PC $$426: 0 ;KI10-PAGE FAIL, KL10-PROCESS CONTEXT $$427: HALT . $$430: 427 ;MMUO NEW PC'S $$431: 427 $$432: 427 $$433: 427 $$434: 427 $$435: 427 $$436: 427 $$437: 427 LOC 500 $$500: 0 ;KL10 PAGE FAIL WORD $$501: 0 ;KL10 PAGE FAIL PC $$502: 503 ;KL10 PAGE FAIL NEW PC $$503: HALT . LOC $$LOC ;RESET CURRENT LOCATION ;SPECIAL STARTUP SEQUENCE $$START:SETZM USER JSP 0,.+1 ;IN USER MODE ? TLNE 0,USERF SETOM USER ;YES, SET CONTROL WORD SKIPN MONFLG ;SPECIAL USER MODE ? SETZM USER ;YES, RUN AS EXEC SKIPE USER JRST START ;USER MODE, DON'T NEED CPU TYPE $STKIL: SKIPN MONTEN ;LOADED BY "DIAMON" ? SETOM ITRCNT ;NO, RUN FOREVER SETZM KLTYP SETZM KLFLG ;ASSUME KI10 MOVE 1,[1,,1] BLT 1,1 ;HOPE THIS WORKS CAMN 1,[1,,1] ;IF AC NE 1,,1 AFTER BLT, KL10 JRST START ;KI10, NO ADDITIONAL SETUP $STKL: CONO APR,10040 ;SET BBD NOT BIT CONI APR,0 CONO APR,20040 ;CLEAR BBD NOT BIT TRNN 0,40 ;IF SET, KL10 AOS KLTYP ;IF NOT, BBD SETZM $DTFLG SETZM $DTCLK MOVE $DTOPR ;GET DTE # ORM $$DTE0 ;INSERT IN DTE I/O INSTS ORM $$DTE1 ORM $$DTE2 ORM $$DTE3 SETOM KLFLG ;SET KL10 CONTROL FLAG JRST START $SPEC: MOVE [JRST STARTA] ;SIMPLE RUN CONTROL MOVEM $SPB1 JRST START ;SPECIAL "BEGEND" ROUTINE $SPBEND:AOS PASCNT ;INCREMENT PASS COUNT SOS ITRCNT ;DECREMENT ITERATION COUNT $SPB1: SKIPN USER JRST $SPBEX ;EXEC MODE $SPBUS: SKIPE ITRCNT ;USER MODE, COMPLETED ? JRST STARTA ;NO, KEEP RUNNING SKIPN MONTEN ;DONE, LOADED BY "DIAMON" ? EXIT ;NO, RETURN TO MONITOR JRST @RETURN ;YES, RETURN TO "DIAMON" $SPBEX: SKIPE KLFLG JRST $SPBKL ;KL10 & EXEC DATAO PI,ITRCNT ;KI10 & EXEC, DISPLAY ITER COUNT SKIPE ITRCNT JRST STARTA ;NOT COMPLETED YET JRST @RETURN ;DONE $SPBKL: SKIPN ITRCNT JRST $SPKLD ;KL10, EXEC & COMPLETED SKIPGE MONCTL JRST STARTA ;"DIAMON" CONTROL MOVEI 0,404 ;NOTIFY PDP-11 OF END OF PASS MOVEM 0,$DTCMD SETZM $DTFLG SKIPN KLTYP $$DTE0: CONO DTE,DONG11 SKIPE KLTYP $$DTE1: CONO DTE,10000 SKIPN $DTFLG ;WAIT TILL 11 RESPONDS JRST .-1 JRST STARTA ;KEEP RUNNING ;SPECIAL KL10 COMPLETED ROUTINE $SPKLD: SKIPE MONTEN JRST @RETURN ;LOADED BY "DIAMON" MOVEI 0,403 ;NOTIFY PDP-11 OF COMPLETION MOVEM 0,$DTCMD SETZM $DTFLG SKIPN KLTYP $$DTE2: CONO DTE,DONG11 SKIPE KLTYP $$DTE3: CONO DTE,10000 SKIPN $DTFLG ;SHOULD NEVER HAPPEN JRST .-1 ;11 NEVER RETURNS ON END OF PROGRAM HALT BEGIN ;IF IT DOES, HALT.