snes audio processing unit interface

Post here about your arduino projects, get help & ideas, etc!

Moderators: arduwino, adafruit

snes audio processing unit interface

Postby caitsith2 » Thu Feb 21, 2008 8:02 pm

Decided to tackle interfacing an snes apu to my PC via an arduino interface. I have had prior experience with the snes apu.

Image

This is definitlely leading towards an arduino shield formfactor PCB.

Board
Image

Schematic
Image

--- EDIT - Detail what some parts are about ---

The Parallel port connector and 4071 OR gate chip are not sepcifically required, unless it is being built as a parallel port interface, rather than an arduiono interface. The parallel port interface is my prior experience with this interfacing, and I decided to include it, as an option.

The project is working nicely, at 57600 bps serial speed. (Takes 12 seconds to load an SNES audio track.)
caitsith2
 
Posts: 195
Joined: Thu Jan 18, 2007 10:21 pm

Postby adafruit » Thu Feb 21, 2008 8:41 pm

looks like fun!
User avatar
adafruit
 
Posts: 3606
Joined: Thu Apr 06, 2006 3:21 pm
Location: nyc

Postby caitsith2 » Thu Feb 21, 2008 8:55 pm

Very much so, although debugging why an audio track wouldn't upload, is not so much fun, as actually listening to the tracks that do upload.

The limits of the SNES audio processing unit, is 64KB of ram, all of which, has to store the music playback code, the music sequence data, and the sound samples for that music. This available space for code/data/samples is reduced, if you desire echo effects, as that consumes memory for processing them.

The upload protocol and communication with the hardware is done over 4 IO ports. One of the things that is noted, is that what you write to the ports, will NOT be on that port when you read it back, unless the code running on the device puts it there.
caitsith2
 
Posts: 195
Joined: Thu Jan 18, 2007 10:21 pm

Postby caitsith2 » Fri Feb 22, 2008 7:47 pm

Part List and other details. Program and source code to come.

Code: Select all
Qty.   Cost   Total   Digikey Part #      Description
1   0.66   0.66   CP-1401-ND      White RCA jack
1   0.66   0.66   CP-1402-ND      Red RCA jack
2   0.41   0.82   CP1-3533N-ND      Stereo Headphone/Lineout jack
1   1.29   1.29   S1012E-36-ND      36 Pos Connection Header
4   0.192   1.92   B4C1151CT-ND      1uF ceramic capacitor (minimum order quantity is 10, price adjusted for that.)
2   0.058   0.29   51QBK-ND      51 Ohm resistor (could have also used 47 Ohm as well, minimum order is 5)
1   0.37   0.37   P11198-ND      100uF electrolytic cap.
3   0.084   0.84   P10KBACT      10KOhm resistor (minimum order is 10)
1   0.071   0.71   BC1160CT-ND      0.1uF Ceramic Cap (minimum order is 10)


If doing interface by parallel port, you will need the following components.
1   0.41   0.41   CP-002A-ND      2.1mm Power jack
1   5.72   5.72   609-2814-ND      Parallel port connector
1   0.49   0.49   296-2062-5-ND      2-In Or Gate Quad.


If doing interface by Arduino NG/Diecimila
1   0.22   0.22   SW400-ND      Push button switch for Arduino Reset
1   0.38   0.38   S7036-ND      3 Position female header. (Required only for Arduino NG boards.)

If doing both interfaces, or needing to disable APU reset on the interface being done.
1   0.094   0.94   S9001-ND      Jumper/Shunt. (minimum order is 10)

Optional, proto-typing purposes only, (although they do help support the APU.)
2   0.66   1.32   S4108-ND      8 Position female header.
2   0.57   1.14   S7039-ND      6 Position female header

Cannot be obtained from digikey (afaik)
1   (Whatever a first gen SNES costs)   Audio Processing Unit module.
1   (As above)            Audio Processing Unit 24 position male connector.
1                  4.5mm Game bit/Linehead nut setter, to take said system apart.



The audio processing unit has to be a removable component, which is only the case in first generation units.
There has been more than one generation of the old style SNES form factor. THe first one has the removable module,
the second generation has all of the APU components soldered directly to the SNES main board. Then, there was
one more generation, where all of the APU components were put into a single chip.

The 36 Position male header was ordered to save on cost. Break it down into 2 8 Positions, 2 6 Positions and 1 3 Position. This will leave 1 5 position as a left-over.
caitsith2
 
