File RESM

Directory of image this file is from
This file as a plain text file

/
/MERCK 4.1 DISC MONITOR. MODIFIED TO PROVIDE
/SUPPORT FOR THE COULTER-S COUNTER.
/
/W.S.STEWART, MERCK AND CO.,INC., 10/28/70
/
/
/SOME COMBINED MICROINSTRUCTIONS
/
	CDF=6201	/CHANGE TO DF 0
	CLC=7240	/LOAD AC WITH 7777
	SP1=7324	/SET TO PLUS 1
	SP2=7326	/SET TO PLUS 2
	SM1=7240	/SET TO MINUS 1
	SM2=7344	/SET TO MINUS 2
	SM3=7346	/SET TO MINUS 3
/
/SOME LINC IOTS
/
	ICON=6141	/COND LINC AS RE AC
	ILES=6145	/LS TO AC
	ICS1=6151	/LINC CONSOLE (1) TO AC
	ICS2=6153	/LINC CONSOLE (2) TO AC
	IMBS=6155	/LINC MB SEL TO AC
	INTS=6147	/LINC INTERRUPT STATUS TO AC
	IBAC=6143	/LINC B TO AC
	IAAC=6171	/LINC A TO B & AC
	ISSP=6165	/CLEAR L-S, LP TO LB, AC TO P
	IACB=6161	/AC TO B
	IACS=6163	/AC TO B & S
	IACA=6167	/AC TO B & A
	IACF=6175	/AC TO INDICATORS, 0 TO B
	IZSA=6173	/0 TO B, Z/2 TO AC
/
/OTHER IOTS
/
	CLON=6132	/CLOCK ON
	CLOF=6134	/CLOCK OFF
	CLSF=6131	/CLOCK SKIP ON FLAG
	LSD=6661	/LPT SKIP DONE FLAG
	LCF=6652	/LPT CLEAR FLAGS
	LPR=6664	/PRINT LINE
	LLB=6654	/LOAD CHARACTER
	K2SF=6401	
	K2RB=6406
	T2SF=6411
	T2XF=6412
	T2LS=6416
	SFLG=6541	/SKIP ON COULTER S FLAG
	COFF=6542	/COULTER OFF
	CONN=6544	/COULTER ON
	CWRD=6546	/GET COULTER WORD & CLEAR FLAG
/
/OVERLAY ADDRESSES
/
	SUBM=1400
	TIOM=2000
	CONM=2400
	TAPEM=3000
	SWAPA=1400
/
/JOBS TABLE
/
	HW=1		/JOB HALTED PDP IN WAIT
	DW=2		/DISC OPERATION
	TW=3		/PRINTER ONE OPERATION
	KW=4		/KBD STRUCK
	LW=5		/LINE PRINTER OPERATION
	TPW=6		/TAPE OPERATION
	T2W=7		/PRINTER 2 OPERATION
/
/START OF PROGRAM
/
/						SEGMENT 1
/						-----------------

