avr-game

view avrgame.c @ 1:872e425f0e7f

foo
author John Tsiombikas <nuclear@member.fsf.org>
date Tue, 09 Sep 2014 06:49:28 +0300
parents 9db99968b55e
children 363acf3e61d4
line source
1 #include <avr/io.h>
2 #include <avr/interrupt.h>
3 #include <util/delay.h>
4 #include "dotmatrix.h"
6 /* hardware setup
7 * - Port B[1,5]: lcd signals (see dotmatrix.h)
8 * - B1: clk
9 * - B2: Din
10 * - B3: DC
11 * - B4: CE
12 * - B5: RST
13 * - Port C[0,3]: buttons
14 */
16 enum {
17 BN_LEFT,
18 BN_RIGHT,
19 BN_ROT,
20 BN_DROP
21 };
23 void redraw(void);
24 /*int lcd_stream_write(char c, FILE *fp);*/
25 /*FILE stream_lcd = FDEV_SETUP_STREAM(lcd_stream_write, NULL, _FDEV_SETUP_WRITE);*/
27 static int bx, by, brot;
28 static unsigned char fb[DM_WIDTH * DM_HEIGHT / 8];
30 int main(void)
31 {
32 /* stdout = stderr = &stream_lcd; */
33 DDRC = 0; /* input */
34 PORTC = 0; /* disable pull-ups */
36 /* enable pin change interrupts (PCINT2) */
37 PCICR = (1 << PCIE2);
38 /* unmask interrupts PCINT16-19 (first 4 bits) */
39 PCMSK2 = 0xf;
41 dm_init();
43 sei();
45 for(;;) {
46 redraw();
47 }
49 return 0;
50 }
52 void redraw(void)
53 {
54 }
56 ISR(PCINT2_vect)
57 {
58 static unsigned char prev_st = 0xff;
59 unsigned char st = PINC;
60 unsigned char diff = st ^ prev_st;
62 if((diff & (1 << BN_LEFT)) & ~st) {
63 bx -= 1;
64 }
65 if((diff & (1 << BN_RIGHT)) & ~st) {
66 bx += 1;
67 }
68 if((diff & (1 << BN_ROT)) & ~st) {
69 brot = (brot + 1) % 4;
70 }
71 if((diff & (1 << BN_DROP)) & ~st) {
72 /* TODO */
73 }
75 prev_st = st;
76 }
78 #if 0
79 int lcd_stream_write(char c, FILE *fp)
80 {
81 /* TODO terminal shit handling */
82 return 0;
83 }
84 #endif