I’ve Modified the Cartreader!? Created a Cartridge Reader “Alter”

⏰この記事は約 26 分で読めます

Hello, my name is JL.
This time, I’d like to share the story of creating the “Cartreader Kai(改)” – formally known as “Cartridge Reader Alter“.

What is a Cartreader (Cartridge Reader)?

Cartreader is a “retro game rom dumper” being developed as an open-source project on GitHub, primarily led by sanni. It’s a tool that allows you to extract game data (ROM) and save data from retro game cartridges.

The Cartreader we’re creating this time follows the V3 (hardware version) specifications and operates using an Arduino Mega 2560 (compatible boards are also acceptable) as its core.

You can refer to the “Needed Parts” section in the GitHub wiki to place an order for the PCB (Printed Circuit Board) and order the necessary components. This will allow you to handcraft the Cartreader following the provided instructions.

What is Cartreader Kai(改) (Cartridge Reader Alter)?

The fundamental operations are controlled by the program written into the Arduino. As for the board section where the game cartridge is inserted, you can customize it as you wish, as long as it adheres to the processing requirements of that area.

For instance, by default, the PCB data includes slots for SNES, Genesis, NINTENDO64, and GB (GBC/GBA) cartridges. However, it’s possible to create a Cartreader with a customized configuration. For example, you could replace the Genesis slot with a NES slot, allowing you to make a Cartreader that functions like a Nintendo-exclusive device.

Of course, it’s also possible to directly modify the program written into the Arduino. This customization could involve making menus and specifications more user-friendly, fixing minor bugs, or adding functionalities that are not yet supported.

Absolutely, if you discover any bugs or wish to add new features, I encourage you to submit a pull request to sanni/cartreader.

The Cartreader Kai(改) (Cartridge Reader Alter) that you’ve created this time is essentially a hardware-modified version tailored to your own preferences😎

something like this

Cartridge Reader Alter Overall view

I’ll now explain the parts where I’ve made hardware modifications.

Introduction of modification points

Added the positions of each game on the silkscreen.

Gives you that “It goes insert here!”

Changed the LEDs to the backside of the logo.

The logo here will light up!

Modified for easier installation of capacitors.

Personally, because it was difficult to install…

N64 Controller…

Controller…

…It was mostly along these lines.

It seems more like you’ve made it easier to assemble rather than adding functionalities.

Here are the components

First, let’s start with the electronic components. There are many small parts, so be careful when handling them. They tend to disappear quickly.


(Additionally, you will need some pin headers.)

Next, let’s move on to the modules. For the Cartreader, you’ll need to connect the “OLED module” “microSD (TF card) module (card read/write)” and “clock generator module.”

I purchased them using AliExpress, but you’re free to choose any source as long as you get equivalent modules.

microSDモジュール

Regarding the clock generator, there are inexpensive products available that imitate Adafruit’s “Si5351A Clock Generator Breakout Board – 8KHz to 160MHz (Product ID: 2045).” However, it seems that there are low-quality items among them that have issues such as unstable clocks or not functioning at all.

Just to be thorough, I’ll provide links to the products that I’ve personally purchased and found to have stable performance. However, if you have concerns, it might be more reliable to purchase the Adafruit product.

And, you’ll also need game cartridge slots. According to the basic specifications, slots for “Super Famicom(SNES)” “Mega Drive(Genesis)” “NINTENDO64,” and “Game Boy (Color/Advance)” are provided.

If you have game consoles that you don’t plan to extract from, you might choose the option to “not install” those slots.

For the Super Famicom (SNES) slot, choose one with a 2.5mm pitch and without fixed tabs on the left and right sides.

For the Mega Drive (Genesis) slot, there are protruding parts on the left and right sides that might interfere with certain solder points. In such cases, you can fold or cut those parts before using the slot.

When searching for an NINTENDO64 slot, you might come across slot connectors with a 2.54mm pitch. However, for proper and stable extraction, you need to use a slot with a 2.5mm pitch. Be cautious when making a purchase.

For the Game Boy (Color/Advance) slot, it’s a surface-mounted component. When installing it, be careful not to create any solder bridges.

Creating snesCIC

For extracting special chips (like SA1) from Super Famicom cartridges, you’ll need snesCIC.

Memo

I mentioned that it “will be needed,” but the current situation might actually indicate that it’s not necessary…?


That’s because, as demonstrated by sanni’s experiments and validations, shorting pins 6 and 7 of the snesCIC installation pattern allows for unlocking SA1 more effectively compared to using snesCIC itself.

Currently, the implementation mentioned above seems to work perfectly fine for extracting special chips. It’s quite straightforward.

So, it’s actually okay to skip the section about “Creating snesCIC.” However, I’ve left it in as a record since I, JL, haven’t personally verified the functionality without using snesCIC.

To program the snesCIC, you’ll need to use a PIC 12F629 and tools like a PICkit.

When programming with PICKit, make sure to use an “SOIC8 adapter” alongside it.

PICkit3 (clone) and SOIC8 adapter.

Regarding the position of the SOIC8 adapter, with the large green socket and the 3M marking facing upwards, it’s correct if pin 1 is inserted in the 11th slot from the top.

◽◽◽

Make sure you also have the data ready to write to the PIC.

Click the “Code” button on that page, then select “Download ZIP” to download the ZIP file.

Once you extract the ZIP file, the file named “snescic-lock-resync.hex” inside the “cic” folder will be the file to write to the PIC.