Posts: 195
Joined: Thu Jan 18, 2007 10:21 pm

Postby caitsith2 » Wed Mar 19, 2008 3:38 pm

Got my PCBs from futurlec. Ordered 2 of them. Got back 4. (That definitely makes me more likely to order more PCBs through futurlec.)

EDIT: Built the first unit, arduino interface only, and hit some minor design issues worthy of a revision 1.02. Other than those issues, the design is otherwise working perfectly.

Pictures of the assembled unit, and the remaining 3 unpopulated boards at http://www.caitsith2.net/projects/snesapu/
caitsith2
 
Posts: 195
Joined: Thu Jan 18, 2007 10:21 pm

Postby bleything » Thu Mar 20, 2008 12:04 pm

SO. AWESOME. I've been wanting to build a little device to interface with the APU, but I have no experience with it. This will pretty much get me exactly what I wanted!

Are you interested in selling your spare boards? Or selling a kit once the design is worked out? I would totally be in.

EDIT: also, any ideas on how to identify a first-gen SNES without cracking it open? I have one SNES that I want to keep intact for gaming, but I'd happily buy another to harvest parts.
bleything
 
Posts: 2
Joined: Thu Mar 20, 2008 11:55 am

Postby caitsith2 » Thu Mar 20, 2008 3:38 pm

bleything wrote:Are you interested in selling your spare boards? Or selling a kit once the design is worked out? I would totally be in.


Selling kits once the design is worked out, is an option. As for the spare boards, I may sell off two of them, but one would have to be aware that some modifications to the APU shielding are required, and extra assembly steps are involved, if being built for use with an arduino. Revision 1.02 won't be subject to those issues. (This was why I only ordered 2 PCBs to begin with, just in case there were design issues.)

bleything wrote:EDIT: also, any ideas on how to identify a first-gen SNES without cracking it open? I have one SNES that I want to keep intact for gaming, but I'd happily buy another to harvest parts.


This is something I will have to work out. I know of a method, that I have to prove works for the systems. It works for the game carts, in identifying its revision. (Game carts stamped with A on the back are 1.0, B = 1.1, C = 1.2, or something like that. Hopefully there is a similar setup, that will allow for identifying the system revision.

Since I do not know of a compatible connector, The one that the APU does connect to, does have to be removed from the original system, for the time being. The only thing I do know about the connector is that the row spacing is 100 mils, and the pin spacing is 79 mils.
caitsith2
 
Posts: 195
Joined: Thu Jan 18, 2007 10:21 pm

Postby bleything » Thu Mar 20, 2008 11:25 pm

caitsith2 wrote:Selling kits once the design is worked out, is an option. As for the spare boards, I may sell off two of them, but one would have to be aware that some modifications to the APU shielding are required, and extra assembly steps are involved, if being built for use with an arduino. Revision 1.02 won't be subject to those issues. (This was why I only ordered 2 PCBs to begin with, just in case there were design issues.)


Cool. I don't mind either thing, so keep me in mind if you decide to sell 'em :)

caitsith2 wrote:This is something I will have to work out. I know of a method, that I have to prove works for the systems. It works for the game carts, in identifying its revision. (Game carts stamped with A on the back are 1.0, B = 1.1, C = 1.2, or something like that. Hopefully there is a similar setup, that will allow for identifying the system revision.


Cool. I'll have to spend some time this weekend looking for my SNES and see what it says.
bleything
 
Posts: 2
Joined: Thu Mar 20, 2008 11:55 am

Postby caitsith2 » Fri Mar 21, 2008 1:38 am

bleything wrote:Cool. I'll have to spend some time this weekend looking for my SNES and see what it says.


The info that is stamped in, is in the sticker that says model #: SNS-001, use only with power adapter SNS-002, or something to that effect.

If you can get your hands on a 4.5mm gamebit (aka linehead), you should be able to open the system, and find out if you have a module present. If you do, then it won't matter if the next SNES system you buy has one, since you only need one of these modules. On the other hand, even if the system doesn't have a module, the stamped in number, may still be useful to me, as I would like to find out how to identify systems without opening them.


(I do have a spare snes deck that definitely has a module in it. Its stamped in number is 9143. I also have two systems taken apart, gotta find the cases and report its number. Both had modules in them, and one can be brought back into working order.)
caitsith2
 
Posts: 195
Joined: Thu Jan 18, 2007 10:21 pm

Postby cooper » Fri Mar 21, 2008 11:25 am

bleything wrote:On the other hand, even if the system doesn't have a module, the stamped in number, may still be useful to me, as I would like to find out how to identify systems without opening them.


First of all awesome job! This project has really inspired me. Just for your reference, I grabbed a snes from my friend to try and build this project up, but no dice on the module. It seems to be the first snes that was released in Germany. Not sure if this info will help you in the future, but hopefully it does :)

