Sentinel65X-Kernel/src/drivers/vera.c

86 lines
1.4 KiB
C

//*****************************************************************************
// Sentinel 65X Kernel
//
// src/drivers/vera.c
//*****************************************************************************
#include <stdint.h>
#include "config.h"
#include "drivers/vera.h"
typedef struct vera_s *VERA;
struct vera_s {
uint8_t addr_x_l;
uint8_t addr_x_m;
uint8_t addr_x_h;
union {
uint8_t data[2];
uint16_t data16;
};
uint8_t ctrl;
uint8_t ien;
uint8_t isr;
union {
uint8_t irq_line_l;
uint8_t const scanline_l;
};
};
VERA vera = (VERA)(0x00df00);
void
vera_init(void)
{
}
uint8_t
vera_peek(uint32_t addr)
{
(void) addr;
// Set addrsel to 0
uint8_t asel = vera->ctrl;
vera->ctrl = asel & 0b11111110;
// Set address
vera->addr_x_l = addr & 0x000000FF;
vera->addr_x_m = (addr & 0x0000FF00) >> 8;
vera->addr_x_h = vera->addr_x_h & 0b11111110;
vera->addr_x_h = vera->addr_x_h | (addr & ((uint32_t)(1) << 16));
return vera->data[0];
}
void
vera_poke(uint32_t addr, uint8_t value)
{
(void) addr;
// Set addrsel to 0
uint8_t asel = vera->ctrl;
vera->ctrl = asel & 0b11111110;
// Set address
vera->addr_x_l = addr & 0x000000FF;
vera->addr_x_m = (addr & 0x0000FF00) >> 8;
vera->addr_x_h = vera->addr_x_h & 0b11111110;
vera->addr_x_h = vera->addr_x_h | (addr & ((uint32_t)(1) << 16));
vera->data[0] = value;
return;
}
void
_vera_set_bgcolor(uint8_t color)
{
(void) color;
return;
}