◽◽◽

You’ll also need to install the software necessary for performing the programming.

Download and install the MPLAB X IDE from this website.

◽◽◽

Once you’ve completed all the preparations, launch MPLAB X IPE.

After launching, check if your PICkit3 is recognized and displayed under the “Tool” section.

If everything is fine, select “Mid-Range 8-bit MCUs (PIC10/12/16/MCP)” under “Family.” Then, choose “PIC12F629” under “Device” and click “Apply.”

Next, switch MPLAB X IPE to Advanced Mode.

From the top menu, select “Settings” then choose “Advanced Mode” Input “microchip” into the password field and press “Log on” This will expand the menu options.

In this state, with the expanded menu, go to “Power” and under “Voltage options” check the box ✅ for “Power target circuit from PICkit3“.

Now that you’re prepared, click the “Connect” button on the right side of the “Tool” section. A warning might appear. 🥺

The warning is about specifying a 5V device for a 3.3V device, which could lead to damage. However, this shouldn’t be an issue this time, so you can press OK.

Following that, you might see a red text in the lower status bar saying something like:

PICkit 3 is trying to supply 5.000000 volts from the USB port, but the target VDD is measured to be 4.625000 volts. This could be due to the USB port power capabilities or the target circuitry affecting the measured VDD.

This message indicates that there is insufficient writing voltage. By the way, this issue can occur even with an official PICkit3.

To address this, you need to disassemble the PICkit3 and short a specific resistor. As a temporary solution, you can go to the “Power” menu and lower the Voltage Level from 5.0 to around 4.75 or 4.625. This adjustment should allow you to establish a connection without errors.

Press Browse to the right of Hex File and select snescic-lock-resync.hex downloaded earlier.

Once you’ve reached this point, press the “Program” button, and the writing process to the PIC will begin.

Programming/Verify complete
****-**-** **:**:** +0900 – Programming complete

Once you see a display like this, the writing process to the PIC is complete.

Happy making. 🔧🔨😊

Let’s get started then!

When it comes to installation, you can start with the lower profile components or use a strategy that makes sense for you.

For me, I’ll start from around the upper right corner as a starting point.

Mounting the AMS1117
Mounting the tantalum capacitors

Tantalum capacitors have polarity (positive and negative terminals).

As shown in the image, make sure the line (darker color) is on the side marked with a “+”.

Mounting the resistors

Resistors don’t have polarity, so you can mount them in any direction you prefer.

Mounting the snesCIC Chip

Mounting the ceramic capacitors

Ceramic capacitors also don’t have polarity, so you can mount them in either direction without any issues.

Modification: Changed the LEDs to the backside of the logo.

And once you’ve added the remaining resistors and components, you can proceed with the modification element of Cartridge Reader Alter, which involves installing the chip LED.

Install in this orientation

The position is just behind the logo.
The solder resist is left open to allow the LED light to shine through.

This chip LED is a little bit special. Normally, the light-emitting side is on the top, but it is on the bottom.

The product is called XZMDKCBDDG45S-9 from SunLED. The data sheet is here.

It seems that some people use it for DIY keyboards, etc.

Modification: Modified for easier installation of capacitors.

Mount it here.

Completely this is where I changed it because when I was installing it myself I was like “ummm…”.

It can be installed like this

Fast forward to completion

For now, we will connect the remaining pin headers and cartridge connectors.

GB slots installed…
Attach a clock generator connector…

Ah, yes. As for the soldering of the pins, etc., if it looks like a mountain when viewed from the side, I think it looks good without excessive solder. I’m not a professional engineer, so maybe I’m not doing it right…

It looks like this

Almost finished!?

OK OK

Almost all parts have been installed.

By the way, the microSD card slot usually arrives bent like this when you buy it.

Curved pin

As it is, there is difficulty in connection, so it could be bent with pliers, etc. However, there is a sense of insecurity about durability and contact failure due to metal fatigue, so we obtained a small lot of straight ones by special order.

Straightforward and secure

So, all that is left is to attach the clock generator and this microSD card slot to the main unit…

oops

😮

Modification: N64 controller port added

This is the one I was glimpsing.

The original specification was to cut the extension cable, strip the three inner cables of their membrane, and solder them to the pad.

This connector was adopted this time because it was not very good looking due to the cable growing and was a bit of a sensitive point.

This is the one that comes up in searches for N64 connectors on aliexpress and other sites.
Apparently, it is also used in cartreader V4.

N64 controller port installation

Completed

…So, all installation is complete. Don’t forget to turn off the soldering iron.

Now, let’s connect the Arduino and test the operation.

No problem!

And…

A view of the glowing LED behind the logo!

Logo LED No problem!
What color do you like?
It’s looking cute.

I am glad that the lighting treatment from the back side of the LEDs worked well.

Not doing it…?

Essentially, the process of creating Cartreader V3 involves “removing two parts from the Arduino” and “connecting the Arduino and Cartreader with a cable“.

Removing two parts from the Arduino involved the risk of breaking the Arduino.
Also, connecting the Arduino and Cartreader with a cable could cause the pattern or parts to peel off.

The reason why the process was not done this time was…

CARTREADER
USB Type-C

next time

\Arduino compatible for Cartreader

I made a Cartreaduino Mega 2560 with USB Type-C!

Leave a Reply

Your email address will not be published. Required fields are marked *