Advertisement
fig02

input display

May 18th, 2018
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.46 KB | None | 0 0
  1. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. // NintendoSpy Firmware for Arduino
  3. // v1.0.1
  4. // Written by jaburns
  5. //
  6. // Anti-spazzing and checksum mod for Not64 compatibility by eN-t
  7. // GameCube controller only!
  8.  
  9. #define PIN_READ (PIND&(1<<(5)))
  10. #define MICROSECOND_NOPS "nop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\nnop\n"
  11. #define WAIT_FALLING_EDGE while(!PIN_READ); while(PIN_READ);
  12.  
  13. #define ZERO  '\0'
  14. #define ONE    '1'
  15. #define SPLIT '\n'
  16.  
  17. unsigned char rawData[128];
  18.  
  19. void setup() {
  20.   PORTD = 0x00;
  21.   DDRD  = 0x00;
  22.   PORTC = 0xFF;
  23.   DDRC  = 0x00;
  24.   Serial.begin(115200);
  25. }
  26.  
  27. void read_oneWire() {
  28.   unsigned char *rawDataPtr = rawData;
  29.   unsigned char bits = 89;
  30.  
  31. read_loop:
  32.   WAIT_FALLING_EDGE;
  33.   asm volatile(MICROSECOND_NOPS MICROSECOND_NOPS);
  34.   *rawDataPtr = PIN_READ;
  35.   ++rawDataPtr;
  36.   if (--bits == 0) return;
  37.   goto read_loop;
  38. }
  39.  
  40. inline bool checksum() {
  41.   unsigned long GC_chksm = 0;
  42.   for (unsigned char i = 0; i < 25; i++) {
  43.     bitWrite(GC_chksm, 24 - i, rawData[i]);
  44.   }
  45.   if (GC_chksm >= 8390144 && GC_chksm <= 8390655) return true;
  46.   return false;
  47. }
  48.  
  49. inline void sendRawData() {
  50.   for (unsigned char i = 25; i < 89; i++) {
  51.     Serial.write(rawData[i] ? ONE : ZERO);
  52.   }
  53.   Serial.write(SPLIT);
  54. }
  55.  
  56. void loop() {
  57.   noInterrupts();
  58.   read_oneWire();
  59.   interrupts();
  60.   if (checksum()) sendRawData();
  61.   delay(11);
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement