Directory of image this file is from
This file as a plain text file
/DASM -- OS/8 DISSASSEMBLER /******************************************************** /* * /* D A S M * /* * /* ------------------------- * /* * /* OS/8 DISASSEMBLER * /* .R DASM * /* *ASCII<BINARY * /* * /* SWITCHES * /* * /* E DECODE 2-WORD EAE INSTRUCTIONS * /* F DECODE FPNT INSTRUCTIONS * /* N DO NOT ADD SYMBOLS * /* S SYMBOL TABLE * /* * /******************************************************** FIELD 0 *10 AX, ZBLOCK 10 /AUTO INDEX *20 CT, ZBLOCK 10 /COUNTERS *30 TM, ZBLOCK 10 /TEMPORARIES *40 PASS, 0-0 /PASS SWITCH INDICATOR EAEFLG, 0-0 /EAE FPTFLG, 0-0 /FPNT SYMFLG, 0-0 /NO ADD SYMBOL FLAG EA, 0-0 /2-WORD EAE IN PROGRESS FP, 0-0 /FPNT IN PROGRESS FL, 0-0 /MEMORY FIELD FT, 0-0 /TEMPORARY FIELD PC, 0-0 /LOCATION INDICATOR ME, 0-0 /CONTENTS OF LOC CK, 0-0 /CHECK SUM W1, 0-0 /WORD 1 OF PAIR W2, 0-0 /WORD 2 OF PAIR CHAR, 0-0 /CHARACTER TEMP NS, 0-0 /NUMBER OF SYMBOLS LS, 0-0 /LAST SYMBOL POINTER TP, 0-0 /INSTRUCTION TYPE OF, 0-0 /OFFSET FROM PAGE BDRY OF1, 0-0 /OF-PC OF2, 0-0 /ABS(OF1) MR, 0-0 /MEMORY REFERENCE ADDRESS PI, 0-0 /INDIRECT BIT PZ, 0-0 /PAGE 0 BIT PAGE START, JMP I .+1 BEGIN /BEGIN PROGRAM ZBLOCK 4 /TEMPORARIES FOR MESG MESG, .-. CLA CMA TAD I MESG /SAVE POINTER DCA MESG-1 ISZ MESG /FOR RETURN TAD 377 DCA MESG-4 MES1, CLA CMA DCA MESG-2 /UNPACK SWITCH ISZ MESG-1 /NEXT WORD TAD I MESG-1 /FETCH WORD RTR RTR RTR MES2, AND 77 /MASK 6 BITS SNA JMP I MESG /YES TAD 240 /RECODE AND 77 /CHARACTER TO TAD 240 /BE PRINTED DCA MESG-3 TAD MESG-3 TAD -"% /CTRL CHAR? SZA CLA JMP MES3 /NO TAD 277 /SET MASK DCA MESG-4 /AND SAVE IT JMP MES4 MES3, TAD MESG-3 /GET CHARACTER AND MESG-4 /MASK IT JMS I PUT TAD 377 /RESET MASK DCA MESG-4 MES4, ISZ MESG-2 /TEST L-R SWITCH JMP MES1 /LEFT TAD I MESG-1 /RIGHT JMP MES2 0-0 /TEMPORARY PUT, .-. DCA PUT-1 /SAVE CHAR TAD PUT-1 /GET IT BACK TAD -"Z+100 /CTRLZ? SNA CLA JMP PUT10 /YES, END IT TAD PUT-1 /GET IT BACK CIF 10 JMS I OCHAR /PUT OUT THE CHAR JMP PUT20 /OUTPUT ERROR JMP I PUT /DONE, EXIT PUT10, CIF 10 /CLOSE THE FILE JMS I OCLOSE JMP PUT30 /CLOSE ERROR JMP I PUT PUT20, JMS I ERROR 1 JMP PUT10 PUT30, JMS I ERROR 2 JMP BEGIN /OOPS GET, .-. CIF 10 JMS I ICHAR /GET A CHAR SKP /SKIP IF ERROR JMP I GET /EXIT WITH IT SMA CLA /SKIP IF FATAL ERROR IAC TAD 5 JMP ERROR+3 ERROR, .-. CLA CLL TAD I ERROR DCA .+4 CIF 10 JMS I 200 7 0-0 /ERROR CODE -1;-14;7642;0-0;0-0 OPTION, .-. DCA OPTION-2 TAD OPTION-3 DCA OPTION-1 TAD OPTION-2 TAD OPTION-4 ISZ OPTION-1 SMA SZA JMP .-3 TAD OPTION-5 DCA OPTION-2 CLL CML RAL ISZ OPTION-2 JMP .-2 CDF 10 AND I OPTION-1 CDF 00 SZA CLA ISZ OPTION JMP I OPTION PAGE BEGIN, CDF 00 /THIS FIELD CIF 10 /POINT TO USR JMS I 7700 /LOCK USR INTO CORE 10 CIF 10 JMS I 200 /CALL COMMAND DECODER 5 0 CIF 10 JMS I IOPEN /OPEN INPUT FILES CIF 10 JMS I OOPEN /AND OUTPUT FILES SMA CLA /ERROR. IF AC<0, IT WAS FATAL JMP BEG10 /NON-FILE STRUCTURED OUTPUT JMS I ERROR /SIGNAL USER ERROR 3 BEG10, TAD "E-300 /CHECK 2-PAGE EAE JMS I OPTION IAC DCA EAEFLG TAD "F-300 /CHECK FPNT JMS I OPTION IAC DCA FPTFLG TAD "N-300 JMS I OPTION IAC DCA SYMFLG /=1, NO ADDED SYMBOLS JMS I SYMBOL /YES, READ SYMBOLS DCA PASS /SET PASS=1 JMS I MESG MSG00 JMS BIN /PASS THROUGH BINARY IAC /SET PASS=2 DCA PASS CIF 10 JMS I IOPEN /RE-OPEN INPUT JMS BIN /AND PASS THROUGH BINARY AGAIN JMS I MESG MSG001 JMP START /AND GO AGAIN BIN, .-. CLA CLL DCA BIN70 JMS BIN60 /GET A CHARACTER SKP CLA JMP .-2 /WAIT FOR LEADER JMS BIN60 /AND IGNORE IT JMP .-1 BIN10, DCA CK TAD FT /GET THIS FIELD CIA /CHECK AGAINST LAST FIELD TAD FL /IS IT SAME SNA CLA JMP .+10 /YES, NO FIELD MESSAGE TAD FT /GET FIELD TAD 1160 /I0 FOR %I0 IN MESSAGE DCA MSG10A /SAVE IN MESSAGE JMS I MESGA MSG10 /PUT OUT FIELD MESSAGE TAD FT /LAST FIELD DCA FL /IS THIS FIELD TAD CHAR /GET CHARACTER DCA W1 /AND SAVE IT JMS I GETA DCA W2 JMS BIN60 /LOOK AHEAD JMP BIN40 /TRAILER, END JMS BIN50 SNL JMP BIN30 DCA PC /ORIGIN JMS I CPA SKP JMS I PRTORG BIN20, TAD W1 TAD W2 TAD CK JMP BIN10 BIN30, DCA ME /SAVE CONTENTS OF THIS LOC JMS I PROC /PROCESS IT ISZ PC /BUMP THE PC NOP JMP BIN20 /AND FIX THE CHECKSUM BIN40, JMS BIN50 CIA TAD CK SNA CLA JMP I BIN JMS I ERROR 4 BIN50, .-. TAD W1 CLL RTL RTL RTL TAD W2 JMP I BIN50 BIN60, .-. DCA BIN50 JMS I GETA TAD -376 SPA SNA CLA JMP .+4 ISZ BIN70 CMA JMP BIN60+1 TAD BIN70 SZA CLA JMP BIN60+2 TAD CHAR AND 300 TAD -200 SPA ISZ BIN60 SPA SNA CLA JMP I BIN60 TAD CHAR AND 70 CLL RTR RAR DCA FT JMP BIN60+2 BIN70, 0-0 PAGE JMP I .+1 /COMMON EXIT PROC, .-. /PROCESS THE CONTENTS OF A WORD JMS I CPA /CHECK PASS NUMBER SKP JMS I PRTLBL /PRINT LABEL TAD ME /GET THE CONTENTS OF THE WORD SNA JMP I PROCZ /PROCESS A ZERO CLL RTL RTL AND 7 /GET INSTRUCTION TYPE DCA TP /INSTRUCTION TYPE TAD TP TAD JMP PROC10 /BUILD JMP DCA .+1 /AND EXECUTE IT 0-0 PROC10, JMP PROC20 /AND JMP PROC20 /TAD JMP PROC20 /ISZ JMP PROC20 /DCA JMP PROC20 /JMS JMP PROC20 /JMP JMP PROI10 /IOT JMP PROO10 /OPR PROC20, TAD ME /GET CONTENTS AND 400 /CHECK INDIRECT DCA PI TAD ME AND 200 /CHECK PAGE 0 DCA PZ TAD ME AND 177 /GET PAGE OFFSET DCA OF /AND SAVE IT TAD PZ /PAGE ZERO? SZA CLA /SKIP IF YES TAD PC /GET PC AND 7600 /FORM PAGE BOUNDARY TAD OF /AND NOW ACTUAL ADDRESS DCA MR /STORE MR ADDRESS TAD PZ SNA CLA JMP PROC30 /TREAT PAGE 0 AS FORCED REFERENCE TAD PI SZA CLA JMP PROC30 /TREAT INDIRECT AS FORCED REFERENCE TAD PC /GET PRESENT ADDRESS CIA TAD MR /-REFERENCE ADDRESS DCA OF1 TAD OF1 SPA CIA DCA OF2 TAD OF2 AND 7770 SZA CLA JMP PROC30 /FORCE LIKE INDIRECT JMS I CPA JMP I PROC-1 /IF PASS1, THIS IS IT TAD MR /GET THE ADDRESS JMS I SRCSYM /TRY FOR A SYMBOL SKP /NO, THEN .+X OR .-X JMP PROC40-1 /GOT ONE TAD PRTOFF /FORCE WHERE TO GO JMP PROC40 /AND GO AROUND STUFF PROC30, TAD MR /TRY FOR A SYMBOL JMS I SRCSYM SKP JMP PROC40-1 /YES, SET PRINT UP JMS I CPA JMP PROC70 /ADD ON PASS 1 TAD POCTL-PRTSYM /NO SYMBOL, THEN OCTAL TAD PRTSYM /GOT ONE PROC40, DCA PRO110 /SAVE WHERE TO GO JMS I CPA JMP I PROC-1 /DONE TAD MR /CHECK REFERENCE LOC 0 SNA CLA JMP PROC80 /REFERENCE LOC 0, PROBABLY CONST TAD PRO100 /GET POINTER TAD TP /ADD IN INSTRUCTION TYPE DCA PROC50 TAD I PROC50 DCA PROC50 JMS I MESGA PROC50, 0-0 /INSTRUCTION TAD PI /CHECK INDIRECT SNA CLA IAC TAD MSG50 /INDIRECT TAB OR JUST TAB DCA .+2 JMS I MESGA 0-0 TAD MR /GET MEMORY REF ADDRESS PROC60, JMS I PRO110 /SYMBOL OR OCTAL OR OFFSET JMP I PROC-1 /DONE PROC80, TAD POCTL DCA PRO110 TAD ME JMP PROC60 PROC70, TAD SYMFLG /GET SYMBOL FLAG SNA CLA JMP I PROC-1 /DO NOT ADD SYMBOLS TAD SYMBOL-13 /POINTER TO START OF SYMBOL DCA AX TAD "Z DCA I AX TAD "Z DCA I AX TAD MR /GET ADDRESS JMS I MOCTL /MOVE IN THE OCTAL STUFF JMS I ADDSYM /ADD THE SYMBOL JMP I PROC-1 /AND EXIT PRO110, 0-0 PAGE PROI10, JMS I CPA JMP I PROC-1 TAD ME AND 7707 /CHECK FOR CDF OR CIF COMBO CIA TAD CDF SZA JMP .+4 JMS I MESGA MSG200 JMP PROI20 TAD CIF-CDF SZA JMP .+4 JMS I MESGA MSG210 JMP PROI20 TAD CDF!CIF-CIF SZA JMP PROO10 JMS I MESGA MSG220 PROI20, TAD ME AND 70 JMS I POCTL JMP I PROC-1 PROO10, JMS I CPA /CHECK PASS JMP I PROC-1 TAD ME /GET CONTENTS JMS I SRCSYM /CHECK SYMBOL JMP .+3 /NO SYMBOL JMS I PRTSYM /PRINT IT JMP I PROC-1 TAD ME CIA DCA TM TAD PROTBL-1 DCA AX PROO20, TAD I AX SNA JMP PROO30 TAD TM SNA CLA JMP .+3 ISZ AX JMP PROO20 TAD I AX DCA .+2 JMS I MESGA 0-0 JMP I PROC-1 PROO30, TAD ME /GET CONTENTS JMS I POCTL /PRINT IT JMP I PROC-1 /COMMON EXIT MESGA, .-. CLA CLL TAD I MESGA ISZ MESGA DCA .+4 JMS I CPA /CHECK PASS JMP I MESGA /NOTHING ON PASS 1 JMS I MESG /EVERYTHING ON PASS 2 0-0 JMP I MESGA GETA, .-. JMS I GET DCA CHAR TAD CHAR JMP I GETA CPA, .-. CLA CLL TAD PASS /CHECK PASS SZA CLA ISZ CPA JMP I CPA MOCTL, .-. CLL RAL DCA CPA /SAVE THE VALUE TAD -4 DCA GETA TAD CPA RAL RTL DCA CPA TAD CPA AND 7 TAD "0 DCA I AX ISZ GETA JMP MOCTL+5 JMP I MOCTL ZBLOCK 4 /4 OCTAL DIGITS POCTL, .-. DCA MOCTL TAD POCTL-5 DCA AX TAD MOCTL JMS MOCTL TAD POCTL-5 DCA AX TAD -4 DCA GETA TAD I AX JMS I PUT ISZ GETA JMP .-3 JMP I POCTL PROCZ, JMS I MESGA MSG02 JMP I PROC-1 PAGE ZBLOCK 12 SYMBOL, .-. CLA CLL DCA NS /NO SYMBOLS TAD OUDEVH /LAST SYMBOL POINTER DCA LS TAD "S-300 JMS I OPTION JMP I SYMBOL SYM10, TAD -6 DCA CT /ONLY 6 CHARS TAD SYMBOL-13 DCA AX /INTO SYMBOL BUFFER DCA I AX ISZ CT JMP .-2 TAD SYMBOL-13 DCA AX TAD -6 DCA CT JMS SYM40 /GET ALPHA OR NUMERIC JMP .-1 /NON ALPHAMERIC JMP .+3 JMS SYM40 /GET ANOTHER JMP .+4 /TERMINATOR DCA I AX /AND SAVE IT ISZ CT JMP .-4 JMS SYM40 /GET A TERMINATOR SKP CLA JMP .-2 TAD -5 DCA CT /4 CHARACTERS DCA SYMBOL-4 /CLEAR VALUE JMS SYM50 /WAIT FOR JMP .-1 /NUMERIC JMP SYM20+3 SYM20, DCA SYMBOL-4 /SAVE VALUE JMS SYM50 /GET A NUMBER JMP SYM30 DCA CT+1 /SAVE IT TAD SYMBOL-4 CLL RTL RAL TAD CT+1 ISZ CT JMP SYM20 SYM30, JMS ADDSYM /ADD SYMBOL JMP SYM10 /AND GET ANOTHER SYM40, .-. /GET A CHARACTER ALPHANUMERIC JMS I GETA TAD -200 SNA JMP I SYMBOL /TRAILER, ALL DONE TAD -"0+200 SMA CLA ISZ SYM40 TAD CHAR /GET SYMBOL BACK JMP I SYM40 SYM50, .-. /GET A NUMBER JMS SYM40 JMP I SYM50 /LEAVE WITH TERMINATOR TAD -"8 SPA SNA CLA JMP .+3 TAD CHAR JMP I SYM50 ISZ SYM50 TAD CHAR AND 7 JMP I SYM50 PAGE ADDSYM, .-. /ADD SYMBOL TO TABLE CLA CLL TAD -4 TAD LS DCA AX TAD AX TAD -LLOC SNA CLA JMP I ADDSYM /CANT ADD TAD AX DCA LS TAD I SYMBOL-4 DCA I LS /SAVE THE VALUE TAD SYMBOL-13 DCA AX+1 TAD -3 DCA CT ADD10, TAD I AX+1 CLL RTL RTL RTL AND 7700 DCA TM TAD I AX+1 AND 77 TAD TM DCA I AX ISZ CT JMP ADD10 JMP I ADDSYM SRCSYM, .-. DCA SYMBOL-4 /SAVE VALUE FOR SCAN STA TAD LS SRC10, DCA AX TAD I AX CIA DCA TM TAD AX TAD -OUDEVH /DONE SNA CLA JMP I SRCSYM /YES, EXIT TAD TM TAD SYMBOL-4 SNA CLA JMP .+4 CLA CLL CML IAC RAL /AC=3 TAD AX JMP SRC10 DCA SYMBOL TAD I AX DCA SYMBOL-3 TAD I AX DCA SYMBOL-2 TAD I AX DCA SYMBOL-1 ISZ SRCSYM JMP I SRCSYM PRTSYM, .-. CLA CLL DCA I SYMBOL JMS I MESGA SYMBOL-3 JMP I PRTSYM PRTLBL, .-. JMS I MESGA MSG01 TAD PC JMS I SRCSYM JMP .+4 JMS PRTSYM JMS I MESGA MSG20 JMS I MESGA MSG30 JMP I PRTLBL PRTORG, .-. JMS I MESGA MSG40 TAD PC JMS I POCTL JMP I PRTORG MSG60;MSG70 /.+, .- PRTOFF, .-. CLA CLL TAD OF1 /CHECK + OR - SPA CLA IAC TAD PRTOFF-2 DCA .+4 TAD I .+3 DCA .+2 JMS I MESGA 0-0 TAD OF2 TAD "0 JMS I PUT JMP I PRTOFF PAGE MSG00, TEXT @/DASM V 1.01 MRM 1/20/74%M%J@ MSG001, TEXT @%M%J%I$END$%M%J%Z@ MSG01, TEXT @%M%J@ MSG02, TEXT @0@ MSG10, TEXT @%M%J%IFIELD%I0@ MSG10A=.-2 MSG20, TEXT @,@ MSG30, TEXT @%I@ MSG40, TEXT @%M%J%I*@ MSG50, TEXT @ I%I@ MSG60, TEXT @.+@ MSG70, TEXT @.-@ MSG100, TEXT @AND@ MSG110, TEXT @TAD@ MSG120, TEXT @ISZ@ MSG130, TEXT @DCA@ MSG140, TEXT @JMS@ MSG150, TEXT @JMP@ MSG200, TEXT @CDF%I@ MSG210, TEXT @CIF%I@ MSG220, TEXT @CDF CIF%I@ PRO100, MSG100;MSG110;MSG120;MSG130;MSG140;MSG150 PROTBL, NOP;M1 XLIST CLA;M2 CLL;M3 CMA;M4 CML;M5 RAR;M6 RAL;M7 RTR;M10 RTL;M11 IAC;M12 SMA;M14 SZA;M15 SPA;M16 SNA;M17 SNL;M20 SZL;M21 SKP;M22 OSR;M23 HLT;M24 CLA+400;M2 CIA;M25 LAS;M26 STL;M27 GLK;M30 CLA CLL;M31 CLA IAC;M32 CLA CMA;M33 CLL RAR;M34 CLL RAL;M35 CLL RTL;M36 CLL RTR;M37 SZA CLA;M40 SZA SNL;M41 SNA CLA;M42 SMA CLA;M43 SMA SNL;M44 SPA SNA;M45 SPA SZL;M46 SPA CLA;M47 SNA SZL;M50 7401;M1 7601;M2 6001;M60 6002;M61 6214;M70 6224;M71 6234;M72 6244;M73 KSF;M100 KCC;M101 KRS;M102 KRB;M104 TSF;M106 TCF;M107 TPC;M110 TLS;M112 RSF;M114 RRB;M115 RFC;M116 RRB RFC;M117 PSF;M121 PCF;M122 PPC;M123 PLS;M124 0 /LIST TERMINATION M1, TEXT @NOP@ M2, TEXT @CLA@ M3, TEXT @CLL@ M4, TEXT @CMA@ M5, TEXT @CML@ M6, TEXT @RAR@ M7, TEXT @RAL@ M10, TEXT @RTR@ M11, TEXT @RTL@ M12, TEXT @IAC@ M14, TEXT @SMA@ M15, TEXT @SZA@ M16, TEXT @SPA@ M17, TEXT @SNA@ M20, TEXT @SNL@ M21, TEXT @SZL@ M22, TEXT @SKP@ M23, TEXT @OSR@ M24, TEXT @HLT@ M25, TEXT @CIA@ M26, TEXT @LAS@ M27, TEXT @STL@ M30, TEXT @GLK@ M31, TEXT @CLA CLL@ M32, TEXT @CLA IAC@ M33, TEXT @STA@ M34, TEXT @CLL RAR@ M35, TEXT @CLL RAL@ M36, TEXT @CLL RTL@ M37, TEXT @CLL RTR@ M40, TEXT @SZA CLA@ M41, TEXT @SZA SNL@ M42, TEXT @SNA CLA@ M43, TEXT @SMA CLA@ M44, TEXT @SMA SNL@ M45, TEXT @SPA SNA@ M46, TEXT @SPA SZL@ M47, TEXT @SPA CLA@ M50, TEXT @SNA SZL@ M60, TEXT @ION@ M61, TEXT @IOF@ M70, TEXT @RDF@ M71, TEXT @RIF@ M72, TEXT @RIB@ M73, TEXT @RMF@ M100, TEXT @KSF@ M101, TEXT @KCC@ M102, TEXT @KRS@ M104, TEXT @KRB@ M106, TEXT @TSF@ M107, TEXT @TCF@ M110, TEXT @TPC@ M112, TEXT @TLS@ M114, TEXT @RSF@ M115, TEXT @RRB@ M116, TEXT @RFC@ M117, TEXT @RRB RFC@ M121, TEXT @PSF@ M122, TEXT @PCF@ M123, TEXT @PPC@ M124, TEXT @PLS@ XLIST PAGE LLOC=. PAGE /OSIO.PA--OS8 I/O ROUTINE PARAMETER DEFINITIONS OUBUF=6200;OUCTL=4210 /2 PAGE OUTPUT BUFFER STARTS AT 16200 OUDEVH=6600 /1 OR 2 PAGE OUTPUT HANDLER LOADED AT 06600 INBUF=5600;INCTL=0210 /2 PAGE INPUT BUFFER STARTS AT 15400 INDEVH=7200 /1 OR 2 PAGE INPUT HANDLER AT 7200. ORIGIN=6600 /THE SUBROUTINES RESIDE AT 16600. / / CORE MAP / / 00000-06577 USER AVAILABLE / 06600-07177 OUTPUT DEVICE HANDLER / 07200-07577 INPUT DEVICE HANDLER / 10000-10777 USR RESERVED / 12000-11577 USER AVAILABLE / 15600-16177 INPUT BUFFER / 16200-16577 OUTPUT BUFFER / 16600-17577 OSIO SUBROUTINES / EJECT XLIST INRECS=1 /2 PAGES = 1 RECORD DCB=7760 /DEVICE CONTROL TABLE FIELD 1 *ORIGIN INFLD=INCTL&70 /INPUT BUFFER FILED OUFLD=OUCTL&70 /OUTPUT BUFFER FIELD IN7400, 7400 IOPEN, 0 /INITIALIZE INPUT CLA CMA DCA INCHCT /SET TO READ FROM NEW DEVICE. ISZ INEOF /FORCE A NEW INPUT FILE. TAD (7617 /POINT TO CD INPUT LIST. DCA INFPTR TAD IOPEN /GET CALLERS ADDRESS JMP IOPENE /AND CONTINUE SOMEWHERE ELSE INEOF, 0 INFPTR, 0 INPTR, 0 ICHAR, 0 /INPUT A CHARACTER. IN7600, 7600 RDF /SAVE CALLING FIELD FOR RETURN TAD INCDIF DCA INRTRN INCHAR, CDF INFLD /DATA FIELD TO FIELD OF BUFFER ISZ INJMP /3 - WAY UNPACKING SWITCH ISZ INCHCT /INPUT BUFFER EXHAUSTED? INJMPP, JMP INJMP /NO..UNPACKTHE NEXT CHAR. TAD INEOF /DID LAST READ GIVE EOF ON THIS DEVICE? SNA CLA JMP INGBUF /NO. CONTINUE READING. GETNEW, JMS INNEWF /YES..GET NEXT INPUT IF IT EXISTS. JMP EOFERR /TAKE EOF EXIT FROM ICHAR. INGBUF, TAD INCTR /INCTR HOLDS THE CURRENT LENGTH OF /THE INPUT FILE. WHEN THE AMOUNT REMAINING /TO READ IS LESS THAN THE SIZE OF THE /INPUT BUFFER, AN EOF IS SIGNALLED. CLL TAD (INRECS SNL DCA INCTR /UPDATE REMAINING LENGTH SZL ISZ INEOF /AND SIGNAL EOF FOR NEXT READ. CLL CML CMA RTR /CONSTRUCT A CONTROL WORD FOR THIS RTR /READ FROM THE OVERFLOW, IF ANY, RTR /AND THE STANDARD CONTROL WORD. TAD (INCTL+1 DCA INCTLW INCDIF, CIF CDF 0 /NOW DO A CALL TO THE INPUT HANDLER CDF 10 /WE ARE IN FIELD 1, HANDLER IN FIELD 0 JMS I INHNDL INCTLW, 0 /INPUT CONTROL WORD INBUFP, INBUF /INPUT BUFFER ADDRESS INREC, 0 /POINTER TO INPUT RECORD JMP INERRX INBREC, TAD INREC TAD (INRECS /UPDATE POINTER INTO FILE DCA INREC TAD INCTLW /NOW COMPUTE THE NUMBER OF CHARACTERS AND IN7600 /IN THIS INPUT BUFFER CLL RAL TAD INCTLW AND IN7600 CMA DCA INCHCT /NEW NUMBER OF CHARACTERS. TAD INJMPP /RESET 3 WAY SWITCH DCA INJMP TAD INBUFP DCA INPTR /AND BUFFER POINTER JMP INCHAR /NOW READ THE BUFFER INERRX, ISZ INEOF /SET EOF JUST IN CASE SMA CLA /IF<0, A PHYSICAL ERROR JMP INBREC /EOF ON INPUT INERR, CLA CLL CML RAR /FATAL EOFERR, JMP INRTRN /GET OUT INJMP, HLT /3 WAY UNPACK SWITCH JMP ICHAR1 /GET 1ST OF 3 JMP ICHAR2 /SECOND ICHAR3, TAD INJMPP DCA INJMP /SET FOR FIRST CHAR. NEXT TAD I INPTR /THE THIRD WORD IS MADE OF THE HIGH IN200, AND IN7400 /ORDER FOUR BITS OF THE FIRST CLL RTR /TWO. RTR TAD INCTLW RTR RTR ISZ INPTR /POINT TO NEXT WORD JMP INCOMN /GET OUT WITH CHAR IN AC ICHAR2, TAD I INPTR AND IN7400 /SAVE HIGH ORDER FOR THIRD WORD DCA INCTLW ISZ INPTR ICHAR1, TAD I INPTR INCOMN, AND (377 TAD (-232 /IS IT A Z (EOF)? SNA JMP GETNEW /YES..LOOK AT NEXT INPUT TAD (232 ISZ ICHAR /TAKE NORMAL RETURN INRTRN, 0 /CIF CDF N. JMP I ICHAR INNEWF, -1 INCHCT=INNEWF CDF 10 TAD (INDEVH+1 /INITIALIZE IN CALSE WE NEED A NEW DCA INHNDL /MORE INPUT? TAD I INFPTR SNA JMP I INNEWF /NOPE JMS I IN200 /CALL MONITOR TO GET HANDLER 1 INHNDL, 0 HLT /VERY BAD! TAD I INFPTR AND (7760 /GET INPUT FILE LENGTH SZA TAD (17 CLL CML RTR RTR /NEGATIVE OF FILE LENGTH DCA INCTR ISZ INFPTR /POINT TO STARTING BLOCK TAD I INFPTR DCA INREC /STORE IN HANDLER CALL ISZ INFPTR /NEXT INPUT. DCA INEOF /CLEAR EOF FLAG. ISZ INNEWF JMP I INNEWF INCTR=IOPEN PAGE OOPEN, 0 /OPEN OUTPUT FILE OU7600, 7600 RDF TAD (CDF CIF 00 DCA OORETN CDF CIF 10 TAD OU7601 /POINT TO OUTPUT FILE NAME IN CD DCA OUBLK /AREA TAD (OUDEVH+1 DCA OUHNDL /INITIALIZE OUTPUT DEVICE HANDLER TAD I OU7600 /PICK UP OUTPUT DEVICE NUMBER AND (17 SNA /IS THERE ONE? JMP ONOFIL /NO..INHIBIT OUTPUT JMS I (200 /FETCH OUTPUT HANDLER 1 OUHNDL, 0 HLT /BAD THING OUENTR, TAD I OU7600 JMS I (200 /ENTER THE OUTPUT FILE 3 OUBLK, 7601 /GETS STARTING BLOCK OF HOLE OUELEN, 0 /GETS SIZE OF HOLE AVAILABLE JMP OEFAIL /FAILURE. SEE WHAT WE DID. DCA OUCCNT /CLEAR CLOSING LENGTH DCA I (OUTINH /CLEAR OUTPUT INHIBIT JMS I (OUSETP /SET UP POINTERS ISZ OOPEN OORETN, CDF CIF 10 JMP I OOPEN /RETURN O.K. OEFAIL, TAD I OU7600 /IFLENGTH=0, GIVE OPEN ERROR AND (7760 /IF NOT, MAKE IT 0 AND TRY AGAIN SNA CLA JMP ONTERR /WAS 0, FAILED TAD I OU7600 AND (17 /MAKE IT 0 DCA I OU7600 JMP OUENTR /AND TRY AGAIN ONTERR, CLA CLL CML RAR JMP OORETN ONOFIL, ISZ I (OUTINH /INHIBIT OUTPUT JMP OORETN OUTDMP, 0 /DUMP OUTPUT BUFFER DCA OUCTLW /STORE CONTROL WORD CDF 10 TAD I (OUTINH /IS OUTPUT INHIBITED? SZA CLA JMP OUNOWR /YEP. TAD OUCCNT /IF THIS IS FIRST WRITE, START THE SNA /SEARCH FORWARD ON DECTAPE ISZ OUCTLW TAD OUBLK /GET STARTING BLOCK OF THIS DCA OUREC /TRANSFER TAD OUCTLW CLL RTL RTL RTL /COMPUTE # OF RECORDS TO OUTPUT AND (17 TAD OUCCNT /UPDATE CLOSING LENGTH DCA OUCCNT TAD OUCCNT /SEE IF CLOSING LENGTH WILL BE CLL CML /BIGGER THAN OUTPUT HOLE TAD OUELEN SNL SZA CLA JMP I OUTDMP /WILL BE TOO BIG OUCDIF, CIF CDF 0 CDF 10 JMS I OUHNDL /DO THE WRITE OUCTLW, 0 OUBUF OUREC, 0 SKP /ERROR OUNOWR, ISZ OUTDMP /TAKE NORMAL RETURN JMP I OUTDMP PTP=0020 PAGE OCLOSE, 0 /CLOSE OUTPUT FILE OC7600, 7600 /DON'T TRUST ANYONE RDF /GET USERS FIELD TAD (CDF CIF 00 DCA OCRET /SAVE FOR EXIT CDF 10 TAD I (OUTINH /IF OUTPUT INHIBITED, CLOSE IS A NOP. SZA CLA JMP OCISZ /A NOP JMS I (OTYPE /DETERMINE IF OUTPUT IS TO PTP AND (770 /IF IT IS, DON'T OUTPUT A Z. TAD (-PTP SZA CLA TAD (232 /NOT PTP. OUTPUT Z AS EOF JMS I (OCHAR JMP OCRET /ERROR RETURN JMS I (OCHAR /FILL WITH 0 CHARACTERS JMP OCRET FILLIP, JMS I (OCHAR /FILL TO BOUNDARY WITH 0 JMP OCRET JMS I (OTYPE /IF OUTPUT IS DIRECTORY DEVICE, FILL SPA CLA /WHOLE RECORD, ELSE HALF RECORD TAD (100 TAD (77 AND I (OUDWCT /ARE WE UP TO BOUNDARY YET? SZA CLA JMP FILLIP /NO TAD I (OUDWCT TAD (OUCTL&3700 /IS THERE A FULL WRITE LEFT? SNA JMP NODUMP /YES. BUT DON'T DO IT, AS Z IS OUT. TAD (4000+OUFLD JMS OUTDMP /DUMP LAST BUFFER JMP OCRET NODUMP, TAD I OC7600 /GET DEVICE NUMBER JMS I (200 /CLOSE THE OUTPUT FILE 4 OU7601, 7601 /POINTER TO FILE NAME OUCCNT, 0 /CLOSING FILE LENGTH HERE SKP /ERROR OCISZ, ISZ OCLOSE /NORMAL RETURN OCRET, CDF CIF 10 /RESTORE CALLING FIELDS JMP I OCLOSE PAGE OUSETP, 0 /INITIALIZE OUTPUT POINTERS TAD (OUCTL&3700 CIA DCA OUDWCT /DOUBLE WORD OUTPUT COUNT TAD (OUBUF /INITIALIZE WORD POINTER DCA OUPTR TAD OUJMPE DCA OUJMP /3 WAY UNPACK SWITCH JMP I OUSETP OCHAR, 0 /OUTPUT CHARACTER ROUTINE AND (377 /ISOLATE EIGHT BITS DCA OUTEMP RDF /GET FIELD WE WERE CALLED TAD (CIF CDF 0 /FROM DCA OUCRET TAD OUTINH /OUTPUT INHIBITED? SZA CLA JMP OUCOMN /YES. NOP. OUCHAR, CDF OUFLD /GO TO DATA FIELD OF BUFFER ISZ OUJMP /BUMP CHARACTER SWITCH OUJMP, HLT /GETS JMP.,JMP.+1,ETC. JMP OCHAR1 JMP OCHAR2 OCHAR3, TAD OUTEMP /THIRD CHAR CLL RTL /HIGH ORDER BITS GO INTO THE RTL /HIGHORDER 4 BITS OF THE AND (7400 /FIRST OF TWO WORDS TAD I OUPOLD DCA I OUPOLD TAD OUTEMP /THE SECOND DOUBLE WORD GETS CLL RTR /THE LOW ORDER BITS OF RTR /THE THIRD CHAR RAR AND (7400 TAD I OUPTR DCA I OUPTR TAD OUJMPE /RESET CHARACTER SWITCH DCA OUJMP ISZ OUPTR /POINT TO NEXT BUFFER WORD ISZ OUDWCT /BUMP DOUBLE COUNT AFTER JMP OUCOMN /GET OUT TAD (OUCTL /READY TO OUTPUT A BUFFER JMS I (OUTDMP /OUTPUT IT JMP OUCRET /AN ERROR JMS OUSETP /RESET OUTPUT POINTERS JMP OUCOMN OCHAR2, TAD OUPTR /POINT TO FIRST DOUBLE WORD DCA OUPOLD ISZ OUPTR /POINT OUPTR TO SECOND OCHAR1, TAD OUTEMP DCA I OUPTR OUCOMN, ISZ OCHAR /NORMAL EXIT OUCRET, HLT JMP I OCHAR OUTEMP, 0 OUPOLD, 0 OUPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUTINH, 0 OTYPE, 0 /OTYPE LOOKS AT THE OUTPUT DEVICE #, RDF TAD (CIF CDF 0 DCA OTRTN CDF 10 TAD I (7600 /AND LOOKS UP THE DCB WORD FOR AND (17 /THAT DEVICE. TAD (DCB-1 DCA OUTEMP TAD I OUTEMP /GET DCB ENTRY OTRTN, HLT JMP I OTYPE /CONTINUE IOPEN IOPENE, DCA OTYPE /SAVE OPENS EXIT ADDRESS RDF /GET CALLERS FIELD TAD (CDF CIF 00 DCA OTRTN /SAVE FOR EXIT JMP OTRTN /AND EXIT XLIST $END$ $UPTR, 0 OUJMPE, JMP OUJMP OUDWCT, 0 OUTINH, 0