*20 / /PDP-12 DEMO MONITOR /BANK 0 / / / /RELEASE VERSION 1 /22 AUG 69 /REVISED 14 SEP 69 /REVISED 13 OCT 69 /REVISED 23 OCT 69 / / / /LAST MODS 12/21/69 RICH DE JOHN / / / /SOME ASSIGNMENTS LMODE LINC=6141 XOA=0021 RMF=6224 RIB=6234 ION=6001 IOF=6002 TLS=6046 PMODE CLC=7240 PDP=0002 /ASSIGNMENTS FOR CROSS BANK /REFERENCES SCI=2525 STATE=3223 ZDML=STATE+1 Y01=20 TAPDSP=3343 TAPMES=TAPDSP+2 ERR1=1621 ERR10T=3760 ERR6T=3741 UNITM=3365 ZPNAME=3367 CALLDL=3356 /INTERRUPT SERVICE ROUTINES SEGMNT 0 PMODE *1 NOP DCA SVAC /ENTRY FROM PDP-8 MODE TAD 0 DCA SVPC TAD 1 /SET PDP-8 MODE INDICATOR LINC LMODE JMP INTSAV /GO TO SAVE STATE ROUTINE *20 /SAVED TRAP STATE TSTATE=.-1 ISVFLO, 0 ISVAXO, 0 ISVEFS, 0 ISVMQ, 0 ISVFLD, 0 ISVPC, 0 ISVLNK, 0 ISVAC, 0 JF2, JMP FOOS2 /USED DURING TAPE INT. TIMER, 0 CASE, 0 /CASE OF INPUT CHAR LNCODE, 0 /LINC CODE OF INPUT CHAR (KBD) /RETURN FROM INTERRUPT SERVICE, RET8, LINC RET, SET I 14 ISTATE JMP GO /LINC MODE INTERRUPT HANDLER LMODE *41 STC SVAC LDA 40 BSE I JMP ILLT, STC SVPC INTSAV, ROR I 1 /SAVE LINK, BIT 1 IS MODE AT INTERRUPT TIME STC SVLNK SET I 14 ISTATE JMP SVSUB1 /SAVE SOME COMMON STUFF /TAPE INTERRUPT? /YES IF TAPE INTERRUPT ENABLED, AND TAPE DONE. /SWITCH IN TAPE INTERRUPT SERVICE HANDLES /UNWANTED INTERRUPTS TAPSER, STD JMP KSER XOA ROL I 6 LZE JMP TAPINT /KEYBOARD INTERRUPT? KSER, CLR PDP PMODE KSF JMP TSER KRB LINC LMODE STC ICHR ADD ONE STC KSTF JMP STCNG /TELETYPE PRINTER FLAG? PMODE TSER, TSF JMP ISER TCF DCA TFLG JMP RET8 /ALL OTHER INTERRUPTS COME HERE ISER, TAD INEXT /CHAIN EXTENDED? SZA CLA JMS I INEXT /E YES JMP ISER0 JMP RET8 /SUBROUTINE TO SAVE SOME COMMON STUFF /FOR INTERRUPT SERVICE AND /TRAP SERVICE LMODE SVSUB1, FLO I ADD M1 STA I 14 XOA ADD C400 STD CLR STA I 14 SFA STA I 14 QAC ROL 1 QLZ ADD ONE STA I 14 CLR IOB RIB STA I 14 LDF 1 JMP 0 /SOME COMMON STORAGE INEXT, 0 /INTERRUPT EXTENSION STSVD, 0 /DEMO STATE SAVED 7=YES,0=NO KSTF, 0 /KEYBOARD FLAG - 1 IF CHAR IN TFLG, 0 /TTY FLAG - 1=BUSY, 0=NOT OTAC, 0 /USED DURING TAPE INTERRUPT /START OF INSTRUCTION TRAP HANDLER *140 0 STC ISVAC IOB IOF JMP ITRAP /INTERRUPT STATE ISTATE=.-1 SVFLO, 0 SVAXO, 0 SVEFS, 0 SVMQ, 0 /MQ, ALL 12 BITS SVFLD, 0 /FIELDS, SAVED IN LINC MODE ALWAYS SVPC, 0 /SAVED PC, 8- OR LINC- DEPENDING ON MODE SVLNK, 0 /BIT 0=LINK STATE, BIT 1 IS MODE, 1=PDP-8, 0=LINC SVAC, 0 /TRY TO HANDLE EXTRANEOUS INTERRUPTS /POWER CLEAR AND SEE IF THEY CLEAR. /IF NOT, CANNOT RECOVER, AND DEMO SYSTEM MUST BE RELOADED. /IF INTERRUPT CLEARS, CONTROL C WILL RESTART THE DEMO, RE- /EXECUTING A TAPE COMMAND IF ONE WERE IN PROGRESS PMODE ISER0, CLC LINC LMODE ESF /GENERATE A PWR CLR SET I 1 PMODE JMP ILLINT PDP ION C7000, NOP IOF TAD .-2 /RESTORE 1 DCA 1 LINC LMODE SET I 14 ISTATE JMP COPY JMP STOPT TWO, 2 /"SPURIOUS INTERRUPT" /THIS ROUTINE HANDLES UNCLEARABLE INTERRUPTS ILLINT, LINC SET I 1 5400 /PDPMODE JMP I 0 LDA I JMP IOFF /SET 41 TO RETURN, INTERRUPTS OFF STC ILLT JMP STOPT THREE, 3 /"UNCLEARABL INTERRUPT" /JUST RETURN TO LINC MODE, INTERRUPTS OFF IOFF, STC .+4 ADD SVAC IOB RMF /THE FOLLOWIN LOCATION GETS CLOBBERRED / IF AN UNCLEARABLE INTERRUPT OCCURS KCTAB, 216 /DOUBLE ENTYRY TABLE FOR CONTROL /CARACTER LOOKUP -13 /-IS NEW STATE, + IS LIST OF NES NEW STATES 211 /I -2 /ALWAYS GOES TO STATE 2 210 /H TH+TH-1 203 /C TC+TC-1 223 /S TS+TS-1 ICHR, 0 /ALSO SERVES TO END LOOP 7777 /NO STATE TRANSITION NECESSARY /STATE SELECTER /CAUSES A STATE CHANGE IF AND ONLY IF /ONE OF TTE CONTROL CODES IS STRUCK STCNG, SET I 11 KCTAB-1 ADD ICHR SAE I 11 JMP .-1 LDA I 11 /GET CODE WORD FROM TABLE APO I /- IS STATE, + IS TABLE ADDR. JMP STC0 COM JMP STC1 STC0, ADA STATE ROR 1 STC 11 LDH 11 STC1, AZE I JMP RET /NO STATE CHANGE STC 10 SET I 14 ISTATE JMP COPY /SAVE STATE IF STATE=STTSVD=7 STC KSTF /CLEAR KBDD FLLAG ADD 10 STC2, STA STATE LDA I 1400 ESF LDA I JMP FOO1 STC FOOSWT LIF 1 JMP SCI /STATE TRANSITION TABLES /ORDERED BY THE CHARACTERS, THEN BY THE /CURRENT STATE. ENTRIES ARE HALFWORD. /ENTRIES ARE OCTAL, BUT STATES ARE DECIMAL. /TAKE CARE!!!!! TH, 0101 0110 1110 1201 0101 0101 0101 TC, 1414 0000 0000 0006 0707 0000 0000 TS, 1615 0006 0700 0606 0706 0000 0000 /TRAP PROCESSOR SUBROUTINES /ILLEGAL CHAR, GET ANOTHER KERR, CLR STC KSTF /KBDA - OPR 13. ASCII INPUT COMMAND (8-BIT) IKBDA, STC CASE /KBD - OPR 15 IKBD, ADD KSTF AZE JMP KBDT ADD LINS ROR I 5 /WAIT BIT ON?/ STC 0 /CLEAR THE AC LZE JMP IKBD /LOOP UNTIL CHAR IN JMP KBDX /IMMEDIATE EXIT /TYP - OPR 14 ITYP, ADD ISVAC JMP TYPE JMP XP1 /TYPE ONE CHARACTER SUBROUTINE FIFTY, TYPE, SET 10 0 STC 11 LDA TFLG AZE JMP .-3 ADD 11 IOB TLS LDA I ONE, 1 STC TFLG JMP 10 /OKST OPR (12) IOKST, ADD KSTF AZE JMP XP2 JMP XP1 /DO KEYBOARD, TRANSLATE, ECHO CHAR /(OR CR,LF FOR CR) AND RETURN ONE OR /TWO LINC CHARACTERS /IF CASE IS NON-ZERO, SECOND CHARACTER IS STILL /TO BE SENT TO PROGRAM. /SAME CODE IS USED FOR ASCII AND LINC CODE INPUT, /DIFFERENCE IS THAT KTRNS RETURNS THE FULL ASCII CHAR /IN LNCODE, AND 0 IN CASE, WHILE IT RETURNS /THE TRANSLATED CHARACTERS I FOR LINC CODE, WIHT /CASE =0 IF A LOWER CASE CHAR, AND 23 IF U.C. KBDT, LDA CASE AZE I JMP KTRNS CLR KBDR, STC CASE STC KSTF ADD LNCODE JMP KBDX /RETURN FROM TRANSLATION ROUTINE /ECHO ASCII CHARACTER 8ICHR). IF CHAR /WERE A LINC EOM, ALSO ECHO A LINE FEED KRET, STC LNCODE STC CASE ADD ICHR JMP TYPE ADD ICHR SAE I 215 /IS IT A CR??? JMP .+3 /NO ADD M3 /MAKE IT A LF JMP TYPE /YES, TYPE CR, LF LDA CASE AZE I JMP KBDR KBDX, STC ISVAC JMP XP1 /TRANSLATE CHAR IN ICHR TO LINC CODE /RETURN TO P+1 IF ILLEGAL /AND TO P+2 IF OK, WITH THE LINC /CHAR IN LNCODE, AND CASE = 0 IF L.C. /AND = 23 IF U.C. KTRNS, ADD LINS BCL I M17, 7760 /KBD OR KBDA? SAE I 13 JMP KT0 /KBD LDA ICHR /KDBA JMP KRET /IS CHARACTER A LETTER? (RANGE 301-333) KT0, LDA I -332 ADD ICHR APO I JMP KT1 ADA I -300+332 APO JMP KT1 /ADD 23 AND EXIT KT2, ADA I K23, 23 JMP KRET /NOT A LETTER,IN SPECIALS TABLE? LMODE KT1, SET I 15 KTBL-1 SET I 14 -7 LDA ICHR KT1A, SAE I 15 JMP KT1R LDA 15 ADA I 30-KTBL JMP KT4 KT1R, XSK I 14 JMP KT1A /NOT IN SPECIALS TABLE, INRANGE 243-272? ADA I -271 APO I JMP KERR /ILLEGAL CHAR, GET ANOTHER ADA I -243+272 APO JMP KERR KT4, ROR 1 ADA I TTAB+3777 STC 14 LDH 14 AZE I JMP KERR ADA I -12 AZE I CLR APO I JMP KRET ADD K23 STC LNCODE ADD K23 JMP KRET+1 KTBL, 212 215 240 275 333 375 377 /TABLE FOR TRANSLATING SPECIAL CHARACTER, EITHER /IN FRANGE 243-272, OR SPECIAL CHARS FOUND IN KTBL. FIRST /ARE FOUND IN CHARACTER POSITION C-243. SECOND ARE FOUND IN /CHARACTER POSITION T+27, WHERE T IS /CODE IN KTBL. A ZERO ENTRY INDICATES AN /ILLEGAL H CHARACTER. OTHER ENTRIES ARE CODED /BY ADDING 23 TO L.C. CHARACTERS, AND STORING ACTI /ACTUAL CODES FOR U.C. CHARS. TTAB, 3410 0527 3000 0000 3206 3107 3312 1314 1516 1720 2122 2301 2426 0411 3525 /EXTEND INTERRUPT CHAIN - OPR 11 IXCHN, ADD LINS+1 STC INEXT /ENTER XP2 IN EITHER PDP OR LINC MODE XP2, PDP /RETURN TO P+2, PMODE ISZ ISVPC XP1, PDP ISZ ISVPC IRET, LINC LMODE /RESTORE PROCESSOR STATUS AND GO /CALL BY: / SET I 14 / ASTATE /RELEVANT STATE LOCATIONS / JMP GO GOT, IOB /RETURN FROM TRAP IOF SET I 14 TSTATE GO7, LDA STATE BCO I 7 AZE I /IF STATE=STSVD=7, CLR STSVD STC STSVD GO, LDA I 14 ADD C4000 /CREATE AN OVERFLOW IF REQ. LDA I 14 AZE AXO LDA I 14 ESF LDA I 14 ROR 14 /MZ LDA I 14 ROR 3 /RESTORE FIELDS STH RL+4001 /RESOTRE IF STH R8+4001 /RESTORE IF FOR 8 MODE ADD FORTY STH GO2+4000 ROL 5 BSE I 40 STH GO1+4000 GO2, LDF LDA I 14 SAE I JMP 0 JMP .+3 LDA 2000 STC RPC GO1, LDF /RESTORE DF LDA I 14 ROL I 1 /LINK APO JMP R8 RL, LDA I 14 LIF 0 DJR /DISABLE JUMP RETURN IOB ION RPC, 0 / R8, LDA I 14 LIF /SET TO PROPER IF IN CODE ABOVE PDP PMODE ION JMP I RPC LMODE /SAVE THE DEMO STATE, BY COPYING IN /FROM C(14) TO DSV*** /CALL BY: / SET I 14 / ASTATE / JMP COPY / ALL RETURNS COPY, SET 12 0 LDA STATE BCO STSVD /STSVD=7 IF SAVED, 0 IF NOT SAE I 7 JMP CPYX STC STSVD /SET STATE SAVED INDICATOR SET I 15 DSTATE SET I 13 -10 LDA I 14 STA I 15 XSK I 13 JMP .-3 CPYX, CLR JMP 12 /START CURRENT DEMO USER, IN SAVED STATE, OR /IN FRESH STATE, IF NO STATE SAVED Y07, ADD STSVD AZE JMP Y07A STC INEXT SET I 14 YSTATE /FRESH STATE JMP GO Y07A, SET I 14 DSTATE JMP GO7 /INITIAL STATE YSTATE=.-1 0 0 C1400, 1400 0 6020 /FIELDS 2,3 6020 /START AT 20 0 0 /SOME STATE LOCATIONS DSTATE=.-1 0 0 0 0 0 0 0 0 /OPERATE INSTRUCTION DISPACTH TABLE IOPRT, JMP XP1 JMP XP1 JMP XP1 JMP XP1 /4-NOP JMP IRETV /5-RETIREEVE JMP INDM /6-NEXT DEOMO JMP IEDM /7-END DEMO JMP XP1 /10-NOP JMP IXCHN /11-EXTEND INT. CHAIN JMP IOKST /12-KST JMP IKBDA /13-ASCII KBD JMP ITYP /14-TYPE JMP IKBD /15-KBD /INSTRUCTION TRAP PROCESSOR /SAVE STATE FIRST ITRAP, ROR I 1 STC ISVLNK SET I 14 TSTATE JMP SVSUB1 ROR 3 STH RP5+4001 ADD FORTY STH IT1+4000 STH RP2+4000 ROL 5 BSE I FORTY, 40 STH RP5+4000 LDA I M1, -1 ADD 140 BSE I JMP STA 10 STA RP5+2 STC ISVPC IT1, LDF LDA 10 STC LINS LDA I 10 STC LINS+1 ADD 10 STC RP0 LDA I 10 STC SVP2 LDA I 10 STC SVP3 SET I 14 /IF IN DEMO AND STATE NOT SAVED TSTATE /THEN SAVE IT JMP COPY LDF 1 /DISPATCH ON TRAPPED INSTRUCTION DSPT, ADD LINS BCL I 37 SAE I 0500 /OPR? JMP ITAPE ADD LINS BCL I 7760 ADA I JMP IOPRT-1 STC RPC JMP RPC-2 ITAPE, SAE I 0700 /TAPE COMMAND JMP XP1 JMP SUNIT ADD ISVEFS BCL I /CLEAR TAPE INST TRAP C400, 400 ESF LDA LINS BCL I 7770 ADA I JMP TTT STC TTT-1 STC MTBF /MTB FLAG (0= NOT MTB) STC WRTF ADD LINS+1 ROL 3 STC SBN /USED IN COMMON BY SOME ROUTINES JMP TTT /REPLACED BY AN APPROPRIATE JMP TTT, JMP TTR1 JMP TTR1 JMP TTR1 JMP TT1 JMP TCHK1 JMP TCHK JMP TCHK JMP TTR1 TT1, ADD ONE /MTB COMMAND STC MTBF JMP TTR1 /CHECK UPPER AND LOWER BLOCKS OF A /WRITE AND CHECKKGROUP COMMAND TCHK1, ADD SBN BCL I 7770 JMP TBLK TCHK, JMP TBLK /CHECK START BLOCK OF A COMMAND ADD ONE STC WRTF JMP TTR1 /EXECUTE THE TAPE COMMAND /TEST ONE BLOCK TO SEE THAT IT IS IN THE /RANGE 110-125 TBLK, ADD LINS+1 BCL I 7000 ADD M107 APO JMP TFAIL ADA I -134+107 /WRITE PROTECT ALL BLKS BUT 110-125 APO I JMP TFAIL ELEVEN, CLR JMP 0 /IF ILLEGAL WRITE, SET BLOCK NUMBER IN ERROR MESSAGE, AND DO IT TFAIL, SET I 14 ERR6T+3777 JMP SBLOCK JMP STOPT 6 /"ILLEGAL WRITE AT BLOCK ---" /SET BLOCK NUMBER INTO ERROR MESSAGE SBLOCK, SET 16 0 SET I 15 M3, -3 SBN1, LDA SBN ROL 3 STA I SBN, 0 BCL I 7770 ADD C4060 STH I 14 XSK I 15 JMP SBN1 JMP 16 LINS, 0 0 JMP 0 /EXECUTE THE COMMAND, MTBS FIRST, THEN /THE COMMAND ITSELF, IN PLACE TTR1, LDA I JMP FOOS /FIRST INTERRUPT GOES HERE JMP SETTIM /CHECK THE TAPE SUBROUTINE /SETS CONTROL IN MAINTENANCE MODE /ISSUES A MTB, AND CHECKS FOR SELECTION, /AND APPROPRIATE WRITE MODE /THEN GOES OFF TO DISPLAY WITH INT /ENABLED WAITING FOR THE TAPE. /REMAINDER OF TAPE PROCESSING IS UNDER /INTERRUPT CONTROL CKSUB, ADD LINS BCL I 7067 /0700+U ONLY ADD GO7+3 /NOW IT IS A CHK (CHANGED FROM ADD THREE) STC LINS XOA BCL I 7770 ADD FIFTY AXO ADD FORTY STC CKX1 JMP LINS /START WITH AN MTB COMMAND LDA I 5000 IOB 6151 /SET TAPE IR=12 IOB 6154 /READ THE REGISTER ROR I 2 LZE I /1=UNIT LE SELECTED JMP TTRER /UNIT NOT SELECTED APO JMP CKX /WRITE ENABLED LDA I /NOT ENABLED, NEEDED? WRTF, 0 AZE I JMP CKX JMP STOPT 12 /"SET WRITE ENABLED" CKX, LDA I CKX1, 0 AXO LDA 2000 STC SVB10 SET I 12 -3 IOB ION LIF 1 JMP TAPDSP TTRER, JMP STOPT SEVEN, 7 /"NOT SELECTED" /SET UP UNIT NUMBER SUNIT, ADD LINS ROR I 4 XOA ROL I 1 BCL I 7770 ADA I C4060, 4060 STA UNITM CLR JMP 0 SETTIM, STC FOOSWT ADD C7000 STC TIMER JMP 0 /TAPE INTERRUPT SERVICE TAPINT, FOOSWT, JMP . FOO1, ROR I 6 BCL I 100 STC SVAXO JMP RET FOOS, LDA I MTBF, 0 AZE JMP TPXT LDA I JMP FOOS1 JMP FOORET TPXT, LDA I SVB10, 0 STA 2000 LDA I JMP FOO1 STC FOOSWT JMP XP2 FOOS1, JMP TACTST STA NTAC APO I COM STC OTAC ADD JF2 /JMP FOOS2 FOORET, JMP SETTIM JMP LINS JMP RET FOOS2, JMP TACTST APO COM ADD OTAC AZE /CHANGED FROM APO JMP FOOS2A XSK I 12 JMP FOOS1+3 JMP BADB FOOS2A, TAC JMP FOOS1+1 /BAD BLOCK HANDLING BADB, LDA I NTAC, 0 COM ADD LINS+1 ROL 3 STC SBN SET I 14 ERR10T+3777 JMP SBLOCK JMP STOPT 10 /"BAD BLOCK --- " /BADT TAPE MESSAGE BADT, JMP STOPT 11 /"BAD TAPE" TACTST, TAC AZE JMP 0 TPIGO, JMP SETG LDA I LIF 0 STA I 16 LDA I JMP TWAIT STA I 16 DJR RP5, LDF LIF JMP . TWAIT, JMP SETG LDA I SVP2, 0 STA I 16 LDA I SVP3, 0 STA I 16 LDA I JMP TPXT JMP SETTIM JMP RET SETG, SET I 16 RP0, 0 RP2, LDF JMP 0 /STOP THE MOVING TAPE STOPT, SET 10 0 LDA I C4000, 4000 IOB 6152 /ISSUE A TAPE PRESET CLR AXO ADD C1400 ESF LDF 0 LDA 10 LIF 1 JMP Y01 / / /THE FOLLOWING CODE IS PAGED IN WITH /THE RESIDENT INDEX. STATE 7 ENTRY /WILL ASSURE THAT IT IS IN PLACE /ALONG WITH THE INDEX. / /CONTAINED IS THE CODE FOR OPR 5 (IRETV), /OPR 6 (INDM), AND OPR 7 (IEDM). THESE /ARE ONLY CALLED FROM DEMO PROGRAMS. *1720 /RETRIEVE AN INDEX ENTRY / /CALL: OPR 5 / PARAMADDR / (ALL RETURNS) / / PARAMADDR, TEXT "FULLPNAM" / 5757 / 5757 / 5757 / 5757 / /THE LAST FOUR WORDS WILL BE REPLACED /WITH THE SIGNIFICANT INFORMATION IFF /THE SEARCH IS SUCCESSFUL / IRETV, ADD LINS+1 ADD M1 BSE I 2000 STC 12 SET I 11 -4 SET I 10 ZPNAME-1 ADD IT1 /AN APPROPRIATE FIELD INSTRUCTION STA .+2 STC RRTX+1 LOOP, LDF LDA I 12 /MOVE PC+1,+2,+3,+4 LDF 1 STA I 10 /TO ZPNAME,+1,+2,+3 XSK I 11 JMP LOOP LDA I LIF 0 /SET UP A RETURN IN LOC. 4,5 OF STA /OF BANK 1 2004 LDA I JMP RRTX STA 2005 LDF 0 LIF 1 JMP CALLDL /GO TO BANK 1 TO CALL THE /DIRECTORY SEARCH ROUTINE RRTX, JMP RRRT /NOT FOUND LDF /SET TO PROPER LDF ABOVE BCL I 6000 /MAKE POINTER A IF REFERENCE ADD THREE STC 10 SET I 11 -4 LDA I 10 STA I 12 XSK I 11 JMP .-3 RRRT, LDF 1 JMP XP2 / /NEXT DEMO / INDM, ADD ELEVEN / /EXIT DEMO / IEDM, ADD TWO JMP STC2 M107, 7670 / / /END OF BANK 0 CODE / /