1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#ifndef _GAMEPAD_H_
#define _GAMEPAD_H_
#include <inttypes.h>
#include "defines.h"
#define GLUE(a,b) a##b
#define DDR(p) GLUE(DDR,p)
#define PORT(p) GLUE(PORT,p)
#define PIN(p) GLUE(PIN,p)
#define WAIT(t) {TCNT0=0; while(TCNT0 < (F_CPU / 1000000UL) * t);}
#define N64SEND(n,t) {PORT(N64_PORT) &= ~(1 << N64_##n##_DATA_PIN); DDR(N64_PORT) |= (1 << N64_##n##_DATA_PIN); WAIT(t); DDR(N64_PORT) &= ~(1 << N64_##n##_DATA_PIN); PORT(N64_PORT) |= (1 << N64_##n##_DATA_PIN);}
#define N64SEND_1(n) {N64SEND(n,1); WAIT(3);}
#define N64SEND_0(n) {N64SEND(n,3); WAIT(1);}
#define N64SEND_STOP(n) {N64SEND(n,1); WAIT(2);}
#define N64SIGNAL(n) (!((PIN(N64_PORT) >> N64_##n##_DATA_PIN)&1))
void gamepads_init();
void gamepads_query();
struct nes_state {
uint8_t right : 1, left : 1, down : 1, up : 1, start : 1, select : 1, b : 1, a : 1;
};
struct snes_state {
uint16_t r : 1, l : 1, x : 1, a : 1, right : 1, left : 1, down : 1, up : 1, start : 1, select : 1, y : 1, b : 1;
};
struct smd_state {
uint16_t connected : 1, six_buttons : 1, a : 1, b : 1, c : 1, x : 1, y : 1, z : 1, start : 1, mode :1, up : 1, down : 1, left : 1, right : 1;
};
struct dualshock_state {
uint16_t select : 1, l3 : 1, r3 : 1, start : 1, up : 1, right : 1, down : 1, left : 1, l2 : 1, r2 : 1, l1 : 1, r1 : 1, triangle : 1, circle : 1, cross : 1, square : 1;
int8_t rx, ry, lx, ly;
uint8_t pressure_right, pressure_left, pressure_up, pressure_down, pressure_triangle, pressure_circle, pressure_cross, pressure_square, pressure_l1, pressure_r1, pressure_l2, pressure_r2;
uint8_t connected : 1, analog : 1, pressure : 1;
};
struct n64_state {
int8_t y;
int8_t x;
uint8_t c_right : 1, c_left : 1, c_down : 1, c_up : 1, r : 1, l : 1, : 2;
uint8_t right : 1, left : 1, down : 1, up : 1, start : 1, z : 1, b : 1, a : 1;
};
extern struct nes_state nes1;
extern struct nes_state nes2;
extern struct nes_state nes3;
extern struct nes_state nes4;
extern struct snes_state snes1;
extern struct snes_state snes2;
extern struct smd_state smd1;
extern struct smd_state smd2;
extern struct dualshock_state dualshock1;
extern struct dualshock_state dualshock2;
extern struct n64_state n64_1;
extern struct n64_state n64_2;
#endif
|