\ problem with CHKV and TYPE in general it appears. \ problem with reset on ram mode 0 1 LM \ Software developed by Randy M. Dumse, New Micros, Inc., 214 339 2204 \ To get going: \ Edit for V1 or V2 by selecting TRUE or FALSE before CONSTANT VER2 EEWORD \ Save and download to IsoPod(TM) \ After download run STARTUP then 1 ECHO ! to see camera responses \ type GV return and see version. Mind caps, most commands are in caps. \ Use other camera commands as provided. \ V1 cable RS-232 \ J4 IsoPod or J2 ServoPod \ o o \ Cam \ +-------- o o \ | \ | o o5--GND------o5 o \ | \ | o o4 +---o7 o \ | | \ | o o3--<<<------o9 o \ | | ------- board edge \ | o o2-->>>--+ \ | \ | o o1 \ V1 cable TTL \ \ \ Cam \ +-------- \ | \ | o o5 \ | \ | o o4 \ | \ | o o3 \ | \ | o o2 \ | \ | o o1 \ | \ | \ | o \ | \ | o \ | \ | o \ | \ | o \ | \ | o --GND--- \ | \ | o -->>>--- \ | \ | o --<<<--- \ | \ | o etc. \ V2 cable RS-232 \ J4 IsoPod or J2 ServoPod \ o o \ Cam \ o o \ | \ | o o5--GND------o5 o \ | \ | o o4 +---o7 o \ | | \ | o o3--<<<------o9 o \ | | ------- board edge \ | o o2-->>>--+ \ | \ | o o1 \ | \ +-------- \ V2 cable TTL \ \ \ Cam \ \ | \ | o o5 \ | \ | o o4 o --<<<--- \ | \ | o o3 o --+5---- \ | \ | o o2 o -->>>--- \ | \ | o o1 o --GND--- \ | \ +-------- SCRUB HERE 80 4 + ALLOT CONSTANT RBUFF EEWORD RBUFF 80 4 + SCI0 RXBUFFER HERE 80 4 + ALLOT CONSTANT TBUFF EEWORD TBUFF 80 4 + SCI0 TXBUFFER HERE 80 4 + ALLOT CONSTANT RBUFF1 EEWORD RBUFF1 80 4 + SCI1 RXBUFFER HERE 80 4 + ALLOT CONSTANT TBUFF1 EEWORD TBUFF1 80 4 + SCI1 TXBUFFER ( MAKE VER2 FALSE FOR V1 CMUcam COMPILE ( MAKE VER2 TRUE FOR V2 CMUcam COMPILE ( COMMENT OUT ONE OF THE TWO CONDITIONALS ON LINES BELOW ( FALSE ( THIS ONE IS FOR V1 TRUE ( THIS ONE IS FOR V2 CONSTANT VER2 EEWORD : \V1 ( ROUND CONDITIONAL COMPILE OF CODE CONTROL VER2 IF [COMPILE] \ ELSE THEN ; IMMEDIATE EEWORD : \V2 ( INLINE CONDITIONAL COMPILE OF CODE CONTROL VER2 IF ELSE [COMPILE] \ THEN ; IMMEDIATE EEWORD VARIABLE NEWKEY EEWORD VARIABLE NEWNUM EEWORD VARIABLE ECHO EEWORD ( 0=NONE, 1=CHAR, 2=CHAR & VALUE ( VARIABLES FOR OUTPUTING VARIABLE X1 EEWORD ( V1 SW, V2 VW VARIABLE Y1 EEWORD VARIABLE X2 EEWORD VARIABLE Y2 EEWORD VARIABLE Rmin EEWORD ( V1&2 TC, V2 ST VARIABLE Rmax EEWORD VARIABLE Gmin EEWORD VARIABLE Gmax EEWORD VARIABLE Bmin EEWORD VARIABLE Bmax EEWORD \V2 VARIABLE pan_range_far EEWORD ( V2 SP \V2 VARIABLE pan_range_near EEWORD \V2 VARIABLE pan_step EEWORD \V2 VARIABLE tilt_range_far EEWORD \V2 VARIABLE tilt_range_near EEWORD \V2 VARIABLE tilt_step EEWORD \V1 VARIABLE C-SINCE EEWORD VARIABLE F-SINCE EEWORD \V2 VARIABLE H-SINCE EEWORD \V1 VARIABLE M-SINCE EEWORD \V1 VARIABLE N-SINCE EEWORD \V2 VARIABLE T-SINCE EEWORD VARIABLE S-SINCE EEWORD VARIABLE FINDX EEWORD VARIABLE FBUFF EEWORD ( 176 144 3 * ALLOT \V2 VARIABLE UDBUFF EEWORD 63 ALLOT VARIABLE VERINDX EEWORD VARIABLE VERBUFF EEWORD 16 ALLOT \V2 VARIABLE HINDX EEWORD \V2 VARIABLE HBUFF EEWORD 27 ALLOT \V1 VARIABLE NSPOS EEWORD VARIABLE MX EEWORD VARIABLE MY EEWORD VARIABLE TX1 EEWORD VARIABLE TY1 EEWORD VARIABLE TX2 EEWORD VARIABLE TY2 EEWORD VARIABLE PX EEWORD VARIABLE CN EEWORD VARIABLE Rmean EEWORD VARIABLE Gmean EEWORD VARIABLE Bmean EEWORD VARIABLE Rdeviation EEWORD VARIABLE Gdeviation EEWORD VARIABLE Bdeviation EEWORD \V2 VARIABLE LineType EEWORD VARIABLE LineMode EEWORD VARIABLE RawMode EEWORD VARIABLE PollMode EEWORD \V1 VARIABLE MiddleMassMode EEWORD VARIABLE RAWINDX EEWORD 80 ALLOT VARIABLE RAWDATA EEWORD 80 ALLOT 49 CONSTANT "1" EEWORD 58 CONSTANT ":" EEWORD 65 CONSTANT "A" EEWORD 67 CONSTANT "C" EEWORD ( 70 CONSTANT "F" EEWORD \V2 72 CONSTANT "H" EEWORD 75 CONSTANT "K" EEWORD 77 CONSTANT "M" EEWORD 78 CONSTANT "N" EEWORD \V2 84 CONSTANT "T" EEWORD 83 CONSTANT "S" EEWORD : EMIT1 ECHO @ IF DUP EMIT THEN SCI1 TX ; EEWORD ( : EMIT1 SCI0 TX ; EEWORD : CHKKEY SCI1 RX? IF SCI1 RX ECHO @ IF ECHO @ 2 = IF CR THEN DUP EMIT ( ECHO ECHO @ 2 = IF SPACE DUP . ( PRINT THEN DUP 13 = ( CR IF 10 EMIT ( LF THEN THEN ELSE TRUE ( ALL ONES, DISTINCT FROM 0 THEN NEWKEY ! ; EEWORD : ISNEWKEY? NEWKEY @ = ; EEWORD : ISNEWKEY?NOT ISNEWKEY? NOT ; EEWORD : RAWOUTCAM? RawMode @ 1 AND ; EEWORD : RAWACKNAK? RawMode @ 2 AND ; EEWORD : RAWINTCAM? RawMode @ 4 AND ; EEWORD : \r RAWINTCAM? NOT IF 13 EMIT1 ( CR THEN ; EEWORD : \s RAWINTCAM? IF 255 EMIT1 ( SYNC THEN ; EEWORD : EMITCNT RAWINTCAM? IF EMIT1 ELSE DROP THEN ; EEWORD : .EMIT1 RAWINTCAM? IF EMIT1 ELSE BL EMIT1 10 /MOD 10 /MOD DUP IF 48 + EMIT1 ELSE DROP THEN DUP IF 48 + EMIT1 ELSE DROP THEN 48 + EMIT1 THEN ; EEWORD : MAKE:MSG:START ( USEFUL FOR EXTENDED PARAMETERS 3 AND UP \s DUP P@ EMIT1 ( FIRST LETTER 1+ DUP P@ EMIT1 ( SECOND LETTER 1+ P@ ( COUNT OF PARAMETERS EMITCNT ; EEWORD : MAKE:MSG ( USEFUL FOR 0,1,2 PARAMETERS \s DUP P@ EMIT1 ( FIRST LETTER 1+ DUP P@ EMIT1 ( SECOND LETTER 1+ P@ ( COUNT OF PARAMETERS DUP EMITCNT DUP IF 1 = IF .EMIT1 ELSE SWAP .EMIT1 .EMIT1 THEN ELSE DROP THEN \r ; EEWORD \V2 1 MAKE:MSG BM EEWORD \ : Buffer_Mode BM ; EEWORD ( FALSE BM turns off frame update, TRUE BM turns on frame update 2 MAKE:MSG CRO EEWORD \ : Camera_Register CRO ; EEWORD ( 5 Contrast 0-255 ( 6 Brightness 0-255 ( 18 Color Mode ( 36 YCrCb Auto While Balance On ( 32 YCrCb Auto While Balance Off ( 44 Auto While Balance On ( 40 Auto While Balance Off default ( 17 Clock Speed \V2 ( 0 50fps default V2 ( 2 17fps default V1 ( 3 13fps ( 4 11fps ( 5 9fps ( 6 8fps ( 10 5fps ( 12 4fps ( 19 Auto Exposure ( 32 Auto Gain Off ( 33 Auto Gain On default \V2 1 MAKE:MSG CP EEWORD \ : Camera_Power CP ; EEWORD ( FALSE CP turns off power TRUE CP turns on power \V2 1 MAKE:MSG CT EEWORD \ : Set_Camera_Type CP ; EEWORD ( FALSE CT sets ov6620 mode. TRUE CT sets ov7620 mode \V2 1 MAKE:MSG DC EEWORD \ : Difference_Channel DC ; EEWORD ( 0 DC sets to use the red Cr channel ( 1 DC sets to use the green Y channel ( 2 DC sets to use the blue Cb channel \V1 0 MAKE:MSG DF EEWORD \ : Dump_Frame DF ; EEWORD ( Usually DF 1 MAKE:MSG DM EEWORD \ : Delay_Mode DM ; EEWORD ( 0 - 255 DM chooses delay between characters \V2 2 MAKE:MSG DS EEWORD \ : Down_Sample DS ; EEWORD ( x_factor y_factor DS uses same horizontal resolution size \V2 1 MAKE:MSG FD EEWORD \ : Frame_Difference FD ; EEWORD ( Usually 5 - 20 FD \V2 1 MAKE:MSG FS EEWORD \ : Frame_Stream FS ; EEWORD ( FALSE FS disables TRUE CP enables \V2 0 MAKE:MSG GB EEWORD \ : Get_Button GB ; EEWORD ( returns a 1 or a 0 \V2 1 MAKE:MSG GH EEWORD \ : Get_Histogram GH ; EEWORD ( 0 GH sets to use the red Cr channel ( 1 GH sets to use the green Y channel ( 2 GH sets to use the blue Cb channel \V2 0 MAKE:MSG GI EEWORD \ : Get_Aux_IO_Inputs GI ; EEWORD ( returns a byte representing port 0 MAKE:MSG GM EEWORD \ V1 V2 \ : Get_Mean GM ; EEWORD ( returns a S packet \V2 1 MAKE:MSG GS EEWORD \ : Get_Servo_Positions GS ; EEWORD ( # GS Get the last position that was sent to the Servos. \V2 0 MAKE:MSG GT EEWORD \ : Get_Tracking_Parameters GT ; EEWORD ( Returns an unidentified packet 0 MAKE:MSG GV EEWORD \ V1 V2 \ : Get_Version GV ; EEWORD ( Returns firmware version \V2 0 MAKE:MSG GW EEWORD \ : Get_Window GW ; EEWORD ( Returns the x1, y1, x2 and y2 values bound current window \V2 2 MAKE:MSG HC EEWORD \ : Historgram_Configure HC ; EEWORD ( 0 scale# HC sets to use 28 bins, 2^scale# ( 1 scale# HC sets to use 14 bins, 2^scale# ( 2 scale# HC sets to use 7 bins, 2^scale# \V2 1 MAKE:MSG HD EEWORD \ : High_Resolution_Difference HD ; EEWORD ( FALSE HD sets 8x8 mode. TRUE HD sets 16x16 mode \V1 1 MAKE:MSG HM EEWORD \ : Half_Horizontal_Resolution HM ; EEWORD ( FALSE HM sets every line TRUE HM sets every odd line \V2 1 MAKE:MSG HR EEWORD \ : HiRes_Mode HR ; EEWORD ( 0 HR standard 88x143 ( 1 HR gives 176x255. \V2 1 MAKE:MSG HT EEWORD \ : Set_Histogram_Track HT ; EEWORD ( 0 HT disable histogram tracking, 1 HT enable \V1 0 MAKE:MSG I1 EEWORD \ : Input_1 I1 ; EEWORD ( returns TRUE if servo line set \V2 1 MAKE:MSG L0 EEWORD \ : Led_Control L0 ; EEWORD ( 0 L0 sets to off ( 1 L0 sets to on ( 2 L0 sets to automatic 1 MAKE:MSG L1 EEWORD \ V1 V2 \ : Led_Control L1 ; EEWORD ( 0 L1 sets to off ( 1 L1 sets to on ( 2 L1 sets to automatic \V2 0 MAKE:MSG LF EEWORD \ : Load_Frame_to_Difference LF ; EEWORD ( Loads a new Frame to be differenced \V1 1 MAKE:MSG LM EEWORD \V2 2 MAKE:MSG LM EEWORD \V2 : LM DUP LineMode ! SWAP DUP LineType ! SWAP LM ; EEWORD \ : Line_Mode LM ; EEWORD \V1 ( 0 LM line mode is disabled \V1 ( 1 LM line mode is enabled \V2 ( 0 0 LM line mode is disabled ( 0 1 LM Sends a binary image of the pixels being tracked ( 0 2 LM Sends the Mean, Min, Max, confidence and count ( 1 0 LM line mode is disabled ( 1 1 LM Sends the mean values for every line in the image ( 1 2 LM Sends the mean values and the deviations for every line ( 2 0 LM line mode is disabled ( 2 1 LM Returns a bitmap of tracked pixels of track color ( 2 2 LM difference between the current and stored image. ( 2 3 LM actual averaged value for each element \V2 1 MAKE:MSG MD EEWORD \ : Mask_Difference MD ; EEWORD ( threshold MD \V1 1 MAKE:MSG MM EEWORD \V1 : MM DUP MiddleMassMode ! MM ; EEWORD \ : Middle_Mass MM ; EEWORD ( 0 MM disengage ( 1 MM engages ( 2 L1 engages and turns on servo PWM 1 MAKE:MSG NF EEWORD \ V1 V2 \ : Noise_Filter NF ; EEWORD ( 0- 255 NF threshold \V2 2 MAKE:MSG OM EEWORD \ : Output Packet Mask OM ; EEWORD ( 0-6 packet 0-255 mask OM ( Packet ( 0 Track Color T ( 1 Get Mean S ( 2 Frame Difference T ( 3 Non-tracked packets T ( 4 Additional Count Information T,H ( 5 Track Color Line Mode 2 T ( 6 Get Mean Line Modes 1 and 2 S \V2 1 MAKE:MSG PD EEWORD \ : Pixel_Difference PD ; EEWord ( FALSE PD Pixel_Difference off; TRUE PD Pixel_Difference on \V2 1 MAKE:MSG PF EEWORD \ : Packet_Filter PF ; EEWORD ( FALSE PF Packet Filter off; TRUE PD Packet Filter on 1 MAKE:MSG PM EEWORD : PM DUP PM PollMode ! ; EEWORD \ : Poll_Mode PM ; EEWORD ( 0 PM Continuous stream ( 1 PM only one packet is returned \V2 ( 2 PM wait until an object is tracked and then return \V2 1 MAKE:MSG PS EEWORD \ : Packet_Skip PS ; EEWORD ( 0 PS no packet skipped ( 1 PS every other packet will be skipped ( 2 PS only every second packet will be displayed etc. \V2 0 MAKE:MSG RF EEWORD \ : Read_Frame_into_Buffer RF ; EEWORD ( Reads a new Frame into the buffer. 1 MAKE:MSG RM EEWORD : RM DUP RM RawMode ! ; EEWORD \ : Raw_Mode RM ; EEWORD ( bit-flags RM ( B0 Output from the camera is in raw bytes ( B1 “ACK\r” and “NCK\r” confirmations are suppressed ( B2 Input to the camera is in raw bytes 0 MAKE:MSG RS EEWORD \ V1 V2 \ : Reset RS ; EEWORD ( Resets vision board \V2 0 MAKE:MSG SD EEWORD \ : Sleep_Deeply SD ; EEWORD ( Sleeps the camera Deeply \V2 0 MAKE:MSG SF EEWORD \V2 1 MAKE:MSG SFCh EEWORD \ : Send_Frame_Ch SFCh ; EEWORD ( 0 GH sets to use the red Cr channel ( 1 GH sets to use the green Y channel ( 2 GH sets to use the blue Cb channel \V1 1 MAKE:MSG S1 EEWORD \ : S1_position SO ; EEWORD ( level S1 ( 0 S1 turns servo off ( 1-127 S1 turns servo to level ( >128 S1 turns servo on \V2 0 MAKE:MSG SL EEWORD \ : Sleep_Command SL ; EEWORD ( SLeep mode by putting the processor to sleep. \V1 1 MAKE:MSG SM EEWORD \ : Switching_mode SM ; EEWORD ( FALSE SM normal, TRUE SM switching mode \V2 1 MAKE:MSG SM EEWORD \ : Servo_Mask SM ; EEWORD ( B0 Pan Control Enabled ( B1 Tilt Control Enabled ( B2 Pan Report Enabled ( B3 Tilt Report Enabled \V2 2 MAKE:MSG SO EEWORD \ : Servo_Output SO ; EEWORD ( servo# 0-4 level 0off/1on SO \V2 6 MAKE:MSG:START SP EEWORD \V2 : SP \V2 SP \V2 pan_range_far @ .EMIT1 \V2 pan_range_near @ .EMIT1 \V2 pan_step @ .EMIT1 \V2 tilt_range_far @ .EMIT1 \V2 tilt_range_near @ .EMIT1 \V2 tilt_step @ .EMIT1 \V2 \r \V2 ; EEWORD \ : Servo_Parameters SP ; EEWORD ( pan_range_far pan_range_near pan_step ( tilt_range_far tilt_range_near tilt_step SP \V2 6 MAKE:MSG:START ST EEWORD \V2 : ST \V2 ST \V2 Rmin @ .EMIT1 \V2 Rmax @ .EMIT1 \V2 Gmin @ .EMIT1 \V2 Gmax @ .EMIT1 \V2 Bmin @ .EMIT1 \V2 Bmax @ .EMIT1 \V2 \r \V2 ; EEWORD \ : Set_Track_Command ST ; EEWORD ( Rmin Rmax Gmin Gmax Bmin Bmax ST \V2 2 MAKE:MSG SV EEWORD \ : Servo_Position SV ; EEWORD ( servo# 0-4 postion 46 - 210 SV \V1 4 MAKE:MSG:START SW EEWORD \V1 : SW \V1 SW \V1 X1 @ .EMIT1 \V1 Y1 @ .EMIT1 \V1 X2 @ .EMIT1 \V1 Y2 @ .EMIT1 \V1 \r \V1 ; EEWORD \ : Set_Window VW ; EEWORD ( x y x2 y2 SW 6 MAKE:MSG:START TC EEWORD \ V1 V2 : TC TC Rmin @ .EMIT1 Rmax @ .EMIT1 Gmin @ .EMIT1 Gmax @ .EMIT1 Bmin @ .EMIT1 Bmax @ .EMIT1 \r ; EEWORD \ : Track_Color TC ; EEWORD ( Rmin Rmax Gmin Gmax Bmin Bmax TC \V2 1 MAKE:MSG TI EEWORD \ : Track_Inverted TI ; EEWORD ( FALSE TI disables TRUE TI enables 0 MAKE:MSG TW EEWORD \ V1 V2 \ : Track_Window TW ; EEword ( Replies with T packet \V2 64 MAKE:MSG:START UD EEWORD \V2 : UD UD 64 0 DO UDBUFF I + @ EMIT1 LOOP \r ; EEWORD \ : Upload_Difference_buffer UD ; EEword ( \V2 4 MAKE:MSG:START VW EEWORD \V2 : VW \V2 VW \V2 X1 @ .EMIT1 \V2 Y1 @ .EMIT1 \V2 X2 @ .EMIT1 \V2 Y2 @ .EMIT1 \V2 \r \V2 ; EEWORD \ : Virtual_Window VW ; EEWORD ( x y x2 y2 VW MACHINE REPLY-RESULT EEWORD ON-MACHINE REPLY-RESULT APPEND-STATE ACK EEWORD APPEND-STATE NCK EEWORD IN-STATE ACK CONDITION FALSE CAUSES THEN-STATE NCK TO-HAPPEN IN-EE MACHINE ASSEMBLENUM EEWORD ON-MACHINE ASSEMBLENUM APPEND-STATE 1STCHAR EEWORD APPEND-STATE DIGITS EEWORD APPEND-STATE GOTNUM EEWORD IN-STATE 1STCHAR CONDITION RAWOUTCAM? CAUSES NEWKEY @ NEWNUM ! THEN-STATE GOTNUM TO-HAPPEN IN-EE IN-STATE 1STCHAR CONDITION NEWKEY @ BL = RAWOUTCAM? NOT AND CAUSES ( IGNORE LEADING BLANK THEN-STATE 1STCHAR TO-HAPPEN IN-EE IN-STATE 1STCHAR CONDITION NEWKEY @ 48 U< 57 NEWKEY @ U< OR NOT RAWOUTCAM? NOT AND CAUSES NEWKEY @ 48 - NEWNUM ! ( START INITAL VALUE THEN-STATE DIGITS TO-HAPPEN IN-EE IN-STATE DIGITS CONDITION NEWKEY @ 48 U< 57 NEWKEY @ U< OR NOT CAUSES NEWNUM @ 10 * NEWKEY @ 48 - + NEWNUM ! THEN-STATE DIGITS TO-HAPPEN IN-EE IN-STATE DIGITS CONDITION NEWKEY @ 48 U< 57 NEWKEY @ U< OR CAUSES ( THEN-STATE GOTNUM TO-HAPPEN IN-EE IN-STATE GOTNUM CONDITION FALSE CAUSES ( A DO NOTHING TRANSITION THEN-STATE GOTNUM TO-HAPPEN IN-EE ( POSSIBLE REPLIES LOOK LIKE THESE FORMS ( : ( C,M,U,c,a,m, ,v,x,.,x,x ( A,C,K,/r ( N,C,K,/r ( C, ,X,X, ,X,X,... X,X,/r ( 170,XX,XX...xx,170,170,C, ,X,X, ,X,X,... X,X,/r ( 255,A,C,K ( 255,N,C,K ( 255,254,XX,XX...xx,253,C, ,X,X, ,X,X,... X,X,/r ( 255,252,XX,XX...xx,253,C, ,X,X, ,X,X,... X,X,/r ( 255,C,##,XX,XX, ... XX ( 255,170,XX,XX...xx,170,170,C,##,XX,XX, ... XX ( 255,254,XX,XX...xx,253,C,##,XX,XX, ... XX ( 255,252,XX,XX...xx,253,C,##,XX,XX, ... XX MACHINE REPLY-PROCESS EEWORD ON-MACHINE REPLY-PROCESS APPEND-STATE w4-ID EEWORD APPEND-STATE w: EEWORD APPEND-STATE w4-253 EEWORD ( WE ARE LOOKING FOR END OF RAW APPEND-STATE w4-AA2 EEWORD APPEND-STATE w4-AA3 EEWORD APPEND-STATE w4-A.CK EEWORD APPEND-STATE w4-AC.K EEWORD APPEND-STATE w4-Cx EEWORD APPEND-STATE w4-VER EEWORD APPEND-STATE w4-F EEWORD \V2 APPEND-STATE w4-H EEWORD APPEND-STATE w4-Nx EEWORD APPEND-STATE w4-N.CK EEWORD APPEND-STATE w4-NC.K EEWORD \V1 APPEND-STATE w4-NSPOS EEWORD APPEND-STATE w4-MX EEWORD APPEND-STATE w4-MY EEWORD APPEND-STATE w4-X1 EEWORD APPEND-STATE w4-Y1 EEWORD APPEND-STATE w4-X2 EEWORD APPEND-STATE w4-Y2 EEWORD APPEND-STATE w4-PX EEWORD APPEND-STATE w4-CN EEWORD APPEND-STATE w4-SRmean EEWORD APPEND-STATE w4-SGmean EEWORD APPEND-STATE w4-SBmean EEWORD APPEND-STATE w4-SRdeviation EEWORD APPEND-STATE w4-SGdeviation EEWORD APPEND-STATE w4-SBdeviation EEWORD APPEND-STATE w-FINIS EEWORD ( ***** LOOK FOR IDENTIFIER IN-STATE w4-ID ( WE ARE NOW LOOKING FOR IDENTIFIER CONDITION 01 ISNEWKEY? CAUSES 0 FINDX ! 0 F-SINCE ! ( NEWKEY @ 48 + EMIT ( ECHO CAUSE NO BUFFER THEN-STATE w4-F TO-HAPPEN IN-EE IN-STATE w4-ID ( WE ARE NOW LOOKING FOR IDENTIFIER CONDITION ":" ISNEWKEY? CAUSES ( THEN-STATE w: ( JUST BE THERE TO SENSE READY IDLE TO-HAPPEN IN-EE IN-STATE w4-ID CONDITION 254 ISNEWKEY? CAUSES 0 RAWINDX ! THEN-STATE w4-253 ( WE ARE LOOKING FOR END OF RAW TO-HAPPEN IN-EE \V2 IN-STATE \V2 w4-ID \V2 CONDITION \V2 252 ISNEWKEY? \V2 CAUSES \V2 0 RAWINDX ! \V2 THEN-STATE \V2 w4-253 ( WE ARE LOOKING FOR END OF RAW \V2 TO-HAPPEN IN-EE IN-STATE w4-ID CONDITION 170 ISNEWKEY? ( "AA" CAUSES 0 RAWINDX ! THEN-STATE w4-AA2 ( WE ARE LOOKING FOR END OF RAW TO-HAPPEN IN-EE IN-STATE w4-ID ( WE ARE NOW LOOKING FOR IDENTIFIER CONDITION "C" ISNEWKEY? CAUSES 1STCHAR SET-STATE THEN-STATE w4-Cx TO-HAPPEN IN-EE ( ***** LOOK FOR IDENTIFIER \V2 IN-STATE \V2 w4-ID ( WE ARE NOW LOOKING FOR IDENTIFIER \V2 CONDITION \V2 "H" ISNEWKEY? \V2 CAUSES \V2 0 HINDX ! \V2 0 H-SINCE ! \V2 THEN-STATE \V2 w4-H \V2 TO-HAPPEN IN-EE \V1 IN-STATE \V1 w4-ID ( WE ARE NOW LOOKING FOR IDENTIFIER \V1 CONDITION \V1 "M" ISNEWKEY? \V1 CAUSES \V1 0 M-SINCE ! \V1 1STCHAR SET-STATE \V1 THEN-STATE \V1 w4-MX \V1 TO-HAPPEN IN-EE \V1 IN-STATE \V1 w4-ID ( WE ARE NOW LOOKING FOR IDENTIFIER \V1 CONDITION \V1 "N" ISNEWKEY? \V1 CAUSES \V1 0 N-SINCE ! \V1 1STCHAR SET-STATE \V1 THEN-STATE \V1 w4-NSPOS \V1 TO-HAPPEN IN-EE IN-STATE w4-ID ( WE ARE NOW LOOKING FOR IDENTIFIER CONDITION "S" ISNEWKEY? CAUSES 0 S-SINCE ! 1STCHAR SET-STATE THEN-STATE w4-SRmean TO-HAPPEN IN-EE IN-STATE w: CONDITION "A" ISNEWKEY? CAUSES ( THEN-STATE w4-A.CK TO-HAPPEN IN-EE IN-STATE w: CONDITION "N" ISNEWKEY? CAUSES ( THEN-STATE w4-N.CK TO-HAPPEN IN-EE IN-STATE w4-F CONDITION TRUE NEWKEY @ = NOT 02 ISNEWKEY?NOT AND 03 ISNEWKEY?NOT AND CAUSES NEWKEY @ FBUFF FINDX @ + ! ( FINDX 1+! THEN-STATE w4-F TO-HAPPEN IN-EE IN-STATE w4-F CONDITION 02 ISNEWKEY? CAUSES ( RESET COL ( NEWKEY @ 48 + EMIT ( ECHO CAUSE NO BUFFER THEN-STATE w4-F TO-HAPPEN IN-EE IN-STATE w4-F CONDITION 03 ISNEWKEY? CAUSES ( ( NEWKEY @ 48 + EMIT ( ECHO CAUSE NO BUFFER THEN-STATE w-FINIS TO-HAPPEN IN-EE IN-STATE w4-A.CK CONDITION "C" ISNEWKEY?NOT CAUSES ( THEN-STATE w4-ID ( MAYBE FINIS INSTEAD, FAILURE TO-HAPPEN IN-EE IN-STATE w4-A.CK CONDITION "C" ISNEWKEY? CAUSES ( THEN-STATE w4-AC.K TO-HAPPEN IN-EE IN-STATE w4-AC.K CONDITION "K" ISNEWKEY?NOT CAUSES ( THEN-STATE w4-ID ( MAYBE FINIS INSTEAD, FAILURE TO-HAPPEN IN-EE IN-STATE w4-AC.K CONDITION "K" ISNEWKEY? CAUSES YELLED ON ACK SET-STATE THEN-STATE w-FINIS TO-HAPPEN IN-EE IN-STATE w4-253 ( WE ARE LOOKING FOR END OF RAW CONDITION 253 ISNEWKEY? CAUSES ( RAW DATA FINISHED - MIGHT SET OTHER STATE THEN-STATE w4-ID TO-HAPPEN IN-EE IN-STATE w4-253 ( WE ARE LOOKING FOR END OF RAW CONDITION 253 ISNEWKEY?NOT CAUSES NEWKEY @ RAWDATA RAWINDX @ + ! RAWINDX 1+! THEN-STATE w4-253 ( WE ARE LOOKING FOR END OF RAW TO-HAPPEN IN-EE IN-STATE w4-AA2 ( WE ARE LOOKING FOR END OF RAW CONDITION 170 ISNEWKEY? ( "AA" CAUSES NEWKEY @ RAWDATA RAWINDX @ + ! RAWINDX 1+! THEN-STATE w4-AA3 ( WE ARE LOOKING FOR SYNC TO-HAPPEN IN-EE IN-STATE w4-AA2 ( WE ARE LOOKING FOR END OF RAW CONDITION 170 ISNEWKEY?NOT ( "AA" CAUSES NEWKEY @ RAWDATA RAWINDX @ + ! RAWINDX 1+! THEN-STATE w4-AA3 ( WE ARE LOOKING FOR SYNC TO-HAPPEN IN-EE IN-STATE w4-AA3 ( WE ARE LOOKING FOR END OF RAW CONDITION 170 ISNEWKEY? ( "AA" CAUSES ( RAW DATA FINISHED - MIGHT SET OTHER STATE THEN-STATE w4-ID TO-HAPPEN IN-EE IN-STATE w4-AA3 ( WE ARE LOOKING FOR END OF RAW CONDITION 170 ISNEWKEY?NOT ( "AA" CAUSES NEWKEY @ RAWDATA RAWINDX @ + ! RAWINDX 1+! THEN-STATE w4-AA2 ( WE ARE LOOKING FOR END OF RAW TO-HAPPEN IN-EE IN-STATE w4-Cx CONDITION "M" ISNEWKEY? CAUSES 12 VERBUFF ! ( COUNT "C" VERBUFF 1+ ! ( FIRST LETTER "A" VERBUFF 2+ ! ( SECOND LETTER 2 VERINDX ! THEN-STATE w4-VER TO-HAPPEN IN-EE IN-STATE w4-Cx CONDITION "M" ISNEWKEY?NOT CAUSES ( THEN-STATE w4-X1 THIS-TIME IN-EE ( <-- THIS-TIME !!! IN-STATE w4-VER CONDITION VERINDX @ 12 < CAUSES NEWKEY @ VERBUFF VERINDX @ + ! VERINDX 1+! THEN-STATE w4-VER TO-HAPPEN IN-EE IN-STATE w4-VER CONDITION VERINDX @ 12 = CAUSES NEWKEY @ VERBUFF VERINDX @ + ! THEN-STATE w-FINIS TO-HAPPEN IN-EE \V2 IN-STATE \V2 w4-H \V2 CONDITION \V2 TRUE NEWKEY @ = NOT \V2 HINDX @ 28 < AND \V2 CAUSES \V2 NEWKEY @ HBUFF HINDX @ + ! \V2 HINDX 1+! \V2 THEN-STATE \V2 w4-H \V2 TO-HAPPEN IN-EE \V2 IN-STATE \V2 w4-H \V2 CONDITION \V2 HINDX @ 28 < NOT \V2 CAUSES \V2 ( \V2 THEN-STATE \V2 w-FINIS \V2 TO-HAPPEN IN-EE IN-STATE w4-N.CK CONDITION "C" ISNEWKEY?NOT CAUSES ( THEN-STATE w4-ID ( MAYBE FINIS INSTEAD, FAILURE TO-HAPPEN IN-EE IN-STATE w4-N.CK CONDITION "C" ISNEWKEY? CAUSES ( THEN-STATE w4-NC.K TO-HAPPEN IN-EE IN-STATE w4-NC.K CONDITION "K" ISNEWKEY?NOT CAUSES ( THEN-STATE w4-ID ( MAYBE FINIS INSTEAD, FAILURE TO-HAPPEN IN-EE IN-STATE w4-NC.K CONDITION "K" ISNEWKEY? CAUSES YELLED OFF NCK SET-STATE THEN-STATE w-FINIS TO-HAPPEN IN-EE \V1 IN-STATE \V1 w4-NSPOS \V1 CONDITION \V1 ASSEMBLENUM GOTNUM IS-STATE? \V1 CAUSES \V1 NEWNUM @ NSPOS ! \V1 1STCHAR SET-STATE \V1 THEN-STATE \V1 w4-MX \V1 TO-HAPPEN IN-EE IN-STATE w4-MX CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ MX ! 1STCHAR SET-STATE THEN-STATE w4-MY TO-HAPPEN IN-EE IN-STATE w4-MY CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ MY ! 1STCHAR SET-STATE THEN-STATE w4-X1 TO-HAPPEN IN-EE IN-STATE w4-X1 CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ TX1 ! 1STCHAR SET-STATE THEN-STATE w4-Y1 TO-HAPPEN IN-EE IN-STATE w4-Y1 CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ TY1 ! 1STCHAR SET-STATE THEN-STATE w4-X2 TO-HAPPEN IN-EE IN-STATE w4-X2 CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ TX2 ! 1STCHAR SET-STATE THEN-STATE w4-Y2 TO-HAPPEN IN-EE IN-STATE w4-Y2 CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ TY2 ! 1STCHAR SET-STATE THEN-STATE w4-PX TO-HAPPEN IN-EE IN-STATE w4-PX CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ PX ! 1STCHAR SET-STATE THEN-STATE w4-CN TO-HAPPEN IN-EE IN-STATE w4-CN CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ CN ! 1STCHAR SET-STATE THEN-STATE w-FINIS TO-HAPPEN IN-EE IN-STATE w4-SRmean CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ Rmean ! 1STCHAR SET-STATE THEN-STATE w4-SGmean TO-HAPPEN IN-EE IN-STATE w4-SGmean CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ Gmean ! 1STCHAR SET-STATE THEN-STATE w4-SBmean TO-HAPPEN IN-EE IN-STATE w4-SBmean CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ Bmean ! 1STCHAR SET-STATE THEN-STATE w4-SRdeviation TO-HAPPEN IN-EE IN-STATE w4-SRdeviation CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ Rdeviation ! 1STCHAR SET-STATE THEN-STATE w4-SGdeviation TO-HAPPEN IN-EE IN-STATE w4-SGdeviation CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ Gdeviation ! 1STCHAR SET-STATE THEN-STATE w4-SBdeviation TO-HAPPEN IN-EE IN-STATE w4-SBdeviation CONDITION ASSEMBLENUM GOTNUM IS-STATE? CAUSES NEWNUM @ Bdeviation ! 1STCHAR SET-STATE THEN-STATE w-FINIS TO-HAPPEN IN-EE MACHINE SYNC EEWORD ON-MACHINE SYNC APPEND-STATE w4-SYNC EEWORD ( FOR FIRST TIME THROUGH, OR RESTART IN-STATE w4-SYNC ( WE ARE LOOKING FOR SYNC CONDITION REDLED OFF 255 ISNEWKEY? 13 ISNEWKEY? ( RAWOUTCAM? NOT AND OR CAUSES REDLED ON w4-ID SET-STATE THEN-STATE w4-SYNC ( WE ARE LOOKING FOR SYNCH TO-HAPPEN IN-EE : ALL \V1 C-SINCE 1+! F-SINCE 1+! \V2 H-SINCE 1+! \V1 M-SINCE 1+! \V1 N-SINCE 1+! \V2 T-SINCE 1+! S-SINCE 1+! BEGIN SCI1 RX? WHILE CHKKEY REPLY-PROCESS SYNC REPEAT ; EEWORD ( TOOLS \V1 : CHKPAC CR C-SINCE ? M-SINCE ? N-SINCE ? S-SINCE ? ; EEWORD \V2 : CHKPAC CR H-SINCE ? S-SINCE ? T-SINCE ? ; EEWORD \V2 : CHKH CR 28 0 DO HBUFF I + ? LOOP ; EEWORD \V1 : CHKM CR MX ? MY ? TX1 ? TY1 ? TX2 ? TY2 ? PX ? CN ? ; EEWORD \V1 : CHKN CR NSPOS ? CHKM ; EEWORD : CHKS CR Rmean ? Gmean ? Bmean ? Rdeviation ? Gdeviation ? Bdeviation ? ; EEWORD \V2 : CHKT CR MX ? MY ? TX1 ? TY1 ? TX2 ? TY2 ? PX ? CN ? ; EEWORD : CHKW CR X1 ? Y1 ? X2 ? Y2 ? ; EEWORD : CHKTC CR Rmin ? Rmax ? Gmin ? Gmax ? Bmin ? Bmax ? ; EEWORD : CHKV VERBUFF COUNT TYPE ; EEWORD DECIMAL : STARTUP RBUFF 80 4 + SCI0 RXBUFFER TBUFF 80 4 + SCI0 TXBUFFER RBUFF1 80 4 + SCI1 RXBUFFER TBUFF1 80 4 + SCI1 TXBUFFER [ HEX 16 ] LITERAL [ F10 DECIMAL ] LITERAL ! ( 115,200 SCI1 BAUD ISO ( [ HEX 16 ] LITERAL [ 1110 DECIMAL ] LITERAL ! ( 115,200 SCI1 BAUD SERVO FALSE ECHO ! 1 X1 ! 1 Y1 ! \V1 80 X2 ! \V1 143 Y2 ! \V2 80 X2 ! ( Larger? \V2 143 Y2 ! ( Larger? \V2 0 LineType ! 0 LineMode ! 0 RawMode ! 0 PollMode ! \V1 0 MiddleMassMode ! NCK SET-STATE w4-SYNC SET-STATE w: SET-STATE EVERY 50000 CYCLES SCHEDULE-RUNS ALL ( 100cps ; EEWORD DECIMAL SAVE-RAM ( AUTOSTART STARTUP ( 80x V.7 VERSION ( HEX EC00 AUTOSTART STARTUP DECIMAL ( 807 V.6 VERSION ( HEX 3C00 AUTOSTART STARTUP DECIMAL ( 805 V.6 VERSION