Willsy Posted February 18, 2022 Share Posted February 18, 2022 Anyone know if an MCU (preferably something like a Atmel ATmega328, though it could be something like an ARM M0) is man enough to be able to feed data to the cartridge port? I'm interested to know if an MCU can be used as a replacement for an EPROM, as having an intelligent device on the end of the cart port opens up all sorts of possibilities. My use case would be to hang a load of RAM off of the SPI port on an MCU, and be able to read/write that RAM, and execute code on the 9900 from the RAM, via the MCU- so the TI wouldn't know there is anything other than an EPROM on the cart port. Just wondering if anyone has ever tried this? AT Mega family would be nice, as I have all the tools and am comfortable with C++ and Atmel's native C++ functions (i.e. I don't need Arduino-style wrappers/training wheels which are nice, but kill performance). The ATMEGA328 can run up to 20MHZ and return ~16MIPS at that clock speed. Failing that, is there a cart design that supports multiple pages of 8K banks, with, say, 1K of RAM permanently mapped in to the top of the cart space? This could open up lots of possibilities for games that could run on a bare console. 3 Quote Link to comment Share on other sites More sharing options...
apersson850 Posted February 18, 2022 Share Posted February 18, 2022 So what you want to do is to use the MCU as a gateway to the memory, if I understand this correctly? Not having a kind of dual-port RAM, where the TI can read and thus execute code from that RAM, when it wants to, and the MCU can both read and write to the RAM, when it wants to. Quote Link to comment Share on other sites More sharing options...
Willsy Posted February 18, 2022 Author Share Posted February 18, 2022 Kind of yes. But the TI must be able to run programs as normal from the cartridge. That means the MCU has to decode the various lines on the cart port and arbitrate them appropriately. It's literally behaving like an EPROM as far as the TI is concerned. Although I'd be happy with a 64k or 128k cart (split into 8K pages) with 1K of ram permanently mapped in (so only 7K of ROM available per page). In this case, it would just be discrete components. A ROM, RAM, and some decoding logic? This would be great for standalone (no 32K/PEB/memory expansion) games or even utilities. Quote Link to comment Share on other sites More sharing options...
+jedimatt42 Posted February 18, 2022 Share Posted February 18, 2022 Checkout @speccery's StangeCart. I believe it is an example, from a hardware perspective. 5 Quote Link to comment Share on other sites More sharing options...
Tursi Posted February 18, 2022 Share Posted February 18, 2022 The UberGROM is an Atmega running on the cartridge port. However, an ATMega at 20MHz is not fast enough to provide the ROM side in real time. You have to present your data to the bus within about 300ns of the enable line going low, which is tricky for this series of MCU. It's been a long time since I looked at the feasibility so I doubt I have the numbers anymore. 4 Quote Link to comment Share on other sites More sharing options...
ralphb Posted February 19, 2022 Share Posted February 19, 2022 The FlashROM is exactly what you're looking for. It uses an ATmega 8515 (because of its many pins) and runs at 8 MHz (IIRC). There's also a SRAM chip and some standard logic chips for bank switching and signal control as well as a SD card slot. Or are you asking for a bare MCU solution? It's possible to get rid of the three signal controllers and the SRAM if the MCU is serving the bus directly (instead of the SRAM), but then you'd need more pins than are currently available AFAIK. Quote Link to comment Share on other sites More sharing options...
speccery Posted February 19, 2022 Share Posted February 19, 2022 In the StrangeCart project I am doing exactly this, i.e. emulating ROM, GROM, RAM simultaneously using a MCU. I use the LPC54114 MCU, which I run at either 96MHz or 150MHz. This is a 64 pin chip, so it has enough I/O pins to connect to pretty much every signal delivered via the cartridge port. The reason I chose the LPC54114 was that it's IO pins are 5V tolerant, it's pretty fast and is a dual core chip. With my software one core is serving the TMS9900 bus, while the other can do other things (such as run my Basic interpreter). You could do something also with an AVR chip such as ATMega 1280, which has up to 86 I/O pins in 100 pin package. However, I am not sure that it runs fast enough for this purpose. Also, depending on how much memory you need, it may not have enough. The LPC54114 has 192K on chip RAM, while the ATMega1280 has only 8K. 6 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.