/ BSAVE EXTENDED COMMAND FOR P?S/8 / LAST EDIT: 05-JAN-1986 10:00:00 CJL / MUST BE ASSEMBLED WITH '/J' SWITCH SET. / THIS PROGRAM IMPLEMENTS THE ABILITY TO SAVE CORE IMAGE ELEMENTS FROM / THE P?S/8 CORE IMAGE AREA (AND ANY RELATED EXTENDED MEMORY AREAS) AS / P?S/8 BINARY FILES. / TYPICAL USAGE: / A) .BSAVE BNFILE<0-1777 / B) .BSAVE 0-1777>BNFILE / RESTRICTIONS: / IF USING FORM A), ALL SWITCH OPTIONS (/A) MUST BE PASSED BEFORE THE "<". / IF USING FORM B), ALL SWITCH OPTIONS MUST BE PASSED TO THE RIGHT OF THE ">". / SINCE BSAVE REQUIRES THE LACK OF INPUT FILES, THE MONITOR COULD PASS A / COMMAND LINE UNSUITABLE FOR USE WITH BSAVE. IN FACT, SINCE THE DEFAULT MODE / OF MONITOR SCANNING IS TO LOOK FOR INPUT FILES (UNTIL A FILE SEPARATOR / CHANGES THE RULES), IT IS EVEN POSSIBLE FOR THE MONITOR TO ISSUE AN ERROR / MESSAGE FOR AN INPUT FILE "NOT FOUND." THIS SITUATION WILL THEREFORE EITHER / BE REJECTED BY THE MONITOR IF THE FILE DID NOT EXIST, OR BY BSAVE ITSELF / MERELY BECAUSE THE COMMAND LINE LACKS OUTPUT FILES. // P?S MONITOR DEFINITIONS. BINADR= 0020 /CORE IMAGE STARTS HERE CTCPZAP=2363 /<^C> PRINTING ZAP ADDRESS CTCZAP= 2365 /<^C> ZAP ADDRESS DOLBLK= 0040 /"$" FILE BLOCK FILBEG= 3000 /FILE CORE ADDRESS GETHAF= 0104 /GET HALF-WORD GETNDX= 0026 /GET HALF-WORD INDEX INPBUF= 2477 /INPUT BUFFER IS HERE INCON= 0031 /EQUATED FROM CONSOLE! L7= 0177 /CONSTANT 0007 L7600= 0113 /CONSTANT 7600 L7757= 0034 /CONSTANT 7757 L7770= 0040 /CONSTANT 7770 L7772= 0013 /CONSTANT 7772 OUTCON= 0033 /EQUATED FROM CONSOLE! PBEGIN= 0071 /POINTER TO MONITOR RESTART PBUTIO= 0161 /BOOTSTRAP UNIT-ORIENTED I/O ROUTINES PR6BIT= 0047 /PRINT SIX-BIT ROUTINE PSBTFUN=0167 /POINTER TO SBTFUN PSCRSIZ=0170 /POINTER TO SOFTWARE CORE SIZE WORD SBLOCK= 7635 /SYSTEM LOADER BLOCK ARGUMENT SBOOT= 7600 /BOOTSTRAP TO HERE SBTFUN= 7602 /BOOTSTRAP UNIT FUNCTION WORD SCORE= 7633 /SYSTEM LOADER CORE ARGUMENT SCRIBE= 0171 /POINTER TO SCRIBE ROUTINE SCRSIZE=7611 /SOFTWARE CORE SIZE WORD SFILES= 7757 /PASSED FILES HERE SFUN= 7634 /SYSTEM LOADER FUNCTION WORD SLOAD= 7632 /SYSTEM LOADER SOUTFLS=7607 /NUMBER OF OUTPUT FILES SWAL= 7604 /A-/L SWITCHES SYSIO= 7640 /SYSTEM I/O ENTRY SYSTART=7637 /SYSTEM LOADER STARTUP ADDRESS TTY= 0003 /CONSOLE DEVICE CODE WRITE= 4000 /SYSIO WRITE BIT // ADDITIONAL DEFINITIONS. JMSC= JMS . /CURRENT PAGE JMS INSTRUCTION JMSSYSI=SYSIO&177+JMSC /CALL TO SYSIO ON ITS PAGE KCCIOT= TTY^10+IOF /CLEAR KEYBOARD FLAG KRSIOT= TTY^10+GTF /READ KEYBOARD BUFFER KSFIOT= TTY^10+ION /SKIP ON KEYBOARD FLAG NL0002= CLA CLL CML RTL /LOAD AC WITH 0002 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 NL7777= CLA CMA /LOAD AC WITH 7777 NUBUFFE=7000 /BUFFER FOR COMMAND SRINST= JMP I PBEGIN/[BEGIN] /INSTRUCTION CONSTANT TLRCORE=7200 /TRAILER BLOCK BUFFER TLSIOT= TTY+1^10+SGT /OUTPUT TO TELEPRINTER TSFIOT= TTY+1^10+ION /SKIP ON TELEPRINTER FLAG PAGE 14 /INITIALLY OVER FILE AREA IFNZRO .&177 BSAVE= . /BSAVE SYSTEM STARTS HERE BSAVE, NOP /HERE IN CASE WE'RE CHAINED TO BSAVTMP,TAD I (CTCZAP) /GET POSSIBLY ZAPPED INSTRUCTION TAD (-SRINST) /COMPARE TO POSSIBLE VALUE SZA CLA /SKIP IF IT MATCHES JMP BSAVOK /JUMP IF NOT TAD (JMP I L7600/[SBOOT]) /GET REPLACEMENT VALUE DCA I (CTCZAP) /ZAP IT IN NL0002 /SETUP "C" BIT MASK AND I PSCRSIZE/[SCRSIZE] /GET THE BIT SZA CLA /SKIP IF OFF DCA I (CTCPZAP) /ELSE PREVENT EXTRA <^C> BSAVOK, JMS I GETHAF/[XGETHAF] /GET DELIMITER SZA /SKIP IF TAD (-">!200) /COMPARE TO OTHER POSSIBLE DELIMITER SNA CLA /SKIP IF NEITHER JMP I (NOSPECS) /ELSE COMPLAIN TAD I (SOUTFLS) /GET OUTPUT FILE COUNT SNA /SKIP IF SOME JMP I (NOFILES) /ELSE COMPLAIN TAD L7757/[7757] /UPDATE FILE POINTER DCA BSAVTMP /SAVE POINTER TO FIRST INPUT FILE DCA I BSAVTMP /DESTROY INPUT FILES BDFLCHK,TAD I BFLPTR /GET A FILE ARGUMENT SNA /END OF LIST? JMP NONEBAD /YES, WE'RE DONE CIA /NO, INVERT FOR TESTING TAD I PSBTFUN/[SBTFUN] /COMPARE TO BOOTSTRAP UNIT AND L7/[7] /JUST UNIT BITS SZA CLA /SKIP IF IT MATCHES JMP FILGOOD /JUMP IF NOT TAD I BFLPTR /GET THE FILE ARGUMENT AGAIN AND L7770/[7770] /JUST BLOCK BITS TAD (-BINADR) /COMPARE TO % FILE SNA /SKIP IF OTHER JMP I (BADPERCENT) /JUMP IF IT MATCHES TAD (-DOLBLK+BINADR) /COMPARE TO $ FILE SNA CLA /SKIP IF OTHER JMP I (BADOLR) /JUMP IF IT MATCHES FILGOOD,ISZ BFLPTR /BUMP TO NEXT FILE JMP BDFLCHK /GO CHECK NEXT ONE NONEBAD,JMS I PBUTIO/[BUTIO] /CALL I/O ROUTINES TLRCORE-400 /TO READ IN TAIL END OF SAVED FIELD ZERO 3^100 /WANT 7200-7577 AND IMAGE OF 7600-7777 BINADR+35 /BLOCK NUMBER TAD I (SWAL) /GET SWITCHES /A-/L SPA CLA /SKIP IF /A NOT SET JMP MOVBSAVE /JUMP IF /A SET TAD I PSBTFUN/[SBTFUN]/GET BOOTSTRAP UNIT WORD AND L7/[7] /JUST UNIT BITS TAD I (SFUN+SCOFF) /ADD ON WRITE FUNCTION DCA I (SFUN+SCOFF) /STORE BACK TESTCI, TAD I (SLOAD+SCOFF) /GET EXPECTED WORD CIA /INVERT FOR TESTING TAD I DATAPTR /GET ACTUAL VALUE SZA CLA /SKIP IF IT MATCHES JMP I (BADCORE) /JUMP IF NOT ISZ (SLOAD+SCOFF) /BUMP TO NEXT EXPECTED WORD ISZ DATAPTR /BUMP TO NEXT ACTUAL WORD ISZ L7772/[-6] /DONE ALL YET? JMP TESTCI /NO, KEEP GOING MOVBSAV,JMS I (BSMOVE) /CALL MOVE ROUTINE TLRCORE-400 /MOVE IMAGE OF 7200-7577 TLRCORE /TO 7200-7577 -400 /MOVE LENGTH TAD GETNDX /GET CURRENT SCAN INDEX DCA I (BGETNDX+LW) /STORE IN MAIN BSAVE CODE JMS I (BSMOVE) /CALL MOVE ROUTINE LW /MOVE BSAVE CODE FROM HERE 0000 /TO WHERE IT BELONGS -4^200 /MOVE LENGTH JMS I (BSMOVE) /CALL MOVE ROUTINE INPBUF /MOVE ENTIRE COMMAND BUFFER NUBUFFER /TO SAVE BUFFER AFTER FILE IMAGE -INPBUF&7600+INPBUF /MOVE LENGTH TAD I (SFUN+SCOFF) /GET BOOTSTRAP UNIT WITH WRITE BIT SET TAD BSFUN /ADD ON FUNCTION WITH WRITE BIT SET WHICH CANCELS DCA BSFUN /STORE BACK READ FUNCTION WITH BOOTSTRAP UNIT BITS SET TAD I L7600/[SBOOT] /GET BOOTSTRAP INSTRUCTION TAD (-JMSSYSIO) /COMPARE TO POSSIBLE VALUE SNA CLA /SKIP IF DIFFERENT JMP I (CHKCOVERLAY) /JUMP IF IT MATCHES ISZ CHKKRS /TURN "KRSIOT" ISZ CHKKRS /INTO "KRBIOT" DCA CHKKCC /DESTROY "KCCIOT" JMP I (CHKCOVERLAY) /CONTINUE THERE BFLPTR, SFILES /FILE POINTER DATAPTR,SLOAD&177+TLRCORE /WHERE TEST VALUES ARE PAGE / EXPECTED IMAGE OF SYSTEM LOADER IN SAVED CORE IMAGE FILE. SCODE, RELOC SLOAD /WHERE THIS APPEARS TO BE SCOFF= SCODE-SLOAD /RELOCATION DEFINITION SLOAD, JMS SYSIO /\ SCORE, 0 / \SAVE ALL SFUN, WRITE+.-. / /OF CORE SBLOCK, BINADR // JMP I SYSTART /THEN SYSTART,SBOOT /BOOTSTRAP RELOC /BACK TO WHERE WE WERE CHKCOVR,NL0002 /SETUP "C" BIT MASK AND I PSCRSIZ/[SCRSIZ]/GET THE "C" BIT SNA CLA /SKIP IF CONSOLE OVERLAY PRESENT JMP I (BSAVESTART) /GO START IT UP NOW IF NOT TAD I PSCRSIZ/[SCRSIZ]/GET THE CORE SIZE WORD RTR;RAR /MOVE OVER AND AND (70) /ISOLATE MCS BITS TAD (CIF 10) /TURN INTO CIF MCS+10 DCA P7TSF /STORE OVER "TSFIOT" TAD P7JMP /GET "JMP P7AGN" DCA P7TLS /STORE OVER "TLSIOT" TAD (JMS OUTCON) /GET OUTPUT CALL INSTRUCTION DCA P7JMP /STORE OVER "JMP P7AGN" TAD P7TSF /GET "CIF MCS+10" AGAIN DCA CHKKSF /STORE OVER "KSFIOT" TAD CHKJMP /GET "JMP I CTLCTST" DCA CHKKRS /STORE OVER "KRSIOT" (OR "KRBIOT") TAD (JMS INCON) /GET INPUT CALL INSTRUCTION DCA CHKJMP /STORE OVER "JMP I CTLCTST" DCA CHKKCC /DESTROY "KCCIOT" JMP I (BSAVESTART) /GO START IT UP / COMES HERE IF CORE IMAGE VALIDATES INCORRECTLY. BADCORE,JMS I PR6BIT/[XPR6BIT]/DO A , JMS I SCRIBE/[XSCRIBE]/TELL THEM BDCRMSG /THEY SHOULD USE /A JMP I L7600/[SBOOT] /GOODBYE / COMES HERE IF $:[BOOTSTRAP UNIT] WAS PASSED AS A FILE. BADOLR, JMS I PR6BIT/[XPR6BIT]/DO A , JMS I SCRIBE/[XSCRIBE]/TELL THEM BDLRMSG /YOU CAN'T DO THAT! JMP I L7600/[SBOOT] /GOODBYE / COMES HERE IF %:[BOOTSTRAP UNIT] WAS PASSED AS A FILE. BADPERC,JMS I PR6BIT/[XPR6BIT]/DO A , JMS I SCRIBE/[XSCRIBE]/TELL THEM BDPRMSG /YOU CAN'T DO THAT EITHER! JMP I L7600/[SBOOT] /GOODBYE NOFILES,JMS I PR6BIT/[XPR6BIT]/DO A , JMS I SCRIBE/[XSCRIBE]/TELL THEM NFLSMSG /WE NEED FILES TOO! JMP I L7600/[SBOOT] /GOODBYE NOSPECS,JMS I PR6BIT/[XPR6BIT]/DO A , JMS I SCRIBE/[XSCRIBE]/TELL THEM NSPCMSG /THEY FORGOT JMP I L7600/[SBOOT] /GOODBYE! BSMOVE, .-. /MOVE ROUTINE TAD I BSMOVE /GET "FROM" ARGUMENT DCA BSMTM1 /SAVE IT ISZ BSMOVE /BUMP TO NEXT TAD I BSMOVE /GET "TO" ARGUMENT DCA BSMTM2 /SAVE IT ISZ BSMOVE /BUMP TO NEXT BSMVLP, TAD I BSMTM1 /GET A WORD DCA I BSMTM2 /PUT A WORD ISZ BSMTM1 /BUMP ISZ BSMTM2 /POINTERS ISZ I BSMOVE /DONE YET? JMP BSMVLP /NO, GO BACK JMP I BSMOVE /RETURN / ERROR MESSAGES. BDCRMSG,TEXT "INVALID MEMORY IMAGE!" BDLRMSG,TEXT "$ ILLEGAL AS OUTPUT FILE!" BDPRMSG,TEXT "% ILLEGAL AS OUTPUT FILE!" NFLSMSG,TEXT "NO OUTPUT FILES" NSPCMSG,TEXT "NO SPECIFICATIONS GIVEN" BSMTM1, .-. /TEMPORARY BSMTM2, .-. /TEMPORARY PAGE LW, RELOC 0 /WHERE THIS WILL BE MOVED TO *0 /START AT THE BEGINNING ADDRESS,.-. /WORD ADDRESS CURFLD, CDF 00 /CURRENT FIELD EOFBIT, .-. / OR FIELD BIT INCHAR, .-. /INPUT BUFFER OLDBLK, .-. /PREVIOUS VIRTUAL BLOCK P7TEMP, .-. /PRINTING TEMPORARY TEMP, .-. /TEMPORARY TOTAL, .-. /DIGIT COUNTER *10 /GET TO AUTO-INDEX AREA XR1, .-. /AUTO-INDEX NUMBER 1 *20 /GET PAST AUTO-INDEX AREA VLOAD, .-. /VIRTUAL LOAD ROUTINE TAD ADDRESS /GET ADDRESS CLL /CLEAR LINK FOR TEST TAD [-TLRCORE] /ADD ON VIRTUAL LIMIT SZL CLA /SKIP IF VIRTUAL NEEDED JMP I VLOAD /RETURN IF REALLY THERE TAD ADDRESS /\ CLL RTL / \ RTL / \TRANSLATE PAGE AND [6] / /TO BLOCK OFFSET CLL RTL / / TAD [BINADR] // DCA CURBLK /SAVE AS CURRENT TAD CURBLK /\ TAD OLDBLK / \CHECK IF SAME AS PREVIOUS SNA CLA / /SET OF BLOCKS NOW IN CORE JMP FINADR // JMS I [SYSIO] /READ IN NEW BLOCKS CORBUFF,1000 /FROM THIS ADDRESS BSFUN, 10^100+.-.+WRITE /READ QUARTER OF MEMORY; UNIT BITS WILL BE FILLED IN CURBLK, .-. /THIS BLOCK TAD CURBLK /\ CIA / >SETUP CURRENT FOR COMPARISONS TO OTHERS DCA OLDBLK // FINADR, TAD ADDRESS /\ AND [1777] / \SETUP THE ACTUAL TAD CORBUFFER / /LOADED ADDRESS DCA ADDRESS // JMP I VLOAD /RETURN P7CH, .-. /SEVEN-BIT PRINT ROUTINE DCA P7TEMP /STASH PASSED VALUE P7AGN, JMS I [CHKUP] /CHECK FOR <^C>, ETC. TAD P7TEMP /GET THE VALUE P7TSF, TSFIOT /**** CONSOLE **** CIF MCS+10 P7JMP, JMP P7AGN /**** CONSOLE **** JMS OUTCON P7TLS, TLSIOT /**** CONSOLE **** JMP P7AGN JMS I [CHKUP] /CHECK FOR <^C>, ETC. JMP I P7CH /RETURN CTLCTST,.-. /CHECK FOR <^C> ROUTINE CLA /CLEAN UP CHKKSF, KSFIOT /**** CONSOLE **** CIF MCS+10 CHKJMP, JMP I CTLCTST /**** CONSOLE **** JMS INCON CHKKRS, KRSIOT/OR KRBIOT /**** CONSOLE **** JMP I CTLCTST AND [177] /JUST SEVEN BITS DCA INCHAR /STASH THE CHARACTER NL7775 /-3 TAD INCHAR /COMPARE INPUT TO <^C> SNA /SKIP IF OTHER ISZ I [SCRSIZE] /ELSE SET SOFT INDICATOR SPA SNA CLA /SKIP IF <^D> OR GREATER JMP I [SBOOT] /ELSE GOODBYE CHKKCC, KCCIOT/OR 0000 /**** CONSOLE **** 0000 TAD INCHAR /GET THE CHARACTER JMP I CTLCTST /RETURN PAGE MUCHO, TAD OLDHIGH /\ CIA / >COMPARE FIELDS TAD HIGH // SZA CLA /SKIP IF SAME FIELD JMP I (SYNERR) /JUMP IF DIFFERENT TAD LOW /\ CMA / >SETUP WORD COUNT TAD OLDLOW // JMP MUCHIN /FINISH UP THERE DBLSPEC,TAD PAIRSW /MULTIPLE SPECIFICATION? SNA CLA /SKIP IF YES JMS I [CHKDIGITS] /NO, CHECK IF ANY DIGITS JMP I (SYNERR) /BARF TAD LOW /\ DCA OLDLOW / \SAVE THE TAD HIGH / /PREVIOUS DCA OLDHIGH // ISZ PAIRSW /INDICATE DUAL LIMITS JMP SPECIN /GET SECOND VALUES SCLOSE, ISZ CLOSEW /DONE YET? JMP I [BCLOSE] /YES, CLOSE FILE EOSPEC, JMS I [CHKDIGITS] /ANY DIGITS? JMP GETSPEC /NO, IGNORE COMMAS AND SPACES TAD PAIRSW /DUAL SPECIFICATION? SZA CLA /SKIP IF NOT JMP MUCHO /JUMP IF SO TAD LOW /USE CURRENT DCA OLDLOW /AS ONLY SPECIFICATION NL7777 /USE 1 WORD MUCHIN, DCA WCOUNT /AS COUNT TAD HIGH /GET FIELD DCA OLDHIGH /SAVE FOR ADDRESS CHECK TAD OLDHIGH /GET AGAIN TAD [CDF] /MAKE INTO CDF INSTRUCTION DCA CURFLD /USE AS CURRENT FIELD JMS I [DANGIT] /CHECK IF FULL CLA STL IAC /SETUP FOR DCA EOFBIT /FIELD SETTING TAD CURFLD /GET CURRENT FIELD JMS I [BINOUT] /PUNCH IT OUT DCA EOFBIT /CLEAR IT JMS I [DANGIT] /FULL? STL /INDICATE ORIGIN TAD OLDLOW /GET LOWER LIMIT JMS I [BINOUT] /PUNCH IT PUNLUP, JMS I [DANGIT] /CHECK IF FULL TAD OLDLOW /SETUP DCA ADDRESS /ADDRESS WORD TAD OLDHIGH /EXTENDED MEMORY? SNA /SKIP IF SO JMS VLOAD /NO, DO A VIRTUAL LOAD TAD [CDF] /ADD ON CDF INSTRUCTION DCA FLDCHNG /PUT IN-LINE FLDCHNG,.-. /EXECUTE CDF INSTRUCTION TAD I ADDRESS /GET LOW WORD CLL /INDICATE DATA JMS I [BINOUT] /PUNCH IT ISZ OLDLOW /BUMP ADDRESS JMS I [CHKUP] /CHECK FOR <^C>, ETC. ISZ WCOUNT /DONE YET? JMP PUNLUP /NO, GO BACK / STARTS UP HERE AFTER CLEARING THE BUFFER. GETSPEC,DCA OLDLOW /CLEAR LOWER DCA OLDHIGH /CLEAR FIELD DCA PAIRSW /CLEAR DUAL SWITCH SPECIN, DCA LOW /CLEAR VALUE DCA HIGH /TEMPORARIES TAD [-6] /RESET DCA TOTAL /DIGIT COUNT NXTCHAR,TAD BGETNDX /GET INDEX CLL RAR /SHIFT OVER TAD [NUBUFFER] /ADD ON BASE DCA TEMP /SAVE IT TAD I TEMP /GET PAIR SZL /RIGHT HALF? JMP .+4 /YES RTR;RTR;RTR /MOVE OVER AND [77] /JUST SIX-BIT SZA /SKIP IF TAD [-">!200] /ELSE COMPARE TO ">" SNA /SKIP IF NEITHER JMP SCLOSE /JUMP IF IT MATCHES ONE OF THE TWO CASES ISZ BGETNDX /BUMP TO NEXT TAD [-",+">] /COMPARE TO "," SZA /SKIP IF IT MATCHES TAD [-" +",] /ELSE COMPARE TO SZA /SKIP IF IT MATCHES IAC /TAD (-37+" -200) /ELSE COMPARE TO SNA /SKIP IF OTHERWISE JMP EOSPEC /JUMP IF SPACING CHARACTER TAD [-"-+237] /COMPARE TO "-" SNA /SKIP IF OTHER JMP DBLSPEC /JUMP IF IT MATCHES TAD [-"8+"-] /ADD ON DIGIT LIMIT CLL /CLEAR LINK FOR TEST TAD ["8-"0] /ADD DIGIT RANGE SNL /SKIP IF DIGIT JMP I (SYNERR) /BARF DCA TEMP /SAVE STRIPPED DIGIT NL7775 /-3 DCA NUMTEMP /TO SHIFT COUNT DBLROT, TAD LOW /GET LOW ORDER CLL RAL /SHIFT ONE BIT OVER DCA LOW /SAVE IT BACK RTL;RAL /ROTATE OVERFLOW BIT TO AC[9] TAD HIGH /GET HIGH ORDER RAL /ROTATE TOGETHER DCA HIGH /SAVE IT BACK ISZ NUMTEMP /DONE THREE YET? JMP DBLROT /NO, GO BACK TAD LOW /GET LOW ORDER TAD TEMP /SHOVE LATEST DIGIT IN DCA LOW /SAVE IT BACK ISZ TOTAL /TOO MANY DIGITS? JMP NXTCHAR /NO, KEEP GOING JMP I (SYNERR) /YES, COMPLAIN THERE BGETNDX,.-. /GET HALF-WORD INDEX CLOSEW, -1 /CLOSE SWITCH HIGH, .-. /FIELD SPECIFICATION LOW, .-. /LOWER ADDRESS SPECIFICATION NUMTEMP,.-. /TEMPORARY OLDHIGH,.-. /PREVIOUS FIELD SPECIFICATION OLDLOW, .-. /PREVIOUS LOWER SPECIFICATION PAIRSW, .-. /DUAL SPECIFICATION SWITCH WCOUNT, .-. /WORD COUNTER PAGE BINOUT, .-. /BINARY FILE OUTPUT CDF 00 /MAKE SURE FIELD 0 DCA TEMP /SAVE IT TAD EOFBIT /GET FLAG BITS SZA CLA /SKIP IF NORMAL JMP BNCOMMON /FIELD SETTING TAD TEMP /RESTORE VALUE SZL /DATA? DCA CURORG /NO, ORIGIN SNL CLA /SKIP IF ORIGIN ISZ CURORG /BUMP TO NEXT IF DATA BCC1, TEXT "E " /HERE JUST IN CASE IT SKIPS BNCOMMO,TAD TEMP /GET BACK VALUE DCA I XR1 /PUT INTO BUFFER TAD FLAGS /\ RTL / \UPDATE FLAGS TAD EOFBIT / /ACCORDINGLY DCA FLAGS // SNL /DONE A GROUP YET? JMP I BINOUT /NO, JUST RETURN TAD XR1 /\ TAD [-6] / \ DCA TEMP / >PUT AWAY COMPLETED FLAG WORD TAD FLAGS / / DCA I TEMP // ISZ XR1 /BUMP PAST FLAG WORD FOR NEXT ISZ GRPCNT /DONE 22 GROUPS YET? JMP NEWFLAG /NO ISZ XR1 /BUMP PAST ISZ XR1 /DUMMY WORDS TAD (-22) /RESET DCA GRPCNT /GROUP COUNT ISZ BLKCNT /FILE DONE? JMP NEWFLAG /NO ISZ BSFLPTR /BUMP TO NEXT FILE TAD I BSFLPTR /GET NEXT FILE AND (7770) /JUST BLOCK BITS SNA /EOF? JMP I (TOMANY) /YES, COMPLAIN DCA BLOCK /SAVE IN-LINE TAD I BSFLPTR /GET FILE AGAIN AND (7) /JUST UNIT BITS TAD (20^100+WRITE) /ADD ON WRITE FUNCTION DCA BWFUN /SAVE IN-LINE JMS I [SYSIO] /\ FILCORE,FILBEG / \WRITE OUT BWFUN, 20^100+WRITE+.-. / /THE FILE BLOCK, -1 // ISZ BNMFLS /SKIP IF FIRST FILE TAD (-" +"S-100) /ELSE ADD ON "S" TAD BCC1/('E ) /TO BLURB DCA BFLNUM+3 /PUT IN NICE MESSAGE ISZ BFLNUM /\ TAD BFLNUM / \ AND [12] / \ TAD (-12) / \UPDATE NUMBER OF SNA CLA / /OUTPUTTED FILES TAD (6160-4072) / / TAD BFLNUM / / DCA BFLNUM // NEWFLAG,CLA CLL IAC /RESET FLAGS DCA FLAGS /TO FRESH VALUE JMP I BINOUT /RETURN BCLEAR, .-. /FILE INITIALIZE DCA EOFBIT /ZERO EOF FLAG TAD FILCORE/(FILBEG)/RESET INDEX DCA XR1 /TO BEGINNING TAD (200) /*200 DCA I XR1 /IN FIRST TAD CURFLD /GET CURRENT FIELD DCA I XR1 /PUT IT IN ALSO TAD CURORG /PUT OUT THE DCA I XR1 /CURRENT ORIGIN TAD (-20) /RESET DCA BLKCNT /BLOCK COUNT TAD (-22) /RESET DCA GRPCNT /GROUP COUNT TAD (4503) /SETUP DCA DANGER /DANGER LIMIT TAD (156) /SETUP DCA FLAGS /INITIAL FLAGS JMP I BCLEAR /RETURN DANGIT, .-. /DANGER CHECK ROUTINE ISZ DANGER /STILL ROOM? JMP I DANGIT /YES, JUST RETURN CLA CLL IAC /PREPARE DCA EOFBIT /END OF FILE JMS I [BINOUT] /THIS WILL CLOSE NOW JMS BCLEAR /OPEN NEXT FILE JMP DANGIT+1 /TRY AGAIN BCLOSE, CLA CLL IAC /CLOSE ROUTINE DCA EOFBIT /SETUP JMS I [BINOUT] /OUTPUT A WORD ISZ DANGER /FILE DONE? JMP BCLOSE /NO, FILL IT UP JMS I [BSCRIBE] /TELL THEM HOW MANY FILES WERE CREATED BFLNUM, TEXT " 0 FILES CREATED." JMP I [SBOOT] /GOODBYE! BLKCNT, .-. /BLOCK COUNT BNMFLS, -1 /FILE COUNT BSFLPTR,SFILES-1 /FILE POINTER CURORG, 0200 /CURRENT OUTPUT ORIGIN DANGER, .-. /DANGER LIMIT FLAGS, .-. /BINARY FLAGS GRPCNT, .-. /GROUP COUNT PAGE / COMES HERE TO START IT UP. BSAVEST,JMS I (BCLEAR) /INITIALIZE OUTPUT FILE JMP I (GETSPEC) /KEEP GOING THERE / COMES HERE ON ANY ARGUMENT ERRORS. SYNERR, JMS I [BSCRIBE] /COMPLAIN OF ... TEXT "BAD ARGUMENTS PASSED!" JMP I [SBOOT] /GOODBYE! / COMES HERE IF INSUFFICIENT OUTPUT FILES TOMANY, JMS I [BSCRIBE] /COMPLAIN OF ... TEXT "INSUFFICIENT OUTPUT FILES! " JMP I [SBOOT] /GOODBYE CHKUP, .-. /CHECK FOR <^C>, ETC. ROUTINE JMS CTLCTST /CHECK FOR <^C> SZA /SKIP IF NOTHING CAME IN TAD (-"Q!300) /ELSE COMPARE TO <^Q> SNA /SKIP IF NEITHER CASE JMP CHKCLR /ELSE FORGET IT TAD (-"S+"Q) /COMPARE TO <^S> SZA CLA /SKIP IF IT MATCHES JMP I CHKUP /ELSE RETURN JMS CTLCTST /GET ANOTHER CHARACTER TAD (-"Q!300) /COMPARE TO <^Q> SZA CLA /SKIP IF IT MATCHES JMP .-3 /ELSE KEEP GOING CHKCLR, DCA INCHAR /OBLITERATE <^Q>, ETC. JMP I CHKUP /RETURN CHKDIGI,.-. /CHECK FOR DIGITS ROUTINE TAD TOTAL /GET CURRENT COUNT TAD [6] /ADD LIMIT SZA CLA /SKIP IF NONE ISZ CHKDIGITS /BUMP RETURN JMP I CHKDIGITS /RETURN EITHER WAY BSCRIBE,.-. /MESSAGE PRINT ROUTINE JMS CRLF /DO A , CHRLUP, TAD I BSCRIBE /GET MESSAGE PAIR RTR;RTR;RTR /MOVE OVER LEFT HALF JMS BSCOUT /TRIM AND PRINT IT TAD I BSCRIBE /GET AGAIN JMS BSCOUT /TRIM AND PRINT RIGHT HALF ISZ BSCRIBE /BUMP TO NEXT JMP CHRLUP /GO GET ANOTHER PAIR BSCOUT, .-. /TRIM AND PRINT ROUTINE AND [77] /JUST SIX-BIT SNA /END OF TEXT? JMP BSCROUT /YES, FINISH IT THERE TAD (40) /INVERT QUADRANT BIT AND [77] /JUST SIX-BIT TAD (40) /MAKE IT SEVEN-BIT JMS P7CH /PRINT IT JMP I BSCOUT /RETURN BSCROUT,JMS CRLF /DO A , ISZ BSCRIBE /BUMP PAST ARGUMENT WORD JMP I BSCRIBE /RETURN TO HIS CALLER CRLF, .-. /, ROUTINE CLA /CLEAN UP TAD (15) /GET A JMS P7CH /PRINT IT TAD [12] /GET A JMS P7CH /PRINT IT JMP I CRLF /RETURN PAGE FIELD 0 /DUMP THE LITERALS NOW RELOC /TURN OFF RELOCATION NOW