# HG changeset patch # User John Tsiombikas # Date 1426878218 -7200 # Node ID 363acf3e61d47b0fb7f3de7343a248ca44735f5f # Parent 872e425f0e7f7102fffa9ed36b373899f3067f84 wha? diff -r 872e425f0e7f -r 363acf3e61d4 avrgame.c --- a/avrgame.c Tue Sep 09 06:49:28 2014 +0300 +++ b/avrgame.c Fri Mar 20 21:03:38 2015 +0200 @@ -1,3 +1,4 @@ +#include #include #include #include @@ -21,17 +22,25 @@ }; void redraw(void); +void draw_field(void); +void putpixel(int x, int y, int c); /*int lcd_stream_write(char c, FILE *fp);*/ /*FILE stream_lcd = FDEV_SETUP_STREAM(lcd_stream_write, NULL, _FDEV_SETUP_WRITE);*/ -static int bx, by, brot; -static unsigned char fb[DM_WIDTH * DM_HEIGHT / 8]; +#define FB_SIZE (DM_WIDTH * DM_HEIGHT / 8) +static unsigned char fb[FB_SIZE]; + +/* gameplay */ +static int bx = DM_WIDTH / 2, by = DM_HEIGHT / 2, brot; +#define FIELD_WIDTH 10 +#define FIELD_HEIGHT 20 +static unsigned char field[FIELD_WIDTH][FIELD_HEIGHT]; int main(void) { /* stdout = stderr = &stream_lcd; */ - DDRC = 0; /* input */ - PORTC = 0; /* disable pull-ups */ + DDRD = 0xf0; /* lower nibble input */ + PORTD = 0xf0; /* disable 4 lower pull-ups */ /* enable pin change interrupts (PCINT2) */ PCICR = (1 << PCIE2); @@ -39,11 +48,14 @@ PCMSK2 = 0xf; dm_init(); + dm_test(); + for(;;); sei(); for(;;) { redraw(); + _delay_ms(1); } return 0; @@ -51,34 +63,86 @@ void redraw(void) { + memset(fb, 0, FB_SIZE); + draw_field(); + + dm_copy(0, 0, fb, FB_SIZE); } +#define HSPANS 6 +void draw_field(void) +{ + int i, j; + unsigned char *fbptr = fb; + + /* draw borders */ + memset(fbptr, 0xff, HSPANS * 2); /* fill 2 full lines */ + fbptr += HSPANS * 2; + fbptr[0] = 0x03; fbptr[HSPANS - 1] = 0xc0; + fbptr += HSPANS; + *fbptr++ = 0xfb; + for(i=0; i