initial g

This commit is contained in:
Nico 2021-10-30 19:07:46 +01:00
parent e051ac2c48
commit 8b022f1a27
2 changed files with 20 additions and 12 deletions

Binary file not shown.

View File

@ -10,10 +10,9 @@ copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE.
TODO de-janking display code, support for greyscale displays
TODO proper support for greyscale displays
TODO rom loading
TODO other varvara devices
TODO hardware builds
TODO clean up
*/
@ -34,7 +33,7 @@ const Uint8 hwrom[] = { /* hello world ROM */
0x21,
};
const Uint8 screenrom[] = { /* screen test ROM */
const Uint8 uxn_rom[] = { /* screen test ROM */
0x20, 0x01, 0x43, 0x80, 0x20, 0x37, 0x20, 0xf0,
0x7f, 0x80, 0x08, 0x37, 0x20, 0xf0, 0xe0, 0x80,
0x0a, 0x37, 0x20, 0xf0, 0xc0, 0x80, 0x0c, 0x37,
@ -136,7 +135,7 @@ const Uint8 screenrom[] = { /* screen test ROM */
0x80, 0x80,
};
const Uint8 uxn_rom[] = { // screen vector test ROM
const Uint8 vector_rom[] = { // screen vector test ROM
0x20, 0x01, 0x19, 0x80, 0x20, 0x37, 0x20, 0x0f,
0x7f, 0x80, 0x08, 0x37, 0x20, 0x0f, 0xe0, 0x80,
0x0a, 0x37, 0x20, 0x0f, 0xc0, 0x80, 0x0c, 0x37,
@ -213,7 +212,7 @@ inspect(Stack *s, char *name)
static void
set_palette(Uint8 *addr)
{
#if LCD_DEPTH > 1
#if LCD_HAS_COLOR
int i;
for(i = 0; i < 4; ++i) {
Uint8
@ -222,11 +221,18 @@ set_palette(Uint8 *addr)
b = (*(addr + 4 + i / 2) >> (!(i % 2) << 2)) & 0x0f;
palette[i] = LCD_RGBPACK(r*8,g*8,b*8);
}
#elif LCD_DEPTH > 1 // greyscale
int i;
for(i = 0; i < 4; ++i) {
Uint8 sum = (*(addr + i / 2) >> (!(i % 2) << 2)) & 0x0f;
sum += (*(addr + 2 + i / 2) >> (!(i % 2) << 2)) & 0x0f;
sum += (*(addr + 4 + i / 2) >> (!(i % 2) << 2)) & 0x0f;
palette[i] = sum;
}
#else
int i;
for(i = 0; i < 4; ++i) {
Uint8
sum = (*(addr + i / 2) >> (!(i % 2) << 2)) & 0x0f;
Uint8 sum = (*(addr + i / 2) >> (!(i % 2) << 2)) & 0x0f;
sum += (*(addr + 2 + i / 2) >> (!(i % 2) << 2)) & 0x0f;
sum += (*(addr + 4 + i / 2) >> (!(i % 2) << 2)) & 0x0f;
palette[i] = sum > 0x17;
@ -323,14 +329,17 @@ nil_talk(Device *d, Uint8 b0, Uint8 w)
return 1;
}
// TODO optimise, make build on non-color devices
// TODO optimise, proper greyscale
static void redraw(void)
{
rb->lcd_clear_display();
Uint16 x, y;
for(y = 0; y < ppu.height; ++y)
for(x = 0; x < ppu.width; ++x) {
#if LCD_DEPTH > 1
#if LCD_HAS_COLOR
rb->lcd_set_foreground(palette[ppu_read(&ppu, x, y)]);
rb->lcd_drawpixel(x, y);
#elif LCD_DEPTH > 1
rb->lcd_set_foreground(palette[ppu_read(&ppu, x, y)]);
rb->lcd_drawpixel(x, y);
#else
@ -356,10 +365,9 @@ static void run() {
uxn_eval(&u, devscreen->vector);
if(ppu.reqdraw || devsystem->dat[0xe])
redraw();
switch(rb->button_get(false)) {
switch(rb->button_get(false)) { // TODO implement other buttons
case BUTTON_NONE: break;
default:
return;
default: return;
}
rb->sleep(HZ/60);
}