|
1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #include <stdint.h>
- #include <stdbool.h>
-
- #define T6A04_ROWSIZE (120/8)
- #define T6A04_RAMSIZE 64*T6A04_ROWSIZE
-
- typedef enum {
- T6A04_XDEC = 0,
- T6A04_XINC = 1,
- T6A04_YDEC = 2,
- T6A04_YINC = 3
- } T6A04_INCMODE;
-
- typedef struct {
- // RAM is organized in 64 rows of 120 pixels (there is some offscreen
- // memory). Each byte holds 8 pixels. unset means no pixel, set means pixel.
- uint8_t ram[T6A04_RAMSIZE];
- bool enabled;
- // Whether the 8bit mode is enabled.
- bool has8bitmode;
- // Current "increment mode"
- T6A04_INCMODE incmode;
- // current Z offset
- uint8_t offset;
- // Currently active row
- uint8_t currow;
- // Currently active col (actual meaning depends on whether we're in 8bit
- // mode)
- uint8_t curcol;
- // True when a movement command was just made or if the LCD was just
- // initialized. When this is true, a read operation on the data port will be
- // invalid (returns zero and doesn't autoinc).
- bool just_moved;
- } T6A04;
-
- void t6a04_init(T6A04 *lcd);
- uint8_t t6a04_cmd_rd(T6A04 *lcd);
- void t6a04_cmd_wr(T6A04 *lcd, uint8_t val);
- uint8_t t6a04_data_rd(T6A04 *lcd);
- void t6a04_data_wr(T6A04 *lcd, uint8_t val);
- bool t6a04_pixel(T6A04 *lcd, uint8_t y, uint8_t x);
|