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

github.com/ClusterM/nes2wii.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2014-01-27 06:07:33 +0400
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2014-01-27 06:22:22 +0400
commit6577b4b85491695b181210b7c145ec506584926d (patch)
treeb0397bd75eedc12ad6bfe081b650ebd14e4f611d /main.c
parent912795481a2e5b72f0c24ae0279b968d658d4b67 (diff)
Now you can hold Start+A+B for few seconds to change mode.
Diffstat (limited to 'main.c')
-rw-r--r--main.c87
1 files changed, 63 insertions, 24 deletions
diff --git a/main.c b/main.c
index 98d5584..cda2dbc 100644
--- a/main.c
+++ b/main.c
@@ -1,8 +1,10 @@
#include "nes2wii.h"
#include "defines.h"
#include <util/delay.h>
+#include <avr/eeprom.h>
#include "wiimote.h"
+
// classic controller id
const unsigned char classic_controller_id[6] = {0x00, 0x00, 0xA4, 0x20, 0x01, 0x01};
@@ -149,6 +151,10 @@ int main()
wm_init((void*)classic_controller_id, but_dat, (void*)cal_data, wiimote_query);
+ uint8_t mode = eeprom_read_byte((void*)0); // current mode
+ if (mode > 2) mode = 0;
+ int mode_change_timer = 0; // buttons combination hold time
+
while(1)
{
but_dat[0] = 0b01011111; // RX<4:3> LX<5:0>
@@ -160,6 +166,7 @@ int main()
int x = 0;
int y = 0;
int b, c;
+ int mode_change_counter = 0; // how many spetial buttons pressed
GREEN_OFF;
#ifdef N64_ENABLED
@@ -254,6 +261,7 @@ int main()
{
case 0: // B
PRESS_B;
+ mode_change_counter++;
break;
case 1: // Y
PRESS_Y;
@@ -263,25 +271,27 @@ int main()
break;
case 3: // Start
PRESS_START;
+ mode_change_counter++;
break;
case 4: // Up
- y = 30;
- PRESS_UP;
+ if ((mode == 0) || (mode == 1)) y = 30;
+ if ((mode == 0) || (mode == 2)) PRESS_UP;
break;
case 5: // Down
- y = -30;
- PRESS_DOWN;
+ if ((mode == 0) || (mode == 1)) y = -30;
+ if ((mode == 0) || (mode == 2)) PRESS_DOWN;
break;
case 6: // Left
- x = -30;
- PRESS_LEFT;
+ if ((mode == 0) || (mode == 1)) x = -30;
+ if ((mode == 0) || (mode == 2)) PRESS_LEFT;
break;
case 7: // Right
- x = 30;
- PRESS_RIGHT;
+ if ((mode == 0) || (mode == 1)) x = 30;
+ if ((mode == 0) || (mode == 2)) PRESS_RIGHT;
break;
case 8: // A
PRESS_A;
+ mode_change_counter++;
break;
case 9: // X
PRESS_X;
@@ -307,31 +317,34 @@ int main()
{
case 0: // A
PRESS_A;
+ mode_change_counter++;
break;
case 1: // B
PRESS_B;
+ mode_change_counter++;
break;
case 2: // Select
PRESS_SELECT;
break;
case 3: // Start
PRESS_START;
+ mode_change_counter++;
break;
case 4: // Up
- y = 30;
- PRESS_UP;
+ if ((mode == 0) || (mode == 1)) y = 30;
+ if ((mode == 0) || (mode == 2)) PRESS_UP;
break;
case 5: // Down
- y = -30;
- PRESS_DOWN;
+ if ((mode == 0) || (mode == 1)) y = -30;
+ if ((mode == 0) || (mode == 2)) PRESS_DOWN;
break;
case 6: // Left
- x = -30;
- PRESS_LEFT;
+ if ((mode == 0) || (mode == 1)) x = -30;
+ if ((mode == 0) || (mode == 2)) PRESS_LEFT;
break;
case 7: // Right
- x = 30;
- PRESS_RIGHT;
+ if ((mode == 0) || (mode == 1)) x = 30;
+ if ((mode == 0) || (mode == 2)) PRESS_RIGHT;
break;
}
}
@@ -350,36 +363,39 @@ int main()
switch (b)
{
case 0: // Up
- y = 30;
- PRESS_UP;
+ if ((mode == 0) || (mode == 1)) y = 30;
+ if ((mode == 0) || (mode == 2)) PRESS_UP;
GREEN_ON;
break;
case 1: // Down
- y = -30;
- PRESS_DOWN;
+ if ((mode == 0) || (mode == 1)) y = -30;
+ if ((mode == 0) || (mode == 2)) PRESS_DOWN;
GREEN_ON;
break;
case 4: // A(SMD)/Y(Classic)
PRESS_Y;
GREEN_ON;
+ if (c == 0) mode_change_counter++;
break;
case 5: // Start
PRESS_START;
GREEN_ON;
+ if (c == 0) mode_change_counter++;
break;
case 10: // Left
- x = -30;
- PRESS_LEFT;
+ if ((mode == 0) || (mode == 1)) x = -30;
+ if ((mode == 0) || (mode == 2)) PRESS_LEFT;
GREEN_ON;
break;
case 11: // Right
- x = 30;
- PRESS_RIGHT;
+ if ((mode == 0) || (mode == 1)) x = 30;
+ if ((mode == 0) || (mode == 2)) PRESS_RIGHT;
GREEN_ON;
break;
case 12: // B(SMD)/B(Classic)
PRESS_B;
GREEN_ON;
+ if (c == 0) mode_change_counter++;
break;
case 13: // C(SMD)/A(Classic)
PRESS_A;
@@ -431,6 +447,29 @@ int main()
_delay_us(10);
if (++red_led_timer >= 10) RED_OFF;
+ if (mode_change_counter == 3) // A+B+Start pressed?
+ {
+ mode_change_timer++;
+ if (mode_change_timer >= 2000) // For a long time?
+ {
+ mode_change_timer = 0;
+ mode++; // Changing current mode...
+ if (mode > 2) mode = 0;
+ eeprom_write_byte((void*)0, mode);
+ // Blinking green led indicating new mode...
+ GREEN_OFF;
+ _delay_ms(500);
+ int m;
+ for (m = 0; m <= mode; m++)
+ {
+ GREEN_ON;
+ _delay_ms(500);
+ GREEN_OFF;
+ _delay_ms(500);
+ }
+ _delay_ms(1000);
+ }
+ } else mode_change_timer = 0;
}
return 0;
}