cartreader/Cart_Reader
Gabriel Marcano 9f92f6614d Update Cart_Reader.ino
- Add support for simulating a long press for the serial interface by
   seinding `l` or `L`. This lets someone actually run the SNES clock
   calibration using the serial interface.
2024-12-22 23:33:21 -08:00
..
2600.ino Fix compiler warnings/errors 2024-08-16 16:53:55 +02:00
5200.ino Atari 5200 Updates 2024-08-01 12:13:24 -07:00
7800.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00
ARC.ino Update ARC.ino 2024-08-15 09:19:00 +02:00
ATARI8.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
BALLY.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
C64.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00
Cart_Reader.ino Update Cart_Reader.ino 2024-12-22 23:33:21 -08:00
ClockedSerial.cpp Code optimization, cleanup, and stylization 2024-03-02 11:26:35 -05:00
ClockedSerial.h Firmware Updater support, 3.3V Fix, and more 2023-03-29 21:05:01 -04:00
COLV.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00
Config.h Fix compiler error 2024-09-13 09:32:13 +02:00
FAIRCHILD.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00
FLASH_CPS3.ino Fix compiler error 2024-09-13 09:32:13 +02:00
FLASH.ino Add 39SF020 and 39SF010 to flashrom programmer 2024-09-20 16:38:00 +02:00
GB.ino GB: Fix flashing MBC0 2024-09-16 10:36:54 +02:00
GBA.ino #define ENABLE_FLASH now enables/disables all repro flash code 2024-08-16 11:43:08 +02:00
GBM.ino GBM: Fix some comments and unused function 2024-08-23 14:40:22 +02:00
GBS.ino #define ENABLE_FLASH now enables/disables all repro flash code 2024-08-16 11:43:08 +02:00
GPC.ino replace duplicate error string "Can't open file" 2024-06-16 00:39:21 +02:00
INTV.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00
JAG.ino Fix compiler warnings/errors 2024-08-16 16:53:55 +02:00
LEAP.ino Update LEAP.ino - even simpler solution 2024-11-09 07:38:32 +00:00
LICENSE.txt Add files via upload 2022-06-08 22:28:26 +02:00
LJ.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
LJPRO.ino Update LJPRO.ino 2024-11-01 21:38:52 -10:00
LOOPY.ino Adds flash cartridge support to Atari Lynx firmware 2024-08-04 16:39:31 -07:00
LYNX.ino Fix for overdumping Electrocop/Lynx 2024-09-15 16:17:01 -07:00
MD.ino Update MD.ino 2024-09-12 23:19:45 +02:00
MSX.ino Update MSX.ino 2024-11-05 07:49:24 -10:00
N64.ino Remove more co-dependencies 2024-08-16 19:54:57 +02:00
NES.ino Update NES.ino 2024-12-22 08:25:24 +00:00
NGP.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00
ODY2.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00
OSCR.cpp Fix compiler error 2024-09-13 09:32:13 +02:00
OSCR.h Fix compiler error 2024-09-13 09:32:13 +02:00
PCE.ino Update PCE.ino 2024-07-24 16:15:04 +02:00
PCW.ino Fix compiler warnings/errors 2024-08-16 16:53:55 +02:00
POKEMINI.ino add common function to open create folder, print message and open file. Remove duplicate code 2024-05-26 22:20:47 +02:00
PV1000.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
PYUUTA.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
RCA.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
README.md Code optimization, cleanup, and stylization 2024-03-02 11:26:35 -05:00
SFM.ino Fix compile errors for co-dependent modules 2024-08-16 19:04:37 +02:00
SMS.ino Update SMS.ino 2024-08-15 00:09:40 +02:00
SNES.ino Remove more co-dependencies 2024-08-16 19:54:57 +02:00
ST.ino Fix compile errors for co-dependent modules 2024-08-16 19:04:37 +02:00
SUPRACAN.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00
SV.ino Fix compile errors for co-dependent modules 2024-08-16 19:04:37 +02:00
TI99.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
TRS80.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
VBOY.ino reuse common strings, remove duplicate 2024-05-30 08:00:13 +02:00
VECTREX.ino Update VECTREX.ino 2024-07-02 10:04:13 -10:00
VIC20.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
VSMILE.ino Add new modules (thx to skaman) 2024-07-08 19:25:29 +02:00
WS.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00
WSV.ino reuse common string "ROM Size: " 2024-06-29 11:28:41 +02:00

This Arduino sketch is licensed under the GNU GENERAL PUBLIC LICENSE Version 3 (GPL v3)

This means that you are free to:

  • use, modify and distribute this software, even commercially

Under the following terms:

  • state changes
  • disclose source
  • same license

Limitations:

  • Liability
  • Warranty

More details: https://www.gnu.org/licenses/gpl-3.0.en.html

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* const menuOptionsN64Controller[] PROGMEM = {N64ContMenuItem1, N64ContMenuItem2, N64ContMenuItem3, FSTRING_RESET};

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 Cart_Reader.ino

//******************************************
// !!! CHOOSE HARDWARE VERSION !!!
//******************************************
// Remove // in front of the line with your hardware version
// #define HW5
// #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
LCD lib: https://github.com/olikraus/U8g2_Arduino
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 (needs BusIO lib: https://github.com/adafruit/Adafruit_BusIO)
Frequency Counter lib: https://github.com/PaulStoffregen/FreqCount