fl { Adafruit 16X32 Matrix PropForth 5.5 2014/06/25 13:58:53 Adafruit 16X32 Matrix [ C B A ] ------------------------- | b31 ...... b0 | [ 0 0 0 ] | upper matrix(8x32) | ... upper matrix(8x32) color[ B1 G1 R1 ] | | [ 1 1 1 ] |-------------------------| | b31 ...... b0 | [ 0 0 0 ] | lower matrix(8x32) | ... lower matrix(8x32) color[ B2 G2 R2 ] | | [ 0 0 0 ] ------------------------- ^ ^ output signal side Input signal side Dot buffer 32Long X 16 = 512Long(2048bytes) ------------------------- 0 | b31 ...... b0 | <-- 32Long .. | upper matrix(8x32) | 7 | | |-------------------------| 8 | b31 ...... b0 | .. | lower matrix(8x32) | 15 | | ------------------------- } \ =========================================================================== \ Variables \ =========================================================================== { \ display-buffer for Adafruit matrix variable matrix_array Changing 2048bytes matrix_array . 17616 Prop0 Cog6 ok 17616 + 2048 = 19664 19663 here W! } wvariable n d124 constant array31 wvariable row \ =========================================================================== \ Constants \ =========================================================================== \ Pin 0 wconstant R1 \ 1 wconstant G1 \ 2 wconstant B1 3 wconstant R2 \ 4 wconstant G2 \ 5 wconstant B2 6 wconstant LnA \ 7 wconstant LnB \ 8 wconstant LnC 9 wconstant CLK d10 wconstant LE d11 wconstant EN 7 R1 lshift invert constant upper_m \ mask bit for upper-matrix RGB 7 R2 lshift invert constant lower_m \ mask bit for lower-matrix RGB 7 LnA lshift invert constant line_m \ mask bit for line 1 EN lshift constant en_m \ EN \ =========================================================================== \ 8X8 Font Characters for OLED \ =========================================================================== wvariable Font -2 allot h00 c, h00 c, h00 c, h00 c, h00 c, h00 c, h00 c, h00 c, h00 c, h06 c, h5F c, h5F c, h06 c, h00 c, h00 c, h00 c, h00 c, h03 c, h07 c, h00 c, h07 c, h03 c, h00 c, h00 c, h14 c, h7F c, h7F c, h14 c, h7F c, h7F c, h14 c, h00 c, h24 c, h2E c, h2A c, h6B c, h6B c, h3A c, h12 c, h00 c, h46 c, h66 c, h30 c, h18 c, h0C c, h66 c, h62 c, h00 c, h30 c, h7A c, h4F c, h5D c, h37 c, h7A c, h48 c, h00 c, h00 c, h04 c, h07 c, h03 c, h00 c, h00 c, h00 c, h00 c, h00 c, h1C c, h3E c, h63 c, h41 c, h00 c, h00 c, h00 c, h00 c, h41 c, h63 c, h3E c, h1C c, h00 c, h00 c, h00 c, h08 c, h2A c, h3E c, h1C c, h1C c, h3E c, h2A c, h08 c, h08 c, h08 c, h3E c, h3E c, h08 c, h08 c, h00 c, h00 c, h00 c, h80 c, hE0 c, h60 c, h00 c, h00 c, h00 c, h00 c, h08 c, h08 c, h08 c, h08 c, h08 c, h08 c, h00 c, h00 c, h00 c, h00 c, h60 c, h60 c, h00 c, h00 c, h00 c, h00 c, h60 c, h30 c, h18 c, h0C c, h06 c, h03 c, h01 c, h00 c, h3E c, h7F c, h41 c, h49 c, h41 c, h7F c, h3E c, h00 c, h40 c, h42 c, h7F c, h7F c, h40 c, h40 c, h00 c, h00 c, h62 c, h73 c, h59 c, h49 c, h6F c, h66 c, h00 c, h00 c, h22 c, h63 c, h49 c, h49 c, h7F c, h36 c, h00 c, h00 c, h18 c, h1C c, h16 c, h53 c, h7F c, h7F c, h50 c, h00 c, h27 c, h67 c, h45 c, h45 c, h7D c, h39 c, h00 c, h00 c, h3C c, h7E c, h4B c, h49 c, h79 c, h30 c, h00 c, h00 c, h03 c, h03 c, h71 c, h79 c, h0F c, h07 c, h00 c, h00 c, h36 c, h7F c, h49 c, h49 c, h7F c, h36 c, h00 c, h00 c, h06 c, h4F c, h49 c, h69 c, h3F c, h1E c, h00 c, h00 c, h00 c, h00 c, h66 c, h66 c, h00 c, h00 c, h00 c, h00 c, h00 c, h80 c, hE6 c, h66 c, h00 c, h00 c, h00 c, h00 c, h08 c, h1C c, h36 c, h63 c, h41 c, h00 c, h00 c, h00 c, h24 c, h24 c, h24 c, h24 c, h24 c, h24 c, h00 c, h00 c, h00 c, h41 c, h63 c, h36 c, h1C c, h08 c, h00 c, h00 c, h02 c, h03 c, h51 c, h59 c, h0F c, h06 c, h00 c, h00 c, h3E c, h7F c, h41 c, h5D c, h5D c, h1F c, h0E c, h00 c, h7C c, h7E c, h13 c, h13 c, h7E c, h7C c, h00 c, h00 c, h41 c, h7F c, h7F c, h49 c, h49 c, h7F c, h36 c, h00 c, h1C c, h3E c, h63 c, h41 c, h41 c, h63 c, h22 c, h00 c, h41 c, h7F c, h7F c, h41 c, h63 c, h3E c, h1C c, h00 c, h41 c, h7F c, h7F c, h49 c, h5D c, h41 c, h63 c, h00 c, h41 c, h7F c, h7F c, h49 c, h1D c, h01 c, h03 c, h00 c, h1C c, h3E c, h63 c, h41 c, h51 c, h73 c, h72 c, h00 c, h7F c, h7F c, h08 c, h08 c, h7F c, h7F c, h00 c, h00 c, h00 c, h41 c, h7F c, h7F c, h41 c, h00 c, h00 c, h00 c, h30 c, h70 c, h40 c, h41 c, h7F c, h3F c, h01 c, h00 c, h41 c, h7F c, h7F c, h08 c, h1C c, h77 c, h63 c, h00 c, h41 c, h7F c, h7F c, h41 c, h40 c, h60 c, h70 c, h00 c, h7F c, h7F c, h0E c, h1C c, h0E c, h7F c, h7F c, h00 c, h7F c, h7F c, h06 c, h0C c, h18 c, h7F c, h7F c, h00 c, h1C c, h3E c, h63 c, h41 c, h63 c, h3E c, h1C c, h00 c, h41 c, h7F c, h7F c, h49 c, h09 c, h0F c, h06 c, h00 c, h1E c, h3F c, h21 c, h71 c, h7F c, h5E c, h00 c, h00 c, h41 c, h7F c, h7F c, h09 c, h19 c, h7F c, h66 c, h00 c, h26 c, h6F c, h49 c, h49 c, h7B c, h32 c, h00 c, h00 c, h03 c, h41 c, h7F c, h7F c, h41 c, h03 c, h00 c, h00 c, h7F c, h7F c, h40 c, h40 c, h7F c, h7F c, h00 c, h00 c, h1F c, h3F c, h60 c, h60 c, h3F c, h1F c, h00 c, h00 c, h7F c, h7F c, h30 c, h18 c, h30 c, h7F c, h7F c, h00 c, h61 c, h73 c, h1E c, h0C c, h1E c, h73 c, h61 c, h00 c, h07 c, h4F c, h78 c, h78 c, h4F c, h07 c, h00 c, h00 c, h47 c, h63 c, h71 c, h59 c, h4D c, h67 c, h73 c, h00 c, h00 c, h7F c, h7F c, h41 c, h41 c, h00 c, h00 c, h00 c, h01 c, h03 c, h06 c, h0C c, h18 c, h30 c, h60 c, h00 c, h00 c, h41 c, h41 c, h7F c, h7F c, h00 c, h00 c, h00 c, h08 c, h0C c, h06 c, h03 c, h06 c, h0C c, h08 c, h00 c, h80 c, h80 c, h80 c, h80 c, h80 c, h80 c, h80 c, h80 c, h00 c, h00 c, h01 c, h03 c, h06 c, h04 c, h00 c, h00 c, h20 c, h74 c, h54 c, h54 c, h3C c, h78 c, h40 c, h00 c, h41 c, h7F c, h3F c, h48 c, h48 c, h78 c, h30 c, h00 c, h38 c, h7C c, h44 c, h44 c, h6C c, h28 c, h00 c, h00 c, h30 c, h78 c, h48 c, h49 c, h3F c, h7F c, h40 c, h00 c, h38 c, h7C c, h54 c, h54 c, h5C c, h18 c, h00 c, h00 c, h48 c, h7E c, h7F c, h49 c, h03 c, h02 c, h00 c, h00 c, h98 c, hBC c, hA4 c, hA4 c, hF8 c, h7C c, h04 c, h00 c, h41 c, h7F c, h7F c, h08 c, h04 c, h7C c, h78 c, h00 c, h00 c, h44 c, h7D c, h7D c, h40 c, h00 c, h00 c, h00 c, h60 c, hE0 c, h80 c, h80 c, hFD c, h7D c, h00 c, h00 c, h41 c, h7F c, h7F c, h10 c, h38 c, h6C c, h44 c, h00 c, h00 c, h41 c, h7F c, h7F c, h40 c, h00 c, h00 c, h00 c, h7C c, h7C c, h08 c, h38 c, h0C c, h7C c, h78 c, h00 c, h7C c, h7C c, h04 c, h04 c, h7C c, h78 c, h00 c, h00 c, h38 c, h7C c, h44 c, h44 c, h7C c, h38 c, h00 c, h00 c, h84 c, hFC c, hF8 c, hA4 c, h24 c, h3C c, h18 c, h00 c, h18 c, h3C c, h24 c, hA4 c, hF8 c, hFC c, h84 c, h00 c, h44 c, h7C c, h78 c, h4C c, h04 c, h1C c, h18 c, h00 c, h48 c, h5C c, h54 c, h54 c, h74 c, h24 c, h00 c, h00 c, h00 c, h04 c, h3E c, h7F c, h44 c, h24 c, h00 c, h00 c, h3C c, h7C c, h40 c, h40 c, h3C c, h7C c, h40 c, h00 c, h1C c, h3C c, h60 c, h60 c, h3C c, h1C c, h00 c, h00 c, h3C c, h7C c, h60 c, h38 c, h60 c, h7C c, h3C c, h00 c, h44 c, h6C c, h38 c, h10 c, h38 c, h6C c, h44 c, h00 c, h9C c, hBC c, hA0 c, hA0 c, hFC c, h7C c, h00 c, h00 c, h4C c, h64 c, h74 c, h5C c, h4C c, h64 c, h00 c, h00 c, h08 c, h08 c, h3E c, h77 c, h41 c, h41 c, h00 c, h00 c, h00 c, h00 c, h7F c, h7F c, h00 c, h00 c, h00 c, h00 c, h41 c, h41 c, h77 c, h3E c, h08 c, h08 c, h00 c, h00 c, h02 c, h03 c, h01 c, h03 c, h02 c, h03 c, h01 c, h00 c, h4C c, h5E c, h73 c, h01 c, h73 c, h5E c, h4C c, h00 c, Font d768 + wconstant Font_end \ =========================================================================== \ Main \ =========================================================================== \ Set [C B A] to matrix_array \ ( -- ) : prepare_array 2 0 do i n W! 8 0 do d32 0 do j 0= if 7 else j 1- then LnA lshift \ Get line number dup \ ( line line ) \ Calculate matrix dot position d32 8 u* n W@ u* d32 j u* + i + 4 u* matrix_array + \ ( line line address ) swap over \ ( line address line address ) L! \ Save line number to each dot i d31 = if swap en_m or swap L! \ Add EN else 2drop then loop loop loop ; : prepare_array1 2 0 do i n W! 8 0 do d32 0 do j LnA lshift \ Get line number en_m or \ Add EN \ Calculate matrix dot position d32 8 u* n W@ u* d32 j u* + i + 4 u* matrix_array + \ ( line line address ) L! \ Save line number to each dot loop loop loop ; \ variable matrix_array 19663 here W! \ prepare_array \ matrix_array d60 + dup L@ 7 or swap L! \ matrix_array d124 + dup L@ 7 or swap L! \ matrix_array d896 + dup L@ 7 or swap L! \ matrix_array d1920 + dup L@ h38 or swap L! \ matrix_array d2048 dump \ c" test2" 0 cogx \ \ ( n1 -- n2 ) n1:address of matrix_array n2:n1+4 lockdict create a_matrix_16x32_2 forthentry $C_a_lxasm w, h118 h113 1- tuck - h9 lshift or here W@ alignl h10 lshift or l, z8ixZB l, z1bix[N l, z20yPO4 l, z1SV01X l, z80 l, freedict \ Scan matrix_array to display \ ( -- ) : test2 hFFF dira COG! matrix_array begin dup d16 0 do d32 0 do a_matrix_16x32_2 loop LE pinhi LE pinlo EN pinlo loop drop fkey? swap drop until drop ; \ Shift upper section(8x32) of matrix_array(16x32) to left(1Long) \ ( -- ) : shift_bit matrix_array 8 0 do dup dup \ ( addr addr addr ) d31 0 do dup 4+ \ ( addr addr addr addr+4 ) L@ swap L! \ ( addr addr ) 4+ dup \ ( addr addr+4 addr+4 ) loop 2drop \ ( addr ) d128 + \ next line loop drop ; \ Display characters(8x8) \ ( -- ) : demo prepare_array1 c" test2" 0 cogx 1 row W! Font begin 8 0 do \ upper section dup \ ( addr addr ) C@ \ ( addr value ) 1 \ ( addr value 1 ) 8 0 do \ Save b0 value of each line 2dup and \ ( addr value 1 1/0 ) \ dup if h2A else bl then emit if row W@ else 0 then \ ( addr value 1 row/0 ) matrix_array i d128 u* + array31 + dup \ ( addr value 1 row/0 [address of b0] [address of b0] ) \ dup . L@ upper_m and rot \ ( addr value 1 [address of b0] [masked value of b0] row/0 ) or swap \ ( addr value 1 [value of b0] [address of b0] ) L! \ ( addr value 1 ) 1 lshift 4 delms loop \ ( addr value h100 ) \ matrix_array d1024 dump shift_bit \ Shift b30-b0 of upper section to 1bit left \ cr d500 delms 2drop \ ( addr ) 1+ dup Font_end = if drop Font then loop row W@ 1+ dup 8 = if drop 1 then row W! \ begin fkey? swap drop until fkey? swap drop until drop 0 cogreset ; { fl \ ( n1 -- n2 ) n1:address of buffer build_BootOpt :rasm rdlong outa , $C_stTOS or outa , __clk add $C_stTOS , # 4 jexit __clk h200 ;asm a_matrix_16x32_2 }