Bezeichnung: SNSP-001A(FRG)
Verwenden Sie nur den Netzadapter NES-002E
cooper
 
Posts: 4
Joined: Thu Apr 20, 2006 9:02 pm

Postby caitsith2 » Fri Mar 21, 2008 2:31 pm

cooper wrote:
bleything wrote:On the other hand, even if the system doesn't have a module, the stamped in number, may still be useful to me, as I would like to find out how to identify systems without opening them.


First of all awesome job! This project has really inspired me. Just for your reference, I grabbed a snes from my friend to try and build this project up, but no dice on the module. It seems to be the first snes that was released in Germany. Not sure if this info will help you in the future, but hopefully it does :)

Bezeichnung: SNSP-001A(FRG)
Verwenden Sie nur den Netzadapter NES-002E


Okay, one thing that is defintely different for european region systems, is the power adapter used. The North American region used a 12VDC, pin type adapter, where the European region used the original NES adapter for the power supply.

If anything, definitely report the full snes deck model number, and if you are able to take it apart, whether it has a module or not. If there is a number stamped in the sticker, where the model number is listed, report that too.
caitsith2
 
Posts: 195
Joined: Thu Jan 18, 2007 10:21 pm

Postby xsmurf » Fri Mar 21, 2008 10:58 pm

Ah I had seen raphnet's a long time ago and immediately wanted to try it when I got the arduino. But you've beat me to it. Nice work! :D
xsmurf
 
Posts: 28
Joined: Mon Aug 27, 2007 2:04 pm

Postby caitsith2 » Fri Mar 21, 2008 11:58 pm

As you see from the wired picture, don't repeat that, ever, if you plan on using the original connector again. That wiring spreads the connector pins, and will cause issues later on. I have 2 APU units that will not work nicely with the original connector anymore. One has stopped working nicely, with an audio channel connection, and the other has problems in the data connection. For those 2 units, I am looking to replace the connector with another that I can get easily.

