/******* MULTI8 COREMAP PRINTER ******* /LAST EDIT: 5-OCTOBER-75, JV /LAST EDIT: 14-JULY-75, JV /LAST EDIT: 15-MAY-75, JV /NAME: MA (MAP.PA) /LENGTH: ONE PAGE /FUNCTION: TO PRINT THE COREMAP ON THE DEVICE WHERE THE / TASK IS CALLED FROM. IT PRINTS 20 PAGES ON A LINE, / IDENTIFYING THE NAME OF THE TASK THAT BELONGS TO / THE OCCUPIED PAGE. /CONCEPT:THE MODULE LOOKS INTO ALL COREMAP ENTRIES / AND INTERPRETS THEM IN THE FOLLOWING WAY: / 0000 FREE: PRINT .. / 7777 OCCUPIED BY BUFFER: PRINT [[ / 7776 OCCUPIED BY BUFFER: PRINT ]] / 7775 OCCUPIED BY MONITOR: PRINT $$ / NEGATIVE: OCCUPIED BY SOME TASK: PRINT TASK NAME / POSITIVE: SOME RELEASED TASK: PRINT "-" TASK NAME / / THE TASK IS CALLED WITH THE NAME OF THE CALLING / KB I.E. "K1" IN THE AC. WHEN CALLED WITH AC=0, / THE DEFAULT OUTPUTDEVICE "T1" IS TAKEN. / / THE TASK CONTAINS ONCE-ONLY CODE, SO AFTER COM- / PLETION A SWPOUT IS DONE, FORCING A NEW COPY TO / BE TRANSFERED INTO CORE FROM DISK FOR EVERY CALL, / ALSO LEAVING ROOM FREE FOR OTHER TASKS. / /USE: TAD ("K^100+"1&3777 /ENTER WITH KEYBD NAME / JMS MONITOR / CALL / "M^100+"A&3777 /NAME OF TASK / BUSY RETURN /AC AND DF UNCHANGED / NORMAL RETURN /AC=0;DF=MONFLD / /OR CALL IT WITH THE FOREGROUND COMMAND DECODER: / >R MAP / / /A MAP COULD LOOK LIKE THIS: / 4000420044004600500052005400560060006200640066007000720074007600 /0 $$ $$ $$ $$ $$ $$ $$ -TE MA $$ $$ $$ $$ $$ $$ $$ /1 $$ -DK SP [[ ]] PT .. .. .. .. .. .. .. .. .. .. /1 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. $$ / /AS YOU WILL NOTICE, THE TASK "MA" WILL ALWAYS APPEAR IN /THE MAP. THAT DOESN'T MEAN IT REMAINS IN CORE. IT'S LIKE /A FRIGIDAIRE: YOU NEVER CAN SEE IF THE LAMP REALLY STOPS /BURNING, WHEN THE DOOR IS CLOSED ... "M^100+"A&3777 MAPTEM, 200 /LENGTH ONE PAGE 0 MAP, SNA /ENTER WITH NAME OF KEYBOARD TASK IN AC JMP MAP1 /TAKES DEFAULT TAD ("T-"K^100 DCA MAPONAM MAP1, JMS MAPTYP JMS MAPTYP /PRINT 2 SPACES MAPLP1, TAD MAPM4 RTR AND (MAPBEG-CORMAP%4&4+23 /AND (23 OR (27 JMS MAPTYP /PRINT LOCATION WHERE MAP STARTS TAD MAPM4 CLL RAL AND C7 TAD (260-240 JMS MAPTYP /PRINT "0 OR "4 TAD (260-240 JMS MAPTYP /PRINT "0 TAD (260-240 JMS MAPTYP /PRINT "0 ISZ MAPM4 JMP MAPLP1 JMS MACRLF IFNZRO MAPBEG-CORMAP&17 < TAD (-MAPBEG+CORMAP&17 7760 DCA MAPM4 MAPLP2, JMS MAPTYP /PRINT ENOUGH SPACES JMS MAPTYP TAD C4 /("$-240 JMS MAPTYP /AND "$$" (MONITOR) TAD C4 JMS MAPTYP ISZ MAPM4 JMP MAPLP2 TAD (MAPBEG-CORMAP&17 > MAP4, TAD (-20 /NEXT HALF FIELD DCA MAPM4 /20 ENTRIES ON ONE LINE MAPLUP, JMS MAPTYP /PRINT SPACE ISZ MAPTR /NEXT ENTRY TAD I MAPTR /FETCH ENTRY SMA SZA CLA TAD ("--240 /PRINT "-" JMS MAPTYP /ELSE SPACE TAD I MAPTR TAD C3 CLL /CODE CAN BE: 0=FREE ROOM TAD M4 / -1=BUFFER SNL / -2=BUFFER JMP MADOT / -3=MONITOR IAC / .LT.0=POINTER TO TCB SMA / .GT.0=RELEASED TASK CIA /INVERT RELEASED ENTRY TO GET TCB TAD (-TCBTAB-4 /COMPUTE ENTRY IN NAMLST CLL RTR RAR /DIVIDE BY 8 TAD (NAMLST JMS DEFER JMP .+4 MADOT, TAD MATAD DCA .+1 /TAKE "NAME" FROM TABLE HLT DCA MAPTEM TAD MAPTEM /GET FIRST CHARACTER IFZERO PDPTYP-PDP8E < BSW SPA > IFNZRO PDPTYP-PDP8E < CLL RTR RTR RTR SZL > IAC /SECOND CHAR ABOVE 300 ? TAD (40-3 /SUBTACT BITS OF SECOND CHAR. AND C77 /AND MAKE CHAR IN RANGE 240-337 JMS MAPTYP TAD MAPTEM /GET SECOND CHARACTER TAD C240 AND C77 JMS MAPTYP ISZ MAPCNT /ALL DONE? JMP MAPNXT TAD (215-240 JMS MAPTYP TAD (212-4240 /ALLOW INTERRUPTIONS NOW JMS MAPTYP JMS MONITOR EXIT SWPOUT MAPNXT, ISZ MAPM4 JMP MAPLUP /N JMS MACRLF /20 DONE ON ONE LINE JMP MAP4 MACRLF, .-. /PRINT CRLF & FIELD # TAD (215-240 JMS MAPTYP TAD (212-4240 /ALLOW INTERUPTIONS NOW JMS MAPTYP ISZ MAFLD MATAD, TAD MAFLD CLL RAR JMS MAPTYP /PRINT FIELD # JMP I MACRLF MATABL, "$^100+"$ /$$, DO AS IF THESE ARE TASKNAMES "[^100+"[ /[[ "]^100+"] /]] ".^100+". /.. MUST BE FOLLOWED BY MAFLD MAFLD, MAPBEG-CORMAP%4+MONFLD%4+37 /HALF FIELD COUNTER MAPCNT, MAPEND-CORMAP&1+MAPBEG-MAPEND MAPTR, MAPBEG-1 /PTR IN COREMAP MAPM4, -20 /TYPE NAME, POINTED AT BY MAPTEM MAPTYP, .-. TAD (4240 /CLAIM THE OUTPUT TASK JMS MONITOR CALL MAPONAM, "T^100+"1&3777 JMP .-3 CDF MONFLD /OUTPUT TASK MAY LOOSE DF JMP I MAPTYP $$$$