C PROGRAM MOVSTG.FT C ----------------------- C C C P. LEMKIN C NIH C BETHESDA, MD 20014 C C DEC 22, 1977 C C C C PURPOSE C ------- C MOVE THE STAGE IN A TOP DOWN LEFT-RIGHT-LEFT-RIGHT...RASTER C PATTERN. C 1. ENTER THE NUMBER OF ROWS IP C 2. ENTER THE NUMBER OF COLUMNS IQ C C NOTE: THE SIZE OF THE STAGE PATTERN IS A PXQ STEP C PATTERN WHICH SHOULD BE CHANGED TO THE DESIRED C PATTERN. C AS THE STAGE SCANS, STOP WHEN THE DENSITY > A C SET THRESHOLD (THIS LOGIC MAY BE INCOMPLETE). C C NOTE: CHECK TO SEE THE MSTAG PATTERN OF YOUR C STAGE!!! (IT WILL PROBABLY BE DIFFERENT SO THAT THE BIT C PATTERNS MUST BE CHANGED). C C C PDP8E OPCODE DEFINITIONS C ------------------------ C THE FOLLOWING DEVICE CODES ARE UNIQUE C TO OUR RTPP. YOU SHOULD CHANGE (MSTAGE,STEP) TO WHATEVER C IS USED ON YOUR PDP12. C C THE A/D SPECIFIED HERE IS THE AD8E WITH 16 CHANNEL C MULTIPLEXOR. THIS CODE SHOULD BE REWRITTEN FOR YOUR PDP12. C S OPDEF MSTAG 6366 /LOAD STEPPING MOTOR REGISTER C AS FOLLOWS: C BIT FUNCTION C --- -------- C 8 +Y C 9 -Y C 10 +X C 11 -X S OPDEF STEP 6305 /MOVE THE STAGE ACCORDING TO MSTAG REG. C C Analogue to Digital 16 channel converter C (DEC AD8-ea/AM8-ea) with an input voltage C range of +/- 1 volt, 0-30 KHZ bandwidth, 10 C bit resolution, 200 nsec. apperature time. S OPDEF ADCL 6530 /Clear AD done and timing error flags. C Clear enable, mux and status register. S OPDEF ADLM 6531 /LOAD mux register from AC[8:11], C clear AC. S OPDEF ADST 6532 /CLear AD done and timing error flags. C Start AD converter. Channel to C be converted is to be determined by C mux register. S OPDEF ADRB 6533 /CLear AD done flag. Contents of C AD buffer ==>ac[0:11]. S SKPDF ADSK 6534 /SKIp next instruction if AD done=1. C Do not clear flag. S SKPDF ADSE 6535 /Skip next instruction if C timing error=1. C Do not clear flag. S OPDEF ADLE 6536 /LOad enable register from AC[2:5]. S OPDEF ADRS 6537 /REAd AD status/enable register and C mux into AC[0:11]. C C A/D Status register C Bit function C ---- -------- C 0 Conversion done C 1 error C 2 done interrupt enable C 3 error interrupt enable C 4 external start enable C 5 auto increment enable C 6-7 not used C 8-11 contents of mux register C C C [1] DEFINE THE MAXIMUM X AND Y 402 READ(1,400)IP,IQ 400 FORMAT(' # ROWS?=',I5,/,' # COLUMNS?=',I5) C C IF IP OR IQ=0 C THEN ASK THE QUESTION AGAIN; IF(IP)402,402,403 403 IF(IQ)402,402,404 404 CONTINUE C C C [1.1] SET THE STAGE TO MOVE IN THE +X DIRECTION IXDIRECTION=0 MXPATTERN=2 C C C [2] MOVE THE STAGE IN THE RASTER DO 200 IY=1,IQ C WRITE(1,101)IY 101 FORMAT(' DOING LINE:',I5) C DO 201 IX=1,IP C C [2.1] CALL THE CLOCK TO WAIT 5 MSEC S JMS CLOCK C C C [2.2] MOVE THE STAGE IN THE +X DIRECTION S TAD \MXPATTERN /+X BIT PATTERN S JMS MOVSTAGE /BITS==>STAGE C C [2.3] CALL THE A/D TO SEE IF YOU STOP C LET THE PHOTOMETER BE ON A/D CHANNEL 0 C AND A - SATURATION SIGNAL WILL STOP IT! IZ=0 C@@@@ JMS SAMPLE IF(IZ)221,220,220 221 READ(1,1221)JUNK 1221 FORMAT(' FOUND ONE!') 220 CONTINUE C ICHAN=0 201 CONTINUE C C INCREMENT Y STAGE S TAD (0010 /+Y DIRECTION S JMS MOVSTAGE C C C FINISHED X LINE, NOW MOVE THE STAGE BACK C BY TOGGLING THE X DIRECTION IXDIRECTION=1-IXDIRECTION IF(IXDIRECTION)210,211,210 210 MXPATTERN=1 GOTO 200 211 MXPATTERN=2 200 CONTINUE C C C [3] DONE! WRITE(1,103) 103 FORMAT(' DONE!') CALL EXIT C ************************************************ C *SUBROUTINE M O V S T A G E C ************************************************************ C MOVE THE STAGE ACCORDING TO THE BIT PATTERN IN THE AC C S CPAGE 3 S RMOVSTAGE, JMP I MOVSTAGE S MOVSTAGE, 0 /ENTRY C S MSTAG /LOAD THE STAGE REGISTER S STEP /SEND A PULSE TO LOAD THE REGISTER C C SETUP THE 100 USEC DELAY S CLA ICOUNT=-40 S WAIT, ISZ \ICOUNT /COUNT DOWN 100 USEC S JMP WAIT S CLA S MSTAG /ZERO THE STAGE REGISTER C S JMP RMOVSTAGE C ********************************************* C *SUBROUTINE S A M P L E * C ********************************************* C SUBROUTINE SAMPLE SAMPLES THE A/D CHANNEL C IN ICHAN AND PUT THE RESULT IN IZ. C S CPAGE 3 S RSAMPLE, JMP I SAMPLE S SAMPLE, 0 /ENTRY C [AD.1] SET UP THE CHANNEL WHICH IS PASSED C THROUGH ICHAN. S ADCL S TAD \ICHAN /CHANNEL # S AND (0017 /ONLY 0 TO 17 S ADLM /LOAD THE MUX SELECTOR C C C [AD.2] START THE A/D S ADST S ADFIN,ADSK S JMP ADFIN /NOT FINISHED. C C C [AD.3] GET THE DATA S ADRB S TAD (1000 /ADD +512 SO -1 TO +1 VDC ==>[0:1777] S DCA \IZ S JMP RSAMPLE C C C ****************************************************** C *SUBROUTINE C L O C K C ******************************************************* C WAIT 5 MSEC C S CPAGE 3 S RCLOCK, JMP I CLOCK S CLOCK, 0 /ENTRY C 1556 DO 1555 MSEC=1,5 DO 1555 IUSEC=1,50 C WASTE SOME TIME S ISZ \JUNK S CLA 1555 CONTINUE S JMP RCLOCK /RETURN END