AndrewP wrote:
Throwing out a couple of thoughts:
As you're using an 8bit data bus I'd imagine the fastest way to communicate with an LCD would be via that 8bit bus. I know I've seen LCD displays that use a parallel interface but it's not something I've ever looked into so they might be quite expensive or just not match the 816's architecture nicely.
I bring up speed because even 320x240x16bpp @ 60fps is lot of data for an '816 to handle unassisted.
Let's say you're running 14MHz at 320x200x8bpp. The '816 - using block move instructions - will just barely be able to draw an entire frame 30 times a second. Crossing to more than 320x200 (say 320x240x8) means that the video memory is going to be split over two banks. And that's adding more complicated calculations to a CPU that's already only barely keeping up.
All is not lost though. The 816's block move instruction takes 7 cycles per 8bit pixel whereas if you use a dedicated hardware blitter you could get that down to 2 (or even 1) cycles per pixel. You can also use a colour palette if you want to keep 16bit or even 24bit colour but also still keep a pixel width of only 8bits.
For a preliminary build I'd suggest 320x200x8 is a really good starting point.
Ardis wrote:
Makes the full 24-bit address bus of the 65C816 available to software developers (currently using the de-multiplex setup suggested in the 65C816 datasheet, but it might not be suitable for higher CPU speeds)
I wouldn't worry about the time it takes to capture the 816's bank address. Plenty of logic families have latches that have sub 10ns propagation times. I use LVC in a 3.3V setup but you could use AC or similar if you're running with a 5V setup. Probably AHC is what you're looking for if HC seems too slow.
Personally I fully intend to take Plasmo's 40MHz crown with an 50MHz '816 with the complete 24bit bus available. But that's just smack talk for now as I keep running into problems :lol:
Regarding the CPU usage for drawing to the LCD, I don't intend for the '816 to draw directly to the LCD. My plan is to have a dedicated graphics chip, acting similarly to the SNES PPU chips (maybe with a bit of SuperFX functionality if budget and battery life allows.) As I don't have the resources to do custom silicon, it will be on an FPGA, but I want to avoid having one so powerful that people repeatedly ask "why don't you just run your entire handheld on the FPGA?" to which I'd have to answer "it defeats the purpose of what I'm trying to do!"
The graphics will be tile based, much like a Game Boy, with the CPU only sending instructions to tell the graphics chip to move tiles around and modify them (load tiles, change palette, etc.) while the bulk of the graphical work is done on that chip. That should free up quite a few CPU cycles for game logic. The graphics chip would be drawing an image assembled in VRAM to the LCD.
Yuri wrote:
AndrewP wrote:
Personally I fully intend to take Plasmo's 40MHz crown with an 50MHz '816 with the complete 24bit bus available. But that's just smack talk for now as I keep running into problems :lol:
*wonders how the poor CPU doesn't just catch fire at that speed*
I'd like to do my own retro gaming system and I'm shooting for about the same resolution (320x240 @ 15bpp), however, my plan is to use an FPGA to develop something along the lines of an SNES PPU.
My sprites and tiles would likely all still use a single byte per pixel. (Being relatively small in size, I foresee a single byte for a whole title/sprite selecting a palette bank)
This of course all works well if you're sending the pixel data down a VGA interface. (I think the OP was suggesting maybe doing that? Not sure how that works in a small LCD form factor.)
Of course the other part of what made the SNES really shine was that it had several different buses and a lot of different DMA operations that would go on during the blanking intervals of the picture.
That is what I'm hoping to do here, though I'm more familiar with the Game Boy architecture than I am the SNES. I should note that I do plan to have it draw pixel by pixel, scanline by scanline, so VBlank interrupts can be done.
I am open to suggestions for other LCDs if the ILI9341 is not suitable for the planned graphical implementation. The only part that is set in stone is a 65c816 in QFP (though I'll be using a DIP one for breadboard prototyping.)