IDENT GENLINT LIST X,L,R INTSYS XTEXT EJECT * * * EXT I.MUXP EXT I.SDVCP EXT S.MASTR,S.QUANT,S.CHARG EXT S.ARITH,S.CHIP,S.FSWAP EXT S.USERA EXT E.ECS EJECT * * GENERAL DATA FOR INTERRUPTS * I.WAKE BSSZ 1 INTERRUPT SIGNALLING CELL EJECT * * KARLS DISPLAY STUFF * ENTRY I.MSM * I.MSM VFD 60/=XDISASTR VFD 60/=XS.MASTR VFD 60/=XS.USRTM VFD 60/=XS.IDLTM VFD 60/=XS.SWPTM VFD 60/=XS.SYSTM VFD 60/=XL.SPACE ECS FREE SPACE DATA 4 MAP COMPILATIONS CELL VFD 60/=XS.CHARG VFD 60/=XL.SLOP ECS TIED UP AS SLOP VFD 60/=XL.NFBLK NUMBER OF FREE BLOCKS VFD 60/=XE.ECS1 VFD 60/=XS.TIME VFD 60/=XL.NBLKS NUMBER OF BLOCKS IN USE EJECT * * ECS READ AND WRITE MACROS * RECS MACRO CNT RE CNT RJ E.ECS ENDM * WECS MACRO CNT WE CNT RJ E.ECS ENDM EJECT * * LIST OF P COUNTER VALUES FOR EACH INTERRUPT PACKAGE * I.PLIST BSSZ 1 VFD 60/I.MUXP VFD 60/I.SDVCP S DEVICE ENTRY POINT VFD 60/=XI.DISKP DISK ENTRY POINT VFD 60/=XI.DSPP DISPLAY VFD 60/=XI.DSPP1 DISPLAY, DOESN^T CHECK ILOCK BSSZ 14 EJECT * * INTERRUPT XJ BOX * ENTRY I.BOX * I.BOX BSSZ 1 PCOUNTER FILLED IN BY MPP BSSZ 5 RA S AND FL S FILLED IN BY INITL BSSZ 10 EJECT * * DATA FOR MASTER PPU * ENTRY I.MAST * * * ( NUMBERS IN COL 36 ) * I.MAST VFD 60/S.MASTR 0 MASTER CLOCK ADDRESS VFD 60/S.QUANT 1 QUANTUM CLOCK ADDRESS VFD 60/S.CHARG 2 CHARGE CLOCK ADDRESS * VFD 60/S.ARITH 3 XJ BOX FOR USER ARITH ERROR VFD 60/S.CHIP 4 XJ BOX FOR USER RA + 1 NON 0 VFD 60/S.FSWAP 5 XJ BOX FOR QUANTUM RUN OUT VFD 60/I.BOX 6 XJ BOX FOR INTERRUPTS * VFD 60/S.USERA 7 CELL WHICH GIVES USER RA VFD 60/I.WAKE 8 ADDRESS OF CELL WHICH WILL * SIGNAL INTERRUPT REQUESTS VFD 60/I.PLIST 5 LIST OF P COUNTERS FOR INTS EJECT * * HANG A PSEUDO PROCESS ON AN EVENT CHANNEL * * ENTER WITH * * B7 RETURN * X1 MOT INDES OF PSEUDO PROCESS * X2 MOT AND UNIQUE NAME OF EVENT CHANNEL * X3 ABS ECS ADDRESS OF PSEUDO PROCESS * * MAY CALL UNHUNG1, DESTROYS ALL REGISTERS * ENTRY HANG1 ENTRY INTSCR EXT HANG * HANG1 SX6 B7 SA6 HANG1.A SAVE RETURN SB2 1 BX6 X3 SA6 HANG1.B SAVE ABS ADDRESS OF PROCESS SB7 HANG1.1 SB1 INTSCR JP HANG HANG1.1 SA1 HANG1.A SB7 X1 PL X2,HANG1.2 TEST FOR EVENT WAITING ON CHAN JP B7 NO HANG1.2 SA1 HANG1.B YES, CALL UNHUNG1 JP UNHUNG1 * HANG1.A BSSZ 1 HANG1.B BSSZ 1 * * BSSZ 1 INTSCR BSSZ P.SCRL EJECT * * UNHUNG1 CODE CALLED WHENEVER A PSEUDO PROCESS * RECIEVES AN EVENT. * RETURN ADDRESS IN B7 * SCRATCH AREA IN B1 ( AT LEAST 8 WORDS ) * ABS ECS ADDRS OF PROCESS IN X1 * EVENT IN X6, X7 * * PROCESS HAS ALREADY BEEN UNCHAINED FROM EVENT CHANS * ENTRY UNHUNG1 * UNHUNG1 BX0 X1 SA0 B1+PROCESS RECS PSIZE GET PROCESS DATA SA6 B1+EVENTWD1 STORE EVENT SA7 B1+EVENTWD2 SA2 B1+CONTWD MX6 60-12 BX6 -X6*X2 FLAG AN INTERRUPT PROCESS UNHUNG4 SA3 I.WAKE MAKE SURE CELL IS CLEAR NZ X3,UNHUNG4 SA6 I.WAKE THEN SIGNAL THE INTERRUPT ROUTINE AX2 18 GET QUEUE ADDRESS BX0 X2 SA0 B1+QFIRST RECS 2 GET QUEUE DATA SA3 B1+QLAST PICK UP CURRENT LAST BX6 X1 SA6 B1+QLAST MAKE LAST POINT TO NEW PROCESS ZR X3,UNHUNG3 QUE WAS EMPTY SX0 1 IX0 X0+X3 SA0 B1+QLAST WECS 1 MAKE OLD LAST PROCESS POINT TO THIS ONE UNHUNG2 SX6 B0 SA6 B1+CHAINWD MAKE THIS PROCESS POINT TO 0 BX0 X1 SA0 B1+PROCESS WECS PSIZE WRITE BACK PROCESS DATA BX0 X2 SA0 B1+QFIRST WECS 2 WRITE BACK QUEUE DATA JP B7 RETURN * UNHUNG3 BX6 X1 QUEUE WAS EMPTY SA6 B1+QFIRST SET FIRST TO THIS PROCESS ALSO JP UNHUNG2 EJECT * * FORM OF SCRATCH AREA FOR UNHUNG1 * USE SPEC ORG 0 PROCESS BSS 1 CHAINWD BSS 1 ZWD BSS 1 CONTWD BSS 1 EVENTWD1 BSS 1 EVENTWD2 BSS 1 * BSS 0 PSIZE EQU *-PROCESS * QFIRST BSS 1 QLAST BSS 1 * USE * EJECT * * D QUEUE A P PROC FROM AN INTERRUPT QUEUE * * ENTER WITH INTERRUPT QUEUE ADDRS IN X1 * * RETURNS WITH ABS ADDRS OF P PROC IN X2, OR ZERO * ENTRY DINTQ * DINTQ BSSZ 1 BX0 X1 SA0 QFIRSTX RECS 2 SA2 QFIRSTX ZR X2,DINTQ BX0 X2 SA0 PPROC RECS PPROCSZ SA3 CHNWD BX6 X3 SA6 QFIRSTX NZ X6,DINTQ1 SA6 QLASTX DINTQ1 BX0 X1 SA0 QFIRSTX WECS 2 BX6 X6-X6 SA6 CHNWD BX0 X2 SA0 PPROC WECS PPROCSZ JP DINTQ * * QFIRSTX BSSZ 1 QLASTX BSSZ 1 * * PPROC BSSZ 1 CHNWD BSSZ 1 * PPROCSZ EQU *-PPROC END