Reply by Mike Harrison April 21, 20092009-04-21
On Tue, 21 Apr 2009 09:22:14 -0700 (PDT), Darcio Prestes <darcioprestes@gmail.com> wrote:

>On Apr 20, 6:20&#4294967295;am, Mike Harrison <m...@whitewing.co.uk> wrote: >> On Sun, 19 Apr 2009 22:33:00 +0200, Frank Buss <f...@frank-buss.de> wrote: >> >Darcio Prestes wrote: >> >> >> Hey programmable logic seniors! I'm planning to build an Atari VCS >> >> 2600 game cartridge in order to play with my "brand new" console >> >> acquired from ebay. I would like to replace the old fashioned 27C >> >> series EPROM by a programmable device thus cutting board space and >> >> (main reason) merging the bankswitching logic and rom file in a single >> >> device. My requirements are 32k x 8 (64k is a plus) of non volatile >> >> memory and some space to house a couple of FFs and logic gates (simple >> >> equations). My question is: which manufacturer, family and/or device >> >> should I look for? Thanks for sharing your valuable experience with my >> >> hobby project. >> >> >Wikipedia says that the VCS 2600 has a 6507 with 1.19 MHz. So if the bus is >> >not faster, the easiest solution would be just a microcontroller with >> >sufficient flash storage, like the STM32 series or the LPC21xx series. >> >Should be fast enough in a small assembler loop to decode an address >> >requests, read the flash location and change the data pins to output. >> >> With ARM MCUs with fast IO like the NXP LPC series, you can use FIQs on the chip select to give very >> fast response to external signals - I've read data from an image sensor at 4MHz like this in the >> past. >> The only problem is that to get enough on-chip RAM you end up paying for a lot of flash you don't >> need - and external SRAM usually works out cheaper. >> >> However a CPLD plus SRAM may end up being the cheapest overall solution. > >To Frank: >It's true. A fast enough uC can do the job of handling bankswitching >of games that don't use extra hardware like extra RAM. "Weird" >cartridge emulation has yet to be tested but in theory it's feasible. >We just need speed. To given RC reset constant we have ~50 ms to set >the uC up and running. Yes, it should be enough time. > >To Nico: >The 6507 processor used in VCS2600 can address up to 8 kb. The ROM >(games) is mapped into the higher 4 kb and console's internal RAM and >peripherals are at lower 4 kb. This is controled by A12 address pin. >The cartridge just house the ROM chip. All control and timming is done >by the console itself. >The LPC family is fine because the address bus can be applied direct >to its pins due the 5V tolerance. Level translators would be used only >in data bus. In this case we can use the device suggested by Yann. > >To Gregory: >What we need to consider is the 6507 processor read timming. The >datasheet in my hands was scanned in low-res and thus hard to read it. >As far as I can interpret it, we have ~600 ns to put data on bus after >an address change and keep it valid for ~100 ns.
That should be just about doable on the LPC ARM - the fast IO modes on the NXP parts can make a big difference, but would carefully crafted assembler FIQ code ( running in RAM for max speed) , and make good use of dedicated FIQ register bank to minimise context switch. Fortunately ARM is a very good target for writing assembler, and you can often do a lot in one instruction.
>To Mike: >If we decide to use a uC, I would go for a LPC2142 (ARM7 - 64 kb FLASH >- 16 kb RAM - 60 MHz). At digikey we get micro_controller + >level_translator + voltage_regulator for ~$ 10.00 USD.
LPC213x is slightly cheaper - only difference is it doesn't have USB. LPC series is 5V tolerant so may not need level translation. If the input side of the VCS uses TTL levels, then you can probably get away with driving with 3.3v. CMOS is marginal.
>Can we get a cheaper CPLD solution?
Probably in chip-count terms, if you can keep it under 72 macrocells the xilinx xc9572 is very cheap - above this things get more expensive. However a MCU will give a lot more flexibility, and doesn't need any special hardware to program - LPCs can be programmed via the UART with the on-chip bootloader. .
Reply by Darcio Prestes April 21, 20092009-04-21
On Apr 20, 6:20=A0am, Mike Harrison <m...@whitewing.co.uk> wrote:
> On Sun, 19 Apr 2009 22:33:00 +0200, Frank Buss <f...@frank-buss.de> wrote=
:
> >Darcio Prestes wrote: > > >> Hey programmable logic seniors! I'm planning to build an Atari VCS > >> 2600 game cartridge in order to play with my "brand new" console > >> acquired from ebay. I would like to replace the old fashioned 27C > >> series EPROM by a programmable device thus cutting board space and > >> (main reason) merging the bankswitching logic and rom file in a single > >> device. My requirements are 32k x 8 (64k is a plus) of non volatile > >> memory and some space to house a couple of FFs and logic gates (simple > >> equations). My question is: which manufacturer, family and/or device > >> should I look for? Thanks for sharing your valuable experience with my > >> hobby project. > > >Wikipedia says that the VCS 2600 has a 6507 with 1.19 MHz. So if the bus=
is
> >not faster, the easiest solution would be just a microcontroller with > >sufficient flash storage, like the STM32 series or the LPC21xx series. > >Should be fast enough in a small assembler loop to decode an address > >requests, read the flash location and change the data pins to output. > > With ARM MCUs with fast IO like the NXP LPC series, you can use FIQs on t=
he chip select to give very
> fast response to external signals - I've read data from an image sensor a=
t 4MHz like this in the
> past. > The only problem is that to get enough on-chip RAM you end up paying for =
a lot of flash you don't
> need - and external SRAM usually works out cheaper. > > However a CPLD plus SRAM may end up being the cheapest overall solution.
To Frank: It's true. A fast enough uC can do the job of handling bankswitching of games that don't use extra hardware like extra RAM. "Weird" cartridge emulation has yet to be tested but in theory it's feasible. We just need speed. To given RC reset constant we have ~50 ms to set the uC up and running. Yes, it should be enough time. To Nico: The 6507 processor used in VCS2600 can address up to 8 kb. The ROM (games) is mapped into the higher 4 kb and console's internal RAM and peripherals are at lower 4 kb. This is controled by A12 address pin. The cartridge just house the ROM chip. All control and timming is done by the console itself. The LPC family is fine because the address bus can be applied direct to its pins due the 5V tolerance. Level translators would be used only in data bus. In this case we can use the device suggested by Yann. To Gregory: What we need to consider is the 6507 processor read timming. The datasheet in my hands was scanned in low-res and thus hard to read it. As far as I can interpret it, we have ~600 ns to put data on bus after an address change and keep it valid for ~100 ns. To Mike: If we decide to use a uC, I would go for a LPC2142 (ARM7 - 64 kb FLASH - 16 kb RAM - 60 MHz). At digikey we get micro_controller + level_translator + voltage_regulator for ~$ 10.00 USD. Can we get a cheaper CPLD solution?
Reply by Mike Harrison April 20, 20092009-04-20
On Sun, 19 Apr 2009 22:33:00 +0200, Frank Buss <fb@frank-buss.de> wrote:

