SCRUB ( CLEARS THE MEMORY HEX ( For mouse, we want CPHA = 1, CPOL = 1 : INIT PE3 OFF SPI0 1 MBAUD LEADING-EDGE ACTIVE-LOW TRAILING-EDGE MSB-FIRST 8 BITS MASTER ; EEWORD : OM! ( d8 a8 -- WRITE TO OPTICAL MOUSE 00FF AND >< ( GET ADDRESS INTO HIGH BYTE SWAP 00FF AND OR ( PUT TWO BYTES TOGETHER 8000 OR ( MAKE WRITE BIT FOR SURE SPI0 10 BITS TX-SPI RX-SPI DROP ; EEWORD : OM@ ( a8 -- d8 WRITE TO OPTICAL MOUSE 7F AND ( MAKE READ BIT FOR SURE SPI0 8 BITS TX-SPI RX-SPI DUP DROP DUP DROP DUP DROP DROP ( LOOSE READ BACK WE DON'T NEED FF ( PATTERN OF ONE FOR PULL UP ON SDIO TX-SPI RX-SPI ( RETURN THIS VALUE ; EEWORD : M. 0 OM@ . ; EEWORD : REV. 1 OM@ . ; EEWORD : MOTION. 2 OM@ 80 AND . ; EEWORD : X. 3 OM@ . ; EEWORD : Y. 4 OM@ . ; EEWORD : MXY. MOTION. X. Y. ; EEWORD : RES. 0 OM@ 1 AND . ; EEWORD : RES! 0= NOT 1 AND 0 OM! ; EEWORD : SQUAL. 5 OM@ . ; EEWORD : AVEPIX. 6 OM@ . ; EEWORD : MAXPIX. 6 OM@ . ; EEWORD : CONFIG. A OM@ . ; EEWORD : RESET A OM@ 80 OR A OM! ; EEWORD : SLEEPMODEON A OM@ FE AND A OM! ; EEWORD : SLEEPMODEOFF A OM@ 01 OR A OM! ; EEWORD : PICDMPON A OM@ 08 OR A OM! ; EEWORD : PICDMPOFF A OM@ F7 AND A OM! ; EEWORD : PICDMP. A OM@ 08 AND . ; EEWORD VARIABLE TEMP EEWORD VARIABLE MAXPIX EEWORD VARIABLE MINPIX EEWORD VARIABLE SCALEPIX EEWORD VARIABLE SPANPIX EEWORD VARIABLE ARRAY 101 ALLOT EEWORD VARIABLE ARRAY2 101 ALLOT EEWORD VARIABLE ARRAYR 101 ALLOT EEWORD VARIABLE ARRAYG 101 ALLOT EEWORD VARIABLE ARRAYB 101 ALLOT EEWORD VARIABLE IDX EEWORD VARIABLE SUM EEWORD : ## ( n -- ) 0 <# # # #> TYPE ; EEWORD : GET_PIC ( RAW PICTURE SLEEPMODEOFF PICDMPON 100 0 DO BEGIN D OM@ DROP C OM@ DUP ARRAY I + ! 80 AND 0= UNTIL LOOP SLEEPMODEON ; EEWORD : PRINT_HTML CR ." " CR ." " CR ." MOUSECAM " CR ." " CR ." ." CR ." " CR 10 0 DO ." " CR 10 0 DO ." " CR LOOP ."
" CR ." _ " CR LOOP ."
" CR ; EEWORD : PRINT_HTML_COLOR CR ." " CR ." " CR ." MOUSECAM " CR ." " CR ." ." CR ." " CR 10 0 DO ." " CR 10 0 DO ." " CR LOOP ."
" CR ." _ " CR LOOP ."
" CR ; EEWORD ( GENERATE A TABLE IN HTML TO VISUALIZE MOUSE OUTPUT. : HTMLTHRESH. ( THRESHOLD THE VALUE HEX GET_PIC CR ." " CR ." " CR ." MOUSECAM " CR ." " CR ." ." CR ." " CR 10 0 DO ." " CR 10 0 DO ." " CR LOOP ."
" CR ." _ " CR LOOP ."
" CR ; EEWORD VARIABLE TEMP EEWORD VARIABLE MAXPIX EEWORD VARIABLE MINPIX EEWORD VARIABLE SCALEPIX EEWORD VARIABLE SPANPIX EEWORD : HTMLPIC_ADJST. ( RAW PICTURE HEX 0 MAXPIX ! ( INIT FF MINPIX ! GET_PIC ( FILTER THROUGH TO FIND MINIMUM AND MAXIMUM 100 0 DO ARRAY I + @ TEMP ! TEMP @ MAXPIX @ MAX MAXPIX ! TEMP @ MINPIX @ MIN MINPIX ! LOOP ( FIND SPAN FOR SCALING MAXPIX @ MINPIX @ - SPANPIX ! 2000 SPANPIX @ / SCALEPIX ! ( GO THROUGH AND RESCALE 100 0 DO ARRAY I + @ MINPIX @ - SCALEPIX @ 20 */ ARRAY I + ! LOOP PRINT_HTML ; EEWORD : HTMLFANCY. ( RAW PICTURE HEX 0 MAXPIX ! ( INIT FF MINPIX ! GET_PIC ( FILTER THROUGH TO FIND MINIMUM AND MAXIMUM 100 0 DO ARRAY I + @ TEMP ! TEMP @ MAXPIX @ MAX MAXPIX ! TEMP @ MINPIX @ MIN MINPIX ! LOOP ( FIND SPAN FOR SCALING MAXPIX @ MINPIX @ - SPANPIX ! 2000 SPANPIX @ / SCALEPIX ! ( GO THROUGH AND RESCALE 100 0 DO ARRAY I + @ MINPIX @ - SCALEPIX @ 20 */ DUP ARRAYR I + ! 7F > IF FF ARRAYG I + ! 0 ARRAYR I + ! ELSE 0 ARRAYG I + ! THEN LOOP ARRAYB 100 0 FILL F 1 DO F 1 DO 0 SUM ! F J 1 - - 10 * I + ARRAY + @ SUM +! F J 1 + - 10 * I + ARRAY + @ SUM +! F J - 10 * I + 1 - ARRAY + @ SUM +! F J - 10 * I + 1 + ARRAY + @ SUM +! SUM @ 4 / SUM ! F J - 10 * I + ARRAY + @ SUM @ - FF SWAP - F J - 10 * I + ARRAYB + ! LOOP LOOP PRINT_HTML_COLOR ; EEWORD : PIC. ( NO ASCII DUMP GET_PIC CR CR CR ." ARRAY" CR ( 100 0 DO 100 I - ARRAY + CR @ . LOOP 10 0 DO CR 10 0 DO F J - 10 * I + ARRAY + @ 3 .R LOOP LOOP ; EEWORD : X HTMLPIC_ADJST. ; EEWORD