mirror of
https://github.com/sanni/cartreader.git
synced 2024-11-10 23:15:08 +01:00
Initial commit
This commit is contained in:
commit
6ab6e1caac
1105
Cart_Reader/Cart_Reader.ino
Normal file
1105
Cart_Reader/Cart_Reader.ino
Normal file
File diff suppressed because it is too large
Load Diff
20
Cart_Reader/EEPROMAnything.h
Normal file
20
Cart_Reader/EEPROMAnything.h
Normal file
@ -0,0 +1,20 @@
|
||||
#include <EEPROM.h>
|
||||
#include <Arduino.h> // for type definitions
|
||||
|
||||
template <class T> int EEPROM_writeAnything(int ee, const T& value)
|
||||
{
|
||||
const byte* p = (const byte*)(const void*)&value;
|
||||
unsigned int i;
|
||||
for (i = 0; i < sizeof(value); i++)
|
||||
EEPROM.write(ee++, *p++);
|
||||
return i;
|
||||
}
|
||||
|
||||
template <class T> int EEPROM_readAnything(int ee, T& value)
|
||||
{
|
||||
byte* p = (byte*)(void*)&value;
|
||||
unsigned int i;
|
||||
for (i = 0; i < sizeof(value); i++)
|
||||
*p++ = EEPROM.read(ee++);
|
||||
return i;
|
||||
}
|
662
Cart_Reader/FLASH.ino
Normal file
662
Cart_Reader/FLASH.ino
Normal file
@ -0,0 +1,662 @@
|
||||
//******************************************
|
||||
// FLASHROM
|
||||
//******************************************
|
||||
|
||||
/******************************************
|
||||
Variables
|
||||
*****************************************/
|
||||
// Flashrom
|
||||
char flashid[5];
|
||||
unsigned long flashSize;
|
||||
byte flashromType;
|
||||
byte secondID = 1;
|
||||
unsigned long time;
|
||||
unsigned long blank;
|
||||
|
||||
/******************************************
|
||||
Menu
|
||||
*****************************************/
|
||||
// Flash menu items
|
||||
const char flashMenuItem1[] PROGMEM = "Blankcheck";
|
||||
const char flashMenuItem2[] PROGMEM = "Erase";
|
||||
const char flashMenuItem3[] PROGMEM = "Read";
|
||||
const char flashMenuItem4[] PROGMEM = "Write";
|
||||
const char flashMenuItem5[] PROGMEM = "ID";
|
||||
const char flashMenuItem6[] PROGMEM = "Print";
|
||||
const char flashMenuItem7[] PROGMEM = "Reset";
|
||||
const char* const menuOptionsFLASH[] PROGMEM = {flashMenuItem1, flashMenuItem2, flashMenuItem3, flashMenuItem4, flashMenuItem5, flashMenuItem6, flashMenuItem7};
|
||||
|
||||
void flashromMenu() {
|
||||
// create menu with title and 7 options to choose from
|
||||
unsigned char mainMenu;
|
||||
// Copy menuOptions of of progmem
|
||||
convertPgm(menuOptionsFLASH, 7);
|
||||
mainMenu = question_box("Flashrom Writer", menuOptions, 7, 0);
|
||||
|
||||
// wait for user choice to come back from the question box menu
|
||||
switch (mainMenu)
|
||||
{
|
||||
case 0:
|
||||
display_Clear();
|
||||
println_Msg(F("Blankcheck"));
|
||||
display_Update();
|
||||
time = millis();
|
||||
if (flashromType == 1)
|
||||
resetFlash29F032();
|
||||
else
|
||||
resetFlash29F1610();
|
||||
blankcheck_Flash();
|
||||
break;
|
||||
|
||||
case 1:
|
||||
display_Clear();
|
||||
println_Msg(F("Erasing Flashrom"));
|
||||
println_Msg(F("Please wait..."));
|
||||
display_Update();
|
||||
time = millis();
|
||||
if (flashromType == 1) {
|
||||
eraseFlash29F032();
|
||||
}
|
||||
else {
|
||||
eraseFlash29F1610();
|
||||
delay(1000);
|
||||
busyCheck29F1610();
|
||||
}
|
||||
println_Msg(F("Flashrom erased"));
|
||||
display_Update();
|
||||
if (flashromType == 1)
|
||||
resetFlash29F032();
|
||||
else
|
||||
resetFlash29F1610();
|
||||
break;
|
||||
|
||||
case 2:
|
||||
time = millis();
|
||||
if (flashromType == 1)
|
||||
resetFlash29F032();
|
||||
else
|
||||
resetFlash29F1610();
|
||||
readFlash();
|
||||
break;
|
||||
|
||||
case 3:
|
||||
filePath[0] = '\0';
|
||||
sd.chdir("/");
|
||||
fileBrowser("Select File");
|
||||
display_Clear();
|
||||
time = millis();
|
||||
if (flashromType == 1)
|
||||
writeFlash29F032();
|
||||
else if (flashromType == 2)
|
||||
writeFlash29F1610();
|
||||
|
||||
// Reset twice just to be sure
|
||||
delay(1000);
|
||||
if (flashromType == 1)
|
||||
resetFlash29F032();
|
||||
else
|
||||
resetFlash29F1610();
|
||||
delay(1000);
|
||||
if (flashromType == 1)
|
||||
resetFlash29F032();
|
||||
else
|
||||
resetFlash29F1610();
|
||||
delay(1000);
|
||||
verifyFlash();
|
||||
break;
|
||||
|
||||
case 4:
|
||||
time = 0;
|
||||
display_Clear();
|
||||
println_Msg(F("ID Flashrom"));
|
||||
if (flashromType == 1)
|
||||
idFlash29F032();
|
||||
else
|
||||
idFlash29F1610();
|
||||
println_Msg(flashid);
|
||||
display_Update();
|
||||
if (flashromType == 1)
|
||||
resetFlash29F032();
|
||||
else
|
||||
resetFlash29F1610();
|
||||
break;
|
||||
|
||||
case 5:
|
||||
time = 0;
|
||||
display_Clear();
|
||||
println_Msg(F("Print first 70Bytes"));
|
||||
display_Update();
|
||||
if (flashromType == 1)
|
||||
resetFlash29F032();
|
||||
else
|
||||
resetFlash29F1610();
|
||||
printFlash(70);
|
||||
break;
|
||||
|
||||
case 6:
|
||||
time = 0;
|
||||
display_Clear();
|
||||
display_Update();
|
||||
if (flashromType == 1)
|
||||
resetFlash29F032();
|
||||
else
|
||||
resetFlash29F1610();
|
||||
delay(500);
|
||||
asm volatile (" jmp 0");
|
||||
break;
|
||||
}
|
||||
if (time != 0) {
|
||||
print_Msg(F("Operation took : "));
|
||||
print_Msg((millis() - time) / 1000, DEC);
|
||||
println_Msg(F("s"));
|
||||
display_Update();
|
||||
}
|
||||
print_Msg(F("Press Button..."));
|
||||
display_Update();
|
||||
wait();
|
||||
}
|
||||
|
||||
/******************************************
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_Flash() {
|
||||
// Set Address Pins to Output
|
||||
//A0-A7
|
||||
DDRF = 0xFF;
|
||||
//A8-A15
|
||||
DDRK = 0xFF;
|
||||
//A16-A23
|
||||
DDRL = 0xFF;
|
||||
|
||||
// Set Control Pins to Output OE(PH1) WE(PH4) CE(PH6)
|
||||
DDRH |= (1 << 1) | (1 << 4) | (1 << 6);
|
||||
// Setting OE(PH1) WE(PH4) HIGH
|
||||
PORTH |= (1 << 1) | (1 << 4);
|
||||
// Setting CE(PH6) LOW
|
||||
PORTH &= ~(1 << 6);
|
||||
|
||||
// Set Data Pins (D0-D7) to Input
|
||||
DDRC = 0x00;
|
||||
// Disable Internal Pullups
|
||||
PORTC = 0x00;
|
||||
|
||||
// ID flash
|
||||
idFlash29F032();
|
||||
|
||||
// Print start screen
|
||||
idtheflash:
|
||||
display_Clear();
|
||||
display_Update();
|
||||
println_Msg(F("Flashrom Writer 8bit"));
|
||||
println_Msg(" ");
|
||||
println_Msg(" ");
|
||||
print_Msg(F("Flash ID: "));
|
||||
println_Msg(flashid);
|
||||
|
||||
if (strcmp(flashid, "C2F1") == 0) {
|
||||
println_Msg(F("MX29F1610 detected"));
|
||||
flashSize = 2097152;
|
||||
flashromType = 2;
|
||||
}
|
||||
else if (strcmp(flashid, "C2F9") == 0) {
|
||||
println_Msg(F("MX29L3211 detected"));
|
||||
println_Msg(F("ATTENTION 3.3V"));
|
||||
flashSize = 4194304;
|
||||
flashromType = 2;
|
||||
}
|
||||
else if (strcmp(flashid, "0141") == 0) {
|
||||
println_Msg(F("AM29F032B"));
|
||||
flashSize = 4194304;
|
||||
flashromType = 1;
|
||||
}
|
||||
else if (strcmp(flashid, "01AD") == 0) {
|
||||
println_Msg(F("AM29F016B"));
|
||||
flashSize = 2097152;
|
||||
flashromType = 1;
|
||||
}
|
||||
else if (strcmp(flashid, "04D4") == 0) {
|
||||
println_Msg(F("MBM29F033C"));
|
||||
flashSize = 4194304;
|
||||
flashromType = 1;
|
||||
}
|
||||
else if (secondID) {
|
||||
idFlash29F1610();
|
||||
secondID = 0;
|
||||
goto idtheflash;
|
||||
}
|
||||
else {
|
||||
print_Error(F("Unknown flashrom"), true);
|
||||
}
|
||||
println_Msg(" ");
|
||||
println_Msg(F("Press Button..."));
|
||||
display_Update();
|
||||
if (flashromType == 1)
|
||||
resetFlash29F032();
|
||||
else
|
||||
resetFlash29F1610();
|
||||
wait();
|
||||
}
|
||||
|
||||
/******************************************
|
||||
I/O Functions
|
||||
*****************************************/
|
||||
// Switch data pins to read
|
||||
void dataIn_Flash() {
|
||||
// Set to Input
|
||||
DDRC = 0x00;
|
||||
}
|
||||
|
||||
/******************************************
|
||||
Low level functions
|
||||
*****************************************/
|
||||
void writeByte_Flash(unsigned long myAddress, byte myData) {
|
||||
PORTF = myAddress & 0xFF;
|
||||
PORTK = (myAddress >> 8) & 0xFF;
|
||||
PORTL = (myAddress >> 16) & 0xFF;
|
||||
PORTC = myData;
|
||||
|
||||
// Arduino running at 16Mhz -> one nop = 62.5ns
|
||||
// Wait till output is stable
|
||||
__asm__("nop\n\t");
|
||||
|
||||
// Switch WE(PH4) to LOW
|
||||
PORTH &= ~(1 << 4);
|
||||
|
||||
// Leave WE low for at least 60ns
|
||||
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
|
||||
|
||||
// Switch WE(PH4) to HIGH
|
||||
PORTH |= (1 << 4);
|
||||
|
||||
// Leave WE high for at least 50ns
|
||||
__asm__("nop\n\t");
|
||||
}
|
||||
|
||||
byte readByte_Flash(unsigned long myAddress) {
|
||||
PORTF = myAddress & 0xFF;
|
||||
PORTK = (myAddress >> 8) & 0xFF;
|
||||
PORTL = (myAddress >> 16) & 0xFF;
|
||||
|
||||
// Arduino running at 16Mhz -> one nop = 62.5ns
|
||||
__asm__("nop\n\t");
|
||||
|
||||
// Setting OE(PH1) LOW
|
||||
PORTH &= ~(1 << 1);
|
||||
|
||||
__asm__("nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t""nop\n\t");
|
||||
|
||||
// Read
|
||||
byte tempByte = PINC;
|
||||
|
||||
// Setting OE(PH1) HIGH
|
||||
PORTH |= (1 << 1);
|
||||
__asm__("nop\n\t");
|
||||
|
||||
return tempByte;
|
||||
}
|
||||
|
||||
/******************************************
|
||||
29F032 flashrom functions
|
||||
*****************************************/
|
||||
void resetFlash29F032() {
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
// Reset command sequence
|
||||
writeByte_Flash(0x555, 0xf0);
|
||||
|
||||
// Set data pins to input again
|
||||
dataIn_Flash();
|
||||
}
|
||||
|
||||
void idFlash29F032() {
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
// ID command sequence
|
||||
writeByte_Flash(0x555, 0xaa);
|
||||
writeByte_Flash(0x2aa, 0x55);
|
||||
writeByte_Flash(0x555, 0x90);
|
||||
|
||||
// Set data pins to input again
|
||||
dataIn_Flash();
|
||||
|
||||
// Read the two id bytes into a string
|
||||
sprintf(flashid, "%02X%02X", readByte_Flash(0), readByte_Flash(1));
|
||||
}
|
||||
|
||||
void eraseFlash29F032() {
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
// Erase command sequence
|
||||
writeByte_Flash(0x555, 0xaa);
|
||||
writeByte_Flash(0x2aa, 0x55);
|
||||
writeByte_Flash(0x555, 0x80);
|
||||
writeByte_Flash(0x555, 0xaa);
|
||||
writeByte_Flash(0x2aa, 0x55);
|
||||
writeByte_Flash(0x555, 0x10);
|
||||
|
||||
// Set data pins to input again
|
||||
dataIn_Flash();
|
||||
|
||||
// Read the status register
|
||||
byte statusReg = readByte_Flash(0);
|
||||
|
||||
// After a completed erase D7 will output 1
|
||||
while ((statusReg & 0x80) != 0x80) {
|
||||
// Blink led
|
||||
PORTB ^= (1 << 4);
|
||||
delay(100);
|
||||
// Update Status
|
||||
statusReg = readByte_Flash(0);
|
||||
}
|
||||
}
|
||||
|
||||
void writeFlash29F032() {
|
||||
// Create filepath
|
||||
sprintf(filePath, "%s/%s", filePath, fileName);
|
||||
print_Msg(F("Flashing file "));
|
||||
print_Msg(filePath);
|
||||
println_Msg(F("..."));
|
||||
display_Update();
|
||||
|
||||
// Open file on sd card
|
||||
if (myFile.open(filePath, O_READ)) {
|
||||
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
// Fill sdBuffer
|
||||
for (unsigned long currByte = 0; currByte < flashSize; currByte += 512) {
|
||||
myFile.read(sdBuffer, 512);
|
||||
// Blink led
|
||||
if (currByte % 2048 == 0)
|
||||
PORTB ^= (1 << 4);
|
||||
for (unsigned long c = 0; c < 512; c++) {
|
||||
// Write command sequence
|
||||
writeByte_Flash(0x555, 0xaa);
|
||||
writeByte_Flash(0x2aa, 0x55);
|
||||
writeByte_Flash(0x555, 0xa0);
|
||||
// Write current byte
|
||||
writeByte_Flash(currByte + c, sdBuffer[c]);
|
||||
busyCheck29F032(sdBuffer[c]);
|
||||
}
|
||||
}
|
||||
// Set data pins to input again
|
||||
dataIn_Flash();
|
||||
|
||||
// Close the file:
|
||||
myFile.close();
|
||||
}
|
||||
else {
|
||||
println_Msg(F("Can't open file"));
|
||||
display_Update();
|
||||
}
|
||||
}
|
||||
|
||||
void busyCheck29F032(byte c) {
|
||||
// Set data pins to input
|
||||
dataIn_Flash();
|
||||
|
||||
// Setting OE(PH1) CE(PH6)LOW
|
||||
PORTH &= ~((1 << 1) | (1 << 6));
|
||||
// Setting WE(PH4) HIGH
|
||||
PORTH |= (1 << 4);
|
||||
|
||||
//When the Embedded Program algorithm is complete, the device outputs the datum programmed to D7
|
||||
while ((PINC & 0x80) != (c & 0x80)) {}
|
||||
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
// Setting OE(PH1) HIGH
|
||||
PORTH |= (1 << 1);
|
||||
}
|
||||
/******************************************
|
||||
29F1610 flashrom functions
|
||||
*****************************************/
|
||||
|
||||
void resetFlash29F1610() {
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
// Reset command sequence
|
||||
writeByte_Flash(0x5555 << 1, 0xaa);
|
||||
writeByte_Flash(0x2aaa << 1, 0x55);
|
||||
writeByte_Flash(0x5555 << 1, 0xf0);
|
||||
|
||||
// Set data pins to input again
|
||||
dataIn_Flash();
|
||||
}
|
||||
|
||||
void writeFlash29F1610() {
|
||||
// Create filepath
|
||||
sprintf(filePath, "%s/%s", filePath, fileName);
|
||||
println_Msg(F("Flashing file "));
|
||||
println_Msg(filePath);
|
||||
display_Update();
|
||||
|
||||
// Open file on sd card
|
||||
if (myFile.open(filePath, O_READ)) {
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
for (unsigned long currByte = 0; currByte < flashSize; currByte += 128) {
|
||||
// Fill SDBuffer with 1 page at a time then write it repeat until all bytes are written
|
||||
myFile.read(sdBuffer, 128);
|
||||
|
||||
// Blink led
|
||||
if (currByte % 3072 == 0)
|
||||
PORTB ^= (1 << 4);
|
||||
|
||||
// Write command sequence
|
||||
writeByte_Flash(0x5555 << 1, 0xaa);
|
||||
writeByte_Flash(0x2aaa << 1, 0x55);
|
||||
writeByte_Flash(0x5555 << 1, 0xa0);
|
||||
|
||||
// Write one full page at a time
|
||||
for (byte c = 0; c < 128; c++) {
|
||||
writeByte_Flash(currByte + c, sdBuffer[c]);
|
||||
}
|
||||
|
||||
// Check if write is complete
|
||||
delayMicroseconds(100);
|
||||
busyCheck29F1610();
|
||||
}
|
||||
|
||||
// Set data pins to input again
|
||||
dataIn_Flash();
|
||||
|
||||
// Close the file:
|
||||
myFile.close();
|
||||
}
|
||||
else {
|
||||
println_Msg(F("Can't open file on SD"));
|
||||
display_Update();
|
||||
}
|
||||
}
|
||||
|
||||
void idFlash29F1610() {
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
// ID command sequence
|
||||
writeByte_Flash(0x5555 << 1, 0xaa);
|
||||
writeByte_Flash(0x2aaa << 1, 0x55);
|
||||
writeByte_Flash(0x5555 << 1, 0x90);
|
||||
|
||||
// Set data pins to input again
|
||||
dataIn_Flash();
|
||||
|
||||
// Read the two id bytes into a string
|
||||
sprintf(flashid, "%02X%02X", readByte_Flash(0), readByte_Flash(2));
|
||||
}
|
||||
|
||||
byte readStatusReg() {
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
// Status reg command sequence
|
||||
writeByte_Flash(0x5555 << 1, 0xaa);
|
||||
writeByte_Flash(0x2aaa << 1, 0x55);
|
||||
writeByte_Flash(0x5555 << 1, 0x70);
|
||||
|
||||
// Set data pins to input again
|
||||
dataIn_Flash();
|
||||
|
||||
// Read the status register
|
||||
byte statusReg = readByte_Flash(0);
|
||||
return statusReg;
|
||||
}
|
||||
|
||||
void eraseFlash29F1610() {
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
|
||||
// Erase command sequence
|
||||
writeByte_Flash(0x5555 << 1, 0xaa);
|
||||
writeByte_Flash(0x2aaa << 1, 0x55);
|
||||
writeByte_Flash(0x5555 << 1, 0x80);
|
||||
writeByte_Flash(0x5555 << 1, 0xaa);
|
||||
writeByte_Flash(0x2aaa << 1, 0x55);
|
||||
writeByte_Flash(0x5555 << 1, 0x10);
|
||||
|
||||
// Set data pins to input again
|
||||
dataIn_Flash();
|
||||
}
|
||||
|
||||
// Delay between write operations based on status register
|
||||
void busyCheck29F1610() {
|
||||
// Set data pins to input
|
||||
dataIn_Flash();
|
||||
|
||||
// Read the status register
|
||||
byte statusReg = readByte_Flash(0);
|
||||
|
||||
while ((statusReg & 0x80) != 0x80) {
|
||||
statusReg = readByte_Flash(0);
|
||||
}
|
||||
|
||||
// Set data pins to output
|
||||
dataOut();
|
||||
}
|
||||
|
||||
/******************************************
|
||||
Common flashrom functions
|
||||
*****************************************/
|
||||
void blankcheck_Flash() {
|
||||
println_Msg(F("Please wait..."));
|
||||
display_Update();
|
||||
|
||||
blank = 1;
|
||||
for (unsigned long currByte = 0; currByte < flashSize; currByte++) {
|
||||
// Check if all bytes are 0xFF
|
||||
if (readByte_Flash(currByte) != 0xFF) {
|
||||
currByte = flashSize;
|
||||
blank = 0;
|
||||
}
|
||||
}
|
||||
if (blank) {
|
||||
println_Msg(F("Flashrom is empty"));
|
||||
display_Update();
|
||||
}
|
||||
else {
|
||||
print_Error(F("Error: Not blank"), false);
|
||||
}
|
||||
}
|
||||
|
||||
void verifyFlash() {
|
||||
println_Msg(F("Verifying against"));
|
||||
println_Msg(filePath);
|
||||
display_Update();
|
||||
|
||||
// Open file on sd card
|
||||
if (myFile.open(filePath, O_READ)) {
|
||||
|
||||
blank = 0;
|
||||
for (unsigned long currByte = 0; currByte < flashSize; currByte += 512) {
|
||||
//fill SDBuffer
|
||||
myFile.read(sdBuffer, 512);
|
||||
for (unsigned long c = 0; c < 512; c++) {
|
||||
if (readByte_Flash(currByte + c) != sdBuffer[c]) {
|
||||
blank++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (blank == 0) {
|
||||
println_Msg(F("Flashrom verified OK"));
|
||||
display_Update();
|
||||
}
|
||||
else {
|
||||
print_Msg(F("Error: "));
|
||||
print_Msg(blank);
|
||||
println_Msg(F(" bytes "));
|
||||
print_Error(F("did not verify."), false);
|
||||
}
|
||||
// Close the file:
|
||||
myFile.close();
|
||||
}
|
||||
else {
|
||||
println_Msg(F("Can't open file on SD"));
|
||||
display_Update();
|
||||
}
|
||||
}
|
||||
|
||||
void readFlash() {
|
||||
// Reset to root directory
|
||||
sd.chdir("/");
|
||||
|
||||
// Get name, add extension and convert to char array for sd lib
|
||||
EEPROM_readAnything(0, foldern);
|
||||
sd.mkdir("FLASH", true);
|
||||
sd.chdir("FLASH");
|
||||
sprintf(fileName, "FL%d", foldern);
|
||||
strcat(fileName, ".bin");
|
||||
// write new folder number back to eeprom
|
||||
foldern = foldern + 1;
|
||||
EEPROM_writeAnything(0, foldern);
|
||||
|
||||
display_Clear();
|
||||
print_Msg(F("Saving as "));
|
||||
print_Msg(fileName);
|
||||
println_Msg(F("..."));
|
||||
display_Update();
|
||||
|
||||
// Open file on sd card
|
||||
if (!myFile.open(fileName, O_RDWR | O_CREAT)) {
|
||||
print_Error(F("Can't create file on SD"), true);
|
||||
}
|
||||
for (unsigned long currByte = 0; currByte < flashSize; currByte += 512) {
|
||||
for (unsigned long c = 0; c < 512; c++) {
|
||||
sdBuffer[c] = readByte_Flash(currByte + c);
|
||||
}
|
||||
myFile.write(sdBuffer, 512);
|
||||
}
|
||||
|
||||
// Close the file:
|
||||
myFile.close();
|
||||
println_Msg(F("Finished reading"));
|
||||
display_Update();
|
||||
}
|
||||
|
||||
void printFlash(int numBytes) {
|
||||
char myBuffer[3];
|
||||
|
||||
for (int currByte = 0; currByte < numBytes; currByte += 10) {
|
||||
for (int c = 0; c < 10; c++) {
|
||||
itoa (readByte_Flash(currByte + c), myBuffer, 16);
|
||||
for (int i = 0; i < 2 - strlen(myBuffer); i++) {
|
||||
print_Msg("0");
|
||||
}
|
||||
// Now print the significant bits
|
||||
print_Msg(myBuffer);
|
||||
}
|
||||
println_Msg("");
|
||||
}
|
||||
display_Update();
|
||||
}
|
||||
|
||||
//******************************************
|
||||
// End of File
|
||||
//******************************************
|
25
Cart_Reader/GB.ino
Normal file
25
Cart_Reader/GB.ino
Normal file
@ -0,0 +1,25 @@
|
||||
//******************************************
|
||||
// GAMEBOY
|
||||
//******************************************
|
||||
|
||||
/******************************************
|
||||
Menu
|
||||
*****************************************/
|
||||
|
||||
void gbMenu() {
|
||||
println_Msg(F("WORK IN PROGRESS"));
|
||||
println_Msg(F("Press Button..."));
|
||||
display_Update();
|
||||
wait();
|
||||
asm volatile (" jmp 0");
|
||||
}
|
||||
|
||||
/******************************************
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup_GB() {
|
||||
}
|
||||
|
||||
//******************************************
|
||||
// End of File
|
||||
//******************************************
|
2067
Cart_Reader/N64.ino
Normal file
2067
Cart_Reader/N64.ino
Normal file
File diff suppressed because it is too large
Load Diff
1439
Cart_Reader/NP.ino
Normal file
1439
Cart_Reader/NP.ino
Normal file
File diff suppressed because it is too large
Load Diff
2
Cart_Reader/README.md
Normal file
2
Cart_Reader/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
Double click on Cart_Reader.ino to open the program in the Arduino IDE.
|
||||
And don't forget to copy the files from the sd folder to the root of your sd card.
|
1121
Cart_Reader/SNS.ino
Normal file
1121
Cart_Reader/SNS.ino
Normal file
File diff suppressed because it is too large
Load Diff
39
README.md
Normal file
39
README.md
Normal file
@ -0,0 +1,39 @@
|
||||
# Cartridge Reader for Arduino Mega2560
|
||||
|
||||
![cartreaderpcb](https://dl.dropboxusercontent.com/u/20912715/snes/Snes_Cart_Reader_Mega_Shield/cartreader_n642.jpg)
|
||||
|
||||
####Features:
|
||||
- Reads SNES roms and reads/writes save games from and to the SNES cartridge
|
||||
Supported cartridge types so far: LoRom, HiRom, ExHiRom, SuperFX, SuperFX2, SA1(can't write save back to SA1)
|
||||
- Read and writes SFC Nintendo Power Cartridges
|
||||
- Reads N64 roms and reads/writes save games(4K/16K Eeprom + Sram + Flashram)
|
||||
- Reads and writes N64 controller paks and also can test a N64 controller
|
||||
- Programs Flashroms like 29F016, 29F032, 29F033, 29F1610 and 29L3211(needs 3.3V).
|
||||
|
||||
![cartreaderpcb](http://dl.dropboxusercontent.com/u/20912715/snes/Snes_Cart_Reader_Mega_Shield/cartreader_flash.jpg)
|
||||
|
||||
####Be sure to check the guides in the wiki too.
|
||||
|
||||
[![](http://dl.dropboxusercontent.com/u/20912715/video1.jpg)](https://www.youtube.com/watch?v=YGsC28IBr2A)
|
||||
|
||||
####Thanks to:
|
||||
MichlK - ROM-Reader for Super Nintendo
|
||||
Jeff Saltzman - 4-Way Button
|
||||
Wayne and Layne - Video-Game-Shield menu
|
||||
skaman - SNES enhancements
|
||||
nocash - Nintendo Power commands
|
||||
crazynation - N64 bus timing
|
||||
hkz/themanbehindthecurtain - N64 flashram commands
|
||||
jago85 - help with N64 stuff
|
||||
Andrew Brown/Peter Den Hartog - N64 controller protocol
|
||||
bryc - mempak
|
||||
Shaun Taylor - N64 controller CRC functions
|
||||
Angus Gratton - CRC32
|
||||
Tamanegi_taro - SA1 fix
|
||||
Snes9x - SuperFX Sram Fix
|
||||
|
||||
![cartreaderpcb](http://dl.dropboxusercontent.com/u/20912715/snes/Snes_Cart_Reader_Mega_Shield/cartreader_np.jpg)
|
||||
|
||||
####Please join the discussion at: http://forum.arduino.cc/index.php?topic=158974.0
|
||||
|
||||
![cartreaderpcb](http://dl.dropboxusercontent.com/u/20912715/snes/Snes_Cart_Reader_Mega_Shield/cartreader_stuff.jpg)
|
1
extras/README.md
Normal file
1
extras/README.md
Normal file
@ -0,0 +1 @@
|
||||
Here you will find additional stuff for your cart reader shield.
|
812
extras/controllertest/ControllerTest2.ino
Normal file
812
extras/controllertest/ControllerTest2.ino
Normal file
@ -0,0 +1,812 @@
|
||||
/**********************************************************************************
|
||||
Nintendo 64 Controller Test for Arduino Mega
|
||||
|
||||
Author: sanni
|
||||
Date: 2016-04-15
|
||||
Version: V2
|
||||
|
||||
OLED lib: http://www.rinkydinkelectronics.com/library.php?id=79
|
||||
|
||||
Thanks to:
|
||||
Andrew Brown/Peter Den Hartog - N64 send/get functions
|
||||
|
||||
**********************************************************************************/
|
||||
|
||||
#include <OLED_I2C.h>
|
||||
extern uint8_t SmallFont[];
|
||||
|
||||
// define LCD pins
|
||||
OLED myOLED(SDA, SCL, 8);
|
||||
|
||||
//define LED pin
|
||||
int ledPin = 10;
|
||||
|
||||
// These two macros toggle the eepDataPin/ControllerDataPin between input and output
|
||||
// External 1K pull-up resistor from eepDataPin to VCC required
|
||||
// 0x10 = 00010000 -> Port H Pin 4
|
||||
#define N64_HIGH DDRH &= ~0x10
|
||||
#define N64_LOW DDRH |= 0x10
|
||||
// Read the current state(0/1) of the eepDataPin
|
||||
#define N64_QUERY (PINH & 0x10)
|
||||
|
||||
// received Controller data
|
||||
char N64_raw_dump[33]; // 1 received bit per byte
|
||||
String rawStr = ""; // above char array read into a string
|
||||
struct {
|
||||
char stick_x;
|
||||
char stick_y;
|
||||
}
|
||||
N64_status;
|
||||
|
||||
// on which screens do we start
|
||||
int startscreen = 0;
|
||||
int mode = 0;
|
||||
int test = 1;
|
||||
|
||||
//stings that hold the buttons
|
||||
String button = "N/A";
|
||||
String lastbutton = "N/A";
|
||||
|
||||
//name of the current displayed result
|
||||
String anastick = "";
|
||||
|
||||
// Graph
|
||||
int xax = 22 + 24; // midpoint x
|
||||
int yax = 24; // midpoint y
|
||||
int zax = 24; // size
|
||||
|
||||
// variables to display test data of different sticks
|
||||
int upx = 0;
|
||||
int upy = 0;
|
||||
int uprightx = 0;
|
||||
int uprighty = 0;
|
||||
int rightx = 0;
|
||||
int righty = 0;
|
||||
int downrightx = 0;
|
||||
int downrighty = 0;
|
||||
int downx = 0;
|
||||
int downy = 0;
|
||||
int downleftx = 0;
|
||||
int downlefty = 0;
|
||||
int leftx = 0;
|
||||
int lefty = 0;
|
||||
int upleftx = 0;
|
||||
int uplefty = 0;
|
||||
|
||||
// variables to save test data
|
||||
int bupx = 0;
|
||||
int bupy = 0;
|
||||
int buprightx = 0;
|
||||
int buprighty = 0;
|
||||
int brightx = 0;
|
||||
int brighty = 0;
|
||||
int bdownrightx = 0;
|
||||
int bdownrighty = 0;
|
||||
int bdownx = 0;
|
||||
int bdowny = 0;
|
||||
int bdownleftx = 0;
|
||||
int bdownlefty = 0;
|
||||
int bleftx = 0;
|
||||
int blefty = 0;
|
||||
int bupleftx = 0;
|
||||
int buplefty = 0;
|
||||
int results = 0;
|
||||
|
||||
void N64_send(unsigned char *buffer, char length);
|
||||
void N64_get();
|
||||
|
||||
void setup()
|
||||
{
|
||||
// Communication with controller on this pin
|
||||
// Don't remove these lines, we don't want to push +5V to the controller
|
||||
// Output a low signal
|
||||
PORTH &= ~(1 << 4);
|
||||
// Set Controller Data Pin(PH4) to Input
|
||||
DDRH &= ~(1 << 4);
|
||||
|
||||
// Led
|
||||
pinMode(ledPin, OUTPUT);
|
||||
|
||||
// OLED
|
||||
myOLED.begin();
|
||||
myOLED.setFont(SmallFont);
|
||||
}
|
||||
|
||||
// This sends the given byte sequence to the controller
|
||||
// length must be at least 1
|
||||
// Oh, it destroys the buffer passed in as it writes it
|
||||
|
||||
void N64_send(unsigned char *buffer, char length)
|
||||
{
|
||||
// Send these bytes
|
||||
char bits;
|
||||
|
||||
bool bit;
|
||||
|
||||
// This routine is very carefully timed by examining the assembly output.
|
||||
// Do not change any statements, it could throw the timings off
|
||||
//
|
||||
// We get 16 cycles per microsecond, which should be plenty, but we need to
|
||||
// be conservative. Most assembly ops take 1 cycle, but a few take 2
|
||||
//
|
||||
// I use manually constructed for-loops out of gotos so I have more control
|
||||
// over the outputted assembly. I can insert nops where it was impossible
|
||||
// with a for loop
|
||||
|
||||
asm volatile (";Starting outer for loop");
|
||||
outer_loop:
|
||||
{
|
||||
asm volatile (";Starting inner for loop");
|
||||
bits = 8;
|
||||
inner_loop:
|
||||
{
|
||||
// Starting a bit, set the line low
|
||||
asm volatile (";Setting line to low");
|
||||
N64_LOW; // 1 op, 2 cycles
|
||||
|
||||
asm volatile (";branching");
|
||||
if (*buffer >> 7) {
|
||||
asm volatile (";Bit is a 1");
|
||||
// 1 bit
|
||||
// remain low for 1us, then go high for 3us
|
||||
// nop block 1
|
||||
asm volatile ("nop\nnop\nnop\nnop\nnop\n");
|
||||
|
||||
asm volatile (";Setting line to high");
|
||||
N64_HIGH;
|
||||
|
||||
// nop block 2
|
||||
// we'll wait only 2us to sync up with both conditions
|
||||
// at the bottom of the if statement
|
||||
asm volatile ("nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
);
|
||||
|
||||
}
|
||||
else {
|
||||
asm volatile (";Bit is a 0");
|
||||
// 0 bit
|
||||
// remain low for 3us, then go high for 1us
|
||||
// nop block 3
|
||||
asm volatile ("nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\n");
|
||||
|
||||
asm volatile (";Setting line to high");
|
||||
N64_HIGH;
|
||||
|
||||
// wait for 1us
|
||||
asm volatile ("; end of conditional branch, need to wait 1us more before next bit");
|
||||
|
||||
}
|
||||
// end of the if, the line is high and needs to remain
|
||||
// high for exactly 16 more cycles, regardless of the previous
|
||||
// branch path
|
||||
|
||||
asm volatile (";finishing inner loop body");
|
||||
--bits;
|
||||
if (bits != 0) {
|
||||
// nop block 4
|
||||
// this block is why a for loop was impossible
|
||||
asm volatile ("nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\n");
|
||||
// rotate bits
|
||||
asm volatile (";rotating out bits");
|
||||
*buffer <<= 1;
|
||||
|
||||
goto inner_loop;
|
||||
} // fall out of inner loop
|
||||
}
|
||||
asm volatile (";continuing outer loop");
|
||||
// In this case: the inner loop exits and the outer loop iterates,
|
||||
// there are /exactly/ 16 cycles taken up by the necessary operations.
|
||||
// So no nops are needed here (that was lucky!)
|
||||
--length;
|
||||
if (length != 0) {
|
||||
++buffer;
|
||||
goto outer_loop;
|
||||
} // fall out of outer loop
|
||||
}
|
||||
|
||||
// send a single stop (1) bit
|
||||
// nop block 5
|
||||
asm volatile ("nop\nnop\nnop\nnop\n");
|
||||
N64_LOW;
|
||||
// wait 1 us, 16 cycles, then raise the line
|
||||
// 16-2=14
|
||||
// nop block 6
|
||||
asm volatile ("nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\n");
|
||||
N64_HIGH;
|
||||
|
||||
}
|
||||
|
||||
void N64_get()
|
||||
{
|
||||
// listen for the expected 8 bytes of data back from the controller and
|
||||
// blast it out to the N64_raw_dump array, one bit per byte for extra speed.
|
||||
// Afterwards, call translate_raw_data() to interpret the raw data and pack
|
||||
// it into the N64_status struct.
|
||||
asm volatile (";Starting to listen");
|
||||
unsigned char timeout;
|
||||
char bitcount = 32;
|
||||
char *bitbin = N64_raw_dump;
|
||||
|
||||
// Again, using gotos here to make the assembly more predictable and
|
||||
// optimization easier (please don't kill me)
|
||||
read_loop:
|
||||
timeout = 0x3f;
|
||||
// wait for line to go low
|
||||
while (N64_QUERY) {
|
||||
if (!--timeout)
|
||||
return;
|
||||
}
|
||||
// wait approx 2us and poll the line
|
||||
asm volatile (
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
"nop\nnop\nnop\nnop\nnop\n"
|
||||
);
|
||||
*bitbin = N64_QUERY;
|
||||
++bitbin;
|
||||
--bitcount;
|
||||
if (bitcount == 0)
|
||||
return;
|
||||
|
||||
// wait for line to go high again
|
||||
// it may already be high, so this should just drop through
|
||||
timeout = 0x3f;
|
||||
while (!N64_QUERY) {
|
||||
if (!--timeout)
|
||||
return;
|
||||
}
|
||||
goto read_loop;
|
||||
|
||||
}
|
||||
|
||||
void get_button()
|
||||
{
|
||||
// Command to send to the gamecube
|
||||
// The last bit is rumble, flip it to rumble
|
||||
// yes this does need to be inside the loop, the
|
||||
// array gets mutilated when it goes through N64_send
|
||||
unsigned char command[] = {
|
||||
0x01
|
||||
};
|
||||
|
||||
// don't want interrupts getting in the way
|
||||
noInterrupts();
|
||||
// send those 3 bytes
|
||||
N64_send(command, 1);
|
||||
// read in data and dump it to N64_raw_dump
|
||||
N64_get();
|
||||
// end of time sensitive code
|
||||
interrupts();
|
||||
|
||||
// The get_N64_status function sloppily dumps its data 1 bit per byte
|
||||
// into the get_status_extended char array. It's our job to go through
|
||||
// that and put each piece neatly into the struct N64_status
|
||||
int i;
|
||||
memset(&N64_status, 0, sizeof(N64_status));
|
||||
|
||||
// bits: joystick x value
|
||||
// These are 8 bit values centered at 0x80 (128)
|
||||
for (i = 0; i < 8; i++) {
|
||||
N64_status.stick_x |= N64_raw_dump[16 + i] ? (0x80 >> i) : 0;
|
||||
}
|
||||
for (i = 0; i < 8; i++) {
|
||||
N64_status.stick_y |= N64_raw_dump[24 + i] ? (0x80 >> i) : 0;
|
||||
}
|
||||
|
||||
// read char array N64_raw_dump into string rawStr
|
||||
rawStr = "";
|
||||
for (i = 0; i < 16; i++) {
|
||||
rawStr = rawStr + String(N64_raw_dump[i], DEC);
|
||||
}
|
||||
|
||||
// Buttons (A,B,Z,S,DU,DD,DL,DR,0,0,L,R,CU,CD,CL,CR)
|
||||
if (rawStr.substring(0, 16) == "0000000000000000") {
|
||||
lastbutton = button;
|
||||
button = "Press a button";
|
||||
digitalWrite(ledPin, LOW);
|
||||
}
|
||||
else
|
||||
{
|
||||
digitalWrite(ledPin, HIGH);
|
||||
for (int i = 0; i < 16; i++)
|
||||
{
|
||||
// seems to be 16, 8 or 4 depending on what pin is used
|
||||
if (N64_raw_dump[i] == 16)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 7:
|
||||
button = "D-Right";
|
||||
break;
|
||||
|
||||
case 6:
|
||||
button = "D-Left";
|
||||
break;
|
||||
|
||||
case 5:
|
||||
button = "D-Down";
|
||||
break;
|
||||
|
||||
case 4:
|
||||
button = "D-Up";
|
||||
break;
|
||||
|
||||
case 3:
|
||||
button = "START";
|
||||
break;
|
||||
|
||||
case 2:
|
||||
button = "Z";
|
||||
break;
|
||||
|
||||
case 1:
|
||||
button = "B";
|
||||
break;
|
||||
|
||||
case 0:
|
||||
button = "A";
|
||||
break;
|
||||
|
||||
case 15:
|
||||
button = "C-Right";
|
||||
break;
|
||||
|
||||
case 14:
|
||||
button = "C-Left";
|
||||
break;
|
||||
|
||||
case 13:
|
||||
button = "C-Down";
|
||||
break;
|
||||
|
||||
case 12:
|
||||
button = "C-Up";
|
||||
break;
|
||||
|
||||
case 11:
|
||||
button = "R";
|
||||
break;
|
||||
|
||||
case 10:
|
||||
button = "L";
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void printSTR(String st, int x, int y)
|
||||
{
|
||||
char buf[st.length() + 1];
|
||||
|
||||
st.toCharArray(buf, st.length() + 1);
|
||||
myOLED.print(buf, x, y);
|
||||
}
|
||||
|
||||
void nextscreen()
|
||||
{
|
||||
if (button == "Press a button" && lastbutton == "START")
|
||||
{
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
if (startscreen != 4)
|
||||
startscreen = startscreen + 1;
|
||||
else
|
||||
{
|
||||
startscreen = 1;
|
||||
test = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
// Get Button and analog stick
|
||||
get_button();
|
||||
|
||||
switch (startscreen)
|
||||
{
|
||||
case 0: // Logo Screen
|
||||
{
|
||||
myOLED.print("ControllerTest", CENTER, 8);
|
||||
myOLED.print("V1.0", CENTER, 18);
|
||||
myOLED.drawLine(22 + 0, 28, 22 + 84, 28);
|
||||
myOLED.print("2013 sanni", CENTER, 32);
|
||||
myOLED.update();
|
||||
|
||||
delay(1500);
|
||||
startscreen = 1;
|
||||
myOLED.clrScr();
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
myOLED.print("Button Test", CENTER, 0);
|
||||
myOLED.drawLine(22 + 0, 10, 22 + 84, 10);
|
||||
|
||||
// Print Button
|
||||
printSTR(" " + button + " ", CENTER, 20);
|
||||
|
||||
// Print Stick X Value
|
||||
String stickx = String("X: " + String(N64_status.stick_x, DEC) + " ");
|
||||
printSTR(stickx, 22 + 0, 38);
|
||||
|
||||
// Print Stick Y Value
|
||||
String sticky = String("Y: " + String(N64_status.stick_y, DEC) + " ");
|
||||
printSTR(sticky, 22 + 42, 38);
|
||||
|
||||
//Update LCD
|
||||
myOLED.update();
|
||||
|
||||
// go to next screen
|
||||
nextscreen();
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
myOLED.print("Range", 22 + 52, 5);
|
||||
myOLED.print("Test", 22 + 52, 15);
|
||||
myOLED.drawRect(22 + 50, 0, 22 + 83, 25);
|
||||
|
||||
// Print Stick X Value
|
||||
String stickx = String("X:" + String(N64_status.stick_x, DEC) + " ");
|
||||
printSTR(stickx, 22 + 50, 28);
|
||||
|
||||
// Print Stick Y Value
|
||||
String sticky = String("Y:" + String(N64_status.stick_y, DEC) + " ");
|
||||
printSTR(sticky, 22 + 50, 38);
|
||||
|
||||
// Draw Axis
|
||||
myOLED.drawLine(xax - zax, yax, xax + zax, yax);
|
||||
myOLED.drawLine(xax, yax - zax, xax, yax + zax);
|
||||
myOLED.clrPixel(xax, yax - 80 / 4);
|
||||
myOLED.clrPixel(xax, yax + 80 / 4);
|
||||
myOLED.clrPixel(xax + 80 / 4, yax);
|
||||
myOLED.clrPixel(xax - 80 / 4, yax);
|
||||
|
||||
//Draw Analog Stick
|
||||
if (mode == 1)
|
||||
{
|
||||
myOLED.setPixel(xax + N64_status.stick_x / 4, yax - N64_status.stick_y / 4);
|
||||
//Update LCD
|
||||
myOLED.update();
|
||||
}
|
||||
else
|
||||
{
|
||||
myOLED.drawCircle(xax + N64_status.stick_x / 4, yax - N64_status.stick_y / 4, 2);
|
||||
//Update LCD
|
||||
myOLED.update();
|
||||
myOLED.clrScr();
|
||||
}
|
||||
|
||||
// switch mode
|
||||
if (button == "Press a button" && lastbutton == "Z")
|
||||
{
|
||||
if (mode == 0)
|
||||
{
|
||||
mode = 1;
|
||||
myOLED.clrScr();
|
||||
}
|
||||
else
|
||||
{
|
||||
mode = 0;
|
||||
myOLED.clrScr();
|
||||
}
|
||||
}
|
||||
// go to next screen
|
||||
nextscreen();
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
myOLED.print("Skipping Test", CENTER, 0);
|
||||
myOLED.drawLine(22 + 0, 10, 22 + 83, 10);
|
||||
myOLED.drawRect(22 + 0, 20, 22 + 83, 44);
|
||||
if (N64_status.stick_x > 0)
|
||||
myOLED.drawLine(22 + N64_status.stick_x, 20, 22 + N64_status.stick_x, 44);
|
||||
|
||||
//Update LCD
|
||||
myOLED.update();
|
||||
|
||||
if (button == "Press a button" && lastbutton == "Z")
|
||||
{
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
}
|
||||
// go to next screen
|
||||
nextscreen();
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
switch ( test )
|
||||
{
|
||||
case 0: // Display results
|
||||
{
|
||||
switch (results)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
anastick = "YOURS";
|
||||
upx = bupx;
|
||||
upy = bupy;
|
||||
uprightx = buprightx;
|
||||
uprighty = buprighty;
|
||||
rightx = brightx;
|
||||
righty = brighty;
|
||||
downrightx = bdownrightx;
|
||||
downrighty = bdownrighty;
|
||||
downx = bdownx;
|
||||
downy = bdowny;
|
||||
downleftx = bdownleftx;
|
||||
downlefty = bdownlefty;
|
||||
leftx = bleftx;
|
||||
lefty = blefty;
|
||||
upleftx = bupleftx;
|
||||
uplefty = buplefty;
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
results = 1;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
anastick = "ORIG";
|
||||
upx = 1;
|
||||
upy = 84;
|
||||
uprightx = 67;
|
||||
uprighty = 68;
|
||||
rightx = 83;
|
||||
righty = -2;
|
||||
downrightx = 67;
|
||||
downrighty = -69;
|
||||
downx = 3;
|
||||
downy = -85;
|
||||
downleftx = -69;
|
||||
downlefty = -70;
|
||||
leftx = -85;
|
||||
lefty = 0;
|
||||
upleftx = -68;
|
||||
uplefty = 68;
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
results = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
} //results
|
||||
myOLED.clrScr();
|
||||
|
||||
printSTR(anastick, 22 + 50, 0);
|
||||
|
||||
myOLED.print("U:", 22 + 50, 10);
|
||||
myOLED.printNumI(upy, RIGHT, 10);
|
||||
myOLED.print("D:", 22 + 50, 20);
|
||||
myOLED.printNumI(downy, RIGHT, 20);
|
||||
myOLED.print("L:", 22 + 50, 30);
|
||||
myOLED.printNumI(leftx, RIGHT, 30);
|
||||
myOLED.print("R:", 22 + 50, 40);
|
||||
myOLED.printNumI(rightx, RIGHT, 40);
|
||||
|
||||
myOLED.drawLine(xax + upx / 4, yax - upy / 4, xax + uprightx / 4, yax - uprighty / 4);
|
||||
myOLED.drawLine(xax + uprightx / 4, yax - uprighty / 4, xax + rightx / 4, yax - righty / 4);
|
||||
myOLED.drawLine(xax + rightx / 4, yax - righty / 4, xax + downrightx / 4, yax - downrighty / 4);
|
||||
myOLED.drawLine(xax + downrightx / 4, yax - downrighty / 4, xax + downx / 4, yax - downy / 4);
|
||||
myOLED.drawLine(xax + downx / 4, yax - downy / 4, xax + downleftx / 4, yax - downlefty / 4);
|
||||
myOLED.drawLine(xax + downleftx / 4, yax - downlefty / 4, xax + leftx / 4, yax - lefty / 4);
|
||||
myOLED.drawLine(xax + leftx / 4, yax - lefty / 4, xax + upleftx / 4, yax - uplefty / 4);
|
||||
myOLED.drawLine(xax + upleftx / 4, yax - uplefty / 4, xax + upx / 4, yax - upy / 4);
|
||||
|
||||
myOLED.setPixel(xax, yax);
|
||||
|
||||
//Update LCD
|
||||
myOLED.update();
|
||||
break;
|
||||
} //display results
|
||||
|
||||
case 1:// +y Up
|
||||
{
|
||||
myOLED.print("Hold Stick Up", CENTER, 18);
|
||||
myOLED.print("then press A", CENTER, 28);
|
||||
//myOLED.drawBitmap(110, 60, ana1);
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
bupx = N64_status.stick_x;
|
||||
bupy = N64_status.stick_y;
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
test = 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 2:// +y+x Up-Right
|
||||
{
|
||||
myOLED.print("Up-Right", CENTER, 22 );
|
||||
//myOLED.drawBitmap(110, 60, ana2);
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
buprightx = N64_status.stick_x;
|
||||
buprighty = N64_status.stick_y;
|
||||
test = 3;
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 3:// +x Right
|
||||
{
|
||||
myOLED.print("Right", CENTER, 22 );
|
||||
//myOLED.drawBitmap(110, 60, ana3);
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
brightx = N64_status.stick_x;
|
||||
brighty = N64_status.stick_y;
|
||||
test = 4;
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 4:// -y+x Down-Right
|
||||
{
|
||||
myOLED.print("Down-Right", CENTER, 22 );
|
||||
//myOLED.drawBitmap(110, 60, ana4);
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
bdownrightx = N64_status.stick_x;
|
||||
bdownrighty = N64_status.stick_y;
|
||||
test = 5;
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 5:// -y Down
|
||||
{
|
||||
myOLED.print("Down", CENTER, 22 );
|
||||
//myOLED.drawBitmap(110, 60, ana5);
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
bdownx = N64_status.stick_x;
|
||||
bdowny = N64_status.stick_y;
|
||||
test = 6;
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 6:// -y-x Down-Left
|
||||
{
|
||||
myOLED.print("Down-Left", CENTER, 22 );
|
||||
//myOLED.drawBitmap(110, 60, ana6);
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
bdownleftx = N64_status.stick_x;
|
||||
bdownlefty = N64_status.stick_y;
|
||||
test = 7;
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 7:// -x Left
|
||||
{
|
||||
myOLED.print("Left", CENTER, 22 );
|
||||
//myOLED.drawBitmap(110, 60, ana7);
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
bleftx = N64_status.stick_x;
|
||||
blefty = N64_status.stick_y;
|
||||
test = 8;
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 8:// +y+x Up-Left
|
||||
{
|
||||
myOLED.print("Up-Left", CENTER, 22);
|
||||
//myOLED.drawBitmap(110, 60, ana8);
|
||||
|
||||
if (button == "Press a button" && lastbutton == "A")
|
||||
{
|
||||
bupleftx = N64_status.stick_x;
|
||||
buplefty = N64_status.stick_y;
|
||||
test = 0;
|
||||
// reset button
|
||||
lastbutton = "N/A";
|
||||
|
||||
myOLED.clrScr();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (test != 0)
|
||||
{
|
||||
myOLED.print("Benchmark", CENTER, 0);
|
||||
myOLED.drawLine(22 + 0, 9, 22 + 83, 9);
|
||||
}
|
||||
myOLED.update();
|
||||
// go to next screen
|
||||
nextscreen();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
2
extras/controllertest/README.md
Normal file
2
extras/controllertest/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
This is my portable N64 Controller Tester edited to run on the Cart Reader Shield.
|
||||
The N64 controller's data line is connected to Arduino Mega Pin 7.
|
BIN
extras/controllertest/libraries/OLED_I2C.zip
Normal file
BIN
extras/controllertest/libraries/OLED_I2C.zip
Normal file
Binary file not shown.
4
extras/controllertest/libraries/README.md
Normal file
4
extras/controllertest/libraries/README.md
Normal file
@ -0,0 +1,4 @@
|
||||
Unzip and copy those into your Arduino library folder e.g. C:\Users\sanni\Documents\Arduino\libraries
|
||||
|
||||
You can also get the latest versions from their creators page:
|
||||
Oled lib: http://www.rinkydinkelectronics.com/library.php?id=79
|
BIN
extras/drivers/CH341SER.ZIP
Normal file
BIN
extras/drivers/CH341SER.ZIP
Normal file
Binary file not shown.
1
extras/drivers/README.md
Normal file
1
extras/drivers/README.md
Normal file
@ -0,0 +1 @@
|
||||
If you have an Arduino with CH341 USB to Serial Chip then you need to install these additional drivers.
|
2
extras/npsplit/README.md
Normal file
2
extras/npsplit/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
You can use this little program to split a 4MB Nintendo Power dump into the individual roms.
|
||||
Get the Java Runtimes from here in case you need them: http://www.java.com/en/download/manual.jsp
|
BIN
extras/npsplit/npsplit.exe
Normal file
BIN
extras/npsplit/npsplit.exe
Normal file
Binary file not shown.
149
extras/npsplit/npsplit.pde
Normal file
149
extras/npsplit/npsplit.pde
Normal file
@ -0,0 +1,149 @@
|
||||
/**********************************************************************************
|
||||
Nintendo Power Splitter
|
||||
|
||||
Author: sanni
|
||||
Date: 2016-05-02
|
||||
Version: V1
|
||||
|
||||
Compiled with Processing 3.0.2
|
||||
**********************************************************************************/
|
||||
|
||||
/******************************************
|
||||
Variables
|
||||
*****************************************/
|
||||
// Define 4MB byte array that stores the file
|
||||
byte[] NP = new byte[4194303];
|
||||
|
||||
// Define 12 byte array to store menu string
|
||||
byte menuString[] = {0x4D, 0x45, 0x4E, 0x55, 0x20, 0x50, 0x52, 0x4F, 0x47, 0x52, 0x41, 0x4D};
|
||||
|
||||
// Menu variables
|
||||
boolean npMenu = true;
|
||||
byte numGames = 0;
|
||||
|
||||
// rom info arrays
|
||||
char[][] romName = new char[8][21];
|
||||
int[] romAddress = new int[8];
|
||||
int[] romSize = new int[8];
|
||||
char[][] romCode = new char[8][12];
|
||||
boolean[] hirom = new boolean[8];
|
||||
|
||||
/******************************************
|
||||
Setup
|
||||
*****************************************/
|
||||
void setup() {
|
||||
// Make 500x300 pixel window with black background
|
||||
size(500, 300);
|
||||
background(0);
|
||||
|
||||
NP[4194302] = 0x66;
|
||||
|
||||
// Write title
|
||||
text("Nintendo Power Splitter V1", 20, 20);
|
||||
|
||||
// File open dialog
|
||||
selectInput("Select 4MB NP dump:", "fileSelected");
|
||||
noLoop();
|
||||
}
|
||||
|
||||
/******************************************
|
||||
Helper Functions
|
||||
*****************************************/
|
||||
// Loads selected file into byte array
|
||||
void fileSelected(File selection) {
|
||||
if (selection != null)
|
||||
NP = loadBytes(selection);
|
||||
}
|
||||
|
||||
/******************************************
|
||||
Main function
|
||||
*****************************************/
|
||||
void draw() {
|
||||
// Wait until array is filled with the 4MB file
|
||||
while (NP[4194302] == 0x66) {
|
||||
delay(200);
|
||||
}
|
||||
|
||||
// Check if menu is present
|
||||
for (int i = 0; i < 12; i++) {
|
||||
if (menuString[i] != NP[0x7FC0+i]) {
|
||||
npMenu = false;
|
||||
}
|
||||
}
|
||||
if (npMenu) {
|
||||
// Count number of games
|
||||
for (int i = 0x60000; i < 0x6E000; i += 0x2000) {
|
||||
if (NP[i] == numGames )
|
||||
numGames++;
|
||||
}
|
||||
text("Number of games: " + (numGames), 20, 60);
|
||||
|
||||
// Get game info
|
||||
for (int i = 0; i < numGames; i++) {
|
||||
|
||||
// Read starting address and size
|
||||
romAddress[i] = NP[0x60000 + i*0x2000 + 0x01] * 0x80000;
|
||||
romSize[i] = NP[0x60000 + i*0x2000 + 0x03] * 131072;
|
||||
|
||||
// Read game code
|
||||
for (int j = 0; j < 12; j++) {
|
||||
romCode[i][j] = char(NP[0x60000 + i*0x2000 + 0x07 + j]);
|
||||
}
|
||||
|
||||
//check if hirom
|
||||
if (NP[romAddress[i]+0xFFD5] == 0x31) {
|
||||
hirom[i] = true;
|
||||
} else {
|
||||
hirom[i] = false;
|
||||
}
|
||||
|
||||
// Read rom name
|
||||
for (int j = 0; j < 21; j++) {
|
||||
if (hirom[i]) {
|
||||
romName[i][j] = char(NP[romAddress[i]+0xFFC0+j]);
|
||||
} else {
|
||||
romName[i][j] = char(NP[romAddress[i]+0x7FC0+j]);
|
||||
}
|
||||
}
|
||||
// Convert char array to String to be printed
|
||||
String tempStr1 = new String(romName[i]);
|
||||
|
||||
// Convert char array to String to be printed
|
||||
String tempStr2 = new String(romCode[i]);
|
||||
|
||||
// Clean the Strings
|
||||
tempStr1 = tempStr1.trim();
|
||||
tempStr1 = tempStr1.replaceAll("-$", "");
|
||||
tempStr1 = tempStr1.trim();
|
||||
tempStr2 = tempStr2.trim();
|
||||
tempStr2 = tempStr2.replaceAll("-$", "");
|
||||
tempStr2 = tempStr2.trim();
|
||||
|
||||
// Print all info
|
||||
text("Game" + i + ": " + tempStr1 + " " + tempStr2 + " Addr: 0x" + hex(romAddress[i]) + " Size: " + romSize[i]/1024 + "KB", 20, 80+i*20);
|
||||
}
|
||||
|
||||
// Split the rom
|
||||
for (int i = 0; i < numGames; i++) {
|
||||
byte[] OUT = new byte[romSize[i]];
|
||||
String fileName = new String(romCode[i]);
|
||||
|
||||
// Clean the String
|
||||
fileName = fileName.trim();
|
||||
fileName = fileName.replaceAll("-$", "");
|
||||
fileName = fileName.trim();
|
||||
|
||||
// Create the array to be written to a file
|
||||
for (int j = 0; j < romSize[i]; j++) {
|
||||
OUT[j] = NP[romAddress[i] + j];
|
||||
}
|
||||
// Write the file
|
||||
saveBytes(fileName + ".bin", OUT);
|
||||
}
|
||||
} else {
|
||||
text("NP menu not found.", 20, 60);
|
||||
}
|
||||
}
|
||||
//******************************************
|
||||
// End of File
|
||||
//******************************************
|
BIN
extras/saveswap/ED64-Saveswap.exe
Normal file
BIN
extras/saveswap/ED64-Saveswap.exe
Normal file
Binary file not shown.
2
extras/saveswap/readme.MD
Normal file
2
extras/saveswap/readme.MD
Normal file
@ -0,0 +1,2 @@
|
||||
Saveswap Tool made by saturnu
|
||||
Source: http://krikzz.com/forum/index.php?topic=2298.0
|
19
extras/saveswap/saveswap.txt
Normal file
19
extras/saveswap/saveswap.txt
Normal file
@ -0,0 +1,19 @@
|
||||
Hi,
|
||||
here is a tool that helps you converting save files from an emulator to the ED64.
|
||||
it's like always ^^ just a beta version and needs some testing :D
|
||||
|
||||
Howto:
|
||||
after executing, select the save file. now select the filesize to what the file should be extended.
|
||||
select the needed swapping options and click on "convert file".
|
||||
Rename the file to your rom-filename except the file-extension.
|
||||
|
||||
Hint:
|
||||
In the most cases you will be fine with the default settings. If it's not working, create a new save-file with the ED64 and compare it with a hexeditor to your converting results, if it somehow matches. ^^
|
||||
Make sure you use exactly the same rom on the everdrive64 and your emulator.
|
||||
you can take a look at this boot/save list for the correct save settings.
|
||||
|
||||
Features:
|
||||
byte-swap
|
||||
word-swap
|
||||
byte appending
|
||||
save backup (*.bak)
|
BIN
extras/saveswap/saveswap_src.zip
Normal file
BIN
extras/saveswap/saveswap_src.zip
Normal file
Binary file not shown.
2
extras/sketchup/README.md
Normal file
2
extras/sketchup/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
A 3d model of the cart reader shield build in Sketchup.
|
||||
It's not perfectly to scale and more of a mockup.
|
BIN
extras/sketchup/cartreader.skp
Normal file
BIN
extras/sketchup/cartreader.skp
Normal file
Binary file not shown.
2
extras/snesCIC/README.md
Normal file
2
extras/snesCIC/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
This is the hex file that needs to be flashed to the PIC 12F629 if you want to dump SA1 SNES games.
|
||||
Source: https://github.com/mrehkopf/sd2snes/tree/master/cic
|
71
extras/snesCIC/snescic-lock-resync.hex
Normal file
71
extras/snesCIC/snescic-lock-resync.hex
Normal file
@ -0,0 +1,71 @@
|
||||
:020000040000FA
|
||||
:1000000000000000000010280510851005110512E1
|
||||
:1000100085190828000000000000000000002028CA
|
||||
:10002000831285010730990000308B008316293038
|
||||
:10003000850000309500803081008312051204286D
|
||||
:100040004030FC2105160515C4010000051183167A
|
||||
:100050000510851483120B30A1000130A20004307A
|
||||
:10006000A3000F30A4000430A5000B30A60005301B
|
||||
:10007000A7000730A8000F30A9000D30AA000630F5
|
||||
:10008000AB000130AC000E30AD000930AE000830DE
|
||||
:10009000AF000F30B1000030B2000A30B3000130C1
|
||||
:1000A000B4000830B5000530B6000F30B70001309D
|
||||
:1000B000B800B9000E30BA000130BB000030BC00FF
|
||||
:1000C0000D30BD000E30BE000C30BF00BA30F8213C
|
||||
:1000D00000000000B11905140000000005100130F7
|
||||
:1000E000F821000000003118051400000000051080
|
||||
:1000F0000130F82100000000B118051400000000D4
|
||||
:1001000005100130F821000000003119051400002D
|
||||
:10011000000005100130F8218316051485108312A4
|
||||
:100120002430F8210130C3000130203E8400000853
|
||||
:10013000A000A0102018A01420162011200885006F
|
||||
:100140000508C200103085000522851904284418CE
|
||||
:10015000C20C04160008C20604124218202800002F
|
||||
:1001600000000C30F8210518022A8518022A840A9A
|
||||
:100170000F300405031D97280130F821D620D62022
|
||||
:10018000D6203708C4003718C928831605148510EF
|
||||
:10019000CD288316051085140000831285190428C4
|
||||
:1001A000C30137080F39031D9528942869210000E1
|
||||
:1001B00000002F08A000013EA1072208C00021086E
|
||||
:1001C000A207A20AA2092308C1000F30A305400814
|
||||
:1001D0000F39A307A30A231A28294108A4072508D1
|
||||
:1001E000C0002408A5072608C10040080F39083EB2
|
||||
:1001F000C000401E2607A6004108013EA7072708A9
|
||||
:10020000013EA8072808013EA9072908013EAA07C0
|
||||
:100210002A08013EAB072B08013EAC072C08013E23
|
||||
:10022000AD072D08013EAE072E08013EAF0720089E
|
||||
:100230000F390F3EA0000000000000000000000089
|
||||
:100240000000000000000000201E68290000DB28DC
|
||||
:100250004108A3072408C0002308A4072508C100FB
|
||||
:1002600040080F39083EC000401E2507A500410880
|
||||
:10027000013EA6072608013EA7072708013EA8075A
|
||||
:100280002808013EA9072908013EAA072A08013EBD
|
||||
:10029000AB072B08013EAC072C08013EAD072D082B
|
||||
:1002A000013EAE072E08013EAF0720080F390F3E72
|
||||
:1002B000A00000000000000000000000000000009E
|
||||
:1002C0000000000000000000201E68290000DB285C
|
||||
:1002D00008003F08B000013EB1073208C0003108F5
|
||||
:1002E000B207B20AB2093308C1000F30B3054008A3
|
||||
:1002F0000F39B307B30A331AB8294108B4073508D0
|
||||
:10030000C0003408B5073608C10040080F39083E60
|
||||
:10031000C000401E3607B6004108013EB707370847
|
||||
:10032000013EB8073808013EB9073908013EBA074F
|
||||
:100330003A08013EBB073B08013EBC073C08013EB2
|
||||
:10034000BD073D08013EBE073E08013EBF0730081D
|
||||
:100350000F390F3EB0000000000000000000000058
|
||||
:100360000000000000000000301E682900006B291A
|
||||
:100370004108B3073408C0003308B4073508C1008A
|
||||
:1003800040080F39083EC000401E3507B50041083F
|
||||
:10039000013EB6073608013EB7073708013EB807E9
|
||||
:1003A0003808013EB9073908013EBA073A08013E4C
|
||||
:1003B000BB073B08013EBC073C08013EBD073D08AA
|
||||
:1003C000013EBE073E08013EBF0730080F390F3E11
|
||||
:1003D000B00000000000000000000000000000006D
|
||||
:1003E0000000000000000000301E682900006B299A
|
||||
:1003F000CF00CF0BF9290800CE000301F821CE0B66
|
||||
:10040000FE29080085190428022A431C122A2230DA
|
||||
:100410000406031D162A421C102A000009301B2A5C
|
||||
:1004200006301B2A00000000000000000000000051
|
||||
:0A043000000000001C2AB2000800C2
|
||||
:02400E00D33F9E
|
||||
:00000001FF
|
1
extras/templates/README.md
Normal file
1
extras/templates/README.md
Normal file
@ -0,0 +1 @@
|
||||
Use this template to cut a Super Famicom game cartridge shell to size for the N64 adapter.
|
BIN
extras/templates/n64_template.pdf
Normal file
BIN
extras/templates/n64_template.pdf
Normal file
Binary file not shown.
BIN
libraries/Adafruit-GFX-Library.zip
Normal file
BIN
libraries/Adafruit-GFX-Library.zip
Normal file
Binary file not shown.
BIN
libraries/Adafruit_SSD1306.zip
Normal file
BIN
libraries/Adafruit_SSD1306.zip
Normal file
Binary file not shown.
7
libraries/README.md
Normal file
7
libraries/README.md
Normal file
@ -0,0 +1,7 @@
|
||||
Unzip and copy those into your Arduino library folder e.g. C:\Users\sanni\Documents\Arduino\libraries
|
||||
|
||||
You can also get the latest versions from their respective github:
|
||||
SD lib: https://github.com/greiman/SdFat
|
||||
LCD lib: https://github.com/adafruit/Adafruit_SSD1306
|
||||
RGB Tools lib: https://github.com/joushx/Arduino-RGB-Tools
|
||||
SI5351 lib: https://github.com/etherkit/Si5351Arduino
|
BIN
libraries/RGBTools.zip
Normal file
BIN
libraries/RGBTools.zip
Normal file
Binary file not shown.
BIN
libraries/SdFat.zip
Normal file
BIN
libraries/SdFat.zip
Normal file
Binary file not shown.
BIN
libraries/Si5351Arduino.zip
Normal file
BIN
libraries/Si5351Arduino.zip
Normal file
Binary file not shown.
7
pcb/README.md
Normal file
7
pcb/README.md
Normal file
@ -0,0 +1,7 @@
|
||||
Cart Reader Shield and N64 adapter:
|
||||
![cartreaderpcb](https://github.com/sanni/cartreader/blob/master/pcb/cartreader.jpg)
|
||||
|
||||
Flashrom adapter:
|
||||
![cartreaderpcb](https://github.com/sanni/cartreader/blob/master/pcb/flashadapter.jpg)
|
||||
|
||||
All pcbs are 10x10cm and 1.2mm thick.
|
7226
pcb/cartreader.GBL
Normal file
7226
pcb/cartreader.GBL
Normal file
File diff suppressed because it is too large
Load Diff
5861
pcb/cartreader.GBO
Normal file
5861
pcb/cartreader.GBO
Normal file
File diff suppressed because it is too large
Load Diff
1116
pcb/cartreader.GBS
Normal file
1116
pcb/cartreader.GBS
Normal file
File diff suppressed because it is too large
Load Diff
475
pcb/cartreader.GML
Normal file
475
pcb/cartreader.GML
Normal file
@ -0,0 +1,475 @@
|
||||
G75*
|
||||
%MOIN*%
|
||||
%OFA0B0*%
|
||||
%FSLAX25Y25*%
|
||||
%IPPOS*%
|
||||
%LPD*%
|
||||
%AMOC8*
|
||||
5,1,8,0,0,1.08239X$1,22.5*
|
||||
%
|
||||
%ADD10C,0.01000*%
|
||||
%ADD11C,0.00000*%
|
||||
D10*
|
||||
X0013866Y0005937D02*
|
||||
X0013866Y0207906D01*
|
||||
X0013868Y0208030D01*
|
||||
X0013874Y0208153D01*
|
||||
X0013883Y0208277D01*
|
||||
X0013897Y0208399D01*
|
||||
X0013914Y0208522D01*
|
||||
X0013936Y0208644D01*
|
||||
X0013961Y0208765D01*
|
||||
X0013990Y0208885D01*
|
||||
X0014022Y0209004D01*
|
||||
X0014059Y0209123D01*
|
||||
X0014099Y0209240D01*
|
||||
X0014142Y0209355D01*
|
||||
X0014190Y0209470D01*
|
||||
X0014241Y0209582D01*
|
||||
X0014295Y0209693D01*
|
||||
X0014353Y0209803D01*
|
||||
X0014414Y0209910D01*
|
||||
X0014479Y0210016D01*
|
||||
X0014547Y0210119D01*
|
||||
X0014618Y0210220D01*
|
||||
X0014692Y0210319D01*
|
||||
X0014769Y0210416D01*
|
||||
X0014850Y0210510D01*
|
||||
X0014933Y0210601D01*
|
||||
X0015019Y0210690D01*
|
||||
X0015108Y0210776D01*
|
||||
X0015199Y0210859D01*
|
||||
X0015293Y0210940D01*
|
||||
X0015390Y0211017D01*
|
||||
X0015489Y0211091D01*
|
||||
X0015590Y0211162D01*
|
||||
X0015693Y0211230D01*
|
||||
X0015799Y0211295D01*
|
||||
X0015906Y0211356D01*
|
||||
X0016016Y0211414D01*
|
||||
X0016127Y0211468D01*
|
||||
X0016239Y0211519D01*
|
||||
X0016354Y0211567D01*
|
||||
X0016469Y0211610D01*
|
||||
X0016586Y0211650D01*
|
||||
X0016705Y0211687D01*
|
||||
X0016824Y0211719D01*
|
||||
X0016944Y0211748D01*
|
||||
X0017065Y0211773D01*
|
||||
X0017187Y0211795D01*
|
||||
X0017310Y0211812D01*
|
||||
X0017432Y0211826D01*
|
||||
X0017556Y0211835D01*
|
||||
X0017679Y0211841D01*
|
||||
X0017803Y0211843D01*
|
||||
X0050087Y0211843D01*
|
||||
X0050087Y0258299D01*
|
||||
X0016228Y0258299D01*
|
||||
X0016228Y0276409D01*
|
||||
X0026071Y0276409D01*
|
||||
X0026071Y0284283D01*
|
||||
X0013866Y0284283D01*
|
||||
X0013866Y0325228D01*
|
||||
X0016228Y0325228D01*
|
||||
X0016228Y0350819D01*
|
||||
X0026071Y0350819D01*
|
||||
X0026071Y0358693D01*
|
||||
X0013866Y0358693D01*
|
||||
X0013866Y0366173D01*
|
||||
X0037488Y0366173D01*
|
||||
X0037488Y0374441D01*
|
||||
X0383945Y0374441D01*
|
||||
X0383945Y0366173D01*
|
||||
X0407567Y0366173D01*
|
||||
X0407567Y0326016D01*
|
||||
X0394969Y0326016D01*
|
||||
X0394969Y0318142D01*
|
||||
X0403630Y0318142D01*
|
||||
X0403630Y0305150D01*
|
||||
X0393787Y0305150D01*
|
||||
X0393787Y0297276D01*
|
||||
X0403630Y0297276D01*
|
||||
X0403630Y0277197D01*
|
||||
X0407567Y0277197D01*
|
||||
X0407567Y0258299D01*
|
||||
X0371346Y0258299D01*
|
||||
X0371346Y0211843D01*
|
||||
X0394181Y0211843D01*
|
||||
X0403630Y0202394D01*
|
||||
X0403630Y0161843D01*
|
||||
X0407567Y0152394D01*
|
||||
X0407567Y0017000D01*
|
||||
X0403866Y0007000D01*
|
||||
X0403866Y0005937D01*
|
||||
X0403864Y0005813D01*
|
||||
X0403858Y0005690D01*
|
||||
X0403849Y0005566D01*
|
||||
X0403835Y0005444D01*
|
||||
X0403818Y0005321D01*
|
||||
X0403796Y0005199D01*
|
||||
X0403771Y0005078D01*
|
||||
X0403742Y0004958D01*
|
||||
X0403710Y0004839D01*
|
||||
X0403673Y0004720D01*
|
||||
X0403633Y0004603D01*
|
||||
X0403590Y0004488D01*
|
||||
X0403542Y0004373D01*
|
||||
X0403491Y0004261D01*
|
||||
X0403437Y0004150D01*
|
||||
X0403379Y0004040D01*
|
||||
X0403318Y0003933D01*
|
||||
X0403253Y0003827D01*
|
||||
X0403185Y0003724D01*
|
||||
X0403114Y0003623D01*
|
||||
X0403040Y0003524D01*
|
||||
X0402963Y0003427D01*
|
||||
X0402882Y0003333D01*
|
||||
X0402799Y0003242D01*
|
||||
X0402713Y0003153D01*
|
||||
X0402624Y0003067D01*
|
||||
X0402533Y0002984D01*
|
||||
X0402439Y0002903D01*
|
||||
X0402342Y0002826D01*
|
||||
X0402243Y0002752D01*
|
||||
X0402142Y0002681D01*
|
||||
X0402039Y0002613D01*
|
||||
X0401933Y0002548D01*
|
||||
X0401826Y0002487D01*
|
||||
X0401716Y0002429D01*
|
||||
X0401605Y0002375D01*
|
||||
X0401493Y0002324D01*
|
||||
X0401378Y0002276D01*
|
||||
X0401263Y0002233D01*
|
||||
X0401146Y0002193D01*
|
||||
X0401027Y0002156D01*
|
||||
X0400908Y0002124D01*
|
||||
X0400788Y0002095D01*
|
||||
X0400667Y0002070D01*
|
||||
X0400545Y0002048D01*
|
||||
X0400422Y0002031D01*
|
||||
X0400300Y0002017D01*
|
||||
X0400176Y0002008D01*
|
||||
X0400053Y0002002D01*
|
||||
X0399929Y0002000D01*
|
||||
X0017803Y0002000D01*
|
||||
X0017679Y0002002D01*
|
||||
X0017556Y0002008D01*
|
||||
X0017432Y0002017D01*
|
||||
X0017310Y0002031D01*
|
||||
X0017187Y0002048D01*
|
||||
X0017065Y0002070D01*
|
||||
X0016944Y0002095D01*
|
||||
X0016824Y0002124D01*
|
||||
X0016705Y0002156D01*
|
||||
X0016586Y0002193D01*
|
||||
X0016469Y0002233D01*
|
||||
X0016354Y0002276D01*
|
||||
X0016239Y0002324D01*
|
||||
X0016127Y0002375D01*
|
||||
X0016016Y0002429D01*
|
||||
X0015906Y0002487D01*
|
||||
X0015799Y0002548D01*
|
||||
X0015693Y0002613D01*
|
||||
X0015590Y0002681D01*
|
||||
X0015489Y0002752D01*
|
||||
X0015390Y0002826D01*
|
||||
X0015293Y0002903D01*
|
||||
X0015199Y0002984D01*
|
||||
X0015108Y0003067D01*
|
||||
X0015019Y0003153D01*
|
||||
X0014933Y0003242D01*
|
||||
X0014850Y0003333D01*
|
||||
X0014769Y0003427D01*
|
||||
X0014692Y0003524D01*
|
||||
X0014618Y0003623D01*
|
||||
X0014547Y0003724D01*
|
||||
X0014479Y0003827D01*
|
||||
X0014414Y0003933D01*
|
||||
X0014353Y0004040D01*
|
||||
X0014295Y0004150D01*
|
||||
X0014241Y0004261D01*
|
||||
X0014190Y0004373D01*
|
||||
X0014142Y0004488D01*
|
||||
X0014099Y0004603D01*
|
||||
X0014059Y0004720D01*
|
||||
X0014022Y0004839D01*
|
||||
X0013990Y0004958D01*
|
||||
X0013961Y0005078D01*
|
||||
X0013936Y0005199D01*
|
||||
X0013914Y0005321D01*
|
||||
X0013897Y0005444D01*
|
||||
X0013883Y0005566D01*
|
||||
X0013874Y0005690D01*
|
||||
X0013868Y0005813D01*
|
||||
X0013866Y0005937D01*
|
||||
X0087882Y0211843D02*
|
||||
X0087882Y0258299D01*
|
||||
X0092606Y0258299D01*
|
||||
X0092606Y0216567D01*
|
||||
X0328827Y0216567D01*
|
||||
X0328827Y0258299D01*
|
||||
X0333551Y0258299D01*
|
||||
X0333551Y0211843D01*
|
||||
X0087882Y0211843D01*
|
||||
D11*
|
||||
X0028335Y0296882D02*
|
||||
X0028337Y0296963D01*
|
||||
X0028343Y0297045D01*
|
||||
X0028353Y0297126D01*
|
||||
X0028367Y0297206D01*
|
||||
X0028384Y0297285D01*
|
||||
X0028406Y0297364D01*
|
||||
X0028431Y0297441D01*
|
||||
X0028460Y0297518D01*
|
||||
X0028493Y0297592D01*
|
||||
X0028530Y0297665D01*
|
||||
X0028569Y0297736D01*
|
||||
X0028613Y0297805D01*
|
||||
X0028659Y0297872D01*
|
||||
X0028709Y0297936D01*
|
||||
X0028762Y0297998D01*
|
||||
X0028818Y0298058D01*
|
||||
X0028876Y0298114D01*
|
||||
X0028938Y0298168D01*
|
||||
X0029002Y0298219D01*
|
||||
X0029068Y0298266D01*
|
||||
X0029136Y0298310D01*
|
||||
X0029207Y0298351D01*
|
||||
X0029279Y0298388D01*
|
||||
X0029354Y0298422D01*
|
||||
X0029429Y0298452D01*
|
||||
X0029507Y0298478D01*
|
||||
X0029585Y0298501D01*
|
||||
X0029664Y0298519D01*
|
||||
X0029744Y0298534D01*
|
||||
X0029825Y0298545D01*
|
||||
X0029906Y0298552D01*
|
||||
X0029988Y0298555D01*
|
||||
X0030069Y0298554D01*
|
||||
X0030150Y0298549D01*
|
||||
X0030231Y0298540D01*
|
||||
X0030312Y0298527D01*
|
||||
X0030392Y0298510D01*
|
||||
X0030470Y0298490D01*
|
||||
X0030548Y0298465D01*
|
||||
X0030625Y0298437D01*
|
||||
X0030700Y0298405D01*
|
||||
X0030773Y0298370D01*
|
||||
X0030844Y0298331D01*
|
||||
X0030914Y0298288D01*
|
||||
X0030981Y0298243D01*
|
||||
X0031047Y0298194D01*
|
||||
X0031109Y0298142D01*
|
||||
X0031169Y0298086D01*
|
||||
X0031226Y0298028D01*
|
||||
X0031281Y0297968D01*
|
||||
X0031332Y0297904D01*
|
||||
X0031380Y0297839D01*
|
||||
X0031425Y0297771D01*
|
||||
X0031467Y0297701D01*
|
||||
X0031505Y0297629D01*
|
||||
X0031540Y0297555D01*
|
||||
X0031571Y0297480D01*
|
||||
X0031598Y0297403D01*
|
||||
X0031621Y0297325D01*
|
||||
X0031641Y0297246D01*
|
||||
X0031657Y0297166D01*
|
||||
X0031669Y0297085D01*
|
||||
X0031677Y0297004D01*
|
||||
X0031681Y0296923D01*
|
||||
X0031681Y0296841D01*
|
||||
X0031677Y0296760D01*
|
||||
X0031669Y0296679D01*
|
||||
X0031657Y0296598D01*
|
||||
X0031641Y0296518D01*
|
||||
X0031621Y0296439D01*
|
||||
X0031598Y0296361D01*
|
||||
X0031571Y0296284D01*
|
||||
X0031540Y0296209D01*
|
||||
X0031505Y0296135D01*
|
||||
X0031467Y0296063D01*
|
||||
X0031425Y0295993D01*
|
||||
X0031380Y0295925D01*
|
||||
X0031332Y0295860D01*
|
||||
X0031281Y0295796D01*
|
||||
X0031226Y0295736D01*
|
||||
X0031169Y0295678D01*
|
||||
X0031109Y0295622D01*
|
||||
X0031047Y0295570D01*
|
||||
X0030981Y0295521D01*
|
||||
X0030914Y0295476D01*
|
||||
X0030845Y0295433D01*
|
||||
X0030773Y0295394D01*
|
||||
X0030700Y0295359D01*
|
||||
X0030625Y0295327D01*
|
||||
X0030548Y0295299D01*
|
||||
X0030470Y0295274D01*
|
||||
X0030392Y0295254D01*
|
||||
X0030312Y0295237D01*
|
||||
X0030231Y0295224D01*
|
||||
X0030150Y0295215D01*
|
||||
X0030069Y0295210D01*
|
||||
X0029988Y0295209D01*
|
||||
X0029906Y0295212D01*
|
||||
X0029825Y0295219D01*
|
||||
X0029744Y0295230D01*
|
||||
X0029664Y0295245D01*
|
||||
X0029585Y0295263D01*
|
||||
X0029507Y0295286D01*
|
||||
X0029429Y0295312D01*
|
||||
X0029354Y0295342D01*
|
||||
X0029279Y0295376D01*
|
||||
X0029207Y0295413D01*
|
||||
X0029136Y0295454D01*
|
||||
X0029068Y0295498D01*
|
||||
X0029002Y0295545D01*
|
||||
X0028938Y0295596D01*
|
||||
X0028876Y0295650D01*
|
||||
X0028818Y0295706D01*
|
||||
X0028762Y0295766D01*
|
||||
X0028709Y0295828D01*
|
||||
X0028659Y0295892D01*
|
||||
X0028613Y0295959D01*
|
||||
X0028569Y0296028D01*
|
||||
X0028530Y0296099D01*
|
||||
X0028493Y0296172D01*
|
||||
X0028460Y0296246D01*
|
||||
X0028431Y0296323D01*
|
||||
X0028406Y0296400D01*
|
||||
X0028384Y0296479D01*
|
||||
X0028367Y0296558D01*
|
||||
X0028353Y0296638D01*
|
||||
X0028343Y0296719D01*
|
||||
X0028337Y0296801D01*
|
||||
X0028335Y0296882D01*
|
||||
X0028335Y0311843D02*
|
||||
X0028337Y0311924D01*
|
||||
X0028343Y0312006D01*
|
||||
X0028353Y0312087D01*
|
||||
X0028367Y0312167D01*
|
||||
X0028384Y0312246D01*
|
||||
X0028406Y0312325D01*
|
||||
X0028431Y0312402D01*
|
||||
X0028460Y0312479D01*
|
||||
X0028493Y0312553D01*
|
||||
X0028530Y0312626D01*
|
||||
X0028569Y0312697D01*
|
||||
X0028613Y0312766D01*
|
||||
X0028659Y0312833D01*
|
||||
X0028709Y0312897D01*
|
||||
X0028762Y0312959D01*
|
||||
X0028818Y0313019D01*
|
||||
X0028876Y0313075D01*
|
||||
X0028938Y0313129D01*
|
||||
X0029002Y0313180D01*
|
||||
X0029068Y0313227D01*
|
||||
X0029136Y0313271D01*
|
||||
X0029207Y0313312D01*
|
||||
X0029279Y0313349D01*
|
||||
X0029354Y0313383D01*
|
||||
X0029429Y0313413D01*
|
||||
X0029507Y0313439D01*
|
||||
X0029585Y0313462D01*
|
||||
X0029664Y0313480D01*
|
||||
X0029744Y0313495D01*
|
||||
X0029825Y0313506D01*
|
||||
X0029906Y0313513D01*
|
||||
X0029988Y0313516D01*
|
||||
X0030069Y0313515D01*
|
||||
X0030150Y0313510D01*
|
||||
X0030231Y0313501D01*
|
||||
X0030312Y0313488D01*
|
||||
X0030392Y0313471D01*
|
||||
X0030470Y0313451D01*
|
||||
X0030548Y0313426D01*
|
||||
X0030625Y0313398D01*
|
||||
X0030700Y0313366D01*
|
||||
X0030773Y0313331D01*
|
||||
X0030844Y0313292D01*
|
||||
X0030914Y0313249D01*
|
||||
X0030981Y0313204D01*
|
||||
X0031047Y0313155D01*
|
||||
X0031109Y0313103D01*
|
||||
X0031169Y0313047D01*
|
||||
X0031226Y0312989D01*
|
||||
X0031281Y0312929D01*
|
||||
X0031332Y0312865D01*
|
||||
X0031380Y0312800D01*
|
||||
X0031425Y0312732D01*
|
||||
X0031467Y0312662D01*
|
||||
X0031505Y0312590D01*
|
||||
X0031540Y0312516D01*
|
||||
X0031571Y0312441D01*
|
||||
X0031598Y0312364D01*
|
||||
X0031621Y0312286D01*
|
||||
X0031641Y0312207D01*
|
||||
X0031657Y0312127D01*
|
||||
X0031669Y0312046D01*
|
||||
X0031677Y0311965D01*
|
||||
X0031681Y0311884D01*
|
||||
X0031681Y0311802D01*
|
||||
X0031677Y0311721D01*
|
||||
X0031669Y0311640D01*
|
||||
X0031657Y0311559D01*
|
||||
X0031641Y0311479D01*
|
||||
X0031621Y0311400D01*
|
||||
X0031598Y0311322D01*
|
||||
X0031571Y0311245D01*
|
||||
X0031540Y0311170D01*
|
||||
X0031505Y0311096D01*
|
||||
X0031467Y0311024D01*
|
||||
X0031425Y0310954D01*
|
||||
X0031380Y0310886D01*
|
||||
X0031332Y0310821D01*
|
||||
X0031281Y0310757D01*
|
||||
X0031226Y0310697D01*
|
||||
X0031169Y0310639D01*
|
||||
X0031109Y0310583D01*
|
||||
X0031047Y0310531D01*
|
||||
X0030981Y0310482D01*
|
||||
X0030914Y0310437D01*
|
||||
X0030845Y0310394D01*
|
||||
X0030773Y0310355D01*
|
||||
X0030700Y0310320D01*
|
||||
X0030625Y0310288D01*
|
||||
X0030548Y0310260D01*
|
||||
X0030470Y0310235D01*
|
||||
X0030392Y0310215D01*
|
||||
X0030312Y0310198D01*
|
||||
X0030231Y0310185D01*
|
||||
X0030150Y0310176D01*
|
||||
X0030069Y0310171D01*
|
||||
X0029988Y0310170D01*
|
||||
X0029906Y0310173D01*
|
||||
X0029825Y0310180D01*
|
||||
X0029744Y0310191D01*
|
||||
X0029664Y0310206D01*
|
||||
X0029585Y0310224D01*
|
||||
X0029507Y0310247D01*
|
||||
X0029429Y0310273D01*
|
||||
X0029354Y0310303D01*
|
||||
X0029279Y0310337D01*
|
||||
X0029207Y0310374D01*
|
||||
X0029136Y0310415D01*
|
||||
X0029068Y0310459D01*
|
||||
X0029002Y0310506D01*
|
||||
X0028938Y0310557D01*
|
||||
X0028876Y0310611D01*
|
||||
X0028818Y0310667D01*
|
||||
X0028762Y0310727D01*
|
||||
X0028709Y0310789D01*
|
||||
X0028659Y0310853D01*
|
||||
X0028613Y0310920D01*
|
||||
X0028569Y0310989D01*
|
||||
X0028530Y0311060D01*
|
||||
X0028493Y0311133D01*
|
||||
X0028460Y0311207D01*
|
||||
X0028431Y0311284D01*
|
||||
X0028406Y0311361D01*
|
||||
X0028384Y0311440D01*
|
||||
X0028367Y0311519D01*
|
||||
X0028353Y0311599D01*
|
||||
X0028343Y0311680D01*
|
||||
X0028337Y0311762D01*
|
||||
X0028335Y0311843D01*
|
||||
M02*
|
6104
pcb/cartreader.GTL
Normal file
6104
pcb/cartreader.GTL
Normal file
File diff suppressed because it is too large
Load Diff
6958
pcb/cartreader.GTO
Normal file
6958
pcb/cartreader.GTO
Normal file
File diff suppressed because it is too large
Load Diff
1054
pcb/cartreader.GTS
Normal file
1054
pcb/cartreader.GTS
Normal file
File diff suppressed because it is too large
Load Diff
465
pcb/cartreader.TXT
Normal file
465
pcb/cartreader.TXT
Normal file
@ -0,0 +1,465 @@
|
||||
%
|
||||
M48
|
||||
M72
|
||||
T01C0.01600
|
||||
T02C0.02362
|
||||
T03C0.02756
|
||||
T04C0.03150
|
||||
T05C0.03346
|
||||
T06C0.03543
|
||||
T07C0.03740
|
||||
T08C0.03937
|
||||
T09C0.04000
|
||||
%
|
||||
T01
|
||||
X58945Y58299
|
||||
X65047Y84677
|
||||
X65047Y104362
|
||||
X75120Y139729
|
||||
X107488Y173454
|
||||
X113530Y176454
|
||||
X116228Y155543
|
||||
X83948Y189157
|
||||
X73906Y186449
|
||||
X94164Y192063
|
||||
X171387Y262724
|
||||
X181085Y271829
|
||||
X185655Y270812
|
||||
X190056Y272412
|
||||
X184855Y275213
|
||||
X183349Y282147
|
||||
X188217Y283747
|
||||
X181635Y288148
|
||||
X188342Y293086
|
||||
X200448Y293355
|
||||
X208542Y288513
|
||||
X196057Y272412
|
||||
X173743Y274837
|
||||
X157706Y279252
|
||||
X151996Y276245
|
||||
X124939Y296410
|
||||
X125721Y307008
|
||||
X112291Y309754
|
||||
X97724Y302787
|
||||
X97941Y280046
|
||||
X61110Y267748
|
||||
X25677Y267748
|
||||
X25677Y334677
|
||||
X121120Y325273
|
||||
X135216Y333512
|
||||
X137926Y329974
|
||||
X144952Y327300
|
||||
X149850Y323859
|
||||
X148470Y317763
|
||||
X159314Y319073
|
||||
X132502Y340266
|
||||
X140106Y343323
|
||||
X144508Y343536
|
||||
X171346Y343859
|
||||
X188161Y339101
|
||||
X203626Y335144
|
||||
X234146Y334843
|
||||
X265452Y321488
|
||||
X270455Y318542
|
||||
X285188Y331217
|
||||
X298361Y343762
|
||||
X348512Y358299
|
||||
X376071Y358299
|
||||
X399693Y358299
|
||||
X399693Y334677
|
||||
X399693Y291370
|
||||
X399693Y267748
|
||||
X364260Y267748
|
||||
X332764Y267748
|
||||
X316631Y252100
|
||||
X262173Y258988
|
||||
X255546Y255117
|
||||
X242715Y252272
|
||||
X232530Y251822
|
||||
X244254Y266040
|
||||
X234557Y287230
|
||||
X227104Y289250
|
||||
X260856Y286887
|
||||
X364260Y202787
|
||||
X344575Y159480
|
||||
X324890Y159480
|
||||
X301268Y159480
|
||||
X277646Y159480
|
||||
X261111Y147370
|
||||
X256266Y149961
|
||||
X253065Y158437
|
||||
X238201Y152042
|
||||
X230795Y162433
|
||||
X211677Y179642
|
||||
X207276Y179642
|
||||
X202876Y179642
|
||||
X183156Y187325
|
||||
X198906Y155543
|
||||
X234956Y190445
|
||||
X288788Y136744
|
||||
X313079Y120110
|
||||
X319200Y93072
|
||||
X312454Y91876
|
||||
X350912Y102217
|
||||
X353320Y128794
|
||||
X357849Y129011
|
||||
X362348Y130634
|
||||
X366657Y132549
|
||||
X358567Y140547
|
||||
X351365Y137998
|
||||
X229937Y38757
|
||||
X226887Y42870
|
||||
X225259Y51008
|
||||
X223718Y57009
|
||||
X155402Y41370
|
||||
X21740Y76803
|
||||
X383945Y9874
|
||||
X395756Y9874
|
||||
T02
|
||||
X72921Y340583
|
||||
X72921Y348457
|
||||
X72921Y356331
|
||||
X72921Y364205
|
||||
X45362Y364205
|
||||
X45362Y356331
|
||||
X45362Y348457
|
||||
X45362Y340583
|
||||
T03
|
||||
X83551Y329441
|
||||
X83551Y319441
|
||||
X43787Y277472
|
||||
X43787Y267472
|
||||
T04
|
||||
X245238Y58925
|
||||
X237613Y52925
|
||||
X245238Y46925
|
||||
X237613Y41925
|
||||
T05
|
||||
X233866Y12000
|
||||
X243866Y12000
|
||||
X253866Y12000
|
||||
X263866Y12000
|
||||
X273866Y12000
|
||||
X283866Y12000
|
||||
X303866Y12000
|
||||
X313866Y12000
|
||||
X323866Y12000
|
||||
X333866Y12000
|
||||
X343866Y12000
|
||||
X353866Y12000
|
||||
X363866Y12000
|
||||
X373866Y12000
|
||||
X223866Y12000
|
||||
X213866Y12000
|
||||
X193866Y12000
|
||||
X183866Y12000
|
||||
X173866Y12000
|
||||
X163866Y12000
|
||||
X153866Y12000
|
||||
X143866Y12000
|
||||
X133866Y12000
|
||||
X123866Y12000
|
||||
X127866Y202000
|
||||
X137866Y202000
|
||||
X147866Y202000
|
||||
X157866Y202000
|
||||
X167866Y202000
|
||||
X177866Y202000
|
||||
X193866Y202000
|
||||
X203866Y202000
|
||||
X213866Y202000
|
||||
X223866Y202000
|
||||
X233866Y202000
|
||||
X243866Y202000
|
||||
X253866Y202000
|
||||
X263866Y202000
|
||||
X283866Y202000
|
||||
X293866Y202000
|
||||
X303866Y202000
|
||||
X313866Y202000
|
||||
X323866Y202000
|
||||
X333866Y202000
|
||||
X343866Y202000
|
||||
X353866Y202000
|
||||
X117866Y202000
|
||||
X107866Y202000
|
||||
X97866Y202000
|
||||
X87866Y202000
|
||||
X30008Y296882
|
||||
X30008Y311843
|
||||
T06
|
||||
X137882Y191291
|
||||
X148118Y191291
|
||||
X157961Y191291
|
||||
X157961Y151291
|
||||
X148118Y151291
|
||||
X137882Y151291
|
||||
X204575Y56252
|
||||
X204575Y16252
|
||||
X288472Y288181
|
||||
X288472Y318181
|
||||
X255598Y313614
|
||||
X249693Y305740
|
||||
X255598Y297866
|
||||
X243787Y297866
|
||||
X237882Y305740
|
||||
X231976Y297866
|
||||
X226071Y305740
|
||||
X220165Y297866
|
||||
X214260Y305740
|
||||
X208354Y297866
|
||||
X202449Y305740
|
||||
X196543Y297866
|
||||
X190638Y305740
|
||||
X184732Y297866
|
||||
X178827Y305740
|
||||
X184732Y313614
|
||||
X178827Y321488
|
||||
X172921Y313614
|
||||
X167016Y305740
|
||||
X172921Y297866
|
||||
X196543Y313614
|
||||
X190638Y321488
|
||||
X202449Y321488
|
||||
X208354Y313614
|
||||
X214260Y321488
|
||||
X220165Y313614
|
||||
X226071Y321488
|
||||
X231976Y313614
|
||||
X237882Y321488
|
||||
X243787Y313614
|
||||
X249693Y321488
|
||||
X167016Y321488
|
||||
T07
|
||||
X383866Y202000
|
||||
X383866Y192000
|
||||
X383866Y182000
|
||||
X383866Y172000
|
||||
X383866Y162000
|
||||
X383866Y152000
|
||||
X383866Y142000
|
||||
X383866Y132000
|
||||
X383866Y122000
|
||||
X383866Y112000
|
||||
X383866Y102000
|
||||
X383866Y92000
|
||||
X383866Y82000
|
||||
X383866Y72000
|
||||
X383866Y62000
|
||||
X383866Y52000
|
||||
X383866Y42000
|
||||
X383866Y32000
|
||||
X393866Y32000
|
||||
X393866Y42000
|
||||
X393866Y52000
|
||||
X393866Y62000
|
||||
X393866Y72000
|
||||
X393866Y82000
|
||||
X393866Y92000
|
||||
X393866Y102000
|
||||
X393866Y112000
|
||||
X393866Y122000
|
||||
X393866Y132000
|
||||
X393866Y142000
|
||||
X393866Y152000
|
||||
X393866Y162000
|
||||
X393866Y172000
|
||||
X393866Y182000
|
||||
X393866Y192000
|
||||
X393866Y202000
|
||||
T08
|
||||
X357173Y123014
|
||||
X357181Y115671
|
||||
X347339Y115671
|
||||
X347331Y123014
|
||||
X337488Y123014
|
||||
X337496Y115671
|
||||
X327654Y115671
|
||||
X327646Y123014
|
||||
X327646Y95947
|
||||
X337488Y95947
|
||||
X347331Y95947
|
||||
X357173Y95947
|
||||
X298118Y95947
|
||||
X288276Y95947
|
||||
X278433Y95947
|
||||
X268591Y95947
|
||||
X258748Y95947
|
||||
X248906Y95947
|
||||
X239063Y95947
|
||||
X229220Y95947
|
||||
X219378Y95947
|
||||
X209535Y95947
|
||||
X199693Y95947
|
||||
X189850Y95947
|
||||
X180008Y95947
|
||||
X170165Y95947
|
||||
X160323Y95947
|
||||
X150480Y95947
|
||||
X140638Y95947
|
||||
X130795Y95947
|
||||
X120953Y95947
|
||||
X111110Y95947
|
||||
X101268Y95947
|
||||
X91425Y95947
|
||||
X81583Y95947
|
||||
X81591Y115671
|
||||
X81583Y123014
|
||||
X91425Y123014
|
||||
X91433Y115671
|
||||
X101276Y115671
|
||||
X101268Y123014
|
||||
X111110Y123014
|
||||
X111118Y115671
|
||||
X120961Y115671
|
||||
X120953Y123014
|
||||
X130795Y123014
|
||||
X130803Y115671
|
||||
X140646Y115671
|
||||
X140638Y123014
|
||||
X150480Y123014
|
||||
X150488Y115671
|
||||
X160331Y115671
|
||||
X160323Y123014
|
||||
X170165Y123014
|
||||
X170173Y115671
|
||||
X180016Y115671
|
||||
X180008Y123014
|
||||
X189850Y123014
|
||||
X189858Y115671
|
||||
X199701Y115671
|
||||
X199693Y123014
|
||||
X209535Y123014
|
||||
X209543Y115671
|
||||
X219386Y115671
|
||||
X219378Y123014
|
||||
X229220Y123014
|
||||
X229228Y115671
|
||||
X239071Y115671
|
||||
X239063Y123014
|
||||
X248906Y123014
|
||||
X248913Y115671
|
||||
X258756Y115671
|
||||
X258748Y123014
|
||||
X268591Y123014
|
||||
X268598Y115671
|
||||
X278441Y115671
|
||||
X278433Y123014
|
||||
X288276Y123014
|
||||
X288283Y115671
|
||||
X298126Y115671
|
||||
X298118Y123014
|
||||
X52055Y123014
|
||||
X52063Y115671
|
||||
X42220Y115671
|
||||
X42213Y123014
|
||||
X32370Y123014
|
||||
X32378Y115671
|
||||
X22535Y115671
|
||||
X22528Y123014
|
||||
X22528Y95947
|
||||
X32370Y95947
|
||||
X42213Y95947
|
||||
X52055Y95947
|
||||
T09
|
||||
X23866Y12000
|
||||
X23866Y22000
|
||||
X23866Y32000
|
||||
X23866Y42000
|
||||
X23866Y52000
|
||||
X23866Y62000
|
||||
X33866Y62000
|
||||
X43866Y62000
|
||||
X43866Y52000
|
||||
X33866Y52000
|
||||
X33866Y42000
|
||||
X43866Y42000
|
||||
X43866Y32000
|
||||
X33866Y32000
|
||||
X33866Y22000
|
||||
X33866Y12000
|
||||
X43866Y12000
|
||||
X43866Y22000
|
||||
X53866Y22000
|
||||
X53866Y12000
|
||||
X63866Y12000
|
||||
X63866Y22000
|
||||
X63866Y32000
|
||||
X53866Y32000
|
||||
X53866Y42000
|
||||
X53866Y52000
|
||||
X63866Y52000
|
||||
X63866Y42000
|
||||
X73866Y42000
|
||||
X73866Y52000
|
||||
X83866Y52000
|
||||
X83866Y42000
|
||||
X93866Y42000
|
||||
X93866Y52000
|
||||
X93866Y62000
|
||||
X103866Y62000
|
||||
X113866Y62000
|
||||
X113866Y52000
|
||||
X103866Y52000
|
||||
X103866Y42000
|
||||
X113866Y42000
|
||||
X113866Y32000
|
||||
X103866Y32000
|
||||
X93866Y32000
|
||||
X83866Y32000
|
||||
X73866Y32000
|
||||
X73866Y22000
|
||||
X73866Y12000
|
||||
X83866Y12000
|
||||
X83866Y22000
|
||||
X93866Y22000
|
||||
X93866Y12000
|
||||
X103866Y12000
|
||||
X103866Y22000
|
||||
X113866Y22000
|
||||
X113866Y12000
|
||||
X123866Y27000
|
||||
X123866Y37000
|
||||
X123866Y47000
|
||||
X123866Y57000
|
||||
X163665Y56176
|
||||
X163665Y38376
|
||||
X189265Y38376
|
||||
X189265Y56176
|
||||
X294614Y51882
|
||||
X294614Y41882
|
||||
X304614Y41882
|
||||
X304614Y51882
|
||||
X314614Y51882
|
||||
X314614Y41882
|
||||
X324614Y41882
|
||||
X324614Y51882
|
||||
X334614Y51882
|
||||
X334614Y41882
|
||||
X344614Y41882
|
||||
X344614Y51882
|
||||
X354614Y51882
|
||||
X354614Y41882
|
||||
X364614Y41882
|
||||
X364614Y51882
|
||||
X364575Y61724
|
||||
X354575Y61724
|
||||
X344575Y61724
|
||||
X238657Y172079
|
||||
X227657Y172079
|
||||
X324024Y189008
|
||||
X334024Y189008
|
||||
X77921Y202000
|
||||
X67921Y202000
|
||||
X57921Y202000
|
||||
X47921Y202000
|
||||
X37921Y202000
|
||||
X27921Y202000
|
||||
X17921Y202000
|
||||
X63079Y173417
|
||||
X72921Y173417
|
||||
X72921Y163417
|
||||
X63079Y163417
|
||||
X63079Y153417
|
||||
X72921Y153417
|
||||
M30
|
BIN
pcb/cartreader.jpg
Normal file
BIN
pcb/cartreader.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 112 KiB |
BIN
pcb/cartreader_sch.png
Normal file
BIN
pcb/cartreader_sch.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 136 KiB |
8488
pcb/flash_adapter.GBL
Normal file
8488
pcb/flash_adapter.GBL
Normal file
File diff suppressed because it is too large
Load Diff
7676
pcb/flash_adapter.GBO
Normal file
7676
pcb/flash_adapter.GBO
Normal file
File diff suppressed because it is too large
Load Diff
1422
pcb/flash_adapter.GBS
Normal file
1422
pcb/flash_adapter.GBS
Normal file
File diff suppressed because it is too large
Load Diff
1172
pcb/flash_adapter.GML
Normal file
1172
pcb/flash_adapter.GML
Normal file
File diff suppressed because it is too large
Load Diff
8763
pcb/flash_adapter.GTL
Normal file
8763
pcb/flash_adapter.GTL
Normal file
File diff suppressed because it is too large
Load Diff
7373
pcb/flash_adapter.GTO
Normal file
7373
pcb/flash_adapter.GTO
Normal file
File diff suppressed because it is too large
Load Diff
1690
pcb/flash_adapter.GTS
Normal file
1690
pcb/flash_adapter.GTS
Normal file
File diff suppressed because it is too large
Load Diff
399
pcb/flash_adapter.TXT
Normal file
399
pcb/flash_adapter.TXT
Normal file
@ -0,0 +1,399 @@
|
||||
%
|
||||
M48
|
||||
M72
|
||||
T01C0.01600
|
||||
T02C0.02000
|
||||
T03C0.02756
|
||||
T04C0.04000
|
||||
T05C0.04134
|
||||
T06C0.04724
|
||||
%
|
||||
T01
|
||||
X39958Y44493
|
||||
X47981Y37624
|
||||
X57828Y35518
|
||||
X77624Y54543
|
||||
X83637Y50793
|
||||
X95594Y43671
|
||||
X89268Y35486
|
||||
X104444Y39201
|
||||
X93528Y90158
|
||||
X90383Y113205
|
||||
X69516Y104097
|
||||
X67785Y114961
|
||||
X54950Y103362
|
||||
X54950Y99425
|
||||
X9674Y93520
|
||||
X9674Y113205
|
||||
X9674Y132890
|
||||
X9674Y152575
|
||||
X9674Y172260
|
||||
X9674Y191945
|
||||
X29359Y191945
|
||||
X49044Y191945
|
||||
X68729Y191945
|
||||
X88414Y191945
|
||||
X108099Y191945
|
||||
X127784Y191945
|
||||
X147469Y191945
|
||||
X167154Y191945
|
||||
X186839Y191945
|
||||
X206524Y191945
|
||||
X226209Y191945
|
||||
X245894Y191945
|
||||
X265580Y191945
|
||||
X285265Y191945
|
||||
X304950Y191945
|
||||
X324635Y191945
|
||||
X344320Y191945
|
||||
X364005Y191945
|
||||
X383690Y191945
|
||||
X383690Y172260
|
||||
X383690Y152575
|
||||
X383690Y132890
|
||||
X383690Y113205
|
||||
X383690Y93520
|
||||
X348430Y103519
|
||||
X344027Y102495
|
||||
X344320Y81709
|
||||
X338414Y81709
|
||||
X330540Y81709
|
||||
X330540Y75803
|
||||
X330540Y67929
|
||||
X330540Y62024
|
||||
X338414Y62024
|
||||
X344320Y62024
|
||||
X350225Y50213
|
||||
X338414Y50213
|
||||
X312824Y46276
|
||||
X306918Y46276
|
||||
X298946Y55620
|
||||
X292646Y56735
|
||||
X281987Y63624
|
||||
X280437Y46128
|
||||
X267864Y44611
|
||||
X266730Y35410
|
||||
X240117Y50013
|
||||
X241957Y60055
|
||||
X241957Y69898
|
||||
X238380Y76031
|
||||
X233979Y74117
|
||||
X247863Y79740
|
||||
X234083Y91551
|
||||
X222272Y91551
|
||||
X212430Y71866
|
||||
X217112Y66139
|
||||
X212901Y63171
|
||||
X213224Y52707
|
||||
X227641Y50054
|
||||
X182381Y36650
|
||||
X155455Y99809
|
||||
X243926Y111236
|
||||
X265592Y129846
|
||||
X276424Y128091
|
||||
X299472Y139692
|
||||
X304950Y87614
|
||||
X304950Y81709
|
||||
X304950Y75803
|
||||
X273454Y81709
|
||||
X367942Y50213
|
||||
X383690Y50213
|
||||
X29359Y54150
|
||||
X9674Y54150
|
||||
X9674Y73835
|
||||
T02
|
||||
X63490Y238067
|
||||
X68660Y252454
|
||||
X82107Y242284
|
||||
X86997Y255660
|
||||
X90564Y272342
|
||||
X65416Y272388
|
||||
X73860Y307639
|
||||
X72854Y316827
|
||||
X82476Y325398
|
||||
X78563Y329930
|
||||
X69124Y338640
|
||||
X57614Y328442
|
||||
X55501Y337170
|
||||
X62127Y361781
|
||||
X79437Y358293
|
||||
X78362Y371217
|
||||
X85240Y338736
|
||||
X83935Y310235
|
||||
X88209Y307625
|
||||
X127992Y339175
|
||||
X157312Y331645
|
||||
X171602Y346627
|
||||
X173393Y339074
|
||||
X176415Y330047
|
||||
X175285Y302312
|
||||
X174763Y287653
|
||||
X175191Y263425
|
||||
X139700Y284987
|
||||
X130040Y267287
|
||||
X226417Y339175
|
||||
X255737Y331645
|
||||
X271818Y339074
|
||||
X270028Y346627
|
||||
X274840Y330047
|
||||
X273710Y302312
|
||||
X273188Y287653
|
||||
X273616Y263425
|
||||
X238125Y284987
|
||||
X228466Y267287
|
||||
X322873Y339175
|
||||
X352194Y331645
|
||||
X368274Y339074
|
||||
X366484Y346627
|
||||
X371297Y330047
|
||||
X370167Y302312
|
||||
X369645Y287653
|
||||
X370072Y263425
|
||||
X334582Y284987
|
||||
X324922Y267287
|
||||
X324345Y374510
|
||||
X313219Y380385
|
||||
X227888Y374510
|
||||
X216762Y380385
|
||||
X129463Y374510
|
||||
X118337Y380385
|
||||
T03
|
||||
X285265Y80803
|
||||
X285265Y70803
|
||||
X358099Y66866
|
||||
X358099Y76866
|
||||
T04
|
||||
X358769Y116669
|
||||
X348769Y116669
|
||||
X338769Y116669
|
||||
X328769Y116669
|
||||
X318769Y116669
|
||||
X308769Y116669
|
||||
X298769Y116669
|
||||
X288769Y116669
|
||||
X278769Y116669
|
||||
X268769Y116669
|
||||
X258769Y116669
|
||||
X248769Y116669
|
||||
X238769Y116669
|
||||
X228769Y116669
|
||||
X218769Y116669
|
||||
X208769Y116669
|
||||
X198769Y116669
|
||||
X188769Y116669
|
||||
X178769Y116669
|
||||
X168769Y116669
|
||||
X158769Y116669
|
||||
X148769Y116669
|
||||
X144595Y141236
|
||||
X154595Y141236
|
||||
X164595Y141236
|
||||
X174595Y141236
|
||||
X184595Y141236
|
||||
X194595Y141236
|
||||
X204595Y141236
|
||||
X214595Y141236
|
||||
X224595Y141236
|
||||
X228769Y176669
|
||||
X238769Y176669
|
||||
X248769Y176669
|
||||
X258769Y176669
|
||||
X268769Y176669
|
||||
X278769Y176669
|
||||
X288769Y176669
|
||||
X298769Y176669
|
||||
X308769Y176669
|
||||
X318769Y176669
|
||||
X328769Y176669
|
||||
X338769Y176669
|
||||
X348769Y176669
|
||||
X358769Y176669
|
||||
X330501Y220567
|
||||
X330501Y230567
|
||||
X330501Y240567
|
||||
X330501Y250567
|
||||
X330501Y260567
|
||||
X330501Y270567
|
||||
X330501Y280567
|
||||
X330501Y290567
|
||||
X330501Y300567
|
||||
X330501Y310567
|
||||
X330501Y320567
|
||||
X330501Y330567
|
||||
X330501Y340567
|
||||
X330501Y350567
|
||||
X330501Y360567
|
||||
X330501Y370567
|
||||
X330501Y380567
|
||||
X330501Y390567
|
||||
X294044Y390567
|
||||
X294044Y380567
|
||||
X294044Y370567
|
||||
X294044Y360567
|
||||
X294044Y350567
|
||||
X294044Y340567
|
||||
X294044Y330567
|
||||
X294044Y320567
|
||||
X294044Y310567
|
||||
X294044Y300567
|
||||
X294044Y290567
|
||||
X294044Y280567
|
||||
X294044Y270567
|
||||
X294044Y260567
|
||||
X294044Y250567
|
||||
X294044Y240567
|
||||
X294044Y230567
|
||||
X294044Y220567
|
||||
X234044Y220567
|
||||
X234044Y230567
|
||||
X234044Y240567
|
||||
X234044Y250567
|
||||
X234044Y260567
|
||||
X234044Y270567
|
||||
X234044Y280567
|
||||
X234044Y290567
|
||||
X234044Y300567
|
||||
X234044Y310567
|
||||
X234044Y320567
|
||||
X234044Y330567
|
||||
X234044Y340567
|
||||
X234044Y350567
|
||||
X234044Y360567
|
||||
X234044Y370567
|
||||
X234044Y380567
|
||||
X234044Y390567
|
||||
X195619Y390567
|
||||
X195619Y380567
|
||||
X195619Y370567
|
||||
X195619Y360567
|
||||
X195619Y350567
|
||||
X195619Y340567
|
||||
X195619Y330567
|
||||
X195619Y320567
|
||||
X195619Y310567
|
||||
X195619Y300567
|
||||
X195619Y290567
|
||||
X195619Y280567
|
||||
X195619Y270567
|
||||
X195619Y260567
|
||||
X195619Y250567
|
||||
X195619Y240567
|
||||
X195619Y230567
|
||||
X195619Y220567
|
||||
X198769Y176669
|
||||
X188769Y176669
|
||||
X178769Y176669
|
||||
X168769Y176669
|
||||
X158769Y176669
|
||||
X148769Y176669
|
||||
X134595Y141236
|
||||
X124595Y141236
|
||||
X114595Y141236
|
||||
X104595Y141236
|
||||
X94595Y141236
|
||||
X84595Y141236
|
||||
X74595Y141236
|
||||
X64595Y141236
|
||||
X54595Y141236
|
||||
X54595Y81236
|
||||
X64595Y81236
|
||||
X74595Y81236
|
||||
X84595Y81236
|
||||
X94595Y81236
|
||||
X104595Y81236
|
||||
X114595Y81236
|
||||
X124595Y81236
|
||||
X134595Y81236
|
||||
X144595Y81236
|
||||
X154595Y81236
|
||||
X164595Y81236
|
||||
X174595Y81236
|
||||
X184595Y81236
|
||||
X194595Y81236
|
||||
X204595Y81236
|
||||
X214595Y81236
|
||||
X224595Y81236
|
||||
X253769Y85803
|
||||
X253769Y75803
|
||||
X253769Y65803
|
||||
X218769Y176669
|
||||
X208769Y176669
|
||||
X135619Y220567
|
||||
X135619Y230567
|
||||
X135619Y240567
|
||||
X135619Y250567
|
||||
X135619Y260567
|
||||
X135619Y270567
|
||||
X135619Y280567
|
||||
X135619Y290567
|
||||
X135619Y300567
|
||||
X135619Y310567
|
||||
X135619Y320567
|
||||
X135619Y330567
|
||||
X135619Y340567
|
||||
X135619Y350567
|
||||
X135619Y360567
|
||||
X135619Y370567
|
||||
X135619Y380567
|
||||
X135619Y390567
|
||||
X100265Y390567
|
||||
X100265Y380567
|
||||
X100265Y370567
|
||||
X100265Y360567
|
||||
X100265Y350567
|
||||
X100265Y340567
|
||||
X100265Y330567
|
||||
X100265Y320567
|
||||
X100265Y310567
|
||||
X100265Y300567
|
||||
X100265Y290567
|
||||
X100265Y280567
|
||||
X100265Y270567
|
||||
X100265Y260567
|
||||
X100265Y250567
|
||||
X100265Y240567
|
||||
X100265Y230567
|
||||
X100265Y220567
|
||||
X40265Y220567
|
||||
X40265Y230567
|
||||
X40265Y240567
|
||||
X40265Y250567
|
||||
X40265Y260567
|
||||
X40265Y270567
|
||||
X40265Y280567
|
||||
X40265Y290567
|
||||
X40265Y300567
|
||||
X40265Y310567
|
||||
X40265Y320567
|
||||
X40265Y330567
|
||||
X40265Y340567
|
||||
X40265Y350567
|
||||
X40265Y360567
|
||||
X40265Y370567
|
||||
X40265Y380567
|
||||
X40265Y390567
|
||||
X390501Y390567
|
||||
X390501Y380567
|
||||
X390501Y370567
|
||||
X390501Y360567
|
||||
X390501Y350567
|
||||
X390501Y340567
|
||||
X390501Y330567
|
||||
X390501Y320567
|
||||
X390501Y310567
|
||||
X390501Y300567
|
||||
X390501Y290567
|
||||
X390501Y280567
|
||||
X390501Y270567
|
||||
X390501Y260567
|
||||
X390501Y250567
|
||||
X390501Y240567
|
||||
X390501Y230567
|
||||
X390501Y220567
|
||||
T05
|
||||
X376879Y81413
|
||||
X376879Y62319
|
||||
T06
|
||||
X388808Y61138
|
||||
X388808Y82594
|
||||
M30
|
BIN
pcb/flashadapter.jpg
Normal file
BIN
pcb/flashadapter.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 118 KiB |
BIN
pcb/flashadapter_sch.png
Normal file
BIN
pcb/flashadapter_sch.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 98 KiB |
BIN
pcb/n64_adapter_sch.png
Normal file
BIN
pcb/n64_adapter_sch.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 110 KiB |
BIN
pinout.xls
Normal file
BIN
pinout.xls
Normal file
Binary file not shown.
49
sd/README.md
Normal file
49
sd/README.md
Normal file
@ -0,0 +1,49 @@
|
||||
####Copy these files to the root of your SD card.
|
||||
|
||||
####n64.txt
|
||||
This file stores the N64 database which is needed because the save type and rom size are not stored inside the rom.
|
||||
The CRC32 checksum is used to verify a good dump.
|
||||
|
||||
Example:
|
||||
002c3b2a,NO7P,32,0
|
||||
CRC32, game id, size in MByte, savetype
|
||||
|
||||
Savetypes:
|
||||
0 = no save chip
|
||||
1 = SRAM
|
||||
4 = Flashram
|
||||
5 = 4K Eeprom
|
||||
6 = 16K Eeprom
|
||||
|
||||
####snes.txt
|
||||
This file is needed for odd sized SNES games like Final Fantasy (JAP) or Tales of Symphonia. Without this file you will get overdumps. There are still a lot games missing from this list.
|
||||
|
||||
Example:
|
||||
A172,24,48
|
||||
checksum, size in Mbit, number of banks
|
||||
|
||||
####hirom64.map
|
||||
This is a Nintendo Power mapping file that changes the mapping to a single 4MB HiRom game with 64Kbit/8KByte save. The first byte is used to specify the mapping.
|
||||
|
||||
Bit0-1 SRAM Size (0=2K, 1=8K, 2=32K, 3=None) ;ie. 2K SHL (N*2)
|
||||
Bit2-4 ROM Size (0=512K, 2=1.5M, 5=3M, 7=4M) ;ie. 512K*(N+1)
|
||||
Bit5 Zero (maybe MSB of ROM Size for carts with three FLASH chips) (set for HIROM:ALL)
|
||||
Bit6-7 Mode (0=Lorom, 1=Hirom, 2=Forced HIROM:MENU, 3=Forced HIROM:ALL)
|
||||
More info: http://problemkaputt.de/fullsnes.htm#snescartnintendopowerflashcard
|
||||
|
||||
Example:
|
||||
0x5d = 0b 01 0 111 01
|
||||
01 -> Hirom
|
||||
0
|
||||
111 -> 4M
|
||||
01 -> 8K
|
||||
|
||||
####lorom256.map
|
||||
This is a Nintendo Power mapping file that changes the mapping to a single 4MB LoRom game with 256Kbit/32 KByte save.
|
||||
|
||||
Example:
|
||||
0x1e = 0b 00 0 111 10
|
||||
00 -> Lorom
|
||||
0
|
||||
0b111 -> 7 -> 4M
|
||||
0x10 -> 2 ->32k
|
BIN
sd/hirom64.map
Normal file
BIN
sd/hirom64.map
Normal file
Binary file not shown.
BIN
sd/lorom256.map
Normal file
BIN
sd/lorom256.map
Normal file
Binary file not shown.
869
sd/n64.txt
Normal file
869
sd/n64.txt
Normal file
@ -0,0 +1,869 @@
|
||||
002c3b2a,NO7P,32,0
|
||||
26360987,NO7E,32,0
|
||||
75a21679,NTEP,16,1
|
||||
08fe81c7,NTEA,16,1
|
||||
67a789e5,NTWJ,12,0
|
||||
97389efc,NNiJ,16,0
|
||||
b6fa1328,NNiJ,12,0
|
||||
60a680e7,NHFJ,08,0
|
||||
742e31fb,NOSJ,16,0
|
||||
c1bc6fd8,NO2J,16,0
|
||||
dca7f4eb,NTCJ,12,5
|
||||
6a2b08da,NSAP,12,5
|
||||
4370d7e3,NERE,08,5
|
||||
040b0046,NAGP,08,5
|
||||
6ee3b932,NAGJ,08,5
|
||||
f322b641,NAGJ,08,5
|
||||
198b9e0e,NAGE,08,5
|
||||
86df90e6,NS3J,08,0
|
||||
be7e230d,NAYP,32,1
|
||||
b1f18186,NAYE,32,1
|
||||
c14d45ac,NABP,08,5
|
||||
58fcb771,NABJ,08,5
|
||||
e349cfec,ND3J,12,0
|
||||
ff009c21,ND4J,16,0
|
||||
996e845f,NTNP,08,5
|
||||
a7dcf638,NTNE,08,5
|
||||
d0de3584,NBSP,12,0
|
||||
6d25b36f,NBSE,12,0
|
||||
d3c29aa4,NBEP,16,0
|
||||
69e88471,NBEE,16,0
|
||||
4d659e85,NASE,16,0
|
||||
600bc49e,NARP,16,0
|
||||
5bab9100,NARD,16,0
|
||||
630a19e2,NARE,16,0
|
||||
1952cc87,NACE,08,0
|
||||
e79048e2,NAMP,08,0
|
||||
2fe786f6,NAME,08,0
|
||||
79a71608,N32E,08,1
|
||||
f5ce3d91,NAHE,04,0
|
||||
3baf58d5,NLCP,04,0
|
||||
a4374eac,NLCE,04,0
|
||||
22f54a52,NBMJ,08,5
|
||||
86bbc278,NBVJ,16,5
|
||||
6ab7fec6,NBNJ,12,5
|
||||
ef8c2f34,NBJJ,12,0
|
||||
47db2246,NBJJ,12,0
|
||||
8f7c9324,NBKJ,16,5
|
||||
258c58d0,NB7J,32,6
|
||||
525899c9,NBKP,16,5
|
||||
ad429961,NBKE,16,5
|
||||
fb7ffb10,NBKE,16,5
|
||||
2736266a,NB7U,32,6
|
||||
1ec12f5a,NB7P,32,6
|
||||
bab803ef,NB7E,32,6
|
||||
00da3704,NFHP,08,5
|
||||
383b86ef,NVBJ,32,1
|
||||
6b09092e,NB4E,12,0
|
||||
35299f9c,NJQE,04,0
|
||||
82a4bb8a,NJQP,04,0
|
||||
6c230765,NBXE,08,0
|
||||
c99c6030,NBQP,08,0
|
||||
31beb053,NBQE,08,0
|
||||
736f9d5c,NZOE,16,0
|
||||
5b6c6e4c,NNSP,16,0
|
||||
b0986539,NNSP,16,0
|
||||
49e75825,NB8J,16,0
|
||||
f4a97c73,NNSE,16,0
|
||||
9e372e72,NNSE,15,0
|
||||
3ac924bc,NMUE,12,5
|
||||
2c4eb906,NBFP,16,0
|
||||
dfbf448c,NBFE,16,0
|
||||
4f9d569f,NB5J,64,0
|
||||
4c820695,NBCP,08,5
|
||||
767a95e7,NBCE,08,5
|
||||
9cbbccf1,NBCE,08,5
|
||||
081a3641,NBCJ,08,5
|
||||
8fb41658,NBPP,16,0
|
||||
c6f49764,NBPE,16,0
|
||||
6a04cdae,NBHP,12,5
|
||||
fabbdf02,NBHE,12,5
|
||||
f97237c7,NYWJ,16,1
|
||||
525339c5,NBMP,08,5
|
||||
3ed0e0dc,NBME,08,5
|
||||
57550007,NBVE,16,5
|
||||
59e39947,NBDP,12,5
|
||||
2cc2e634,NBDE,12,5
|
||||
69ceabcc,NBDJ,12,5
|
||||
1844c8ca,NBOE,16,0
|
||||
80d70173,NOWE,08,0
|
||||
e26192ab,NBLP,12,0
|
||||
2ed81a65,NBLJ,12,0
|
||||
8ec937db,NBLE,12,0
|
||||
791881d4,NBYP,12,0
|
||||
e5429094,NBYF,12,0
|
||||
15a32836,NBYD,12,0
|
||||
cf2ea0b6,NBYE,12,0
|
||||
c285fc69,NB3E,08,0
|
||||
04731bab,NBUP,08,0
|
||||
9f54cd2d,NBUE,08,0
|
||||
95595889,NB3P,08,0
|
||||
6f6262cb,NCLE,16,0
|
||||
8569f1a0,NCDX,16,0
|
||||
8036f999,NCDY,16,0
|
||||
10c6a0a1,NCDE,16,0
|
||||
d9d76235,ND3P,12,0
|
||||
8b0d3c00,ND3E,12,0
|
||||
83032d97,ND3E,12,0
|
||||
12ab9b45,ND4P,16,0
|
||||
ab13028c,ND4E,16,0
|
||||
b1d26f39,NTSP,12,0
|
||||
587dd983,NCTP,12,5
|
||||
6395c475,NCTJ,12,5
|
||||
7fe024c9,NCTE,12,5
|
||||
3b53519f,N2VP,08,0
|
||||
5677eaef,NV2J,08,0
|
||||
cdf26d67,N2VE,08,0
|
||||
82c1d9e1,NCBP,04,0
|
||||
ba4e65a8,NCBE,04,0
|
||||
c1dcd7ab,NCHP,08,5
|
||||
aa5d76a9,NCHE,08,5
|
||||
231f9284,NCRJ,08,5
|
||||
5c565ad6,NCGJ,12,5
|
||||
5f75634e,NPKJ,08,0
|
||||
479643e2,NP2J,16,4
|
||||
8fedf4c6,NK2J,16,5
|
||||
e272bdf6,NGTJ,16,0
|
||||
434de656,NC2E,16,0
|
||||
18f4166a,NCFE,12,0
|
||||
82263e5d,NCFP,12,0
|
||||
3fa647dd,NCFE,12,0
|
||||
f3da8a26,NCCP,32,4
|
||||
6cd0fc99,NCCD,32,4
|
||||
3e9069ef,NCCE,32,4
|
||||
4667cfe9,NFUP,64,6
|
||||
ce8cc172,NFUE,64,6
|
||||
867a2ced,NXOE,16,5
|
||||
8935a8d9,NCUP,08,5
|
||||
5238b727,NCUE,08,5
|
||||
4655ba2d,NCUE,08,5
|
||||
c3b52701,NCUE,08,5
|
||||
e46ce079,NCWP,12,6
|
||||
a123769f,NCWE,12,6
|
||||
f2fae693,NCXJ,16,5
|
||||
c8201454,NCZJ,16,6
|
||||
7319d9af,NT4P,16,0
|
||||
10cc5f15,NT4E,16,0
|
||||
3c13fbcf,NDFJ,24,0
|
||||
d2a19c71,NDKP,08,0
|
||||
83fd222f,NDKE,08,0
|
||||
3db8130e,NGAE,12,0
|
||||
e7ef60e8,NMTF,16,0
|
||||
7bfc71e0,ND6J,32,1
|
||||
ffc76f35,ND6J,32,1
|
||||
a9417994,NDAJ,32,1
|
||||
7ad9e429,NDEP,16,0
|
||||
38f1b5d9,NDEE,16,0
|
||||
9e978488,CDZJ,16,1
|
||||
4a13323c,NDYP,12,5
|
||||
b1e87639,NDYP,12,5
|
||||
eb759206,NDYE,12,5
|
||||
5acca298,NDYE,12,5
|
||||
7fdec270,NDQE,20,5
|
||||
7737ed9e,NTAP,16,0
|
||||
99c7649d,NTAF,16,0
|
||||
0b0954c5,NTAD,16,0
|
||||
c38ca641,NTAE,16,0
|
||||
c4b0d9ea,NDQP,20,5
|
||||
a28c71c6,NDOP,32,6
|
||||
919f7e74,NDOJ,32,6
|
||||
c83dfa15,NDPE,32,6
|
||||
d44b4fc6,NDOE,32,6
|
||||
d985c356,NDMP,08,0
|
||||
c8f3af5b,NDMJ,08,0
|
||||
5cc1ade6,NDME,08,0
|
||||
1d3a17b5,NDME,08,0
|
||||
154e8b33,NDRJ,08,5
|
||||
0c1a0c38,ND2J,12,6
|
||||
d3b68be4,N3DJ,16,6
|
||||
92dfe338,N3DJ,16,6
|
||||
9503e3f1,NAFJ,16,4
|
||||
a4701927,NN6E,04,5
|
||||
5a7e226b,NDHP,12,0
|
||||
20f23dde,NDHJ,12,0
|
||||
d09f4da8,NDHE,12,0
|
||||
3177a905,NDUE,16,5
|
||||
ea82f037,NDZP,32,1
|
||||
7ecdfb28,NDZF,32,1
|
||||
9a3258d7,NDZE,32,1
|
||||
3275adb0,NDNP,08,0
|
||||
dbfd5a53,NDNE,08,0
|
||||
61a56330,NJMP,16,5
|
||||
9e6579c5,NJME,16,5
|
||||
be8feead,NWIP,32,1
|
||||
36d368ef,NWIE,32,1
|
||||
1699d2d6,NSTJ,08,0
|
||||
92c3ba6f,NELE,08,0
|
||||
ea3b92d8,NENE,08,0
|
||||
a4fe7652,NETJ,16,0
|
||||
0b881e60,NMXP,16,6
|
||||
03bfd065,NMXJ,16,6
|
||||
be6298b0,NNXE,16,6
|
||||
fc459192,NMXE,16,6
|
||||
0b71b1ea,NEGP,08,0
|
||||
750dc9a7,NEGJ,08,0
|
||||
04cb74ec,NEGE,08,0
|
||||
1a57f416,NG2P,12,0
|
||||
7c8a36da,NG2J,12,0
|
||||
81a4c28b,NG2E,12,0
|
||||
ed750623,NHGP,08,0
|
||||
30a24d89,NHGE,08,0
|
||||
bebbc6c8,NFWP,12,5
|
||||
57cd299d,NFWF,12,5
|
||||
0f1984dc,NFWD,12,5
|
||||
f7bacbc3,NFWJ,12,5
|
||||
7dc9ef2c,NFWE,12,5
|
||||
803d33df,NF2P,12,6
|
||||
2d6f7e8b,NFZP,16,1
|
||||
6b1cef83,CFZJ,16,1
|
||||
0b561fba,CFZE,16,1
|
||||
2da744f5,NFRP,16,0
|
||||
9fb0e6c9,NFSJ,12,0
|
||||
137cb3cc,N8IP,12,0
|
||||
28b1221c,N8IE,12,0
|
||||
ae346df6,N8IJ,12,0
|
||||
6eae1e6e,N9FP,16,0
|
||||
6b2473a9,N9FE,16,0
|
||||
ae2583fb,N7IP,08,0
|
||||
57de7cab,N7IE,08,0
|
||||
bb2563c6,NFGE,16,0
|
||||
c9225511,NKAP,12,5
|
||||
0cc22034,NKAF,12,5
|
||||
5052168c,NKAD,12,5
|
||||
f45ea789,NKAE,12,5
|
||||
8a1c261e,NKAJ,12,5
|
||||
4052c176,NFFP,16,0
|
||||
8456841e,NFFE,16,0
|
||||
c3066e59,NFDP,12,0
|
||||
91bc9aeb,NFDE,12,0
|
||||
5ed736d9,NFOP,08,0
|
||||
9793abc2,NFOD,08,0
|
||||
76c4333d,NFOE,08,0
|
||||
67eaf0f3,NF9E,12,0
|
||||
b0c62957,NGVE,04,5
|
||||
2aa6d2a1,NSIJ,32,4
|
||||
5aa63b04,NGAP,12,0
|
||||
6ead2d89,NGAJ,12,0
|
||||
08c41e0e,NG6J,16,0
|
||||
965c4575,NGPJ,16,0
|
||||
73133cd2,N3HJ,12,0
|
||||
b7b3a489,NGXP,16,0
|
||||
8d133db0,NGDJ,16,0
|
||||
64765e82,NGXE,16,0
|
||||
724ecae7,NGLJ,12,0
|
||||
a43cb8e4,NX3X,32,0
|
||||
6bc4a056,NX3P,32,0
|
||||
87a7d099,NX3E,32,0
|
||||
a7c92bea,NX2P,16,0
|
||||
c545ce80,NX2E,16,0
|
||||
90eceb4a,NGVP,08,5
|
||||
f874571c,NGVE,08,5
|
||||
52d418e1,NGME,16,0
|
||||
641885df,NGNE,08,0
|
||||
9ec14aeb,NGEP,12,5
|
||||
a6be19dd,NGEJ,12,5
|
||||
b6330846,NGEE,12,5
|
||||
6dfb4747,NGCP,12,5
|
||||
bc627da7,NGCE,12,5
|
||||
c1d98b78,NHSJ,12,0
|
||||
51228f0c,NM9J,16,0
|
||||
decdc0ad,NYWE,16,1
|
||||
99a427fa,NHPJ,08,5
|
||||
b1954b08,NHCP,16,0
|
||||
4948892b,NHCE,16,0
|
||||
5369efb4,NHXP,08,0
|
||||
e4821c4b,NHXD,08,0
|
||||
571da09a,NHXJ,08,0
|
||||
1d35e110,NHXE,08,0
|
||||
b18b2734,NPGE,16,5
|
||||
ba6a687e,NHKJ,12,0
|
||||
bf6f67bf,NETP,16,0
|
||||
d1934cf6,NETD,16,0
|
||||
ae7cb69d,NK4J,32,1
|
||||
a263c1b9,NK4J,32,1
|
||||
f4589aa8,NK4J,32,1
|
||||
6d5e1332,NK4J,32,1
|
||||
850633a7,NHWP,16,0
|
||||
a5c92148,NHWE,12,0
|
||||
31e102e3,NHGJ,08,0
|
||||
e76627ff,NHVP,16,0
|
||||
e769de96,NHYJ,16,0
|
||||
15b57ef8,NHVE,16,0
|
||||
863ab8f3,NHTP,32,0
|
||||
010f6242,NHTF,32,0
|
||||
e744456f,NHTE,32,0
|
||||
c1ea5d33,NH5J,12,0
|
||||
a4a24517,NIMJ,12,0
|
||||
9bf26065,NWBP,04,0
|
||||
6a6fbd5d,NWBE,04,0
|
||||
26cc1266,NWBJ,04,0
|
||||
d8eb5e6e,NFHE,08,5
|
||||
4978eb57,NIJE,32,5
|
||||
a5163f29,NICE,16,5
|
||||
bf23945d,NWSP,12,0
|
||||
b85fa721,NWSE,12,0
|
||||
69572558,NISX,16,0
|
||||
dcd0538f,NISE,16,0
|
||||
8c839268,NJPP,08,0
|
||||
0ea249b9,NJPE,08,0
|
||||
da443f0b,N3HE,12,0
|
||||
b3181ee0,N3HP,12,0
|
||||
dc0b2c8f,NDSJ,08,0
|
||||
4c536dd7,NJLJ,08,0
|
||||
976a2d12,NSJJ,12,0
|
||||
156e705e,NSJJ,12,0
|
||||
d1c1681e,NMAJ,08,0
|
||||
e739947c,NJOE,04,0
|
||||
9f14481b,NNiE,04,0
|
||||
5bf42ec4,NCOP,16,0
|
||||
2a5c9a06,NCOE,16,0
|
||||
cfbed88c,NJFP,32,4
|
||||
fa061b96,NJDE,32,4
|
||||
6753d5a3,NJFE,32,4
|
||||
0a796c3e,NGSJ,16,0
|
||||
153aeb15,NPSJ,16,4
|
||||
8ed60dea,NJPJ,08,0
|
||||
6a9e24d7,NPEJ,16,0
|
||||
351cde48,NPAJ,16,0
|
||||
753706ef,NPAJ,16,0
|
||||
480b953e,NP4J,12,0
|
||||
40e3ac61,NP4J,12,0
|
||||
feec34f6,NJ5J,16,0
|
||||
d9329895,NP6J,16,0
|
||||
5c721850,NWSJ,16,0
|
||||
68dbcc04,NWSJ,16,0
|
||||
f63f9a5e,NWSJ,16,0
|
||||
3ba9e644,NJ3J,08,0
|
||||
67a1a22c,NJGJ,16,0
|
||||
f88ac3ce,NDWP,16,0
|
||||
44b80fd7,NDWJ,16,0
|
||||
494950c6,NDWE,16,0
|
||||
db40a155,NFYJ,16,0
|
||||
12d8f3e9,NKJE,16,4
|
||||
5d0ee5d2,NKIP,12,5
|
||||
31c76be7,NKIE,12,5
|
||||
49ef8f2b,NKIE,12,5
|
||||
0b5b5df8,NKIE,12,5
|
||||
f120cc52,NSBJ,12,0
|
||||
7fdc3784,N64J,12,1
|
||||
5b8b89ef,NK4P,32,5
|
||||
20a1c120,NK4E,32,5
|
||||
b77783be,NKEP,08,0
|
||||
3bc93017,NKEJ,08,0
|
||||
255ee1dd,NKEE,08,0
|
||||
58ce7d80,NKKP,16,0
|
||||
074690d6,NKKE,16,0
|
||||
1355a826,NNBP,12,6
|
||||
86360bfb,NNBE,12,6
|
||||
9db99881,NLLJ,12,0
|
||||
9ead1608,NZSP,32,4
|
||||
b428d8a7,NZSE,32,4
|
||||
12836e19,NZSP,32,4
|
||||
3fbd519f,NZLP,32,1
|
||||
946fd0f7,NZLP,32,1
|
||||
a108f6e3,NZLP,32,1
|
||||
346de3ae,CZLE,32,1
|
||||
cd16c529,CZLE,32,1
|
||||
3fd2151e,CZLE,32,1
|
||||
32120c23,CZLE,32,1
|
||||
832d6449,NZLP,32,1
|
||||
c744c4db,CZLE,32,1
|
||||
c7d9b21c,NLGP,16,0
|
||||
39407c9f,NLGE,16,0
|
||||
66766469,NRGF,16,0
|
||||
455a1770,NTSJ,12,0
|
||||
7148251d,NLRP,08,5
|
||||
1d4fb466,NLRJ,08,5
|
||||
4ea07453,NLRE,08,5
|
||||
c61f6bb9,NDUP,16,5
|
||||
9a3425da,NFXU,12,5
|
||||
50a9c0b1,NFXP,12,5
|
||||
57ddede1,NMEP,12,0
|
||||
d2a363a6,NMEE,12,0
|
||||
fab3e50d,N8MP,12,0
|
||||
42e5fafa,N8ME,12,0
|
||||
ef5f997b,NMDE,12,0
|
||||
245eaee8,NFLE,12,0
|
||||
f573f107,N2ME,12,0
|
||||
d0929942,N9MP,12,0
|
||||
2eb64fc2,N9ME,12,0
|
||||
af3b099e,NMTP,16,0
|
||||
377f18e9,NMTD,16,0
|
||||
22fe979c,NMTE,16,0
|
||||
7efb2f1e,NMTJ,16,0
|
||||
dbe7d51a,NMJJ,08,0
|
||||
990a8e54,NMHJ,12,0
|
||||
b68d596f,NMMJ,08,0
|
||||
e08f7578,NKGP,16,1
|
||||
2ef1ea20,NKGE,16,1
|
||||
e5d723c7,NMFP,24,1
|
||||
2d40abb0,NMFE,24,1
|
||||
911f179a,NMFJ,24,1
|
||||
faa6b083,NKTP,12,5
|
||||
0248f6c3,NKTP,12,5
|
||||
5d9696df,NKTJ,12,5
|
||||
6ced6472,NKTJ,12,5
|
||||
434389c1,NKTE,12,5
|
||||
1d69ca55,NMPJ,16,0
|
||||
da98a5d3,NLBP,32,5
|
||||
4f1adc7b,CLBJ,32,5
|
||||
4d60abe5,CLBE,32,5
|
||||
dc00357a,NMWP,32,5
|
||||
7457b081,NMWJ,32,5
|
||||
e58a1955,NMWE,32,5
|
||||
813b13f2,NMVP,32,6
|
||||
3fc04053,NMVJ,32,6
|
||||
b7445ddc,NMVE,32,6
|
||||
bd60ca66,NMQJ,40,4
|
||||
29aa5df4,NM8P,16,6
|
||||
4e9560f6,NM8E,16,6
|
||||
c665301d,NM8J,16,6
|
||||
1bfc71f0,NM6E,32,4
|
||||
2db3d3d6,NHME,16,0
|
||||
bb680cbe,NWKX,16,0
|
||||
1aecfc56,NMLJ,32,5
|
||||
0ae51ea5,NMLP,32,5
|
||||
2d4f8f1b,NMLE,32,5
|
||||
10b9ff1f,NV3P,12,0
|
||||
a62a2763,NV3E,12,0
|
||||
e5c1fedc,NAIE,04,0
|
||||
cc253cab,NMBE,12,0
|
||||
c08ce624,NBRP,04,0
|
||||
172fca97,NBRE,04,0
|
||||
68a4f072,NTMP,08,5
|
||||
7d222d3f,NTME,08,5
|
||||
2c7131d6,NMIP,12,5
|
||||
282a350d,NMIF,12,5
|
||||
67c30a2d,NMID,12,5
|
||||
2d789d98,NMII,12,5
|
||||
ebb060dc,NMIS,12,5
|
||||
3677a8b8,NMIE,12,5
|
||||
e2bbeac1,NMGE,16,5
|
||||
3f5e5830,NMGP,16,5
|
||||
c8cad8f6,NMOE,08,5
|
||||
4731df5c,NM3P,08,0
|
||||
3fd0604d,NM3E,08,0
|
||||
88c83511,NMSJ,08,0
|
||||
635adeca,NM4P,16,0
|
||||
b7f46516,NM4E,16,0
|
||||
ea21015a,NMYP,16,0
|
||||
51a07fd9,NMYE,16,0
|
||||
bc04c62f,NMKP,12,0
|
||||
50a99d60,NMKE,12,0
|
||||
0f323d00,NMKE,12,0
|
||||
bc966b10,NMRP,12,5
|
||||
bea43300,NMRJ,12,5
|
||||
1dc1c812,NMRE,12,5
|
||||
e34c7060,NP9E,12,0
|
||||
3502dbbe,NGMP,16,0
|
||||
3bd9059a,NG5P,16,0
|
||||
4180c296,NG5E,16,0
|
||||
c44de11c,NH5P,12,0
|
||||
ee8288d4,NH5E,12,0
|
||||
ce361f92,NNME,04,0
|
||||
02bf7c2d,NN2E,12,0
|
||||
76e79cea,N9CP,12,0
|
||||
3d8eb950,N9CE,12,0
|
||||
a7cc4ce2,NCKE,16,4
|
||||
7e6d00ae,NXGP,12,0
|
||||
714cf532,NXGE,12,0
|
||||
aed2700a,NBAJ,12,0
|
||||
a245d737,NBAE,12,0
|
||||
eab083b8,NB2E,12,0
|
||||
41093b73,NB2J,12,0
|
||||
a4973197,NWZP,16,0
|
||||
cbb4b730,NWZE,16,0
|
||||
9f95485e,NJAP,16,0
|
||||
163dadf9,NJAE,16,0
|
||||
90e4275b,NB9P,12,0
|
||||
559cd6b1,NB9E,12,0
|
||||
0e4b944c,NNLP,16,0
|
||||
7c3bc95e,NNLE,16,0
|
||||
a316df37,N9BP,16,0
|
||||
9be0a7ac,N9BE,16,0
|
||||
04b75ccc,NBAP,12,0
|
||||
588e60e8,NB2P,12,0
|
||||
a4e378f4,NSOE,16,0
|
||||
a10a86af,NEVJ,32,6
|
||||
983263d7,NRIP,12,1
|
||||
528a07fa,NRIE,12,1
|
||||
9bcd670f,NBZE,16,0
|
||||
5d1907f7,NSZE,16,0
|
||||
7f471773,NBIE,16,0
|
||||
18eeb41b,NFBE,16,0
|
||||
ceef5c29,NQBP,12,0
|
||||
8f54f999,NQBE,12,0
|
||||
6d849e17,NQCE,12,0
|
||||
34a21417,NQ8P,08,0
|
||||
abf0e8f2,NQ8E,08,0
|
||||
f688bdf3,NQ9P,12,0
|
||||
44496b26,NQ9E,12,0
|
||||
f3b2aa4d,N9HP,12,0
|
||||
e5df2afe,N9HE,12,0
|
||||
1ee678fe,NHOE,12,0
|
||||
8c0c9669,NHLP,12,0
|
||||
49d86c00,NHLE,12,0
|
||||
572060e0,NH9P,12,0
|
||||
75f75b9d,NH9E,12,0
|
||||
e272867e,NHOP,12,0
|
||||
6a1eb795,NNCE,16,0
|
||||
8c7c2dca,NHBJ,08,0
|
||||
04c9d3b1,NALJ,16,1
|
||||
13ccb98d,NALJ,16,1
|
||||
433bd4a5,NALJ,16,1
|
||||
03db0407,NALJ,16,1
|
||||
64051ad3,NALJ,16,1
|
||||
9afbfcaf,NCEP,32,0
|
||||
0916ab13,NCED,32,0
|
||||
d7467294,NCEE,32,0
|
||||
a6800ec0,NUTJ,16,0
|
||||
7b870026,NTDP,16,0
|
||||
1d4a8659,NTDE,16,0
|
||||
d9fe9ee7,NOFP,16,0
|
||||
1a45c5ab,NOFE,16,0
|
||||
845b8711,NOBJ,40,1
|
||||
a05aea85,NOBE,40,1
|
||||
5a805c2e,NHNP,08,0
|
||||
9e98fce8,NHNJ,08,0
|
||||
2d777652,NHNE,08,0
|
||||
ac72a1c7,NOMJ,16,0
|
||||
fb96f166,NWDP,16,0
|
||||
42d06e32,NPCJ,12,0
|
||||
85b3ab37,NMQP,64,4
|
||||
a7f5cd7e,NMQE,40,4
|
||||
f00c5053,NYPP,12,0
|
||||
f27114e6,NYPE,12,0
|
||||
a33146e0,NPPJ,12,0
|
||||
86cc80b5,NUBJ,32,0
|
||||
a1d6eb5b,NCRP,08,5
|
||||
c1e57337,NCRE,08,5
|
||||
7718a714,NPDP,32,6
|
||||
639c0da9,NPDJ,32,6
|
||||
68446ad4,NPDE,32,6
|
||||
4c1677f7,NPDE,32,6
|
||||
6b5ff959,NEAP,16,5
|
||||
7cdfcdaa,NEAE,16,5
|
||||
3f6245ae,NPGJ,16,5
|
||||
c902e57c,NPWP,08,5
|
||||
3d3a84a9,NPWJ,08,5
|
||||
728807e7,NPWE,08,5
|
||||
a091bd56,NPFJ,16,4
|
||||
3139189c,CPSJ,16,4
|
||||
40aa4874,CP2J,32,4
|
||||
cbc3b935,NP3J,64,4
|
||||
75839254,NPNP,32,4
|
||||
c3aa0074,NPNF,32,4
|
||||
ac543150,NPND,32,4
|
||||
8b9c598f,NPNE,32,4
|
||||
cdea6d4c,NPFU,16,4
|
||||
f824a057,NPFP,16,4
|
||||
ec843586,NPFF,16,4
|
||||
10c27b3c,NPFD,16,4
|
||||
63f6058a,NPFI,16,4
|
||||
371b787f,NPFS,16,4
|
||||
86a69756,NPFE,16,4
|
||||
e22a00d0,NPHE,16,4
|
||||
dc57508d,NPOP,32,4
|
||||
da889668,NPOP,32,4
|
||||
5dd92d4c,NPOF,32,4
|
||||
9f22a945,NPOD,32,4
|
||||
f155c465,NPOI,32,4
|
||||
f02cd5eb,NPOS,32,4
|
||||
72f66f05,NPOE,32,4
|
||||
72b552e3,NPOE,32,4
|
||||
6b3096c4,NP3P,64,4
|
||||
e2a78066,NP3F,64,4
|
||||
1146a43a,NP3D,64,4
|
||||
283e7641,NP3S,64,4
|
||||
a9998e09,NP3E,64,4
|
||||
8dd735ef,NPXE,12,0
|
||||
aec21c28,NPLJ,08,0
|
||||
83590247,NPUP,12,0
|
||||
a5033311,NPUE,12,0
|
||||
9514da0a,NPQE,08,0
|
||||
81cda888,NPMP,16,0
|
||||
1f5907f9,NKMJ,08,0
|
||||
d59d2794,NPTJ,12,0
|
||||
355ff9de,NPYJ,08,0
|
||||
ea837423,NPBJ,08,0
|
||||
28c10844,NQKP,12,0
|
||||
761f39d1,NQKE,12,0
|
||||
82beca21,NQ2P,12,0
|
||||
e6b34387,NQ2E,12,0
|
||||
d75b45c6,NETE,16,0
|
||||
ba73a7e4,NMGD,16,5
|
||||
483129aa,NKRP,12,0
|
||||
b9e53b06,NKRJ,12,0
|
||||
ffa625fe,NRAJ,08,0
|
||||
3edec7b0,NWQE,12,0
|
||||
cdc458ec,NRPP,12,0
|
||||
211119dd,NRPE,12,0
|
||||
fa6e097b,N2PP,12,0
|
||||
7614ee0d,N2PE,12,0
|
||||
dd4fa798,NRTP,08,0
|
||||
2315fea7,NRTE,08,0
|
||||
169a5037,NY2P,32,0
|
||||
02bb4409,NY2E,32,0
|
||||
927ce621,NFQE,08,0
|
||||
81d13a11,NRVP,12,0
|
||||
fc0c86d0,NRVE,12,0
|
||||
a69df7b3,NRDP,32,0
|
||||
2a554048,NRDE,32,0
|
||||
052a0e04,N22E,32,0
|
||||
7c8ee011,NREP,64,1
|
||||
848fbc0d,NREE,64,1
|
||||
3c664a7b,NROP,32,0
|
||||
600b3988,NROE,32,0
|
||||
997ed5af,NRRP,12,0
|
||||
e4337b92,NRRE,12,0
|
||||
3b0f8061,NR7J,32,0
|
||||
23bf4956,NRXP,08,0
|
||||
b2cbae58,NRXE,08,0
|
||||
7de5d20d,NSUP,12,5
|
||||
e0399f23,NSUE,12,5
|
||||
61eaee83,NRHJ,32,0
|
||||
dd9ae3a8,NRZP,32,6
|
||||
3c2c2d1c,NRZE,32,6
|
||||
0a17da7b,NWKD,16,0
|
||||
23aed3a2,NRGD,16,0
|
||||
a87faf82,NRGE,16,0
|
||||
3338b7c8,NRGP,16,0
|
||||
cd74b07e,NRKP,16,0
|
||||
a9cc2419,NRKE,16,0
|
||||
30f21f89,NR2P,12,0
|
||||
9eb14ea8,NR2E,12,0
|
||||
4e37b6f2,NCSP,08,0
|
||||
22916735,NCSE,08,0
|
||||
01794d62,NSHJ,08,0
|
||||
e064962a,NSFP,08,0
|
||||
3e20070b,NSFE,08,0
|
||||
e63b86c5,NRUP,12,0
|
||||
10941439,NRUE,12,0
|
||||
0d737e6f,NSYP,16,0
|
||||
39068228,NSYE,16,0
|
||||
cc083e34,NDCJ,12,0
|
||||
8d230306,NSDP,32,0
|
||||
6812d3a7,NSDF,32,0
|
||||
eaf6add1,NSDD,32,0
|
||||
5e20cc63,NSDE,32,0
|
||||
eedc0bea,NSGX,16,0
|
||||
ff7d7df0,NSGP,16,0
|
||||
69983cc3,NSGE,16,0
|
||||
576915d4,NIBJ,16,0
|
||||
e892ed43,NTOJ,12,0
|
||||
deac787f,NT3J,32,0
|
||||
57767e45,NS2J,12,0
|
||||
213bf381,NSKJ,08,0
|
||||
30ea3fd7,NSNJ,12,0
|
||||
5619a70d,NSKP,08,0
|
||||
020fb906,NSKE,08,0
|
||||
3a0b6214,NK2P,16,5
|
||||
d0dc8a8e,NK2E,16,5
|
||||
fc73fb79,NSAJ,08,5
|
||||
b2c3e123,NDTP,16,0
|
||||
5711e197,NDTD,16,0
|
||||
7d666b9e,NDTE,16,0
|
||||
ac1628eb,NCYP,16,0
|
||||
6b6b1d09,NCYE,16,0
|
||||
296e3525,NPRP,16,0
|
||||
ccdd322a,NPRE,16,0
|
||||
8cb4b948,NDKJ,08,0
|
||||
60f7ff8e,NIVE,08,0
|
||||
63042e36,NSVP,08,5
|
||||
dcec9f8a,NSVJ,08,5
|
||||
a606e8ae,NSVE,08,5
|
||||
696cc2a4,NSLE,32,0
|
||||
411142a7,NFXJ,12,5
|
||||
b1fcaa9c,NFXE,12,5
|
||||
b1b5fc46,NFXE,12,5
|
||||
7ee5f51d,NS6J,12,5
|
||||
ea650def,NS6E,12,5
|
||||
964506ce,NJFJ,32,4
|
||||
6289645f,NRSP,16,5
|
||||
c88e5638,NRSP,16,5
|
||||
83c225cc,NRSE,16,5
|
||||
f0a191bf,NSWP,12,5
|
||||
3c0837b3,NSWE,12,5
|
||||
b0540688,NSWE,12,5
|
||||
e8727549,NSWE,12,5
|
||||
ee7643b6,NRSJ,16,5
|
||||
7ce71426,NSWJ,12,5
|
||||
029104fd,NNAP,32,5
|
||||
99dee3c0,NNAE,32,5
|
||||
e0f46629,NEPP,32,6
|
||||
97c155c5,NEPJ,32,6
|
||||
c53c1035,NEPE,32,6
|
||||
2639dae2,NSQP,32,4
|
||||
4e4c7ec9,NSQE,32,4
|
||||
056d2218,NSCP,12,5
|
||||
7720e5f3,NSCE,12,5
|
||||
3438b1af,NR3E,12,0
|
||||
5006dc88,NB6J,12,0
|
||||
ba2d8b2e,NBWJ,08,0
|
||||
f6ccd04a,NBWE,08,0
|
||||
03048de6,NSMP,08,5
|
||||
dd801954,NSMJ,08,5
|
||||
3ce60709,NSME,08,5
|
||||
a1e15117,NSMJ,08,5
|
||||
8c9216c1,NSSJ,16,0
|
||||
85df2771,NS4J,32,0
|
||||
e96779fa,NALU,16,1
|
||||
45a91cb1,NALP,32,1
|
||||
eb97929e,NALE,16,1
|
||||
0f879a70,NLCJ,04,0
|
||||
cb5482ec,NSXP,16,0
|
||||
094e2a48,NSXE,16,0
|
||||
bca4ff8c,NSPP,08,0
|
||||
437e3677,NSPE,08,0
|
||||
4cd21372,NPZJ,08,0
|
||||
2c02621f,NPZJ,08,0
|
||||
06bd781b,NPZJ,08,0
|
||||
0712c306,NTXP,12,0
|
||||
7bd20931,NWKF,16,0
|
||||
f128cd17,NT6J,08,0
|
||||
7cb31b0f,NTPP,08,5
|
||||
70a3a5ce,NTPE,08,5
|
||||
135c8eb0,NL2X,12,0
|
||||
d82d5736,NT9P,16,4
|
||||
68c2ac8f,NT9E,16,4
|
||||
e6bd65d5,NTUJ,08,0
|
||||
9ea8a3b8,NTJP,12,5
|
||||
6d685b83,NTJE,12,5
|
||||
4b71e083,NR6P,16,0
|
||||
5d73e788,NR6D,16,0
|
||||
53b0cc13,NR6E,16,0
|
||||
b4322403,NTTP,16,0
|
||||
1c04ba12,NTTE,16,0
|
||||
39e4f766,NTFP,12,0
|
||||
f5c1b64f,NTFE,12,0
|
||||
6182a092,NTFE,12,0
|
||||
a1207132,NTQP,16,0
|
||||
80aa83f3,NTQE,16,0
|
||||
bae57ea7,NGBP,16,0
|
||||
09b2cda1,NGBJ,16,0
|
||||
6eebc26a,NGBE,16,0
|
||||
0cc70580,NRCP,12,5
|
||||
81aafc2b,NRCJ,12,5
|
||||
f3e0ff21,NRCE,12,5
|
||||
40b3bb21,NTRP,08,0
|
||||
c6707cd6,NTRJ,08,0
|
||||
137287f5,NGRE,08,0
|
||||
cb294d39,NL2P,12,0
|
||||
aa136e07,NL2J,12,0
|
||||
914cf9c4,NL2E,12,0
|
||||
59574cb9,NTHP,12,0
|
||||
fb4bea9a,NTHF,12,0
|
||||
c5e4c89f,NTHD,12,0
|
||||
b9570841,NTHE,12,0
|
||||
338f1d45,NTBJ,12,5
|
||||
85138b5a,NOHE,16,5
|
||||
785dd0f8,N3PE,16,0
|
||||
ca2e5e49,NGUJ,32,5
|
||||
e8525687,NTUP,08,0
|
||||
c2353283,NTUP,08,0
|
||||
312af877,NTUP,08,0
|
||||
64631ff9,NTUD,08,0
|
||||
26c4f597,NTUE,08,0
|
||||
7f2476f4,NTUE,08,0
|
||||
8c3bbc00,NTUE,08,0
|
||||
b937874f,NRWD,08,0
|
||||
82b1e116,NRWP,08,0
|
||||
422872a2,NRWE,08,0
|
||||
4e29b234,NTYP,12,0
|
||||
1febde32,NT2X,32,0
|
||||
e2d34bfe,NT2P,32,0
|
||||
c07877b6,NT2D,32,0
|
||||
8d5b9bd0,NTYE,12,0
|
||||
ff5e7636,NT2E,32,0
|
||||
98d3114c,NTKP,32,0
|
||||
cb297224,NTKE,32,0
|
||||
bf0c1291,NSBP,12,0
|
||||
bfbcc038,NSBE,12,0
|
||||
50cbe8a6,NIRJ,08,0
|
||||
0735d7a2,NVLP,12,5
|
||||
02475a01,NVYJ,08,5
|
||||
4803075e,NVLE,08,5
|
||||
0e9bb6d6,NV8P,08,0
|
||||
11d23ab3,NV8F,08,0
|
||||
17f63c3f,NV8D,08,0
|
||||
330b73e6,NV8E,08,0
|
||||
691aa971,NVGP,12,0
|
||||
0293203f,NVGE,12,0
|
||||
097f139f,NT2J,32,0
|
||||
aae15243,NVCP,04,0
|
||||
620de0b7,NVCE,04,0
|
||||
9a6fb0bc,NVRP,04,0
|
||||
ad628ded,NVRE,04,0
|
||||
f620835d,NA2J,32,1
|
||||
e6651803,NVPJ,16,1
|
||||
6858759a,NWLP,16,5
|
||||
6cb097b3,NWLP,16,5
|
||||
ccab08d7,NWLE,16,5
|
||||
c65ee122,NWLE,16,5
|
||||
c73010c8,NWAP,12,0
|
||||
ffacf993,NWAE,12,0
|
||||
fb289893,NWRP,08,5
|
||||
6c93ff83,NWRJ,08,5
|
||||
74a7b725,NWRE,08,5
|
||||
394948c4,NWRE,08,5
|
||||
90044c4b,NWRJ,08,5
|
||||
6f6dc53d,NW8P,08,0
|
||||
355fb089,NW8E,08,0
|
||||
442a4f5f,NWGP,08,0
|
||||
485275ed,NWGJ,08,0
|
||||
9781f88d,NWGE,08,0
|
||||
c2678971,NWGE,08,0
|
||||
5dcc2e4e,NWVE,32,0
|
||||
864e066e,NWMP,16,0
|
||||
f1f9b6eb,NWME,16,0
|
||||
455b0830,NW3E,12,0
|
||||
37f358eb,NWNP,12,0
|
||||
dfbfc61f,NWNE,12,0
|
||||
a74da07a,NWNE,12,0
|
||||
8af0f964,NW2P,16,1
|
||||
54cbaaa8,NW2E,16,1
|
||||
eddc5b06,NWTP,08,0
|
||||
bad08218,NWTJ,04,0
|
||||
50cd1f71,NWTE,08,0
|
||||
8d3efa8d,NWFE,04,0
|
||||
d6136dc5,NWCJ,08,5
|
||||
d35360b0,NWDJ,16,0
|
||||
64c817c5,NWDE,16,0
|
||||
38111048,NWPP,08,0
|
||||
4888d0fe,NWPE,08,0
|
||||
5e8fc436,NJ2J,08,0
|
||||
79f483f7,N8WP,12,0
|
||||
13930c26,N8WE,12,0
|
||||
76151df6,NWOP,16,0
|
||||
5e4acbfa,NWOE,16,0
|
||||
6bfff27b,NWUP,12,5
|
||||
5471ae3b,NADE,12,5
|
||||
90a0b609,NWWP,12,0
|
||||
2fbb5507,NWWE,12,0
|
||||
804fe494,NTIP,32,0
|
||||
ea5d8359,NTID,32,0
|
||||
7a4b3686,NTIE,32,0
|
||||
b79bddd8,NW4P,32,4
|
||||
43ba9e7e,NW4P,32,4
|
||||
b33f44f0,NW4E,32,4
|
||||
baceea13,NW4E,32,4
|
||||
09d710c7,NWXP,32,1
|
||||
c2034d24,NWXJ,32,1
|
||||
0b50b4c6,NWXE,32,1
|
||||
d3932f88,NXFP,12,0
|
||||
7da93999,NXFE,12,0
|
||||
4538c41a,NYKJ,32,0
|
||||
4f44a9ef,NYSJ,16,6
|
||||
f9ffc760,NYSP,16,6
|
||||
a1453e0d,NYSE,16,6
|
||||
b69d3068,NTMJ,08,5
|
||||
b9bf76df,NZSJ,32,4
|
||||
0d33e1db,NZSJ,32,4
|
||||
356c2e19,NZSJ,32,4
|
||||
d423e8b0,CZLJ,32,1
|
||||
26e73887,CZLJ,32,1
|
||||
2b2721ba,CZLJ,32,1
|
||||
8c5b90c1,CZLJ,32,1
|
||||
1c6ce8cb,CZLJ,32,1
|
||||
122ff261,CZLJ,32,1
|
||||
756ba26d,NMZJ,12,0
|
2
sd/snes.txt
Normal file
2
sd/snes.txt
Normal file
@ -0,0 +1,2 @@
|
||||
A172,24,48
|
||||
B094,48,96
|
Loading…
Reference in New Issue
Block a user