File 21MEM.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/ #21 MEMORY SOFTWARE
/COPIED AND MODIFIED FROM 810MEM.PA, DATED 2/1/79
/DATE OF LAST EDIT	10-DEC-84	(JEH)

/%RS	INTERFACING

/INTERFACING BETWEEN MEMORY & THE NO. 8/10 FINISHING MACHINE
/IS ACCOMPLISHED BY FOUR I/O REGISTERS CALLED THE STACK
/SIZE INPUT REGISTER, THE INPUT STATUS REGISTER, THE OUTPUT
/STATUS REGISTER, & MEMORY OUTPUT CONTROL REGISTER. BIT
/ASSIGNMENTS ARE AS FOLLOWS:


/%R	DR8-EA 50
/INPUT STATUS REGISTER (DR8-50 INPUTS):

/BIT 0	TYPE F-F	FORWARD MOTION (ON INTERRUPT)
/    1	     F-F
/    2	     F-F	CHOP SIGNAL
/    3	     LEVEL	STACKER RUNOUT SIGNAL
/    4	     F-F	MANUAL STACKER GATE RESET REQUEST
/    5	     F-F	MANUAL SINGLE REJECT SAMPLE REQUEST
/    6	     F-F	DEFECT
/    7	     F-F
/    8	     F-F
/    9	     F-F	MANUAL SINGLE STACKER SAMPLE REQUEST
/    10	     F-F
/    11	     F-F


/OUTPUT STATUS REGISTER (DR8-50 OUTPUTS):

/BIT 0			STACKER GATE CONTROL SIGNAL
/    1			REJECT GATE CONTROL SIGNAL
/    2			UPPER OVERLAP (STACK B) CONTROL SIG
/    3			LOWER OVERLAP (STACK A) CONTROL SIG
/    4			SAMPLE SHEETS TAKEN COUNTER PULSE
/    5			BOX PULSE
/    6			MEMORY RUNNING PULSE
/    7			TOTAL SHEETS CHOPPED COUNTER PULSE
/    8			GOOD SHEETS STACKED COUNTER PULSE
/    9			REJECT COUNTER PULSE
/    10			MEMORY ERROR INDICATOR/MACHINE STOP
/    11			STROBE PULSE