>Darcio Prestes wrote: > >> Hey programmable logic seniors! I'm planning to build an Atari VCS >> 2600 game cartridge in order to play with my "brand new" console >> acquired from ebay. I would like to replace the old fashioned 27C >> series EPROM by a programmable device thus cutting board space and >> (main reason) merging the bankswitching logic and rom file in a single >> device. My requirements are 32k x 8 (64k is a plus) of non volatile >> memory and some space to house a couple of FFs and logic gates (simple >> equations). My question is: which manufacturer, family and/or device >> should I look for? Thanks for sharing your valuable experience with my >> hobby project. > >Wikipedia says that the VCS 2600 has a 6507 with 1.19 MHz. So if the bus is >not faster, the easiest solution would be just a microcontroller with >sufficient flash storage, like the STM32 series or the LPC21xx series. >Should be fast enough in a small assembler loop to decode an address >requests, read the flash location and change the data pins to output.
With ARM MCUs with fast IO like the NXP LPC series, you can use FIQs on the chip select to give very fast response to external signals - I've read data from an image sensor at 4MHz like this in the past. The only problem is that to get enough on-chip RAM you end up paying for a lot of flash you don't need - and external SRAM usually works out cheaper. However a CPLD plus SRAM may end up being the cheapest overall solution.
Reply by Frank Buss April 20, 20092009-04-20
Gregory Estrade wrote:

