fl variable buffer 3c allot \ buffer = 64byte variable mask \ mask(32bit) wvariable dot_mask 8000 wconstant char_start bfff wconstant char_end variable tmp wvariable char_addr wvariable x \ 0 < x < 8 wvariable y \ 0 < y < 5 wvariable buff_ptr wvariable color_ptr wvariable disp_color variable color 10 allot st? : command 2 _maskoutlo 4 _maskoutlo \ A0 = L WRX = L 3 lshift outa COG@ or outa COG! \ outa <-- data 4 _maskouthi 2 _maskouthi \ WRX = H A0 = H FFFFF807 outa COG@ and outa COG! ; st? : parameter 4 _maskoutlo \ WRX = L 3 lshift outa COG@ or outa COG! \ outa <-- data 4 _maskouthi \ WRX = H FFFFF807 outa COG@ and outa COG! \ D0 - D7(P3 - P10) clear ; st? : lcd_initial 0 b 0 do dup pinout 1+ loop drop \ P0 - P10 output set 1 dup _maskouthi _maskoutlo \ RESX P0 = H to L 2 _maskouthi \ A0 P1 = H 4 _maskouthi \ WRX P2 = H 1 delms 1 _maskouthi \ RESX P0 = H 1 delms CA command \ Timing Control C parameter 3 parameter 0 parameter D parameter 3 parameter 28 parameter 0 parameter 30 delms 94 command \ Sleep Disable 200 delms 5C command 0 A710 0 do dup parameter loop drop \ V-ram initilize AF command \ Display On ; st? : get_line \ (32bit data -- 16bit data) 0 swap 10 0 do dup mask L@ and 0<> if swap 1 + swap then mask dup L@ 2 lshift swap L! i f < if swap 1 lshift swap then loop drop ; st? : buffer_copy \ (16bit data --) copy 1-line to buffer buff_ptr W@ swap over W! 2+ buff_ptr W! ; st? : buffer_read \ (-- 16bit data) buff_ptr W@ W@ buff_ptr dup W@ 2+ swap W! ; st? : column_set \ (column --) 20 u* dup tmp L! 1f + dup 8 rshift swap ff and tmp L@ dup 8 rshift swap ff and 15 command parameter parameter parameter parameter \ set column ; st? : page_set \ (page --) 20 u* dup 1f + swap 75 command parameter parameter \ set page ; st? : disp_pair \ font-addr disp_pair char_addr W! 2 0 do buffer buff_ptr W! i 1 + tmp L! char_addr W@ 20 0 do dup L@ tmp L@ mask L! get_line \ get 1-char(32-line) & copy 1disp-data(16bit) to buffer buffer_copy 2+ 2+ loop drop buffer buff_ptr W! y W@ x W@ column_set page_set color_ptr W@ dup W@ disp_color W! 2+ dup color 14 + > if drop color then color_ptr W! 5c command 20 0 do buffer_read \ read 1-line from buffer 8000 dot_mask W! 10 0 do dup dot_mask W@ and if disp_color dup W@ 8 rshift parameter ff and parameter else 0 dup parameter parameter then dot_mask dup W@ 1 rshift swap W! loop drop loop y W@ x W@ 1 + dup 7 > \ check x>7 if drop 0 swap 1 + dup 4 > \ check y>4 if 2drop 0 dup else swap then then x W! y W! loop ; st? : color_list color dup 1f swap W! 2+ dup \ blue f800 swap W! 2+ dup \ red f81f swap W! 2+ dup \ magenda 7e0 swap W! 2+ dup \ green 7fe swap W! 2+ dup \ cyan ffe0 swap W! 2+ dup \ yellow ffff swap W! 2+ dup \ white a18a swap W! 2+ dup \ brown fbc0 swap W! 2+ dup \ orange f998 swap W! \ pink drop ; st? : LQ020 lcd_initial color_list color color_ptr W! char_start 0 dup y W! x W! 200 0 do dup disp_pair 80 + dup char_end > if drop char_start then loop drop ; st?