/%R DR8-EA 51 /STACK SIZE INPUT REGISTER (DR8-51 INPUTS): /(READS DESIRED STACK SIZE FROM THE THUMBWHEEL SWITCHES) /BIT 0-3 LEVEL 100'S DIGIT / 4-7 LEVEL 10'S DIGIT / 8-11 LEVEL 1'S DIGIT /MEMORY OUTPUT CONTROL REGISTER (DR8-51 OUTPUTS): /BIT 0 / 1 MEMORY OUTPUT ENABLE / 2 STACKER SAMPLE ACK LIGHT / 3 UPPER STACKER SAMPLE LIGHT / 4 LOWER STACKER SAMPLE LIGHT
/%RS DATA DISPLAYS /%R SWITCH REGISTER & MQ REGISTER /THE SWITCH REGISTER ON THE FRONT PANEL OF THE COMPUTER /IS USED TO DISPLAY VARIOUS INFORMATION IN "MQ" REGISTER. /THESE SWITCHES WILL NOT AFFECT THE OPERATION OF THE /PROGRAM, BUT WILL PERMIT OBSERVATION OF A NUMBER OF /OPERATING PARAMETERS. ALL OTHER FRONT PANEL SWITCHES ARE /INOPERATIVE WHEN THE POWER KEY SWITCH IS IN THE PANEL LOCK /POSITION. /SWITCH REGISTER DISPLAY OPTIONS: / SR= 0 CLEAR DISPLAY / SR= 1 DISPLAY CONTENTS OF INPUT STATUS WORD (DR8-50) / SR= 2 DISPLAY CONTENTS OF OUTPUT STATUS WORD (DR8-50) / SR= 3 DISPLAY CURRENT STACK SIZE (ACTIVE SHEET / COUNT IN BCD);(DR8-51) / SR= 4 DISPLAY CURRENT SHEET COUNT (IN BCD) / SR= 5 DISPLAY CALCULATED SHEET LENGTH BEING / CHOPPED (NO. OF 1/4 IN. INCREMENTS / PER SHEET LENGTH IN OCTAL) / SR= 6 DISPLAY CALCULATED TENTATIVE SHEET LENGTH / (PREVIOUS VALUE FOR POSSIBLE CHOP / LENGTH CHANGE IN OCTAL) / SR= 7 DISPLAY CURRENT SHEET LENGTH COUNTER / (ACCUMULATES 1/4 IN. MOTION PULSES / BETWEEN BUNCH SIGNALS TO DETERMINE / LENGTH OF SHEET BEING CHOPPED)(OCTAL) / SR= 10 DISPLAY ERROR STATUS WORD (TO CHECK / FOR MEMORY ERRORS) / SR= 11 DISPLAY PREVIOUS ERROR STATUS / SR= 12 DISPLAY CURRENT MEMORY OUTPUT CONTROL / REGISTER (DR8-51) / SR= 13 DISPLAY CHOP COUNTER, BINARY / SR= 14 DISPLAY SAMPLE COUNTER, BINARY / SR= 15 DISPLAY REJECT COUNTER, BINARY / SR= 16 DISPLAY GOOD PRODUCT COUNTER, BINARY / SR= 17 DISPLAY BOX COUNTER, BINARY / SR=7777 CLEAR ERROR STATUS WORDS /MEMORY ERROR STATUS WORD CODES: /BIT 0 MEMORY OVERSPEED ERROR / 1 UNIDENTIFIED INTERRUPT / 2 PROCESSOR ERROR DETECTED / 3 POWER FAIL DETECTED / 4 BUNCH PULSE MISSING / 5-11 UNUSED
/%R TELETYPE KEYBOARD OPTIONS / ^C= GO TO OS/8 MONITOR / *= GO TO ODT / E= RETURN FROM ODT THRU INTERRUPT RETURN / (SPECIAL ODT COMMAND) /%RS MACHINE LANGUAGE DEFINITIONS MQL= 7421 SPL= 6102 CLB= CLA CLL CDI= CIF CDF CAF= 6007 /%R RX8E/RX28 (RX02) DISK LCD= 6751 /LOAD COMMAND, CLEAR AC XDR= 6752 /TRANSFER DATA REGISTER STR= 6753 /SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG SER= 6754 /SKIP ON ERROR FLAG, CLEAR FLAG SDN= 6755 /SKIP ON DONE FLAG, CLEAR FLAG INTR= 6756 /ENABLE OR DISABLE DISK INTERRUPTS INIT= 6757 /INITILIZE CONTROLLER & INTERFACE /%R DR8-EA DEFINITIONS DBDI= 6500 /DISABLE INTERRUPT DBEI= 6501 /ENABLE INTERRUPT DBSK= 6502 /SKIP ON DONE FLAG DBCI= 6503 /CLEAR SELECTIVE INPUT REG. DBRI= 6504 /TRANSFER INPUT TO AC DBCO= 6505 /CLEAR SELECTIVE OUTPUT REG. DBSO= 6506 /SET SELECTIVE OUTPUT REG. DBRO= 6507 /TRANSFER OUTPUT TO AC /%RS PROGRAMMING DEFINITIONS ZERO= 0 ESC= 033 /ESCAPE KEY OS8= 7600 /LOCATION OF OS-8 MONITOR ODT= 7000 /LOCATION OF ODT PROGRAM NNN= 0 /%RS FIXED MEMORY REFERENCE INSTRUCTIONS FIXMRI INC= 2000 /INCREMENT LOCATION (SAME AS ISZ) FIXTAB
/%RC #21 MEMORY SOFTWARE FIELD 0 /%RS PAGE 0 DEFINITIONS /%R INTERRUPT HANDLER *0 INH, NNN /INTERRUPT OCCURRED DCA AC /SAVE C(AC) RAR SKP /RESERVE LOC 00004 FOR ODT USAGE NNN DCA LINK /SAVE C(LINK) JMP I INHP /SERVICE THE INTERRUPT INHP, INS /INTERRUPT HANDLER LOCATION /%R TELEPRINTER OUTPUT POINTER CUE TABLE *10 TTYCUE, NNN /TABLE OF POINTERS TO ASCII TEXT NNN /FOR TELEPRINTER OUTPUTS. NNN /ZEROED AT PRESENT. NNN /(NOTE: TABLE = AUTO-INDEX NNN / REGISTERS 00010-00017) NNN NNN TTYEND, NNN
/%R DEFINITIONS, MACHINE MEASUREMENTS DECIMAL INSP= -571 CHOP= ZERO REJ= 123 STK= 300 LGTE= 408 UGTE= 430 MAXCHP= -100 OCTAL /%RX INSTRUCTIONS FOR ADJUSTING TIMING /THE ABOVE CONSTANTS ARE THE ONLY NUMBERS THAT NEED BE /CHANGED TO ADJUUST MACHINE TIMING. /THE LOCATION OF THE BUNCH POINT "BUNCH1" IS ARBITRARILY /DEFINED AS ZERO. ALL OTHER LOCATIONS ARE REFERENCED TO THIS /LOCATION. POSITIVE & NEGATIVE NUMBERS REPRESENT LOCATIONS /FROM "BUNCH1" TOWARD THE STACKER & UNWIND ENDS OF THE /MACHINE RESPECTIVELY. THE CONSTANTS CORRESPOND TO THE /NUMBER OF 1/4 INCH INCREMENTS BETWEEN "BUNCH1" & THE POINT /IN QUESTION. ALL NUMBERS ARE IN DECIMAL. /TO TIME ANY OF THE ABOVE LOCATIONS ON THE MACHINE, MEASURE /THE WEB DISTANCE FROM THE POINT IN QUESTION TO "BUNCH1" IN /INCHES, MULTIPLY BY 4, ENTER THIS NUMBER /AS A POSITIVE OR NEGATIVE NUMBER, DEPENDING ON WHETHER THE /POINT IS AFTER OR BEFORE "BUNCH1", IN THE APPROPRIATE /LOCATION ABOVE. FINAL ADJUSTMENT MAY BE MADE BY ALTERING /THIS NUMBER SLIGHTLY. /MEMORY RESOLUTION MAY BE ALTERED BY SETTING A NUMBER FROM /1 TO 8 IN "RESOLU" TO DEFINE THE NUMBER OF 1/4 INCH /INCREMENTS OF RESOLUTION DESIRED. /NO OTHER CHANGES SHOULD BE MADE WHEN ADJUSTING THE TIMING /OF THIS PROGRAM. /%RX MACHINE TIMING CONSTANTS *20 CHAN1, INSP /INSPECTOR LOCATION BUNCH1, CHOP /CHOP LOCATION, ZERO BY DEFINITION REJECT, REJ /REJECT GATE LOCATION STACK, STK /STACKER GATE LOCATION LOVER, LGTE /LOWER OVERLAP LOCATION UOVER, UGTE /UPPER OVERLAP LOVATION RESOLU, 4 /MEMORY RESOLUTION IN 1/4 INCH INC. MXCPSZ, MAXCHP /MAX CHOP SIZE FOR CHOP PULSE /MISSING TEST
/%RX SOFTWARE FLAGS (ZEROED AT PRESET) STAFLA, 0 /STACKER CHANGE-IN-PROGRESS FLAG SAMFLA, 0 /SAMPLE AT REJECT IN-PROG. FLAG SAMFLB, 0 /SAMPLE AT STACKER IN-PROG. FALG SAMFLC, 0 /SAMPLE AT STACKER IND. FLAG SAMFLD, 0 /COUNT SAMPLE IN STACKER FLAG SROFL, 0 /STACKER RUN-OUT FLAG SROFLG, 0 /STACKER RUNOUT IN PROGRESS FLAG OSPFLA, 0 /MEMORY OVERSPEED FLAG BUNFLA, 0 /BUNCH SERVICE-IN-PROGRESS FLAG KBDFLA, 0 /TELETYPE KEYBOARD SERVICE FLAG KBDBUF, 0 /KEYBOARD CHARACTER BUFFER AC, 0 /LOCATION TO SAVE C(AC) LINK, 0 /LOCATION TO SAVE C(LINK) SLCNT, 0 /SHEET LENGTH COUNTER CHOPX, 0 /"TOTAL" CHOP COUNTER; BINARY SAMX, 0 /"TOTAL" SAMPLE COUNTER; BINARY BOXX, 0 /"TOTAL" BOX COUNTER; BINARY REJX, 0 /"TOTAL" REJECT COUNTER; BINARY GOODX, 0 /"TOTAL" GOOD PRODUCT COUNTER; BINARY ERRSTA, 0 /ERROR STATUS WORD LASERR, 0 /PREVIOUS ERROR STATUS WORD CSTACK, 0 /STACKER MEMORY LOCATION - CALCULATED /%RX GENERAL SCRATCH LOCATIONS WKA, 0 /WORKING SCRATCH LOCATION #1 WKB, 0 /WORKING SCRATCH LOCATION #2 WKC, 0 /WORKING SCRATCH LOCATION #3 WKD, 0 /WORKING SCRATCH LOCATION #4 WKE, 0 /WORKING SCRATCH LOCATION #5
/%RX GENERAL STORAGE LOCATIONS (NON-ZERO PRESET) GSCNT, 0 /GOOD SHEET COUNTER BFF1, 0 /BUNCHER INPUT FLIP-FLOP BFF2, 0 /BUNCHER OUTPUT FLIP-FLOP BFF3, 0 /BUNCHER RESOLUTION FLIP-FLOP MEMPTR, 0 /CURRENT MEMORY ADDRESS CORS, 0 /CURRENT OUTPUT REGISTER STATUS CIRS, 0 /CURRENT INPUT REGISTER STATUS CMOCR, 0 /CURRENT MEMORY OUTPUT CONTROL REGISTER /STATUS CLOVER, 0 /LOWER BELT MEMORY LOCATION (CALC.) CUOVER, 0 /UPPER BELT MEMORY LOCATION (CALC.) CBELT, 0 /START OF UPPER BELT MEMORY (CALC.) RSCNT1, 0 /POWER FAIL IND RESET COUNTER (LO) RSCNT2, 0 / (HI) /%RX GENERAL STORAGE LOCATIONS (NO PRESET) NOSPBB, 175 /OCTAL NO. SHEETS PER BOX NOSPBD, 0445 /BCD NO. SHEETS PER BOX BUNCH2, 1 /BUNCH REINSERTION LOCATION ASLGTH, 70 /ACTIVE SHEET LENGTH TSLGTH, 70 /TENTATIVE SHEET LENGTH /%RX GENERAL CONSTANTS RSTIME, 7760 /ERROR IND RESET TIME (30 SEC)
/%RS START OF MAIN PROGRAM /%R PRINT TITLE & INITIALIZE MEMORY *0200 START, JMS PRE /PRESET MEMORY TABLES TAD (QTITLE /PRINT TITLE JMS I [STYPE /%RS HOLD LOOP /%R OVERSPEED FLAG SERVICE ROUTINE HLD, IOF /TURN INTERRUPT OFF CLB CMA RAL /SERVICE OVERSPEED FLAG (AC=7776) AND OSPFLA SNA CLA /OSPFLG = 2? INC OSPFLA /NO-INC IT NOP /NOP=SAFETY PRECAUTION /%R UPDATE CURRENT INPUT REG & STATUS WORD HLD01, TAD CIRS /GET UN-SERVICED FUNCTIONS HELD CMA /OVER FROM LAST HOLD LOOP CYCLE DCA CIRS /DO INCLUSIVE 'OR' WITH I.S.R. DBRI /SAVE AS NEW CURRENT INPUT STATUS DCA WKA TAD WKA AND (2777 DBCI /CLEAR INPUT STATUS REGISTER CLB TAD WKA /GET BACK THE READING CMA AND CIRS CMA DCA CIRS ION /ENABLE INTERRUPT
/%R DISPLAY OPTIONS HANDLER HLD02, LAS /READ DISPLAY REQUEST SZA CLA /ANY DISPLAY REQUESTED ? JMP HLD03 /YES MQL /NO-CLEAR DISPLAY JMP HLD17 /CONTINUE WITH HOLD LOOP HLD03, IAC SZA CLA /SR=7777? JMP HLD04 /NO, TEST FOR OTHER NUMBERS DCA ERRSTA /YES, CLEAR ERROR REGISTERS DCA LASERR MQL JMP HLD17 /CONTINUE WITH LOOP. HLD04, LAS AND (17 /MASK FOR MAX NUMBER TAD (TAD LASTBL DCA .+1 /SET UP ADDRESS TO GET DATA TAD LASTBL DCA LASX /SAVE ADDRESS TAD I LASX MQL JMP HLD17 LASX, NNN /LINK ADDRESS /DATA TABLE OF ADDRESS LASTBL, . CIRS CORS NOSPBB GSCNTB ASLGTH TSLGTH SLCNT ERRSTA LASERR CMOCR CHOPX SAMX REJX GOODX BOXX PAGE
/%R MANUAL STACKER CHANGE REQUEST HLD17, TAD CIRS AND [200 SNA CLA /STACK GATE CHANGE REQUESTED? JMP HLD19 /NO TAD STAFLA /YES SZA CLA /CHANGE IN PROGRESS? JMP HLD18 /YES-IGNORE REQUEST IOF /NO-TURN INTERRUPT OFF TAD CORS /CHANGE GATE POSITION RAL CML RAR /COMPLEMENT BIT 0 JMS I [OSRJT /SET INTO O.S.R. & CORS TAD CORS /CLEAR TRAY LIGHT SMA CLA /LOWER ? TAD (200 /NO, UPPER TAD (200 /YES. JMS I [MOCRSC /TURN LIGHT OFF TAD NOSPBB /RESET GOOD SHEET COUNTER = CIA /-NO. OF SHEETS PER BOX DCA GSCNT CLA IAC DCA STAFLA /SET STACKER FLAG JMS ITBC /UPDATE BOX COUNTER ION JMP HLD20 HLD19, TAD STAFLA /CHANGE NOT NEEDED SNA CLA /WAS CHANGE IN PROGRESS? JMP HLD20 /NO-IGNORE DCA STAFLA /YES-CLEAR STAFLA HLD18, IOF TAD CIRS /CLEAR CIRS BIT 4 AND [7577 DCA CIRS
/%R MANUAL SAMPLE AT STACKER REQUEST HLD20, TAD CIRS /READ BIT AND (4 /MASK BIT SNA CLA /SET ? JMP HLD21-1 /NO TAD SROFLG /YES, IS SRO IN PROGRESS? SZA CLA JMP HLD21 /YES, EXIT TAD SAMFLB /NO, IS SAMPLE IN PROGRESS? SZA CLA JMP HLD21 /YES, EXIT IOF /TURN OFF INTERRUPTS ISZ SAMFLB /SET IN PROGRESS FLAG ISZ SAMFLC /SET STACKER SAMPLE FLAG CLA CMA /ADD ONE TO BOX COUNT TAD GSCNT DCA GSCNT TAD [1000 /SET ACK LIGHT JMS I [MOCRSS TAD (600 /CLEAR LIGHTS JMS I [MOCRSC JMP HLD21 /EXIT DCA SAMFLB /CLEAR IN PROGRESS FLAG HLD21, IOF TAD CIRS /CLEAR BIT AND (7773 DCA CIRS ION /%R MANUAL SAMPLE AT REJECT REQUEST HLD23, TAD CIRS /READ BIT AND (100 SZA CLA /SET ? JMP .+3 /YES, NOW CHECK IF FLAG IS SET. DCA SAMFLA /NO, CLEAR THE FLAG JMP HLD24 /CLEAR BIT AND EXIT TAD SAMFLA /GET THE FLAG SZA CLA /SET ? JMP HLD24 /YES, EXIT IAC /NO, SET THE FLAG DCA SAMFLA CLB CML RAR /"TAKE" A REJECT DCA BFF1 HLD24, IOF TAD CIRS /GET WORD AND (7677 /MASK BIT OUT DCA CIRS /SAVE WORD ION JMP HLD25 PAGE
/%R STACKER RUNOUT SERVICE ROUTINE /OPERATION OF SRO, ALL PRODUCT MUST BE RUN OUT OF THE STACKER. HLD25, TAD CIRS /TEST INPUT REGISTER AND [400 SZA CLA /SRO ? JMP HLD26 /YES TAD SROFL /NO, TEST FLAG SZA CLA /FLAG SET ? JMS SROBX /YES, MOVE TBL1 TO TBL JMP HD26A /NO, CLEAR FLAG & EXIT HLD26, TAD SROFL SZA CLA /FLAG SET ? JMP HD26A+1 /YES, CLEAR BIT & EXIT, BUT DON'T CLEAR FLAG JMS SROAX /NO, MOVE TBL TO TBL1 IAC /SET FLAG HD26A, DCA SROFL /SET-CLEAR FLAG TAD CIRS /CLEAR BIT AND (7377 DCA CIRS JMP HLD27 /EXIT
/%R SRO DATA TABLE MOVERS /MOVE TBL TO TBL1 /CLEAR TBL, INSPECTOR TO CHOPPER /SAVE POINTERS SROAX, .-. IOF CLB JMS MOVE /SAVE THE TABLE TBL TBL1 -1000 JMS SROREJ /REJECT DURING SRO INSP CHOP JMS SAVEA /SAVE POINTERS ION JMP I SROAX /EXIT /MOVE TBL1 TO TBL /REJECT TBL CHOP TO STACK /RESTORE POINTERS /CLEAR ANY SAMPLE REQUESTS PENDING.... SROBX, .-. IOF CLB JMS MOVE /RESTORE THE TABLE TBL1 TBL -1000 JMS SROREJ /REJECT DURING SRO CHOP STK JMS RESA /RESTORE POINTERS TAD [1000 /CLEAR SAMPLE ACK LIGHT JMS I [MOCRSC DCA SAMFLA /CLEAR SAMPLE FLAGS DCA SAMFLB DCA SAMFLC ION JMP I SROBX /EXIT
/CALL BY: /JMS MOVE /FROM LOCATION /TO LOCATION /-COUNTER / /MOVE A TABLE FROM ONE PLACE /TO ANOTHER. MOVE, .-. CLB TAD I MOVE /GET FROM LOCATION DCA PTR1 /STORE INC MOVE TAD I MOVE /GET TO LOCATION DCA PTR2 /SAVE INC MOVE TAD I MOVE /GET COUNTER DCA CTR1 INC MOVE /SET RETURN LOCATION LOOP1, TAD I PTR1 /GET DCA I PTR2 /SAVE INC PTR1 /INCREMENT POINTERS INC PTR2 ISZ CTR1 /TEST FOR DONE JMP LOOP1 JMP I MOVE /EXIT PTR1, NNN PTR2, NNN CTR1, NNN /SET REJECTS INTO AN AREA OF A TBL /CALL BY: /JMS SROREJ /START LOCATION /END LOCATION SROREJ, .-. CLB TAD I SROREJ /GET STARTING LOCATION DCA PTR1 /SAVE INC SROREJ TAD I SROREJ /GET COUNTER CIA DCA PTR2 INC SROREJ LOOPC, TAD PTR1 /GET LOCATION JMS I [MSC /SENSE AND CLEAR CLB CMA INC PTR1 /INCREMENT LOCATION NOP /MUST, AS LOC MAY BE NEGATIVE.... TAD PTR1 TAD PTR2 SZA CLA /DONE ? JMP LOOPC /NO JMP I SROREJ /YES, EXIT. /SAVE POINTER SAVEA, .-. CLB TAD MEMPTR /GET POINTER DCA SAVET JMP I SAVEA /EXIT /RESTORE POINTER RESA, .-. CLB TAD SAVET DCA MEMPTR /RESTORE POINTER JMP I RESA /EXIT SAVET, NNN PAGE
/%R MEMORY ERROR INDICATOR RESET ROUTINE HLD27, CLB IAC RAL /AC=2 AND CORS SNA CLA /RESET NEED SERVICING? JMP HLD29 /NO ISZ RSCNT1 /YES-TIME TO TURN IF OFF SKP ISZ RSCNT2 JMP HLD29 /NO IOF /YES CLB IAC RAL /AC=2 JMS I [OSRSC /REMOVE ERROR BIT TAD RSTIME /RESET TIME INTERVAL DCA RSCNT2 TAD LASERR /GET LAST ERROR CMA DCA HD27A /SAVE RESULTS TAD ERRSTA /GET CURRENT ERROR AND HD27A TAD LASERR /COMBINE WITH LAST ERROR DCA LASERR /SHOW ALL ERRORS SINCE LAST CLEARED DCA ERRSTA /CLEAR ERRSTA ION JMP HLD29 HD27A, NNN
/%R PROCESSOR READ-WRITE TEST ROUTINE /TEST A DIFFERENT LOCATION /EACH TIME INTO THE PROGRAM. HLD28, . /START OF PROTECTED AREA HLD29, IOF /INTERRUPT NOT ALLOWED DURING TEST TAD ADDR TAD [200 SZA CLA /AT LOADER ADDRESS YET? JMP .+3 /NO TAD IADDR /YES-RESET TO INITIAL ADDRESS DCA ADDR TAD HLD28 CIA TAD ADDR SZA CLA /AT PROTECTED AREA YET? JMP .+3 /NO-USE ADDR AS IT IS TAD HLD34 /YES-SKIP PROTECTED ADDRESSES DCA ADDR TAD I ADDR /SAVE ORIGINAL CONTENTS OF ADDRESS DCA HLD31 /BEING TESTED TAD K2525 DCA I ADDR TAD I ADDR CLL RAL DCA I ADDR TAD I ADDR TAD K2525 CLL IAC DCA HLD32 /SAVE TEST RESULT (SHOULD BE 0) TAD HLD31 /RESTORE ORIGINAL CONTENTS DCA I ADDR INC ADDR /UPDATE ADDR FOR NEXT TEST TAD HLD32 SZA CLA /WAS TEST OK? JMP ESW02 /NO-FATAL ERROR-SET ERROR STATUS ION /YES-TURN INTERRUPT ON JMP HLD35 ADDR, NNN /TEST ADDRESS POINTER K2525, 2525 /TEST CONSTANT HLD31, NNN /STORAGE LOCATION HLD32, NNN / " " IADDR, 10 /PROCESSOR TEST INITIAL ADDRESS HLD34, . /END OF PROTECTED AREA
/%R PACKAGE SIZE SERVICE ROUTINE HLD35, DBRI 10 /READ BCD PACKAGE SIZE CIA TAD NOSPBD SNA CLA /NEW PACKAGE SIZE NEEDED? JMP HLD36 /NO DBRI 10 /YES DCA NOSPBD /SAVE NEW BCD PKG SIZE TAD NOSPBD IOF JMS BCDO /CONVERT IT TO OCTAL ION DCA NOSPBB /SAVE NEW OCTAL PKG SIZE /%R UPDATE CURRENT STACK SIZE HLD36, TAD GSCNTB CIA TAD NOSPBB /SHEETS PER BOX TAD GSCNT /MINUS GOOD SHEET COUNTER SNA CLA /NEED UPDATING? JMP HLD38 /NO TAD NOSPBB /YES-DO IT TAD GSCNT DCA GSCNTB JMP HLD38 GSCNTB, NNN /LAST GOOD SHEET COUNT (BINARY) /%R MEMORY RUNNING PULSE GENERATOR HLD38, IOF CLB TAD (40 JMS I [OSRSS TAD (40 JMS I [OSRSC ION JMP HLD39 PAGE
/%R KEYBOARD SERVICE ROUTINE HLD39, TAD KBDFLA SNA CLA /KEYBOARD NEED SERVICING? JMP HLD45 /NO DCA KBDFLA /YES-CLEAR FLAG NOP /BYPASS SERVICE, CHANGE TO "NOP" FOR SERVICE !!!! TAD KBDBUF TAD (-203 /WAS IT "^C" ? SZA CLA JMP HLD40 /NO, IOF /YES,TURN OFF INTERRUPT JMP OS8 /GO TO MONITOR HLD40, IOF TAD KBDBUF /DECODE CHARACTER TAD (-"* SZA CLA /WAS IT "*"? JMP HLD42 /NO-IGNORE IT DCA LINK /YES-SAVE 0 LINK DCA AC /SAVE 0 AC TAD (HLD42 /(ALREADY IOF) SET UP ODT RETURN DCA INH JMP ODT /GO TO ODT HLD42, ION /%R CHOP PULSE MISSING TEST HLD45, CLB /CLB REQD TAD SROFL /IN "SRO" ? SZA CLA JMP HLD47 /YES, CLEAR SLCNT TAD SLCNT /NO, TEST IF TAD MXCPSZ /SHEET LENGTH>MAX CHOP SMA CLA /SHEET LENGTH COUNT TOO HIGH? JMS ESW04 /YES-BUNCH PULSE MISSING HLD46, JMP HLD /CONTINUE HLD47, DCA SLCNT /CLEAR COUNTER JMP HLD /CONTINUE PAGE //////////////////////// // // /// END OF HOLD LOOP /// // // ////////////////////////
/%RS UTILITY ROUTINES /%R FATAL ERROR SHUT DOWN ROUTINE DIE, CLB /CHANGE INTERRUPT SERVICE POINTER TAD (DIE2 DCA INHP TAD (JMP I [DIE3 /CHANGE "TYPE" FINAL EXIT DCA TYPE4 /ROUTE ION NOP JMP .-1 DIE2, TSF /TPR CAUSED INTERRUPT? JMP RET /NO-IGNORE IT JMP TYPE /YES-SERVICE IT DIE3, CLB CMA /SET MQ=7777 MQL HLT /UNCONDITIONAL HALT JMP .-1 PAGE
/%R TELEPRINTER OUTPUT SET-UP ROUTINE /ENTER WITH AC=TEXT ADDRESS TO BE STORED IN TTYCUE STYPE, .-. DCA XKC /TEMP SAVE TEXT ADDRESS TAD (TTYCUE DCA XKA /SET POINTER TAD (TTYCUE-TTYEND DCA XKB /SET COUNTER STYPE1, TAD I XKA SNA CLA /THIS SLOT=0? JMP STYPE2 /YES-USE IT ISZ XKA /NO-UPDATE POINTER ISZ XKB /AT TTYEND? JMP STYPE1 /NO-LOOK FURTHER TAD (QM /YES-CUE "??" DCA I XKA JMP I STYPE STYPE2, TAD XKC /LOAD TTYCUE SLOT DCA I XKA TAD XKA TAD (-TTYCUE SZA CLA /EMPTY SLOT=1ST SLOT? JMP I STYPE /NO TLS JMP I STYPE
/%R TELEPRINTER INTERRUPT SERVICE ROUTINE TYPE, TAD TTYCUE SNA CLA /ANYTHING IN CUE? JMP TYPE4-1 /EXIT TAD I TTYCUE /YES-GET CHARACTER SNA /IS IT 0? JMP TYPE1 /YES-END OF CHARACTER STRING TLS /NO-ASCII CHARACTER-TYPE IT JMP RET TYPE1, TAD [TTYCUE /ROTATE AUTO INDEX TABLE: DCA WKA /SET OUTPUT POINTER TAD (TTYCUE+1 DCA WKB /SET INPUT POINTER TAD (TTYCUE-TTYEND DCA WKC /SET COUNTER TYPE2, TAD I WKB /ROTATE UP 1 SLOT DCA I WKA INC WKA /UPDATE OUTPUT POINTER INC WKB /UPDATE INPUT POINTER ISZ WKC /DONE? JMP TYPE2 /NO DCA TTYEND /YES-CLEAR LAST SLOT JMP TYPE /CHECK FOR NEW CHARACTER STRING TCF TYPE4, JMP RET XKA, NNN /STYPE & TYPE WORKING LOC XKB, NNN /STYPE & TYPE WORKING LOC XKC, NNN /STYPE & TYPE WORKING LOC /%RP CLEAR TELEPRINTER OUTPUT CUE TABLE CPOC, .-. TAD (TTYCUE DCA WKA /SET POINTER TAD (TTYCUE-TTYEND DCA WKB /SET COUNTER DCA I WKA /CLEAR 1 LOCATION INC WKA /UPDATE POINTER ISZ WKB /DONE? JMP .-3 /NO JMP I CPOC /YES, EXIT PAGE
/%R PRESET MEMORY SUBROUTINE PRE, .-. /ENTER ON SOFTWARE STARTUP CAF /CLEAR ALL FLAGS DBEI /ENABLE INTERRUPTS DR8-50 CLB TAD ISTAT0 /PRESET CURRENT INPUT STATUS DCA CIRS /REGISTER CMA DBCI /CLEAR INPUT STATUS REGISTER CLB TAD OSTAT0 JMS I [OSRJT /UPDATE O.S.R. & CORS TAD (STAFLA /ZERO PAGE 0 FLAGS DCA WKA /SET POINTER TAD (STAFLA-CSTACK-1 DCA WKB /SET COUNTER PREL, DCA I WKA /ZERO 1 FLAG INC WKA /UPDATE POINTER ISZ WKB /DONE? JMP PREL /NO TAD NOSPBB /PRESET GOOD SHEET COUNTER CIA DCA GSCNT CLA IAC /CALCULATE INTERNAL MEMORY POINTERS TAD STACK DCA CSTACK /CSTACK=STACK+1 TAD CSTACK TAD CSTACK DCA CBELT /CBELT=STACK+CSTACK+1 IAC TAD CSTACK TAD UOVER DCA CUOVER /CUOVER=UOVER+CSTACK+1 CLA STL CMA TAD STACK CIA TAD CUOVER TAD LOVER DCA CLOVER /CLOVER=CUOVER+LOVER+1-STACK DCA RSCNT1 TAD RSTIME DCA RSCNT2 JMS PRE01 /PRESET MEMORY TABLES JMS CPOC /CLEAR PRINTER OUTPUT CUE TABLE JMS LA120 /INITILIZE LA120 JMP I PRE ISTAT0, 0000 /DR8-50 INPUT STATUS FOR START-UP OSTAT0, 3400 /DR8-50 OUTPUT STATUS FOR START-UP
/%R PRESET MEMORY TABLES PRE01, .-. CLB CMA RTR /PRESET M.O.C.R. (AC=5777) JMS I [MOCRSC CLB CML RTR /AC=2000 JMS I [MOCRSS TAD [TBL /SET BOTH MEMORY TABLES = 0 DCA WKD /SET POINTER TAD (-2000 DCA WKE /SET COUNTER DCA I WKD /ZERO 1 WORD INC WKD /UPDATE POINTER ISZ WKE /DONE? JMP .-3 /NO DCA MEMPTR /YES-RESET MEMORY POINTER JMS PRE02 JMP I PRE01 PRE02, .-. /(ALSO USED AFTER POWER FAIL) TAD REJECT /PUT DEFECTS IN MEMORY TABLE CIA /FROM "CHAN1" TO "REJECT" TAD CHAN1 DCA WKE /SET COUNTER TAD CHAN1 DCA WKD /SET POINTER TAD WKD /ENTER DEFECT JMS I [MSB INC WKD /UPDATE POINTER NOP ISZ WKE /DONE? JMP .-5 /NO CLB IAC /YES-SET "BFF1" = DEFECT DCA BFF1 CLB IAC /SET "BFF2" = DEFECT DCA BFF2 JMP I PRE02
/%R POWER FAIL-DOWN POWER MEMORY ROUTINE PFL, CLB TAD (JMP I [PRS DCA INH /SET UP FOR POWER RETURN TAD CORS /SET OUTPUT STATUS TO REJECT AND (5775 /& POWER FAIL TAD (2 /MACHINE STOP BIT JMS I [OSRJT /UPDATE O.S.R. & CORS HLT /WAIT FOR POWER TO RETURN JMP .-1 /%R POWER FAIL-UP POWER MEMORY ROUTINE PRS, CLB CAF /CLEAR ALL FLAGS DBEI TAD CORS /GET CORS SAVED AT TIME OF PWR FAIL JMS I [OSRJT /UPDATE O.S.R. & CORS CLA CMA /AC=7777 DBCO 10 CLB TAD CMOCR /RESTORE DR8-51 OUTPUT DBSO 10 CLB JMS PRE02 /SET DEFECT FROM CHAN TO REJ GATE JMS ESW03 /SET BIT 3 IN ERROR STATUS WORD JMP HLD /RESUME NORMAL OPERATION /%R INITILIZE LA120 LA120, .-. CLB TAD (LA120X /GET ADDRESS OF TEXT STRING JMS I [STYPE JMP I LA120 /EXIT PAGE
/%R ERROR STATUS WORD SET-UP ROUTINES ESW, .-. /MEMORY OVERSPEED ERROR CLB TAD ERRSTA /TEST CURRENT STAT AND [4000 /MASK FOR OVERSPEED SZA CLA JMP I ESW /YES, OVERSPEED; EXIT CLB CMA RAR /NO, SET STATUS AC=3777 AND ERRSTA TAD [4000 DCA ERRSTA TAD (OSPD JMS I [STYPE JMS SME /SET MEMORY ERROR BIT 0 JMP I ESW ESW01, TAD ERRSTA /INTERRUPT ERROR AND (2000 SZA CLA JMP E01A /CLEAR INTERRUPT & EXIT CLB CMA RTR /(AC=5777) AND ERRSTA TAD (2000 DCA ERRSTA TAD (INTER JMS I [STYPE E01A, STR /CLEAR DISK INTERRUPT NOP SER NOP SDN NOP JMS SME /SET MEMORY ERROR BIT 1 JMP RET ESW02, TAD ERRSTA /PROCESSOR TEST FAILED-FATAL ERROR AND (6777 TAD [1000 DCA ERRSTA TAD (PROCE JMS I [STYPE JMS SME /SET MEMORY ERROR BIT 2 JMP DIE /GO TO FATAL ERROR SHUT DOWN ROUTINE ESW03, .-. /POWER FAIL OCCURRED TAD ERRSTA AND (7377 TAD [400 DCA ERRSTA TAD (PWRFE JMS I [STYPE JMS SME /SET MEMORY ERROR BIT 3 JMP I ESW03 ESW04, .-. /CHOP PULSE MISSING TAD ERRSTA AND [200 SZA CLA JMP E04A /EXIT TAD ERRSTA AND (7577 TAD [200 DCA ERRSTA TAD (BUMI IOF /(ENTERED WITH ION FROM HOLD LOOP) JMS I [STYPE JMS SME /SET MEMORY ERROR BIT 4 E04A, DCA SLCNT /CLEAR SHEET LENGTH COUNTER ION JMP I ESW04 ESW05, .-. /CHOP PULSE DURING SRO TAD ERRSTA AND (100 SZA CLA /DOES THIS CONDITION EXIST NOW ? JMP E05A /YES, DON'T PRINT ERROR AGAIN TAD ERRSTA AND (7677 TAD (100 DCA ERRSTA /NO, SET STATUS ON TAD (SROER JMS I [STYPE /PRINT MESSAGE JMS SME /SET ERROR BIT (STOP) JMS PRE02 /REJECT FROM CH1 TO REJECT E05A, JMP I ESW05 /EXIT PAGE
/%RP SET MEMORY ERROR BIT / IN CURRENT OUTPUT STATUS WORD SME, .-. /(ENTERED ONLY WITH INTERRUPT OFF) CLB IAC RAL /AC=2 JMS I [OSRSS /**** STOP MACHINE **** JMP I SME /%R INTERRUPT SERVICE ROUTINE /ENTER ON MOTION INTERRUPT OR ON PWR FAIL INS, SPL /POWER FAILURE? SKP /NO JMP PFL /YES-SERVICE IT IMMEDIATELY! DBRI /READ INPUT STATUS REGISTER AND [4000 SNA CLA /MOTION INTERRUPT? JMP INS03 /NO, CHECK FOR TTY INTERRUPT JMS MEM /YES, ROTATE AND SERVICE MEMORY TAD [4000 /CLEAR THE INPUT DBCI CLB /CLB REQD JMP INS04 INS03, TSF /PRINTER FLAG? SKP JMP TYPE /YES KSF /NO-TTY KEYBOARD FLAG? JMP ESW01 /NO-UNIDENTIFIED INTERRUPT CLA IAC /YES-SET KBDFLA DCA KBDFLA KRB DCA KBDBUF JMP RET INS04, CLB /AC=0 TAD OSPFLA /CHECK FOR MEMORY OVERSPEED SNA CLA JMS ESW /OVERSPEED ERROR DCA OSPFLA /NO ERROR-CLEAR OSPFLA TAD CIRS /REMOVE MOTION BITS FROM CIRS AND (3777 DCA CIRS /%R RETURN FROM INTERRUPT RET, CLB TAD LINK RAL /RESTORE LINK TAD AC /RESTORE C(AC) ION /TURN INTERRUPT BACK ON JMP I INH /RETURN TO MAIN PROGRAM PAGE
/%R OCTAL TO BCD CONVERSION SUBROUTINE /ENTER WITH AC=OCTAL NUMBER. EXIT WITH AC=BCD EQUIVALENT OBCD, .-. DCA OBCD1 TAD (TAD OBCD6 DCA OBCD3 CLL TAD [20 DCA OBCD5 TAD OBCD1 OBCD3, TAD OBCD1 SZL DCA OBCD1 CLA TAD OBCD5 RAL ISZ OBCD3 SNL JMP OBCD3-2 CLL RTL RTL TAD OBCD1 JMP I OBCD OBCD1, NNN /TEMP STORAGE FOR OBCD OBCD5, NNN /TEMP STORAGE FOR OBCD OBCD6, -1440 /-800: DECIMAL VALUES TABLE -620 /-400 -310 /-200 -144 /-100 -120 /- 80 -50 /- 40 -24 /- 20 -12 /- 10
/%R BCD TO OCTAL CONVERSION SUBROUTINE /ENTER WITH AC=BCD NUMBER. EXIT WITH AC=OCTAL EQUIVALENT BCDO, .-. DCA HIGH TAD HIGH AND (7400 CLL RTR DCA LOW TAD LOW RAR TAD LOW CIA TAD HIGH DCA HIGH TAD HIGH AND (7760 CLL RTR DCA LOW TAD LOW RAR TAD LOW CIA TAD HIGH JMP I BCDO HIGH, NNN /TEMP STORAGE FOR BCDO LOW, NNN /TEMP STORAGE FOR BCDO /%R MEMORY OUTPUT CONTROL REGISTER SETUP MOCRSS, .-. /SELECTIVELY SET BIT DBSO 10 DCA MOCRST TAD CMOCR CMA AND MOCRST TAD CMOCR DCA CMOCR JMP I MOCRSS MOCRSC, .-. /SELECTIVELY CLEAR BIT DBCO 10 CMA AND CMOCR DCA CMOCR JMP I MOCRSC
/%R OUTPUT STATUS REGISTER SETUP ROUTINES: OSRJT, .-. /OUTPUT STATUS REG JAM TRANSFER DCA SAVE TAD SAVE CMA DBCO CLB /CLB REQD TAD SAVE DBSO DCA CORS JMP I OSRJT OSRSS, .-. /OUTPUT STATUS REG SELECTIVE SET DBSO CLB /CLB REQD DBRO DCA CORS JMP I OSRSS OSRSC, .-. /OUTPUT STATUS REG SELECTIVE CLEAR DBCO CMA AND CORS DCA CORS JMP I OSRSC SAVE, NNN /TEMP STORAGE FOR O.S.R. UPDATE MOCRST, NNN /TEMP STORAGE FOR MEMORY OUTPUT /CONTROL REGISTER UPDATE PAGE
/%R ROTATE DEFECT & STACKER MEMORY /ALSO: 1) PROCESS BUNCH SIGNAL & 2) CHECK SHEET LENGTH MEM, .-. CLB CMA TAD MEMPTR /DECREMENT MEMORY POINTER DCA MEMPTR INC SLCNT /INCREMENT SHEET LENGTH COUNTER NOP JMS MSS /SERVICE GATES & SLOW SPEED BELTS DBRI /GET INPUT STATUS RTL SMA CLA /BUNCH BIT SET? JMP MEM02 /NO TAD SROFL /YES, TEST IF IN SRO SZA CLA JMS ESW05 /YES, ERROR !!!!!! TAD [1000 /NO, CLEAR BUNCH BIT IN I.S.R. DBCI CLB /CLB REQD TAD BUNFLA SZA CLA /BUNCH IN PROGRESS FLAG SET? JMP MEM02+1 /YES-GO ON; BUNCH NOT GONE SINCE /SERVICED. IT MUST DISAPPEAR BEFORE /SERVICING AGAIN. JMS ITCC /NO-SERVICE BUNCH. UPDATE TOTAL /CHOP COUNTER TAD BFF3 /SERVICE BUNCH "FLIP-FLOPS": TAD BFF1 /TRANSFER DEFECT INFO TO BFF2 DCA BFF2 TAD BFF3 /SAVE RESOLUTION DATA IN BFF1 DCA BFF1 /FOR NEXT SHEET DCA BFF3 TAD ASLGTH /RESET RESOLUTION ENABLE COUNTER CMA TAD RESOLU /RESOLUTION AREA IS THE NO. OF BITS DCA RESCTR /IN "RESOLU" PRIOR TO BUNCH POINT TAD BFF2 SZA CLA /REJECT JUST CHOPPED? JMP MEM04-1 /YES, COUNT REJECT TAD SAMFLD /SAMPLE SHEET? SZA CLA JMP .+3 /YES JMS ITPC /NO, UPDATE TOTAL PRODUCT COUNT JMP MEM2 JMS ITSC /UPDATE SAMPLE COUNT CLB /CLEAR FLAG DCA SAMFLD MEM2, TAD CSTACK /SET END-OF-SHEET BIT INTO JMS I [MSB /START OF GOOD SHEETS MEMORY SKP JMS ITRC /YES-UPDATE TOTAL REJECT COUNTER MEM04, TAD SLCNT /DOES THIS SHEET LENGTH EQUAL LAST? CIA TAD TSLGTH SZA CLA JMP MEM01 TAD SLCNT /YES-UPDATE SHEET LENGTH DCA ASLGTH TAD ASLGTH DCA BUNCH2 /UPDATE LOCATION OF BUNCH2 JMP .+3 MEM01, TAD SLCNT /NO-STORE SHEET LENGTH & LOOK /AGAIN. IT MUST BE THE SAME FOR 2 /CONSECUTIVE SHEETS TO CHANGE THE /ACTIVE SHEET LENGTH DCA TSLGTH DCA SLCNT /CLEAR SHEET LENGTH COUNTER CMA /SET BUNCH IN PROGRESS FLAG MEM02, DCA BUNFLA TAD BFF2 /LAST SHEET CHOPPED DEFECTIVE? SNA CLA JMP MEM07 /NO TAD SROFL /YES, TEST IF IN SRO SZA CLA JMP MEM07 /YES, DON'T CONTINUE REJECT STRING TAD BUNCH2 /NO, SET A BIT IN THE REJECT STRING JMS I [MSB MEM07, ISZ RESCTR /ARE WE IN THE RESOLUTION AREA? JMP MEM02B /NO-GO ON CLB CMA /YES-SET TO REPEAT TRAP UNTIL DCA RESCTR /BUNCH TIME TAD RESOLU CLL RAR SZL /FOR ODD RESOLUTION, PREJUDGE IT IAC /TOWARD CURRENT SHEET CIA JMS I [MSR SZA CLA /DEFECT IN RESOLUTION AREA? INC BFF3 /YES-SET BFF3 MEM02B, TAD BUNCH1 /DEFECT ON NEXT SHEET TO BE CHOPPED? JMS I [MSC /(CLEAR MEMORY BIT AFTER TEST) SNA CLA JMP MEM03 /NO INC BFF1 /YES-SET BFF1 CLA STL RAL /FLASH STROBE (AC=0001) ***************** JMS I [OSRSS /UPDATE O.S.R. & CORS MEM03, CLB CMA TAD CHAN1 /CLEAR MEMORY BIT BEFORE CHAN 1 JMS I [MSC /(IN CASE DATA WAS LEFT OVER FROM CLB /STACKER RUN OUT) (CLB REQD) TAD CIRS AND (40 SNA CLA /DEFECT IN CHAN 1? JMP MEM06 /NO TAD CHAN1 /SET DEFECT BIT FOR CHAN 1 JMS I [MSB MEM06, TAD CIRS AND (6707 /REMOVE DEFECT BITS FROM I.S.R. DCA CIRS CLA STL RAL /CLEAR BUNCH STROBE BIT (AC=0001) ************* JMS I [OSRSC JMP I MEM RESCTR, NNN /RESOLUTION ENABLE COUNTER PAGE
/%R PRODUCTION COUNTER HANDLER ITCC, .-. TAD SROFLG /NO ACCOUNTING DURING SRO SZA CLA JMP I ITCC TAD [20 /SET TOTAL SHEET CHOPPED COUNT JMS I [OSRSS TAD [20 JMS I [OSRSC INC CHOPX NOP JMP I ITCC /EXIT ITBC, .-. TAD SROFLG /NO ACCOUNTING DURING SRO SZA CLA JMP I ITBC TAD (100 /SET BOX COUNT PULSE JMS I [OSRSS TAD (100 JMS I [OSRSC INC BOXX NOP JMP I ITBC /EXIT ITSC, .-. TAD SROFLG /NO ACCOUNTING DURING SRO SZA CLA JMP I ITSC TAD [200 /SET SAMPLE COUNTER PULSE JMS I [OSRSS TAD [200 JMS I [OSRSC INC SAMX NOP JMP I ITSC /EXIT ITRC, .-. TAD SROFLG /NO ACCOUNTING DURING SRO SZA CLA JMP I ITRC CLB IAC RTL /SET REJECT COUNTER PULSE (AC=4) JMS I [OSRSS CLB IAC RTL JMS I [OSRSC INC REJX NOP JMP I ITRC /EXIT ITPC, .-. TAD SROFLG /NO ACCOUNTING DURING SRO SZA CLA JMP I ITPC TAD [10 /TOTAL PRODUCT COUNTER PULSE JMS I [OSRSS TAD [10 JMS I [OSRSC INC GOODX NOP JMP I ITPC /EXIT
/DR8-50/51 OUTPUT TEST SX, CLA CMA /AC=7777 DBCO DBCO 10 CLA IAC CLL A1, DBSO DBSO 10 DCA X1 JMS B1 /LOOP TAD X1 DBCO DBCO 10 RAL JMP A1 B1, .-. TAD (-100 DCA D1 B1A, ISZ C1 JMP .-1 ISZ D1 JMP B1A JMP I B1 C1, NNN D1, NNN X1, NNN PAGE
/%R SET A BIT IN MEMORY /ENTER WITH AC=DESIRED MEMORY LOCATION /(TO SET A DEFECT BIT INTO THE MEMORY ADDRESS FOR INSPECTOR /CHANNEL 1, CALL THIS SUBROUTINE WITH AC=VALUE CONTAINED /IN "CHAN1") MSB, .-. JMS MCA /GET WORD & BIT LOCATIONS TAD I WKA /GET DATA WORD CMA /'INCLUSIVE OR' WITH DESIRED BIT AND I WKB TAD I WKA DCA I WKA /STORE NEW DATA WORD JMP I MSB /%R SENSE FOR BIT & CLEAR MEMORY LOCATION /ENTER WITH AC=DESIRED MEMORY LOCATION. EXIT WITH AC=0 /IF BIT WAS 0 (NOT SET) OR WITH AC=-1 IF BIT WAS 1 (SET). /THE INTERROAGTED BIT IS CLEARED FOLLOWING THIS TEST. /(TO SENSE FOR A BIT AT THE MEMORY LOCATION FOR THE REJECT /GATE, CALL THIS SUBROUTINE WITH AC=VALUE CONTAINED IN /"REJECT") MSC, .-. JMS MCA /GET WORD & BIT LOCATIONS TAD I WKA /GET WORD FROM MEMORY AND I WKB /'AND' OUT DESIRED BIT SNA JMP I MSC /AC=0 IF DESIRED BIT = 0 CIA TAD I WKA /CLEAR TESTED BIT DCA I WKA CLB CMA JMP I MSC /AC=-1 IF DESIRED BIT = 1 /%R SENSE FOR BIT & DON'T CLEAR MEMORY LOCATION /ENTER WITH AC=DESIRED MEMORY LOCATION. EXIT WITH AC=0 /IF BIT WAS 0 (NOT SET) OR WITH AC=-1 IF BIT WAS 1 (SET). /(TO SENSE FOR A BIT AT THE MEMORY LOCATION FOR THE REJECT /GATE, CALL THIS SUBROUTINE WITH AC=VALUE CONTAINED IN /"REJECT") MSR, .-. JMS MCA /GET WORD & BIT LOCATIONS TAD I WKA /GET WORD FROM MEMORY AND I WKB /'AND' OUT DESIRED BIT SZA CLA CLL CMA /AC=-1 IF DESIRED BIT = 1 JMP I MSR /AC=0 IF DESIRED BIT = 0
/%R CALCULATE INTERNAL MEMORY ADDRESSES /ENTER WITH AC=DISPLACEMENT. /EXIT WITH WKA=WORD ADDRESS & WKB=BIT MASK ADDRESS MCA, .-. TAD MEMPTR /ADD DISPLACEMENT TO CURRENT DCA WKB /POINTER & TEMP SAVE TAD WKB RTR /ROTATE & EXTRACT RELATIVE RAR /WORD LOCATION FROM TABLE AND (777 TAD [TBL /ADD TABLE BASE ADDRESS DCA WKA /WKA=ADDRESS OF DATA WORD TAD WKB /EXTRACT DESIRED BIT LOCATION AND (7 TAD (MCA01 DCA WKB /ADDRESS OF BIT MASK JMP I MCA MCA01, 4000 /MASK FOR BIT 0: TABLE OF BIT MASKS 2000 /MASK FOR BIT 1 1000 /MASK FOR BIT 2 0400 /MASK FOR BIT 3 0200 /MASK FOR BIT 4 0100 /MASK FOR BIT 5 0040 /MASK FOR BIT 6 0020 /MASK FOR BIT 7
/%R UNSIGNED D.P. DECIMAL PRINT SETUP /CALLING SEQUENCE: JMS DPBAC /SUBROUTINE CALL / OUT ADDR /S.A. OF OUTPUT TABLE / HI ADDR /ADDRESS OF HIGH ORDER WORD / RETURN /RETURN (LINK & AC = 0) DPBAC, .-. CLB TAD I DPBAC /PICK UP ADDRESS OF OUTPUT TABLE DCA UDTAB INC DPBAC TAD I DPBAC /PICK UP ADDRESS OF HI ORDER WORD DCA UDGET TAD I UDGET /PICK UP BOTH WORDS DCA UDHIGH ISZ UDGET TAD I UDGET DCA UDLOW TAD (-10 /INITIALIZE DIGIT COUNTER FOR "8" DCA UDCNT TAD (UDCON1 /INITIALIZE TABLE OF POWERS OF TEN DCA UDPTR INC DPBAC /INDEX LINKAGE FOR CORRECT RETURN UDARND, TAD I UDPTR /PICK UP CURRENT POWER OF TEN FOR INC UDPTR /USE IN SUBTRACTION DCA UDHSUB TAD I UDPTR INC UDPTR DCA UDLSUB UDDO, CLL /DOUBLE PRECISION SUBTRACTION TAD UDLSUB TAD UDLOW DCA UDTEML RAL TAD UDHSUB TAD UDHIGH SNL /DID IT UNDERFLOW? JMP UDOUT /NO, COUNT IS DONE INC UDBOX /YES, COUNT NOT DONE YET. INDEX DCA UDHIGH /DIGIT & DEPOSIT REMAINING TAD UDTEML /PORTIONS OF WORD. DCA UDLOW JMP UDDO /GO BACK & SUBTRACT AGAIN UDOUT, CLA TAD UDBOX /PICK UP RESULTING DIGIT TAD ("0 /ADD "260" TO IT DCA I UDTAB /LOAD INTO OUTPUT TABLE INC UDTAB /INC OUTPUT TABLE POINTER DCA UDBOX /INITIALIZE DIGIT TO ZERO ISZ UDCNT /HAVE WE TYPED 8 DIGITS? JMP UDARND /NO-DETERMINE NEXT DIGIT JMP I DPBAC /YES
UDTAB, 0 /WORKING LOC FOR DPBAC UDCNT, 0 / " " " " UDHIGH, 0 / " " " " UDLOW, 0 / " " " " UDHSUB, 0 / " " " " UDLSUB, 0 / " " " " UDBOX, 0 / " " " " UDTEML, 0 / " " " " UDGET, 0 / " " " " UDPTR, 0 / " " " " /POWERS OF TEN TABLE (NEGATIVE) UDCON1, 3166 / - (10 000 000) BASE 10 4600 7413 / - ( 1 000 000) 6700 7747 / - ( 100 000) 4540 7775 / - ( 10 000) 4360 7777 / - ( 1 000) 6030 7777 / - ( 100) 7634 7777 / - ( 10) 7766 7777 / - ( 1) 7777 PAGE
/%R STACKER SERVICE SUBROUTINE /SERVICE: 1) STACKER GATE / 2) REJECT GATE / 3) SLOW SPEED GATE /ENTER FROM "MEM" EACH ENCODER PULSE MSS, .-. CLB DCA WKC TAD REJECT /BIT SET AT REJECT POSITION? JMS I [MSR /(RESTORE MEMORY AFTER TEST) SPA CLA CLB CML RTR /YES-SET BIT TO CLOSE REJECT DCA WKC /GATE FOR STATUS UPDATE (AC=2000) TAD STACK /BIT SET AT STACKER GATE? TAD CSTACK JMS I [MSC /(CLEAR MEMORY BIT AFTER TEST) SMA CLA JMP MSS01 /NO, SHEET END NOT AT GATE TAD SAMFLC /YES, STACKER SAMPLE PENDING ? SNA CLA JMP MSS1 /NO, COUNT SHEET TAD [1000 /CLEAR ACK LIGHT JMS I [MOCRSC TAD CORS /UPPER OR LOWER TRAY ? SMA CLA TAD (200 /UPPER TAD (200 /LOWER JMS I [MOCRSS /TURN ON LIGHT ISZ SAMFLD /SET SAMPLE ACCOUTING FLAG CLB DCA SAMFLC /CLEAR SAMPLE IND. FLAG MSS1, ISZ GSCNT /TEST GOOD SHEET COUNTER JMP MSS01 TAD CORS /TRAY FULL-CHANGE STACKER GATE RAL CML RAR JMS I [OSRJT TAD NOSPBB /RESET GOOD SHEET COUNTER CIA DCA GSCNT JMS ITBC /UPDATE BOX COUNTER TAD (600 /CLEAR STACKER SAMPLE LIGHTS JMS I [MOCRSC
MSS01, TAD CORS /GET CURRENT STACKER BIT AND [4000 TAD WKC DCA WKC /ADD TO STATUS UPDATE WORD TAD STACK /BIT SET AT "BELT" POSITION? JMS I [MSC /(CLEAR MEMORY BIT AFTER TEST) SMA CLA JMP MSS02 /NO TAD CORS /YES-UPPER BELT ACTIVE? SPA CLA JMP .+4 /NO-DO LOWER BELT TAD CBELT /YES-SET BIT AT UPPER BELT POSITION JMS I [MSB JMP MSS02 IAC /SET BIT AT LOWER BELT POSITION TAD CUOVER JMS I [MSB MSS02, TAD CUOVER /BIT SET AT UPPER BELT EXIT? JMS I [MSC /(CLEAR MEMORY BIT AFTER TEST) SMA CLA TAD [1000 /NO-TURN UPPER BELT ON TAD WKC /YES-ADD BIT TO STATUS UPDATE WORD DCA WKC TAD CLOVER /BIT SET AT LOWER BELT EXIT? JMS I [MSC /(CLEAR MEMORY BIT AFTER TEST) SMA CLA TAD [400 /NO-TURN LOWER BELT ON TAD WKC /YES-ADD BIT TO STATUS UPDATE WORD DCA WKC TAD WKC CMA AND (3400 JMS I [OSRSC TAD WKC /ADD BIT TO STATUS UPDATE WORD JMS I [OSRSS /UPDATE O.S.R. & CORS JMP I MSS PAGE
/%RS TELEPRINTER TEXT STORAGE QTITLE, .;215;212;212;"N;"O;".;" ;"2;"1; " ;"M;"E;"M;"O;"R;"Y " ;"-;" ;"V;"E;"R;"S;"I;"O;"N;" ;" ;"1;"A;215;212;212;212;0 INTER,.;215;212;"I;"N;"T;"E;"R;"R;"U;"P;"T; " ;"E;"R;"R;"O;"R;215;212;212;0 OSPD,.;215;212;"O;"V;"E;"R;"S;"P;"E;"E;"D; " ;"E;"R;"R;"O;"R;215;212;212;0 QM,.;215;212;"E;"R;"R;"O;"R;":;" ;"Q;"U;"E;" ; "F;"U;"L;"L;215;212;212;0 PWRFE,.;215;212;"P;"O;"W;"E;"R;" ;"F;"A;"I;"L; " ;"E;"R;"R;"O;"R;215;212;212;0 BUMI,.;215;212;"C;"H;"O;"P;" ;"P;"U;"L;"S;"E;" "M;"I;"S;"S;"I;"N;"G;215;212;212;0 PROCE,.;215;212;"P;"R;"O;"C;"E;"S;"S;"O;"R; " ;"F;"A;"I;"L;"U;"R;"E "-;"F;"A;"T;"A;"L;" ;"E;"R; "R;"O;"R;"!;215;212;"R;"E;"L;"O;"A;"D;" "P;"R;"O;"G;"R;"A;"M;"!;"!;215;212;212;0 SROER, . /CHOP PULSE DURING SRO 215;212;"C;"H;"O;"P;" ;"P;"U;"L;"S;"E " ;"D;"U;"R;"I;"N;"G;" ;"S;"R;"O 215;212;212;0 LA120X, . ESC;133;70;167 ESC;76 ESC;133;66;66;164 0 PAGE
/%RS MEMORY STORAGE TABLE NOPUNCH TBL, ZBLOCK 1000 /ZEROED AT PRESET, THEN SET=DEFECT /FROM "CHAN1" TO "REJECT". /SAVE SPACE FOR REST OF TABLE: /TOTAL TABLE = 1000 (8) WORDS /(LOCS 04000 - 04777) /%R SECONDARY STORAGE TABLE TBL1, ZBLOCK 1000 ENPUNCH PAGE
FIELD 1 /FORCE PAGE 0 FIELD 0 LITERALS



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search