. . MAIN CONTROL ELEMENT . . . . (C) Copyright 1972-1978 John Walker . . This software is in the public domain . AXR$ DEFUNCT$ FANG . AUTODUMP EQU 0 TURN OFF UNTIL UNIVAC FIXES EABT$ CGY TDATE EQU R7 TDATE$ FORMAT DATE AND TIME . . FANG receives control at 'BEGIND'. This simply jumps into the . initially-based common instruction bank. . impure code . begind* j begin enter instruction bank . PURE CODE . BEGIN* GETTIME STARTTIME SAVE START TIME OF PROCESSOR ON TSQ TSQRG$ . REGISTER FOR TEST AND SET QUEUEING OFF TSQ SA A5,A15 SAVE OPTIONS if jwsite JNB A15,$+2 'Z' OPTION SET ? SA A15,BTRACE YES. TRACE BGET CALLS endf LR R15,(' ') SET UP STORE-NOT-ZERO SA A15,PARTBL MAKE IT LOOK LINE A PROCESSOR SR R2,TDATE SAVE STARTING DATE AND TIME TOP A15,(BIT(34)) IS THE OUTPUT FILE BREAKPOINTED ? TEP,U A15,OPTION('X') IS BATCH SIMULATION SPECIFIED ? LA,U A4,6 YES. MAKE IT BATCH TNE,U A4,4 DEMAND ? SA A4,DEMAND YES. SET DEMAND FLAG RDI READ$ LINE,AWAY READ IN INFOR TABLE TEP A0,(BIT(30)) ANY MORE ? J RDI YES. KEEP ON READING IT iall$ contgy,'IOPR','IGDM','ERR$'[autodump->',''IABT''']; [(II=0)->',''IINT'''] JDEM DEMHED PRINT DEMAND HEADER ? quarterword turn on quarter word mode r$dita . fire up the editor a$qmsg HEAD1 NO. START BATCH HEADER a$TIME1 TDATE EDIT TIME a$qmsr . COPY UP TO DATE LOCATION a$dayw TDATE PUT IN DAY a$fchr ',' ...A COMMA a$skip 1 ...A SPACE a$DAY3 TDATE EDIT THE MONTH, DAY AND YEAR a$qmsr . COPY REST OF THIS LINE a$fd3 (LEVEL) EDIT THE LEVEL r$prtxa 1 print the header line thirdword . go back to third word mode PRINT$ ,,1 SKIP A LINE . bonk . if ii name$ '!!' name ourselves to synchronise sa a0,a5 save our short-lived name fork$ iient create the II$ process dact$ . wait for it to start breathing endf FORK CMDSCAN FIRE UP THE COMMAND SCANNER FORK DISPI FIRE UP THE DISPATCHER FORK VULCH FIRE UP THE VULTURE AWAY EXIT$ . END OF THE LINE FOR UNNAMED ACTIVITY . . THIS ACTIVITY WAITS FOR COMPLETION OF PROCESSING . VULCH . P ENDLESS WAIT FOR COMPLETION P ENDLESS WAIT FOR DISPATCHER if ii la a0,iiname load the II$ process name sz iiname flag him in termination act$ . activate to close out endf quarterword turn on quarter word mode r$dita . fire up the editor ON jwsite LA A0,BSTATW+1 LOAD NUMBER OF BREL CALLS AA,U A0,2 INCREMENT BY ALLOWED OUTSTANDING BUFFERS TG A0,BSTATW WERE ANY BUFFERS LOST ? J BGETOK YES. ONLY THIS ACTSWL IS ALLOCATED SNONZ BTRACE LOG RELEASES FROM HERE ON IN a$qmsg BGEM START EDITING STATISTICS a$DECV BSTATW EDIT BGET CALLS a$qmsr . COPY BREL NUMBER HEADER a$DECV BSTATW+1 EDIT NUMBER OF BREL CALLS a$qmsr . EDIT HEADER FOR INUSE a$DECV BSTATW+2,,H1 EDIT WORDS IN USE a$qmsr . COPY REST OF DIAGNOSTIC BGETOK . OFF jwsite a$qmsg ENDMSG EDIT TERMINATION MESSAGE JDEM PRTTRM PRINT IT IF DEMAND a$qmsg CPUMSG EDIT BATCH STATISTICS MESSAGE GETTIME ENDTIME GET END OF EXECUTION TIME LA A0,ENDTIME LOAD ENDING TIME ANA A0,STARTTIME COMPUTE EXECTION TIME SA A0,STARTTIME SAVE IT LA,U A1 CLEAR A1 DSL A0,35 MOVE A0 TO A1, CONVERT TO 10000'THS DI,U A0,10000 A0 = SECONDS, A1 = FRACTION sa a1,a4 save the fraction from adit$ a$DECV . EDIT SECONDS a$fchr '.' EDIT A PERIOD LA A0,A4 LOAD TEN THOUSANDTHS a$decz 4 EDIT FOUR DIGITS, ZERO FILLED a$qmsr . COPY REST OF TIME ON DEBUG a$qmsr . COPY MORE OF MESSAGE LNA,XH2 A0,BSTATW+2 LOAD MAXIMUM WORDS USED a$DECV . EDIT INTO THE MESSAGE a$qmsr . COPY REST OF IT OFF DEBUG a$fchr '.' EDIT A PERIOD r$prtxa 2 print the ending message EXIT . ALL DONE . PRTTRM r$prtxa 1 print the demand signoff message EXIT . TERMINATE THIS LAST ACTIVITY . . DEMAND HEADING GENERATOR . DEMHED F$FD3 ('FANG ') EDIT PROCESSOR NAME F$FD1 (LEVEL) EDIT LEVEL F$CHAR '-' EDIT DELIMITER F$DAY1 TDATE EDIT DATE F$SKIP -3 BACK UP F$CHAR '-' EDIT SEPARATOR F$TIME TDATE EDIT TIME F$SKIP -3 BACK UP ON IT F$FD3 (' ') OBSCURE SECONDS IN SIGN ON TIME F$PRT 1 PRINT THE LINE J BONK JOIN PROCESSING . . This process services asynchronous interrupts from the . interactive terminal and (unfortunately) the operator's console. . if ii iient name$ 'II$' give ourselves distinctive name sa a0,iiname save for termination activation act$ a5 fire up initialisation process lr,u r1,1 load nonzero in minor register iinext ii$ . wait for next interrupt tnz iiname are we terminating ? exit$ . yes. exit immediately and a0,(iismsk) mask off the value returned tne a1,(iismsk**iisentl) is it demand interrupt value ? sr r1,shadup yes. set output suppress flag j iinext return for next interrupt endf . . GENERAL CONTINGENCY . . INSURES THAT STATUS IS STORED FOR I/O ERRORS . RATHER THAN ACTIVITY TERMINATION OCCURING. . IMPURE CODE CONTGY RES 2 CONTINGENCY STATUS WORDS TS CLOCK LOCK CONTINGENCY PROCESSING SA A0,GCS1 SAVE A0 lxi,u a0,fang$ load our ibank lij a0,ibcon ENTER IBANK CONTINGENCY ROUTINE PURE CODE ibcon sa a0,cgybdi save bdi we errored in ON JWSITE SNAP$P CONSNP SNAP ALL CONTINGENCY ENTRANCES OFF JWSITE LA,S3 A0,CONTGY LOAD CONTINGENCY TYPE if ii=0 TNE,U A0,010 REMOTE BREAK OR II ? J DINTR YES. PROCESS INTERRUPT endf ON AUTODUMP TNE,U A0,7 ABORT$ CONTINGENCY J ROUND2 YES. TAKE AUTOMATIC DUMP OFF AUTODUMP TE,U A0,012 IS CONTINGENCY ERROR MODE TYPE ? J NOTIO NO. CAN'T BE AN I/O CONTINGENCY LA,H1 A0,CONTGY LOAD CONTINGENCY STATUS . . The following code detects the ER out of range error that . results from doing an ER TLBL$ in a system that does not . support it. If this happens, we set a status code in the . requesting process's A0 of 0400077. This status causes . the requesting code to consider the tape unlabeled. . te,u a0,040312 is the error an unknown ER ? j cgyneru no. test for other cases la,h2 a0,contgy yes. load address of ER la,h2 a0,,a0 load the ER code from instruction te,u a0,TLBL$ is it TLBL$ ? j notio no. this is a serious error la,u a0,0400077 yes. load pseudo-status for request sa,h1 a0,gcs1 plug in to return to requestor j rezzr go return to user . cgyneru TNE,U A0,024112 MAX PAGES ? J PAGLIM YES. KILL THE RUN LA,S1 A0,CONTGY LOAD ERROR TYPE TE,U A0,1 BETTER BE I/O ! J NOTIO NO. SET UP TO WIPE OUT REZZR LA,H2 A0,CONTGY LOAD RE-ENTRY ADDRESS . . The following code, which is turned on only if remote break . processing is via contingency instead of II$ (II=0), detects . when a process that was waiting on a DACT$ was 'sprung' off . it by the interrupt. Naturally, Univac does not back up the . re-entry address to the DACT$ when this happens, so we must . test for each DACT$ in the program and do it ourselves. . if ii=0 ON TSQ=0 TE,U A0,SCHDACT IS THE DACT$ IN THE SCHEDULER OFF TSQ=0 TNE,U A0,POSDACT IS THE DACT$ IN POSITION ? ANA,U A0,1 YES. BACK UP RETURN ADDRESS endf AA,U A0,1 RETURN TO NEXT INSTRUCTION SA,H2 A0,CONTGY STORE RETURN ADDRESS IN PACKET la a0,cgybdi reload bank error occurred in j cgyret go to dbank in order to return . impure code cgyret lij a0,$+1 switch back to bank of error LA A0,GCS1 RELOAD USER'S A0 CTS CLOCK UNLOCK CONTINGENCY CRITICAL SECTION ON 1 CRTN$ DOESN'T WORK ! CEND$ . TERMINATE CONTINGENCY MODE SZ,S3 CONTGY CLEAR INDEX REGISTER FIELD IN PACKET J *CONTGY JUMP INDIRECT THROUGH CONTINGENCY PACKET OFF pure code ON 0 CRTN$ DOESN'T WORK ! CRTN$ . CLEAR CONTINGENCY MODE AND RETURN OFF EX8LEV>30 . NOTIO IALL$ 0 CLEAR PROGRAM CONTINGENCY ON AUTODUMP IALL$ CONTGY,BIT(6) SET ABORT$ CONTINGENCY OFF AUTODUMP PRINT$ CONTM,CONTL PRINT CONTINGENCY MESSAGE SNAP$P CONSNP DUMP THE CONTINGENCY WORDS LA A0,GCS1 LOAD ORIGINAL A0 CONTENTS EABT$ . BRING THINGS TO A SCREECHING HALT . if ii=0 DINTR LA,S1 A0,CONTGY LOAD ERROR TYPE TE,U A0,2 IS IT REMOTE BREAK ? J REZZR NO. IGNORE ONSITE 'II' KEYIN SNONZ SHADUP SET SHUT UP FLAG J REZZR RETURN TO INTERRUPTED CODE endf . PAGLIM PRINT$ PAGLMS,PAGLML,2 PRINT ERROR MESSAGE ON AUTODUMP IALL$ 0 CLEAR ALL CONTINGENCIES OFF AUTODUMP ABORT$ . TERMINATE THE PROCESSOR . . RECOVERY AFTER FANG INTERNAL ERROR . ON AUTODUMP ROUND2 JDEM AWAY TERMINATE IF CALLED FROM DEMAND IALL$ 0 CLEAR ALL CONTINGENCIES PRTCN$ FERRH,FERRHL PUT HEADING ON THE DUMP CSF$ ERFASG ASSIGN THE ERROR FILE JN A0,FBORT ABORT IF CAN'T ASSIGN THE FILE IOW$ WSDFF WRITE SDF ADD FILE TO TEM FILE TZ WSDFF+IOSTATUS NORMAL COMPLETION ? J FBORT NO. ERROR OFF CSF$ ERFADD ADD A PMD CARD AFTER EXECUTION FBORT ERR$ . TERMINATE IN ERROR OFF AUTODUMP . PURE DATA ascii head1 'Processed at & on & by Marinchip Systems FANG processor level &' endmsg 'End FANG.&' cpumsg ' Time: & seconds& Memory: & words&' ON jwsite bgem 'Lions: & Christians: & Inuse: &. &' OFF jwsite fieldata IMPURE DATA CONSNP SNAP$PKT CONTGY,2 DUMP CONTINGENCY WORDS CONTM '2 4 6 8, YOU MADE FANG DISINTEGRATE:' CONTL EQU $-CONTM PAGLMS '****** PAGE LIMIT WAS EXCEEDED ******' PAGLML EQU $-PAGLMS ON AUTODUMP ERFASG '@ASG,T FANG$DUMP$.,F/1 . ' ERFADD '@ADD FANG$DUMP$. . ' WSDFF IO$PKT,W$ 'FANG$DUMP$' SDFTEXTL,SDFTEXT 0 . SDFTEXT * 0500130,0 LABEL CONTROL WORD '*SDFF*' LABEL IMAGE * 000200,0 TEXT CONTROL WORD '@PMD,APPLE' PMD CALL CARD * 0777700,0 END OF FILE CONTROL WORD SDFTEXTL EQU $-SDFTEXT . FERRH 'H,,,*FANG ERROR* SEND TO FANG CENTRAL, 16 ST JUDE RD, MILL '; 'VALLEY CA 94941' FERRHL EQU $-FERRH OFF AUTODUMP DEMAND* * 0 DEMAND FLAG uactn* * 0 unique activity name generator cell errpkt* * bit(35) errpr$ packet to edit facility errors * 0 CSFSTBIT* * 0 STATUS FROM LAST CSF$ REQUEST SHADUP* * 0 NON-ZERO TO SUPPRESS OUTPUT if ii iiname * 0 II$ process name endf PARTBL* * 0 OPTION BITS ENDTIME * 0 END TIME GCS1 * 0 CONTINGENCY A0 SAVE cgybdi * 0 save for bdi of error CLOCK * 0 CONTINGENCY LOCK STARTTIME * 0 EXECUTION START TIME ENDLESS* PVQUEUE 0 COMPLETION QUEUE END