*1 JMP I .+1 /START OF INTERRUPT CHAIN INT DFSC /THIS ROUTINE IS USED JMP .-1 /ONLY DURING LOAD JMP .+3 INIT 4103 DFSE JMP I 7 DCMA JMP I 6 TEMP=3 TEMP2=4 SV20=5 SV21=6 MEM=7 TEMP10=10 TEMP11=11 TEMP12=12 MEMT=13 CADR=13 / /CONSTANTS / *14 C7, 7 C10, 10 C12, 12 C20, 20 C70, 70 / /POINTER AND FLAG AREA / CLOC, 5377 /LOCATION FOR COULTER WORD TO GO LNCA, 0 /LINC AC CONTENTS LNCP, 0 /LINC P COUNTER CONTENTS LINS, 0 /LINC B REGISTER CONTENTS JOBS, 0 /WHAT TYPE OF JOB WAS RUNNING JOBPC, 0 /RETURN ADDRESS FROM JOBS INAC, 0 /PDP-8 AC CONTENTS INL, 0 /PDP-8 LINK CONTENTS INTSAV, 0 /LINC INTERRUPT REGISTER CONTENTS MEMB, 0 /LINC MEMORY BANK SETTINGS / SEGMENT 2 / -------------------
FFIM, 0 /LINC INTERRUPT FLIP FLOP SETTINGS SLNCP, 0 /SAVE LINC P FLAG - 7777 IF SET DADRM, 17 /NUMBER OF DISC BLOCKS HANDLED LF, 0 /LINE FEED FLAG ICHR, 0 /INPUT CHARACTER RECEIVED FROM TTY CASE, 0 TFLG, 0 /TELEPRINTER ONE FLAG T2FLG, 0 /TELEPRINTER TWO FLAG TTACT, 0 /INDICATES WHICH TTY IS ACTIVE CEXT, 0 /CORE EXTENSION WORD DEXT, 0 /DISC EXTENSION WORD DADR, 0 /DISK ADDRESS TIFLG, 0 /TAPE INTERRUPT FLAG - 7777 INT. RFLG, 0 /READER FLAG PFLG, 0 /PRINTER FLAG WCGF, 0 LNCODE, 0 /TTY INPUT CONVERTED TO LINC CODE ACONT, 0 /AREA CONTENTS (MODULE NUMBER) IMOD, 0 /INPUT MODE, 0=LINC ELSE ASCII OMOD, 0 /OUTPUT MODE, 0=TTY ELSE LPT IOMOD, 0 /I/O MODE INDICATOR ODEV, 0 /OUTPUT DEVICE 1-6 IDEV, 0 /INPUT DEVICE 1-6 SW1, 0 /SWITCH REGISTER ONE CONTENTS SW2, 0 /SWITCH REGISTER TWO CONTENTS DOSWT, 0 /DO SWITCH FLAG LFLG, 0 LCNT, 0 CFLG, 0 /CLOCK INTERRUPT ALLOWED FLAG SBN, 0 /SAVE QN BN WORD FOR DISK, TAPE / SEGMENT 3 / ----------------
BN, 0 /BLOCK # QN, 0 /QUARTER # QCT, 0 /QUARTER COUNT MTPINS, 0 /MAG TAPE INSTRUCTION FORFLG, 0 /FOREGROUND ACTIVE FLAG INEXT, 0 / /NORMAL RETURN FROM AN INTERRUPT / RET, CLA CLL TAD INTSAV /WAS LINC INTERRUPTED? AND C10 SNA CLA JMP RSB /NO, START PDP-8 / /SET LINC AC AND GO / GO, TAD LNCA /GET LINC AC CONTENTS IACA /RESTORE CLA DCA JOBS /PUT 0 IN JOBS TAD LNCP /GET LINC P CONTENTS ISSP /RESTORE GO1, CLA TAD C12 ICON /START LINC ION /AND ENABLE INTERRUPTS / /CONTROL IS TRANSFERRED TO LINC AT THIS POINT. A HALT /WILL TRANSFER CONTROL BACK TO PDP-8 AT THE NEXT /INSTRUCTION. / CLA CLL /RETURN HERE ON LINC HALT IOF /DISABLE INTERRUPTS JMS SVLNC /SAVE LINC REGISTER CONTENTS HALT, CLC DCA CFLG /STOP THE CLOCK JMS I .+2 /WAIT FOR LINC INTERRUPT JMP GO WAIT / /RESTART PDP-8 AFTER INTERRUPT / RSB, TAD INL /RESTORE LINK RAL TAD INAC /RESTORE AC ION /ENABLE ITERRUPT JMP I 0 /CONTINUE / /LINC CONTROL SUBROUTINE / ICA=JMS . ICAE, 0 /SUBROUTINE ENTRANCE CLA TAD I ICAE /GET ARGUMENT ICON /ISSUE COMMAND CLA ISZ ICAE /SKIP ARGUMENT JMP I ICAE /AND CONTINUE / /STORE INTO LINC MEMORY / STORE=JMS . 0 /SUBROUTINE ENTRANCE SETFLD /SET PDP-8 FIELD DCA I MEMT /STORE WORD CCDF, CDF ISZ MEM /INDEX LINC MEMORY LOCATION JMP I .-5 /CONTINUE / /FETCH A WORD FROM LINC MEMORY / FETCH=JMS . 0 /SUBROUTINE ENTRANCE DCA MEM /DEPOSIT LINC ADDRESS SETFLD /SET PDP-8 FIELD TAD I MEMT /GET WORD CDF JMP I .-5 /CONTINUE / /SAVE LINC REGISTER CONTENTS / SAVE=JMS . SVLNC, 0 /SUBROUTINE ENTRANCE IBAC /GET LINC B REGISTER DCA LINS /SAVE IT IAAC /GET LINC AC DCA LNCA /SAVE IT ISSP /GET LINC P REGISTER IBAC ISSP DCA LNCP /SAVE IT JMP I SVLNC /CONTINUE / /SKIP IF I BIT NOT SET IN LINC INSTRUCTION / SKWB=JMS . 0 /SUBROUTINE ENTRANCE TAD LINS /GET INSTRUCTION AND C20 /LOOK AT I BIT SNA CLA /IS IT SET ISZ .-4 /NO, SKIP JMP I .-5 /CONTINUE IN EITHER CASE / /SET THE PDP-8 FIELD FOR ACCESSING LINC MEMORY / SETFLD=JMS I . STFLD / /END OF PAGE ZERO / / SEGMENT 4 / ------------------
*200 / /INITIALIZE THE MONITOR / INIT, DCA ACONT /CLEAR CURRENT MODULE CONTENTS JMP INITM /GO TO INITIALIZATION ROUTINE / /START OF INTERRUPT CHAIN - SAVE PDP-8 REGISTERS / INT, DCA INAC /SAVE PDP-8 AC RAR DCA INL /SAVE PDP-8 LINK ICS1 /GET SWITCH REGISTER ONE SMA CLA /IS STOP SWITCH PRESSED JMP STOP /YES, GO TO STOP SWITCH ROUTINE / /NOTE: TO DISABLE LINC SWITCHES, THE ABOVE INSTRUCTION / MUST BE REPLACED WITH A NOP. / INTS /GET LINC INTERRUPT STATUS DCA INTSAV /AND SAVE ICA /CLEAR LINC INTERRUPTS 7 / /CHECK ALL LINC INTERRUPTS / TAD INTSAV /GET INTERRUPT STATUS SPA CLA /IS IT TAPE INTERRUPT JMP TAPEI /YES ICS1 /GET SWITCH REGISTER ONE DCA SW1 /AND SAVE ICS2 /GET SWITCH REGISTER TWO DCA SW2 /AND SAVE IMBS /GET MEMORY BANK POSITION DCA MEMB /AND SAVE TAD INTSAV /GET INTERRUPT STATUS AND C10 /CHECK FOR RUN INTERRUPT FF SZA CLA /WAS IT SET SAVE /SAVE ALL LINC REGISTERS / /CHECK IF OPR, EXEC OR MTP INSTRUCTION / TAD INTSAV /GET INTERRUPT STATUS RTL SMA /WAS IT EXEC CLASS INTERRUPT? JMP INT3 /NO RTL /YES RTL SPA CLA /WAS IT OPERATE JMP OPRIN /YES SNL /WAS IT EXEC? JMP RET /YES, IGNORE JMS MCALL /MUST BE MAG TAPE INSTR. CTAPEM, TAPEM / /CHECK IF IT IS CONSOLE INTERRUPT / INT3, RTR AND (2600 SZA /ANY OF 3 CONSOLE INTERRUPTS JMP CONSOL /YES / /NOTE: THE ABOVE INSTRUCTION SHOULD BE REPLACED WITH A / JMP RET INSTRUCTION TO DISABLE LINC SWITCHES. / JMP K1SER /CONTINUE INTERRUPT CHAIN / /SEE IF WE WILL HONOR TAPE INTERRUPT / TAPEI, TAD ACONT /GET SWAP AREA CONTENTS TAD CTAPEM /IS TAPE MODULE IN MEMORY? SNA CLA JMP I TAPE /YES JMP RET /NO - WE WILL NOT PROCESS TAPE, INIT /SET RET ADDR BY TP WAIT PRG. / /IT IS OPERATE INSTRUCTION - DECODE / OPRIN, TAD LINS /GET THE INSTRUCTION AND (17 /LOOK AT LAST FOUR BITS TAD (JMP I OPRTAB DCA .+1 0 /JMP I OPRTAB + XX GOES HERE OPRTAB, RET /OPR 00 - UNASSIGNED RET /OPR 01 - UNASSIGNED RET /OPR 02 - UNASSIGNED RET /OPR 03 - UNASSIGNED RET /OPR 04 - UNASSIGNED KREL /OPR 05 - RELEASE TTY SELECTION CLTSW /OPR 06 - CONTROL COULTER INTERFACE STIO /OPR 07 - SET I/O MODE DSC /OPR 10 - DISC OPERATION CLCK /OPR 11 - CLOCK OPERATION CLTR /OPR 12 - COULTER-S RETURN GO8 /OPR 13 - EXECUTE PDP-8 PROGRAM CTIO /OPR 14 - TYPE COMMAND CTIO /OPR 15 - KEYBOARD READ COMMAND RSW /OPR 16 - READ RIGHT SWITCHES LSW /OPR 17 - READ LEFT SWITCHES / SEGMENT 5 / --------------------
/ /READ CONSOLE SWITCHES / LSW, ILES /READ LEFT SWITCHES JMP DOGOA /CONTINUE RSW, LAS /READ RIGHT SWITCHES DOGOA, DCA LNCA /PUT IN LINC AC / /CHECK DO SWITCH THINGS WHENEVER WE RETURN CONTROL TO LINC / DOGO, TAD DOSWT /GET DO SWITCH INDICATOR SPA CLA /IS IT SET JMP DOGOB /NO TAD (400 /YES, SET UP FOR INSTR BY INSTR JMP CONSOL /AND JUMP TO CONSOLE MODULE DOGOB, TAD INTSAV /WAS INST X INST FLOP SET AND (400 SZA JMP CONSOL /YES JMP GO /NO, START LINC / /EXECUTE PDP-8 SUBROUTINE AT ADDRESS IN LINC AC / GO8, JMS I LNCA /JUMP TO ADDRESS IN LINC AC JMP GO1 /DO NOT RESTORE OLD A & P / /A CLOCK OPERATE INSTRUCTION HAS BEEN EXECUTED / CLCK, DCA CFLG /SET CLOCK ENABLE FLAG CLON /START CLOCK TAD LINS /GET THE INSTRUCTION AND C20 /IS I BIT SET SNA JMP DOGO /NO, IGNORE / /IT IS CLOCK RETURN / JMS RETURN /SETUP TO EXIT ISZ FORFLG /IS COULTER S WAITING JMP SCONT /YES, CONTINUE WITH COULTER S JMP DOGO /NO, EXIT / /SETUP TO RETURN TO BACKGROUND PROGRAM / RETURN, 0 /ENTRANCE FETCH /GET FIRST STORED WORD DCA LNCP /PUT IN LINC P SP2 TAD MEM /GET THIRD WORD FETCH DCA .+2 /THIRD WORD IS MEMORY BANK INDICATOR JMS SW /SWITCH MEMORY BANKS 0 JMP I RETURN /CONTINUE / /RETURN FROM COULTER S INTERRUPT / CLTR, TAD (1000 JMS RETURN /SETUP TO EXIT ISZ FORFLG /IS LABMON WAITING JMP CCONT /YES, SERVICE IT JMP DOGO /NO, GIVE CONTROL TO BACKGROUND / /STOP SWITCH WAS PRESSED / STOP, SAVE /SAVE LINC REGISTERS JMP STOPM /AND CALL OVERLAY / /END OF PAGE ONE / / SEGMENT 6 / ---------------------
*400 / /CONTINUE INTERRUPT CHAIN - CHECK KEYBOARD ONE / K1SER, KSF JMP K2SER /NO KRB JMS KSER 1 / /CHECK KEYBOARD NUMBER TWO / K2SER, K2SF JMP TSER /NOPE! K2RB JMS KSER 2 KSER, 0 DCA TEMP2 TAD TEMP2 TAD (-201 /CTRL-A ABSOLUTE CONTROL SNA CLA JMP KINIT TAD TTACT /ANY TTY ACTIVE FOR I/P? SNA JMP KINIT /NO, MAKE THIS ONE CMA IAC TAD I KSER /IS THIS FROM ACTIVE TTY? SZA CLA JMP RET /NO - FLUSH THE CHARACTER! KSER1, TAD TEMP2 DCA ICHR TAD ICHR TAD (-203 /CTRL-C SNA CLA JMP CONC /JMP RET TO NOP CONTROL C TAD FFIM AND (7757 TAD C20 IACF DCA FFIM /KST SET JMS UNWAIT KW / /CHECK PRINTER NUMBER ONE / TSER, TSF JMP T2SER /NOPE TCF JMS TLF /NOP TO ELIMINATE ECHO TLS /CLC TO ELIMINATE ECHO DCA TFLG JMS UNWAIT TW / /CHECK PRINTER NUMBER TWO / T2SER, T2SF JMP SSER /NOPE T2XF JMS TLF /NOP TO ELIMINATE ECHO T2LS /CLC TO ELIMINATE ECHO DCA T2FLG JMS UNWAIT T2W TLF, 0 TAD I TLF DCA TLF1 ISZ TLF TAD LF SNA JMP TLF2 TLF1, 0 CLA DCA LF JMP RET TLF2, CLC JMP I TLF / SEGMENT 7 / ------------------
/ /CHECK IF COULTER-S FLAG / SSER, SFLG /CHECK FLAG JMP CSER /NOPE, CHECK CLOCK CWRD /YES, GET WORD DCA I CLOC /PUT IT IN LINC MEMORY JMS PRTY /SEE IF FOREGROUND ACTIVE JMS FXWAIT /YES, DO SOME GOOD THINGS SCONT, JMS SW /SWITCH TO LMB 2 2 JMS XGO /START LINC AT 1004 1000 / /CHECK CLOCK FLAG / CSER, CLSF JMP RET /NO, IGNORE CLON /START THE CLOCK TAD CFLG /ARE WE HONORING CLOCK INTERRUPTS? SZA JMP RET /CLOCK IN PROGRESS - NO JMS PRTY /CHECK IF FOREGROUND ACTIVE JMS FXWAIT /DO A LOT OF GOOD THINGS CCONT, CLC DCA CFLG /SET CLOCK FLAG JMS SW /SWITCH TO LMB 1 1 JMS XGO /START THE LINC 20 / /SEE IF FOREGROUND ACTIVE / PRTY, 0 /SUBROUTINE ENTRANCE TAD FORFLG /GET FOREGROUND ACTIVE FLAG SZA /IS IT SET JMP FORWAT /YES, ESTABLISH QUEUE CLC /NO, SET IT DCA FORFLG JMP I PRTY /CONTINUE / /FOREGROUND WAS ACTIVE / FORWAT, SM2 /AC TO MINUS 2 DCA FORFLG /SET FLAG JMP RET /CONTINUE LINC / /TIMER FOR TAPE SEARCHES / TIMER, IAC SZA JMP .-2 ISZ TPWC JMP TIMER IOF SM2 TAD LNCP DCA LNCP JMP GO TPWC, 0 / /END OF PAGE TWO / / SEGMENT 8 / ---------------------
*600 / /SET PDP-8 DATA FIELD TO PERMIT ACCESS TO THE LINC /WORD WHOSE LINC ADDRESS IS IN "MEM". / STFLD, 0 DCA TEMP /SAVE AC TAD MEM /GET LINC ADDRESS CLL RAL /SEE IF WE ARE UMB OR LMB CLL RAL DCA MEMT /SAVE TAD MEMB /GET CURRENT MEMORY BANKS SNL /LINC=1 IF QN >3 JMP .+4 /WE ARE USING LMB RTR /ROTATE FOUR RIGHT RTR SKP RAL DCA STF1 /SAVE RESULT TAD STF1 /SEE IF WE ARE IN UPPER RTR /HALF OF CORE BANK AND (1 /MASK THIS BIT TAD MEMT /ADD IN PREVIOUS ADDRESS RTR /RESTORE CORRECT POSITION TAD (-1 /MUST BE ADDR -1 FOR AUTOINDEX REG DCA MEMT /PUT IN AUTOINDEX REG TAD STF1 /GET BANK INDICATOR AND C70 /MASK ALL BELOW BANK 4 TAD CCDF /ADD CDF INSTR DCA STF1 /RESULT IS CDF X TAD TEMP /RESTORE ACCUMULATOR STF1, 0 /DO CDF JMP I STFLD /EXIT / /CALL A NON-RESIDENT MONITOR OVERLAY MODULE /IF IT IS NOT ALREADY IN CORE. / MCALL, 0 /SUBROUTINE ENTRANCE DCA TEMP /SAVE AC TEST, TAD ACONT /CURRENT MODULE NBR (NEG) TAD I MCALL /MODULE NBR SNA CLA /IF = THEN GO THERE JMP MCALX TAD (SWAPA-1/1377 DCA CADR /1377 TO CADR DCA DEXT /CLEAR DEXT DCA CEXT /CLEAR CEXT TAD I MCALL /TAKE MODULE # DCA DADR /PUT IT IN DADR JMS DREAD /GO GET MODULE TAD SWAPA /TAKE MODULE # NEG. DCA ACONT /PUT IT IN ACONT JMP TEST /CHECK FOR GOOD READ MCALX, TAD TEMP JMP SWAPA+1 /LOC 1 IN TRANSIENT AREA / /GET THE CONTENTS OF LINC P+1 / GETP1, 0 TAD LNCP /GET P COUNTER ISZ LNCP /NOW INCREMENT COUNT FETCH /THE WORD DCA SBN /PUT IN LOCATION "SBN" JMP I GETP1 /EXIT / SEGMENT 9 / -------------------
/ /RESTORE LINC LOCATIONS 20 AND 21 /IF DO SWITCH HAS BEEN USED. / RS20, 0 TAD DOSWT /GET DO SWITCH FLAG SZA CLA /IS IT SET JMP I RS20 /NO, EXIT RS20I, 0 /BECOMES CDF TAD SV20 /HOLDS PREVIOUS CONTENTS OF 20 DCA I RS20F /RESTORES 20 & 21 INTO PROPER BANKS ISZ RS20F TAD SV21 /HOLDS PREVIOUS CONTENTS OF 21 DCA I RS20F CDF ISZ DOSWT /INSURE ONLY 1 RESTORE JMP I RS20 /EXIT RS20F, 0 / /SET MEMORY FOR QUARTER NUMBER IN "QN" / STMEM, 0 TAD QN /GET QUARTER NUMBER RTR /MAKE PARTIAL PDP-8 ADDRESS RTR RAR AND (3400 /CLEAR EXTRANEOUS BITS DCA MEM /SAVE RESULT SETFLD /MAKE PDP-8 ADDRESS AND CDF CDF /RESTORE CDF 0 TAD STF1 /GET NEW CDF JMP I STMEM /EXIT / /PUT PROGRAM INTO WAIT STATUS / WAIT, 0 SP1 DCA JOBS /SAVE TAD WAIT /GET RETURN P COUNTER WAITL, DCA JOBPC /SET UP TO RETURN ION /WAIT FOR SOMETHING TO HAPPEN TAD JOBS /PUT JOB IN AC JMP . /WAIT FOR INTERRUPT / /SEE IF THE INTERRUPT SHOULD TAKE US /OUT OF WAIT STATUS. / UNWAIT, 0 CLA TAD I UNWAIT /GET UNWAIT ARGUMENT CMA IAC TAD JOBS /COMPARE IT WITH CURRENT JOB SZA CLA /IS IT THE SAME JMP RET /NO, IGNORE DCA JOBS /YES, CLEAR JOBS JMP I JOBPC /AND GO TO JOB EXIT / /MODULE CALLERS. THESE FURNISH THE CORRECT /INPUT TO THE MCALL ROUTINE FOR THE APPROPRIATE MODULE. / CONSOL, JMS MCALL /CALL CONSOLE MODULE CONM CTIO, JMS MCALL /CALL TTY MODULE TIOM CONC, IAC /CONTROL C KREL, IAC /KEYBOARD RELEASE KINIT, IAC /KEYBOARD SELECT STIO, IAC /SETUP I-O MODE STOPM, IAC /STOP SWITCH PRESSED INITM, JMS MCALL /INITIALIZE, CALL SETUP MODULE SUBM / /SET UP FOR A GROUP TRANSFER / SETG, 0 TAD SBN /GET SECOND INSTR WORD RTL RTL AND C7 /GET QUARTER COUNT CMA DCA QCT /ONES COMP TO QCT TAD SBN /GET WORD AGAIN AND C7 /GET STARTING QUARTER NBR DCA QN /PUT IN QN JMP I SETG /AND EXIT / /END OF PAGE THREE / / SEGMENT 10 / ---------------------
*1000 / /CHECK TO SEE IF CONDITIONS ARE RIGHT FOR US TO /GIVE CONTROL TO THE FOREGROUND PROGRAM AND /IF THEY ARE NOT RIGHT MAKE THEM RIGHT. / FXWAIT, 0 CLC TAD JOBS /IS THE LINC WAITING? SNA CLA JMP I FXWAIT /YES TAD JOBS /NO, SEE IF TAPE IS OPERATING TAD (-TPW SZA CLA /IS TAPE OP IN PROGRESS? JMP FXWXT /NO - CHECK OTHER THINGS SM2 /YES, SEE THAT IT RECOVERS TAD LNCP /THIS BACKS UP THE LINC P TO DCA LNCP /THE START OF THE TAPE OP. CLC DCA TIFLG /SET TAPE INTERRUPT FLAG ICA /CLEAR SEARCH MODE 4 ICA /CLEAR BLOCK MODE 6 JMP I FXWAIT /EXIT FXWXT, SP1 DCA JOBS /INSURE NO INTERRUPTS RESTART JOB TAD INTSAV AND C10 /IS LINC RUNNING? SNA CLA JMP I FXWAIT /NO TAD LNCP /YES, CHECK IF LMB INSTR FETCH /GET NEXT INSTRUCTION AND (6000 TAD (-6000 SZA CLA /IS IT A JUMP JMP I FXWAIT /NO JMS XCT /YES - DO 1 MORE INSTR. SAVE /REGISTERS AGAIN JMP I FXWAIT / /STORE PERTINENT LINC REGISTERS IN LINC MEMORY /AND THEN START THE LINC AT ARGUMENT LOCATION +4. / XGO, 0 TAD I XGO /GET ARGUMENT DCA MEM /PUT IT IN TEMP STORAGE TAD LNCP /PUT P-CTR IN LOC (ARG) STORE /THEN INCREMENT MEMORY TAD LINS /PUT LINC INSTR IN ARG+1 STORE /INC MEM AGAIN TAD SMEMB /GET MB SETTINGS AND (1740 /MOVE UMB BITS LEFT ONE TAD SMEMB /PUT MB IN ARG+2 STORE /INCR MEM AGAIN IZSA /GET LINC Z REGISTER IAAC /PUT IN ARG+3 STORE /INCR MEM AGAIN TAD MEM /PUT ARG+4 IN LINC P CTR DCA LNCP JMP GO /START THE LINC / SEGMENT 11 / ---------------
/ /SWITCH LINC CORE BANKS TO BANK IN P+1 / SW, 0 /ENTER WITH NEW BANK IN P+1 TAD I SW /GET NEW CORE BANK AND (37 /REMOVE ANY UMB COMPONENT TAD CLMB /MAKE AN LMB INSTR. DCA SWI /SAVE IT TAD MEMB /GET CURRENT MEMORY BANK SETTINGS DCA SMEMB /SAVE TAD C20 /GET CURRENT CONTENTS OF FETCH /LOCATION 20 OF THIS BANK DCA SV20 /AND SAVE TAD MEMT /GET THE PDP-8 ADDRESS OF LAST WORD DCA SWA20 /SAVE IT TAD STF1 /SAVE FIELD INSTRUCTION TO DCA SCDF /HELP IN RESTORE TAD SWI /GET LMB INSTR DCA MEMB /SAVE IT FETCH /LOCATION 0 OF NEW BANK DCA SV21 /SAVE IT TAD SMEMB /GET CURRENT MEMORY BANK DCA MEMB /RESTORE JMS XCT1 /EXECUTE THE LMB INSTRUCTION SWI, 0 /BECOMES LMB INSTRUCTION JMS XCT1 /EXECUTE A JUMP INSTRUCTION 6005 /FAKE JUMP INSTRUCTION SCDF, 0 /RESTORE DATA FIELD TAD SV20 /GET CONTENTS OF LOCATION 20 DCA I SWA20 /PUT BACK IN PLACE CDF /BACK TO DATA FIELD ONE DCA MEM /WE WILL RESTORE LOC 0 OF NEW BANK TAD SV21 /GET OLD CONTENTS STORE /PUT THEM AWAY ISZ SW JMP I SW /CONTINUE / /EXECUTE ONE INSTRUCTION IN LINC MODE / XCT1, 0 TAD C20 /WE WILL USE LOC 20 OF THIS BANK DCA MEM /TO STORE INSTR TO BE EXECUTED TAD I XCT1 /GET INSTR ISZ XCT1 STORE /PUT IN LOC 20 TAD C20 /SET LINC P TO 20 ISSP JMS XCT /EXECUTE THE INSTRUCTION JMP I XCT1 /CONTINUE / /EXECUTE ONE INSTRUCTION PER LINC P REGISTER / XCT, 0 CLA TAD (400 IACF /SET THE INST X INST FLOP TAD C12 ICON /START THE LINC - IT STOPS AFTER ONE ICA /INSTR BECAUSE OF INST X INST FLOP 7 /CLEAR ALL INTERRUPTS TAD FFIM /GET PREVIOUS FLOP CONDITIONS IACF /AND RESTORE THEM CLA IMBS /GET NEW MEMORY BANK SETTINGS DCA MEMB /SAVE THEM JMP I XCT /CONTINUE SWA20, 0 CLMB, 600 SMEMB, 0 / /TURN COULTER INTERFACE ON OR OFF / CLTSW, SKWB /IS I BIT SET JMP CLT1 /YES / /TURN INTERFACE ON / CONN JMP DOGO / /TURN INTERFACE OFF / CLT1, COFF CLA CLL JMP DOGO / /END OF PAGE FOUR / / SEGMENT 12 / -------------------
*1200 / /DISC READ ENTRANCE. / DREAD, 0 JMS DISC DMAR JMS CROCK /HANDLE LAST PAGE C1377, 1377 7377 JMP I DREAD / /DISC WRITE ENTRANCE. / DWRITE, 0 JMS CROCK 7377 1377 JMS DISC DMAW JMP I DWRITE / /DISC READING AND WRITING SUBROUTINE. HANDLES EITHER A /DF32 OR A RF08 DISC. / DISC, 0 TAD I DISC DCA DIC1 ISZ DISC DISC1, TAD I L7750 DCA TEMP10 TAD I L7751 DCA TEMP11 TAD CADR /GET CORE ADDR TAD (-7377 /TEST FOR PAGE SZA /CONTAINING 7750, 7751 TAD (7377-1377 /& CHANGE CADR TO 1377 TAD C1377 DCA I L7751 TAD C7400 DCA I L7750 CLC CLL /TEST FOR DF32 OR RF08 DEAL /CLEARS AC IF RF08 RAL /INDICATOR IN AC 0 & L DCA TEMP12 TAD DEXT SNL 6643 /RF08, LOAD DISK EXT CLL RTL /IF DF32 DEXT IN AC - IF RF08 AC=0 RTL RTL TAD CEXT DEAL CLA TAD CEXT /TEST CORE EXT BITS SNA CLA JMP .+3 /FIELD 0 CUR 7751 OK TAD CADR /NOT 0, USE ORIG CADR DCA I L7751 TAD DADR DIC1, 0 /BECOMES RD OR WRT COMMAND DFSC JMP .-1 /TRY AGAIN TAD TEMP10 DCA I L7750 TAD TEMP11 DCA I L7751 TAD TEMP12 DFSE /SKP IF ERROR RFO8, NO ERROR DF32 CMA /SET AC - IF RF08 AND NO ERROR SMA CLA /SKIP IF NO ERRORS (AC-) JMP DISC1 /ERRORS, TRY AGAIN DCEA /CLEAR EXTENDED ADDR REGS DCMA /CLEAR MAR AND FLAGS JMP I DISC /RETURN FROM SUBROUTINE / SEGMENT 13 / ------------------
/ /HANDLE THE READ OR WRITE IF WE ARE TRYING TO GET /TO OR FROM Q3 BANK 3 OF LINC MEMORY. CAN'T GO DIRECT /AS OUR CONTROL WORDS (7750 & 7751) ARE THERE. / CROCK, 0 TAD I CROCK DCA TEMP10 ISZ CROCK TAD I CROCK DCA TEMP11 ISZ CROCK TAD CEXT TAD CADR TAD (-7377 SZA CLA JMP I CROCK DCA ACONT /USES TRANSIENT AREA FOR BFFR TAD C7400 DCA TEMP12 TAD I TEMP10 DCA I TEMP11 ISZ TEMP12 JMP .-3 JMP I CROCK / /AN OPERATE 10 INSTRUCTION WAS ISSUED. SEE IF WE /ARE READING OR WRITING AND SET UP. / DSC, TAD DREADF DCA DMODE SKWB ISZ DMODE /FIX FOR A WRITE JMS GETP1 /C(P+1) INTO SBN JMS SETG /SET FOR GRP RD OR WRT JMS RS20 DOBLK, TAD LNCA /GET DISC BLOCK NBR RTR /CALCULATE TRACK NUMBER RTR DCA DEXT /STORE HERE TAD DEXT RAR /CALCULATE DISC ADDRESS AND C7400 DCA DADR TAD DEXT /GET TRACK NUMBER AND DADRM /NUMBER OF TRACKS IN SYSTEM DCA DEXT JMS STMEM AND C70 DCA CEXT /CORE EXTENSION DMODE, JMP . ISZ LNCA ISZ QN ISZ QCT JMP DOBLK DCA TIFLG JMP DOGOA DREADF, JMS I .+1 DREAD DWRITE L7750, 7750 L7751, 7751 C7400, 7400 / /END OF PAGE FIVE AND END OF RESIDENT MONITOR / / SEGMENT 14 / -----------------



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search