2020-11-12 11:13:18 -05:00
|
|
|
#pragma once
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
|
|
|
#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;
|
2020-11-16 13:10:04 -05:00
|
|
|
uint8_t databuf;
|
2020-11-13 12:15:20 -05:00
|
|
|
uint16_t width; // in pixels
|
|
|
|
uint16_t height; // in pixels
|
2020-11-12 11:13:18 -05:00
|
|
|
} 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);
|