Monday, October 2, 2017

Dragon's Lair Initiated

Honestly it was initiated a long time ago - I have been building the tools for this project literally for decades, and got the license six months ago (that's a badness on my part too, but it's not too late yet!)

I posted the proof of concept on YouTube back in May 2015:

I didn't have a lot of free time to work on it since then, but since the software was proven feasible (and all the video encoded and spliced out), I worked loosely on getting the license. I finally got ahold of someone at ReadySoft who okayed me and paid for that, giving me a year to get the thing done and out there.

Of course, in typical me fashion, I worked on other things. Sigh.

But this is now top priority with six months to go, and the last unknown is the hardware.

I actually thought I had this more or less nailed down... I found some nice 128MB flash chips in China, and they're still available. With that, some voltage conversion, and a dumb and simple banking scheme, I should have enough memory to store the 16 thousand 8k banks that I'll need. And this is still true! But the bummer with this scheme is that I've never really known how I was going to program the damn chips.

As I sat down and started sketching out the board, I began considering alternatives again, and I found myself wondering "why not compact flash?" It's 5v compatible, comes in huge sizes for low-ish cost (better than the flash chips anyway), and is easy to program.

I spent some time studying the datasheets and couldn't see a why not. The worst case minimum cycle type at the slowest speed is 600ns. The TI memory cycle is 667ns. So why not? I embarked to find out.

There are a few why nots... one is that the card automatically goes to sleep, and is rated to take 20ms to wake up for a read. That's a pretty long time, and my video playback needs the fastest cycle time possible. But if I can wake it up for a scene and keep it awake until the scene ends, then that should be okay. I can read multiple sectors in one command. Feasible!

Of course, then I needed to check sector size versus data size. My video frames, which interleave audio, are 7686 bytes in size. Can you see what's coming? That doesn't line up nicely with 512 byte sectors. In fact, it's 6 bytes over the size of 15 sectors. That's pretty annoying. I haven't done this yet, but I'm going to try and hide those six missing bytes by duplicating bytes in the color table. ;)

I then got obsessed with using memory mode, and not IDE mode. I bought some CF to IDE adapters and worked out how to mod them not to come up in IDE mode. I then tried to map it all down to a RAM chip on the mini-memory cartridge, and mapped it into that space.

My first attempt came up but didn't return anything... I realized that I'd attached to the RAM chip's (disconnected) CS. I fixed that, and the console won't even start up with it inserted. Well, that figures.

At this point, troubleshooting with the MiniMemory in the way feels very complicated... so I'm going to just lay out a PCB with an uberGROM (so I can still use EasyBug) and let the CF interface have the entire ROM space - that will give me a lot of flexibility in how I talk to it. It will also let me add the circuitry so that it responds only to even addresses, so that I don't need to worry about whether double accesses break it (something I couldn't guarantee with MiniMemory). Downside, it will cost me time, maybe a lot, to get the PCBs made. Chicago's in two weeks? Yeah, that's not going to work.

I didn't need to present anyway. ;) I guess I can announce it and show a mockup on the PC. Nobody really did much with it at FestWest.

No comments:

Post a Comment