I finally took an opportunity with an analog dial caliper, and measured a few things. The pin spacing on the footprint is definitely 79 mils. I was wrong on the row spacing though, It is also 79 mils as well, instead of the 100 mils I had assumed. (Didn't make a difference in putting it together though, since it is only 2 rows. Had it been 4 rows, then 100 mils would have been a problem.)


EDIT: Missed a detail, Pin size of the connector is 20 mils.

--------------

Here is the Arduino source code for the interface.

Still have to release the main program and source code for it as well.

Code: Select all
//#define DATAMODETEXT 1

#ifdef DATAMODETEXT
int datamode=0;
#endif

/* IO Pin Mapping.
** Digital Pin 0 - RX
** Digital Pin 1 - TX
** Digital Pin 2-7 - SNES APU D2-7
** Digital Pin 8 - SNES APU address 0
** Digital Pin 9 - SNES APU address 1
** Digital Pin 10 - SNES APU /RD
** Digital Pin 11 - SNES APU /WR
** Digital Pin 12-13 - SNES APU D0-1
** Analog Pin 0 (AKA Digital Pin 14) - SNES APU /RESET
** Vcc - SNES APU address 6, SNES APU Vcc, SNES APU audio Vcc
** Gnd - SNES APU Gnd, SNES APU audio Gnd.
*/

unsigned char port0state;

void setup()
{
  PORTB = 0x0F;
  DDRB = 0x0F;
  PORTC = 0x01;
  DDRC = 0x01;
  Serial.begin(57600);
  Serial.println("SPC700 DATA LOADER V1.0");
}


unsigned char readdata(unsigned char address)
{
  unsigned char data;

  DDRB = 0x0F;
  DDRD &= ~0xFC;
  PORTB &= ~0x03;
  PORTB |= (address & 0x03);

  PORTB &= ~0x04;
  __asm__ __volatile__ ("nop");
  __asm__ __volatile__ ("nop");
  data=((PINB&0x30)>>4) | (PIND&0xFC);
  PORTB |= 0x04;
  return data;
}

void writedata(unsigned char address, unsigned char data)
{
  DDRB = 0x3F;
  DDRD |= 0xFC;

  PORTD &= ~0xFC;
  PORTD |= (data & 0xFC);

  PORTB &= ~0x33;
  PORTB |= (address & 0x03);
  PORTB |= ((data & 0x03)<<4);
  PORTB &= ~0x08;
  __asm__ __volatile__ ("nop");
  __asm__ __volatile__ ("nop");
  PORTB |= 0x08;

}

/*
unsigned char program_counter=0xFF;
uint32_t delay_count=0;
unsigned char Script700[64];
unsigned char Script700WorkArea[8];
unsigned char Script700RAM[64];*/

void ProcessScript700()
{
  // --- TODO:  Implement script 700 processing, and script700 uploading procedures.
  // --- Limitations.  Only ~512 bytes of working ram/code space to work with.
  // --- No direct access to the APU ram/registers in any way, shape or form,
  // --- other than IO ports F4-F7.
  /*
  if(program_counter==0xFF)
   return;
   
   if(delay_count)
   {
   if(delay_count>=32)
   {
   delay_count-=32;
   delayMicroseconds(16);
   }
   else
   {
   delayMicroseconds(delay_count>>1);
   delay_count=0;
   }
   return;
   }
   
   switch(Script700[program_counter&0x3F]&0x0F)
   {
   case 0:  //Wait
   delay_count = Script700[program_counter+1];
   delay_count |= Script700[program_counter+2]<<8;
   delay_count |= Script700[program_counter+1] << 16;
   delay_count |= Script700[program_counter+1] << 24;
   program_counter+=5;
   break;
   case 1:  //Move
   break;
   default:
   program_counter=0xFF;
   break;
   }*/

}

unsigned char readserial()
{
  while (Serial.available() == 0)
    ProcessScript700();
  return Serial.read();
}


#ifdef DATAMODETEXT
unsigned char readhex()
{
  unsigned char data[2];
  data[0]=readserial();
  data[1]=readserial();
  if((data[0]>='0')&&(data[0]<='9'))
    data[0]-='0';
  else if ((data[0]>='A')&&(data[0]<='F'))
  {
    data[0]-='A';
    data[0]+=10;
  }
  else if ((data[0]>='a')&&(data[0]<='f'))
  {
    data[0]-='a';
    data[0]+=10;
  }
  else
    data[0]=0;

  if((data[1]>='0')&&(data[1]<='9'))
    data[1]-='0';
  else if ((data[1]>='A')&&(data[1]<='F'))
  {
    data[1]-='A';
    data[1]+=10;
  }
  else if ((data[1]>='a')&&(data[1]<='f'))
  {
    data[1]-='a';
    data[1]+=10;
  }
  else
    data[1]=0;

  return (data[0]<<4)|data[1];
}
#endif

void startapuwrite(uint16_t address, unsigned char *data, int len)
{
  int i;
  digitalWrite(14,LOW);
  delay(1);
  digitalWrite(14,HIGH);

  while(readdata(0)!=0xAA);
  while(readdata(1)!=0xBB);

  writedata(3,address>>8);
  writedata(2,address&0xFF);
  writedata(1,1);
  writedata(0,0xCC);
  while(readdata(0)!=0xCC);
  for(i=0;i<len;i++)
  {
    writedata(1,data[i]);
    writedata(0,i&0xFF);
    while(readdata(0)!=(i&0xFF));
  }
}

/* // --- Implemented for faster emulator linking, on at least the initial code upload.
// The code will be skipped by usual fashion, but data recorded for to do the initial upload.
// Once the data is uploaded, all 8/16 bit read/writes will be passed on to the emulator to control.
// startapuwrite is not commented out, because it is being used for spc file uploading process.
void continueapuwrite(uint16_t address, unsigned char *data, int len)
{
int i;
i=readdata(0);
i+=2;
writedata(3,address>>8);
writedata(2,address&0xFF);
writedata(1,1);
writedata(0,i&0xFF);
while(readdata(0)!=(i&0xFF));
for(i=0;i<len;i++)
{
writedata(1,data[i]);
writedata(0,i&0xFF);
while(readdata(0)!=(i&0xFF));
}
}

void executeapu(uint16_t address)
{
int i;
i=readdata(0);
i+=2;
writedata(3,address>>8);
writedata(2,address&0xFF);
writedata(1,1);
writedata(0,i&0xFF);
//while(readdata(0)!=(i&0xFF)); //Commented just in case executed code clears the i+2 result immediately.
}*/

void APU_Wait(unsigned char address, unsigned char data)
{
  while(readdata(address)!=data);
}

unsigned char DSPdata[16] =
{  //For loading the 128 byte DSP ram. DO NOT CHANGE.
  0xC4, 0xF2, 0x64, 0xF4, 0xD0, 0xFC, 0xFA, 0xF5, 0xF3, 0xC4, 0xF4, 0xBC, 0x10, 0xF2, 0x2F, 0xB7,
}
;


void loop()
{

  uint16_t i;
  long time;
  int checksum;
  unsigned char address, data;
  switch(readserial())
  {
  case 'D':    //Set datamode between ascii and binary.  In ascii mode,  each data byte is transmitted
              //as ascii hexadecimal notation.  In binary mode, the byte transmitted on the serial
              //line is taken literally for what it is.
#ifdef DATAMODETEXT
    datamode=readserial()-'0';
    if(datamode)
      Serial.println("Data mode set to Text");
#else
    readserial();  //Ignore this byte, but keep it here anyways.
#endif
    break;


  case 'Q':  //Read all 4 IO ports in rapid fire succession.
#ifdef DATAMODETEXT
    if(!datamode)
    {
#endif
      data=readdata(0);
      Serial.print(data,BYTE);
      data=readdata(1);
      Serial.print(data,BYTE);
      data=readdata(2);
      Serial.print(data,BYTE);
      data=readdata(3);
      Serial.print(data,BYTE);
#ifdef DATAMODETEXT
    }
    else
    {
      Serial.print("Data on All 4 ports = ");
      data=readdata(0);
      if(data<16)
        Serial.print(0,HEX);
      Serial.print(data,HEX);
      data=readdata(1);
      if(data<16)
        Serial.print(0,HEX);
      Serial.print(data,HEX);
      data=readdata(2);
      if(data<16)
        Serial.print(0,HEX);
      Serial.print(data,HEX);
      data=readdata(3);
      if(data<16)
        Serial.print(0,HEX);
      Serial.println(data,HEX);
    }
#endif
    break;
  case 'R':  //Read a single IO port.  Takes an address as a parameter, returns one byte.
    address=readserial()-'0';
    data=readdata(address);
#ifdef DATAMODETEXT
    if(datamode)
    {
      Serial.print("Data at Address ");
      Serial.print(address,DEC);
      Serial.print(" is ");
      if(data<16)
        Serial.print(0,HEX);
      Serial.println(data,HEX);
    }
    else
#endif
      Serial.print(data,BYTE);
    break;
  case 'r':  //Read and returns 2 consecutive IO ports.
    address=readserial()-'0';
    data=readdata(address+1);
#ifdef DATAMODETEXT
    if(datamode)
    {
      Serial.print("Data at Address ");
      Serial.print(address,DEC);
      Serial.print(" is ");
      if(data<16)
        Serial.print(0,HEX);
      Serial.print(data,HEX);
      data=readdata(address);
      if(data<16)
        Serial.print(0,HEX);
      Serial.println(data,HEX);
    }
    else
    {
#endif
      Serial.print(data,BYTE);
      data=readdata(address);
      Serial.print(data,BYTE);
#ifdef DATAMODETEXT
    }
#endif
    break;
  case 's':  //Reset the Audio Processing Unit
#ifdef DATAMODETEXT
    if(datamode)
      Serial.println("APU Reset");
#endif
    digitalWrite(14,LOW);
    delay(1);
    digitalWrite(14,HIGH);
    break;
  case 'f':  //Set the expected state of PORT 0 for the next write.
    port0state=readserial();
    break;
  case 'F':  //Upload SPC data at serial port speed.
    //Serial.println("START");
    //time=millis();
    for(i=0;i<65280;i++)
    {
      //data=i&0xFF;
      data=readserial();
      writedata(1,data);
      writedata(0,port0state);
      while(readdata(0)!=port0state);
      port0state++;
    }
    //Serial.print(millis()-time,DEC);
    //Serial.println(" milliseconds to upload 64K");
    Serial.print(1,BYTE);

    break;

  case 'G':  //Upload the DSP register, and the first page of SPC data at serial port speed.
    startapuwrite(0x0002,DSPdata,16);
    writedata(2,0x02);
    writedata(3,0x00);
    writedata(1,0x00);
    writedata(0,0x11);
    while(readdata(0)!=0x11);
    port0state=0;
    for(i=0;i<128;i++)
    {
      data=readserial();
      writedata(1,data);
      writedata(0,port0state);
      if(i<127)
        while(readdata(0)!=port0state);
      port0state++;
    }
    while(readdata(0)!=0xAA);
    port0state=0;
    writedata(2,0x02);
    writedata(3,0x00);
    writedata(1,0x01);
    writedata(0,0xCC);
    while(readdata(0)!=0xCC);
    for(i=0;i<256;i++)
    {
      data=readserial();
      if(i<2)
        continue;
      if(i>=0xF0)
        continue;
      writedata(1,data);
      writedata(0,port0state);
      while(readdata(0)!=port0state);
      port0state++;
    }
    Serial.print('F',BYTE);
    break;
  case 'W':  //Write a single IO port.
    address=readserial()-'0';
#ifdef DATAMODETEXT
    if(datamode)
      data=readhex();
    else
#endif
      data=readserial();
    writedata(address,data);
#ifdef DATAMODETEXT
    if(datamode)
    {
      Serial.print("Writing 8bit ");
      if(data<16)
        Serial.print(0,HEX);
      Serial.print(data,HEX);
      Serial.print(" to address ");
      Serial.println(address,DEC);
    }
#endif
    break;
  case 'w':  //Write 2 IO consecutive IO ports.
    address=readserial()-'0';
#ifdef DATAMODETEXT
    if(!datamode)
    {
#endif
      data=readserial();
      writedata(address+1,data);
      data=readserial();
      writedata(address,data);
#ifdef DATAMODETEXT
    }
    else
    {
      data=readhex();
      writedata(address+1,data);
      Serial.print("Writing 16bit ");
      if(data<16)
        Serial.print(0,HEX);
      Serial.print(data,HEX);
      data=readhex();
      writedata(address,data);
      Serial.print(" ");
      if(data<16)
        Serial.print(0,HEX);
      Serial.print(data,HEX);
      Serial.print(" to address ");
      Serial.println(address,DEC);
    }
#endif
    break;

  }
}


--------

I just uncovered an almost show stopper. THe channels were wired in reverse. There is a fix though, for assembly of the 1.01 boards. Reverse the RED and WHITE RCA jacks, and go against what is labeled on board.

And as for the headphone and line out jack, criss-cross the resistors and the capacitors going to those jacks.

EDIT: Combined previous 3 posts into 1 post.
caitsith2
 
Posts: 195
Joined: Thu Jan 18, 2007 10:21 pm

Postby caitsith2 » Mon Mar 24, 2008 8:25 pm

As for the 2 APU connectors I had damaged by the wire in connector prototyping, I did manage to fix both of them. The process was long. THe specifics, was I had to desolder the connector from the APU, pull each pin from the connector, and squeeze the connection thingy together, and put them back into the connector. After that, the connector was resoldered back into the APU, and now, I have 3 fully functional APUs, without needing to get matching 79 mil/row spacing board to board connections.

I am quite likely to sell off 2 of my boards more or less as kits, complete with working APU units and matching connector, and sell off one board without, mainly because I don't have a fourth unit that I can pull a unit/connector from. In any case, both of the working units have been modified for clearance already, and as I said before, R1/R2 need to be criss-crossed, C5/C6 need to be criss-crossed, and the Red RCA needs to be put into the spot marked white and vice-versa. Any 1.02 boards I have made, will not have any of these complexities.
caitsith2
 
Posts: 195
Joined: Thu Jan 18, 2007 10:21 pm

Postby cooper » Tue Mar 25, 2008 3:31 am

caitsith2 wrote:Okay, one thing that is defintely different for european region systems, is the power adapter used. The North American region used a 12VDC, pin type adapter, where the European region used the original NES adapter for the power supply.

If anything, definitely report the full snes deck model number, and if you are able to take it apart, whether it has a module or not. If there is a number stamped in the sticker, where the model number is listed, report that too.

Number on the sticker: UP14109104

I got it open, and no module :(

Thanks again for putting this project together. I'm looking forward to seeing the main program source.
cooper
 
Posts: 4
Joined: Thu Apr 20, 2006 9:02 pm

Next

Return to Arduino

Who is online

Users browsing this forum: MSN [Bot] and 3 guests

Stuff to buy from the Adafruit store and links to product documentation!