Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gamepad.h - github.com/ClusterM/snes2nes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c3592a82e859078e68c8601fcc2db844b9bfb060 (plain)
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
#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 N64_PORT_PORT PORT(N64_PORT)
#define N64_PORT_DDR DDR(N64_PORT)
#define N64_PORT_PIN PIN(N64_PORT)

#define NES_PORT_PORT PORT(NES_PORT)
#define NES_PORT_DDR DDR(NES_PORT)
#define NES_PORT_PIN PIN(NES_PORT)

#define SNES_PORT_PORT PORT(SNES_PORT)
#define SNES_PORT_DDR DDR(SNES_PORT)
#define SNES_PORT_PIN PIN(SNES_PORT)

#define SMD_SELECT_PORT_PORT PORT(SMD_SELECT_PORT)
#define SMD_SELECT_PORT_DDR DDR(SMD_SELECT_PORT)
#define SMD_DATA_PORT_PORT PORT(SMD_DATA_PORT)
#define SMD_DATA_PORT_DDR DDR(SMD_DATA_PORT)
#define SMD_DATA_PORT_PIN PIN(SMD_DATA_PORT)

#define DUALSHOCK_PORT_PORT PORT(DUALSHOCK_PORT)
#define DUALSHOCK_PORT_DDR DDR(DUALSHOCK_PORT)
#define DUALSHOCK_PORT_PIN PIN(DUALSHOCK_PORT)

#define WAIT(t) {TCNT0=0; while(TCNT0 < (F_CPU / 1000000UL) * t);}

#define N64SEND(t) {N64_PORT_DDR |= (1<<N64_DATA_PIN); WAIT(t); N64_PORT_DDR &= ~(1<<N64_DATA_PIN);}
#define N64SEND_1 {N64SEND(1); WAIT(3);}
#define N64SEND_0 {N64SEND(3); WAIT(1);}
#define N64SEND_STOP {N64SEND(1); WAIT(2);}
#define N64SIGNAL (!((N64_PORT_PIN>>N64_DATA_PIN)&1))

void init_nes_gamepad();
uint8_t get_nes_gamepad();
void init_snes_gamepad();
uint16_t get_snes_gamepad();
void init_n64_gamepad();
int get_n64_gamepad(uint8_t* data);
void init_smd_gamepad();
uint16_t get_smd_gamepad();
void init_dualshock_gamepad();
int dualshock_command(uint8_t* command, uint8_t* data, int length);
int get_dualshock_gamepad(uint8_t* data, int size, uint8_t motor_small, uint8_t motor_large);

#endif