things
This commit is contained in:
parent
ee32942ebb
commit
2ca7b61c84
|
@ -306,6 +306,9 @@ unsigned int palette[3];
|
||||||
static Uint8 framebuffer[LCD_HEIGHT * LCD_WIDTH * 4];
|
static Uint8 framebuffer[LCD_HEIGHT * LCD_WIDTH * 4];
|
||||||
static fb_data *lcd_fb = NULL;
|
static fb_data *lcd_fb = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
static unsigned long starttick;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
memzero8(void *src, uint64_t n)
|
memzero8(void *src, uint64_t n)
|
||||||
{
|
{
|
||||||
|
@ -443,18 +446,35 @@ nil_talk(Device *d, Uint8 b0, Uint8 w)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO mono, greyscale
|
// TODO mono and greyscale that don't suck
|
||||||
static void redraw(void)
|
static void redraw(void)
|
||||||
{
|
{
|
||||||
if (!lcd_fb)
|
#if LCD_DEPTH > 4
|
||||||
{
|
if (!lcd_fb)
|
||||||
struct viewport *vp_main = rb->lcd_set_viewport(NULL);
|
{
|
||||||
lcd_fb = vp_main->buffer->fb_ptr;
|
struct viewport *vp_main = rb->lcd_set_viewport(NULL);
|
||||||
}
|
lcd_fb = vp_main->buffer->fb_ptr;
|
||||||
for(int y = 0 ; y < LCD_WIDTH*LCD_HEIGHT; y++ ) {
|
}
|
||||||
lcd_fb[y] = palette[ppu_read(&ppu, y%LCD_WIDTH, y/LCD_HEIGHT)];
|
for(int i = 0 ; i < LCD_WIDTH*LCD_HEIGHT; i++ ) {
|
||||||
}
|
Uint32 row = i / 2;
|
||||||
rb->lcd_update();
|
Uint8 shift = !(i & 0x1) << 2;
|
||||||
|
Uint8 pix = framebuffer[row] >> shift;
|
||||||
|
if(pix & 0x0c)
|
||||||
|
pix = pix >> 2;
|
||||||
|
lcd_fb[i] = palette[pix & 0x3];
|
||||||
|
}
|
||||||
|
rb->lcd_update();
|
||||||
|
#else
|
||||||
|
rb->lcd_clear_display();
|
||||||
|
for(Uint16 x = 0; x < LCD_WIDTH; x++ ) {
|
||||||
|
for(Uint16 y = 0; y < LCD_HEIGHT; y++ ) {
|
||||||
|
if(palette[ppu_read(&ppu, x, y)]) {
|
||||||
|
rb->lcd_drawpixel(x, y);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rb->lcd_update();
|
||||||
|
#endif
|
||||||
ppu.reqdraw = 0;
|
ppu.reqdraw = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -468,6 +488,7 @@ uxn_halt(Uxn *u, Uint8 error, char *name, int id)
|
||||||
|
|
||||||
// TODO fix timing
|
// TODO fix timing
|
||||||
static void run() {
|
static void run() {
|
||||||
|
starttick = *rb->current_tick;
|
||||||
while(!devsystem->dat[0xf]) {
|
while(!devsystem->dat[0xf]) {
|
||||||
uxn_eval(&u, devscreen->vector);
|
uxn_eval(&u, devscreen->vector);
|
||||||
if(ppu.reqdraw || devsystem->dat[0xe])
|
if(ppu.reqdraw || devsystem->dat[0xe])
|
||||||
|
@ -513,6 +534,9 @@ static void run() {
|
||||||
|
|
||||||
uxn_eval(&u, peek16(devctrl->dat, 0));
|
uxn_eval(&u, peek16(devctrl->dat, 0));
|
||||||
}
|
}
|
||||||
|
if((*rb->current_tick - starttick)<HZ/60) {
|
||||||
|
rb->sleep(*rb->current_tick - starttick);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue