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
." _ " CR
LOOP
." |
" CR LOOP
."
" CR
; EEWORD
: PRINT_HTML_COLOR
CR
." " CR
." " CR
." MOUSECAM " CR
." " CR
." ." CR
." " CR
10 0
DO
." " CR
10 0
DO
." " CR
." _ " CR
LOOP
." |
" 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
." _ " CR
LOOP
." |
" 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