cartreader/Cart_Reader
2022-03-08 20:44:14 +01:00
..
atoi32.cpp Corrected type 2021-02-07 23:07:02 -08:00
atoi32.h Implemented custom atoi methods, as the included one only has 16-bit precision 2021-02-07 20:34:39 -08:00
Cart_Reader.ino Change NES menus 2022-03-08 20:44:14 +01:00
clkcal.ino Add check if Clockgen is working 2021-11-18 14:55:50 +01:00
FLASH.ino Update FLASH.ino 2022-01-19 13:32:15 +01:00
GB.ino Add menu for GB Camera Flashcart 2022-03-08 18:13:04 +01:00
GBA.ino Fix Led and missing word wrap 2021-10-26 17:13:42 +02:00
GBM.ino Fix Led and missing word wrap 2021-10-26 17:13:42 +02:00
GBSmart.ino Fix Led and missing word wrap 2021-10-26 17:13:42 +02:00
MD.ino V7.2: LCD bugfix #2 2021-11-17 21:31:18 +01:00
N64.ino Automatically create snes_clk.txt if it doesn't exist 2022-02-26 21:20:33 -08:00
NES.ino Change NES menus 2022-03-08 20:44:14 +01:00
NGP.ino Fix Led and missing word wrap 2021-10-26 17:13:42 +02:00
NP.ino Automatically create snes_clk.txt if it doesn't exist 2022-02-26 21:20:33 -08:00
options.h Add menu for GB Camera Flashcart 2022-03-08 18:13:04 +01:00
PCE.ino Fixed build warnings 2022-02-24 15:59:25 -08:00
README.md Update README.md 2021-12-16 20:14:58 +01:00
RTC.cpp V7.0: Add basic support for MKS MINI12864 V3 2021-10-24 00:41:18 +02:00
RTC.h V7.0: Add basic support for MKS MINI12864 V3 2021-10-24 00:41:18 +02:00
SMS.ino Fixed build warnings 2022-02-24 15:59:25 -08:00
snes_clk.cpp Add menu for GB Camera Flashcart 2022-03-08 18:13:04 +01:00
snes_clk.h Automatically create snes_clk.txt if it doesn't exist 2022-02-26 21:20:33 -08:00
SNES.ino Automatically create snes_clk.txt if it doesn't exist 2022-02-26 21:20:33 -08:00
SV.ino Add check if Clockgen is working 2021-11-18 14:55:50 +01:00
WS.ino Showing progress bar when reading ROM 2022-02-26 22:14:03 +08:00

This Arduino code is written by a beginner for beginners, therefore I tried to comment every line of code. To an experienced coder this probably will seem very wrong but it really helps if you're just starting out.

Every submodule has it's own setup_XX() function that configures the needed pins and a submenu that lets you choose what you want to do. The code directly addresses the pins via the DDR, PIN and PORT registers.
Please also refer to the pinout Open Office sheet.

void setup_N64_Controller() {  
  // Output a low signal  
  PORTH &= ~(1 << 4);  
  // Set Controller Data Pin(PH4) to Input  
  DDRH &= ~(1 << 4);  
}  

Would be the same as this in a more traditional Arduino sketch:

int dataPin = 7;   

void setup(){    
  // Output a low signal   
  digitalWrite(dataPin, LOW);   
  // Set controller data pin to input  
  pinMode(dataPin, INPUT);  
}  

To preserve memory every string is saved into the flash of the Arduino, also called progmem. This is done by using the F() macro.

println_Msg(F("Press Button."));  

Also all the menus are stored in progmem and are only recalled to sram when needed.

// N64 controller menu items  
const char N64ContMenuItem1[] PROGMEM = "Test Controller";  
const char N64ContMenuItem2[] PROGMEM = "Read ControllerPak";  
const char N64ContMenuItem3[] PROGMEM = "Write ControllerPak";  
const char N64ContMenuItem4[] PROGMEM = "Reset";  
const char* const menuOptionsN64Controller[] PROGMEM = {N64ContMenuItem1, N64ContMenuItem2, N64ContMenuItem3, N64ContMenuItem4};  

In an effort to keep the codebase as portable as possible instead of using the functions supplied by the OLED library directly to print out text, auxiliary functions like println_Msg are being used. So if you want to change to another display library you don't need to change all the code but only the helper functions.

void print_Msg(long unsigned int message) {
  if (enable_OLED)
    display.print(message);
  if (enable_Serial)
    Serial.print(message);
}

Before uploading the code to your Arduino you need to select your hardware version in options.h

//******************************************     
// CHOOSE HARDWARE VERSION     
//******************************************    
#define HW4    
//#define HW3    
//#define HW2    
//#define HW1    
//#define SERIAL_MONITOR    

For more info please have a look at this wiki article.

Needed libraries(already included in the portable Arduino IDE under Releases)

SD lib: https://github.com/greiman/SdFat
OLED lib: https://github.com/adafruit/Adafruit_SSD1306
GFX Lib: https://github.com/adafruit/Adafruit-GFX-Library
BusIO: https://github.com/adafruit/Adafruit_BusIO
LCD lib: https://github.com/olikraus/u8g2
RGB Tools lib: https://github.com/joushx/Arduino-RGB-Tools (you need to move the files from the src subdir to the root dir of the library)
Neopixel lib: https://github.com/adafruit/Adafruit_NeoPixel
Rotary Enc lib: https://github.com/mathertel/RotaryEncoder
SI5351 lib: https://github.com/etherkit/Si5351Arduino
RTC lib: https://github.com/adafruit/RTClib