├── README.md ├── doc ├── CS-TR-74-407.pdf ├── CS-TR-81-839.pdf ├── SAILDART_PREVIEW_3June_2019_12x12.pdf ├── SAILDART_Prolegomenon_2016.pdf └── uuo_manual.pdf ├── monmonman-blue-green.svg ├── neonwaitwalk2.gif ├── sys └── J17-1974 │ ├── FREE.DMP │ ├── KSEG.DMP │ ├── MONMON.DMP │ ├── STTGET.DMP │ ├── STTINT.DMP │ ├── SYSTEM.DMP │ ├── adcser.MAC │ ├── adser.MAC │ ├── alldat.17b.MAC │ ├── alldat.17d.MAC │ ├── alldat.MAC │ ├── clkser.MAC │ ├── comcss.MAC │ ├── core.MAC │ ├── ddt.MAC │ ├── dpyser.MAC │ ├── dskint.17b.MAC │ ├── dskint.17d.MAC │ ├── dskint.MAC │ ├── dskser.16s.MAC │ ├── dskser.17b.MAC │ ├── dskser.17d.MAC │ ├── dskser.MAC │ ├── dtcser.MAC │ ├── elfser.MAC │ ├── fbpack.MAC │ ├── free.MAC │ ├── impclk.MAC │ ├── impddb.MAC │ ├── impint.MAC │ ├── impreg.MAC │ ├── impuuo.MAC │ ├── jobdat.MAC │ ├── libcnt.MAC │ ├── lined.MAC │ ├── lowcor.MAC │ ├── lptser.MAC │ ├── lup.MAC │ ├── mail.MAC │ ├── monmon.MAC │ ├── mtcser.MAC │ ├── once.MAC │ ├── outer.MAC │ ├── parser.MAC │ ├── patch.MAC │ ├── ptpser.MAC │ ├── ptrser.MAC │ ├── schedu.MAC │ ├── spwser.MAC │ ├── sttget.MAC │ ├── sttint.sai │ ├── sys.cmd.MAC │ ├── sys.lod.MAC │ ├── sysini.MAC │ ├── sysmak.MAC │ ├── ttyser.MAC │ ├── tvser.MAC │ ├── ueddt.log │ ├── uuocon.MAC │ └── xgpser.MAC ├── twe └── advent.drw └── waits.gif /README.md: -------------------------------------------------------------------------------- 1 | # Stanford WAITS - Western Artificial Intelligence Time Sharing. 2 | 3 | The name WAITS is a retronym for the PDP-6/10 Stanford A.I. Lab operating system software which flourished from 1966 to 1990. 4 | The WAITS operating system was one of the tens of large lumps of software at the dawn of time sharing in the 1960s. WAITS survived and evolved at Stanford for 25 years and died without any surviving successors. At Stanford Computer Science Department, WAITS was displaced by Unix. WAITS forked FOONEX and a short lived Livermore site; neither of which out lasted the 1990 end of WAITS. 5 | 6 | WAITS, like its Eastern cousin ITS, supported time sharing, graphical user interfaces, real time control of experimental robotic equipment, nascent multimedia for audio voice recognition, audio for music generation, video for computer vision, video processing (second to JPL) for the first Mars orbital mission, Mariner-9, and generation of video for computer graphics. WAITS as Foonly supported the first Hollywood CGI film, Westworld 1973. 7 | 8 | WAITS, like its Digital parent, came with a Fortran, an Assembler, and a debugger; all of which were superceded by programs named LISP, SAIL, FAIL, RAID and so on. 9 | 10 | The first decade of Time Sharing technology included MIT AI with Digital Equipment, MIT and Multics with General Electric, BBN Bolt Bernack Newman. 11 | The East West software schism occured in 1966, when John McCarthy with Lester Earnest and Arthur Samuel moved the Stanford Artificial Intelligence Project to the D.C.Power building and obtained a PDP-6 with the Digital Operating System named "Monitor". In 1968 a PDP-10 KA was installed as primary, followed by a KL in 1976. 12 | 13 | ## Time Line 14 | 15 | major version | first | final | configuration 16 | ------------- | ---------- | ---------- | ---------------------------------- 17 | 6 | 1966 | 1975 | KA10 two segments 18 | 7 | 1975-04-23 | 1976-06-10 | KA10 BBN pager 19 | 8 | 1976-06-11 | 1978-12-29 | KL10 20 | 9 21 | 22 | -------------------------------------------------------------------------------- /doc/CS-TR-74-407.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/CS-TR-74-407.pdf -------------------------------------------------------------------------------- /doc/CS-TR-81-839.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/CS-TR-81-839.pdf -------------------------------------------------------------------------------- /doc/SAILDART_PREVIEW_3June_2019_12x12.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/SAILDART_PREVIEW_3June_2019_12x12.pdf -------------------------------------------------------------------------------- /doc/SAILDART_Prolegomenon_2016.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/SAILDART_Prolegomenon_2016.pdf -------------------------------------------------------------------------------- /doc/uuo_manual.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/doc/uuo_manual.pdf -------------------------------------------------------------------------------- /monmonman-blue-green.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | Monmon Man 9 | SAIL III display plot file 10 | 11 | 12 | 13 | 14 | 18 | 19 | 20 | 24 | 25 | 26 | 27 | 35 | 36 | 44 | 45 | 55 | 56 | 59 | 60 | 61 | 62 | 63 | -------------------------------------------------------------------------------- /neonwaitwalk2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/neonwaitwalk2.gif -------------------------------------------------------------------------------- /sys/J17-1974/FREE.DMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/FREE.DMP -------------------------------------------------------------------------------- /sys/J17-1974/KSEG.DMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/KSEG.DMP -------------------------------------------------------------------------------- /sys/J17-1974/MONMON.DMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/MONMON.DMP -------------------------------------------------------------------------------- /sys/J17-1974/STTGET.DMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/STTGET.DMP -------------------------------------------------------------------------------- /sys/J17-1974/STTINT.DMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/STTINT.DMP -------------------------------------------------------------------------------- /sys/J17-1974/SYSTEM.DMP: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/SYSTEM.DMP -------------------------------------------------------------------------------- /sys/J17-1974/adser.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00006 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 BEGIN ADSER  SUBTTL ADSER A/D SERVICE ROUTINE - J. SAUTER, STANFORD, 25-FEB-68 5 | C00003 00003 SYSTEM INITIALIZATION OF AD 6 | C00005 00004 INPUT/OUTPUT UUOS 7 | C00009 00005 HERE AT P1 CLOCK LEVEL. READY TO TELL P2 TO START. 8 | C00011 00006 HUNG: SETOM ADERR 9 | C00013 ENDMK 10 | C; 11 | BEGIN ADSER  SUBTTL ADSER A/D SERVICE ROUTINE - J. SAUTER, STANFORD, 25-FEB-68 12 | 13 | 14 | DEFINE CAT!(A,B), 15 | ADCHL_CAT(CH,\ADCHN) 16 | 17 | JRST ADSET ;INITIALIZE 18 | JRST HUNG ;HUNG: PRINT MESS & STOP JOB. 19 | ^ADDSP: POPJ P, ;RELEASE 20 | POPJ P, ;CLOSE 21 | JSP DAT,UERROR ;BUFFERED OUTPUT 22 | JSP DAT,UERROR ;BUFFERED INPUT 23 | JRST CPOPJ1 ;ENTER 24 | JRST CPOPJ1 ;LOOKUP 25 | JRST ADOUT ;DUMP OUTPUT (REALLY DAC) 26 | JRST ADIN ;DUMP INPUT 27 | POPJ P, ;USETO 28 | POPJ P, ;USETI 29 | POPJ P, ;UGETF 30 | JRST CPOPJ1 ;RENAME 31 | POPJ P, ;CLOSE INPUT 32 | POPJ P, ;UTPCLR 33 | POPJ P, ;MTAPE 34 | 35 | ;SYSTEM INITIALIZATION OF AD 36 | ADSET: MOVEI TAC,40+ ;ASSUMED LOCATION OF PI CHANNEL WORDS 37 | SKIPN TAC1,P2NUM ;IS P2 ACTIVE? 38 | MOVE TAC1,P1NUM ;NO. 39 | TLNE TAC1,MAOFF ;IS THIS P IN MA OFFSET? 40 | ADDI TAC,100 ;YES: ADD OFFSET. 41 | MOVEM TAC,ADBLK ;STORE LOCATION OF BLKI/O INSTRUCTION 42 | MOVE TAC1,[JSR CAT(CH,\ADCHN)] ;LOAD JSR FOR P1. 43 | SKIPE P2NUM ;ARE WE USING P2? 44 | MOVE TAC1,[JSR CAT(P2CH,\ADCHN)] ;YES. LOAD JSR FOR P2 45 | MOVEM TAC1,1(TAC) ;STUFF IT INTO SECOND PI LOCATION 46 | MOVEM TAC1,ADJSR ;AND SAVE THE INSTRUCTION HERE 47 | ADDI TAC,1 48 | MOVEM TAC,ADJSRL ;POINTER TO THE JSR TO INTERRUPT ROUTINE. 49 | SETZM ADBKO 50 | SETZM ADADV 51 | POPJ P, 52 | ;INPUT/OUTPUT UUOS 53 | ADIN: TLZA IOS,IO ;CLEAR IO AND SKIP 54 | ADOUT: TLOA IOS,IO ;SET IO AND SKIP 55 | SKIPA TAC,[BLKI DCB,ADBKO] ;FOR INPUT GET BLKI AND SKIP. 56 | MOVE TAC,[BLKO DCB,ADBKO] ;FOR OUTPUT, GET BLKO 57 | MOVEM TAC,@ADBLK ;STORE BLKI/O IN FIRST PI LOCATION 58 | HRRZ TAC,UUO ;NOW ADDRESS CHECK 59 | CAMLE TAC,USRREL 60 | JRST ADRERR ;COMMAND WORD OUT OF BOUNDS. 61 | HRRZ TAC,@UUO ;GET FIRST IOWD. 62 | HLRO DAT,@UUO 63 | SUB TAC,DAT ;IS FINAL ADDRESS IN BOUNDS? 64 | CAMLE TAC,USRREL 65 | JRST ADRERR ;NO. 66 | MOVE TAC,@UUO ;YES. 67 | ADDI TAC,(PROG) ;FORM ABSOLUTE ADDRESS. 68 | MOVEM TAC,ADBKX ;STORE AS THE BLKO/I WORD 69 | MOVEI TAC,@UUO ;GENERATE ABSOLUTE ADDRESS 70 | MOVE TAC1,1(TAC) ;CONO TO 136. 71 | ANDCMI TAC1,7 ;REMOVE HIS PI NUMBER... 72 | IORI TAC1,ADCHN ;AND INSERT OURS 73 | HRRZM TAC1,ADLOC3 ;PUT WHERE IT WILL BE HIT. 74 | HRRZ TAC1,2(TAC) ;CONO TO 424. 75 | HRRZM TAC1,ADLOC4 ;REMEMBER IT LIKEWISE. 76 | MOVEI TAC1,3(TAC) ;CONI FROM 136. 77 | HRRZM TAC1,ADLOC1 ;TO BE REMEMBERED 78 | MOVEI TAC1,4(TAC) ;CONI FROM A/D. 79 | HRRZM TAC1,ADLOC2 ;LIKEWISE. 80 | PUSHJ P,SETACT ;MARK A/D IN USE AND STOP JOB. 81 | AD2: MOVEI DDB,ADDDB 82 | MOVE IOS,DEVIOS(DDB) 83 | LDB TAC,PIOMOD ;GET MODE. 84 | ; CAIN TAC,SD ;MODE 15? - FLUSHED 8/7/73 85 | ; POPJ P, ;YES. RETURN. - 86 | TRNE IOS,100 ;CONTINUOUS MODE ? 87 | JRST FOO ;YES. 88 | CAIN TAC,D ;17? 89 | SKIPA TAC,[CLOC3,,1] ;YES. JUST WAIT ONE JIFFIE. 90 | WT: MOVE TAC,[CLOC2,,3] ;NO. GET CLOCK DESCRIPTOR. 91 | CONO PI,PIOFF 92 | IDPB TAC,CLOCK ;ENTER CLOCK REQUEST 93 | CONO PI,PION 94 | POPJ P, ;RETURN TO UUOCON. 95 | 96 | FOO: ;CONTINUOUS MODE. 97 | MOVE TAC,[JSR AD2INT] ;MAKE INTERRUPT GO TO RIGHT PLACE. 98 | MOVEM TAC,@ADJSRL 99 | HRRZM TAC,ADADV ;PREPARE TO GET JOB RESTARTED AT ONCE. 100 | SKIPL ADBKO ;IS OUTPUT ALREADY GOING ON ? 101 | JRST CLOC3 ;NO. START IT. JOB WILL GO ON SINCE ADADV>0. 102 | MOVE TAC,ADBKX ;YES. SAVE PTR. FOR NEXT BUFFER. 103 | MOVEM TAC,ADADV ;ADADV ALSO SERVES AS A FLAG (SEE ADP1). 104 | POPJ P, 105 | ;HERE AT P1 CLOCK LEVEL. READY TO TELL P2 TO START. 106 | CLOC2: CONSO TV,1B28 ;IS BUTTON BEING PUSHED? 107 | JRST WT ;NO. WAIT ANOTHER 3 TICKS 108 | CLOC3: SETZM ADERR 109 | MOVE TAC,ADBKX ;GET BLKI/O WORD. 110 | MOVEM TAC,ADBKO 111 | SETOM ADACT ;TELL P2 TO START RUNNING 112 | SKIPE P2NUM ;IF THERE'S NO P2, WE DO IT OURSELVES. 113 | POPJ P, ;WAIT FOR P2 CLOCK LEVEL TO START IT. 114 | ^ADP2: MOVE TAC,ADACT ;HERE FROM P2 CLOCK LEVEL (OR P1 IF NO P2) 115 | JUMPE TAC,CPOPJ ;P2 DOESN'T SKIPN ON 2 PROCESSOR CELLS. 116 | SKIPE ADERR ;ERRORS YET? 117 | JRST AD6 ;YES. GO BLAST IT 118 | SETZM ADACT ;CLEAR CLOCK LEVEL REQUEST FLAG 119 | CONO AD,4000 ; STOP IT IF IT IS RUNNING 120 | MOVEI TAC,20 ; WAIT FOR IT 121 | SOJG TAC,. 122 | CONO ADC,0 ; KILL NEW AD-DA IF RUNNING 123 | CONO DAC,0 ; OTHERWISE, WILL LOOP WITHOUT JSR P2CH1 124 | MOVSI TAC,() 125 | HLLM TAC,ADJMP ; MAKE US JUMP TO APPROPRIATE ROUTINE 126 | CONO DCB,@ADLOC3 127 | CONO AD,@ADLOC4 128 | CONO PI,ADON 129 | POPJ P, 130 | 131 | ;HERE TO STOP THE AD 132 | AD6: CONO DCB,200000 ;BLAST THE 136. 133 | CONO AD,4000 ;AND THE A/D 134 | CONO PI,ADOFF ;TURN OFF A/D CHANNEL. 135 | MOVSI TAC,() 136 | HLLM TAC,ADJMP ; KILL AD INTERRUPT JUMP 137 | MOVE TAC,ADJSR ;MAKE INTERRUPTS GO TO NORMAL PLACE. 138 | MOVEM TAC,@ADJSRL 139 | SETZM ADBKO ;NO XFER IN PROGRESS. 140 | POPJ P, ;AND RETURN. 141 | HUNG: SETOM ADERR 142 | SETOM ADACT 143 | SETZM ADBKO 144 | JRST AD5 145 | 146 | ^ADINT: ;BLKO OVERFLOWED 147 | JSR @ADSAV ;SAVE ACCUMULATORS. 148 | CONI DCB,@ADLOC1 ;CONI FROM 136. 149 | CONI AD,@ADLOC2 ;AND FROM A/D. 150 | PUSHJ P,AD6 ;KILL A/D AND 136. 151 | HRRZM P,ADADV 152 | SKIPE P2NUM ;ARE WE ON P2? 153 | POPJ P, ;YES. RETURN 154 | 155 | ;IN CLKSER WE HAVE: SKIPL ADADV 156 | ; PUSHJ P,ADP1 157 | ^ADP1: SETZM ADADV ;HERE AT P1 CLOCK LEVEL (OR IF NO P2) 158 | SKIPE ADERR ;ERRORS? 159 | POPJ P, ;YES. 160 | AD5: MOVEI DDB,ADDDB 161 | MOVE IOS,DEVIOS(DDB) 162 | TLZE IOS,IOW 163 | PUSHJ P,STTIOD 164 | SKIPL ADBKO ;IS XFER STILL IN PROGRESS ? 165 | TRZ IOS,IOACT ;NO. LET JOB BE SWAPPED AND SHUFFLED. 166 | MOVEM IOS,DEVIOS(DEVDAT) 167 | POPJ P, 168 | 169 | BEND ADSER 170 | -------------------------------------------------------------------------------- /sys/J17-1974/free.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00002 PAGES 2 | RECORD PAGE DESCRIPTION 3 | 00001 00001 4 | 00002 00002 TITLE FREE 5 | 00011 ENDMK 6 | ; 7 | TITLE FREE 8 | OPDEF PEEK [CALLI 33] 9 | OPDEF SETPR2 [CALLI 400052] 10 | P_17 11 | 12 | LOC 124 13 | JRST REE 14 | RELOC 15 | REE: SETOM ALL# 16 | CAIA 17 | STRT: SETZM ALL 18 | STRTA: CALLI 19 | SETZM INUSE 20 | SETZM NINUSE 21 | SETZM DIST 22 | SETZM NFREE# 23 | SETZM NUSE# 24 | MOVE 1,[DIST,,DIST+1] 25 | BLT 1,DIST+177 26 | MOVEI P,PDL 27 | MOVEI 1,37 28 | PEEK 1, 29 | MOVEM 1,MEMSIZ# 30 | HRLZS 1 31 | TLZ 1,401776 32 | CALL 1,['SETPR2'] 33 | JRST NOSETP 34 | SETZM INUSE# 35 | SETZM NINUSE# 36 | INIT 0,0 37 | 'LPT ' 38 | XWD HEAD,0 39 | JRST NOLPT 40 | SETZM NAME+3 41 | SETZM NAME+2 42 | HLLZS NAME+1 43 | ENTER NAME 44 | JRST [ OUTSTR[ASCIZ/ENTER FAILED! 45 | /] 46 | HALT STRTA] 47 | OUTBUF 0,2 48 | MOVE 6,[POINT 7,[ASCIZ/LOC IN USE FREE 49 | 50 | /]] 51 | SKIPN ALL 52 | PUSHJ P,PUTSTR 53 | MOVE 16,400263 ;GET ADDRESS OF MEMSIZ 54 | MOVE 16,400000(16) ;GET MEMSIZ 55 | MOVE 1,[400000(16)] 56 | MOVEM 1,SYSLOC# 57 | MOVE 1,MEMSIZ 58 | CAIG 1,377777 59 | JRST LOOP 60 | CAIE 1,777777 61 | JRST [ OUTSTR[ASCIZ/CAN'T MAP TO IT! 62 | /] 63 | HALT STRT] 64 | MOVE 1,[376001,,400000] 65 | SETPR2 1, 66 | JRST NOSET 67 | MOVNI 1,400000(1) 68 | HRRM 1,SYSLOC 69 | LOOP: SKIPE ALL 70 | JRST NOLOC 71 | HRRZ 2,16 72 | PUSHJ P,OCTPNT 73 | MOVEI 7,11 74 | PUSHJ P,PUTOUT 75 | NOLOC: MOVEM 16,LAST# 76 | HRRZ 16,@SYSLOC 77 | CAMLE 16,LAST 78 | CAMLE 16,MEMSIZ 79 | JRST INCONS 80 | HLRZ 2,@SYSLOC 81 | TRZ 2,400000 82 | MOVEI 7,11 83 | SKIPN ALL 84 | SKIPG @SYSLOC 85 | CAIA 86 | PUSHJ P,PUTOUT 87 | SKIPN ALL 88 | PUSHJ P,OCTPNT 89 | SKIPG @SYSLOC 90 | JRST [ AOS NUSE 91 | HLRZ 2,@SYSLOC 92 | TRZ 2,400000 93 | ADDM 2,INUSE 94 | CAIL 2,200 95 | MOVEI 2,0 96 | AOS DIST(2) 97 | SKIPE ALL 98 | JRST DONE 99 | HLRZ 2,@SYSLOC 100 | TRZ 2,400000 101 | LSH 2,-3 102 | CAIG 2,NAMLEN 103 | SKIPN 6,NAMTAB-1(2) 104 | JRST DONE 105 | HRLI 6,() 106 | PUSHJ P,PUTSTR 107 | JRST DONE] 108 | AOS NFREE 109 | HLRZ 2,@SYSLOC 110 | TRZ 2,400000 111 | ADDM 2,NINUSE 112 | MOVSI 3,1 113 | CAIL 2,200 114 | MOVEI 2,0 115 | ADDM 3,DIST(2) 116 | DONE: MOVE 6,[POINT 7,[ASCIZ/ 117 | /]] 118 | SKIPN ALL 119 | PUSHJ P,PUTSTR 120 | CAMGE 16,MEMSIZ 121 | AOJA 16,LOOP 122 | MOVE 2,INUSE 123 | MOVE 6,[POINT 7,[ASCIZ/ 124 | 125 | /]] 126 | PUSHJ P,PUTSTR 127 | PUSHJ P,OCTPNT 128 | MOVE 6,[POINT 7,[ASCIZ/ TOTAL WORDS IN USE. 129 | /]] 130 | PUSHJ P,PUTSTR 131 | MOVE 2,NINUSE 132 | PUSHJ P,OCTPNT 133 | MOVE 6,[POINT 7,[ASCIZ/ TOTAL WORDS FREE. 134 | 135 | (USED) (FREE) 136 | SIZE NUMBER NUMBER 137 | 138 | /]] 139 | PUSHJ P,PUTSTR 140 | MOVEI 4,1 141 | LOOP2: SKIPN DIST(4) 142 | JRST DONE1 143 | MOVEI 2,(4) 144 | PUSHJ P,OCTPNT 145 | MOVEI 7,11 146 | PUSHJ P,PUTOUT 147 | HRRZ 2,DIST(4) 148 | PUSHJ P,OCTPNT 149 | MOVEI 7,11 150 | PUSHJ P,PUTOUT 151 | HLRZ 2,DIST(4) 152 | PUSHJ P,OCTPNT 153 | MOVEI 7,11 154 | PUSHJ P,PUTOUT 155 | HRRZ 2,DIST(4) 156 | IMULI 2,(4) 157 | PUSHJ P,DPT 158 | MOVEI 2,(4) 159 | LSH 2,-3 160 | CAIG 2,NAMLEN 161 | SKIPN 6,NAMTAB-1(2) 162 | JRST NONAM 163 | HRLI 6,() 164 | PUSHJ P,PUTSTR 165 | NONAM: MOVE 6,[POINT 7,[ASCIZ/ 166 | /]] 167 | PUSHJ P,PUTSTR 168 | DONE1: CAIGE 4,177 169 | AOJA 4,LOOP2 170 | MOVE 6,[POINT 7,[ASCIZ/ 200 /]] 171 | PUSHJ P,PUTSTR 172 | HRRZ 2,DIST 173 | PUSHJ P,OCTPNT 174 | MOVEI 7,11 175 | PUSHJ P,PUTOUT 176 | HLRZ 2,DIST 177 | PUSHJ P,OCTPNT 178 | MOVE 6,[POINT 7,[ASCIZ/ 179 | /]] 180 | PUSHJ P,PUTSTR 181 | PUSHJ P,PUTSTR 182 | MOVE 2,NFREE 183 | PUSHJ P,OCTPNT 184 | MOVE 6,[POINT 7,[ASCIZ/ FREE BLOCKS. 185 | /]] 186 | PUSHJ P,PUTSTR 187 | MOVE 2,NUSE 188 | PUSHJ P,OCTPNT 189 | MOVE 6,[POINT 7,[ASCIZ/ USED BLOCKS. 190 | /]] 191 | PUSHJ P,PUTSTR 192 | MOVEI 16,247 193 | PEEK 16, 194 | MOVEI 2,1(16) ;NFSGETS 195 | PEEK 2, 196 | MOVEI 14,2(16) ;NFSGIVES 197 | PEEK 14, 198 | MOVE 15,2 199 | PUSHJ P,OCTPNT 200 | MOVE 6,[POINT 7,[ASCIZ/ NFSGETS 201 | /]] 202 | PUSHJ P,PUTSTR 203 | MOVE 2,14 204 | SUB 15,2 205 | PUSHJ P,OCTPNT 206 | MOVE 6,[POINT 7,[ASCIZ/ NFSGIVES 207 | /]] 208 | PUSHJ P,PUTSTR 209 | MOVEI 2,30(16) 210 | PEEK 2, 211 | SUB 15,2 212 | PUSHJ P,OCTPNT 213 | MOVE 6,[POINT 7,[ASCIZ/ NFSGFA 214 | /]] 215 | PUSHJ P,PUTSTR 216 | MOVE 2,15 217 | PUSHJ P,OCTPNT 218 | MOVE 6,[POINT 7,[ASCIZ/ BLOCKS STILL CLAIMED 219 | /]] 220 | PUSHJ P,PUTSTR 221 | MOVEI 16,264 222 | PEEK 16, 223 | MOVSI 15,-17 224 | MOVE 6,[POINT 7,[ASCIZ/ 225 | 226 | 227 | REQUEST POPULATIONS: 228 | SIZE COUNT 229 | /]] 230 | PUSHJ P,PUTSTR 231 | RPQLOP: MOVE 2,16 232 | ADDI 2,(15) 233 | PEEK 2, 234 | JUMPE 2,RPQSKP 235 | PUSH P,2 236 | MOVEI 2,1(15) 237 | LSH 2,3 238 | PUSHJ P,OCTPNT ;PRINT OCTAL. 239 | MOVEI 7,11 240 | PUSHJ P,PUTOUT 241 | POP P,2 242 | PUSHJ P,OCTPNT 243 | MOVE 6,[POINT 7,[ASCIZ/ 244 | /]] 245 | PUSHJ P,PUTSTR 246 | RPQSKP: AOBJN 15,RPQLOP 247 | CALLI 12 248 | 249 | 250 | NAMTAB: [ASCIZ/ JOB READ OR WRTINF/] ;0-6 251 | [ASCIZ/ DATA DISK QUEUE BLOCK/] ;7-16 252 | [ASCIZ/ RUN UUO OR JBTJL/] ;17-26 253 | [ASCIZ/ IMP DDB/] ;27-36 254 | [ASCIZ/ WHO LINE OR MAIL/] ;37-46 255 | [ASCIZ/ IMP MESSAGE BLOCK/] ;47-56 256 | [ASCIZ/ PAGE PRINTER BLOCK/] ;57-66 257 | 0 ;67-76 258 | [ASCIZ/ JBTDTS OR DSK DDB/] ;77-106 259 | 0 ;107-116 260 | [ASCIZ/ TTY DDBS & LINE POINTER TABLE/] ;117-126 261 | [ASCIZ/ JBTPDL/] ;127-136 262 | [ASCIZ/ DISPLAY HEADER OR BLK TBL FOR DPYOUT/] ;137-146 263 | 0 ;147-156 264 | 0 ;157-166 265 | 0 ;167-176 266 | [ASCIZ/ APRLST - TIMED USER INTERRUPT LIST/] ;177-206 267 | NAMLEN__.-NAMTAB 268 | 269 | DPT: PUSHJ P,DP1 270 | MOVEI 7,"." 271 | JRST PUTOUT 272 | 273 | DP1: SKIPA 3,[=10] 274 | OCTPNT: MOVEI 3,10 275 | HRRM 3,OCTPN1 276 | OCTPN1: IDIVI 2,10 277 | HRLM 3,(P) 278 | JUMPE 2,.+2 279 | PUSHJ P,OCTPN1 280 | OCTOUT: HLRZ 7,(P) 281 | ADDI 7,60 282 | PUSHJ P,PUTOUT 283 | POPJ P, 284 | PUTOUT: SOSG HEAD+2 285 | OUT 286 | CAIA 287 | HALT STRTA 288 | IDPB 7,HEAD+1 289 | CPOPJ: POPJ P, 290 | 291 | PUTSTR: ILDB 7,6 292 | JUMPE 7,CPOPJ 293 | PUSHJ P,PUTOUT 294 | JRST PUTSTR 295 | LITVAR 296 | NAME: 'FREE ' 297 | 'LST ' 298 | 0 299 | 0 300 | HEAD: BLOCK 3 301 | PDL: BLOCK 10 302 | DIST: BLOCK 200 303 | NOSETP: 304 | NOSET: OUTSTR [ASCIZ/SETPR2 FAILURE 305 | /] 306 | CALLI 12 307 | NOLPT: OUTSTR [ASCIZ/CAN'T INIT THE LPT 308 | /] 309 | CALLI 12 310 | INCONS: OUTSTR [ASCIZ/FREE STORAGE BLOCKS ARE INCONSISTIENT 311 | /] 312 | CALLI 12 313 | END STRT 314 | 315 | -------------------------------------------------------------------------------- /sys/J17-1974/impddb.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00007 PAGES 2 | RECORD PAGE DESCRIPTION 3 | 00001 00001 4 | 00002 00002 SUBTTL DATA AREA FOR INTERMINABLE MESSAGE PROTESTOR - JAM SEPT, '71 5 | 00003 00003 MODEL DEVICE DATA BLOCK FOR IMP CONNECTIONS 6 | 00005 00004 OUTPUT ROUTINE STORAGE 7 | 00008 00005 STORAGE FOR CLOCK LEVEL WAIT ROUTINE 8 | 00010 00006 HOST AND LINK TABLES 9 | 00012 00007 THE FOLLOWING ARE COUNTERS OF THE NUMBER OF TIMES VARIOUS EVENTS HAVE HAPPENED 10 | 00016 ENDMK 11 | ; 12 | SUBTTL DATA AREA FOR INTERMINABLE MESSAGE PROTESTOR - JAM SEPT, '71 13 | ; MODEL DEVICE DATA BLOCK FOR IMP CONNECTIONS 14 | 15 | DEFINE Z(NAME,VAL) 16 | 17 | DEVSHR,,0 ; DEVCMR 18 | DDBMDL: SIXBIT /IMP/ 19 | TDLEN+1 ; DEVCHR, BUFFER SIZE 20 | 0 ; DEVIOS 21 | LPTDDB,,IMPDSP ; DEVSER, UUO DISPATCH TABLE ADDRESS 22 | DVIMP!DVLNG!DVIN!DVOUT,,154403 23 | 0 ; DEVLOG 24 | 0 ; DEVBUF 25 | 0 ; DEVIAD 26 | 0 ; DEVOAD 27 | 0 ; DEVFIL 28 | 0 ; DEVEXT 29 | Z(INL,0) ; INPUT LIST 30 | Z(MAL,0) ; MESSAGE ALLOCATION 31 | Z(BAL,0) ; BIT ALLOCATION 32 | Z(NHMA,0) ; NOMINAL MESSAGE ALLOCATION 33 | Z(NHBA,0) ; NOMINAL BIT ALLOCATION 34 | Z(NHMA2,0) ; 1/2 OF THE NOMINAL MESSAGE ALLOCATION 35 | Z(NHBA2,0) ; 1/2 OF THE NOMINAL BIT ALLOCATION 36 | Z(HMA,0) ; HIS MESSAGE ALLOCATION 37 | Z(HBA,0) ; HIS BIT ALLOCATION 38 | Z(MIIL,0) ; NUMBER OF MESSAGES IN INPUT LIST 39 | Z(BIIL,0) ; NUMBER OF BITS IN INPUT LIST 40 | Z(TIMES,) 41 | ; CLS, RFNM, ALL, RFC, INP WAIT TIMEOUTS 42 | Z(TIM,-1) ; TIMEOUT COUNT 43 | IMPDLN__.-DDBMDL+1 44 | 45 | IMPDIE: 0 ; SET TO NON-ZERO TO KEEP IMP SYSTEM DOWN 46 | 47 | IMPST__. ; NOTE IMP DATA AREA TO BE CLEARED BEGINS HERE 48 | ; OUTPUT ROUTINE STORAGE 49 | 50 | IMPDEAD: 0 ; SET TO -1 IF IMP DECLARED DEAD 51 | IMPOACT: 0 ; SET TO -1 IF OUTPUT IS ACTIVE 52 | IMPOBK: 0 ; OUTPUT BLKO POINTER 53 | IMPOCUR: 0 ; CURRENT BUFFER BEING OUTPUTTED 54 | OLIST: 0 ; OUTPUT LIST. XWD , 55 | IMPOFC: 0 ; COUNT OF WDS TO GO IN 36B MODE 56 | IMPOFM: 0 ; SET TO -1 FOR FULL WORD (36B) MODE 57 | IMPOCT: 0 ; OUTPUT TIME-OUT COUNT 58 | IMPOPD: 0 ; OUTPUT SIDE PUSHDOWN LIST 59 | IMPOPL: BLOCK INTPLN 60 | 61 | ; INPUT ROUTINE STORAGE 62 | 63 | IMPBKO: 0 ; INPUT BLKI WORD 64 | IMPICUR: 0 ; CURRENT INPUT BUFFER 65 | IMPITOP: 0 ; TOP OF CURRENT INPUT LIST 66 | ILIST: 0 ; INPUT LIST, XWD , 67 | IMPIFM: 0 ; -1 FOR 36B MODE, OTHERWISE, 32B MODE 68 | IMPHELP: 0 ; IF NO BUFFER AVAILABLE AT I-LEVEL, INPUT WORD IS PLACED HERE 69 | IMPHLF: 0 ; FLAG THAT SAYS WE ARE WAITING FOR AN INPUT BLOCK 70 | IMPIHD: 0 ; SET TO -1 IF WORD IN IMPHELP IS LAST WORD IN MESSAGE 71 | IMPSPARE: 0 ; SPARE INPUT BUFFER 72 | IMPCLN: 0 ; SET TO -1 WHEN A CLOCK REQUEST FOR A NEW SPARE IS PLANTED 73 | IMPINW: 0 ; NUMBER OF WORDS OF REGULAR MESSAGE 74 | IMPIMS: 0 ; MASK FOR CLEANING OUT LAST WORD OF REGULAR MESSAGE 75 | IMPIPD: 0 ; INPUT SIDE PUSHDOWN LIST 76 | IMPIPL: BLOCK INTPLN 77 | 78 | ; I-LEVEL GENERAL STORAGE 79 | ; IN IMPCHAN WE HAVE . . . 80 | ; CONSZ IMP,IDONE!IEND 81 | ; JRST IMPINT 82 | ; CONSZ IMP,ODONE 83 | ; JRST IMPOUT 84 | ; CONSZ IMP,IMPERR 85 | ; JRST IMPERB 86 | 87 | IMPAC1: 0 ; ACCUMULATOR STORAGE 88 | IMPAC2: 0 89 | IMPAC3: 0 90 | IMPPID: P1PID 91 | IMPIDSP: IBEGIN 92 | IMPODSP: OBEGIN 93 | IMPECT: 0 ; ERROR BIT COUNT DOWN 94 | ; STORAGE FOR CLOCK LEVEL WAIT ROUTINE 95 | 96 | IMPCLW: 0 ; -1 MEANS WE ARE WAITING FOR FREE STORAGE 97 | IMPPDP: 0 ; WHERE PUSHDOWN POINTER IS STORED WHILE WAITING 98 | IMPFP: 0 ; THIS IS STACK AS IT LOOKS WHEN WE ENTER AT IMPCLK 99 | IMPSAV: BLOCK CLKPLN 100 | ; WHERE CLOCK LEVEL PUSHDOWN LIST IS STORED WHILE WAITING 101 | 102 | ; STORAGE FOR CLOCK COUNTING SYSTEM TIMEOUTS 103 | 104 | TIMCNT: 0 ; COUNT DOWN FOR CHECKING TIMED WAITS 105 | TIMWAIT: 0 ; NUMBER OF PEOPLE WAITING FOR A TIMEOUT 106 | 107 | ; STORAGE FOR FREE STORAGE MANAGER 108 | 109 | IMPFSL: 0 ; FREE STORAGE LIST 110 | IMPSPN: 0 ; COUNT OF NUMBER OF SPARE BLOCKS NEEDED 111 | 112 | ; STORAGE FOR POLLING ROUTINE 113 | 114 | POLTIM__30*JIFSEC ; 60 MINUTES BETWEEN POLLS 115 | POLCNT: POLTIM 116 | 117 | ; FOR CLEANUP ROUTINE (ACTUALLY PART OF POLLING ROUTINE) 118 | 119 | HCLSTM__6 ; 3 MINUTES BETWEEN CLEANUPS 120 | HCLSCT: 0 ; COUNTER FOR CLEANUPS 121 | 122 | ; OTHER STORAGE . . . 123 | 124 | RECOVER: 0 ; FLAG FOR ERROR RECOVERY SYSTEM 125 | IMPPMS: 0 ; SET  0 TO PRINT ALL ERROR MESSAGES 126 | RSTHST: 377 ; HOST TO BE RESET NEXT 127 | 128 | NOPCNT: 4 ;COUNT OF NOPS YET TO BE SENT TO IMP TO INITIALIZE 129 | ; HOST AND LINK TABLES 130 | 131 | ; STORAGE FOR ROUTINE THAT ASSIGNS NEW AND UNIQUE LINKS 132 | 133 | LSTLNK: 0 ; LAST LINK NUMBER ASSIGNED 134 | 135 | ; HOST TABLES AND LINK TABLE 136 | 137 | L0WAIT: 0 ; COUNT OF NUMBER OF JOBS IN IO WAIT FOR LINK 0 TO BECOME UNBLOCKED 138 | L0CWTL: 0 ; LIST OF MESSAGES INITIATED AT CLOCK LEVEL FOR LINK 0 139 | SYSTBS__. ; BEGINNING OF SYSTEM DATA TABLES 140 | L0BLOK: BLOCK 10 ; BLOCKED-LINK-0 BIT FOR EACH HOST, 32. BITS PER WORD 141 | 142 | MAXNLK__40 ; CURRENT MAXIMUM NUMBER OF CONNECTIONS 143 | LNKMAX: MAXNLK ; FOR THE SYSTEM TABLE READERS 144 | LNKTAB: BLOCK MAXNLK ; BITS 28-35 ARE LINK NUMBER, 20-27 ARE HOST NUMBER 145 | IMPDDB: BLOCK MAXNLK ; CONTAINS ADDRESS OF DDB ON THIS CONNECTION 146 | IMPLS: BLOCK MAXNLK ; LOCAL NUMBER 147 | IMPFS: BLOCK MAXNLK ; FOREIGN SOCKET 148 | IMPBS: BLOCK MAXNLK ; CONNECTION BYTE SIZE 149 | IMPSTB: BLOCK MAXNLK ; STATUS BIT TABLE 150 | IMPRFQ: BLOCK MAXNLK ; LIST OF RFCS WAITING FOR CONNECTION ON THIS SOCKET 151 | FFLNK: 0 ; INDEX OF FIRST FREE LINK. 152 | ; THE FOLLOWING ARE COUNTERS OF THE NUMBER OF TIMES VARIOUS EVENTS HAVE HAPPENED 153 | 154 | FRMIMP: 0 ; NUMBER OF MESSAGES FROM IMP 155 | FLNOPS: 0 ; NUMBER OF NO-OPS RECEIVED 156 | TRACES: 0 ; TRACE MESSAGES 157 | ERWOMI: 0 ; ERRORS WITHOUT MASSAGE IDENTIFICATION 158 | NIMPDN: 0 ; NUMBER OF IMP GOING DOWN MESSAGES 159 | NBLNKS: 0 ; BLOCKED LINK 160 | LTFULL: 0 ; LINK TABLE FULL 161 | ERWMI: 0 ; ERROR WITH MASSAGE IDENTIFICATION 162 | INCMTR: 0 ; INCOMPLETE TRANSMISSION 163 | ILLMT: 0 ; ILLEGAL MESSAGE TYPE 164 | BDRFNM: 0 ; RFNM RECEIVED ON AN UNBLOCKED LINK 165 | NODDBS: 0 ; NO DDB WHEN ONE WAS CALLED FOR 166 | UNKLNK: 0 ; NUMBER OF MESSAGES TO A NON-EX LINK 167 | NRFNL: 0 ; NUMBER OF RFNMS WITH NO LINK IN LINK TABLE 168 | NILLOP: 0 ; ILLEGAL SECOND LEVEL PROTOCAL OP CODE 169 | BSILL: 0 ; BYTE SIZE FOR SECOND LEVEL COMMAND ILLEGAL 170 | BCMM: 0 ; BYTE COUNT TOO SMALL FOR SECOND LEVEL COMMAND 171 | RERRM: 0 ; NUMBER OF ERROR MESSAGE WE HAVE RECEIVED 172 | SPRRP: 0 ; RESET REPLY WITH NO RESET GIVEN 173 | N2RFCS: 0 ; NUMBER OF TIMES TWO RFCS FROM THE SAME HOST WERE RECEIVED 174 | NNOCLS: 0 ; NUMBER OF TIMES NO CLOSE WAS SENT WHEN ONE WAS RECEIVED 175 | NILLST: 0 ; NUMBER OF TIMES THE TABLES WERE IN AN ILLEGAL STATE 176 | NNCOR: 0 ; NUMBER OF TIMES WE DIDN'T HAVE ANY FREE STORAGE AT UUO LEVEL 177 | NNOCLW: 0 ; NUMBER OF TIMES WE DIDN'T ACKNOWLEDGE A CLS 178 | NOLKS: 0 ; NUMBER OF TIMES WE COULDN'T ASSIGN A LINK NUMBER 179 | NHOST0: 0 ; NUMBER OF TIMES WE GOT A MESSAGE FOR HOST ZERO 180 | SLNOPS: 0 ; NUMBER OF SECOND LEVEL NO-OPS RECEIVED 181 | NHANGS: 0 ; INPUT STOPPED DUE TO LACK OF FREE STORAGE 182 | NDPBLK: 0 ; NUMBER OF TIMES WE TRIED TO STEAL F.S. FROM DPYSER 183 | NSPSUS: 0 ; SPARE F.S. BLOCKS WE USED 184 | NRSETS: 0 ; NUMBER OF RESETS WE HAVE RECEIVED 185 | NMESIN: 0 ; MESSAGES RECEIVED 186 | NMESOU: 0 ; MESSAGES SENT 187 | NNOLNK: 0 ; WE RAN OUT OF TABLE SPACE 188 | NSCLSS: 0 ; NUMBER OF UNSOLICITED CLSS WE RECEIVED 189 | NOPADB: 0 ; NO PADDING BIT FOUND 190 | OPTMO: 0 ; NUMBER OF TIMES THE INTERFACE TIMED OUT 191 | IERBIT: 0 ; NUMBER OF TIMES THE IMP ERROR BIT CAME UP 192 | SLUNLK: 0 ; SECOND-LEVEL UNKNOWN LINKS. 193 | RWNOSS: 0 ; REGULAR MESSAGE WITH NO SEND OR RECEIVE SOCKET 194 | NIWCNO: 0 ; NUMBER OF INPUTS (REGULAR MESSAGES) WITHOUT CONNECTION OPEN 195 | NSSC: 0 ; NUMBER OF REGULAR MESSAGES FOR CLOSED SOCKET 196 | NALWNC: 0 ; NUMBER OF ALLOCATES FOR UNCONNECTED LINK 197 | 198 | IMPEND__. ; END OF AREA CLEARED AT INITIALIZE TIME 199 | -------------------------------------------------------------------------------- /sys/J17-1974/impint.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00014 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00003 00002 SUBTTL IMP INTERRUPT-LEVEL DRIVERS - JAM, SEPT '71 5 | C00005 00003 INPUT BEGINS BY COMING TO HERE. READ THE 72-BIT LEADER THEN 6 | C00008 00004 INPUT ROUTINE, READ SUCCESSIVE WORDS AND ZERO OUT BYTES IN LAST WORD 7 | C00010 00005 WE GET HERE IF AT INTERRUPT LEVEL WE HAVE A WORD AND NO BUFFER TO PUT IT IN 8 | C00012 00006 WE GET HERE WHEN INPUT IS DONE. 9 | C00013 00007 ROUTINE TO SET THE WORD COUNT IN THE LAST BUFFER AND 10 | C00015 00008 ROUTINE TO SET UP THE BYTE POINTER AND WORD COUNT FOR A BUFFER 11 | C00017 00009 CLOCK LEVEL ROUTINE TO GET A SPARE BLOCK 12 | C00019 00010 MAIN OUTPUT LOOP 13 | C00023 00011 ROUTINE TO QUEUE A MESSAGE FOR OUTPUT. 14 | C00025 00012 ROUTINE TO SET THE OUTPUT WORD COUNT AND BYTE POINTER 15 | C00027 00013 INPUT INTERRUPT COMES HERE 16 | C00029 00014 BEND IMPSER 17 | C00030 ENDMK 18 | C; 19 | SUBTTL IMP INTERRUPT-LEVEL DRIVERS - JAM, SEPT '71 20 | 21 | ; CONO BITS . . . 22 | 23 | TEST__100000 ; ENTER TEST MODE (DOES ANAL-CRANIAL INVERSION) 24 | STRIN__040000 ; START INPUT, SETS STOP, CLEARS INPUT END 25 | I32__020000 ; SET INPUT BYTE SIZE TO 32B IF IDPIEN SET 26 | O32__010000 ; SET OUTPUT BYTE SIZE TO 32B IF ODPIEN SET 27 | CLRST__004000 ; CLEAR STOP AFTER INPUT BIT 28 | CLRWT__002000 ; CLEAR WAITING TO INPUT BIT 29 | STROUT__000200 ; START OUTPUT 30 | FINO__000100 ; FINISH OUTPUT (LAST BIT HAS BEEN SENT) 31 | IEPIEN__000040 ; ENABLE CHANGE OF INPUT END INTERRUPT CHANNEL 32 | IDPIEN__000020 ; ENABLE CHANGE OF INPUT BYTE SIZE AND INPUT DONE INTERRUPT CHANNEL 33 | ODPIEN__000010 ; ENABLE CHANGE OF OUTPUT BYTE SIZE AND OUTPUT DONE INTERRUPT CHANNEL 34 | 35 | ISTART__STRIN!CLRWT!IEPIEN!IDPIEN!IMPCHN 36 | 37 | ; CONI BITS . . . 38 | 39 | RDY__200000 ; IMP READY 40 | TEST__100000 ; ENTER TEST MODE (DOES ANAL-CRANIAL INVERSION) 41 | IMPERR__040000 ; IMP ERROR 42 | IDONE__020000 ; INPUT DONE 43 | IEND__010000 ; INPUT END. 44 | ODONE__004000 ; OUTPUT DONE 45 | ; INPUT BEGINS BY COMING TO HERE. READ THE 72-BIT LEADER THEN 46 | ; SET BYTE SIZE AND READ REST OF MESSAGE. 47 | 48 | ^IBEGIN: 49 | PUSHJ P,SETUP ; SET UP BYTE POINTER AND COUNT 50 | JRST IHANG ; NO FREE STORAGE, HANG AND WAIT FOR IT 51 | CONI IMP,AC3 52 | BLKI IMP,IMPBKO ; READ FIRST WORD 53 | JFCL 54 | MOVE AC1,IMPICUR ; SET TOP BLOCK OF INPUT 55 | MOVEM AC1,IMPITOP 56 | TRNE AC3,IEND ; IS THAT ALL THE IMP HAS FOR US? 57 | JRST INPDONE ; YES, GO PUT LIST ON ILIST 58 | CONO IMP,CLRWT ; CLEAR THE WAIT FLAG AND READ NEXT WORD 59 | PUSHJ P,ISYNC 60 | SECOND: CONI IMP,AC3 61 | BLKI IMP,IMPBKO ; GET SECOND WORD 62 | JFCL 63 | TRNE AC3,IEND ; DONE YET? 64 | JRST INPDONE 65 | MOVE AC1,IMPITOP ; PICK UP ADDRESS OF BLOCK CONTAINING LEADER 66 | LDB AC2,SIZEP ; PICK UP BYTE SIZE OF TRANSMISSION 67 | SETOM IMPIFM ; ASSUME 36-BIT MODE 68 | SKIPG AC3,BPW(AC2) ; PICK UP BITS PER WORD FOR THIS BYTE SIZE 69 | MOVEI AC3,44 ; IF ILLEGAL BYTE SIZE, IT DOESN'T MATTER 70 | CAIN AC3,40 71 | SETZM IMPIFM 72 | IDIVM AC3,AC2 ; NUMBER OF BYTES/WD IN AC2 73 | MOVEI AC3,(AC2) 74 | LDB AC2,COUNTP 75 | IDIVI AC2,(AC3) ; # WORDS IN AC2, # BYTES IN LAST WORD IN AC3 76 | MOVEM AC2,IMPINW 77 | SETZM IMPIMS ; PREPARE FOR INTEGRAL NUMBER OF WORDS 78 | JUMPE AC3,INPLOP ; INTEGRAL NUMBER OF WORDS GETS A ZERO MASK 79 | LDB AC2,SIZEP 80 | MOVNS AC2 ; GET MASK FOR LAST WORD 81 | IMULI AC2,(AC3) 82 | MOVSI AC1,400000 83 | ASH AC1,1(AC2) ; WE HAVE NOW SPREAD THE BIT OVER THE BYTES 84 | MOVEM AC1,IMPIMS ; AND THAT IS THE MASK 85 | ; INPUT ROUTINE, READ SUCCESSIVE WORDS AND ZERO OUT BYTES IN LAST WORD 86 | 87 | INPLOP: MOVEI AC1,CLRWT!CLRST!IDPIEN!IEPIEN!IMPCHN 88 | SKIPN IMPIFM ; WHAT BYTE SIZE? 89 | ORI AC1,I32 ; 32, SET BIT 90 | CONO IMP,(AC1) 91 | PUSHJ P,ISYNC 92 | INP1: CONI IMP,AC3 93 | BLKI IMP,IMPBKO 94 | JFCL 95 | SOSL IMPINW ; LAST WORD YET? 96 | JRST INPET ; NO, PROCEED ALONG 97 | HRRZ AC2,IMPBKO 98 | MOVE AC1,IMPIMS ; YES, PICK UP MASK 99 | ANDM AC1,(AC2) ; ZERO OUT BYTES IN LAST WORD 100 | SETZM IMPIMS ; AND ZERO ALL SUCCESSIVE WORDS 101 | INPET: TRNE AC3,IEND 102 | JRST INPDONE 103 | SKIPGE IMPBKO ; HAS THE COUNT OVERFLOWED? 104 | JRST INPLOP ; NO, GO BACK FOR NEXT WORD 105 | MOVEI AC1,CLRWT!IDPIEN!IEPIEN!IMPCHN 106 | SKIPN IMPIFM ; IN WHICH CASE, WAIT AFTER NEXT WORD 107 | ORI AC1,I32 108 | CONO IMP,(AC1) 109 | PUSHJ P,ISYNC 110 | PUSHJ P,SETUP 111 | JRST IDHANG 112 | JRST INP1 113 | ; WE GET HERE IF AT INTERRUPT LEVEL WE HAVE A WORD AND NO BUFFER TO PUT IT IN 114 | 115 | IHANG: SETOM IMPITOP ;FLAG TO GETSPARE IN CASE 1 WD MSG 116 | PUSHJ P,HANG 117 | JRST IHEWAIT 118 | MOVE AC1,IMPICUR 119 | MOVEM AC1,IMPITOP ;SET UP POINTER TO FIRST BLOCK OF MSG 120 | JRST SECOND ; GO PICK UP THE NEXT WORD 121 | 122 | IDHANG: PUSHJ P,HANG 123 | JRST IHEWAIT 124 | JRST INP1 ; GO FINISH FILLING BUFFER 125 | 126 | HANG: AOS NHANGS 127 | CONI IMP,AC1 128 | DATAI IMP,IMPHELP 129 | SETOM IMPHLF 130 | TRNE AC1,IEND 131 | POPJ P, 132 | MOVEI AC1,IEPIEN!IDPIEN 133 | SKIPN IMPIFM 134 | ORI AC1,I32 ; CLEAR PI CHANS SO WON'T INTERRUPT 135 | CONO IMP,(AC1) 136 | PUSHJ P,ISYNC 137 | PUSHJ P,HLPWRD 138 | AOS (P) 139 | JRST GETSPARE ;WE JUST USED THE SPARE, TRY TO GET A NEW ONE 140 | 141 | ; ROUTINE TO PICK UP SAVED WORD AND PLACE IT IN BUFFER 142 | 143 | HLPWRD: MOVE AC1,[XWD 1,1] ; BUMP THE IOWD 144 | ADDB AC1,IMPBKO ; BOTH HALVES 145 | MOVE AC2,IMPHELP ; PICK UP SAVED WORD 146 | SETZM IMPIHD ; CLEAR INPUT-END FLAG 147 | SETZM IMPHLF ; CLEAR SAVED WORD 148 | MOVEM AC2,(AC1) ; PLACE IT IN BUFFER 149 | POPJ P, 150 | ; WE GET HERE WHEN INPUT IS DONE. 151 | 152 | INPDONE: 153 | PUSHJ P,IFINISH ; SET WORD COUNT IN LAST BUFFER AND PUT IT ON ILIST 154 | CONO IMP,ISTART ; START THE IMP LISTENING FOR INPUT 155 | INIWAIT: 156 | PUSHJ P,ISYNC 157 | JRST IBEGIN ; START A NEW MESSAGE 158 | 159 | ; GET HERE WHEN WE INPUTTED THE LAST WORD INTO IMPHELP AND THERE 160 | ; IS NO BUFFER FOR IT. CLOCK LEVEL WILL CALL IFINISH THEN 161 | ; START THE IMP UP LISTENING AGAIN. 162 | 163 | IHEWAIT: 164 | SETOM IMPIHD ; NOTE THAT THE WORD IN IMPHELP IS THE LAST WORD 165 | CONO IMP,IDPIEN!IEPIEN ; MAKE SURE WE DON'T INTERRUPT AGAIN 166 | JRST INIWAIT 167 | ; ROUTINE TO SET THE WORD COUNT IN THE LAST BUFFER AND 168 | ; TAG THE ENTIRE BUFFER LIST ONTO ILIST 169 | 170 | IFINISH: 171 | AOS NMESIN ; BUMP NUMBER OF MESSAGES RECEIVED 172 | MOVE AC1,IMPICUR ; PICK UP POINTER TO CURRENT BUFFER 173 | SETZM IMPICUR ; MAKE SURE NOBODY IS HOME, SO SETUP WON'T LINK ONTO A NON-EX BLOCK 174 | HLRE AC2,IMPBKO ; PICK UP WORD COUNT REMAINING 175 | ADD AC2,TLEN(AC1) ; GET LENGTH OF CURRENT BUFFER 176 | MOVEM AC2,TWC(AC1) ; USE THAT AS THE WORD COUNT 177 | MOVE AC1,IMPITOP ; PICK UP FIRST BLOCK OF MESSAGE 178 | SKIPN AC2,ILIST ; ANYTHING IN THE INPUT LIST? 179 | JRST IFINI1 ; NO, PUT US AS THE FIRST AND LAST ELEMENT 180 | MOVSS AC2 181 | HRLM AC1,TLINK(AC2) ; LINK US ON TO THE LAST ELEMENT 182 | IFINI2: HRLM AC1,ILIST ; MAKE US THE LAST ELEMENT 183 | HRRZS TLINK(AC1) ; CLEAR OUR CDR 184 | POPJ P, 185 | 186 | IFINI1: HRRM AC1,ILIST ; MAKE US THE FIRST ELEMENT 187 | JRST IFINI2 188 | ; ROUTINE TO SET UP THE BYTE POINTER AND WORD COUNT FOR A BUFFER 189 | ; IF THERE IS A LIST, IT APPENDS THE NEW BUFFER TO THE END OF THE LIST. 190 | ; SKIP RETURNS IF THERE WAS A BUFFER. IF NOT, NO SKIP AND PUT IN 191 | ; CLOCK REQUEST TO GET A BUFFER. 192 | 193 | SETUP: PUSHJ P,SETUP0 194 | JRST NOSPARE ; NO FREE STORAGE, PLANT CLOCK REQUEST, TAKE FAILURE RETURN 195 | PUSHJ P,GETSPARE ; GET A NEW SPARE BLOCK 196 | JRST CPOPJ1 ; WE WON THIS TIME 197 | 198 | SETUP0: SETZ AC1, 199 | EXCH AC1,IMPSPARE 200 | JUMPE AC1,CPOPJ ; NO FREE STORAGE, GIVE FAILURE RETURN 201 | SETZM TLINK(AC1) 202 | MOVN AC2,TWC(AC1) ; PICK UP LENGTH OF DATA PORTION OF BLOCK 203 | HRLI AC1,(AC2) ; PUT NEGATIVE WORD COUNT BESIDE DATA POINTER 204 | SKIPE AC2,IMPICUR ; IS THERE ALREADY A LIST GOING? 205 | HRRM AC1,TLINK(AC2) ; YES, APPEND US TO IT 206 | HRRZM AC1,IMPICUR ; SET US AS CURRENT BLOCK 207 | ADDI AC1,TDATA-1 ; MOVE TO JUST BEFORE DATA PORTION 208 | MOVEM AC1,IMPBKO ; PUT IN BLKO WORD 209 | JRST CPOPJ1 210 | ; CLOCK LEVEL ROUTINE TO GET A SPARE BLOCK 211 | 212 | GETSP: SETZM IMPCLN ; NOTE CLOCK REQUEST SATISFIED 213 | SKIPE IMPDEAD ; IS THERE ANY IMP? 214 | POPJ P, ; NO, FORGET IT 215 | GETSPARE: 216 | PUSHJ P,IMPGET ; SEE IF THERE IS A BLOCK AVAILABLE 217 | JRST NOSPARE 218 | EXCH AC1,IMPSPARE 219 | SKIPE AC1 ; WAS THERE ALREADY ONE? 220 | PUSHJ P,IMPREL ; YES, GIVE IT BACK 221 | SKIPN IMPHLF ; IS SOMEONE WAITING FOR IT? 222 | POPJ P, ; NO, LEAVE NOW 223 | PUSHJ P,SETUP0 ; YES, SET UP BYTE POINTER AND COUNT 224 | JRST NOSPARE 225 | SKIPN IMPIHD ; IS IT THE LAST WORD? 226 | JRST GETSP1 ; NO, JUST CLEAR THE WAIT FLAG AND GO 227 | PUSHJ P,HLPWRD ; PUT LAST WORD IN BUFFER 228 | MOVE AC1,IMPICUR 229 | SKIPGE IMPITOP 230 | MOVEM AC1,IMPITOP ;SET UP POINTER TO FIRST BLK OF MSG IF FROM IHANG 231 | PUSHJ P,IFINISH ; PUT LIST ON ILIST 232 | CONO IMP,ISTART ; START THE IMP LISTENING AGAIN 233 | JRST GETSPARE ; NOW GET A SPARE AGAIN 234 | 235 | GETSP1: SETZM IMPHLF 236 | MOVEI AC1,CLRWT!ODPIEN!IDPIEN!IMPCHN 237 | SKIPN IMPIFM 238 | ORI AC1,I32 239 | CONO IMP,(AC1) ; START IMP GOING AGAIN, SET UP PI CHANNELS 240 | POPJ P, 241 | 242 | ; PLANT A CLOCK REQUEST TO COME BACK AND LOOK FOR FREE STORAGE 243 | 244 | NOSPARE: 245 | SETO AC1, 246 | EXCH AC1,IMPCLN 247 | JUMPN AC1,CPOPJ 248 | MOVE AC1,[XWD GETSP,0] 249 | CONO PI,PIOFF 250 | IDPB AC1,CLKQ 251 | CONO PI,PION 252 | POPJ P, 253 | ; MAIN OUTPUT LOOP 254 | 255 | IMPOL: MOVEI AC2,ODPIEN!IMPCHN 256 | NXTTFR: SKIPN IMPOFM 257 | ORI AC2,O32 258 | CONO IMP,(AC2) 259 | BLKO IMP,IMPOBK 260 | JFCL 261 | PUSHJ P,OSYNC 262 | ^OBEGIN: 263 | SETOM IMPOACT ; NOTE THAT WE ARE STILL ACTIVE 264 | SOSN IMPOFC ; DECREMENT COUNT OF WORDS LEFT UNTIL 32-BIT MODE 265 | SETZM IMPOFM ; SWITCH TO 32-BIT MODE 266 | SKIPG IMPOBK ; DECREMENT COUNT OF WORDS LEFT IN BUFFER 267 | JRST IMPOL 268 | NXTBLK: MOVE AC1,IMPOCUR ; PICK UP POINTER TO CURRENT BLOCK 269 | SKIPG AC2,RSTHST ; ANY MORE RESETS YET TO BE SENT? 270 | JRST NOTRST ; NO, RELEASE THIS BLOCK 271 | SOS AC2,RSTHST ; YES, COUNT DOWN AND LOAD NEW HOST # 272 | DPB AC2,SRCP ; PUT NUMBER OF NEXT HOST TO BE RESET INTO BLOCK 273 | CONO IMP,FINO ; WHOLE RESET HAS BEEN SENT 274 | PUSHJ P,OSYNC 275 | MOVE AC1,IMPOCUR ; GET BACK THE POINTER TO THE BLOCK 276 | JRST IMPOD1 ; NOW USE SAME BLOCK TO SEND NEXT RESET 277 | 278 | NOTRST: HRRZ AC2,TLINK(AC1) 279 | MOVEM AC2,IMPOCUR 280 | PUSHJ P,IMPREL ; RELEASE JUST EMPTIED BLOCK 281 | SKIPN AC1,IMPOCUR ; IS THERE A NEXT BLOCK? 282 | JRST IMPODN ; NO, OUTPUT DONE 283 | PUSHJ P,SETCNT ; YES, SET UP COUNT AND BYTE POINTER 284 | JRST IMPOL ; START IT GOING 285 | 286 | IMPODN: CONO IMP,FINO ; TELL IMP THE LAST BIT HAS BEEN SENT 287 | PUSHJ P,OSYNC 288 | AOS NMESOU ; BUMP NUMBER OF MESSAGES TRANSMITTED 289 | SKIPN AC1,OLIST ; ANYTHING ELSE IN QUEUE? 290 | JRST OWAIT ; NO, WAIT FOR OUTPUT TO BEGIN 291 | PUSHJ P,LEGAL ; IS IT A LEGAL BLOCK? 292 | JRST [ SETZM OLIST ; NO, FLUSH THE ENTIRE OUTPUT LIST 293 | JRST OWAIT] ; AND PRETEND IT IS EMPTY 294 | HLRZ AC2,TLINK(AC1) ; YES, PICK UP FIRST ELEMENT 295 | HRRM AC2,OLIST 296 | SKIPN AC2 297 | SETZM OLIST 298 | HRRZM AC1,IMPOCUR 299 | IMPOD1: PUSHJ P,SETMOD ; SET 32 OR 36 BIT MODE 300 | PUSHJ P,SETCNT 301 | MOVEI AC2,STROUT!ODPIEN!IMPCHN 302 | JRST NXTTFR 303 | 304 | DONOP1: CONO IMP,STROUT!ODPIEN!IMPCHN 305 | DATAO IMP,[BYTE (8) 4] ;NOP 306 | PUSHJ P,OSYNC 307 | DONOP: CONO IMP,FINO 308 | PUSHJ P,OSYNC 309 | SOSLE NOPCNT 310 | JRST DONOP1 311 | OWAIT: SETZM IMPOACT ; WE ARE NO LONGER ACTIVE 312 | CONO IMP,ODPIEN ; CLEAR PI CHANNEL SO WE HEAR NO EVIL 313 | PUSHJ P,OSYNC ; WAIT FOR CLOCK LEVEL TO START US UP 314 | JRST OBEGIN 315 | ; ROUTINE TO QUEUE A MESSAGE FOR OUTPUT. 316 | ; ENTER WITH MESSAGE IN AC1 317 | 318 | QOUT: PUSHJ P,LEGAL ; REASONABLE BLOCK? 319 | POPJ P, ; NO, LEAVE NOW 320 | CONO PI,IMPOFF 321 | SKIPN IMPOACT ; IS OUTPUT IN PROGRESS? 322 | JRST QIDLE ; NO, START IT BY HAND. 323 | PUSH P,AC2 324 | SKIPN AC2,OLIST ; PUT THIS MESSAGE ON THE END OF THE OUTPUT LIST 325 | JRST QNOLIST 326 | MOVSS AC2 327 | HRLM AC1,TLINK(AC2) 328 | QOXIT: HRLM AC1,OLIST 329 | POP P,AC2 330 | HRRZS TLINK(AC1) 331 | CONO PI,IMPON 332 | POPJ P, 333 | 334 | QNOLIST: 335 | HRRM AC1,OLIST 336 | JRST QOXIT 337 | 338 | ; GET HERE WHEN THE OUTPUT SIDE OF THE IMP IS IDLE 339 | 340 | QIDLE: CONO PI,IMPON ; NO NEED TO BOTHER WITH INTERLOCKING 341 | SETOM IMPOACT 342 | MOVEM AC1,IMPOCUR 343 | PUSH P,AC3 344 | PUSHJ P,SETMOD ; SET UP COUNT OF NUMBER OF WORDS IN 36B MODE 345 | PUSHJ P,SETCNT ; SET UP BYTE POINTER AND COUNT 346 | MOVEI AC3,MAXCNT ; SET UP OUTPUT TIMEOUT 347 | MOVEM AC3,IMPOCT 348 | POP P,AC3 349 | CONO PI,IMPOFF 350 | CONO IMP,STROUT!ODPIEN!IMPCHN 351 | BLKO IMP,IMPOBK 352 | JFCL 353 | CONO PI,IMPON 354 | POPJ P, 355 | ; ROUTINE TO SET THE OUTPUT WORD COUNT AND BYTE POINTER 356 | 357 | SETCNT: MOVN AC2,TWC(AC1) ; PICK UP SIZE OF BLOCK 358 | HRLI AC2,TDATA-1(AC1) ; PUT IN ONE BEFORE DATA PORTION OF BUFFER 359 | MOVSM AC2,IMPOBK ; PLACE IN OUTPUT BLKO WORD 360 | POPJ P, 361 | 362 | ; ROUTINE TO DO SOFTWARE RELOCATION ON ADDESS IN TAC1 363 | ; PUTS RESULT IN DSER 364 | 365 | DOLOC: HRRZI DSER,(TAC1) ; MOVE USER ADDRESS TO DSER 366 | TRNN DSER,400000 ; UPPER SEGMENT ADDRESS? 367 | JRST EOREL ; NO, USE PROG 368 | PUSH P,TEM 369 | LDB TEM,PSEGN ; YES, PICK UP REL. OF UPPER 370 | HRRZ TEM,JBTADR(TEM) 371 | ADDI DSER,-400000(TEM) 372 | POP P,TEM 373 | POPJ P, 374 | 375 | EOREL: ADDI DSER,(PROG) 376 | POPJ P, 377 | 378 | ; ROUTINE TO SET THE COUNT OF THE NUMBER OF WORDS IN 36B MODE 379 | 380 | SETMOD: LDB AC2,SIZEP 381 | MOVEI AC3,2 382 | CAIN AC2,44 ; UNLESS MOVE IS 36B, USE 32B 383 | SETO AC3, 384 | MOVEM AC3,IMPOFC ; SET NUMBER OF WORDS IN 36B 385 | SETOM IMPOFM ; WE ALWAYS START IN 36B MODE 386 | POPJ P, 387 | ; INPUT INTERRUPT COMES HERE 388 | 389 | ^IMPINT: 390 | CONSO IMP,770 ; ANY CHANNEL? 391 | JRST IMPOTS ; NO, CAN'T BE US 392 | MOVEM AC1,IMPAC1 393 | MOVEM AC2,IMPAC2 394 | MOVEM AC3,IMPAC3 395 | EXCH PID,IMPPID 396 | EXCH P,IMPIPD 397 | JRST @IMPIDSP 398 | 399 | ISYNC: POP P,IMPIDSP 400 | EXCH P,IMPIPD 401 | ACREST: MOVE AC1,IMPAC1 402 | MOVE AC2,IMPAC2 403 | MOVE AC3,IMPAC3 404 | EXCH PID,IMPPID 405 | JEN @IMPCHL 406 | 407 | ; OUTPUT INTERRUPTS COME HERE 408 | 409 | ^IMPOUT: 410 | CONSO IMP,7 411 | JRST IMPCTS 412 | MOVEM AC1,IMPAC1 413 | MOVEM AC2,IMPAC2 414 | MOVEM AC3,IMPAC3 415 | HRLOI AC3,377777 416 | MOVEM AC3,IMPOCT 417 | EXCH PID,IMPPID 418 | EXCH P,IMPOPD 419 | JRST @IMPODSP 420 | 421 | OSYNC: POP P,IMPODSP 422 | MOVEI AC3,MAXCNT 423 | SKIPL IMPOACT 424 | HRLOI AC3,377777 425 | MOVEM AC3,IMPOCT 426 | EXCH P,IMPOPD 427 | JRST ACREST 428 | 429 | ; GET HERE ON ERROR BIT 430 | 431 | ^IMPERB: 432 | MOVEM AC1,IMPAC1 433 | MOVEI AC1,IDPIEN!IMPCHN 434 | SKIPN IMPIFM 435 | ORI AC1,I32 436 | CONO IMP,(AC1) ; CLEAR ERROR BIT 437 | MOVE AC1,IMPAC1 438 | AOS IMPECT ; NOTE ANOTHER ERROR BIT DETECTED 439 | JEN @IMPCHL 440 | BEND IMPSER 441 | -------------------------------------------------------------------------------- /sys/J17-1974/jobdat.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00004 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 BEGIN JOBDAT - JOB DATA AREA 5 | C00003 00003 M JOBAC,0,20 PLACE WHERE USER ACS ARE STORED ON UUO CALLS 6 | C00007 00004 M JOBRL2,115,1 7 | C00011 ENDMK 8 | C; 9 | ;;BEGIN JOBDAT - JOB DATA AREA 10 | SUBTTL JOBDAT 31 AUG 67 11 | 12 | ;THIS AREA PROVIDES STORAGE OF ITEMS OF INTEREST TO BOTH 13 | ;THE MONITOR AND THE USER 14 | 15 | ;MACRO TO DEFINE SYMBOLS FOR MONITOR USE ONLY 16 | ;THESE MAY BE CHANGED TO SUIT MONITOR 17 | 18 | DEFINE M'(SYMBOL,VALUE,LENGTH) 19 | 21 | 22 | ;MACRO TO DEFINE SYMBOLS FOR USER USE 23 | ;THESE CANNOT BE CHANGED WITHOUT INVALIDATING OLD SAVED FILES 24 | 25 | DEFINE U'(SYMBOL,VALUE,LENGTH) 26 | 28 | 29 | ;MACRO TO DEFINE PARAMETERS OF INTEREST TO MONITOR ONLY 30 | ;THESE MAY BE CHANGED TO SUIT MONITOR 31 | ;MUST ASSEMBLE WITH SYSPAR TAPE FIRST 32 | M JOBAC,0,20 ;PLACE WHERE USER ACS ARE STORED ON UUO CALLS 33 | ;IE RELATIVE 0-17 IN USER AREA 34 | M JOBDAC,LOC,17 ;PLACE WHERE HARDWARE ACS(0-16) ARE STORED 35 | ;WHEN JOB IS INACTIVE. THESE ARE EITHER THE 36 | ;USERS AC IF JOB WAS STOPPED IN USER MODE 37 | ;OR ARE THE EXEC IF STOPED IN EXEC MODE 38 | ;0-16 ALSO STORED HERE ON CLK INTERRUPTS 39 | XP JOBDPG,JOBDAC+PROG ;AC PROG DUMPED HERE 40 | XP JOBD15,JOBDAC+15 ;AC 15 DUMPED HERE 41 | XP JOBD16,JOBDAC+16 ;AC 16 DUMPED HERE 42 | XP JOBD17,JOBDAC+17 ;AC 17 DUMPED HERE 43 | U JOBUUO,40,1 ;USER UUO TRAP LOC.(UUO STORED HERE) 44 | U JOB41,41,1 ;USER UUO JSR LOCATION 45 | ;42 UNUSED (PLEASE SEE JBR OR BH BEFORE SNARFING) 46 | M JOBENB,43,1 ;LH=PC CHNG,AR OVF ENABLE/DISABLE APR BITS 47 | ;RH=APR CONSO FLAGS FOR USER APR TRAPPING 48 | ;SET BY CALL [SIXBIT /APRENB/] 49 | U JOBREL,44,1 ;LH=0,RH=HIGHEST REL. ADR. IN USER AREA 50 | M JOBTM1,LOC,1 ; SOME TEMP CELLS TOO 51 | M JOBTM2,LOC,1 52 | M JOBTM3,LOC,1 53 | M JOBTM4,LOC,1 54 | M JOBTM5,LOC,1 55 | M JOBPDL,LOC,1 ; PUSHDOWN LIST FOR GETPDL AND GIVPDL TO USE 56 | LOC__71 57 | XP JOBPLN,LOC-JOBPDL 58 | U JOBINT,LOC,1 ;TO SEPARATE OLD AND NEW INTERRUPT SYSTEMS 59 | XP JOBPRT,LOC ;FIRST LOC PROTECTED BY BEING COPIED INTO MONITOR 60 | XP JOBPR1,JOBPRT+1 ;FIRST LOC+1 61 | M JOBHCU,LOC,1 ;HIGHEST USER IO CHANNEL IN USE 62 | ;ONLY JOBJDA...JOBJDA+C(JOBHCU) ARE COPIED INTO 63 | ;MONITOR WHEN JOB IS RUN. 0 MEANS NONE OR 64 | ;CHAN. 0 IN USE, -1 MEANS SAVEGET HAS ACTIVE IO 65 | 66 | M JOBPC,LOC,1 ;JOB PC WHEN JOB INACTIVE 67 | U JOBDDT,74,1 ;LH UNUSED,RH=STARTING ADDRESS OF USER DDT 68 | XP JOBSAV,JOBDDT-1 ;FIRST LOC.-1 WRITTEN BY SAVE COMMAND 69 | M JOBJDA,LOC,20 ;JOB DEVICE ASSIGNMENT TABLE 70 | ;LH=UUOS DONE SO FAR,RH=ADR. OF DEVICE DATA BLOCK IN MONITOR 71 | XP JOBJMH,JOBHCU-JOBJDA ;JOBHCU-JOBJDA 72 | ;USED BY ANYACT ROUT. IN CORE1 73 | XP JOBPFI,JOBJDA+17 ;HIGHEST LOC. IN JOB DATA AREA PROTECTED FROM IO 74 | XP MJOBCK,JOBPFI-JOBDAC ;AREA CHECKSUMMED DURING SWAPPING 75 | 76 | JOBPRT__JOBPRT ;MAKE DOWNWARDS AVAILABLE 77 | JOBPFI__JOBPFI ;MAKE DOWNWARDS AVAILABLE 78 | M JOBRL2,115,1 79 | U JOBSYM,116,1 ;POINTER TO LOADER AND DDT SYMBOL TABLE POINTER 80 | U JOBUSY,117,1 ;POINTER TO UNDEFINED SYMBOL TABLE 81 | ;SET BY LOADER, NOT YET USED BY DDT 82 | U JOBSA,120,1 ;LH=FIRST LOC NOT LOADED BY RELOCATING LOADER 83 | ;RH=STARTING ADDRESS OF USER PROGRAM 84 | U JOBFF,121,1 ;FIRST FREE LOCATION IN USER AREA 85 | ;USED BY MONITOR TO ASSIGN I/O BUFFERS IN TOP 86 | ;OF USER AREA 87 | U JOBS41,122,1 ;C(JOB41) SAVED HERE ON SAVE COMMAND 88 | ;RESTORE FROM HERE ON GET 89 | M JOBEXM,LOC,1 ;LAST LOC EXAMINED OR DEPOSITED USING 90 | ;D OR E COMMANDS 91 | U JOBREN,124,1 ;REENTER ADDRESS FOR REENTER COMMAND 92 | U JOBAPR,125,1 ;PLACE TO TRAP TO IN USER AREA ON APR TRAP 93 | ;ENABLED BY APRENB UUO 94 | U JOBCNI,126,1 ;APR IS CONIED INTO C(JOBCNI) ON APR TRAP 95 | U JOBTPC,127,1 ;PC IS STORED HERE ON USER APR TRAP 96 | U JOBOPC,130,1 ;OLD PC IS STORED HERE ON START,DDT,REENTER, 97 | ;STARTC COMMANDS 98 | U JOBCHN,131,1 ;LH=FIRST LOC AFTER FIRST FORTRAN 4 LOADED PROGRAM 99 | ;RH=FIRST LOC AFTER FIRST FORTRAN 4 BLOCK DATA 100 | ;TO BE USED FOR JOB CHAINING 101 | M JOBFDV,LOC,1 ;DEV. DATA BLOCK ADR. FOR FINISH COMMAND 102 | U JOBCOR,133,1 ;SIZE OF CORE FOR JOB ON RUN,SAVE,GET COM. 103 | M HINAME,134,1 ;NAME OF UPPER SEGMENT OVER SAVE-GET 104 | M HILOC,135,1 ;LOC OF UPPER SEGMENT IN DUMP FILE OVER SAVE-GET 105 | ;134-137 USED BY LOADER FOR BLT TO MOVE PROGRAM DOWN(CAN BE REMOVED) 106 | XP JOBDA,140 ;FIRST LOC NOT USED BY JOB DATA AREA 107 | 108 | ;;; BEND 109 | -------------------------------------------------------------------------------- /sys/J17-1974/libcnt.MAC: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PDP-10/waits/b70886d67a842ca6986c41546d123e2aac7f06ae/sys/J17-1974/libcnt.MAC -------------------------------------------------------------------------------- /sys/J17-1974/lowcor.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00006 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 LOWCOR 6 SEPT 67 5 | C00005 00003 BEGIN PWAIT 6 | C00010 00004 DEVOPR: SIXBIT /CTY/ OPERATORS CONSOLE DEVICE = CTY. 7 | C00013 00005 MONTH TABLE FOR DAYTIME PRINTING 8 | C00014 00006 HISTOGRAM STATISTIC GATHERING ROUTINE. 9 | C00017 ENDMK 10 | C; 11 | SUBTTL LOWCOR 6 SEPT 67 12 | 13 | SHDACS: BLOCK 20 ;ACS STORED HERE DURING ZSHAD 14 | 15 | ; BEGINNING OF PROTECTED PART OF MONITOR . . . 16 | CHKBEG__. 17 | 18 | ;; ON THIS PAGE LIE SOME VERY COMMON AND USEFUL ROUTINES . . . 19 | 20 | TPOPJ1: AOS -1(P) ;RESTORE TAC THEN SKIP RETURN 21 | TPOPJ: POP P,TAC ;RESTORE TAC 22 | POPJ P, ;AND RETURN 23 | 24 | CPOPJ2: AOS (P) ;DOUBLE SKIP SUBROUTINE RETURN 25 | CPOPJ1: AOSA (P) ;SKIP SUBROUTINE RETURN 26 | PIONJ: CONO PI,PION 27 | CPOPJ: POPJ P, 28 | 29 | FMCHK: PUSHJ P,ZSHAD 30 | JRST CPOPJ1 ;FM ENB OK 31 | MOVE TAC,[440700,,[ASCIZ/TURN ON FM ENB. THEN CONTINUE. 32 | /]] 33 | JSR DDTTYP 34 | POP P,DDTTYP 35 | JRST 4,@DDTTYP 36 | 37 | ZSHAD: CONSO APR,MAOFF ;ARE WE THE PDP-10? 38 | POPJ P, ;NO. DO NOTHING. 39 | PUSH P,140 ;SAVE THE UUO LOCATIONS 40 | PUSH P,141 41 | PUSH P,LASTPR 42 | MOVEM 17,SHDACS+17 ;SAVE THE REAL AC'S SO WE DON'T ZERO THEM 43 | MOVEI 17,SHDACS 44 | BLT 17,SHDACS+16 45 | MOVE 0,[JRST ZSHAD1] 46 | MOVEM 0,141 ;SET TO TRAP OUR ILLEGAL INSTRUCTION 47 | MOVE 17,[776000,,2000] 48 | MOVEM 17,LASTPR 49 | DATAO APR,17 50 | MOVSI 17,USRSHD 51 | BLT 17,17 52 | JRST 1,1 ;RUN USER MODE CODE IN ACS 53 | 54 | ZSHAD1: EXCH SHDACS ;SHDACS_0 IF NO FM ENB 55 | MOVE 17,[SHDACS+1,,1] 56 | BLT 17,17 57 | POP P,LASTPR 58 | POP P,141 59 | POP P,140 60 | DATAO LASTPR 61 | SKIPN SHDACS 62 | AOS (P) ;SKIP RETURN IF FM ENB OFF 63 | POPJ P, 64 | 65 | USRSHD: -1 ;GETS LOADED INTO ACS (STARTING AT ZERO) 66 | SETZM -2000 ;CLEAR SHADOW ZERO 67 | BLT 17,-2000+17 ;BLT ACS INTO SHADOW MEM 68 | JRST 4, ;GET BACK TO EXEC MODE 69 | BLOCK USRSHD-.+17 70 | 0,,-2000 ;17 71 | BEGIN PWAIT 72 | ;COMMENT  73 | ;NEW, SIMPLE-MINDED PWAIT ... ALGORITHM (?) BY D.POOLE 74 | ;REQUIRES SYNINI TO SETZM A (SETOM A FOR OLD PWAIT CODE) 75 | ;0(TAC) > 0 => P1 WANTS/HAS IT 76 | ;1(TAC) > 0 => P2 WANTS/HAS IT 77 | 78 | ^PWAIT: PUSH P,TAC 79 | XCT @-1(P) ;PICK UP ARG AFTER CALL 80 | JUMPN PID,P2L0 81 | P1L0: AOS (TAC) 82 | SKIPG 1(TAC) ;SKIP IF P2 ALSO WANTS/HAS IT 83 | JRST PWAITX ;GOTCHA 84 | SOS (TAC) ;GIVE IT UP AND TRY AGAIN 85 | JRST P1L0 86 | 87 | P2L0: AOS 1(TAC) 88 | SKIPG (TAC) 89 | JRST PWAITX 90 | SOS 1(TAC) 91 | JRST P2L0 92 | 93 | ^XWAIT: PUSH P,TAC 94 | XCT @-1(P) ;PICK UP ARG AFTER CALL 95 | JUMPN PID,XWAIT1 96 | SOSL (TAC) 97 | JRST PWAITX 98 | XWAITE: PUSHACS 99 | PUSHJ P,DISMES 100 | ASCIZ /PDP8+-2 OVER XSYNCED. CALL FROM / 101 | HRRZ TAC,-21(P) ;-1 FOR PUSH P,TAC 102 | PUSHJ P,DISLOC 103 | PUSHJ P,DISCRLF 104 | PUSHJ P,DISMES 105 | ASCIZ /GET A WIZARD TO CHECK PID FOR ERROR, OR 106 | ON PDP-10 TYPE POPJ 3,$X 107 | ON PDP-6 PRESS CONTINUE 108 | / 109 | PUSHJ P,DISFLU 110 | CONSO APR,MAOFF 111 | JRST 4,.+2 112 | PUSHJ P,DDTCAL 113 | POPACS 114 | JUMPN PID,[SETZM 1(TAC) 115 | JRST PWAITX] 116 | SETZM (TAC) 117 | JRST PWAITX 118 | 119 | XWAIT1: SOSGE 1(TAC) 120 | JRST XWAITE 121 | PWAITX: POP P,TAC 122 | JRST CPOPJ1 123 | ; 124 | 125 | COMMENT  THIS IS THE OLD PWAIT...NOT USED SINCE 12/3/73 126 | ;REQUIRES SYNINI TO SETOM A (SETZM A FOR NEW CODE) 127 | ;; DUAL-PROCESSOR WAIT ROUTINES . . . JAM, 1968 (?) 128 | ;; JHS, APR 1972 129 | ;; REFERENCES: COMMUNICATIONS OF THE ACM, VOL. 8, NUM. 9, P 569. 130 | ;; COMMUNICATIONS OF THE ACM, VOL. 9, NUM. 5, PP 320-22. 131 | ;; THESE ROUTINES ARE A MODIFICATION OF THE TWO COMPUTER ALGORITHM 132 | ;; BY KNUTH ON PAGE 322 OF THE ABOVE REFERENCE. THE FOLLOWING CORRE- 133 | ;; SPONDENCES EXIST: 0(TAC) _ K 134 | ;; 1(TAC) _ CONTROL[I] (PROCESSOR 1) 135 | ;; 2(TAC) _ CONTROL[J] (PROCESSOR 2) 136 | ;; IN ADDITION, 3(TAC) IS USED AS A DEPTH COUNTER, SINCE A 137 | ;; PROCESSOR IN ITS CRITICAL SECTION CAN BE INTERRUPTED BY ITSELF AT A 138 | ;; HIGHER LEVEL AND SUCCEED IN ENTERING A HIGHER PRIORITY CRITICAL SECTION. 139 | ;; NOTE: CARE MUST BE TAKEN ON THE STANFORD SYSTEM, WHERE P2 IS THE 140 | ;; PDP-6, WHICH DOES READ-MODIFY-WRITES TO MEMORY ON SKIP INSTRUCTIONS! 141 | 142 | ^PWAIT: PUSH P,TAC 143 | XCT @-1(P) ;PICK UP ARG AFTER CALL 144 | SKIPN P2NUM ;P2 IS RUNNING? 145 | JRST PWAIT2 ;NO, DON'T BOTHER (BUT DO AOS SINCE XWAIT IGNORES P2NUM) 146 | JUMPN PID,P2L00 147 | P1L0: SETOM 1(TAC) 148 | P1L1: AOS NPWAITS 149 | SKIPE (TAC) 150 | JRST P1L2 151 | SKIPE 2(TAC) 152 | JRST P1L1 153 | P1L2: MOVNS 1(TAC) 154 | SKIPLE 2(TAC) 155 | JRST P1L0 156 | SETOM (TAC) 157 | PWAIT2: AOS 3(TAC) ;INCREMENT DEPTH COUNT 158 | PWAITX: POP P,TAC 159 | JRST CPOPJ1 160 | 161 | P2L00: PUSH P,TAC1 ; P2 CAN'T DO SKIP'S, SAVE AN ACCUMULATOR 162 | MOVEI TAC1, ;AND SET IT TO 0 FOR TESTS 163 | P2L0: SETOM 2(TAC) 164 | P2L1: CAMN TAC1,(TAC) 165 | JRST P2L2 166 | CAME TAC1,1(TAC) 167 | JRST P2L1 168 | P2L2: MOVNS 2(TAC) 169 | CAMGE TAC1,1(TAC) 170 | JRST P2L0 171 | SETZM (TAC) 172 | POP P,TAC1 ; RESTORE P2'S EXTRA ACCUMULATOR 173 | JRST PWAIT2 174 | 175 | ^XWAIT: PUSH P,TAC 176 | XCT @-1(P) ;GET ARG 177 | SOSLE 3(TAC) ;ARE WE BACK UP TO TOP LEVEL? 178 | JRST PWAITX ; NO 179 | JUMPN PID,XWAIT2 ;ARE WE P1 OR P2? 180 | SETZM (TAC) ; P1 181 | SETZM 1(TAC) 182 | JRST PWAITX 183 | 184 | XWAIT2: SETOM (TAC) ; P2 185 | SETZM 2(TAC) 186 | JRST PWAITX 187 | 188 |  END OF OLD PWAIT CODE 189 | 190 | BEND PWAIT 191 | DEVOPR: SIXBIT /CTY/ ;OPERATORS CONSOLE DEVICE = CTY. 192 | ;PUBLIC LOGICAL NAME "OPR" WILL BE THIS DEVICE 193 | ;ALSO UNEXPLAINED MONITOR ERROR MESSAGE WILL BE TYPED 194 | ;ON TTY OPR(FIRST TTY TYPED ON IF DEVOPR=0) 195 | DEFINE FIGMAC!(NUM) 196 | 197 | PRINTS /Did you remember to change CONFIG? 198 | / 199 | 200 | IFE FTDISK,< 201 | CONFIG: FIGMAC (2) 202 | SYSTAP: SIXBIT /DTA4/ 203 | > 204 | IFN FTDISK,< 205 | CONFIG: FIGMAC (6) 206 | SYSTAP: SIXBIT /DSK/ 207 | > 208 | 209 | 210 | ;BYTE POINTERS 211 | 212 | PUUOAC: POINT 4,UUO,12 ;UUO AC FIELD 213 | PIOMOD: POINT 4,IOS,35 ;MODE BITS 214 | PJOBN: POINT 6,DEVCHR(DDB),5 ;DEVICE JOB ASSIGNMENT 215 | PDVBLN: POINT PUNITP,DEVCHR(DDB),35 ; DEVICE BUFFER LENGTH 216 | PUNIT: POINT PUNITS,DEVCHR(DDB),35-PUNITP ;DEVICE UNIT NO. 217 | PSEGN: POINT 6,JBTSTS(J),35 ; NUMBER OF HIGH SEGMENT THIS JOB HAS 218 | PDSEGN: POINT 6,(AC1),35 ; NUMBER OF SEGMENT IN JBTDTS 219 | PSINF0: POINT 6,JBTSIN,35 ; HEAD OF LIST, FORWARD LINK 220 | PSINFJ: POINT 6,JBTSIN(J),35 ; FORWARD LINK (J) 221 | PSINFT: POINT 6,JBTSIN(TAC),35 ; FORWARD LINK (TAC) 222 | PSINB0: POINT 6,JBTSIN,29 ; HEAD OF LIST, BACKWARD LINK 223 | PSINBJ: POINT 6,JBTSIN(J),29 ; BACKWARD LINK (J) 224 | PSINBT: POINT 6,JBTSIN(TAC),29 ; BACKWARD LINK (TAC) 225 | 226 | REPEAT 0,< 227 | PRUNB: POINT 2,JB2STS(J),16 ; POINTER TO PROCESSOR RUN BITS 228 | > 229 | 230 | PDVTIM: POINT 6,DEVCHR(DDB),17 ;TIME IN SECONDS BEFORE DEVICE 231 | ;IS SAID TO BE HUNG 232 | PDVCNT: POINT 6,DEVCHR(DDB),11 ;COUNTER DOWN EACH SECOND, 233 | ;1 TO 0 TRANSITION MEANS HUNG DEVICE 234 | 235 | 236 | IFN FTSWAP,< 237 | IMGIN: POINT 8,JBTSWP(J),35 ;POINTER TO INCORE IMAGE (1K BLOCKS) 238 | IMGOUT: POINT 8,JBTSWP(J),26 ;POINTER TO OUTCORE IMAGE 239 | IMGINT: POINT 8,JBTSWP(DDB),35 ;POINTER TO INCORE IMAGE 240 | > 241 | IFN FTLOGIN,< 242 | SYSPPN: SIXBIT / 1 1/ ;1,1 IS SYSPPN ;JS 243 | DUMPPN: SIXBIT / 1 2/ ;1,2 IS DUMPPP ;JS 244 | CUSPPN: SIXBIT / 1 3/ ;1,3 IS CUSP AREA 245 | HELPPP: SIXBIT /100100/ ;100,100 IS HELPPP AND DEMOS ;JS 246 | > 247 | ;MONTH TABLE FOR DAYTIME PRINTING 248 | 249 | MONTAB: =30B5+"JAN" 250 | =27B5+"FEB" 251 | =30B5+"MAR" 252 | =29B5+"APR" 253 | =30B5+"MAY" 254 | =29B5+"JUN" 255 | =30B5+"JUL" 256 | =30B5+"AUG" 257 | =29B5+"SEP" 258 | =30B5+"OCT" 259 | =29B5+"NOV" 260 | =30B5+"DEC" 261 | MIDNIT: =60*=60*=24*JIFSEC ;NO OF JIFFIES TILL MIDNIGHT 262 | 263 | 264 | ; THE FOLLOWING IS A LIST OF THE ASCII NAMES OF THE QUEUES 265 | ; SO SYSTAT CAN READ THEM 266 | 267 | QNAMS: 268 | DEFINE X!(A) {~ 269 | QUEUES 270 | CODES 271 | PQUEUES 272 | ASCII /CMQ / ; DON'T FORGET COMMAND WAIT!! 273 | ; HISTOGRAM STATISTIC GATHERING ROUTINE. 274 | ; 275 | ; CALL: PUSHJ P,HG 276 | ; RETURN HERE ALWAYS 277 | ; 278 | ; CURRENTLY, THIS ROUTINE IS CALLED (ONLY) BY KDBINT. 279 | ; THUS, STATISTICS ARE GATHERED ON EVERY KEYSTROKE OF EVERY 280 | ;MICROSWITCH KEYBOARD. 281 | ; THIS ROUTINE, ONCE EVERY HGSET TIMES IT IS CALLED, WILL 282 | ;INCREMENT ONE & ONLY ONE OF THE 5 COUNTERS: HGCH6,HGUSR,HGSPW,HGUUO, 283 | ;HGSYS. IN ADDITION, IF HGSYS IS INCREMENTED, THEN ONE OF THE 284 | ;COUNTERS HGCNTS WILL BE INCREMENTED, AND IF HGUSR IS INCREMENTED 285 | ;AT A TIME WHEN THE NULL JOB IS RUNNING, THEN EITHER HGNULL OR HGIDLE 286 | ;DEPENDING ON THE STATE OF . 287 | ; 288 | ; THIS ROUTINE CLOBBERS ACCUMULATOR TAC, RETURNS WITH POPJ, P. 289 | ;NO OTHER ACCUMULATORS ARE USED. 290 | 291 | IFN FTHG,< 292 | HG: 293 | SOSE HGYET ;TIME TO DO OUR THING YET? 294 | POPJ P, ;NO. 295 | MOVE TAC,HGSET 296 | MOVEM TAC,HGYET ;RESET TIMER 297 | CONSZ PI,40 ;CH2 ACTIVE? 298 | AOS HGCH2 ;YES. COUNT IT 299 | CONSZ PI,1000 ;CHANNEL 6 IN PROGRESS? 300 | AOSA HGCH6 ;YES, INCREMENT OUR COUNTER AND RETURN 301 | SKIPA TAC,CH5 ;ELSE, GET PC WORD 302 | POPJ P, ;RETURN FOR CH6 ACTIVE. 303 | SKIPE SPWUUF 304 | JRST ISHGSP ;CATCH SPCWAR UUO'S ALSO 305 | TLNN TAC,USRMOD ;WE INTERRUPTED A USER? 306 | JRST HG4 ;NO. WE'RE IN THE SYSTEM 307 | CONSZ PI,400 ;USER IN CHANNEL 7? 308 | ISHGSP: AOSA HGSPW ;YES - SPACEWAR USER 309 | AOSA HGUSR ;NO. PLAIN USER CODE. 310 | POPJ P, 311 | SKIPE JOB ;NULL JOB RUNNING? 312 | POPJ P, ;NO 313 | SKIPGE JBTQ-RUNQ ;IS THIS IDLE OR WASTED 314 | SKIPL JBTQ-TQ 315 | AOSA HGNULL ;WASTED TIME (RUNQ OR TQ NOT EMPTY) 316 | AOS HGIDLE ;IDLE TIME. 317 | POPJ P, 318 | 319 | HG4: CONSO PI,400 ;CHANNEL 7 IN PROGRESS? 320 | AOSA HGUUO ;NO WE'RE IN A UUO. 321 | AOSA HGSYS ;WE INTERRUPTED CHANNEL 7. 322 | POPJ P, 323 | HRRZ TAC,HGCODE ;GET IDENTIFICATION CODE 324 | CAIL TAC,HGNMAX ;A LEGAL CODE? 325 | MOVEI TAC,0 ;NO, MAKE IT THE DEFAULT CODE 326 | AOS HGCNTS(TAC) ;INCREMENT APPROPRIATE HISTOGRAM COUNTER 327 | POPJ P, 328 | > 329 | -------------------------------------------------------------------------------- /sys/J17-1974/lptser.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00020 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00004 00002 BEGIN LPTSER  SUBTTL LINE PRINTER SERVICE ROUTINE 5 | C00005 00003 LPT PARAMETER ASSIGNMENTS 6 | C00007 00004 LPT SERVICE DISPATCH TABLE 7 | C00008 00005 INITIALIZE LINE PRINTER - CALLED FOR 200 RESTARTS 8 | C00011 00006 LPT OUTPUT CODE, LPT MAY BE RUNNING NOW 9 | C00014 00007 SEE IF USER HAS A FREE BUFFER TO BE FILLING 10 | C00016 00008 COME HERE IF LINE PRINTER IS HUNG 11 | C00019 00009 THIS PART OF THE PROGRAM BRINGS A BUFFERLOAD INTO SYSTEM CORE 12 | C00021 00010 TRANSFER BUFFERLOAD CHARACTER BY CHARACTER 13 | C00023 00011 ROUTINE TO DEPOSIT ONE BYTE IN THE SYSTEM BUFFER 14 | C00026 00012 LPTMCR: PUSH PDP,A SAVE CURRENT CHARACTER 15 | C00027 00013 BASIC LEVEL DEPOSIT BYTE AND WRAP AROUND POINTER 16 | C00028 00014 CHARACTER CONVERSION TABLE 17 | C00029 00015 MORE CHARACTER TABLE, CHARACTERS 51 TO 123 18 | C00030 00016 MORE CHARACTER CONVERSION TABLE, CHARACTERS 124 TO 177 19 | C00031 00017 SUBTTL LPTSER - JAM 25 SEPT 1968 - INTERRUPT LEVEL ROUTINES 20 | C00035 00018 COME HERE WHEN THERE IS NOT A FULL WORD TO BE PRINTED 21 | C00036 00019 LPTCRF: CONO LPT,LPTCHB+LPTDON+LPTALT SET ALT FLAG 22 | C00038 00020 THIS PART HANDLES THE ERROR SYSTEM 23 | C00040 ENDMK 24 | C; 25 | BEGIN LPTSER  SUBTTL LINE PRINTER SERVICE ROUTINE 26 | ; NEW LINE PRINTER SERVICE ROUTINES - JAM 25 SEPT 68 27 | ; NEVER SETS IOACT BIT IN IOS 28 | ; DOES CHARACTER CONVERSION EXCEPT WHEN 100 BIT IN RH OF IOS IS ON 29 | ; FEATURES INTERNAL BUFFERING 30 | ; USERS BUFFERS ARE NOT ENTIRELY EMPTIED UNTIL HE DOES THE 'CLOSE' UUO 31 | ; LPT PARAMETER ASSIGNMENTS 32 | 33 | ; LPT CONTROL REGISTER 34 | LPTSTR__100000 ;"PRESS START" AFTER IO RESET 35 | LPTALT__4000 ; LAST CHAR WAS 177 (HARDWARE BIT) 36 | LPTCLR__2000 ; CLEAR LPT HARDWARE REGISTERS! 37 | LPTDON__100 ; ENABLE LPT DONE FLAG 38 | LPTERR__400 ; ENABLE LPT ERROR INTERRUPT 39 | LPTLOV__1000 ; LINE OVERFLOW, WON'T OCCUR 40 | LPTCHB__LPTCHN*11 ; PUTS PI CHANNEL NUMBER IN READY 41 | ; INTERRUPT AND ERROR INTERRUPT SPOTS 42 | LPTCLB__LPTCHN+200 ; CLEAR CHANNEL 43 | 44 | ; ACCUMULATOR DEFINITIONS . . . 45 | A_TAC 46 | B_TAC1 47 | C_AC1 48 | D_DAT 49 | COUNT_AC2 50 | POINTR_AC3 51 | 52 | ; RH OF LPT IOS WORD 53 | LPTNCC__100 ; SET BY USER TO INHIBIT CHARACTER CONVERSION 54 | HNGTRP__200 ; USER WANTS ERROR RETURN ON HUNG LPT. 55 | DELBIT__400 ; LAST CHAR. BEFORE CONO-ING LPT OFF WAS 177 56 | 57 | ; LH OF LPT IOS WORD 58 | LPTEN1__200 ; NEAR END OF LPT ACTIVITY FLAG 59 | LPTDNG__400 ; DANGLING 177 FLAG 60 | LPTERF__4000 ; ERROR BUBBLING UP FROM INTERRUPT LEVEL 61 | LPTEN2__20000 ;RELEASE BIT. 62 | 63 | ; STORAGE PARAMETERS 64 | ^LPTCPL__=120 ; NUMBER OF CHARACTERS PRINTED PER LINE 65 | ; LPT SERVICE DISPATCH TABLE 66 | 67 | JRST LPTINI ;INITILIZE 68 | JRST LPTCLT ;LPT HUNG TIMEOUT. SET ERROR BIT IN IOS FOR LPTOUT TO SEE. 69 | ^LPTDSP: 70 | JRST LPTREL ;RELEASE LPT 71 | JRST LPTCLS ;CLOSE 72 | JRST LPTOUT ;OUTPUT 73 | JRST ILLINP ;INPUT 74 | ; INITIALIZE LINE PRINTER - CALLED FOR 200 RESTARTS 75 | 76 | LPTINI: CONO LPT,LPTSTR ; SET LPT START FLAG 77 | SETOM LPTBG1 ;SET FLAG DENOTING FIRST LPT OPERATION 78 | LPTI.1: MOVEI IOS,0 79 | CONO LPT,LPTCLR ;CLEAR HARDWARE REGISTERS. 80 | HLLZS LPTCON ;CLEAR PI DISPATCH ADDRESS FOR NOW 81 | PUSHJ P,LPTINZ ; INITIALIZE BYTE POINTERS 82 | SETZM LPTIBF ;SET TO ZERO OUT INTERNAL BUFFER 83 | MOVE TAC,[XWD LPTIBF,LPTIBF+1] 84 | BLT TAC,LPTDCN 85 | POPJ P, ; RETURN TO SENDER, ADDRESS UNKNOWN 86 | ; NO SUCH NUMBER, NO SUCH ZONE 87 | LPTBI: POINT 7,LPTIBF ; LPTUBP - UUO LEVEL SYSTEM BUFFER BYTE POINTER 88 | LPTIBF ; LPTIBP - INTERRUPT LEVEL POINTER 89 | 5*LPTBLN ; LPTCC - TOTAL NUMBER OF FREE CHARACTERS IN SYSTEM BUFFER 90 | LPTCPL ; LPTLCC - CHARACTER POSITION IN LINE 91 | 92 | ; LINE PRINTER CLOSE CODE 93 | 94 | LPTCLS: HRLZI IOS,IOEND ; SET OUR PRIVATE 'LAST UUO' FLAG 95 | ORB IOS,DEVIOS(DEVDAT) ; OR IN BIT TO HONEST IOS 96 | TLNN IOS,LPTERF ; ARE WE HUNG? 97 | JRST OUT ; NO, DO LOTS OF OUTPUTS 98 | MOVSI IOS,LPTERF 99 | ANDCAB IOS,LPTIOS ; CLEAR ERROR BIT 100 | PUSHJ PDP,LPTHN ; CALL THE HUNG ROUTINE 101 | JRST OUT ; NOW DO SOME OUTPUTS 102 | 103 | ; INITIALIZE IOS AND BYTE POINTERS 104 | ; AND ALL THE CRAZY COUNTS 105 | 106 | LPTINZ: MOVE TAC,[XWD LPTBI,LPTUBP] 107 | BLT TAC,LPTLCC ;BLT IN POINTERS AND COUNTS 108 | ANDI IOS,HNGTRP!LPTNCC!17 ;CLEAR ALL BUT MODE&SPECIAL BITS 109 | TLO IOS,IO ; 110 | MOVEM IOS,LPTIOS ;AND STORE IOS 111 | SETZM LPTDCN 112 | POPJ P, 113 | 114 | LPTREL: TLNE IOS,IOBEG ;HAVE WE DONE ANYTHING YET 115 | JRST LPTI.1 ;NO 116 | HRLZI IOS,LPTEN2!IO ;TELL SEVICE ROUTINE 117 | PUSHJ PDP,LPTO3 ;HE WILL SET THE WHEELS IN MOTION 118 | PUSHJ PDP,WSYNC ;TREAD WATER A WHILE 119 | JRST LPTI.1 ;REFRESHING ISN'T IT. 120 | ; LPT OUTPUT CODE, LPT MAY BE RUNNING NOW 121 | 122 | LPTOUT: TLZE IOS,IOBEG ; FIRST UUO? 123 | PUSHJ PDP,LPTINZ ;INITIALIZE LPT TABLES AND IOS 124 | TRZE IOS,IODERR ; HAS LPT BEEN HUNG? 125 | JRST UNHANG ; YES, UNHANG IT 126 | CONSO LPT,LPTERR ;CATCH ERRORS NOW! 127 | TLZE IOS,LPTERF ; CHECK FOR INTERRUPT LEVEL ERROR 128 | JRST LPTHNG ; HANG USER UNTIL IT IS FIXED 129 | PUSHJ PDP,LPTSET ; SEE IF WE CAN LOAD SYSTEM CORE 130 | JRST LPTO1 ; SYSTEM BUFFER EMPTY, RETURN TO USER 131 | TLNN IOS,IOEND ; IS THIS THE LAST UUO? 132 | JRST LPTO2 ; NO, START LPT AND RETURN TO USER 133 | 134 | LPTIOW: MOVEI A,LPTLOV+LPTERR+LPTDON 135 | HRLZI IOS,IO+IOW ; SET IOS BITS TO SAY HE IS IN IO WAIT 136 | LDB C,PDVTIM ; PICK UP HUNG COUNT TIME 137 | DPB C,PDVCNT ; DEPOSIT IT, INITIATE HUNG COUNTING 138 | CONO PI,LPTOFF ; DO OUR DIRTY WORK WITH CHANNEL 5 OFF 139 | HRRM A,LPTCON ; SET UP DISPATCH BITS 140 | OR IOS,DEVIOS(DEVDAT) ; PICK UP OUR IOS 141 | MOVEI A,0 ; ASSUME NO ALT! 142 | TRZE IOS,DELBIT ; SHOULD BIT BE SET? 143 | TRO A,LPTALT ; YES 144 | TLON IOS,DEVSBB ; START LINE PRINTER IF IT IS NOT RUNNING 145 | CONO LPT,LPTCHB+LPTDON(A); SET ITS INTERRUPT CHANNEL AND ASK FOR DONE INTERRUPT 146 | MOVEM IOS,DEVIOS(DEVDAT) 147 | CONO PI,LPTON ; THE LPT WILL INTERRUPT IMMEDIATELY 148 | PUSHJ PDP,WSYNC ; DROP HIM INTO IO WAIT 149 | JRST LPTOUT ; TRY ANOTHER OUTPUT WHEN WE RETURN 150 | 151 | ; SEE IF USER HAS A FREE BUFFER TO BE FILLING 152 | ; RETURN TO HIM IF HE DOES, PUT HIM IN IO WAIT IF HE DOESN'T 153 | 154 | LPTO2: PUSHJ PDP,DEVCR ; CHECK RING USE BIT 155 | JRST LPTIOW ; IF BUSY, PUT HIM IN IO WAIT 156 | 157 | HRLZI IOS,IO ; OTHERWISE, JUST START UP LPT 158 | LPTO3: MOVEI A,LPTLOV+LPTERR+LPTDON 159 | LDB C,PDVTIM ; PICK UP HUNG COUNT TIME 160 | DPB C,PDVCNT ; DEPOSIT IT, INITIATE HUNG COUNTING 161 | CONO PI,LPTOFF ; SHUT OFF LPT CHANNEL 162 | HRRM A,LPTCON ; SET UP INTERRUPT DISPATCH CONI BITS 163 | OR IOS,DEVIOS(DEVDAT) ; PICK UP OUR OWN IOS 164 | MOVEI A,0 ; ASSUME NOT BIT 165 | TRZE IOS,DELBIT ; TRUE? 166 | TRO A,LPTALT ; NO, SET BIT 167 | TLON IOS,DEVSBB ; START LPT IF NEEDED 168 | CONO LPT,LPTCHB+LPTDON(A); GIVE IT A PAIR OF CHANNELS AND A DONE BIT 169 | MOVEM IOS,DEVIOS(DEVDAT) 170 | CONO PI,LPTON ; RESTORE CHANNEL 5 171 | POPJ PDP, ; RETURN TO USER, ADDRESS UNKNOWN 172 | ; NO SUCH NUMBER, NO SUCH ZONE!! 173 | 174 | ; COME HERE IF THE SYSTEM BUFFER IS EMPTY 175 | 176 | LPTO1: TLNN IOS,IOEND ; IS THIS THE LAST UUO? 177 | POPJ PDP, ; NO, EXIT TO USER, STAGE LEFT 178 | HRLZI IOS,IOEND ; AND NOW, ZERO THIS BIT FOR GOOD 179 | ANDCAB IOS,LPTIOS 180 | TLNE IOS,IOBEG ; IS THIS REALLY THE BEGINNING? 181 | POPJ PDP, ; YES, EXIT 182 | HRLZI IOS,IO+LPTEN1 ; TELL INTERRUPT SERVICE ROUTINES TO PRINT A CR-FF 183 | JRST LPTO3 ; START LPT AND LEAVE 184 | 185 | ; COME HERE IF LINE PRINTER IS HUNG 186 | 187 | LPTHNG: TRNE IOS,HNGTRP ;IS HE REQUESTING ERROR RETURN ON HUNG LPT 188 | JRST LPTHN1 ;YES 189 | PUSHJ PDP,LPTHN ; HANG USER 190 | JRST LPTOUT ; TRY AGAIN 191 | 192 | LPTHN: PUSHJ PDP,HNGSTP ; PRINT OUT "DEVICE LPT OK?" AND HANG USER 193 | UNHANG: MOVE IOS,[XWD LPTERF,IODERR] ; SET TO CLEAR THE ERROR FLAGS 194 | MOVEI A,LPTLOV+LPTERR+LPTDON 195 | CONO PI,LPTOFF ; SHUT OFF LPT 196 | HRRM A,LPTCON ; SET UP CONI BITS 197 | ANDCAB IOS,DEVIOS(DEVDAT) 198 | TLO IOS,DEVSBB ; SYSTEM BUFFER WILL NOW BE BUSY 199 | MOVEI A,0 ; ASSUME NO BIT 200 | TRZE IOS,DELBIT ; TRUE? 201 | TRO A,LPTALT ; NO, SET BIT 202 | CONO LPT,LPTCHB+LPTDON(A); START UP LPT 203 | MOVEM IOS,DEVIOS(DEVDAT) 204 | CONO PI,LPTON ; RESTORE PI CHANNEL 205 | LDB C,PDVTIM ; RESET HUNG COUNT 206 | DPB C,PDVCNT 207 | JRST LPTOUT ; DO SOME MORE OUTPUTS 208 | 209 | LPTCLT: HRLZI IOS,LPTERF ; KILL THE ERROR BIT 210 | CONO PI,LPTOFF ; WITH LPT OFF 211 | ORB IOS,LPTIOS ; SET ERROR BIT FOR UUO-LEVEL ROUTINES TO SEE 212 | TLZ IOS,DEVSBB ; SYSTEM BUFFER IS NO LONGER BUSY 213 | MOVEI DEVDAT,LPTDDB ; GET DDB ADDRESS FOR SETIOD 214 | TLZE IOS,IOW ; ARE WE IN IO WAIT? 215 | PUSHJ PDP,STTIOD ; YES, TAKE US OUT (PUT INTO TQ) 216 | MOVEM IOS,LPTIOS ; RESTORE IOS 217 | CONO PI,LPTON ; RESTORE PI CHANNEL 218 | JRST CPOPJ1 ; SKIP, FORCE HNGCHK TO IGNORE US 219 | 220 | LPTHN1: TRO IOS,IODERR ;GIVE HIM A DEVICE ERROR BIT 221 | IORB IOS,LPTIOS 222 | POPJ P, 223 | ; THIS PART OF THE PROGRAM BRINGS A BUFFERLOAD INTO SYSTEM CORE 224 | 225 | LPTSET: PUSHJ PDP,DEVSTU ; SET UP COUNT AND POINTR TO POINT AT THE DATA IN HIS BUFFER 226 | JRST LPTSE2 ; THIS BUFFER HAS ALREADY BEEN EMPTIED! 227 | CAILE COUNT,LPTBLN ; IS THE COUNT GREATER THAN THE SIZE OF THE WHOLE DAMN BUFFER? 228 | JRST BTLERR ; YES, KILL THE BASTARD! 229 | IMULI COUNT,5 ; CHANGE WORD COUNT INTO CHARACTER COUNT 230 | MOVE A,COUNT ; SEE IF WE CAN FIT A BUFFER IN NOW 231 | IMULI A,3 ; COMPARE FREE SPACE WITH WORST CASE 232 | CAML A,LPTCC ; SEE IF THERE IS SPACE 233 | JRST LPTSE2 ; NO, PERFORM EXIT MAGIC 234 | PUSHJ PDP,LPTBF ; TRANSFER DATA TO THE SYSTEM BUFFER 235 | PUSHJ PDP,ADVBFE ; ADVANCE THE BUFFER DOWN THE RING 236 | JRST LPTSE2 ; NO MORE BUFFERS, EXIT, STAGE LEFT 237 | JRST LPTSET ; SEE IF WE CAN SQUEEZE IN ANOTHER BUFFER 238 | 239 | LPTSE2: MOVE A,LPTCC ; SEE IF WE HAVE TRANSFERRED ANYTHING 240 | CAIGE A,5*LPTBLN-4 ; BY COMPARING WITH FULL COUNT 241 | AOS (PDP) 242 | POPJ PDP, 243 | ; TRANSFER BUFFERLOAD CHARACTER BY CHARACTER 244 | ; DO CHARACTER CONVERSION IF USER WANTS IT 245 | 246 | LPTBF: SOJL COUNT,CPOPJ ; EXIT IF COUNT IS EXHAUSTED. 247 | ILDB A,POINTR ; PICK UP BYTE FROM USER 248 | TRNE IOS,LPTNCC ; DOES HE WANT CONVERSION? 249 | JRST LPTB3 ; NO, SKIP IT 250 | 251 | CAIN A,134 ; IS THIS THAT GODDAMN CHARACTER? 252 | JRST LPTB2 ; YES, CUE UP TWO 177'S 253 | MOVE A,LPTCTB(A) ; PICK UP CORRECT CHARACTER FROM CONVERT TABLE 254 | LPTB1: PUSHJ PDP,LPTDPB ; DEPOSIT BYTE IN SYSTEM CORE 255 | JRST LPTBF 256 | 257 | LPTB2: MOVEI A,177 ; CUE UP TWO CONSEC. 177'S 258 | PUSHJ PDP,LPTDPB 259 | MOVEI A,177 ; ROUTINE DOESN'T ALWAYS PRESERVE A 260 | JRST LPTB1 261 | 262 | LPTB3: HLL A,LPTCTB(A) ; PICK UP HIS DISPATCH BITS 263 | JRST LPTB1 264 | ; ROUTINE TO DEPOSIT ONE BYTE IN THE SYSTEM BUFFER 265 | ; AND UPDATE ALL THE CRAZY COUNTS INVOLVED 266 | 267 | LPTDPB: MOVE IOS,DEVIOS(DEVDAT) ; DO WE HAVE A DANGLING DELETE? 268 | TLNE IOS,LPTDNG ; WAS LAST A SPECIAL? 269 | JRST LPTD2 ; YES! 270 | CAIE A,177 ; NO, IS THIS ONE? 271 | JRST LPTD1 ; NO, JUST REG CHAR. 272 | TLO IOS,LPTDNG ; SET FLAG FOR NEXT TIME 273 | MOVEM IOS,DEVIOS(DEVDAT) 274 | POPJ P, 275 | LPTD2: PUSHJ PDP,LPTCCH ; YES, SEE IS IT IS A CONTROL CHARACTER 276 | LPTD1: HLRZ D,A 277 | SKIPE D ; DOES THIS CHAR HAVE A DISPATCH ADDRESS? 278 | JRST LPTD7 ; YES, IT WILL TAKE CARE OF ITSELF 279 | SKIPG LPTLCC ; NO, HAVE WE OVERFLOWED THE LINE? 280 | PUSHJ PDP,LPTMCR ; YES, MAKE A CRLF 281 | 282 | LPTD7: TLNN IOS,LPTDNG ; NEED WE SEND A 177 FIRST? 283 | JRST LPTD7A ; NO 284 | PUSH P,A 285 | MOVEI A,177 286 | PUSHJ P,LPTDB ; SEND 177 287 | POP P,A 288 | LPTD7A: PUSHJ PDP,LPTDB ; OTHERWISE, DEPOSIT CHARACTER AND UPDATE COUNTS 289 | CAIN A,11 290 | JRST LPTD11 ;SPECIAL DISPATCH FOR TAB 291 | HLRZS A ; PUT THE DISPATCH ADDRESS IN THE RH 292 | JUMPN A,(A) ; STRANGE CHARACTER, DISPATCH TO SEPARATE ROUTINE 293 | LPTD5A: SOS LPTLCC ; NORMAL CHARACTER, DECREMENT COUNT 294 | LPTD5: MOVSI IOS,LPTDNG ; ZERO OUT THE DANGLING 177 BIT 295 | ANDCAB IOS,DEVIOS(DEVDAT) 296 | POPJ PDP, 297 | 298 | LPTDV: TLNN IOS,LPTDNG ; IS THIS A VERTICAL CHAR? 299 | JRST LPTD5 ; YES 300 | JRST LPTD5A ; JUST ANOTHER CHAR! 301 | 302 | LPTD15: TLNE IOS,LPTDNG ; IS IT REALLY A CR 303 | JRST LPTD5A ; NO, JUST REG CHAR. 304 | MOVEI A,LPTCPL ; RESET COUNT TO #CHARS PER LINE 305 | MOVEM A,LPTLCC 306 | JRST LPTD5 ; EXIT, AND ZERO DANGLING 177 BIT 307 | 308 | LPTD11: SOS D,LPTLCC ; HOW FAR TO NEXT TAB STOP(AT LEAST ONE). 309 | ANDCMI D,7 ; MAYBE MORE 310 | TLNN IOS,LPTDNG ; WHEN PRECEEDED BY 177 IS JUST GAMMA, NOT TAB 311 | MOVEM D,LPTLCC ; THIS FAR! 312 | JRST LPTD5 313 | 314 | LPTMCR: PUSH PDP,A ; SAVE CURRENT CHARACTER 315 | MOVEI A,15 ; MAKE A CRLF 316 | PUSHJ PDP,LPTDB 317 | MOVEI A,12 318 | PUSHJ PDP,LPTDB 319 | MOVEI A,LPTCPL ; RESET LINE COUNT 320 | MOVEM A,LPTLCC 321 | POP PDP,A 322 | POPJ PDP, 323 | 324 | LPTCCH: HRRZ D,A 325 | CAIE D,20 ;SAME AS V. TAB 326 | CAIN D,22 ; " 327 | HRLI A,LPTD5 328 | CAIE D,23 ; " 329 | CAIN D,24 ; " 330 | HRLI A,LPTD5 331 | CAIN D,21 ;LINE FEED OVER PAGE BOUNDARIES 332 | HRLI A,LPTD5 333 | POPJ PDP, 334 | ; BASIC LEVEL DEPOSIT BYTE AND WRAP AROUND POINTER 335 | 336 | LPTDB: CONO PI,LPTOFF ; SHUT OFF LINE PRINTER A SEC. 337 | MOVE B,LPTUBP ; PICK UP BYTE POINTER 338 | IBP B ; INCREMENT IT 339 | HRRZ C,B ; NOW GET ADDRESS PART 340 | CAIL C,LPTIBF+LPTBLN ; CHECK FOR WRAP AROUND 341 | MOVE B,[POINT 7,LPTIBF,6] 342 | DPB A,B ; DEPOSIT THE CHARACTER 343 | MOVEM B,LPTUBP ; REPLACE THE BYTE POINTER 344 | SOSG LPTCC ; UPDATE CHARACTER COUNT 345 | JSP DAT,UERROR ;BLAST THE BASTARD! 346 | CONO PI,LPTON ; SPEED UP THE LPT 347 | POPJ PDP, 348 | ; CHARACTER CONVERSION TABLE 349 | 350 | LPTCTB: XWD LPTD5,0 ; NULL, DOESN'T AFFECT POSITION ON LINE 351 | 1 352 | 2 353 | 3 354 | 4 355 | 5 356 | 6 357 | 7 358 | 10 359 | 11 ; HORIZONTAL TAB, SCREWS UP LINE POSITION 360 | XWD LPTDV,12 ; LINE FEED, DOESN'T AFFECT POSITION 361 | XWD LPTDV,13 ; VERTICAL TAB 362 | XWD LPTDV,14 ; FORM FEED 363 | XWD LPTD15,15 ; CARRIAGE RETURN, ZEROS COUNT 364 | 16 365 | 17 366 | 20 367 | 21 368 | 22 369 | 23 370 | 24 371 | 25 372 | 26 373 | 27 374 | 137 ; 137_30 375 | 31 376 | 134 ; 134_32 377 | 33 378 | 34 379 | 35 380 | 36 381 | 37 382 | 40 383 | 41 384 | 42 385 | 43 386 | 44 387 | 45 388 | 46 389 | 47 390 | 50 391 | ; MORE CHARACTER TABLE, CHARACTERS 51 TO 123 392 | 393 | 51 394 | 52 395 | 53 396 | 54 397 | 55 398 | 56 399 | 57 400 | 60 401 | 61 402 | 62 403 | 63 404 | 64 405 | 65 406 | 66 407 | 67 408 | 70 409 | 71 410 | 72 411 | 73 412 | 74 413 | 75 414 | 76 415 | 77 416 | 140 ; 140_100 417 | 101 418 | 102 419 | 103 420 | 104 421 | 105 422 | 106 423 | 107 424 | 110 425 | 111 426 | 112 427 | 113 428 | 114 429 | 115 430 | 116 431 | 117 432 | 120 433 | 121 434 | 122 435 | 123 436 | 437 | ; MORE CHARACTER CONVERSION TABLE, CHARACTERS 124 TO 177 438 | 439 | 124 440 | 125 441 | 126 442 | 127 443 | 130 444 | 131 445 | 132 446 | 133 447 | 134 448 | 135 449 | 32 ; 32_136 450 | 30 ; 30_137 451 | 100 ; 100_140 452 | 141 453 | 142 454 | 143 455 | 144 456 | 145 457 | 146 458 | 147 459 | 150 460 | 151 461 | 152 462 | 153 463 | 154 464 | 155 465 | 156 466 | 157 467 | 160 468 | 161 469 | 162 470 | 163 471 | 164 472 | 165 473 | 166 474 | 167 475 | 170 476 | 171 477 | 172 478 | 173 479 | 176 ; 176_174 480 | 175 481 | 175 ; 175_176 482 | 177 483 | SUBTTL LPTSER - JAM 25 SEPT 1968 - INTERRUPT LEVEL ROUTINES 484 | ; THIS PART IS ENTIRELY AUTONOMUS AND DOES NOT TRY TO 485 | ; TICKLE THE USER'S CORE, BECAUSE IT ISN'T THERE! 486 | 487 | ^LPTINT: 488 | JSR LPTSAV ; SAVE ACCUMULATORS AND SET RETURN ADDRESS 489 | CONSZ LPT,LPTLOV ; LINE OVERFLOW? 490 | JRST LPTLOI 491 | MOVEI DEVDAT,LPTDDB ; SET UP DEVICE DATA BLOCK ADDRESS FOR SETIOD AND PDVTIM 492 | MOVE IOS,LPTIOS ; LET'S SEE WHAT THE UUO-LEVEL ROUTINES ARE TRYING TO TELL US 493 | CONSZ LPT,70 ; IS THE ERROR CHANNEL DEASSIGNED? 494 | CONSO LPT,LPTDON ; OR MAYBE THIS IS REALLY AN ERROR? 495 | JRST LPTERI ; GO CHECK IT OUT 496 | CONSZ LPT,LPTERR ; IS LPT TURNED OFF? 497 | JRST LPTERH ; YES, FORCE HUNG DEVICE MESSAGE 498 | 499 | MOVE A,LPTCC ; FIRST, IS THERE ANYTHING TO PRINT 500 | CAIL A,5*LPTBLN ; COMPARE WITH TOTAL COUNT 501 | JRST LPTOF ; NOTHING TO PRINT, SHUT OFF LPT 502 | 503 | SKIPN LPTBG1 ;IS THIS THE FIRST INTERRUPT? 504 | JRST LPTIN3 ;NO. 505 | DATAO LPT,[BYTE (7) 15,177,20] ;YES. HERE WE SEND A TOP OF DOUBLE FORM 506 | SETZM LPTBG1 ;AVOID THIS NEXT TIME 507 | JRST LPTCF1 ;GO DISMISS THIS INTERRUPT 508 | 509 | LPTIN3: CAIE A,4*LPTBLN ; CHECK FOR NEARLY EMPTY 510 | JRST LPTIN2 ; NOT NEARLY EMPTY, CONTINUE NORMALLY 511 | TLZE IOS,IOW ; ARE WE IN AN IO WAIT? 512 | PUSHJ PDP,STTIOD ; YES, GET US OUT! 513 | LPTIN2: LDB C,PDVTIM ; PICK UP HUNG COUNT TIME 514 | DPB C,PDVCNT ; DEPOSIT IT, INITIATE HUNG COUNTING 515 | SKIPN A,LPTDCN ; SEE IF WE TRANSMIT LESS THAN 5 CHARS THIS TIME 516 | MOVEI A,5 ; WE WILL PRINT 5 CHARACTERS 517 | SETZM LPTDCN ; INDICATE 5 CHARACTERS NEXT TIME 518 | ADD A,LPTCC ; ADD IN COUNT 519 | CAILE A,5*LPTBLN ; COMPARE WITH TOTAL COUNT 520 | JRST LPTIN1 ; IF TOO LARGE, THERE IS NOT A MULTIPLE OF 5 CHARS 521 | MOVEM A,LPTCC ; STORE CHAR. COUNT 522 | DATAO LPT,@LPTIBP ; SEND WORD TO LINE PRINTER 523 | SETZM @LPTIBP ; ZERO THAT WORD TO AVOID CONFUSION 524 | AOS A,LPTIBP ; OTHERWISE THERE IS, AND WE CAN INCREMENT OUT POINTER 525 | CAIL A,LPTIBF+LPTBLN ; CHECK FOR BUFFER OVERFLOW . . . 526 | MOVEI A,LPTIBF ; AND RESET POINTER IF SO 527 | MOVEM A,LPTIBP ; AND RE-STORE POINTER FOR NEXT TIME 528 | POPJ PDP, ; SO LONG, BEEN GOOD TO SERVE YOU 529 | ; COME HERE WHEN THERE IS NOT A FULL WORD TO BE PRINTED 530 | 531 | LPTIN1: TLNN IOS,LPTEN1 ; IS THIS THE LAST WORD IN BUFFER? 532 | JRST LPTOF ; NO, FORGET IT 533 | DATAO LPT,@LPTIBP ; SEND PARTIAL WORD 534 | SETZM @LPTIBP ; AND ZERO IT FOR POSTERITY 535 | SUBI A,5*LPTBLN ; GET NUMBER OF CHARS WE WILL TRANSMITT NEXT TIME 536 | MOVEM A,LPTDCN ; PUT IT HERE FOR FUTURE REFERENCE 537 | MOVEI A,5*LPTBLN ; RESET COUNT TO MAXIMUM 538 | MOVEM A,LPTCC 539 | POPJ PDP, ; NO WORRY ABOUT WRAP-AROUND EITHER 540 | LPTCRF: CONO LPT,LPTCHB+LPTDON+LPTALT ;SET ALT FLAG 541 | DATAO LPT,[BYTE(7) 20,177,20,177,20] ;3 TOP OF DOUBLE FORMS 542 | SETZM LPTBG1 543 | JRST LPTCF1 ;NO NEED TO ADVANCE FORM AT THE START 544 | 545 | LPTCF2: SETOM LPTBG1 ; MAKE CR-FF ON NEXT OUTPUT. 546 | LPTCF1: LDB C,PDVTIM ; PICK UP HUNG COUNT TIME, DEFINED IN LOWCOR 547 | DPB C,PDVCNT ; DEPOSIT IT, INITIATE HUNG COUNTING 548 | LPTXIT: MOVEM IOS,LPTIOS ; STORE IOS IN LPT DDB 549 | POPJ P, ; AND EXIT, CHANNEL 5 550 | 551 | LPTOF: TLZE IOS,LPTEN2 ; HAVE WE GIVEN TERMINAL 5 FF'S 552 | JRST LPTCRF ; GO DO IT AND RETURN IMMEDIATELY 553 | TLZE IOS,LPTEN1 ; IS THIS THE END 554 | JRST LPTCF2 ; YES - ARRANGE TO MAKE FF'S NEXT 555 | PUSHJ P,LPTERH ; CLEAR LPT (PRESERVING DELETE BIT] 556 | TLZE IOS,IOW ; ARE WE IN AN IO WAIT? 557 | PUSHJ PDP,STTIOD ; YES, CHANGE TO WAIT SATISFIED! 558 | TLZ IOS,DEVSBB ; SYSTEM BUFFER IS NO LONGER BUSY 559 | JRST LPTXIT ; EXIT 560 | 561 | ; COME HERE IF WE FIND THE LPT IS NOT ON 562 | ; JUST CLEAR LPT AND WAIT FOR HUNG DEVICE MESSAGE 563 | 564 | LPTERH: HLLZS LPTCON 565 | CONSZ LPT,LPTALT ; IS DELETE FLAG CURRENTLY SET? 566 | TRO IOS,DELBIT ; YES, REMEMBER IT! 567 | MOVEM IOS,LPTDDB+DEVIOS ; IN MEMORY TOO 568 | CONO LPT,0 569 | POPJ P, 570 | ; THIS PART HANDLES THE ERROR SYSTEM 571 | 572 | LPTERI: CONSO LPT,70 ; IS THE ERROR CHANNEL ASSIGNED? 573 | JRST LPTER1 ; NO, GO REASSIGN IT AND CONTINUE 574 | MOVEI A,0 ; ASSUME NO BIT 575 | TRZE IOS,DELBIT ; TRUE? 576 | TRO A,LPTALT ; NO, SET BIT 577 | CONO LPT,LPTCLB+LPTDON(A); YES, DEASSIGN IT 578 | MOVEM IOS,LPTDDB+DEVIOS 579 | MOVEI A,LPTDON ; SET TO INTERRUPT ONLY WHEN DONE 580 | LPTER2: HRRM A,LPTCON ; TELL INTERRUPT SERVICE ABOUT IT 581 | POPJ PDP, 582 | 583 | LPTER1: CONI LPT,A ; GET CURRENT CONDITIONS, EVEN THOUGH I KNOW EXACTLY WAT THEY ARE 584 | ANDI A,300 ; MASK OUT THE RIGHT ONES 585 | CONO LPT,LPTCHB(A) ; RESTORE ALL CONO BITS 586 | MOVEI A,LPTDON+LPTERR+LPTLOV 587 | JRST LPTER2 ; AND PRETEND NOTHING EVER HAPPENED 588 | 589 | LPTLOI: CONI LPT,A ; GET LPT BITS 590 | TRZ A,LPTLOV ; KILL LINE OVERFLOW BIT 591 | CONO LPT,(A) ; GIVE THEM BACK 592 | DATAO LPT,[BYTE (7) 15,12] 593 | POPJ PDP, 594 | 595 | BEND LPTSER 596 | -------------------------------------------------------------------------------- /sys/J17-1974/lup.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00002 PAGES 2 | RECORD PAGE DESCRIPTION 3 | 00001 00001 4 | 00002 00002 TITLE LUP LOWER TO UPPER CASE. 5 | 00004 ENDMK 6 | ; 7 | TITLE LUP LOWER TO UPPER CASE. 8 | ;BEWARE: THIS PROGRAM IS VERY STUPID. 9 | ;ALSO CONVERTS 175 (ALT MODE) TO CLOSE CURLY BRACKET 10 | A_1 11 | B_2 12 | IBUF: BLOCK 3 13 | OBUF: BLOCK 3 14 | INNAM: 'MAIL ' 15 | 0 16 | 0 17 | 0 18 | OUTNAM: 'MAIL ' 19 | 0 20 | 0 21 | 0 22 | BEGIN: CALLI 23 | INIT 1,0 24 | 'DSK ' 25 | IBUF 26 | HALT 27 | INBUF 1,22 28 | INIT 2,0 29 | 'DSK ' 30 | OBUF,,0 31 | HALT 32 | OUTBUF 2,22 33 | LOOKUP 1,INNAM 34 | HALT 35 | ENTER 2,OUTNAM 36 | HALT 37 | MOVEI 38 | READ: SOSLE IBUF+2 39 | JRST READ.1 40 | INPUT 1, 41 | STATZ 1,740000 42 | HALT 43 | STATZ 1,20000 44 | JRST EOF 45 | READ.1: ILDB A,IBUF+1 46 | MOVE B,@IBUF+1 47 | TRNN B,1 48 | JRST WRITE 49 | MOVNI B,5 50 | ADDM B,IBUF+2 51 | AOS IBUF+1 52 | JRST READ 53 | 54 | WRITE: AOJE WRIT.0 55 | CAIL A,"a" 56 | CAILE A,"z" 57 | JRST .+2 58 | TRZ A,40 59 | WRIT.0: CAIN A,175 60 | MOVEI A,"~" 61 | CAIN A,42 62 | MOVNI 1 63 | SOSLE OBUF+2 64 | JRST WRIT.1 65 | OUTPUT 2, 66 | STATZ 2,740000 67 | HALT 68 | WRIT.1: IDPB A,OBUF+1 69 | JRST READ 70 | 71 | EOF: CLOSE 1, 72 | CLOSE 2, 73 | RELEAS 1, 74 | RELEAS 2, 75 | CALLI 12 76 | END BEGIN 77 | -------------------------------------------------------------------------------- /sys/J17-1974/mail.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00004 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 BEGIN MAIL  SUBTTL MAIL SERVICE. 5 | C00005 00003 WRCV: PUSHJ P,SRCV 6 | C00006 00004 ROUTINE TO GET THE JOB NUMBER OF THE ADDRESSEE 7 | C00008 ENDMK 8 | C; 9 | BEGIN MAIL  SUBTTL MAIL SERVICE. 10 | 11 | ^UMAIL: CAILE UCHN,MAXMAIL ;AC FIELD IN BOUNDS? 12 | JRST UUOERR ;NO LOSE. 13 | HRRZ AC1,UUO ;GET THE EFFECTIVE ADDRESS 14 | CAML AC1,USRREL(PID) ;IS THIS INSIDE OF USER'S MAXIMUM? 15 | JRST UUOERR ;NO LOSE. 16 | JRST @MALTBL(UCHN) ;DISPATCH TO APPROPRIATE ROUTINE 17 | 18 | DEFINE UUOS{FOR X IN(SEND,WRCV,SRCV,SKPME,SKPHIM,SKPSEN)~ 19 | 20 | UUOMAC MALTBL,MAIL 21 | MAXMAIL__UUOCNT-1 22 | 23 | SKPSEN: JSP AC3,GETJOB ;THIS JSP MUST BE LABELED SKPSEN 24 | JRST SEND1 ;ADDRESSEE EXISTS, BEHAVE LIKE "SEND" UUO 25 | SEND: JSP AC3,GETJOB ;DAT _ JOB# OF RECEIVING JOB 26 | SEND1: SKIPE JBTMAIL(DAT) ;DOES THIS GUY HAVE MAIL ALREADY? 27 | POPJ P, ;YES. CAN'T DO IT. 28 | XCTR XR,[HRRZ TAC,1(UUO)] ;GET THE ADDRESS OF THE MAIL BLOCK 29 | MOVEI AC1,37(TAC) ;GET ADDRESS OF LAST WORD. 30 | CAMLE AC1,USRREL(PID) ;GOD FORBID HE SHOULD SEND MAIL FROM UPPER. 31 | JRST ADRERR 32 | MOVEI AC3,40 33 | PUSHJ P,UFSGET 34 | HRRZM AC1,JBTMAIL(DAT) 35 | ADDI TAC,(PROG) 36 | HRL AC1,TAC 37 | MOVE AC2,AC1 38 | BLT AC1,37(AC2) 39 | MOVEI J,(DAT) 40 | MOVM TAC,JOBQUE(J) ; WAKE HIM UP IF HE IS IN IOWQ 41 | SKIPG JBTSTS(J) ; IF NOT RUNNABLE, DON'T REQUE HIM 42 | CAIE TAC,IOWQ 43 | JRST NOWAKE 44 | MOVEI TAC,RUNQ 45 | MOVNM TAC,JOBQUE(J) 46 | PUSHJ P,REQUE 47 | NOWAKE: MOVSI AC1,INTMAIL ; IS HE ENABLED FOR A MAIL INTERRUPT? 48 | AOS (P) ;SET UP SUCCESS RETURN FROM SEND 49 | TDNN AC1,JBTIEN(J) 50 | POPJ P, ;NO RETURN QUICK 51 | IORM AC1,JBTIRQ(J) ; YES, GIVE HIM THE INTERRUPT. 52 | SETOM INTREQ(PID) 53 | JRST WSCHED ;SHUT US OFF TO GET THE INTERRUPT PROCESSED. 54 | WRCV: PUSHJ P,SRCV 55 | TROA AC1,IOWQ 56 | POPJ P, 57 | MOVNM AC1,JOBQUE(J) 58 | PUSHJ P,WSCHED 59 | JRST WRCV 60 | 61 | SRCV: SKIPN AC1,JBTMAIL(J) 62 | POPJ P, 63 | SETZM JBTMAIL(J) 64 | HRL TAC,AC1 65 | HRRI TAC,@UUO 66 | MOVEI TAC1,37(TAC) 67 | BLT TAC,(TAC1) 68 | PUSHJ P,FSGIVE 69 | JRST CPOPJ1 70 | 71 | SKPME: SKIPA DAT,J 72 | SKPHIM: JSP AC3,GETJOB 73 | SKIPN JBTMAIL(DAT) 74 | POPJ P, 75 | JRST CPOPJ1 76 | 77 | ; ROUTINE TO GET THE JOB NUMBER OF THE ADDRESSEE 78 | 79 | ^FNDJOB: ;A ROSE BY ANY OTHER NAME, ETC. 80 | GETJOB: MOVE DAT,@UUO ;GET USER'S ARGUMENT 81 | TDNN DAT,[-1,,777700] ;IS IT A NAME? 82 | JRST GJ1 ;NO THIS IS A NUMBER 83 | MOVSI TAC,-JOBN ;SEARCH ALL JOB NAMES. 84 | CAME DAT,JOBNAM(TAC) ;IS THIS ONE? 85 | AOBJN TAC,.-1 ;NOT A MATCH. LOOP. 86 | JUMPGE TAC,GJERR ;JUMP IF NO NAMES 87 | MOVE TAC1,TAC ;CONTINUE SCAN. LOOK FOR ANOTHER 88 | AOBJP TAC1,GJ2 ;TEST AT TOP OF LOOP. JUMP WHEN DONE 89 | CAME DAT,JOBNAM(TAC1) ;SAME NAME? 90 | JRST .-2 ;NO. LOOP. 91 | MOVEI TAC,GTGARP ;PICKUP THE AMBIGUOUS NAME ERROR MESSAGE 92 | JRST GJERR1 ;GO TO ERROR STUFF 93 | 94 | GJ2: MOVEI DAT,(TAC) ;GET JOB NUMBER. 95 | GJ1: MOVE TAC,JBTSTS(DAT) ;GET JOB STATUS 96 | TLNE TAC,JNA ;IS THIS JOB SLOT ASSIGNED? 97 | JRST (AC3) ;YES. RETURN WITH JOB NUMBER IN DAT 98 | GJERR: MOVEI TAC,GTGAR1 ;GET ADDRESS OF ERROR ROUTINE 99 | GJERR1: HRRZ AC3,AC3 ; FIND OUT WHO CALLED GETJOB 100 | CAIN AC3,SKPSEN+1 ; WAS IT SKPSEN UUO? 101 | JRST CPOPJ2 ; YES, TERMINATE THE UUO 102 | PUSHJ P,HNGMES ; NO, COME BACK WHEN HE TYPES CONTINUE 103 | JRST GETJOB ; 104 | 105 | GTGAR1: ASCIZ/ 106 | ?NON-EX JOB NAME OR NUMBER 107 | / 108 | 109 | GTGARP: ASCIZ / 110 | ?AMBIGUOUS JOB NAME 111 | / 112 | BEND 113 | -------------------------------------------------------------------------------- /sys/J17-1974/parser.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00005 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 BEGIN PARSER  SUBTTL PARSER - PARITY ERROR SERVICE ROUTINE 5 | C00006 00003 SUBTTL HERE WE SEARCH FOR REAL ERRORS. 6 | C00012 00004 SUBTTL HERE WHEN A REAL ERROR IS FOUND. 7 | C00026 00005 SUBTTL P2 PARITY ERROR INTERRUPT 8 | C00031 ENDMK 9 | C; 10 | BEGIN PARSER  SUBTTL PARSER - PARITY ERROR SERVICE ROUTINE 11 | ;R. E. GORIN 7 AUG 72. 12 | 13 | AP2CHL_CAT(P2CH,\APRCHN) 14 | 15 | ^PARCLK: ;CALLED BY: SKIPE PARFLG 16 | ; PUSHJ P,PARCLK 17 | CONO PI,APROFF ;TURN OFF APR TO AVOID TIMING ERRORS 18 | SETOM P2RFLG ;SET SECOND LEVEL FLAG 19 | SETZM PARFLG ;CLEAR PRIMARY FLAG 20 | JRST PARIN0 ;JOIN PARITY ERROR INTERRUPT CODE 21 | 22 | ^PARINT: ;HERE FROM APR CHANNEL FOR P1 PARITY ERROR, 23 | CONO PI,APROFF ;TURN OFF APR SO WE CAN TEST FOR BAD PARITY. 24 | PARIN0: MOVEM P,PARPSAV ;ASSUME WE HAVE NO AC'S. 25 | MOVE P,APRPDL ;GET A STACK. 26 | PUSHACS ;SAVE ALL THE AC'S 27 | MOVEI PID,P1PID ;SET PROCESSOR IDENTIFICATION 28 | PUSHJ P,DISCRLF ;START STUFFING THE TYPEOUT BUFFER 29 | PUSHJ P,DISDATE ;ANNOUNCE THE DATE AND TIME 30 | SKIPN P2RFLG ;IS THE PDP-6 HALUCINATING AGAIN? 31 | JRST PARIN1 ;NO IT MUST BE P1 32 | 33 | PUSHJ P,DISMES ;BLAME ON THE STONES 34 | ASCIZ /PDP-6 DETECTED PARITY ERROR. PC = / 35 | MOVE TAC,AP2CHL ;GET THE PC OF PDP-6'S ERROR. 36 | TLNE TAC,USRMOD ;IS THIS IN USER MODE? 37 | TRNN TAC,777760 ;YES. IS THIS ABOVE THE AC'S 38 | JRST PARIN3 ;EXEC MODE OR RUNNING IN THE AC'S 39 | HRRZ TAC1,LASTPR+P2PID ;GET CURRENT RELOCATION DATA 40 | ANDI TAC1,776000 ;LOWER PART OF THE RELOCATION ONLY 41 | ADDI TAC,(TAC1) ;ADD RELOCATION 42 | JRST PARIN3 ;SAVE ERROR PC AND PRINT IT. 43 | 44 | PARIN1: PUSHJ P,DISMES ;HERE FOR P1 PARITY ERROR 45 | ASCIZ /PARITY ERROR. PC = / 46 | MOVE TAC,APRCHL ;GET THE PC FROM 47 | TLNE TAC,USRMOD ;IS THIS IN USER MODE? 48 | TRNN TAC,777760 ;YES. IS THIS ABOVE THE AC'S 49 | JRST PARIN3 ;EXEC MODE OR RUNNING IN THE AC'S 50 | TRNN TAC,400000 ;POSSIBLE UPPER? 51 | JRST PARIN2 ;NO THIS HAS TO BE A LOWER. 52 | HRRZ TAC1,APRCHL ;GET THE USER MODE PC. 53 | HLRZ AC3,LASTPR+P1PID ;GET THE CURRENT PROTECTION 54 | TRO AC3,1777 ;TURN ON LOW ORDER BITS. 55 | CAIG TAC1,(AC3) ;IS THIS PC IN THE LOWER? 56 | JRST PARIN2 ;YES 57 | CAIGE AC3,400000 ;IS THE LOWER GREATER THAN 128K (HA HA) 58 | MOVEI AC3,400000 ;NO. THIS IS THE NUMBER TO SUBTRACT FROM PC 59 | SUBI TAC,(AC3) ;LEAVING RELATIVE PC IN UPPER 60 | HRRZ AC3,LASTPR+P1PID ;GET THE RELOCATION 61 | LSH AC3,=9 ;SHIFT IT TO SELECT RELOC OF UPPER. 62 | ANDI AC3,776000 ;MASK 63 | TRC AC3,400000 ;UN-BUGGER IT -- RPH 2-7-73 64 | ADDI TAC,(AC3) ;ADD IT TO THE PC. 65 | MOVEM TAC,ERRPC ;SAVE ERROR PC. 66 | PUSHJ P,DISMES 67 | ASCIZ /#/ ;DENOTE BY THIS A PC IN THE UPPER 68 | JRST PARIN4 69 | 70 | SUBTTL HERE WE SEARCH FOR REAL ERRORS. 71 | PARIN2: HRRZ TAC1,LASTPR+P1PID ;GET CURRENT RELOCATION DATA 72 | ANDI TAC1,777000 ;LOWER PART OF RELOCATION 73 | ADDI TAC,(TAC1) ;ADD RELOCATION 74 | PARIN3: MOVEM TAC,ERRPC ;SAVE ERROR PC. 75 | PARIN4: PUSHJ P,DISOCT ;WRITE THE ERROR PC 76 | PUSHJ P,DISCRLF ;AND A CRLF 77 | 78 | CONO PI,@PARCON ;TURN OFF ERROR FLAG. 79 | SETOM ERRLOC ;SET TO SIGNIFY NONE FOUND YET. 80 | SETOM LASLOS ;JOB NUMBER OF LAST LOSER FOUND. 81 | SETZB TAC1,PARSJN 82 | SETZM SYSERR ;ASSUME NO ERRORS SYSTEM CORE. 83 | MOVE TAC,ERRPC ;GET THE ERROR PC 84 | TLNE TAC,USRMOD ;USER MODE? 85 | JRST PARIN5 ;YES. 86 | SETOM SYSERR ;EXEC MODE. PROBABLE SYSTEM ERROR. 87 | ANDI TAC,-1 ;PC ONLY 88 | CAIE TAC,SHFBLT ;IS THIS THE BLT IN THE SHUFFLER? 89 | CAIN TAC,SHFBLT+1 ;OR POSSIBLY HERE. 90 | MOVE TAC1,PARSJB ;SHUFFLE OPERATION. GET THE JOB NUMBER 91 | MOVEM TAC1,PARSJN ;SET FLAG IF A SHUFFLER OPERATION. 92 | 93 | PARIN5: SETZM ERRJOB ;ZERO OUR TABLE OF LOSING JOBS 94 | SETZM ERRJOB+1 ; 95 | 96 | REPEAT 0,< ;12/3/73 97 | CONI APR,TAC ;GET STATE OF SYS WR REF KLUGE 98 | HRRM TAC,SYSERR ;SAVE IN RIGHT SIDE OF SYSERR. 99 | DATAO PTR,[0] ;DISABLE SYS WR REF KLUGE. 100 | > 101 | 102 | MOVE TAC1,RMEMSIZ ;GET SIZE OF REAL MEMORY 103 | CAILE TAC1,400000 ;IS IT SMALL ENOUGH FOR ONE AOBJN? 104 | MOVEI TAC1,400000 ;NO. WE'LL DO THIS MUCH AT ONCE. 105 | MOVNI TAC1,-20(TAC1) ;OFFSET TO SKIP ACS 106 | HRLZ TAC1,TAC1 ;SWAP COUNT 107 | HRRI TAC1,20 ;OFFSET PAST ACS 108 | MOVEI AC3,@PARCON ;GET THE MASK FOR THE CONO 109 | PARL0: MOVE 0,(TAC1) ;LOOK AT MEMORY 110 | CONSO PI,(AC3) ;SKIP IF ERROR 111 | PARL1: AOBJN TAC1,PARL0 ;LOOP AND COUNT 112 | JUMPGE TAC1,PARL2 ;JUMP IF COUNT WAS EXHAUSTED. 113 | CONO PI,(AC3) ;SHUT OFF ERROR INDICATOR. 114 | MOVEM 0,(TAC1) ;STORE GOOD PARITY IN MEMORY 115 | PUSH P,TAC1 ;HAVE TO SAVE THIS FOR LATER. 116 | PUSHJ P,PARERF ;PARITY ERROR FOUND 117 | POP P,TAC1 ;RESTORE COUNTER 118 | MOVEI AC3,@PARCON ;RESTORE CONO MASK 119 | JRST PARL1 ;RESTORE COUNT AND REJOIN THE LOOP. 120 | 121 | PARL2: MOVE TAC1,RMEMSIZ ;GET THE SIZE OF OUR MEMORY 122 | CAIG TAC1,400000 ;IS IT TOO BIG TO HAVE BEEN SEARCHED? 123 | JRST PARL5 ;SMALL MEMORY HAS ALL BEEN SEARCHED. 124 | SUBI TAC1,400000 ;LEAVE US WITH COUNT OF HOW MUCH TO LOOK AT 125 | MOVN TAC1,TAC1 ;NEGATE 126 | HRLZ TAC1,TAC1 ;SWAP 127 | HRRI TAC1,400000 ;OFFSET TO UPPER REACHES OF MEMORY 128 | MOVEI AC3,@PARCON ;GET MASK FOR CONSO/CONO 129 | PARL3: MOVE 0,(TAC1) 130 | CONSO PI,(AC3) ;ANY ERROR? 131 | PARL4: AOBJN TAC1,PARL3 ;LOOP 132 | JUMPGE TAC1,PARL5 ;JUMP IF ALL DONE 133 | CONO PI,(AC3) ;SHUT OFF ERROR INDICATORS 134 | MOVEM 0,(TAC1) ;STORE GOOD PARITY IN MEMORY. 135 | PUSH P,TAC1 ;SAVE COUNTER 136 | PUSHJ P,PARERF ;SERVICE THIS ERROR 137 | POP P,TAC1 138 | MOVEI AC3,@PARCON ;RESTORE CONSO/CONO MASK 139 | JRST PARL4 ;AND RETURN TO LOOP 140 | 141 | PARL5: SKIPL ERRLOC ;HAS THIS BEEN SET UP? 142 | JRST PARL6 ;YES. WE MUST HAVE PRINTED SOMETHING 143 | PUSHJ P,DISMES ;WE DIDN'T FIND ANY. 144 | ASCIZ /LOCATION INDETERMINATE 145 | / 146 | PUSHJ P,ZSHAD ;ZERO SHADOW MEMORY IN CASE WE LOST THERE. 147 | JFCL ;SKIPS IF NO FAST ACS 148 | HRROS SYSERR ;CHECK THE SYSTEM. DEPT. OF REDUNDANCY DEPT. 149 | PARL6: 150 | MOVE TAC,SYSERR ;ERROR IN SYSTEM CORE? 151 | REPEAT 0,< ;12/1/73 152 | TRNE TAC,SWRENB ;WAS SYS WR REF KLUGE ENABLED? 153 | DATAO PTR,[1] ;YES. RE-ENABLE IT 154 | > 155 | JUMPGE TAC,PARL7 ;JUMP IF ERROR WAS NOT IN SYSTEM 156 | PUSHJ P,SYSFIX ;JUST IN CASE WE NEED THIS 157 | JFCL ;NO ERROR 158 | JFCL ;ERROR AND DIDN'T FIX 159 | ;ALL FIXED. 160 | PARL7: PUSHJ P,DISCRLF 161 | POPACS ;RESTORE ALL THE AC'S THAT WE SAVED 162 | MOVE P,PARPSAV ;GET STACK BACK (OR WHATEVER WAS IN IT). 163 | SKIPN P2RFLG ;WAS THIS THE PDP-6 HACKING? 164 | JRST PARL9 ;NO. THIS WAS THE PDP-10 165 | SETZM P2RFLG ;CLEAR ERROR FLAG 166 | CONO PI,APRON ;RESTORE INTERRUPT SYSTEM 167 | POPJ P, ;RETURN TO P1 CLOCK LEVEL 168 | 169 | PARL9: CONO PI,APRON ;TURN ON THE APR CHANNEL 170 | JEN @APRCHL ;DISMISS THIS INTERRUPT 171 | 172 | 173 | SUBTTL HERE WHEN A REAL ERROR IS FOUND. 174 | PARERF: MOVE TAC,ERRLOC ;REMEMBER OLD VALUE OF ERRLOC 175 | HRRZM TAC1,ERRLOC ;SAVE PRESENT ERROR LOCATION 176 | JUMPGE TAC,PARER1 ;JUMP IF THIS IS NOT THE FIRST TIME HERE. 177 | PUSHJ P,DISMES ;PUT OUT THE HEADING 178 | ASCIZ /LOC DATA RELOC NAME(J) 179 | / 180 | PARER1: HRRZ TAC,ERRLOC ;GET LOCATION 181 | PUSHJ P,DISLOC ;WRITE LOCATION 182 | PUSHJ P,DISTAB ;WRITE A TAB 183 | HRRZ TAC,ERRLOC ;GET LOCATION 184 | MOVE TAC,(TAC) ;GET DATA 185 | PUSHJ P,DISOCH ;WRITE LOSING DATA AS OCTAL HALF WORDS 186 | PUSHJ P,DISTAB ;PUT NEXT THING UNDER HEADING 187 | HRRZ DSER,ERRLOC ;GET THE LOCATION AGAIN (LOC = DSER) 188 | PUSHJ P,CORGBP ;MAKE A BYTE POINTER TO CORTAB 189 | ILDB J,TAC ;LOAD JOB NUMBER INTO J 190 | CAIGE J,JOBN ;IS THIS A SPECIAL CODE? 191 | JUMPG J,PARER4 ;JUMP IF CORE IS ASSIGNED TO NORMAL JOB 192 | SKIPE PARSJN ;ARE WE IN A SHUFFLE? 193 | JUMPE J,PARR4B ;YES. JUMP IF ALLEGED UNASSIGNED CORE. 194 | PARR1A: CAMN J,LASLOS ;SAME AS LAST LOSER? 195 | JRST DISCRLF ;YES. JUST TYPE A CRLF AND RETURN 196 | MOVEM J,LASLOS ;SAVE CODE FOR LAST LOSER 197 | JUMPG J,PARER2 ;JUMP IF NOT UNASSIGNED CORE 198 | PUSHJ P,DISMES ;FOR UNASSIGNED CORE 199 | ASCIZ /UNUSED 200 | / 201 | POPJ P, ;RETURN LOOK FOR MORE. 202 | 203 | PARER2: CAIE J,101 ;IS THIS THE SYSTEM? 204 | JRST PARER3 ;NO. MUST BE FREE STORAGE. 205 | HRROS SYSERR ;REMEMBER TO CHECKSUM THE SYSTEM 206 | PUSHJ P,DISMES 207 | ASCIZ /SYS 208 | / 209 | POPJ P, 210 | 211 | PARER3: PUSHJ P,DISMES 212 | ASCIZ /FS 213 | / 214 | POPJ P, 215 | 216 | 217 | PARR4B: MOVE J,PARSJN ;JOB NUMBER OF GUY BEING SHUFFLED. 218 | HRRZ TAC,PARBLK ;GET LOC OF OLD CORE 219 | SUBI DSER,(TAC) ;MAKE RELATIVE LOCATION. 220 | JUMPL DSER,PARR4C ;THIS ISN'T PART OF THE OLD CORE. 221 | HLRZ TAC,PARBLK ;GET SIZE OF OLD CORE 222 | CAILE DSER,(TAC) ;SKIP IF ERROR IS IN OLD SHUFFLED CORE. 223 | PARR4C: MOVEI J,0 224 | JUMPE J,PARR1A ;TREAT THIS AS UNUSED CORE. 225 | PARER4: PUSH P,J ;SAVE JOB NUMBER 226 | HRRZ TAC1,JBTADR(J) ;GET THE BASE ADDRESS OF THIS JOB 227 | CAMN J,PARSJN ;THIS JOB SHUFFLE IN PROGRESS? 228 | HRRZ TAC1,PARBLK ;YES. GET THE OLD JOB LOCATION. 229 | HRRZ TAC,ERRLOC ;GET THE ERROR LOCATION 230 | SUBI TAC,(TAC1) ;FORM THE USER RELATIVE ADDRESS 231 | MOVEM TAC,RERLOC ;SAVE RELOCATED ERROR LOCATION. 232 | PUSHJ P,DISLOC ;TYPE 6 CHARACTERS 233 | MOVE J,(P) ;GET THE JOB NUMBER INTO J AGAIN 234 | CAMN J,LASLOS ;SAME AS LAST TIME? 235 | JRST PARR4A ;YES. DON'T TELL JOB NAME AGAIN 236 | MOVEM J,LASLOS ;REMEMBER FOR NEXT TIME 237 | PUSHJ P,DISTAB ;TYPE A TAB FOR SEPARATION 238 | MOVE J,(P) ;MAKE SURE NO ONE CLOBBERS J. 239 | PUSHJ P,DISJOB ;TYPE JOB NUMBER(JOB NAME) 240 | CAME J,PARSJN ;IS THIS A SHUFFLE OPERATION? 241 | JRST PARR4A 242 | PUSHJ P,DISMES 243 | ASCIZ / SHUFFLE/ 244 | PARR4A: PUSHJ P,DISCRLF 245 | MOVE J,(P) ;RESTORE J (AGAIN) 246 | MOVE TAC,JBTSTS(J) ;GET THE JOB STATUS WORD 247 | TLNN TAC,JSEG ;IS THIS REALLY AN UPPER? 248 | JRST PARER8 ;NO, JUST A SIMPLE LOWER. 249 | PUSHJ P,MARKERR ;HAS THIS UPPER LOST BEFORE (OR IS IT FIXABLE)? 250 | JRST TPOPJ ;YES. DON'T TELL LOWERS AGAIN 251 | MOVEI TAC,400000 ;IN CASE OF A SEGMENT 252 | ADDM TAC,RERLOC ;ADD 400000 TO RELOCATED ERROR ADDRESS 253 | MOVEI J,JOBN-1 ;FOR ALL THE JOBS IN THE WORLD.... 254 | PARER5: LDB TAC,PSEGN ;GET THE JOB NUMBER OF THIS GUY'S UPPER 255 | CAME TAC,(P) ;SAME AS THIS UPPER? 256 | SOJG J,PARER5 ;NO. 257 | JUMPLE J,PARER6 ;JUMP IF NO MORE USERS OF THIS UPPER 258 | PUSH P,J ;SAVE THIS JOB ON THE STACK 259 | PUSHJ P,TELUSR ;TELL A LOWER SEGMENT. 260 | POP P,J 261 | SOJG J,PARER5 ;DECREMENT J AND LOOK FOR MORE. 262 | PARER6: POP P,J ;GET THE NUMBER OF THIS UPPER. 263 | MOVE TAC,PRJPRG(J) ;GET A RIDICULOUS NAME 264 | MOVEM TAC,JOBNAM(J) ;SAVE IT AS THE JOB NAME 265 | POPJ P, ;NO ONE WILL ATTACH TO THIS AGAIN. 266 | 267 | PARER8: PUSHJ P,TELUSR ;TELL THE USER ABOUT WHAT BEFELL HIM 268 | JRST TPOPJ ;ADJUST STACK AND RETURN. 269 | 270 | TELUSR: PUSHJ P,MARKERR ;MARK THIS JOB HAS ERROR 271 | POPJ P, ;HE'S BEEN TOLD BEFORE. 272 | MOVSI TAC,INTPAR ;PICKUP PARITY ERROR ENABLE BIT 273 | TDNN TAC,JBTIEN(J) ;IS THIS USER ENABLED FOR THIS? 274 | JRST TELUS1 ;NO. TELL HIM AND STOP HIM 275 | IORM TAC,JBTIRQ(J) ;SET PARINT BIT FOR THIS USER 276 | SETOM INTREQ(PID) ;REQUEST A USER INTERRUPT 277 | MOVE TAC1,RERLOC ;GET THE RELOCATED ADDRESS OF ERROR 278 | MOVEM TAC1,INTDTM(J) ;SAVE IT FOR THIS USER. 279 | CONO PI,1B24!1(7-CLKCHN) ;REQUEST INTERRUPT ON CLOCK CHANNEL 280 | POPJ P, 281 | 282 | TELUS1: PUSHJ P,TTYERR ;GET THE USER'S TTY 283 | MOVE TAC,RERLOC 284 | HLRZ AC3,JBTADR(J) 285 | CAMN J,PARSJN ;SHUFFLED JOB? 286 | HLRZ AC3,PARBLK ;YES. USE THIS ADDRESS. 287 | CAILE TAC,(AC3) ;IN LOWER? 288 | JRST TELUS2 ;NO. IT IS IN THE UPPER 289 | PUSHJ P,INLMES ;STUFF DATA INTO TTY 290 | ASCIZ /PARITY ERROR IN YOUR CORE IMAGE. LOC = / 291 | JRST TELUS3 292 | 293 | TELUS2: PUSHJ P,INLMES 294 | ASCIZ /PARITY ERROR IN YOUR UPPER SEGMENT. LOC = / 295 | TELUS3: MOVE TAC,RERLOC ;GET THE RELOCATED ERROR 296 | PUSHJ P,OCTPNT ;TELL HIM THE LOCATION. 297 | PUSHJ P,PRCRCC 298 | PUSHJ P,TTYSTR ;START THE USER'S TTY TYPING 299 | SKIPL JBTSTS(J) ;IS THIS GUY RUNNABLE? 300 | POPJ P, ;NO. 301 | TELSTP: MOVE TAC,JBTSTS(J) 302 | TLNE TAC,JLOG ;LOGGED IN? 303 | JRST STOP1 ;YES. JUST STOP IT. 304 | JRST ESTOP ;NO. KILL THE PHANTOM 305 | 306 | ;CALL THIS ROUTINE TO SEE IF HE NEEDS TO BE TOLD 307 | ;WILL TRY TO REPEAT SWAPIN IF POSSIBLE 308 | 309 | MARKERR: ;PUSHJ HERE TO MARK JOB IN J AS HAVING ERROR. 310 | JUMPLE J,CPOPJ ;IMPOSSIBLE JOB NUMBER 311 | CAIL J,JOBN 312 | POPJ P, ;IMPOSSIBLE JOB, UNNATURAL ACTS 313 | MOVEI TAC,(J) ;GET JOB NUMBER 314 | SETZ TAC1, 315 | LSHC TAC,-5 316 | ROT TAC1,5 317 | MOVEI AC3,1 318 | ROT AC3,-20(TAC1) ;ROTATE TO AN UNUSUAL POSITION 319 | TDNE AC3,ERRJOB(TAC) ;IS THIS BIT SET ALREADY? 320 | POPJ P, ;YES. 321 | IORM AC3,ERRJOB(TAC) ;NO. SET IT 322 | MOVE TAC,RERLOC 323 | HLRZ AC3,JBTADR(J) 324 | CAIG TAC,(AC3) ;CAN'T FIX HIS UPPER HERE 325 | SKIPE STIME(J) ;NOW SEE IF THE SWAPPER CAN FIX IT 326 | JRST CPOPJ1 ;MODIFIED SINCE SWAPIN 327 | HLRZ TAC,JBTSWP(J) 328 | JUMPE TAC,CPOPJ1 ;NOT SWAPPED OUT YET 329 | SKIPN XJOB(J) 330 | AOS XJOB 331 | AOS XJOB(J) ;THIS SHOULD MAKE IT GET SWAPPED 332 | POPJ P, 333 | SUBTTL P2 PARITY ERROR INTERRUPT 334 | ^P2RINT: 335 | CONO PI,@P2RCON ;ZERO ERROR BIT 336 | MOVEM TAC,P2SA ;SAVE TAC 337 | MOVEI TAC,17 ;SCAN THE AC'S 338 | MOVES (TAC) 339 | SOJGE TAC,.-1 ;LOOP 340 | CONSZ PI,@P2RCON ;IS THAT WHERE IT IS? 341 | JRST PARACS ;YES 342 | SETOM PARFLG ;NO, TELL THE TEN 343 | MOVE TAC,PARFLG ;WAIT FOR THE PDP-10 TO SEE THE FLAG 344 | JUMPN TAC,.-1 ;WAIT UNTIL IT GOES ZERO 345 | MOVE TAC,P2RFLG ;WAIT FOR THE PDP-10 TO FINISH PARSER 346 | JUMPN TAC,.-1 ; 347 | JRST P2ROUT ;RESTORE TAC AND DISMISS 348 | PARACS: CONO PI,@P2RCON ;CLEAR PARITY ERROR 349 | P2ROUT: MOVE TAC,P2SA ;RESTORE ACCUMULATOR 350 | JEN @AP2CHL ;DISMISS INTERRUPT 351 | 352 | BEND PARSER 353 | -------------------------------------------------------------------------------- /sys/J17-1974/patch.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00002 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 FORCE OUT THE LITERALS (XLISTED FOR YOUR READING PLEASURE) 5 | C00004 ENDMK 6 | C; 7 | ;FORCE OUT THE LITERALS (XLISTED FOR YOUR READING PLEASURE) 8 | XLIST ;FOR CRISSAKE SAVE 100 PAGES OF PAPER 9 | LIT 10 | LIST 11 | CHKEND__. ;END OF CHECKSUMMED REGION. 12 | VAR 13 | 14 | ;PATCH - PATCH AREA FOR T. S. MONITOR 15 | 16 | ;THIS PROGRAM SHOULD BE LOADED AFTER LAST NEEDED PROGRAM 17 | ;BUT BEFORE SYSMAK,EXEC DDT,USER DDT, AND ONCE 18 | 19 | ^PATCH: BLOCK 100 20 | -------------------------------------------------------------------------------- /sys/J17-1974/ptrser.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00005 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 BEGIN PTRSER  SUBTTL PTRSER PAPER TAPE READER SERVICE, J. SAUTER, 11-NOV-68 5 | C00003 00003 UUO DISPATCH TABLE: 6 | C00009 00004 PAPER TAPE READER INTERRUPT. 7 | C00013 00005 P1 CLOCK LEVEL AND HUNG TIMEOUT CODE 8 | C00019 ENDMK 9 | C; 10 | BEGIN PTRSER  SUBTTL PTRSER PAPER TAPE READER SERVICE, J. SAUTER, 11-NOV-68 11 | 12 | ;PTR CONTROL REGISTER 13 | POWER__400 ;POWER ON ON PDP-6, NOT EOT ON PDP-10. 14 | BINARY__40 ;BINARY MODE. 15 | BUSY__20 ;PTR IS BUSY READING A WORD. 16 | DONE__10 ;PTR HAS A WORD. 17 | 18 | ;SPECIAL ASCII CHARACTERS: 19 | NULL__200 ;NULL CHARACTER 20 | RUBOUT__377 ;RUBOUT. 21 | 22 | ;SPECIAL BITS IN LH OF IOS: 23 | PTRPOW__200000 ;PTR HAS (HAD) POWER ON. 24 | PTRNPW__100000 ;PTR DOESN'T HAVE POWER ON FOR FIRST OPERATION. 25 | STOPTR__40000 ;HUNG TIMEOUT ASSUMES EOF. 26 | ;UUO DISPATCH TABLE: 27 | JRST PTRINI ;INITIALIZE. 28 | JRST PTRHNG ;HUNG TIMEOUT. 29 | ^PTRDSP: 30 | JRST PTRXRL ;RELEASE. 31 | POPJ P, ;CLOSE. 32 | JRST ILLOUT ;OUTPUT 33 | 34 | ;INPUT UUO 35 | PTRINP: PSYNC PTRCSC 36 | PUSHJ P,SETACT ;SET IOACT. 37 | TLNN IOS,IOBEG ;FIRST TIME? 38 | JRST @PTRIN1 ;NO. 39 | TLO IOS,IOFST ;YES. SET UP THINGS. 40 | TLZ IOS,PTRPOW 41 | PUSHJ P,SETBYT ;SET UP TAC. 42 | MOVEM TAC,PTRPTR ;SAVE FOR INTERRUPT ROUTINES. 43 | PTRIN5: TLZN IOS,PTRNPW ;HAS THE LOSER FLAG BEEN SEEN ALREADY? 44 | JRST @PTRIN1 ;TO PTRP1U FOR 1 PROCESSOR, OR PTRP2U FOR TWO. 45 | ;HERE ON SECOND INPUT AFTER FIRST INPUT DISCOVERED POWER OFF ON THE PDP-6 READER 46 | PUSHJ P,CLRACT ;CLEAR IO ACTIVE 47 | XSYNC PTRCSC ;RELEASE SYNCHRONIZER. 48 | PUSHJ P,HNGSTP ;PRINT DEVICE PTR OK? AND STOP JOB. 49 | JRST PTRINP 50 | 51 | PTRP2U: PUSHJ P,STOIOS ;STORE IOS. 52 | SETOM PTRACT ;REQUEST P2 TO START READER. 53 | JRST XPOPJ ;DESYNCHRONIZE AND EXIT 54 | 55 | ;HERE AT P2 CLOCK LEVEL 56 | ^PTRP2: MOVE TAC,PTRACT ;P2 START REQUEST? 57 | JUMPE TAC,CPOPJ ;NO. 58 | PSYNC PTRCSC ;SYNCHRONIZE. 59 | SETZM PTRACT ;INDICATE REQUEST GRANTED. 60 | MOVEI DDB,PTRDDB ;SET UP DDB AND IOS. 61 | MOVE IOS,DEVIOS(DDB) 62 | TLZE IOS,STOPTR ; 63 | JRST PTRYRL ;HUNG TIMEOUT REQUESTS THAT THE READER STOP. 64 | PTRP1U: 65 | PTRIN2: TLZN IOS,IOBEG ;FIRST TIME? 66 | JRST PTRIN3 ;NO. 67 | CONSZ PTR,POWER ;YES. POWER ON? 68 | TLOA IOS,PTRPOW ;YES. 69 | JUMPN PID,PTRIN4 ;POWER OFF ON PDP-6 READER. 70 | SKIPA TAC1,[PTRCHN!BUSY] ;SET TAC1 WITH CONO START 71 | PTRIN3: MOVEI TAC1,PTRCHN!DONE ;SET TAC1 WITH CONO CONTINUE 72 | PUSHJ P,STOIOS ;STORE IOS, RESET HUNG COUNT. 73 | LDB TAC,PIOMOD ;GET MODE. 74 | CAIE TAC,IB ;IMAGE BINARY? 75 | CAIN TAC,B ;OR BINARY? 76 | TRO TAC1,BINARY ;YES. SET READER INTO BINARY MODE. 77 | MOVEM TAC1,PTRSTR ;REMEMBER FOR INTERRUPT LEVEL. 78 | MOVEI TAC,DONE ;WAIT FOR DONE FLAG. 79 | CONO PI,PTROFF 80 | SETZM PTRDSC ;SET NOT PTR DISCONNECTING. 81 | HRRM TAC,@PTRCON ;SET UP BITS. 82 | CONSO PTR,7 ;SKIP IF READER IS RUNNING! 83 | CONO PTR,@PTRSTR ;READER IDLE. KICK IT. 84 | CONO PI,PTRON 85 | CONSZ PTR,POWER ;WE SHOULD SEE POWER OR TAPE BY NOW. 86 | JRST XPOPJ ;DESYNCRONIZE AND RETURN. 87 | PTRIN4: TLO IOS,PTRNPW!IOBEG ;FLAG NO POWER AVAILABLE 88 | TLZN IOS,STOPTR 89 | SETOM PTRADV ;FLAG THE PDP-10 90 | PUSHJ P,STOIOS ;STORE IOS 91 | JUMPN PID,XPOPJ 92 | JRST PTRIN5 ;HANG ON THE PDP-10 93 | 94 | PTRINI: SYNINI PTRCSC ;INITIALIZE SYNCHRONIZER CELLS. 95 | ;DETERMINE WHICH PROCESSOR TO USE. IF ONE PROCESSOR IS A 96 | ;PDP-6, USE IT. IF P2 DOES NOT EXIST, USE P1, OTHERWISE, 97 | ;USE P2. 98 | MOVEI AC1,PTRP1U ;ASSUME P1 99 | MOVEI AC2,PTRCN1 100 | HRRZ TAC,P2NUM ;GET NUMBER OF P2 (=6 OR =10) 101 | CAIN TAC,6 ;IS IT A PDP-6? 102 | JRST USEP2 ;YES. USE IT. 103 | JUMPE TAC,USEP1 ;IF THERE IS NO P2, USE P1. 104 | HRRZ TAC,P1NUM ;GET NUMBER OF P1. 105 | CAIN TAC,6 ;IS IT A PDP-6? 106 | JRST USEP1 ;YES. USE IT. 107 | USEP2: MOVEI AC1,PTRP2U 108 | MOVEI AC2,PTRCN2 109 | USEP1: MOVEM AC1,PTRIN1 ;SET DISPATCH FOR INPUT UUO'S 110 | MOVEM AC2,PTRCON ;SET ADDRESS FOR CONSZ BITS. 111 | HLLZS PTRCN1 112 | HLLZS PTRCN2 113 | 114 | PTRXRL: SETZM PTRDDB+DEVIOS ;CLEAR READER STATUS. RELEASE UUO. 115 | ^PTRREL: ;ALSO CALLED FROM SYSINI 116 | CONO PTR,0 ;STOP READER, DISCONNECT IT FROM PI 117 | HLLZS @PTRCON 118 | POPJ P, 119 | 120 | PTRYRL: PUSHJ P,IOSET 121 | JRST PWROFF ;SIMULATE POWER OFF. 122 | ;PAPER TAPE READER INTERRUPT. 123 | ^PTRINT: 124 | SKIPL PTRDSC ;SKIP DATAI IF WE ARE DISCONNECTING. 125 | DATAI PTR,PTRCHR ;READ CHAR FROM READER. 126 | JSR @PTRSAV ;SAVE ACCUMULATORS. 127 | PSYNC PTRCSC 128 | MOVEI DDB,PTRDDB ;SET UP REGISTERS 129 | PUSHJ P,IOSET 130 | MOVE IOS,DEVIOS(DDB) 131 | CONSO PTR,POWER ;POWER ON? 132 | JRST PWROFF ;NO. 133 | TLON IOS,PTRPOW ;POWER IS ON NOW, WAS IT BEFORE? 134 | JRST PTRXIT ;POWER IS ON FOR THE FIRST TIME. 135 | SKIPE PTRDSC ;IS PTR BEING DISCONNECTED? 136 | JRST PTRDIS ;YES. DO IT. 137 | MOVE DAT,PTRCHR ;GET CHARACTER. 138 | PTRIN0: TRNE IOS,B ;BINARY MODE? 139 | JRST PTRI0 ;YES. (MODES 10,13,14) 140 | IORI DAT,200 ;IGNORE PARITY. 141 | CAIE DAT,NULL ;NULL CHARACTER? 142 | CAIN DAT,RUBOUT ;OR RUBOUT? 143 | JRST PTRXIT ;YES. IGNORE CHAR AND START READING NEXT. 144 | PTRI0: PUSHJ P,STODAT ;STORE DATA IN BUFFER. 145 | JFCL ;CHECKSUM ERROR. 146 | JRST PTRI1 ;BLOCK COMPLETE. 147 | MOVEM ITEM,DEVCTR(DDB);INCOMPLETE. STORE ITEM. 148 | PTRXIT: 149 | PTRXT1: PUSHJ P,STOIOS ; STORE IOS, RESET HUNG COUNT 150 | XPOPJ: XSYNC PTRCSC 151 | POPJ P, ;DISMISS INTERRUPT. 152 | 153 | ;MORE I-LEVEL ROUTINES. 154 | PWROFF: TLZ IOS,PTRPOW ;NOTE THAT READER IS OFF. 155 | TLO IOS,IOEND+IOBEG 156 | PUSHJ P,PTRREL ;SHUT IT OFF! 157 | LDB TAC,PIOMOD ;GET MODE. 158 | CAIE TAC,B ;CHECKSUM-BINARY? 159 | JRST PTREI ;NO. 160 | TLNN IOS,IOFST ;INCOMPLETE BLOCK? 161 | TRO IOS,IOIMPM ;YES. COMPLAIN. 162 | PUSHJ P,CLRACT ;CLEAR I/O ACTIVE BIT. 163 | JRST PTRI1A 164 | 165 | ;BLOCK INCOMPLETE 166 | PTREI: PUSHJ P,STOSQD ;TRUNCATE BUFFER, STORE W.C. 167 | JFCL ;FALL INTO PTRI1 168 | ;BLOCK COMPLETE. 169 | PTRI1: MOVEM ITEM,DEVCTR(DDB);STORE ITEM COUNT. 170 | PTRI1A: JUMPE PID,PTRI2 ;NO. ONE PROCESSOR 171 | SETOM PTRDSC ;MUST DISCONNECT PTR 172 | TLZN IOS,STOPTR 173 | SETOM PTRADV ;REQUEST BUFFER ADVANCE. 174 | JRST PTRXT1 ;RELEASE CONTROL OF IOS AND DISMISS 175 | 176 | PTRI2: TLO IOS,IOFST ;(SINGLE PROCESSOR) 177 | TLZE IOS,IOW ;UNWAIT THE JOB. 178 | PUSHJ P,SETIOD ;IF NEEDED. 179 | TLNE IOS,PTRPOW ;POWER OFF? 180 | PUSHJ P,ADVBFF ;NOT POWER OFF, ADVANCE BUFFERS 181 | JRST PTRI3 ;NO MORE BUFFER SPACE. 182 | JRST PTRXIT ;START READER, STORE IOS, AND DISMISS INTERRUPT. 183 | 184 | PTRI3: PUSHJ P,CLRACT ;NO BUFFER SPACE. CLEAR IOACT. 185 | SETOM PTRDSC ;REQUST PTR DISCONNECT. 186 | JRST PTRXT1 ;RELEASE SYNCHRONIZER. DISMISS INTERRUPT. 187 | 188 | PTRDIS: JUMPN PID,PTRDS1 189 | SKIPG @PTRADR ;BUFFER FREE? 190 | JRST PTRDS1 ;NO. MUST DISCONNECT. 191 | DATAI PTR,DAT 192 | JRST PTRIN0 ;INPUT CHARACTER AND PROCESS AS NORMAL. 193 | 194 | PTRDS1: PUSHJ P,PTRREL ;STOP PTR. 195 | JRST PTRXT1 ;DISMISS INTERRUPT 196 | ;P1 CLOCK LEVEL AND HUNG TIMEOUT CODE 197 | 198 | PTRHNG: MOVE TAC,PTRIN1 199 | CAIN TAC,PTRP1U 200 | POPJ P, ;ON PDP-10 I DON'T UNDERSTAND HANGS. 201 | PSYNC PTRCSC ;SYNCHRONIZE. 202 | MOVE IOS,PTRDDB+DEVIOS ;GET IOS 203 | TLZN IOS,PTRPOW ;HAVE WE SEEN POWER ON? 204 | JRST XPOPJ ;NO. LET IT HANG. 205 | TLON IOS,STOPTR!IOEND ;MAKE PTR STOP. PRETEND END OF TAPE. 206 | AOS (P) ;SET SKIP RETURN TO AVOID HUNG PTR MESSAGE 207 | MOVEM IOS,PTRDDB+DEVIOS ;STORE IOS 208 | SETOM PTRACT ;KICK PDP-6 209 | JRST XPOPJ ;RELEASE SYNCHRONIZER AND WAIT FOR PDP-6. 210 | 211 | 212 | ;HERE AT P1 CLOCK LEVEL 213 | ^PTRP1: SETZM PTRADV ;CLEAR REQUEST 214 | PSYNC PTRCSC 215 | MOVEI DDB,PTRDDB ;LOAD UP REGISTERS. 216 | MOVE IOS,DEVIOS(DDB) 217 | TLNE IOS,PTRNPW 218 | TRO IOS,IOIMPM ;READING WITHOUT READER ON. 219 | TLO IOS,IOFST ;NEXT ITEM WILL BE FIRST OF A BUFFER. 220 | TLZE IOS,IOW ;IS JOB WAITING FOR PTR? 221 | PUSHJ P,SETIOD ;YES. UNWAIT IT. 222 | LDB J,PJOBN ;SET J 223 | MOVE PROG,JBTADR(J) ; 224 | PUSHJ P,ADVBFF ;ADVANCE BUFFERS. 225 | JRST PTRP1A ;OUT OF BUFFER SPACE. 226 | TLNE IOS,IOEND!PTRNPW ;END OF FILE OR ERROR? 227 | JRST PTRP1A ;YES. STOP READER. 228 | PUSHJ P,STOIOS ;STORE IOS. 229 | SETOM PTRACT ;ACTIVATE PTR. 230 | JRST XPOPJ ;RELEASE SYNCHRONIZER AND RETURN 231 | 232 | PTRP1A: PUSHJ P,CLRACT ;CLEAR IOACTIVE, DON'T RESTART THE READER 233 | JRST XPOPJ 234 | 235 | BEND PTRSER 236 | -------------------------------------------------------------------------------- /sys/J17-1974/spwser.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00008 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 BEGIN SPWSER  SUBTTL SPACEWAR SERVICE 5 | C00003 00003 ROUTINE TO KILL 2-PROCESSOR SPACE WAR FOR JOB N 6 | C00006 00004 ENTER HERE FROM UUOCON TO SET UP A SPW JOB 7 | C00010 00005 BASIC LEVEL SPW CLOCK AND RUN ROUTINES 8 | C00013 00006 HERE, WE KNOW THIS JOB IS RUNABLE. NOW, IS IT TIME TO RUN? 9 | C00017 00007 INTERRUPT LOCATIONS FOR BOTH PROCESSORS 10 | C00021 00008 WE GET HERE ON ERROR IN SPW MODE JOB OR DISMISS 11 | C00024 ENDMK 12 | C; 13 | BEGIN SPWSER  SUBTTL SPACEWAR SERVICE 14 | ; JAM. STANFORD, 8-NOV-68 15 | 16 | AP2CHL_CAT(P2CH,\APRCHN) 17 | 18 | ; INITIALIZE ALL SPACEWAR TABLES 19 | 20 | ^SPWINI: 21 | SETZM SPWGO ; ZERO OUT P1 SPW TABLE 22 | MOVE TAC,[XWD SPWGO,SPWGO+1] 23 | BLT TAC,JBTST2+JOBN-1 ;CLEAR SPWGO,SP2GO,JBTST2 24 | 25 | SYNINI SPWCSC 26 | 27 | CONI 404,SPWBUT ; SET UP SPW BUTTONS 28 | SETZM SPWACT ; KILL SPW JOB COUNT 29 | SETZM SPWUUF ;NOT AT SPACEWAR LEVEL ON EITHER PROCESSOR 30 | SETZM SPWUUF+P2PID 31 | SETZM SPWTMO ;AND INITIALLY, NO TIMEOUT ACTIVE 32 | SETZM SPWTMO+P2PID 33 | POPJ P, 34 | ; ROUTINE TO KILL 2-PROCESSOR SPACE WAR FOR JOB N 35 | ; CALLING . . . 36 | ; MOVE J,JOB ; GET JOB NUMBER IN ITEM 37 | ; PUSHJ P,KILSPW ; KILLS SPACEWAR, SAVES AC'S 38 | 39 | ^KILSPW:PUSH P,TAC 40 | MOVSI TAC,SPWSNB 41 | PUSHJ P,CLRSIN ; CLEAR ANY SPACEWAR SWAPIN REQUEST 42 | POP P,TAC 43 | PUSH P,TAC1 44 | PSYNC SPWCSC ; GET CONTROL OF SPW CELLS 45 | SKIPN JBTST2(J) ; IS A JOB ACTIVE HERE? 46 | JRST KILSP1 47 | IFN FTSTAT,< 48 | PUSH P,TAC 49 | MOVEI TAC,SPWSTA+7700 50 | PUSHJ P,STAPUT 51 | POP P,TAC 52 | >;FTSTAT 53 | SKIPE SPWGO(J) ;DOES HE HAVE A P1 SPW JOB 54 | PUSHJ P,P1REL ;RELEASE SPW ON PDP 10 55 | SKIPE SP2GO(J) ;AND P2 56 | PUSHJ P,P2REL ;RELEASE SPW ON PDP 6 57 | SETZM JBTST2(J) 58 | KILSP1: XSYNC SPWCSC 59 | POP P,TAC1 60 | POPJ P, 61 | 62 | P1REL: SETZ TAC1, 63 | MOVE TAC,TAC1 64 | LDB TAC1,[POINT 6,SPWGO(TAC),5] 65 | CAME TAC1,J 66 | JUMPN TAC1,.-3 67 | JUMPE TAC1,CPOPJ 68 | LDB TAC1,[POINT 6,SPWGO(J),5] 69 | DPB TAC1,[POINT 6,SPWGO(TAC),5] 70 | SETZM SPWGO(J) 71 | SOS SPWACT 72 | POPJ P, 73 | 74 | P2REL: SETZ TAC1, 75 | MOVE TAC,TAC1 76 | LDB TAC1,[POINT 6,SP2GO(TAC),5] 77 | CAME TAC1,J 78 | JUMPN TAC1,.-3 79 | JUMPE TAC1,CPOPJ 80 | LDB TAC1,[POINT 6,SP2GO(J),5] 81 | DPB TAC1,[POINT 6,SP2GO(TAC),5] 82 | SETZM SP2GO(J) 83 | SOS SPWACT 84 | POPJ P, 85 | 86 | OFSPW: PUSHJ P,KILSPW ;HERE IF HE GOOFS. 87 | JSP TAC,UUOMES 88 | ASCIZ /ATTEMPT TO INITIATE SPW JOB WITH ONE ALREADY RUNNING 89 | UUO/ 90 | ; ENTER HERE FROM UUOCON TO SET UP A SPW JOB 91 | ; CALL FROM UUOCON: 92 | ; MOVE UCHN,[MODE-BITS,,TICKS] 93 | ; MOVE UUO,[ANYTHING,,STARTING ADDRESS] 94 | 95 | ^SPWCON: 96 | MOVE J,JOB(PID) ; GET CURRENT JOB NUMBER 97 | MOVEI TAC,(UUO) ;GET STARTING ADDRESS 98 | JUMPN UCHN,SPW0 ;ZERO TICKS? 99 | CAIN TAC,'SSW' ;STOP CODE? 100 | JRST KILSPW ;YES, STOP SPACEWAR 101 | SPW0: CAIGE TAC,140 ;ABOVE JOB DATA AREA? 102 | JRST UADRER ;GIVE HIM ADDRESS CHECK FOR STARTING ADR 103 | XCTR XR,[MOVE TAC,(TAC)] ;ADDRESS CHECK HIS STARTING ADDRESS 104 | ;HERE, P2 IS ALIVE. 105 | TLNN UCHN,200000 ;REQUESTING PDP-6? 106 | JUMPL UCHN,SPW1 ;NO, HOW ABOUT PDP-10? 107 | SKIPE SP2GO(J) ;IS THERE ALREADY A JOB RUNNING HERE? 108 | JRST OFSPW ;YES, HE GOOFED 109 | SPW4H: SKIPL PALIVE+P2PID ;IS THE PDP-6 REALLY THERE? 110 | JRST SPW4G 111 | TLNN UCHN,200000 ;WAS HE REALLY SURE ABOUT USING THE SIX? 112 | JRST SPW1 ;NO, TRY THE TEN 113 | JUMPN PID,SPW4G 114 | MOVEI TAC,[ASCIZ / 115 | HUNG DEVICE: PDP-6 116 | /] 117 | PUSHJ P,HNGMES 118 | JRST SPW4H 119 | 120 | SPW4G: AOS SPWACT 121 | IFN FTSTAT, < 122 | HRRZ TAC,UCHN 123 | LSH TAC,6 124 | TRO TAC,SPWSTA+4000 ;FLAG PDP-6 125 | PUSHJ P,STAPUT 126 | >;FTSTAT 127 | PSYNC SPWCSC ; GET CONTROL OF JBTST2 128 | MOVSI DAT,SPWRUN 129 | TLNE UCHN,40000 ;SUPPRESS TIMEOUT? 130 | MOVSI DAT,SPWRUN!SPWNT2 ;YES. SET TIMEOUT SUPRESSION BIT TOO 131 | IORM DAT,JBTST2(J) ; MARK US AS RUNNING 132 | TSO UCHN,SP2GO ; COPY FIRST LINK INTO UCHN (RIGHT) 133 | DPB J,[POINT 6,SP2GO,5] ;NEW FIRST LINK 134 | HRLM UCHN,SP2GO(J) ;DO THIS STUFF NOW TOO 135 | HRRM UUO,SP2GO(J) 136 | XSYNC SPWCSC ; RELEASE CONTROL OF JBTST2 137 | JUMPGE UCHN,CPOPJ ;IS HE REQUESTING IT TO BE RUN ON THE PDP-10 ALSO? 138 | 139 | SPW1: ;HERE FOR P1 SPACEWAR 140 | SKIPE SPWGO(J) ; IS THERE ALREADY A JOB THERE? 141 | JRST OFSPW ; YES, GO SHOOT HIM! 142 | AOS SPWACT ; WE HAVE ONE MORE SPW JOB NOW 143 | IFN FTSTAT, < 144 | HRRZ TAC,UCHN 145 | LSH TAC,6 146 | TRO TAC,SPWSTA ;FLAG PDP-10 147 | PUSHJ P,STAPUT 148 | >;FTSTAT 149 | PSYNC SPWCSC ; GET CONTROL CELLS 150 | MOVSI DAT,SPWRUN ; INDICATE THAT A JOB IS RUNNING 151 | TLNE UCHN,100000 ;P1 TIMEOUT SUPRESSION? 152 | MOVSI DAT,SPWRUN!SPWNT1 ;YES. SET TIMEOUT SUPRESSION BIT 153 | IORM DAT,JBTST2(J) ; PUT IN 'RUNNING' BIT 154 | TSO UCHN,SPWGO 155 | DPB J,[POINT 6,SPWGO,5] 156 | HRLM UCHN,SPWGO(J) ; PUT JIFFIES IN LH 157 | HRRM UUO,SPWGO(J) ; PUT ADDRESS IN RH 158 | XSYNC SPWCSC 159 | POPJ P, 160 | ; BASIC LEVEL SPW CLOCK AND RUN ROUTINES 161 | ; FIRST, ACCUMULATOR RE-DEFINITIONS 162 | AC_DEVDAT 163 | GO_DAT 164 | A_DSER 165 | B_UCHN 166 | C_UUO 167 | D_PROG 168 | ; REGISTER AC CONTAINS THE ADDRESS OF THE PROCESSOR'S AC STORAGE TABLE 169 | ; REGISTER GO CONTAINS SPWGO OR SP2GO, DEPENDING ON WHERE WE ARE 170 | 171 | ^SPWP2: MOVEI AC,SPWB ; LOAD UP AC WITH P2 STORAGE TABLE ADDRGSS 172 | MOVEI GO,SP2GO ; AND P2 RUN TABLE 173 | JRST SPWPP 174 | 175 | ^SPWP1: MOVEI AC,SPWA ; AC STORAGE FOR P1 176 | MOVEI GO,SPWGO ; APPROPRIATE RUN TABLE 177 | SPWPP: PUSH P,JOB(PID) ;SAVE SO WE CAN RUN SPW UUOS. 178 | SETOM SPWUUF(PID) ; FLAG SPW LEVEL. 179 | HRLI GO,J ; INDEX SPWGO BY JOB NUMBER 180 | MOVEI J,0 ; START AT FRONT 181 | SPWPP3: PSYNC SPWCSC 182 | LDB J,[POINT 6,@GO,5] ; LINK 183 | JUMPN J,SPWPP2 ; DISPATCH IF NON-ZERO 184 | XSYNC SPWCSC 185 | POP P,JOB(PID) 186 | MOVE J,JOB(PID) ; PUT JOB NUMBER UP 187 | MOVE A,JBTADR(J) ; GET PROT-RELOC FOR JOB WE INTERRUPTED 188 | MOVEM A,JOBADR(PID) ;YES. 189 | HLRZM A,USRREL(PID) 190 | SETZM SPWUUF(PID) 191 | JUMPE J,CPOPJ ;DON'T RESTORE PROT-RELOC FOR JOB 0 192 | PUSHJ P,GETPR ;GET JOB'S PROT-RELOC 193 | DATAO APR,TAC ;SET PR 194 | POPJ P, ;END OF LOOP, GO HOME 195 | 196 | SPWPP2: MOVE D,@GO ;GET LATEST COPY OF SPW WORD 197 | TRNE D,-1 ;IS HE BEING FLUSHED? 198 | SKIPL A,JBTST2(J) ;IS THIS JOB RUNNABLE? 199 | JRST SPWPP5 ;NO, EXIT NOW 200 | JUMPN PID,SWPP2B ;JUMP IF P2 201 | TLNN A,SPWST1 ;IS HE SUSPENDED SOMEHOW? 202 | JRST SPWPP4 ;NO, GO RUN HIM 203 | SKIPE SP2GO(J) ;IS HE RUNNING ON P2 TOO? 204 | JRST SPWPP5 ;YES THEN LET ONLY P2 COUNT THE SUSPENSION. 205 | ADDI A,1 ;INCREMENT THE SUSPENSION COUNT. 206 | SWPP2A: HRRM A,JBTST2(J) ;STORE NEW SUSPENSION COUNT. 207 | JRST SPWPP5 ;RELEASE CELLS AND CONTINUE SCAN. 208 | 209 | SWPP2B: TLNN A,SPWST2 ;SUSPENDED ON P2? 210 | JRST SPWPP4 ;NO.RUN THIS ONE. 211 | AOJA A,SWPP2A ;COUNT THE SUSPENSION 212 | 213 | SPWPP9: DPB A,[POINT 4,D,13];UPDATE COUNT 214 | MOVEM D,@GO ;REPLACE IN CONTROL WORD 215 | SPWPP5: XSYNC SPWCSC 216 | JRST SPWPP3 217 | ; HERE, WE KNOW THIS JOB IS RUNABLE. NOW, IS IT TIME TO RUN? 218 | 219 | SPWPP4: LDB A,[POINT 4,D,13] ; PICK UP SPW COUNT 220 | LDB B,[POINT 4,D,17] ; PICK UP SPW TIME 221 | JUMPE B,[JUMPN A,SPWPP9 ;ZERO TICKS HE HAS RUN ONCE. 222 | AOJA A,SPWPP0] ;RUN HIM HIS ONE TIME. 223 | CAIGE A,-1(B) ;WILL IT BE TIME WHEN WE INCREMENT A? 224 | AOJA A,SPWPP9 ;NOT TIME YET. INCREMENT AND REPLACE. 225 | SETZ A, ; YES, ZERO COUNT AND RUN JOB 226 | SPWPP0: DPB A,[POINT 4,D,13] 227 | MOVEM D,@GO 228 | MOVE B,JBTST2(J) ; GET STATUS REGISTER 229 | HLLZS JBTST2(J) ; NOW ZERO ERROR DELAY COUNT 230 | TLNE B,SPWSUS ; SHOULD WE WARN HIM OF AN IMPENDING DELAY? 231 | JRST SPWPP6 ; YES 232 | HRRZ B,B ; COUNT OF TICKS WHILE SUSPENDED. 233 | JRST SPWPP8 ; RUN HIM. 234 | SPWPP6: JUMPE PID,.+2 ; COME HERE IF WE MUST GIVE A WARNING 235 | TLOA B,SPWSU2 ;TURN ON SUSPENSION WARNING FLAG P2 236 | TLO B,SPWSU1 ;TELL JOB A SUSPENSION IS INDICATED P1 237 | MOVEM B,JBTST2(J) ; REPLACE JOB STATUS 238 | MOVNI B,1 ; PUT WARNING IN B 239 | SPWPP8: MOVSI A,SPWNT1 ;TIMEOUT SUPRESSION BIT (P1) 240 | JUMPE PID,.+2 241 | MOVSI A,SPWNT2 ;TIMEOUT SUPRESSION BIT(P2) 242 | TDNN A,JBTST2(J) ;SKIP IF TSB IS ON 243 | MOVEI A,JIFSEC/2 ;TIMEOUT IS HALF A SECOND 244 | HRRZM A,SPWTMO(PID) ;STORE THE TIMEOUT WORD 245 | MOVE A,[JRST 2,@UUO0] 246 | ADDI A,(PID) 247 | MOVEM A,SPWXCT(PID) ;SET UP THE UUO EXIT INSTRUCTION 248 | ;WHICH IS CLOBBERED BY CH3 ON TIMEOUTS 249 | XSYNC SPWCSC 250 | HRRZ A,AC 251 | BLT A,17(AC) ; BLT THEM INTO SPWA OR SPWB 252 | SETZM A(AC) ; AND ZERO OUT ACCUMULATOR A IN CORE 253 | HRRZ 17,D ; GET JOB STARTING ADDRESS 254 | HRLI 17,4000 ; PUT IN IOT USER MODE BIT 255 | PUSHJ P,GETPR ; GET HIS PR 256 | DATAO APR,TAC 257 | MOVE 2,JBTADR(J) ; GET HIS PROTECTION-RELOCATION 258 | TLZ 2,1777 ; ZERO OUT THESE BITS FOR PDP-10 259 | MOVE 1,SPWBUT ; GET SPACEWAR BUTTONS FOR HIM 260 | 261 | MOVN 15,J ; 262 | MOVSI 2,400000 263 | LSH 2,(15) 264 | JUMPN PID,.+2 265 | DATAO PI,2 ;TURN ON MI WITH JOB NUMBER. 266 | 267 | SETOM STIME(J) ;FLAG THAT CORE IMAGE HAS BEEN RUN (I.E. MODIFIED) 268 | MOVE 15,J ; SAVE JOB NUMBER 269 | MOVE 2,JBTADR(J) ; RESTORE TRUE PROT-REL 270 | MOVE 7,JOBRL2(PROG) ; UPPER TOO 271 | MOVE 6,JBTSTS(J) 272 | MOVE 3,B ; GET FLAG REGISTER 273 | MOVEI 4,1 274 | SKIPE PID 275 | MOVEI 4,2 276 | SETZM 5 277 | SKIPN P2NUM 278 | JRST SIXDED 279 | JUMPN PID,SIXTST 280 | SKIPGE PALIVE+P2PID 281 | SETOM 5 282 | JRST 3,@17 283 | SIXTST: SKIPGE PALIVE+P1PID 284 | SIXDED: SETOM 5 285 | JRST 3,@17 286 | ; INTERRUPT LOCATIONS FOR BOTH PROCESSORS 287 | 288 | ^SPWINT: 289 | CONI APR,A 290 | TRNE A,ILM 291 | TLO A,ILMSPW 292 | TRNE A,NXM 293 | TLO A,NXMSPW 294 | TRNE A,POV 295 | TLO A,POVSPW 296 | CONO APR,531110+APRCHN ; CLEAR ANY CONCEIVABLE ERROR 297 | HRR A,APRCHL ; GET LOCATION OF ERROR 298 | MOVEM A,SPWA+A ; SET INTO SAVED ACCUMULATOR 299 | MOVE PID,[P1PID] 300 | JRST 10,SPWUUX ; TREAT AS A UUO 301 | 302 | ^SPWERR: 303 | MOVE J,JOB(PID) 304 | MOVE A,UUOPC(J) 305 | SKIPN PID 306 | HRRZM A,SPWA+A 307 | SKIPE PID 308 | HRRZM A,SPWB+A 309 | ^SPWXIT: ;COME HERE ON DISMIS UUO(SEE US BE SNEAKY)! 310 | MOVE P,SPWA+P 311 | SKIPE PID 312 | MOVE P,SPWB+P 313 | AOBJP P,.+1 ;GET OLD UUOPC (SAVED BY SPWUUO) 314 | POP P,UUOPC(J) ; RESTORE UUO-LEVEL PC WORD 315 | JRST SPWUUX 316 | 317 | ^SP2INT: 318 | CONI APR,A 319 | TRNE A,ILM 320 | TLO A,ILMSPW 321 | TRNE A,NXM 322 | TLO A,NXMSPW 323 | TRNE A,POV 324 | TLO A,POVSPW 325 | TRNE A,CNS 326 | TLO A,CNSSPW 327 | CONO APR,531110+APRCHN ; CLEAR APR ERROR 328 | HRR A,AP2CHL ; GET LOCATION OF ERROR 329 | MOVEM A,SPWB+A 330 | MOVE PID,[P2PID] 331 | JRST 10,SPWUUX 332 | 333 | ^SPWUUO: 334 | ;THE FOLLOWING 2 INST. PREVENT UUO'S FROM SPACEWAR--RPH 12-26-71 335 | ; SKIPL @UUOLOC(PID) 336 | ; JRST SPWUUX 337 | JUMPN PID,SPWUUX ;NO UUO'S ON 6 GODDAMMIT! 338 | MOVE J,J+SPWA ;GET JOB NO. OF SPW JOB. 339 | SKIPE 17,UUOPTR(J) ;MUST CHECK THIS HERE SO WE DON'T DO TESTS ON UUO 340 | JRST SPWUU3 341 | SPWUU1: SKIPE 17,@UUOLOC(PID) ;STOP ON 0 342 | CAMN 17,[CALL] ;OR CALL WITH 0 ADR 343 | JRST SPWUUX 344 | HLRZ 17,17 345 | CAIN 17,() ;OR HALT 346 | JRST SPWUUX 347 | ; SKIPE PID 348 | ; MOVE J,J+SPWB 349 | SPWUU2: MOVEM J,JOB(PID) ;PUT WHERE UUOCON WILL SEE IT. 350 | MOVE PROG,JBTADR(J) ;ALSO RELOCATION. 351 | MOVEM PROG,JOBADR(PID) 352 | HLRZM PROG,USRREL(PID) 353 | MOVE P,SPWA+P ;GET A PDL FOR UUOCON. 354 | ; SKIPE PID 355 | ; MOVE P,SPWB+P 356 | PUSH P,UUOPC(J) ; AND SAVE THE OLD UUO PC WORD 357 | MOVE DAT,UUO0(PID) ; PICK UP RETURN 358 | MOVE UUO,@UUOLOC(PID) ; AND UUO ITSELF 359 | JRST UUOSY1 ;LET UUOCON HANDLE IT. 360 | 361 | SPWUU3: XCTR XR,[SKIPN SPWBLK+1(17)] ;IF SIMULATOR IS ENABLED FOR SPACEWAR, 362 | XCTR XR,[SKIPN SPWBLK+2(17)] ;WE'LL BYPASS THE DISMISSAL TESTS 363 | JRST SPWUU1 364 | JRST SPWUU2 365 | 366 | ^SPTMOE: ;HERE IN EXEC MODE IN CH7 FOR TIME-OUT 367 | MOVEI PID,0 ;ASSUME PDP-10 368 | CONSO APR,MAOFF ;SKIP IF WE ARE THE PDP-10 369 | MOVEI PID,P2PID ;PDP-6 370 | MOVSI A,ILLTMO ;SET TIMEOUT BIT 371 | HRR A,SPWBLO(PID) ;LOOK AT HOW WE WERE SHOT DOWN 372 | SKIPE PID 373 | MOVEM A,SPWB+A ;STORE EVIL BITS 374 | SKIPN PID 375 | MOVEM A,SPWA+A 376 | JRST SPWUUX ;PRETEND UUO 377 | ; WE GET HERE ON ERROR IN SPW MODE JOB OR DISMISS 378 | 379 | ^SPWUUX: 380 | MOVSI 17,SPWA ; RESTORE P1 ACCUMULATORS 381 | SKIPE PID 382 | MOVSI 17,SPWB ; RESTORE P2 ACCUMULATORS 383 | BLT 17,17 384 | JUMPE A,SPWUU0 ; NO ERRORS, SCAN FOR NEXT JOB. 385 | PSYNC SPWCSC 386 | HLLZS @GO ; ERROR, KILL THIS JOB 387 | TLO A,SPWERB ; ADD ERROR BIT TO THOSE ALREADY THERE 388 | MOVEM A,JBTST2(J) ; MOVE IN ERROR BIT 389 | XSYNC SPWCSC 390 | SPWUU0: JRST 2,@[SPWPPB] 391 | 392 | SPWPPB: PSYNC SPWCSC 393 | SKIPN @GO 394 | JRST SPWPPC 395 | LDB A,[POINT 4,@GO,17] ;GET HIS TIME FIELD 396 | JUMPN A,SPWPPC 397 | JUMPN PID,SPWPPD 398 | PUSHJ P,P1REL ;ZERO TICKS. RELEASE P1 SPACEWAR 399 | SKIPE SP2GO(J) 400 | JRST SPWPPC 401 | JRST SPWPPE 402 | SPWPPD: PUSHJ P,P2REL ;ZERO TICKS. RELEASE P2 SPACEWAR 403 | SKIPN SPWGO(J) 404 | SPWPPE: SETZM JBTST2(J) ;ZERO THIS IF NOT SPW ACTIVE ON OTHER P. 405 | SPWPPC: MOVE A,JBTST2(J) ;PICK UP JOB STATUS 406 | JUMPN PID,SPWPPF 407 | MOVSI D,SPWST1 ;P1 SUSPEND BIT 408 | SKIPN SP2GO(J) ;IS THERE SPACEWAR ON P2 ALSO? 409 | MOVSI D,SPWST1!SPWST2 ;NONE ON P2. GET BOTH PROC. SUSP BITS. 410 | TLZE A,SPWSU1 ;HAS WARNING BEEN GIVEN? 411 | TDO A,D ;YES, SUSPEND THIS JOB 412 | TLC A,SPWST1!SPWST2 ;ARE BOTH NOW SUSPENDED? 413 | TLCN A,SPWST1!SPWST2 ; 414 | TLZ A,SPWSUS ;BOTH NOW SUSPENDED, CLEAR SUSPENSION REQ. 415 | MOVEM A,JBTST2(J) ; AND REPLACE JOB STATUS 416 | XSYNC SPWCSC 417 | JRST SPWPP3 418 | SPWPPF: MOVSI D,SPWST2 ;P2 SUSPEND BIT. 419 | SKIPN SPWGO(J) 420 | MOVSI D,SPWST1!SPWST2 421 | TLZE A,SPWSU2 ;HAS SUSPENSION WARNING BEEN GIVEN? 422 | TDO A,D ;YES. SET SUSPENSION. 423 | TLC A,SPWST1!SPWST2 ;ARE BOTH NOW SUSPENDED? 424 | TLCN A,SPWST1!SPWST2 ; 425 | TLZ A,SPWSUS ;BOTH NOW SUSPENDED, CLEAR SUSPENSION REQ. 426 | MOVEM A,JBTST2(J) ;STORE JOB STATUS 427 | XSYNC SPWCSC 428 | JRST SPWPP3 429 | BEND SPWSER 430 | -------------------------------------------------------------------------------- /sys/J17-1974/sttget.MAC: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00002 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 title STTGET 5 | C00011 ENDMK 6 | C; 7 | title STTGET 8 | subttl Statistics gathering service 9 | 10 | nbufs__3 ; Number of buffers 11 | 12 | INIBYT__(11+1)/2;11 BYTES PER JOB 18 BITS PER BYTE 13 | 14 | ;JOB TABLE POINTERS FOR INTIALIZING STATS 15 | JOBN__400222 16 | JBTSTS__400210 17 | JNA__40000 18 | SWP__2000 19 | JBTADR__400223 20 | JOBQUE__400231 21 | JBTSIN__400307 22 | JBTGLU__400310 23 | SPWGO__400213 24 | SP2GO__400230 25 | JOBNAM__400225 26 | JBTSWP__400212 27 | 28 | DEFINE XD(A,B) 29 | 30 | 31 | ;STAT OP-CODES 32 | XD CSZSTA,000000 ;BYTE(1)0(3)0(8)HIGH ORDER BITS OF CORE SIZE(6)J# 33 | XD CPSSTA,040000 ;BYTE(1)0(3)1(8)HIGH ORDER BITS OF CORE POSITION(6)J# 34 | XD NAMSTA,400000 ;BYTE(1)1(5)0(6)UNUSED(6)J# 35 | ;FOLLOWING TWO 18 BIT BYTES ARE JOBNAME 36 | XD QUESTA,410000 ;BYTE(1)1(5)1(6)QUEUE CODE(6)J# 37 | XD SINSTA,420000 ;BYTE(1)1(5)2(6)JBTSIN BIT #(6)J# 38 | XD SEGSTA,430000 ;BYTE(1)1(5)3(6)SEGMENT #(6)J# 39 | XD SPWSTA,440000 ;BYTE(1)1(5)4(6)0-17:TICS OF SPW, 77:SPW OFF(6)J# 40 | XD GLUSTA,450000 ;BYTE(1)1(5)5(6)JBTGLU COUNT(6)J# 41 | XD LOKSTA,460000 ;BYTE(1)1(5)6(6)1:LOCKING, 0:UNLOCKING(6)J# 42 | 43 | stat__400241 ; Address of statistics table 44 | sttlen__400243 ; Length of such 45 | sttptr__400244 ; Address of statistics pointer 46 | sttnum__400245 ; Address of wrap-around COUNTER 47 | 48 | t__12 49 | t1__13 50 | t2__14 51 | T3_15 52 | T4_16 53 | J_17 54 | 55 | external jobapr 56 | 57 | START: RESET 58 | MOVSI T,376001 ;128K CORE STARTING AT BOTTOM (WRITE PROTECTED) 59 | SETPR2 T, ;SET IT AS UPPER 60 | JRST [ OUTSTR[ASCIZ/SETPR2 FAILED! 61 | /] 62 | EXIT] 63 | SKIPN STAT 64 | JRST [ OUTSTR[ASCIZ/SORRY, THIS SYSTEM DOESN'T HAVE ANY STATISTICS INFO! 65 | /] 66 | EXIT] 67 | init 1,17 68 | sixbit /DSK/ 69 | 0 70 | jrst [ outstr [asciz Can't INIT disk 71 | ] 72 | EXIT] 73 | setzm efile+3 74 | hllzs efile+1 75 | setzm efile+2 76 | enter 1,efile 77 | jrst [ outstr [asciz Can't ENTER file 78 | ] 79 | EXIT] 80 | hrrzi t,ints 81 | movem t,jobapr 82 | setzm nbufo 83 | movei t,buff 84 | movem t,iptr 85 | movem t,optr 86 | setzm lose 87 | FOR @! I IN(JBTSTS,JBTADR,JOBQUE,JBTSIN,JBTGLU,SPWGO,SP2GO,JOBNAM,JBTSWP) 88 | < MOVE T,I 89 | ADDI T,400000 90 | HRRM T,$!I 91 | > 92 | SETOM FIRST# 93 | TRYINI: MOVE T,JOBN 94 | SUBI T,1 95 | IMULI T,INIBYT 96 | ADD T,JOBFF^ 97 | CORE T, 98 | JRST [ OUTSTR[ASCIZ/CAN'T GET CORE FOR INITIALIZATION! 99 | /] 100 | CALLI 1,12 101 | JRST TRYINI] 102 | MOVE T,JOBFF 103 | SETZM (T) 104 | MOVE T1,T 105 | HRL T,T 106 | ADDI T,1 107 | MOVE T1,JOBN 108 | SUBI T1,1 109 | IMULI T1,INIBYT 110 | ADD T1,JOBFF 111 | BLT T,(T1) 112 | PJOB T1, 113 | MOVEM T1,JOB# 114 | HRLZM T1,@JOBFF 115 | LOCK T, 116 | movei t2,1 117 | INTENB T2, 118 | IWKMSK [1] 119 | clkint 1,1 ;EVERY TIC ON PDP-10 120 | IWAIT ;WAIT FOR INITIALIZATION TO FINISH 121 | MOVN T,JOBN 122 | ADDI T,1 123 | IMULI T,INIBYT 124 | SUBI T,1 125 | HRLZ T,T 126 | HRR T,JOBFF 127 | SUBI T,1 128 | SETZ T1, 129 | OUTPUT 1,T 130 | loop: INCHRS T 131 | JRST LOOP0 132 | EXIT 133 | 134 | LOOP0: MTAPE 1,['GODMOD' 135 | 17] ;MAKE SURE FILE IS UPDATED 136 | IWAIT 137 | loop1: skipg t,nbufo 138 | jrst loop 139 | sos nbufo 140 | caile t,nbufs 141 | jrst [ outchr ["X"] 142 | output 1,[iowd 200,mones0] 143 | jrst loop2] 144 | hrrz t,optr 145 | subi t,1 146 | hrrm t,oiowd 147 | output 1,oiowd 148 | loop2: movei t,200 149 | addb t,optr 150 | caige t,buff+nbufs*200 151 | jrst loop1 152 | movei t,buff 153 | movem t,optr 154 | jrst loop1 155 | 156 | INTS: SKIPN FIRST 157 | JRST INTS1 158 | SETZM FIRST 159 | MOVE T2,JOBFF 160 | HRLI T2,();SKIP OVER OUR JOB # 161 | MOVEI J,1 162 | INI0: 163 | $JBTSTS:MOVE T1,JBTSTS(J) 164 | CAME J,JOB ;SKIP US 165 | TLNN T1,JNA 166 | JRST INI1 167 | TLNE T1,SWP 168 | TDZA T,T 169 | $JBTADR:HRRZ T,JBTADR(J) 170 | LSH T,-4 171 | TRO T,CPSSTA(J) 172 | IDPB T,T2 173 | HLRZ T,@$JBTADR 174 | LSH T,-=10 175 | ADDI T,1 176 | TLNE T1,SWP 177 | LDB T,$JBTSWP 178 | LSH T,6 179 | TRO T,CSZSTA(J) 180 | IDPB T,T2 181 | $JBTSIN:HLLZ T,JBTSIN(J) 182 | JRST INI2 183 | $JBTSWP:POINT 8,JBTSWP(J),35 ;IMGIN 184 | 185 | INI3: MOVN T3,T1 186 | MOVSI T4,400000 187 | LSH T4,(T3) 188 | TDZ T,T4 189 | LSH T1,6 190 | TRO T1,SINSTA(J) 191 | IDPB T1,T2 192 | INI2: JFFO T,INI3 193 | $JBTGLU:MOVE T,JBTGLU(J) 194 | ANDI T,77 195 | LSH T,6 196 | TRO T,GLUSTA(J) 197 | IDPB T,T2 198 | $SPWGO: SKIPN SPWGO(J) 199 | JRST INI4 200 | LDB T,[POINT 12,@$SPWGO,23] 201 | ANDI T,7700 202 | TRO T,SPWSTA(J) 203 | IDPB T,T2 204 | INI4: 205 | $SP2GO: SKIPN SP2GO(J) 206 | JRST INI5 207 | LDB T,[POINT 12,@$SP2GO,23] 208 | ANDI T,7700 209 | TRO T,SPWSTA+4000(J) 210 | INI5: HRRZ T,@$JBTSTS 211 | ANDI T,77 212 | LSH T,6 213 | TRO T,SEGSTA(J) 214 | IDPB T,T2 215 | MOVEI T,NAMSTA(J) 216 | IDPB T,T2 217 | $JOBNAM:MOVS T,JOBNAM(J) 218 | IDPB T,T2 219 | HLRZ T,T 220 | IDPB T,T2 221 | $JOBQUE:MOVM T,JOBQUE(J) 222 | ANDI T,77 223 | LSH T,6 224 | TRO T,QUESTA(J) 225 | IDPB T,T2 226 | INI1: CAMGE J,JOBN 227 | AOJA J,INI0 228 | ;INIT POINTERS 229 | move t,sttptr 230 | move t,400000(t) 231 | hrrzi t,1(t) 232 | sub t,stat 233 | ori t,177 234 | subi t,177 235 | add t,stat 236 | movem t,sttpt 237 | addi t,200 238 | move t1,stat 239 | add t1,sttlen 240 | movem t1,sttend 241 | setzm sttn 242 | camge t,t1 243 | jrst ints4 244 | aos sttn 245 | move t,stat 246 | ints4: movem t,sttyet 247 | move t,sttnum 248 | move t,400000(t) 249 | addm t,sttn 250 | ;INIT DONE 251 | movei t,1 252 | INTGEN T, ;TELL HIM TO GO 253 | DISMIS 254 | 255 | ints1: move t,sttptr 256 | hrrz t,400000(t) 257 | addi t,1 258 | camge t,sttyet 259 | DISMIS 260 | hrr t,sttnum 261 | move t,400000(t) 262 | camge t,sttn 263 | DISMIS 264 | came t,sttn 265 | aos lose 266 | hrr t,sttpt 267 | HRLI T,400000(T) 268 | hrr t,iptr 269 | hrrz t1,iptr 270 | addi t1,177 271 | blt t,(t1) 272 | movei t,200 273 | addb t,iptr 274 | caige t,buff+nbufs*200 275 | jrst ints2 276 | movei t,buff 277 | movem t,iptr 278 | ints2: aos nbufo 279 | movei t,1 280 | INTGEN T, 281 | move t,sttyet 282 | movem t,sttpt 283 | addi t,200 284 | camge t,sttend 285 | jrst ints3 286 | aos sttn 287 | move t,stat 288 | ints3: movem t,sttyet 289 | jrst ints1 290 | 291 | ; Data storage . . . 292 | 293 | mones: -1 294 | -1 295 | -1 296 | -1 297 | lose: 0 298 | sttend: 0 ; First address beyond table 299 | 300 | sttn: 0 ; Trigger value of wrap-around pointer 301 | sttpt: 0 ; Last pointer to 200-wd block 302 | sttyet: 0 ; Place where pointer has to be to trigger transfer of 200-wds 303 | 304 | nbufo: 0 ; Counter of number of full buffers 305 | iptr: buff ; Load-up pointer 306 | optr: buff ; Empty pointer 307 | buff: block 200*nbufs 308 | oiowd: iowd 200,buff 309 | 0 310 | 311 | efile: sixbit /STATS/ 312 | sixbit /DAT/ 313 | 0 314 | 0 315 | 316 | end start 317 | -------------------------------------------------------------------------------- /sys/J17-1974/sttint.sai: -------------------------------------------------------------------------------- 1 | COMMENT  VALID 00003 PAGES 2 | C REC PAGE DESCRIPTION 3 | C00001 00001 4 | C00002 00002 BEGIN "STATISTICS INTERPRETER" 5 | C00004 00003 FOR I_0 STEP 1 UNTIL '77 DO JOBS[QUEUE,I]_-1 6 | C00009 ENDMK 7 | C; 8 | BEGIN "STATISTICS INTERPRETER" 9 | EXTERNAL INTEGER SKIP; 10 | INTEGER I,J,K,L,OP,EOF,VAL,OTHERHALF,OURJOB,LINES; 11 | LABEL SKIPOURJOB; 12 | STRING S1,S2,S3,FILE; 13 | DEFINE CRLF="'15&'12",TAB="'11",MAXLINES="52"; 14 | DEFINE NAME="1",SIZE="2",POSITION="3",QUEUE="4",JBTSIN="5",SEGMENT="6", 15 | GLUE="7",LOCK="8",SPW10="9",SPW6="10",MAXVAL="SPW6"; 16 | DEFINE NQUEUES="'234",QNAMS="'235"; 17 | INTEGER ARRAY JOBS[1:MAXVAL,0:'77]; 18 | STRING ARRAY QNAMS[-1:'77]; 19 | PRELOADWITH "INT", 20 | "PHANTOM", 21 | "COMMAND", 22 | "JOBRD", 23 | "SPW", 24 | ['37-4]"UNDEF"; 25 | STRING ARRAY SINNAMES[0:'37]; 26 | DEFINE TITLE= 27 | """JOB # OP VALUE SIZE(K) POS QUEUE SEG # JOBNAME JBTSIN JBTGLU SPW10 SPW6"""; 28 | BOOLEAN HALF,DIRDEV,SPECIAL; 29 | INTEGER PROCEDURE WORD; 30 | IF HALF THEN BEGIN 31 | HALF_FALSE; 32 | RETURN(OTHERHALF); 33 | END 34 | ELSE BEGIN 35 | INTEGER TEMP; 36 | HALF_TRUE; 37 | TEMP_WORDIN(0); 38 | OTHERHALF_TEMP LAND '777777; 39 | RETURN(TEMP LSH -18); 40 | END; 41 | PROCEDURE COUNTLINE; 42 | IF (LINES_LINES-1)<0 THEN BEGIN 43 | OUT(1,'14&TITLE&CRLF&CRLF); 44 | LINES_MAXLINES-3; 45 | END; 46 | FOR I_0 STEP 1 UNTIL '77 DO JOBS[QUEUE,I]_-1; 47 | I_CALL(NQUEUES,"PEEK"); 48 | J_CALL(QNAMS,"PEEK"); 49 | FOR K_0 STEP 1 UNTIL I DO QNAMS[K]_CVSTR(CALL(J+K,"PEEK")); 50 | FOR I_I STEP 1 UNTIL '77 DO QNAMS[I]_"UNDEF"; 51 | OPEN(0,"DSK",'10,2,0,0,0,EOF); 52 | LOOKUP(0,"STATS.DAT",EOF); 53 | IF EOF THEN USERERR(0,0,"Can't find STATS.DAT"); 54 | HALF_FALSE; 55 | S1_(IF CALL(CVSIX("LST"),"DEVCHR") THEN "LST" ELSE "DSK"); 56 | OPEN(1,S1,0,0,2,0,0,0); 57 | DIRDEV_CALL(CVSIX(S1),"DEVCHR") LAND '4000000; 58 | IF DIRDEV THEN BEGIN 59 | OUTSTR("Output file : "); 60 | IF EQU(NULL,FILE_INCHWL) THEN FILE_"STATS.LST"; 61 | IF SKIP='175 THEN BEGIN 62 | OUTSTR(CRLF); 63 | SPECIAL_TRUE 64 | END ELSE SPECIAL_FALSE; 65 | ENTER(1,FILE,EOF); 66 | IF EOF THEN USERERR(0,0,"Can't enter "&FILE); 67 | PTOSTR(0,"SPOOL "&FILE); 68 | END; 69 | OUT(1,TITLE&CRLF&CRLF); 70 | LINES_MAXLINES-2; 71 | OURJOB_WORD; 72 | WHILE TRUE DO BEGIN 73 | SKIPOURJOB: VAL_WORD; 74 | IF EOF THEN DONE; 75 | IF VAL=0 THEN GO TO SKIPOURJOB; 76 | J_VAL LAND '77; 77 | IF VAL LAND '400000 THEN BEGIN 78 | OP_(VAL LSH -12)LAND '37; 79 | VAL_(VAL LSH -6)LAND '77; 80 | END 81 | ELSE BEGIN 82 | OP_-1-(VAL LSH -14); 83 | VAL_(VAL LSH -6)LAND '377; 84 | END; 85 | S1_TAB&CVS(JOBS[SIZE,J])&TAB& 86 | (IF JOBS[SIZE,J]  (I_JOBS[POSITION,J])=0 THEN "SWAPPED" ELSE CVOS(I))& 87 | TAB&QNAMS[JOBS[QUEUE,J]]& 88 | TAB&CVS(JOBS[SEGMENT,J])&TAB&CVXSTR(JOBS[NAME,J])& 89 | TAB&CVOS(JOBS[JBTSIN,J])&TAB&CVS(JOBS[GLUE,J])& 90 | TAB&CVOS(JOBS[SPW10,J])&TAB&CVOS(JOBS[SPW6,J])&CRLF; 91 | IF (-3INIDDT: 65 | >;FTDDT 66 | 67 | DATAI APR,TAC ;READ THE DATA SWITCHES 68 | TLC TAC,777 69 | TLNE TAC,-1 ;DO WE HAVE TO TAKE THESE SERIOUSLY? 70 | JRST SYSIN2 ;NO 71 | TRNE TAC,1 ;DOES HE WANT DDT NOW? 72 | PUSHJ P,DDTCAL ;YES GET IT FOR HIM. 73 | MOVSI TAC1,-NMCELS 74 | SYSIN1: SKIPGE MCELTB(TAC1) ;SKIP IF NORMAL SENSE 75 | TRC TAC,400000 ;INVERSE SENSE. COMPLEMENT THE BIT 76 | TRNN TAC,400000 ;SKIP IF WE'RE SETTING. 77 | SETZM @MCELTB(TAC1) ; SETTING: CLEAR THE CELL 78 | TRNE TAC,400000 ;SKIP IF  SETTING 79 | SETOM @MCELTB(TAC1) ;SET THE CELL 80 | ROT TAC,1 ;SHIFT TO INSPECT MORE BITS 81 | AOBJN TAC1,SYSIN1 ;LOOP 82 | SYSIN2: 83 | 84 | MOVE TAC,SYSSIZ ;PICKUP REAL SYSTEM SIZE 85 | ADDI TAC,1777 86 | ANDCMI TAC,1777 87 | MOVEM TAC,SYSTOP ;AND SAVE IT 88 | 89 | PUSHJ P,CORINI ; INITIALIZE CORE TABLES 90 | MOVEI TAC,[ASCIZ /SYSTEM INITIALIZED ON /] 91 | SKIPN INIMES ;JUST LOADED? 92 | MOVEM TAC,INIMES ;NO. STORE MESSAGE. 93 | MOVE TAC,[XWD DVDIRIN+TTYATC+TTYUSE,ASSCON+ASSPRG] 94 | HLRZ DEVDAT,DEVLST ;SCAN ALL DEVICES 95 | SYS1: ANDCAM TAC,DEVMOD(DEVDAT) ;CLEAR DEVICE BITS 96 | ;DIRECTORY IN CORE, ASSIGNED BY CONSOLE, PROGRAM 97 | SETZM DEVLOG(DEVDAT) ;CLEAR LOGICAL NAME 98 | HLRZ DEVDAT,DEVSER(DEVDAT) ;LINK ONWARDS 99 | JUMPN DEVDAT,SYS1 100 | MOVEI TAC,IOGO ;GET ADDRESS FOR 200 RESTART 101 | HRRM TAC,SYSDSP ;STUFF IT IN SYSDSP (200) 102 | 103 | MOVEI TAC,P2INI ; CRANK UP P2. IT IS WAITING FOR US 104 | HRRM TAC,P2XFR ; ALLOW P2 TO CONTINUE 105 | 106 | ; HERE WE MUST DETACH AD AND XGP FROM THE SYSTEM IF THE PDP-6 107 | ; IS NOT ON LINE. THE ONCE ONLY CODE SETS THE FLAG 'DETFLG' 108 | 109 | SKIPN DETFLG ; DO WE HAVE TO DETACH? 110 | JRST IOGO ; NO, PROCEED WITH SYSINI 111 | MOVEI TAC,ASSCON ; YES, GET THE 'ASSIGN' BIT 112 | IORM TAC,ADDDB+DEVMOD ; OR INTO DEVICE DATA BLOCK 113 | 114 | 115 | MOVEI DEVDAT,ADDDB ; GET ADDRESS OF DDB FOR PJOBN'S SAKE 116 | DPB TAC,PJOBN ; MAKE SURE THEY ARE ASSIGNED TO JOB 0 117 | 118 | IORM TAC,XGPDDB+DEVMOD 119 | MOVEI DDB,XGPDDB 120 | DPB TAC,PJOBN 121 | 122 | IORM TAC,ADCDDB+DEVMOD 123 | MOVEI DDB,ADCDDB 124 | DPB TAC,PJOBN 125 | 126 | IORM TAC,DACDDB+DEVMOD 127 | MOVEI DDB,DACDDB 128 | DPB TAC,PJOBN 129 | ;INITIALIZE ALL IODEVICES 130 | IOGO: CONO APR,733550+APRCHN ;APR RESET (IO RESET) 131 | CONO PI,11577 ;CLEAR PI SYSTEM 132 | MOVE P,[IOWD ERRPLN,ERRPDL] 133 | PUSHJ P,FMCHK ;ARE WE USING FAST MEMORY? 134 | JRST IOGO ;NO. LET'S TRY THAT ALL AGAIN 135 | IOGO1: MOVE AC1,TIME+P1PID ;GET THE CURRENT TIME 136 | MOVE AC2,THSDAT+P1PID ;AND THE DATE 137 | MOVE TAC,[XWD P1DATA,P1DATA+1] 138 | SETZM P1DATA ;ZERO DATA AREA FOR P1 139 | BLT TAC,P1DATA+PDATALEN-1 ; 140 | SETZM RTIME 141 | SETZM TTIME ;CLEAR NULL TIME TOO. 142 | SETZM LASTDISASTER ;AND LAST DISASTER TIME 143 | MOVEM AC1,TIME+P1PID ;RESTORE THE TIME 144 | MOVEM AC1,TIME+P2PID ;SAVE FOR BOTH PROCESSORS 145 | MOVEM AC2,THSDAT+P1PID ;SAVE THE DATE TOO 146 | MOVEM AC2,THSDAT+P2PID ; 147 | IDIVI AC1,JIFSEC ;CONVERT TIME TO SECONDS 148 | HRL AC1,THSDAT ;PUT DATE IN LEFT HALF OF AC1 149 | MOVEM AC1,TIMDAT ;AND SAVE ,,