/SYSSWP-SYSTEM SWAPPER /THE PURPOSE OF THIS SYSTEM PROGRAM IS FOR SAVING AND /RESTORING OF SYSTEM AREAS IN AN INTELLEGENT MANNER. /THIS SHOULD REPLACE THE "/Y" OPTION IN "PIP" WITH A MORE /COMPREHENSIVE SET OF OPERATIONS FOR QUICK SYSTEM SWITCHING. /NOTE THAT THE FILES PRODUCED BY THIS PROGRAM ARE /****NOT COMPATIBLE**** WITH FILES PRODUCED BY THE /Y /OPTION OF PIP. /OPTIONS: / /B SWITCH THE BOOTSTRAP / /H SWITCH HANDLERS / /P INPUT FILE IS "PIP /Y" FILE / /S SWITCH SYSTEM PORTION / /Y SWITCH ALL OF THE ABOVE /ANY COMBINATION OF THE ABOVE MAY BE SPECIFIED. /THE INPUT IS THROUGH THE COMMAND DECODER WITH THE /FOLLOWING RULES: / 1. IF OUTPUT IS TO A FILE AND THE "/Y" OPTION IS / NOT SPECIFIED THEN THE FILE MUST ALREADY EXIST. / 2. DEFAULT INPUT EXTENSION IS ".SY". FOR OUTPUT / INTO A FILE THE .SY EXTENSION IS FORCED IF NONE / IS SPECIFIED. /MAP OF SAVED AND RESTORED BLOCKS /BLOCK BLOCK DESCRIPTION / SYS FILE / 0 0 SYSTEM BOOTSTRAP RECORD / 6 1 PARAMETER BLOCK / 7-12 2-5 KEYBOARD MONITOR / 13-15 6-10 USER SERVICE ROUTINE / 16-25 11-20 DEVICE HANDLERS / 26 21 ENTER PROCESSOR FOR USR / 51-53 22-24 COMMAND DECODER / 54-55 25-26 SAVE AND DATE OVERLAYS / 56 27 MONITOR ERROR ROUTINE / 57 30 CHAIN PROCESSOR FOR USR / 60-63 31-34 SYSTEM ODT / 64-END 35-END RESERVED FOR EXPANSION AND MISC. /THIS PROGRAM DEPENDS ON CERTAIN TABLES IN THE USR /AND SYSTEM BOOTSTRAP BE IN FIXED LOCATIONS. /THEY ARE: TDCB= 0160 /DEVICE CONTROL WORD TABLE /IN BOOTSTRAP UDNAME= 0141 /USER DEVICE NAME TABLE /IN BOOTSTRAP DHRES= 0047 /DEVICE HANDLER RESIDENCY /IN BOOTSTRAP SDNAME= 0164 /PERM DEVICE NAMES /BLOCK 2 USR SDVHND= 0366 /BLOCK 2 USR /OVERFLOWS THRU BLOCK 3 /EACH TABLE IS 17 LONG. SOME FUNNY BUSINESS MUST /HAPPEN TO TAKE CARE OF DSK. /LOADING INFORMATION: / .R ABSLDR / *SYSSAV=13000(89) FIELD 1 *3000 ODEV=6600 /OUT HANDLER LOADS HERE INDEV=7200 /IN HANDLER LOADS HERE MPARAM=7643 /CD PARAMETER TABLE USR=0200 /THE FOLLOWING ARE USED AFTER WE ARE THROUGH /WITH THE USR. INHAND=20 OUHAND=21 SLASHS=22 SLASHB=23 SLASHH=24 SYSSWP, CLA CLL /JUST IN CASE JMS I (7700 /LOCK USR IN 10 /USRIN JMS I (USR /COMMAND DECODE 5 DEFEX, "S 100+"Y-300 /"SY" DEFAULT EXT. CLA CLL /LET'S NOT PRESERVE TENATIVES /FIRST SOME INPUT FILE SETUP TAD I (7617 /DEVICE NUMBER INPUT FILE AND (17 /MASK NUMBER DCA INDEVN /SAVE TAD INDEVN SNA /SKIP IF SPECIFIDE JMP BADCD JMS GDCB /GET DCB WORD SMA CLA /MUST BE FILE STRUCTURED JMP BADFIL /NOT DIRECTORY DEVICE TAD (INDEV+1 /WHERE INHANDLER GOES DCA IENTRY /STASH FOR HANDLER LOAD TAD INDEVN /GET NUMBER JMS I (USR /LOAD HANDLER 1 IENTRY, INDEV+1 /CHANGED TO ENTRY POINT HLT /HUH!!! TAD I (7620 /GET START BLOCK DCA IBOOT /INPUT BOOTSTRAP BLOCK JMS I (SLSHP /CHECK /P OPTION TAD IBOOT /GET AGAIN SNA /SKIP IF A FILE TAD (5 /IS SYSTEM AREA IAC /CALC START OF PARAM BLOCK DCA IPARAM /BLOCK FOR PARAMETER BLOCK TAD IBOOT /AND AREA PAST SCRATCH BLOCKS SNA /SKIP IF A FILE TAD (5+22 /EXTRAS FOR DIRECTORY AND SCRATCH TAD (22 /CALC START COMMAND DECODER DCA IDECOD /STASH BLOCK NUMBER TAD I (7617 /NOW TO CALC SIZE AND (7760 /MASK SIZE BITS CIA /MAKE POSITIVE RTR CLL;RTR /SHIFT OVER SZA /SKIP IF NOT FROM A FILE JMP CDL2 /SKIP OVER THIS STUFF CIF 0 /WAS A SYSTEM AREA JMS I IENTRY /SO READ DIRECTORY BLOCK 0100 /TO DETERMINE LENGTH 0 /INTO PAGE 0 FIELD 0 1 /BLOCK 1 HLT /HUH!!! JMS GSIZE /GET SIZE FROM DIRECTORY JMP NOSYS /NO SYSTEM AREA NOP /MAY BE BAD WITH ZERO DIRECTORY SNA /SKIP IF SYSTEM PRESENT. JMP NOSYS /NO SYSTEM AREA CDL2, DCA INSIZE /SIZE OF SYSTEM /NOW SOME OUTPUT FILE SETUP /WHILE WE ARE NEAR THE SYSTEMS AREA TAD I (7600 /FOR DEVICE NUMBER AND (17 /JUST IN CASE HE GAVE A LENGTH DCA ODEVN /SAVE NUMBER TAD ODEVN SNA /SKIP IF ONE SPECIFIED JMP BADCD JMS GDCB /GET DCB WORD SMA CLA /SKIP IF FILE STRUCTURED JMP BADFIL /NOT A DIRECTORY DEVICE TAD (ODEV+1 /WHERE WE PUT THE HANDLER DCA OENTRY TAD ODEVN /GET DEVICE NUMBER JMS I (USR /GO GET THE DEVICE 1 /HANDLER OENTRY, ODEV+1 /WHERE IT GOES HLT /HUH!!!! TAD I (7601 /NOW TO SEE IF FILE SPECIFIED SNA CLA /SKIP IF WRITING INTO FILE JMP CDSYS /INTO A SYSTEM AREA TAD I (7604 /CHECK EXTENSION SNA TAD DEFEX /GET DEFAULT EXTENSION DCA I (7604 /AND FORCE "SY" IF ZERO TAD I (MPARAM+2 /GET OPTIONS WORD SMA CLA /SKIP IF /Y SPECIFIED JMP CDL1 /NO: FILE MUST ALREADY EXIST TAD (7601 /NAME POINTER DCA CDL3 TAD (7601 DCA CDL4 /AND COPY ALL OVER TAD (7601 DCA CDL5 JMP I (CDCON1 /GO CONTINUE NEXT PAGE INDEVN, 0 /IN DEVICE NUMBER IBOOT, 0 /IN BLOCK NUMBER BOOTSTRAP IPARAM, 0 /IN BLOCK # PARAM BLOCK IDECOD, 0 /IN BLOCK # C.DECODER INSIZE, 0 /TOTAL SIZE OF SYSTEM AREA /DOES NOT INCLUED DIRECTORY OR SCRATCH ODEVN, 0 /OUT DEVICE NUMBER PAGE CDSYS, TAD OENTRY /OUTPUT IS INTO SYSTEM AREA DCA CDOSTRT /HANDLER ENTRY TO THIS PAGE CIF 0 /CALL HANDLER JMS I CDOSTRT /READ DIRECTORY SETMENT 1 0100 P0, 0 P1, 1 HLT /HUH!!! JMS GSIZE /GET SIZE OF SYS JMP BADSIZ /NO SYSTEM AREA SKP /HAVE SIZE BUT DIRECTORY ALSO ZERO JMP CDLX CIA /-LENGTH DCA OSTRT+1 /SAVE SIZE TAD OSTRT+1 /GET BACK TAD INSIZE /AND CHECK AGAINST DESIRED SPA SNA CLA /SKIP IF TOO SMALL JMP CDL8 /IS O.K. CDL7, TAD INSIZE /COPY INSIZE TO THIS PAGE TAD (22+5 /ADD BACK IN SCRATCH+DIRECTORY DCA OSTRT+1 CDF 0 /TO FIELD OF DIR SEG. TAD I P1 /GET OLD START CIA /NEGATE TAD OSTRT+1 /DIFFERENCE IN SIZES TAD I (6 /ADJUST LAST EMPTY DCA I (6 /TO CORRECT VALUE TAD OSTRT+1 /SINCE CHANGING START OF FILES DCA I P1 /UPDATE START OF FILES CDF 10 /BACK TO THIS FIELD CIF 0 /WRITE ZERO DIRECTORY BACK OUT JMS I CDOSTRT 4100 0 1 HLT /HUH TAD INSIZE /AND SET SIZE CDLX, CIA DCA OSTRT+1 CDL8, DCA OSTRT /START AT BLOCK 0 JMP CDL6 /CONTINUE CDCON1, TAD ODEVN JMS I (USR /DELETE ANYTHING WITH THIS NAME 4 CDL3, 7601 0 /JUST DELETE CLA CLL /MIGHT NOT BE ONE TAD INSIZE /GET SIZE OF SYSTEM CLL RTL;RTL /SHIFT OVER TO CORRECT PLACE TAD ODEVN /AND OUT DEVICE NUMBER JMS I (USR /MAKE TENATIVE 3 /ENTER CDL4, 7601 /THE NAME NOW 0 /AVAILABLE SIZE NOT USED JMP NOROOM /ROOM NOT AVAILABLE TAD INSIZE /GET SYSTEM SIZE DCA CDL5+1 /STASH FOR CLOSE TAD ODEVN /GET DEVICE NUMBER JMS I (USR /AND MAKE PERMANENT 4 CDL5, 7601 /NAME 0 /SIZE HLT /HUH! CDL1, TAD (7601 /POINTER TO NAME DCA OSTRT /FOR CALL TAD ODEVN /GET OUT DEV NUMBER JMS I (USR /AND LOOKUP FILE 2 OSTRT, 7601 /CHANGED TO FILE START 0 /CHANGED TO -LENGTH JMP NOFILE /MUST WORK OR ILLEGAL /NOW WE CAN CHECK FOR APPROPRIATE SIZE. CDL6, TAD OSTRT+1 /GET -FILE LENGTH TAD INSIZE /OUT FILE >= IN SIZE SMA SZA CLA /SKIP IF SIZE O.K. JMP BADSIZ /OUT FILE TOO SMALL TAD OSTRT /GET START OF FILE DCA OBOOT /START FOR BOOTSTRAP TAD OBOOT SNA /SKIP IF A FILE TAD (5 /PAST DIRECTORY IAC /NEXT BLOCK DCA OPARAM /WHERE PARAMETER BLOCK STARTS TAD OBOOT /AGAIN SNA /SKIP IF FILE TAD (5+22 /PAST DIRECTORY AND SCRATCH TAD (22 /CALC START COMMAND DECODER DCA ODECOD TAD INSIZE /A PRELIMINARY CHECK TAD (-41 /FOR VALIDITY OF INPUT SPA CLA /MUST BE AT LEAST 41 BLOCKS JMP NOSYS /NOT A SYSTEM JMP DOIT /GO START OPERATION CDOSTR, 0 OBOOT, 0 OPARAM, 0 ODECOD, 0 PAGE /SUB TO GET DCB WORD GDCB, 0 TAD (7600+TDCB-1 /CALC INDEX INTO DCB TABLE DCA GDCBTM TAD I GDCBTM /FETCH DCB WORD JMP I GDCB GDCBTM, 0 /SUBROUTINE TO DETERMINE SIZE OF SYSTEM AREA. /DIRECTORY SEGMENT 1 MUST BE LOADED INTO PAGE 0 FIELD 0 /CALL: JMS GSIZE / XXXX /NO SYSTEM AREA / XXXX /ZERO DIRECTORY: AC=SIZE (0 IF BAD) / XXXX /SYSTEM PRESENT AC=SIZE /SIZE IN AC0-7 GSIZE, 0 CDF 0 IAC TAD I (0 /GET -#ENTRIES+1 SNA CLA /SKIP IF NON-ZERO DIRECTORY JMP GSIZE1 /IS ZERO DIRECTORY TAD I (1 /GET STARTING BLOCK CDF 10 /BACK TO THIS FIELD TAD (-5-22 /DON'T SAVE THESE SMA /SKIP IF ILLEGAL JMP GSIZEE /HAVE CORRECT SIZE CLA /GET RID OF BAD ACC JMP I GSIZE /ERROR RETURN GSIZE1, TAD I (1 /A ZERO DIRECTORY CDF 10 /BUT GET SIZE ANYWAY TAD (-5-22 /DON'T COUNT THOSE SPA /SKIP IF A GOOD ONE CLA CLL /RETURN AC=0 FOR BAD SIZE SKP /TAKE SECOND RETURN GSIZEE, ISZ GSIZE /TAKE 3RD RETURN ISZ GSIZE JMP I GSIZE /AND RETURN /SIMI-GENERALIZED MOVE ROTINE /CALLED ONLY FROM FIELD 1 /CALL: JMS MOVE / FUNCTION /6-8 FROM FIELD / /9-11 TO FIELD / FROM ADDRESS / TO ADDRESS / WORD COUNT /A NEGATIVE NUMBER MOVE, 0 TAD I MOVE /GET FUNCTION WORD AND (70 /MASK FROM ADDRESS TAD (CDF DCA MOVE1 /STASH TAD I MOVE /GET AGAIN RTL;RAL /TO FIELD AND (70 /MASK BITS TAD (CDF /FIX FIELD DCA MOVE2 /STASH ISZ MOVE /TO FROM ADDRESS TAD I MOVE /FETCH IT DCA MOVEFR /STASH IN POINTER ISZ MOVE /TO DESTINATION ADDRESS TAD I MOVE DCA MOVETO /STASH IN POINTER ISZ MOVE /TO WORD COUNT TAD I MOVE /FETCH WORD COUNT ISZ MOVE SNA /DON'T ALLOW 0 JMP I MOVE /FAST RETURN DCA MOVEWC /STASH MOVE1, CDF /SOURCE FIELD TAD I MOVEFR MOVE2, CDF /DESTINATION FIELD DCA I MOVETO ISZ MOVEFR /NOT EXPECTED TO SKIP ISZ MOVETO /NOR THIS ISZ MOVEWC /DONE? JMP MOVE1 /NOT YET: LOOP CDF 10 /TO THIS FIELD JMP I MOVE /AND RETURN MOVEFR, 0 MOVETO, 0 MOVEWC, 0 /PRINT A MESSAGE ROUTINE PRMSG, 0 CDF 10 /JUST IN CASE TAD I PRMSG /GET ADDRESS OF MESSAGE DCA PRMST /SAVE POINTER ISZ PRMSG /POINT TO RETURN JMS CRLF /START WITH NEW LINE PRMSL, TAD I PRMST /GET A WORD CLL RTR;RTR;RTR /LEFT HALF OVER JMS PRCHR /PRINT THE CHAR TAD I PRMST /GET AGAIN JMS PRCHR /PRINT RIGHT HALF ISZ PRMST /NEXT WORD JMP PRMSL PRMST, 0 /PRINT A CHARACTER PRCHR, 0 AND (77 /MASK BITE SNA /SKIP IF ONE THERE JMP I PRMSG /NOPE=DONE TAD (-40 /FOR EXTENSION SPA /SKIP IF 200 CODE TAD (100 /IS 300 CODE TAD (240 /PARITY AND 40 BACK IN JMS PCH /PRINT THE CHARACTER 6031 /CHECK FOR O JMP I PRCHR /DONE 6036 /GET IT TAD (-"O+100 / O SNA JMP I PRMSG TAD (-"C+"O /OR C SZA CLA JMP I PRCHR CDF CIF 0 JMP I (7600 /PRINT CR/LF CRLF, 0 TAD (215 JMS PCH TAD (212 JMS PCH JMP I CRLF /PRINT CHAR IN AC PCH, 0 6046 /PRINT IT 6041 /WAIT FOR FLAG JMP .-1 CLA CLL /GET RID OF CHAR JMP I PCH PAGE /NOW IT IS TIME TO DO SOME TRANSFERS DOIT, TAD I (OENTRY /WE ARE THRU WITH THE USR DCA OUHAND /SO USE SOME PAGE ZERO'S TAD I (IENTRY DCA INHAND TAD I (MPARAM+2 SPA CLA /SKIP IF NOT /Y IAC DCA SLASHS /INIT OPTIONS TAD SLASHS /BY TURNING ON OR OFF DCA SLASHH /DEPENDING ON /Y TAD SLASHS /OPTION. /Y=(BHS) DCA SLASHB TAD I (MPARAM+1 /OPTIONS 2 AND (40 /MASK /S BIT TAD SLASHS DCA SLASHS TAD I (MPARAM AND (20 /MASK /H BIT TAD SLASHH DCA SLASHH TAD I (MPARAM AND (2000 /MASK /B BIT TAD SLASHB DCA SLASHB TAD SLASHB /NOW SEE IF ANY OPTIONS SPECIFIED TAD SLASHS TAD SLASHH SNA CLA /SKIP IF SOME OPTION JMP NOOPT /NO OPTIONS SPECIFIED /INITIALIZATION DONE: NOW READ IN GROUP1 TAD I (OBOOT /AND OLD INFO (ODEV) DCA DOIT3 TAD I (OPARAM DCA DOIT4 TAD I (OPARAM TAD (6 /TABLES IN 2ND BLOCK USR DCA DOIT5 JMS DOITS1 /READ INPUT FILE STUFF CIF 0 JMS I OUHAND /NOW INTO FIELD 1 0210 /THE BOOTSTRAP 0200 /NOT INTO PAGE 0 DOIT3, 0 /200-600 HLT /HUH CIF 0 JMS I OUHAND 0211 /AND PARAMETER BLOCK 0600 /600-1200 DOIT4, 1 HLT /HUH!!! CIF 0 JMS I OUHAND /AND BLOCKS 2-3 OF USR 0411 /2 BLOCKS 1200 /1200-2200 DOIT5, 6 HLT /HUH CDF 10 /BACK TO THIS FIELD TAD SLASHB /CHECK IF /B OPTION SZA CLA /SKIP IF NOT REQUESTED JMP BOOREQ /IS REQUESTED. JMS I (MOVE /MOVE OLD BOOTSTRAP DOWN 0010 /SRCFLD=1;DSTFLD=0 0200 /SRC START=200 0000 /DST START=000 -47 /WORDS ABOVE HND RES TBL JMS I (MOVE /BETW HND RES AND USER NAME 0010 0266 0066 -52 /THRU 137 JMS I (MOVE /THE HANDLER ITSELF 0010 /AND ALL THE FIELD 0 STUFF 0400 0200 -200 TAD I (360 /SYSTEM DCB WORD CDF 0 DCA I (160 /SWITCH IT CDF 10 /BACK TO THIS FIELD JMP BOOREQ /NEXT PAGE /THE DCB WORD IS THE ONLY ONE /WE NEED TO SWITCH FOR SYS SINCE /RESIDENCY DOESN'T CHANGE. /SUBROUTINE TO READ INDEV STUFF DOITS1, 0 TAD I (IBOOT /BOOTSTRAP BLOCK DCA DOIT1 TAD I (IPARAM /STARTING WITH PARAMETER BLOCK DCA DOIT2 CIF 0 /READ INDEV FIRST JMS I INHAND 0200 /BOOTSTRAP 0 /LOWEST PAGE FIELD 0 DOIT1, 0 /BOOSTRAP BLOCK HLT /HUH CIF 0 JMS I INHAND /AND PARAM BLOCK ON 2001 /UP TO HANDLERS 0400 /0400-4400 DOIT2, 1 HLT /HUH JMS INVALID /CHECK INPUT FOR VALIDITY JMP I DOITS1 PAGE BOOREQ, TAD SLASHH SZA CLA /SKIP IF NO HANDLERS REQUESTED JMP HNDREQ /YES REQESTED JMS I (MOVE /SINCE NOT REQUESTED 0010 /KEEP OLD TABLES 0250 /HANDLR RESIDENCY 0050 -16 JMS I (MOVE /AND DCB 0010 0361 0161 -16 JMS I (MOVE /AND NAME TABLE 0010 1200+SDNAME+1 3400+SDNAME+1 -16 JMS I (MOVE /NOW FOR INFORMATION TABLE 0010 1200+SDVHND+1 3400+SDVHND+1 -16 HNDREQ, CDF 0 /NOW TO CHECK ON DSK TAD I (50 /FROM RESIDENCY TABLE TAD (-7607 /CHECK IF SYS SZA CLA /SKIP IF DSK=SYS JMP CHKSLS /NO-LEAVE AS IS TAD I (160 /CHANGE DCB FOR DSK DCA I (161 TAD I (3400+SDVHND /AND INFORMATION TABLE DCA I (3400+SDVHND+1 CHKSLS, CDF 10 JMS I (CHKRES /FOR PATHOLOGICAL CASE TAD SLASHS /HOW ABOUT SYSTEM ITSELF SZA CLA /SKIP IF NOT JMP SYSREQ /YES=LEAVE AS IS JMS MOVE /NO:SO PUT OLD BACK IN 0010 1200 /USR 3400 -164 /THRU SDNAME JMS MOVE /FROM SDNAME TO SDVHND 0010 1200+SDNAME+17 3400+SDNAME+17 SDNAME+17-SDVHND JMS MOVE /AND SDVHND TO END BLOCK 3 USR 0010 1200+SDVHND+17 3400+SDVHND+17 SDVHND+16-1000 SYSREQ, TAD OBOOT /SET UP FOR WRITEING OUT DCA SYSR1 /WHERE BOOTSTRAP GOES TAD OPARAM /WHERE NEXT GROUP GOES IAC DCA SYSR2 TAD OPARAM DCA SYSR2B TAD OPARAM TAD (6 /WHERE USR BLK 2-3 GOES DCA SYSR3 JMS PARAM /FIX UP PARAMETER BLOCK /IF REQUIRED AND SET WRPARAM /NOW COPY BLOCK BACK TO OUTDEV CIF 0 JMS I OUHAND /THE BOOTSTRAP 4200 0 SYSR1, 0 HLT /HUH TAD SLASHS SNA CLA /NEXT ONLY IF /S JMP SYSR4 ISZ I (WRPARAM /SHOULD WE WRITE THE PARMETER BLOCK JMP SYSR2B+2 /NO CIF 0 /YES. JMS I OUHAND 4201 0400 SYSR2B, 1 HLT /HUH CIF 0 JMS I OUHAND /PARAM,KEYBOARD, AND 1 BLK USR 5201 1000 SYSR2, 2 HLT /HUH SYSR4, CIF 0 JMS I OUHAND /AND REST OF USR 4401 3400 SYSR3, 7 HLT /HUH!!! /NOW - IF OUTDEV=SYSDEV LETS CHANGE THE /IN CORE TABLES TAD OUHAND TAD (-7607 SZA CLA /SKIP IF OUDEV=SYSDEV JMP SYSR5 /NO: SKIP THIS STUFF JMS I (MOVE /MOVE THE HND RES TABLE 0001 /TO FIELD 1 DHRES 7600+DHRES -17 JMS I (MOVE /ZERO THE USER NAME TABLE 0001 /AND FIX THE DCB UDNAME 7600+UDNAME -17 2 JMP SYSR5 /CONTINUE NEXT PAGE PAGE /NOW FOR THE HANDLERS SYSR5, TAD SLASHH /HANDLER CHANGE??? SNA CLA /SKIP IF REQUESTED JMP SYSR6 /NOPE: GO CHECK REST TAD IPARAM /START OF PARAMETER TAD (10 /TO START OF HANDLERS DCA SYSR7 CIF 0 JMS I INHAND 2000 /10(8) BLOCKS 0 SYSR7, 11 HLT /HUH TAD OPARAM /CALC START ON OUTDEV TAD (10 DCA SYSR8 CIF 0 JMS I OUHAND 6000 0 SYSR8, 11 HLT /HUH!!! SYSR6, TAD SLASHS SNA CLA /SKIP IF NEED TO DO REST JMP SYSSWP TAD IPARAM /CALC START OF ENTER OVERLAY TAD (20 DCA SYSR9 /SAVE START TAD OPARAM TAD (20 DCA SYSR10 /WHERE TO PUT IT TAD IDECODE /START OF CD DCA SYSR9B TAD ODECODE DCA SYSR9C TAD INSIZE TAD (-35 /LAST COPY CLL RTR;RTR;RTR /BLOCKS LAST READ DCA SYSR11 TAD SYSR11 TAD (4000-600+1 /LESS 3 FOR LAST WRITE DCA SYSR14 TAD SYSR9B /GET READ TAD (13 /BLOCK # FIRST RES FOR EXPANSION DCA SYSR11+2 TAD SYSR9C TAD (13 /BLOCK # FIRST RES FOR EXPANSION DCA SYSR12 TAD SYSR12 /NOW TO POSSIBLE TD8E-RES TAD (2 /TWO DOWN DCA SYSR13 TAD SYSR13 /AND ONE MORE FOR LAST WRITE IAC DCA SYSR14+2 /SET UP COMPLETE CIF 0 JMS I INHAND /READ ENTER PROCESSOR 0200 0 SYSR9, 21 HLT /HUH! CIF 0 JMS I INHAND 2601 /CD AND JUNK 400 SYSR9B, 22 HLT /HUH CIF 0 JMS I OUHAND /AND WRITE IT 4200 0 SYSR10, 21 HLT /HUH CIF 0 JMS I OUHAND 6601 0400 SYSR9C, 22 HLT /HUH CIF 0 JMS I INHAND /AND RESERVED FOR EXP, ETC. SYSR11, 0;0;35 HLT /HUH CIF 0 JMS I OUHAND /WRITE FIRST 2 4400 /RESERVED FOR EXPANSION 0 SYSR12, 35 HLT /HUH! TAD SLASHB /NOW IF NO BOOTSTRAP SNA CLA /REQUEST LEAVE TD8E NON-ROM JMP .+7 /RESIDENT ALONE CIF 0 /IF REQUESTED THEN CHANGE IT JMS I OUHAND /TO NEW BLOCK 4201 /ONE BLOCK 1000 /3RD BLOCK SYSR13, 37 HLT /HUH!!! CIF 0 JMS I OUHAND /AND FINAL WRITE SYSR14, 4201 1400 40 HLT /WHAT JMP SYSSWP PAGE /NOW CHECK FOR VALIDITY OF INDEV STUFF INVALI, 0 CDF 0 /LOOK AT INPUT STUFF IN BOOTSTRAP TAD I (200 /SHOULD BE 7600 OF MONITOR TAD (-4207 /JMS SYSHND SZA CLA JMP NOSYS /NO SYSTEM TAD I (205 /DOUBLE CHECK TAD (-6213 /BEFORE MONITOR SAVE SZA CLA JMP NOSYS /NO SYSTEM TAD I (3400+SDNAME TAD (-4631 /"SYS" COMES FIRST SZA CLA /SKIP IF O.K. JMP NOSYS TAD I (3400+SDVHND SZA CLA /SYS IS CORE RESIDENT JMP NOSYS CDF 10 /BACK TO THIS FIELD JMP I INVALID /ALL O.K. /THIS ROUTINE CHECKS AND UPDATES THE PARAMETER BLOCK PARAM, 0 DCA WRPARAM /CLEAR WRITE FLAG CDF 0 /FIRST CHECK IF INPUT HAS PARAM TAD (400 /WHERE IT STARTS JMS CHKPAR /CHECK FOR PRESENCE OF BLOCK JMP I PARAM /NO PARAMETER BLOCK=CAN'T UPDATE TAD SLASHS /IF NOT CHANGING SYSTEM THEN SNA CLA /NO CHANGES: JMP I PARAM /SYSTEM NOT BEING CHANGED TAD I (OBOOT /CHECK IF INTO A FILE SNA CLA /OBOOT=0 IF YES JMP PARAM1 /IS INTO A SYSTEM AREA PARAM2, STA /IS INTO A FILE SO DCA WRPARAM /JUST COPY INPUT PARAMETER BLOCK JMP I PARAM /AND RETURN PARAM1, TAD (600 /IS INTO SYSTEM AREA JMS CHKPAR /SO CHECK FOR PARAMETER PRESENCE JMP I PARAM /NO: FORGET IT JMS I (MOVE /MOVE NEW SYSTEM INFO IT 01 /FROM FIELD 0 505 /SYSTEM ID ETC 705 /CORRESPONDING FIELD 1 -5 STA DCA I (607 /SET SYSTEM PRESENCE FLAG JMS I (MOVE /THEN COPY WHOLE BLOCK DOWN 10 600 400 -400 JMP PARAM2 /AND INDICATE WRITE WRPARA, 0 /-1 IF PARAMETER BLOCK TO BE WRITTEN /SUBROUTINE TO CHECK PARAMETER BLOCK /ENTER WITH FIELD SET AND AC=STARTING ADDRESS OF BLOCK CHKPAR, 0 DCA CHKTMP /STORE POINTER TAD I CHKTMP /GET FIRST WORD TAD (-"D 100-"W+300 SZA CLA JMP CHKEXT /NO PARAMETER BLOCK ISZ CHKTMP /WORD 2 TAD I CHKTMP TAD (-"J 100-"C+300 SZA CLA /SKIP IF CANDIDATE JMP CHKEXT /NO PARAMETER BLOCK ISZ CHKTMP TAD I CHKTMP /LAST SHOULD BE 7777 IAC SNA CLA ISZ CHKPAR CHKEXT, CDF 10 JMP I CHKPAR CHKTMP, 0 PAGE /CHECK FOR /P OPTION AND SETUP INPUT INFO /IF SO. SLSHP, 0 TAD I (MPARAM+1 /GET CD PARAMETER WORD AND (400 /MASK P BIT OUT SNA CLA /SKIP IF /P SPECIFIED JMP I SLSHP /NOPE: JUST RETURN TAD I (7617 /NOW CHECK SIZE FOR 62(8)=50(10) AND (7760 /MASK -LENGTH TAD (70-6 20 SZA CLA /SKIP IF SIZE O.K. JMP I SLSHP /IS NOT A /P FILE TAD I (IBOOT /IS PROBABLY A /P FILE DCA I (IPARAM /SINCE NO PARAMETER BLOCK PRESENT TAD I (IBOOT /GET AGAIN TAD (22+22-1 /CALC START OF CD DCA I (IDECODE /START OF CD BLOCKS TAD (70-22-5 /THIS WOULD BE SIZE IF NOT FROM PIP JMP I (CDL2 /AND RETURN /THIS ROUTINE CHECKS FOR A SPECIFIC PATHOLOGICAL CASE. /NAMELY THE CASE WHERE A HANDLER IS RESIDENT WITH THE /SYSTEM HANDLER BUT NOT DSK. THE CASES WHERE THIS IS /TRUE IS FOR DTA0,LTA0, AND RKA0 WHEN THE SYSTEM DEVICE /CORRESPONDS, AND FOR DTA1, RKA1, AND PERHAPS OTHERS /IN THE CASE OF ROM'S OR FANCY NEW HANDLERS. /SINCE THERE IS NO WAY TO CORRECT FOR THE LATTER CASE-THIS /ROUTINE MAKES THE PAIR /H/B OCCURR TOGETHER FOR SUCH CASES. CHKRES, 0 TAD SLASHB /WISH TO DO XOR BETWEEN /B AND /H SZA CLA /SET ALL BITS IF /B ON STA //B ON DCA SLASHB /SAVE TAD SLASHH /NOW MAKE A 1 IF /H ON SZA CLA IAC /SO WE CAN DO XOR TAD SLASHB /AC=0 IF /B=/H SNA CLA /SKIP IF /B XOR /H = TRUE JMP I CHKRES TAD (-16 /WE HAVE TO CHECK FOR ANYONE ELSE RES DCA CKRESC /CHECK 15 HANDLERS TAD (DHRES+1 /PAST DSK DCA CKRESP /SAVE POINTER CDF 0 /TO FIELD OF TABLE CKRES1, ISZ CKRESC /DONE SKP /NOT YET JMP CKRES2 /YEP ISZ CKRESP /POINT TO NEXT TAD I CKRESP /GET RESIDENCY WORD SNA /SKIP IF RESIDENT JMP CKRES1 /LOOP TAD (-7607 /THESE NON-FATAL SZA CLA /SKIP IF NON-FATAL JMS CKRESF /CAN'T ALLOW THESE DCA I CKRESP /MAKE IT NON-RESIDENT /NOTE THAT THE OTHER TABLES ARE /SET UP JUST LIKE IT IS NON-RES. /SO THIS WILL FIX FOR MOST CASES. JMP CKRES1 /LOOP /NOW IT IS TIME TO SEE IF WE HAVE A /DTA0,LTA0,OR RKA0 CKRES2, TAD (3400+SDNAME+1 DCA CKRESP /POINT TO PERM NAMES TAD (-16 /CHK 15 NAMES DCA CKRESC DCA CKREST /CLEAR COUNTER CKRES3, ISZ CKRESC /SKIP WHEN DONE SKP JMP CKRESE /EVERYTHING O.K. ISZ CKRESP /POINT TO NEXT ISZ CKREST /COUNT DEVICES TAD I CKRESP /PICK UP NAME XXX="D+"A 100+"T+"0-500&3777+4000 TAD (-XXX /CHK AGAINST DTA0 SNA /SKIP IF NOT DTA0 JMP CKRES4 /IS DTA0 YYY="L+"A 100+"T+"0-500&3777+4000 TAD (-YYY+XXX /CHECK FOR LTA0 SNA /SKIP IF NOT LTA0 JMP CKRES4 /IS LTA0 XXX="R+"A 100+"K+"0-500&3777+4000 TAD (-XXX+YYY /CHK FOR RKA0 SZA CLA /SKIP IF RKA0 JMP CKRES3 /LOOP ON DEVICES CKRES4, TAD CKREST /IS DEVICE#-1 TAD (TDCB+1 /INDEX INTO DCB TABLE DCA CKRESX /STASH POINTER TAD I CKRESX /GET DCB WORD CIA /NEGATE FOR CHECK AGAINST TAD I (TDCB /SYS. SZA CLA /SKIP IF A MATCH JMP CKRES3 /NO: LEAVE NON-RESIDENT TAD CKREST /GET INDEX AGAIN TAD (DHRES+1 /POINT TO RESIDENCY TABLE DCA CKRESX /FOR INDIRECT TAD (7607 /DEVICE=SYS HANDLER DCA I CKRESX JMP CKRES3 /AND CONTINUE CHECKING CKRESE, CDF 10 /BACK TO THIS FIELD JMP I CHKRES /BEFORE RETURNING /COME HERE WHEN RESIDENT NON-SYSTEM DEVICE FOUND. /IS PROBABLY TD8E ROM DTA1 - BUT MIGHT BE DEC NON-STANDARD. CKRESF, 0 CDF 10 /BACK TO THIS FIELD TAD I (MPARAM+1 /CHECK FOR /O OPTION AND (1000 /MASK IT SNA CLA /SKIP IF /O SET JMP .+3 /GIVE HIM THE MESSAGE CDF 0 /OVERRIDE ABORT JMP I CKRESF /RETURN JMS I (PRMSG /TELL HIM ABOUT IT MRES1 /A CORE-RESIDENT HANDLER EXISTS WITH JMS I (PRMSG MRES2 JMS I (PRMSG MRES3 JMS I (PRMSG MRES4 JMS I (PRMSG MRES5 JMP I (STOVER CKRESP, 0 CKRESC, 0 CKREST, 0 CKRESX, 0 PAGE /ERROR ROUTINES NOFILE, JMS I (PRMSG MNOFILE JMP STOVER NOROOM, JMS I (PRMSG MNOROOM JMP STOVER BADFIL, JMS I (PRMSG MBADFIL JMP STOVER BADSIZ, JMS I (PRMSG MBADSIZ JMP STOVER NOSYS, JMS I (PRMSG MNOSYS JMP STOVER BADCD, JMS I (PRMSG MBADCD JMS I (PRMSG MBADCE JMP STOVER NOOPT, JMS I (PRMSG MNOOPT JMS I (PRMSG MOPTB JMS I (PRMSG MOPTH JMS I (PRMSG MOPTS JMS I (PRMSG MOPTY JMS I (PRMSG MOPTC STOVER, JMS I (CRLF JMP I (SYSSWP PAGE /ERROR MESSAGES MNOROO, TEXT NO ROOM FOR OUTPUT FILE MBADFI, TEXT DEVICE NOT FILE STRUCTURED MNOSYS, TEXT INPUT DOES NOT HAVE A SYSTEM MBADSI, TEXT OUTPUT SIZE TOO SMALL MNOFIL, TEXT OUTPUT FILE MUST EXIST IF NOT /Y MBADCD, TEXT BAD CD LINE - MISSING SPECIFICATIONS MBADCE, TEXT BOTH INPUT AND OUTPUTS MUST BE SPCIFIED MNOOPT, TEXT NO OPTION SPECIFIED. OPTIONS ARE: MOPTB, TEXT /B CHANGE SYSTEM HANDLER MOPTH, TEXT /H CHANGE HANDLERS MOPTS, TEXT /S CHANGE SYSTEM MOPTY, TEXT /Y = (BHS) MOPTC, TEXT ANY COMBINATION OF ABOVE IS LEGAL MRES1, TEXT A CORE-RESIDENT HANDLER EXISTS WITH ENTRY MRES2, TEXT OTHER THAN 7607. PROBABLY DTA1 FOR TD8E ROM MRES3, TEXT SYSTEM. FOR THIS CASE /H AND /B MUST ACCOMPANY MRES4, TEXT EACH OTHER (OR /O WILL OVERRIDE, MAKING DEVICE MRES5, TEXT NON-RESIDENT). OPERATION ABORTED THIS TIME. $$$$$$$