.TITLE PROCESS FLOW DEMONSTRATION ; DISPLAYS A SIMPLE DYNAMIC FLUID-FLOW SYSTEM CONSISTING OF ; TWO TANKS, A PUMP, DIVERTER VALVE AND PIPING ON AN ID-2212/C ; IMAGE DISPLAY SYSTEM. ; ALL NEW CODE: 10 MAY 77 ; MODIFICATIONS TO: 28 JULY 77 ; PROGRAMMER: KEN DINWIDDIE .MCALL .REGDEF .REGDEF .SBTTL EQUATES XREG =166000 YREG =166002 BPMR =166004 CSR =166006 DREG =166010 ASCMEM =5400 FILL =2041 FFY =45 OUTL =2047 FULL =55 .PAGE .SBTTL CREATE PLUMBING ; PFD: MOV #7777,@#BPMR ; ENABLE ALL BITS CLR @#XREG PFD1: CLR @#DREG ; ZERO BUFFER CMP @#XREG,#1000 BNE PFD1 MOV #FULL,@#CSR ; CLEAR IMAGE VIEWING WINDOW JSR PC,READY MOV #360,@#BPMR ; SET MASK GREEN MOV #100,@#YREG MOV #300,R0 MOV #40,XREG MOV R0,@#DREG ; LEFT WALL OF LEFT TANK MOV #220,@#XREG MOV R0,@#DREG ; RIGHT WALL OF LEFT TANK MOV #260,@#XREG MOV R0,@#DREG ; LEFT WALL OF RIGHT TANK MOV #440,@#XREG MOV R0,@#DREG ; RIGHT WALL OF RIGHT TANK MOV #FFY,@#CSR ; DISPLAY TANK WALLS JSR PC,READY MOV #40,@#XREG MOV #100,R0 CONE1: MOV R0,@#DREG ; BUILD LEFT CONE OF LEFT TANK DEC R0 CMP #47,R0 BNE CONE1 MOV #136,@#XREG CONE2: MOV R0,@#DREG ; BUILD RIGHT CONE OF LEFT TANK INC R0 CMP #101,R0 BNE CONE2 DEC R0 MOV #260,@#XREG CONE3: MOV R0,@#DREG ; BUILD LEFT CONE OF RIGHT TANK DEC R0 CMP #47,R0 BNE CONE3 MOV #356,@#XREG CONE4: MOV R0,@#DREG ; BUILD RIGHT CONE OF RIGHT TANK INC R0 CMP #101,R0 BNE CONE4 MOV #FILL,@#CSR ; SHOW CONES JSR PC,READY MOV #116,@#XREG MOV #EL1,R0 JSR PC,FILBUF ; OUTER LOWER LEFT ELBOW RUN1: MOV #10,@#DREG ; BOTTOM RUN CMP #626,@#XREG BNE RUN1 SUB #2,@#XREG MOV #EL2,R0 JSR PC,FILBUF ; OUTER LOWER RIGHT ELBOW MOV #FILL,@#CSR ; SHOW LOWER PIPE WALL JSR PC,READY MOV #136,@#XREG MOV #EL3,R0 JSR PC,FILBUF ; INNER LOWER LEFT ELBOW RUN2: MOV #20,@#DREG ; OTHER BOTTOM RUN WALL CMP #346,@#XREG BNE RUN2 MOV #374,@#XREG RUN2A: MOV #20,@#DREG CMP #624,@#XREG BNE RUN2A SUB #2,@#XREG MOV #EL4,R0 JSR PC,FILBUF MOV #356,@#XREG MOV #EL3,R0 JSR PC,FILBUF MOV #FILL,@#CSR ; SHOW UPPER WALL OF LOWER RUN JSR PC,READY MOV #336,@#XREG MOV #EL5,R0 JSR PC,FILBUF ; LEFT PIPE WALL OF RIGHT TANK MOV #FILL,@#CSR ; DISPLAY IT JSR PC,READY MOV #116,@#XREG MOV #EL6,R0 JSR PC,FILBUF ; UPPER LEFT OUTER ELBOW MOV #360,R0 RUN3: MOV R0,@#DREG ; UPPER WALL OF UPPER PIPE CMP #502,@#XREG BNE RUN3 RUN3A: DEC R0 MOV R0,@#DREG MOV R0,@#DREG CMP #350,R0 BNE RUN3A RUN3B: MOV R0,@#DREG CMP #574,@#XREG BNE RUN3B SUB #2,@#XREG MOV #EL7,R0 JSR PC,FILBUF ; UPPER RIGHT OUTER ELBOW MOV #FILL,@#CSR ; SHOW UPPER OUTER RUN JSR PC,READY MOV #136,@#XREG MOV #EL8,R0 JSR PC,FILBUF ; UPPER LEFT INNER ELBOW RUN4: MOV #350,@#DREG ; LOWER WALL OF UPPER PIPE CMP #456,@#XREG BNE RUN4 MOV #FILL,@#CSR ; SHOW UPPER PIPE LOWER WALL JSR PC,READY MOV #336,@#XREG MOV #EL9,R0 JSR PC,FILBUF RUN5: MOV #340,@#DREG CMP #456,@#XREG BNE RUN5 MOV #FILL,@#CSR ; SHOW UPPER WALL OF INNER PIPE JSR PC,READY MOV #356,@#XREG MOV #EL10,R0 JSR PC,FILBUF ; BUILD LOWER WALL OF UPPER PIPE MOV #330,R0 RUN6: MOV R0,@#DREG CMP #502,@#XREG BNE RUN6 RUN6A: INC R0 MOV R0,@#DREG MOV R0,@#DREG CMP #340,R0 BNE RUN6A RUN6B: MOV R0,@#DREG CMP #572,@#XREG BNE RUN6B SUB #2,@#XREG MOV #EL11,R0 JSR PC,FILBUF MOV #FILL,@#CSR ; SHOW LOWER WALL OF UPPER PIPE JSR PC,READY MOV #604,@#XREG MOV #PUMPLH,R0 JSR PC,FILBUF ; BUILD PUMP LOWER HOUSING MOV #FILL,@#CSR ; SHOW IT JSR PC,READY MOV #624,@#XREG MOV #PUMPUH,R0 JSR PC,FILBUF ; BUILD PUMP UPPER HOUSING MOV #FILL,@#CSR ; SHOW IT JSR PC,READY MOV #636,@#XREG MOV #PUMPLI,R0 JSR PC,FILBUF ; BUILD PUMP LOWER INLET MOV #FILL,@#CSR ; SHOW IT JSR PC,READY MOV #636,@#XREG MOV #PUMPUI,R0 JSR PC,FILBUF ; BUILD PUMP UPPER INLET MOV #FILL,@#CSR ; SHOW IT JSR PC,READY .PAGE .SBTTL FILL PLUMBING WITH FLUID ; ; MOV #42,@#XREG MOV #FLUID1,R0 JSR PC,FILBUF ; FLUID IN LEFT TANK MOV #262,@#XREG MOV #FLUID1,R0 JSR PC,FILBUF ; FLUID IN RIGHT TANK MOV #1400,@#BPMR ; SET MASK BLUE MOV #200,@#YREG ; MIDDLE OF TANKS MOV #FFY,@#CSR ; SHOW FLUID IN TANKS JSR PC,READY MOV #154,@#XREG MOV #11,@#YREG FLUID3: MOV #17,@#DREG ; BUILD LOWER PIPE FLUID CMP #624,@#XREG BNE FLUID3 MOV #FFY,@#CSR ; SHOW IT JSR PC,READY MOV #136,@#XREG MOV #FILET1,R0 JSR PC,FILLET ; FILL LOWER LEFT ELBOW MOV #356,@#XREG MOV #11,@#YREG MOV #FILET2,R0 JSR PC,FILBUF ; CORNER OF WYE MOV #FFY,@#CSR ; SHOW IT JSR PC,READY MOV #624,@#XREG MOV #FILET3,R0 JSR PC,FILLET ; FILL LOWER RIGHT ELBOW MOV #610,@#XREG MOV #150,@#YREG MOV #FLUID4,R0 JSR PC,FILBUF ; BUILD PUMP INLET MOV #FFY,@#CSR ; SHOW IT JSR PC,READY MOV #610,@#XREG MOV #FLUID5,R0 JSR PC,FILBUF ; BUILD PUMP OUTLET MOV #FFY,@#CSR ; SHOW IT JSR PC,READY MOV #572,@#XREG MOV #FILET4,R0 JSR PC,FILLET ; FILL UPPER RIGHT ELBOW MOV #536,@#XREG MOV #341,@#YREG FLUID6: MOV #347,@#DREG ; BUILD VALVE TO ELBOW CMP #572,@#XREG BNE FLUID6 MOV #FFY,@#CSR ; SHOW IT JSR PC,READY MOV #502,@#XREG MOV #THROAT,R0 JSR PC,FILLET ; FILL VALVE THROAT MOV #154,@#XREG MOV #357,@#YREG FLUID7: MOV #351,@#DREG ; BUILD UPPER PIPE FILL CMP #456,@#XREG BNE FLUID7 MOV #VALVEF,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; SHOW IT JSR PC,READY MOV #140,@#XREG MOV #FILET5,R0 JSR PC,FILLET ; FILL UPPER LEFT ELBOW MOV #200,@#YREG MOV #122,@#XREG MOV #LPIPEF,R0 JSR PC,FILBUF ; LEFT TANK FILLING MOV #FFY,@#CSR ; SHOW IT JSR PC,READY MOV #17,@#BPMR ; SET MASK RED MOV #456,@#XREG MOV #350,@#YREG MOV #337,@#DREG MOV #335,@#DREG MOV #FFY,@#CSR ; DISPLAY 1ST DIVERTER BLOCK JSR PC,READY MOV #462,@#XREG MOV #347,@#YREG MOV #FLAP1,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; DISPLAY 2ND DIVERTER BLOCK JSR PC,READY MOV #472,@#XREG MOV #346,@#YREG MOV #FLAP2,R0 JSR PC,FILBUF ; DISPLAY 3RD DIVERTER BLOCK MOV #FFY,@#CSR JSR PC,READY MOV #500,@#XREG MOV #345,@#YREG MOV #FLAP3,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; DISPLAY 4TH DIVERTER BLOCK JSR PC,READY MOV #510,@#XREG MOV #344,@#YREG MOV #FLAP4,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; DISPLAY 5TH DIVERTER BLOCK JSR PC,READY .PAGE .SBTTL CYCLIC ACTIVITY LOOP ; ; GRAPHICS NOW COMPLETE - CYCLE THROUGH ROTATING PUMP IMPELLER ; AND VALVE POSITIONS, CORRESPONDING FLUID FLOWS: ; CYCLE: MOV #12,CYCNT ; INITIALIZE CYCLE COUNTER CYCLE1: JSR PC,PUMPR ; ROTATE PUMP IMPELLER 22.5 DEGREES JSR PC,LEVEL ; CHANGE TANK LEVELS DEC CYCNT ; ACCOUNT FOR THIS PASS BEQ CYCLE2 JSR PC,DELAY ; WAIT 400 MILLISECONDS BR CYCLE1 CYCLE2: JSR PC,VALVE ; CHANGE VALVE POSITION AND FLOWS BR CYCLE ; AND KEEP CYCLING UNTIL OTHERWISE SPEC'D CYCNT: .WORD 0 ; CYCLE COUNTER STORAGE .PAGE .SBTTL PUMP IMPELLER ROTATER ; ; PUMPR: MOV ROTCNT,R0 ; PICK UP IMPELLER POSITION MOV #17,@#BPMR ; SET MASK RED JMP @IMTBLE(R0) ; AND MOVE IMPELLER AS REQUIRED IMP0: MOV #614,@#XREG MOV #IMPD7,R0 JSR PC,FILBUF CMP #6,ROTCNT BEQ IMP0A MOV #FILL+20,@#CSR ; ERASE 22.5 DEGREE PADDLE BR IMP0B IMP0A: MOV #FILL,@#CSR ; DISPLAY 22.5 DEGREE PADDLE IMP0B: JSR PC,READY MOV #632,@#XREG MOV #IMPD3,R0 JSR PC,FILBUF CMP #6,ROTCNT BEQ IMP0C MOV #FILL+20,@#CSR ; ERASE 112.5 DEGREE PADDLE BR IMP0D IMP0C: MOV #FILL,@#CSR ; DISPLAY 112.5 DEGREE PADDLE IMP0D: JSR PC,READY CMP #6,ROTCNT BNE IMP1 JMP PMPDON .PAGE IMP1: MOV #606,@#XREG IMP1A: MOV #150,@#DREG CMP #712,@#XREG BNE IMP1A TST ROTCNT BEQ IMP1B MOV #FILL+20,@#CSR ; ERASE HORIZONTAL PADDLE BR IMP1C IMP1B: MOV #FILL,@#CSR ; DISPLAY HORIZONTAL PADDLE IMP1C: JSR PC,READY MOV #130,@#YREG MOV #650,@#XREG MOV #170,@#DREG TST ROTCNT BEQ IMP1D MOV #FFY+20,@#CSR ; ERASE VERTICAL PADDLE BR IMP1E IMP1D: MOV #FFY,@#CSR ; DISPLAY VERTICAL PADDLE IMP1E: JSR PC,READY TST ROTCNT BEQ PMPDON .PAGE IMP2: MOV #614,@#XREG MOV #IMPD1,R0 JSR PC,FILBUF CMP #2,ROTCNT BEQ IMP2A MOV #FILL+20,@#CSR ; ERASE 157.5 DEGREE PADDLE BR IMP2B IMP2A: MOV #FILL,@#CSR ; DISPLAY 157.5 DEGREE PADDLE IMP2B: JSR PC,READY MOV #632,@#XREG MOV #IMPD5,R0 JSR PC,FILBUF CMP #2,ROTCNT BEQ IMP2C MOV #FILL+20,@#CSR ; ERASE 67.5 DEGREE PADDLE BR IMP2D IMP2C: MOV #FILL,@#CSR ; DISPLAY 67.5 DEGREE PADDLE IMP2D: JSR PC,READY CMP #2,ROTCNT BEQ PMPDON .PAGE IMP3: MOV #622,@#XREG MOV #163,R1 IMP3A: MOV R1,@#DREG DEC R1 CMP #134,R1 BNE IMP3A CMP #4,ROTCNT BEQ IMP3B MOV #FILL+20,@#CSR ; ERASE 135 DEGREE PADDLE BR IMP3C IMP3B: MOV #FILL,@#CSR ; DISPLAY 135 DEGREE PADDLE IMP3C: JSR PC,READY MOV #622,@#XREG MOV #135,R1 IMP3D: MOV R1,@#DREG INC R1 CMP #164,R1 BNE IMP3D CMP #4,ROTCNT BEQ IMP3E MOV #FILL+20,@#CSR ; ERASE 45 DEGREE PADDLE BR IMP3F IMP3E: MOV #FILL,@#CSR ; DISPLAY 45 DEGREE PADDLE IMP3F: JSR PC,READY CMP #4,ROTCNT BEQ PMPDON JMP IMP0 PMPDON: ADD #2,ROTCNT ; ADVANCE ROTATION COUNTER BIC #177771,ROTCNT ; ONLY 0, 2, 4 OR 6 VALID RTS PC IMTBLE: .WORD IMP0,IMP1,IMP2,IMP3 ; SELECTION TABLE ROTCNT: .WORD 0 ; IMPELLER ROTATION COUNT .PAGE .SBTTL TANK FLUID LEVEL ADJUSTER ; ; LEVEL: MOV #1400,@#BPMR ; SET MASK BLUE MOV VLVCNT,R0 ; PICK UP VALVE POSITION/FLOW INDICATOR JMP @LVLTBL(R0) ; ADJUST LEVEL APPROPRIATELY LVL0: MOV TANK1,@#YREG ADD #3,TANK1 ; RAISE LEFT TANK THREE LINES MOV #42,@#XREG LVL0A: MOV TANK1,@#DREG CMP #220,@#XREG BNE LVL0A MOV #FFY,@#CSR ; DISPLAY NEW HIGHER LEVEL JSR PC,READY MOV TANK2,@#YREG SUB #3,TANK2 ; LOWER RIGHT TANK THREE LINES MOV TANK2,R0 INC R0 MOV #262,@#XREG LVL0B: MOV R0,@#DREG CMP #440,@#XREG BNE LVL0B MOV #FFY+20,@#CSR ; DISPLAY NEW LOWER LEVEL JSR PC,READY RTS PC .PAGE LVL1: MOV TANK1,@#YREG ADD #2,TANK1 ; RAISE LEFT TANK TWO LINES MOV #42,@#XREG LVL1A: MOV TANK1,@#DREG CMP #220,@#XREG BNE LVL1A MOV #FFY,@#CSR ; DISPLAY NEW HIGHER LEVEL JSR PC,READY MOV TANK2,@#YREG SUB #2,TANK2 ; LOWER RIGHT TANK TWO LINES MOV TANK2,R0 INC R0 MOV #262,@#XREG LVL1B: MOV R0,@#DREG CMP #354,@#XREG BNE LVL1B ADD #4,@#XREG LVL1C: MOV R0,@#DREG CMP #440,@#XREG BNE LVL1C MOV #FFY+20,@#CSR ; DISPLAY NEW LOWER LEVEL JSR PC,READY RTS PC .PAGE LVL2: MOV TANK1,R0 SUB TANK2,R0 BEQ LVL2E ; IF LEVELS EQUAL, NO ACTION REQUIRED TST R0 BPL LVL2A ; TANK1 TOO HIGH MOV #262,@#XREG ; TANK2 TOO HIGH MOV TANK2,@#YREG DEC TANK2 MOV #350,R0 MOV #440,R1 MOV #42,R2 MOV #220,R3 MOV TANK1,R4 INC TANK1 BR LVL2B LVL2A: MOV TANK1,@#YREG MOV #42,@#XREG DEC TANK1 MOV #130,R0 MOV #220,R1 MOV #262,R2 MOV #440,R3 MOV TANK2,R4 INC TANK2 LVL2B: MOV @#YREG,@#DREG CMP R0,@#XREG BNE LVL2B ADD #10,@#XREG LVL2C: MOV @#YREG,@#DREG CMP R1,@#XREG BNE LVL2C MOV #FFY+20,@#CSR ; DISPLAY NEW LOWER LEVEL JSR PC,READY MOV R4,@#YREG INC R4 MOV R2,@#XREG LVL2D: MOV R4,@#DREG CMP R3,@#XREG BNE LVL2D MOV #FFY,@#CSR ; DISPLAY NEW HIGHER LEVEL JSR PC,READY LVL2E: RTS PC .PAGE LVL3: MOV TANK2,@#YREG ADD #2,TANK2 ; RAISE RIGHT TANK TWO LINES MOV #262,@#XREG LVL3A: MOV TANK2,@#DREG CMP #440,@#XREG BNE LVL3A MOV #FFY,@#CSR ; DISPLAY NEW HIGHER LEVEL JSR PC,READY MOV TANK1,@#YREG SUB #2,TANK1 ; LOWER LEFT TANK TWO LINES MOV TANK1,R0 INC R0 MOV #42,@#XREG LVL3B: MOV R0,@#DREG CMP #134,@#XREG BNE LVL3B ADD #4,@#XREG LVL3C: MOV R0,@#DREG CMP #220,@#XREG BNE LVL3C MOV #FFY+20,@#CSR ; DISPLAY NEW LOWER LEVEL JSR PC,READY RTS PC .PAGE LVL4: MOV TANK2,@#YREG ADD #3,TANK2 ; RAISE RIGHT TANK LEVEL THREE LINES MOV #262,@#XREG LVL4A: MOV TANK2,@#DREG CMP #440,@#XREG BNE LVL4A MOV #FFY,@#CSR ; DISPLAY NEW HIGHER LEVEL JSR PC,READY MOV TANK1,@#YREG SUB #3,TANK1 ; LOWER LEFT TANK THREE LINES MOV TANK1,R0 INC R0 MOV #42,@#XREG LVL4B: MOV R0,@#DREG CMP #220,@#XREG BNE LVL4B MOV #FFY+20,@#CSR ; DISPLAY NEW LOWER LEVEL JSR PC,READY RTS PC LVLTBL: .WORD LVL0,LVL1,LVL2,LVL3,LVL4,LVL3,LVL2,LVL1 ; SELECTION TABLE TANK1: .WORD 200 ; LEVEL IN TANK 1 (LEFT TANK) TANK2: .WORD 200 ; LEVEL IN TANK 2 (RIGHT TANK) .PAGE .SBTTL VALVE POSITION AND FLOW VARIATOR ; ; VALVE: MOV #17,@#BPMR ; SET MASK RED MOV VLVCNT,R0 ; GET NEXT POSITION POINTER JMP @VLVTBL(R0) ; SET TO NEW POSITION AND FLOW VLV0: MOV #331,@#YREG MOV #466,@#XREG MOV #DVLV0A,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; MOVE LOWER DIVERTER UP JSR PC,READY MOV #504,@#XREG MOV #340,@#DREG MOV #340,@#DREG MOV #341,@#DREG MOV #FILL+20,@#CSR ; MOVE LOWER DIVERTER UP (IN THROAT) JSR PC,READY MOV #345,@#YREG MOV #456,@#XREG MOV #DVLV0B,R0 JSR PC,FILBUF MOV #FFY,@#CSR JSR PC,READY ; MOVE UPPER DIVERTER UP MOV #1400,@#BPMR ; SET MASK BLUE MOV #100,@#YREG MOV #354,@#XREG MOV #323,@#DREG MOV #325,@#DREG MOV #FFY,@#CSR ; SHOW 1/4 FLOW TO RIGHT TANK JSR PC,READY MOV #360,@#XREG MOV #R4FLOW,R0 JSR PC,FILLET ; AROUND CORNER MOV #376,@#XREG MOV #331,@#YREG MOV #332,R0 VLV0A: MOV R0,@#DREG CMP #464,@#XREG BNE VLV0A MOV #331,@#DREG MOV #FFY,@#CSR ; AND ALONG RIGHT PIPE TO VALVE JSR PC,READY MOV #122,@#XREG MOV TANK1,@#YREG INC @#YREG MOV #342,@#DREG MOV #FFY+20,@#CSR JSR PC,READY ; CUT LEFT FLOW TO 3/4 JMP VLVDON .PAGE VLV1: MOV #462,@#XREG MOV #331,@#YREG MOV #DVLV1D,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; MOVE LOWER DIVERTER UP JSR PC,READY MOV #337,@#YREG MOV #502,@#XREG MOV #340,@#DREG MOV #340,@#DREG MOV #FFY+20,@#CSR ; MOVE LOWER DIVERTER UP (IN THROAT) JSR PC,READY MOV #504,@#XREG MOV #DVLV1A,R0 JSR PC,FILBUF MOV #FILL+20,@#CSR ; TO 1/2 FLOW POSITION JSR PC,READY MOV #345,@#YREG MOV #460,@#XREG MOV #DVLV1F,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; AND SHOW UPPER DIVERTER @ 1/2 FLOW ALSO JSR PC,READY MOV #1400,@#BPMR ; SET MASK BLUE MOV #100,@#YREG MOV #350,@#XREG MOV #DVLV1B,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; SHOW 1/2 FLOW TO RIGHT TANK JSR PC,READY MOV #360,@#XREG MOV #DVLV1C,R0 JSR PC,FILLET ; AROUND CORNER MOV #376,@#XREG MOV #331,@#YREG VLV1A: MOV #334,@#DREG CMP #462,@#XREG BNE VLV1A MOV #FFY,@#CSR ; AND ALONG RIGHT PIPE TO VALVE JSR PC,READY MOV TANK1,@#YREG INC @#YREG MOV #124,@#XREG MOV #345,@#DREG MOV #347,@#DREG MOV #FFY+20,@#CSR ; REDUCE LEFT FLOW TO 1/2 JSR PC,READY MOV #130,@#XREG MOV #DVLV1E,R0 JSR PC,CLRIT ; AROUND CORNER MOV #154,@#XREG MOV #357,@#YREG VLV1B: MOV #355,@#DREG CMP #450,@#XREG BNE VLV1B MOV #356,@#DREG MOV #357,@#DREG MOV #FFY+20,@#CSR ; AND ALONG LEFT PIPE TO VALVE JSR PC,READY JMP VLVDON .PAGE VLV2: MOV #331,@#YREG MOV #460,@#XREG MOV #DVLV2A,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; MOVE LOWER DIVERTER UP JSR PC,READY MOV #500,@#XREG MOV #DVLV2B,R0 JSR PC,FILBUF MOV #FILL+20,@#CSR ; MOVE LOWER DIVERTER (THROAT) UP JSR PC,READY MOV #462,@#XREG MOV #345,@#YREG MOV #DVLV2C,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; MOVE UPPER DIVERTER JSR PC,READY MOV #1400,@#BPMR ; SET MASK BLUE MOV #100,@#YREG MOV #344,@#XREG MOV #RPIPEF+1,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; SHOW 3/4 FLOW TO RIGHT TANK JSR PC,READY MOV #360,@#XREG MOV #RPIPEL,R0 JSR PC,FILLET ; AROUND CORNER MOV #331,@#YREG MOV #376,@#XREG VLV2A: MOV #337,@#DREG CMP #456,@#XREG BNE VLV2A MOV #336,@#DREG MOV #FFY,@#CSR ; AND ALONG RIGHT PIPE TO VALVE JSR PC,READY MOV TANK1,@#YREG INC @#YREG MOV #130,@#XREG MOV #351,@#DREG MOV #352,@#DREG MOV #FFY+20,@#CSR ; REDUCE LEFT TANK FLOW TO 1/4 JSR PC,READY MOV #134,@#XREG MOV #DVLV2D,R0 JSR PC,CLRIT ; AROUND THE CORNER MOV #154,@#XREG MOV #357,@#YREG MOV #353,R0 VLV2B: MOV R0,@#DREG CMP #450,@#XREG BNE VLV2B VLV2C: INC R0 MOV R0,@#DREG CMP #357,R0 BNE VLV2C MOV #FFY+20,@#CSR ; AND ALONG LEFT PIPE TO VALVE JSR PC,READY JMP VLVDON .PAGE VLV3: MOV #331,@#YREG MOV #456,@#XREG MOV #DVLV3A,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; MOVE LOWER DIVERTER UP JSR PC,READY MOV #500,@#XREG MOV #DVLV3B,R0 JSR PC,FILBUF MOV #FILL+20,@#CSR JSR PC,READY ; MOVE LOWER DIVERTER (THROAT) UP MOV #345,@#YREG MOV #466,@#XREG MOV #DVLV3C,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; MOVE UPPER DIVERTER UP JSR PC,READY MOV #1400,@#BPMR ; SET MASK BLUE MOV #100,@#YREG MOV #342,@#XREG MOV #322,@#DREG MOV #FFY,@#CSR ; SHOW FULL FLOW TO RIGHT JSR PC,READY MOV TANK1,@#YREG INC @#YREG MOV #122,@#XREG MOV #LPIPEF,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; SHUT OFF FLOW TO LEFT JSR PC,READY MOV #140,@#XREG MOV #FILET5,R0 JSR PC,CLRIT ; AROUND CORNER MOV #154,@#XREG MOV #357,@#YREG VLV3A: MOV #351,@#DREG CMP #456,@#XREG BNE VLV3A MOV #DVLV3D,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; AND ALONG LEFT PIPE TO VALVE JSR PC,READY JMP VLVDON .PAGE VLV4: MOV #357,@#YREG MOV #466,@#XREG MOV #DVLV4A,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; MOVE UPPER DIVERTER DOWN JSR PC,READY MOV #504,@#XREG MOV #DVLV4D,R0 JSR PC,FILBUF MOV #FILL+20,@#CSR ; MOVE UPPER DIVERTER (THROAT) DOWN JSR PC,READY MOV #343,@#YREG MOV #456,@#XREG MOV #DVLV4B,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; MOVE LOWER DIVERTER DOWN JSR PC,READY MOV #1400,@#BPMR ; SET MASK BLUE MOV #100,@#YREG MOV #134,@#XREG MOV #343,@#DREG MOV #345,@#DREG MOV #FFY,@#CSR ; SHOW 1/4 FLOW TO LEFT JSR PC,READY MOV #140,@#XREG MOV #DVLV4C,R0 JSR PC,FILLET ; AROUND CORNER MOV #154,@#XREG MOV #351,@#YREG MOV #352,R0 VLV4A: MOV R0,@#DREG CMP #450,@#XREG BNE VLV4A VLV4B: INC R0 MOV R0,@#DREG CMP #355,R0 BNE VLV4B MOV #FFY,@#CSR JSR PC,READY INC @#YREG MOV #456,@#XREG MOV #356,@#DREG MOV #FFY,@#CSR JSR PC,READY MOV #460,@#XREG MOV #357,@#YREG MOV #DVLV3D+1,R0 JSR PC,FILBUF MOV #FFY,@#CSR JSR PC,READY ; AND ALONG LEFT PIPE TO VALVE MOV TANK2,@#YREG INC @#YREG MOV #342,@#XREG MOV #322,@#DREG MOV #FFY+20,@#CSR ; REDUCE RIGHT FLOW TO 3/4 JSR PC,READY JMP VLVDON .PAGE VLV5: MOV #357,@#YREG MOV #462,@#XREG MOV #DVLV5A,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; MOVE UPPER DIVERTER DOWN JSR PC,READY MOV #356,@#YREG MOV #502,@#XREG MOV #350,@#DREG MOV #350,@#DREG MOV #FFY+20,@#CSR JSR PC,READY MOV #504,@#XREG MOV #DVLV5B,R0 JSR PC,FILBUF MOV #FILL+20,@#CSR ; MOVE UPPER DIVERTER (THROAT) DOWN JSR PC,READY MOV #343,@#YREG MOV #460,@#XREG MOV #DVLV5C,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; MOVE LOWER DIVERTER DOWN JSR PC,READY MOV #1400,@#BPMR ; SET MASK BLUE MOV #100,@#YREG MOV #130,@#XREG MOV #DVLV5D,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; SHOW 1/2 FLOW TO LEFT TANK JSR PC,READY MOV #140,@#XREG MOV #DVLV5E,R0 JSR PC,FILLET ; AROUND CORNER MOV #351,@#YREG MOV #154,@#XREG MOV #354,R0 VLV5A: MOV R0,@#DREG CMP #450,@#XREG BNE VLV5A VLV5B: INC R0 MOV R0,@#DREG CMP #357,R0 BNE VLV5B MOV #FFY,@#CSR JSR PC,READY MOV #454,@#XREG MOV #357,@#DREG MOV #357,@#DREG MOV #FILL,@#CSR ; AND ALONG LEFT PIPE TO VALVE JSR PC,READY MOV TANK2,@#YREG INC @#YREG MOV #342,@#XREG MOV #DVLV5F,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; REDUCE RIGHT TANK FLOW TO 1/2 JSR PC,READY MOV #350,@#XREG MOV #DVLV5G,R0 JSR PC,CLRIT ; AROUND CORNER MOV #372,@#XREG MOV #335,@#YREG VLV5C: MOV #337,@#DREG CMP #456,@#XREG BNE VLV5C MOV #336,@#DREG MOV #FFY+20,@#CSR ; AND ALONG RIGHT PIPE TO VALVE JSR PC,READY JMP VLVDON .PAGE VLV6: MOV #357,@#YREG MOV #460,@#XREG MOV #DVLV6A,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; MOVE UPPER DIVERTER DOWN JSR PC,READY MOV #500,@#XREG MOV #DVLV6B,R0 JSR PC,FILBUF MOV #FILL+20,@#CSR JSR PC,READY ; MOVE UPPER DIVERTER (THROAT) DOWN MOV #343,@#YREG MOV #462,@#XREG MOV #DVLV6C,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; MOVE LOWER DIVERTER DOWN JSR PC,READY MOV #1400,@#BPMR ; SET MASK BLUE MOV #100,@#YREG MOV #124,@#XREG MOV #LPIPEF+1,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; INCREASE LEFT TANK FLOW TO 3/4 JSR PC,READY MOV #140,@#XREG MOV #FILET5,R0 JSR PC,FILLET ; AROUND CORNER MOV #351,@#YREG MOV #154,@#XREG VLV6A: MOV #357,@#DREG CMP #456,@#XREG BNE VLV6A MOV #FFY,@#CSR ; AND ALONG LEFT PIPE TO VALVE JSR PC,READY MOV TANK2,@#YREG INC @#YREG MOV #342,@#XREG MOV #DVLV6D,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; REDUCE RIGHT TANK FLOW TO 1/4 JSR PC,READY MOV #354,@#XREG MOV #DVLV6E,R0 JSR PC,CLRIT ; AROUND CORNER MOV #372,@#XREG MOV #333,@#YREG VLV6B: MOV #337,@#DREG CMP #456,@#XREG BNE VLV6B MOV #336,@#DREG MOV #334,@#DREG MOV #FFY+20,@#CSR ; AND ALONG RIGHT PIPE TO VALVE JSR PC,READY BR VLVDON .PAGE VLV7: MOV #357,@#YREG MOV #456,@#XREG MOV #DVLV7A,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR ; MOVE UPPER DIVERTER DOWN JSR PC,READY MOV #500,@#XREG MOV #DVLV7B,R0 JSR PC,FILBUF MOV #FILL+20,@#CSR ; MOVE UPPER DIVERTER (THROAT) DOWN JSR PC,READY MOV #343,@#YREG MOV #466,@#XREG MOV #DVLV7C,R0 JSR PC,FILBUF MOV #FFY,@#CSR ; MOVE LOWER DIVERTER DOWN JSR PC,READY MOV #1400,@#BPMR ; SET MASK BLUE MOV #100,@#YREG MOV #122,@#XREG MOV #342,@#DREG MOV #FFY,@#CSR ; SHOW LEFT TANK FLOW FULL JSR PC,READY MOV TANK2,@#YREG INC @#YREG MOV #342,@#XREG MOV #RPIPEF,R0 JSR PC,FILBUF MOV #FFY+20,@#CSR JSR PC,READY ; SHUT OFF RIGHT TANK FLOW MOV #360,@#XREG MOV #RPIPEL,R0 JSR PC,CLRIT ; AROUND CORNER MOV #374,@#XREG MOV #331,@#YREG VLV7A: MOV #332,@#DREG CMP #464,@#XREG BNE VLV7A MOV #331,@#DREG MOV #FFY+20,@#CSR ; AND ALONG RIGHT PIPE TO VALVE JSR PC,READY .PAGE VLVDON: ADD #2,VLVCNT BIC #177761,VLVCNT ; ONLY EVEN 0-16 VALID RTS PC VLVTBL: .WORD VLV0,VLV1,VLV2,VLV3,VLV4,VLV5,VLV6,VLV7 ; SELECTION TABLE VLVCNT: .WORD 0 ; VALVE POSITION AND FLOW INDICATOR .PAGE .SBTTL MISCELLANEOUS SUBROUTINES ; ; READY: TSTB @#CSR BPL READY RTS PC ; ; FILBUF: MOVB (R0)+,R1 BEQ FILB1 MOV R1,@#DREG ; FILL BUFFER WITH NON-ZERO BYTES BR FILBUF FILB1: RTS PC ; ; FILLET: MOVB (R0)+,@#YREG BEQ FILL1 MOVB (R0)+,@#DREG MOV @#XREG,R1 MOV #FFY,@#CSR ; SHOW VERTICAL LINE JSR PC,READY MOV R1,@#XREG BR FILLET FILL1: RTS PC .PAGE CLRIT: MOVB (R0)+,@#YREG BEQ CLRIT1 MOVB (R0)+,@#DREG MOV @#XREG,R1 MOV #FFY+20,@#CSR ; ERASE ONE VERTICAL LINE JSR PC,READY MOV R1,@#XREG BR CLRIT CLRIT1: RTS PC ; ; DELAY: MOV #77777,R0 DELAY1: NOP NOP DEC R0 BNE DELAY1 RTS PC .PAGE .SBTTL DATA STRINGS .NLIST BIN ; DON'T BOTHER WITH BYTE EXPANSIONS EL1: .BYTE 50,26,23,21,17,16,15,14,13,13,12,12,11,11,11,0 EL2: .BYTE 10,11,11,11,12,12,13,13,14,15,16,20,22,25,126,0 EL3: .BYTE 50,27,24,23,22,21,21,21,0 EL4: .BYTE 20,21,21,21,22,23,26,126,0 EL5: .BYTE 50,26,23,21,0 EL6: .BYTE 310,342,345,347,351,352,353,354,355,355,356,356,357,357,357,0 EL7: .BYTE 350,347,347,347,346,346,345,345,344,343,342,340,336,333,166,0 EL8: .BYTE 310,341,344,345,346,347,347,347,0 EL9: .BYTE 310,322,325,327,331,332,333,334,335,335,336,336,337,337,337,0 EL10: .BYTE 310,321,324,325,326,327,327,327,0 EL11: .BYTE 340,337,337,337,336,335,332,150,0 PUMPLH: .BYTE 151,145,142,140,136,135,134,133,132,132,131,131,130 .BYTE 130,130,127,127,127,127,127,127,127,130,130,130,131,131,132,132 .BYTE 133,134,135,136,140,142,145,151,0 PUMPUH: .BYTE 165,166,166,167,167,170 .BYTE 170,170,171,171,171,171,171,171,171,170,170,170 .BYTE 167,167,166,166,165,164,163,161,157,154,147,0 PUMPLI: .BYTE 151,147,145,145,144,144,144,145,146,151,0 PUMPUI: .BYTE 147,151,153,153,154,154,154,153,152,147,0 FLUID1: .BYTE 100,77,76,75,74,73,72,71,70,67,66,65,64,63,62,61,60,57,56,55,54 .BYTE 53,52,51,26,23,21,17,16,15,14,51,52,53,54,55,56,57,60,61,62 .BYTE 63,64,65,66,67,70,71,72,73,74,75,76,77,100,0 FILET1: .BYTE 14,26,13,23,13,22,12,21,12,20,12,20,11,20,0 FILET2: .BYTE 26,23,22,21,20,20,20,0 FILET3: .BYTE 11,20,12,20,12,20,12,21,13,22,12,23,14,26,0 FLUID4: .BYTE 145,142,140,136,135,134,133,133,132,132,131,131,131,14,15,16,17 .BYTE 21,23,26,131,131,131,132,132,133,133,134,135,136,140,142,145,0 FLUID5: .BYTE 344,343,342,341,337,335,332,165,166,166,167,167,167,170,170,170 .BYTE 170,170,170,170,167,167,167,166,166,165 .BYTE 165,164,163,162,160,156,153,0 FILET4: .BYTE 340,347,340,346,340,346,337,346,336,345,335,345,332,344,0 VALVEF: .BYTE 337,335,333,332,331,331,331,331,331,331,0 THROAT: .BYTE 332,356,332,356,333,355,333,355,334,354,334,354,335,353 .BYTE 335,353,336,352,336,352,337,351,337,351,340,350,340,350,0 FILET5: .BYTE 342,354,345,355,346,355,347,356,350,356,350,356,350,357,0 LPIPEF: .BYTE 342,345,347,351,352,353,354,0 IMPD1: .BYTE 157,156,156,155,155,154,154,153,153,152,152,151,151,150,150,150 .BYTE 147,147,146,146,145,145,144,144,143,143,142,142,141,0 IMPD3: .BYTE 166,164,162,160,156,154,152,147,145,143,141,137,135,133,132,0 IMPD5: .BYTE 132,134,136,140,142,144,146,151,153,155,157,161,163,165,166,0 IMPD7: .BYTE 141,142,142,143,143,144,144,145,145,146,146,147,147,150,150 .BYTE 150,151,151,152,152,153,153,154,154,155,155,156,156,157,0 FLAP1: .BYTE 333,332,331,332,0 FLAP2: .BYTE 333,334,335,0 FLAP3: .BYTE 336,337,340,340,0 FLAP4: .BYTE 341,342,343,344,0 R4FLOW: .BYTE 322,326,325,327,326,330,327,331,330,331,330,332,330,332,0 DVLV0A: .BYTE 332,333,333,334,335,336,0 DVLV0B: .BYTE 351,352,351,351,350,350,350,347,347,346,346,346,345,345,0 DVLV1A: .BYTE 340,341,342,342,343,0 DVLV1B: .BYTE 323,325,327,330,0 DVLV1C: .BYTE 322,331,325,332,326,332,327,333,330,333,330,333,330,334,0 DVLV1D: .BYTE 333,334,334,335,336,336,337,337,0 DVLV1E: .BYTE 344,361,346,362,350,353,351,354,352,354,352,355,353,355 .BYTE 354,356,354,356,355,356,0 DVLV1F: .BYTE 353,354,353,353,352,351,351,350,350,347,347,346,345,345,0 DVLV2A: .BYTE 335,336,336,337,337,337,340,340,341,0 DVLV2B: .BYTE 341,341,341,342,342,343,0 DVLV2C: .BYTE 355,356,355,354,354,353,352,351,351,350,347,346,346,345,0 RPIPEF: .BYTE 322,325,327,331,332,333,334,0 RPIPEL: .BYTE 322,334,325,335,326,335,327,336,330,336,330,336,330,337,0 DVLV2D: .BYTE 344,353,346,354,347,354,350,355,351,355,352,356,352,356 .BYTE 353,356,0 DVLV3A: .BYTE 337,337,340,340,340,340,341,341,341,342,0 DVLV3B: .BYTE 342,342,342,342,343,0 DVLV3C: .BYTE 357,356,355,354,353,352,351,350,350,347,346,345,0 DVLV3D: .BYTE 352,354,356,357,0 DVLV4A: .BYTE 356,355,355,354,353,352,0 DVLV4B: .BYTE 337,336,337,337,340,340,340,341,341,342,342,342,343,343,0 DVLV4C: .BYTE 342,346,345,347,346,350,347,351,350,351,350,352,350,352,0 DVLV4D: .BYTE 351,350,347,0 DVLV5A: .BYTE 355,354,354,353,352,352,351,351,0 DVLV5B: .BYTE 350,347,346,346,345,0 DVLV5C: .BYTE 335,334,335,335,336,337,337,340,340,341,341,342,343,343,0 DVLV5D: .BYTE 343,345,347,350,0 DVLV5E: .BYTE 342,351,345,352,346,352,347,353,350,353,350,353,350,354,0 DVLV5F: .BYTE 322,325,327,0 DVLV5G: .BYTE 324,331,326,332,330,333,331,334,332,334,333,335,333,335,334,336 .BYTE 334,336,334,336,0 DVLV6A: .BYTE 353,352,352,351,351,351,350,350,347,0 DVLV6B: .BYTE 347,347,347,346,346,345,0 DVLV6C: .BYTE 333,332,333,334,334,335,336,337,337,340,341,342,342,343,0 DVLV6D: .BYTE 322,325,327,331,332,0 DVLV6E: .BYTE 324,333,326,334,327,334,330,335,331,335,332,336,332,336,333,336 .BYTE 0 DVLV7A: .BYTE 351,351,350,350,350,350,347,347,347,346,0 DVLV7B: .BYTE 346,346,346,346,345,0 DVLV7C: .BYTE 331,332,333,334,335,336,337,340,340,341,0 .LIST BIN .END PFD