100 SKP /YES, GO ON 110 JMP LOOP2 /NO, GO BACK 120 DLD; TMPTR2 /SAVE WHERE 130 DST; BEPTR /WE ARE 140 JMS I [CHECK] /CHECK AGAIN FOR NON-BLINK 150 JMP IN3 /CONTINUE CHECKING 160 EJECT 170 LOOP3, NEXTX; TMPTR2 /BUMP POINTER 180 BUMP; TMPTR2 /TO NEXT Y 190 IN3, STA /INDICATE BEGIN 200 JMS I [BSCAN] /WORK ON THIS Y 210 JMS I [TIMCHK] /CHECK TIME LIMIT 220 COMPARE /CHECK 230 BLINK3 /IF > THIS 240 JMP LOOP3 /NO, GO BACK 250 /IF TMPTR2 > BEPTR + BLINK1 THEN WE'RE OK-IT'S NOT A BLINK 260 DLD; TMPTR2 /GET CURRENT POINTER 270 DCM /COMPLEMENT 280 DAD; BEPTR /ADD ON WHERE WE WERE 290 DAD; BLINK1 /ADD ON CORRECTION FACTOR 300 SPA CLA /SKIP IF STILL MAYBE A BLINK 310 JMP I BLINKCHK /RETURN, NOT A BLINK 320 DLD; TMPTR2 /SAVE CURRENT POINTER 330 DST; TMPTR1 /FOR LATER USE 340 JMP IN4 /CONTINUE 350 360 LOOP4, NEXTX; TMPTR2 /BUMP POINTER 370 BUMP; TMPTR2 /TO NEXT Y 380 IN4, JMS I [BSCAN] /WORK ON THIS Y VALUE 390 JMS I [TIMCHK] /CHECK TIME LIMITS 400 COMPARE /CHECK 410 BLINK4 /IF < THAN THIS 420 SKP /SKIP IF YES 430 JMP LOOP4 /NO, GO BACK 440 LOAD; TMPTR2 /GET VALUE 450 EXTEND /FULL VALUE 460 CIA /INVERT FOR TEST 470 DCA I [TIMCHK] /SAVE IT 480 LOAD; TMPTR1 /GET OLD VALUE 490 EXTEND /FULL VALUE 500 TAD I [TIMCHK] /COMPARE 510 SPA CLA /SKIP IF POINTING DOWN 520 BLNKXT, JMP I BLINKCHK /NO, NOT A BLINK 530 EJECT 540 /IF TMPTR2-BPTR>BLINK2 THEN TMPTR1=BPTR+BLINK2 ELSE TMPTR1=TMPTR2 550 DLD; BPTR /GET BEGIN POINTER 560 DAD; BLINK2 /ADD ON THIS FACTOR 570 DCM /COMPLEMENT 580 DAD; TMPTR2 /ADD ON CURRENT POINTER 590 SMA /SKIP IF LESS THAN 600 JMP KEEPIT /JUMP IF OK 610 DLD; TMPTR2 /GET VALUE 620 JMP I [STORIT] /GO PUT IT IN 630 KEEPIT, DLD; BPTR /GET VALUE 640 DAD; BLINK2 /ADD ON OFFSET 650 JMP I [STORIT] /CONTINUE THERE 660 EJECT 670 PAGE 680 690 STORIT, DST; TMPTR1 /STORE FOR FIXUP PURPOSES 700 DST; PTR /UPDATE POINTER FOR EFFICIENCY 710 XLIST OFF 720 IFNZRO CHAN < 730 XLIST ON 740 LOAD; BPTR /NOW GET BLINK BEGIN 750 AND [6577] /AND OFF 760 TAD [1200] /OR IN 770 STORE; BPTR /STORE AS BLINK BEGINNING 780 LOAD; TMPTR1 /GET BLINK END 790 AND [6377] /AND OFF 800 TAD [1400] /OR IN 810 STORE; TMPTR1 /STORE AS BLINK END 820 LOAD; EPTR /GET THE FALSE END POINT 830 AND [7377] /THROW AWAY FALSE BITS 840 XLIST OFF > 850 IFZERO CHAN < 860 XLIST ON 870 DLD; BPTR /GET BEGIN POINTER 880 DAD; DPM1 /BACKUP TO X 890 DST; TMPTR3 /STASH IT 900 LOAD; TMPTR3 /GET THE WORD 910 AND [1777] /JUST A-D BITS 920 TAD [6000] /MAKE IT BLINK BEGIN 930 STORE; TMPTR3 /STORE IT BACK 940 DLD; TMPTR1 /GET END POINTER 950 DAD; DPM1 /BACKUP TO X 960 DST; TMPTR3 /STASH IT 970 LOAD; TMPTR3 /GET THE WORD 980 AND [5777] /REMOVE OLD BLINK BIT 990 TAD [2000] /OR IN A NEW ONE 1000 STORE; TMPTR3 /STORE IT BACK 1010 NEXTY; TMPTR3 /BUMP TO Y WORD 1020 LOAD; TMPTR3 /GET THE Y WORD 1030 CLL RAL /MOVE UP 1040 STL RAR /SET END BIT 1050 STORE; TMPTR3 /STORE IT BACK 1060 LOAD; EPTR /GET CURRENT END VALUE 1070 CLL RAL /MOVE UP 1080 CLL RAR /REMOVE END BIT 1090 XLIST OFF > 1100 XLIST ON 1110 STORE; EPTR /STORE BACK AS CLEAN POINT 1120 JMP I [BLNKXT] /RETURN 1130 EJECT