> IMO, there are some issues that prevent from doing that : > - Some cartridges have werid bankswitching schemes, some others > contain additional RAM, so even at 50Mhz or so, your assembler loop > may not fit in a VCS clock cycle. And for the LPC2xxx series, even the > ones with "fast I/O" can't switch over 15-16Mhz, IIRC.
You are right, this could be interesting. The bankswitching I've found doesn't look complicated: http://www.scribd.com/doc/5439358 It is just a read from a magic address to switch banks. Simulating 256 bytes RAM works by providing write access from 0x1000 to 0x10ff and read access for the same memory by accessing 0x1100 to 0x11ff. But the E7 method might be a bit more complicated. So I think the standard catridge with a 4k eprom simulation should be no problem. If there are problems with the 3.3V output of the microcontroller (might be not enough voltage for the data out), you'll need additional level translation chips. A PIC might be better, e.g. the PIC18F2420, which works with 5V power supply and up to 40MHz. But you have to carefully read the timing diagrams of the Atari system and the PIC and check if it is possible to implement the more complex bank switching concepts. Each port write and read of the PIC needs already 8 clocks, so might be too slow.
> - VCS2600 has not reset switch (the reset switch on the front panel > doesn't perform a reset of the machine), and the power-on reset delay > is very small. Your MCU might not have the time to perform its own > initialization code. Well, in this case you could still use a separate > power supply.
At least the schematic for the Junior version shows a reset circuit with a 12k resistor loading a 4u7 elco: http://www.atariage.com/2600/archives/schematics_pal/Schematic_2600_Junior_PAL.html The original schematic looks a bit strange, because I don't see any plus supply to the reset pin: http://www.atariage.com/2600/archives/schematics_pal/Schematic_2600_Console_PAL.html But I guess this was just missing from the schematic, and it was something like 1k for loading the 4u7, which should give a lot of time to start a microcontroller from the same power supply. So a FPGA with serial configuration might be too slow, but you could buffer it with an elco and just power cycle the Atari twice, or changing the reset circuit inside the Atari system. -- Frank Buss, fb@frank-buss.de http://www.frank-buss.de, http://www.it4-systems.de
Reply by Gregory Estrade April 20, 20092009-04-20
On 19 avr, 22:33, Frank Buss <f...@frank-buss.de> wrote:
> Darcio Prestes wrote: > > Hey programmable logic seniors! I'm planning to build an Atari VCS > > 2600 game cartridge in order to play with my "brand new" console > > acquired from ebay. I would like to replace the old fashioned 27C > > series EPROM by a programmable device thus cutting board space and > > (main reason) merging the bankswitching logic and rom file in a single > > device. My requirements are 32k x 8 (64k is a plus) of non volatile > > memory and some space to house a couple of FFs and logic gates (simple > > equations). My question is: which manufacturer, family and/or device > > should I look for? Thanks for sharing your valuable experience with my > > hobby project. > > Wikipedia says that the VCS 2600 has a 6507 with 1.19 MHz. So if the bus is > not faster, the easiest solution would be just a microcontroller with > sufficient flash storage, like the STM32 series or the LPC21xx series. > Should be fast enough in a small assembler loop to decode an address > requests, read the flash location and change the data pins to output. > > -- > Frank Buss, f...@frank-buss.dehttp://www.frank-buss.de,http://www.it4-systems.de
IMO, there are some issues that prevent from doing that : - Some cartridges have werid bankswitching schemes, some others contain additional RAM, so even at 50Mhz or so, your assembler loop may not fit in a VCS clock cycle. And for the LPC2xxx series, even the ones with "fast I/O" can't switch over 15-16Mhz, IIRC. - VCS2600 has not reset switch (the reset switch on the front panel doesn't perform a reset of the machine), and the power-on reset delay is very small. Your MCU might not have the time to perform its own initialization code. Well, in this case you could still use a separate power supply.
Reply by Nico Coesel April 19, 20092009-04-19
Frank Buss <fb@frank-buss.de> wrote:

