#pragma once #include #include #define TMS_VRAM_SIZE 0x4000 // Offset of the name table #define TMS_NTABLE_OFFSET 0x3800 typedef struct { uint8_t vram[TMS_VRAM_SIZE]; uint8_t regs[0x10]; uint8_t cmdlsb; bool has_cmdlsb; uint16_t curaddr; uint8_t databuf; uint16_t width; // in pixels uint16_t height; // in pixels } TMS9918; void tms_init(TMS9918 *tms); uint8_t tms_cmd_rd(TMS9918 *tms); void tms_cmd_wr(TMS9918 *tms, uint8_t val); uint8_t tms_data_rd(TMS9918 *tms); void tms_data_wr(TMS9918 *tms, uint8_t val); // result is a RGB value uint8_t tms_pixel(TMS9918 *tms, uint16_t x, uint16_t y);