>Darcio Prestes wrote: > >> Hey programmable logic seniors! I'm planning to build an Atari VCS >> 2600 game cartridge in order to play with my "brand new" console >> acquired from ebay. I would like to replace the old fashioned 27C >> series EPROM by a programmable device thus cutting board space and >> (main reason) merging the bankswitching logic and rom file in a single >> device. My requirements are 32k x 8 (64k is a plus) of non volatile >> memory and some space to house a couple of FFs and logic gates (simple >> equations). My question is: which manufacturer, family and/or device >> should I look for? Thanks for sharing your valuable experience with my >> hobby project. > >Wikipedia says that the VCS 2600 has a 6507 with 1.19 MHz. So if the bus is >not faster, the easiest solution would be just a microcontroller with >sufficient flash storage, like the STM32 series or the LPC21xx series. >Should be fast enough in a small assembler loop to decode an address >requests, read the flash location and change the data pins to output.
I think that will actually work. IIRC the old Motorola controllers use an extra E signal to distingiush between the address selection and data cycle. But you'll need the LPC2000 series with fast I/O and they are fully 5V tolerant. The ST peripherals are crap. -- Failure does not prove something is impossible, failure simply indicates you are not using the right tools... "If it doesn't fit, use a bigger hammer!" --------------------------------------------------------------
Reply by Frank Buss April 19, 20092009-04-19
Darcio Prestes wrote:

> Hey programmable logic seniors! I'm planning to build an Atari VCS > 2600 game cartridge in order to play with my "brand new" console > acquired from ebay. I would like to replace the old fashioned 27C > series EPROM by a programmable device thus cutting board space and > (main reason) merging the bankswitching logic and rom file in a single > device. My requirements are 32k x 8 (64k is a plus) of non volatile > memory and some space to house a couple of FFs and logic gates (simple > equations). My question is: which manufacturer, family and/or device > should I look for? Thanks for sharing your valuable experience with my > hobby project.
Wikipedia says that the VCS 2600 has a 6507 with 1.19 MHz. So if the bus is not faster, the easiest solution would be just a microcontroller with sufficient flash storage, like the STM32 series or the LPC21xx series. Should be fast enough in a small assembler loop to decode an address requests, read the flash location and change the data pins to output. -- Frank Buss, fb@frank-buss.de http://www.frank-buss.de, http://www.it4-systems.de
Reply by Darcio Prestes April 19, 20092009-04-19
On 19 abr, 15:39, whygee <why...@yg.yg> wrote:
> Antti.Luk...@googlemail.com wrote: > > The ONLY part that satisfies ALL requirements is: ice65L16 from SiliconBlue > > A SBt employee told me that it is not available very soon (end of year ?). > On top of that, is it 5V-tolerant on enough pins ? > > > Antti > > yg > --http://ygdes.com/http://yasep.org
YG brought an important question. The data bus is 8 bit wide and address bus is 12 bit wide. I want to add 4 switches so the count is 24 pins or higher.
Reply by whygee April 19, 20092009-04-19
whygee wrote:
> I think that the ice65L16 is going to take too much time to appear on > the market and mature, for such a "little project".
However, when it becomes ready, and if a suitable package (like QFP100, not BGA or QFN) is available, this would be perfect : one could store 4 different games without effort, because the chip can read 4 off-chip images (including SRAM contents) depending on the state of 2 inputs pins. But how much will it cost ? yg -- http://ygdes.com / http://yasep.org
Reply by Darcio Prestes April 19, 20092009-04-19
On 19 abr, 15:39, whygee <why...@yg.yg> wrote:
> Antti.Luk...@googlemail.com wrote: > > The ONLY part that satisfies ALL requirements is: ice65L16 from SiliconBlue > > A SBt employee told me that it is not available very soon (end of year ?). > On top of that, is it 5V-tolerant on enough pins ? > > > Antti > > yg > --http://ygdes.com/http://yasep.org
YG brought an important question. Data bus is 8 bit wide and address bus is 12 bit wide. I want to add 4 switches so the count is 24 pins or higher.