From the 80's i remember some utilities for ZX-Spectrum uses 64 columns, on a 256x192 display resolution: taswide, which is a zx-basic extension for providing this 64 columns text, and tasword, which is a zx-spectrum text editor can use these 64 columns. ZX-Spectrum defaultly uses 32 columns of text, as well as NES machines.
The idea would be having this on a NES Famiclone as well, whatever how slow or tricky could be implementing this.
As i know, NES has a 8kb bitmap memory, which is 4kb in two pattern banks, 2kb in each bitdepth. The idea is having the 1kb nametable repeated from above to below, 4 times, from 0x00 to 0xFF. Displaying different bitdepths seems simple because we can have different palettes. The most tricky could be changing the bank synchronized in the middle of the screen, vertically (most of NES games does this, btw, most notably with 'YoNoid'). Waiting help from skilled NES assembly coders to show us, it seems very possible, and having 64 columns on a famiclone could be really useful, by the way.
For trying to explain better how i imagine the memory banks are arranged on the NES display, i tried to do a simple video about:
It may be that there is far less complexity here if the target system uses the FAMiclone all in one chip that includes the single large address space mode. Then if there is not enough space to fit the required information for one half of the screen in one mapping of the video "ROM", the screen can be split into thirds instead of 10 lines each third, which is 5 rows of 16x16 blocks.
Setting up memory mapping in the unified address space is much easier, since its possible to roll your own with a single CPLD.
Comment by Ben Samples on November 3, 2010 at 5:29am
"(90^2/2 = 4050 bytes)"
Rereading my last post, I noticed that my math wasn't sound here. I got the right answer, but for the wrong reason. You still need to use 8K of CHR-ROM to do it, but this all still fits on one "half" of the palette.
I'm going to use the excuse that it's early and that I haven't been properly caffeinated yet because it sounds as good as any other. ;)
Comment by Ben Samples on November 3, 2010 at 5:18am
Your palette idea is pretty sharp. From a programming standpoint, however, this has a problem.
To store the digraphs for 7-bit ASCII would require 128 * 128 (divided by two because of the palette trick) = 8k of CHR-ROM, which fits just perfectly into what the NES can hold in its pattern tables. The problem, however, is that the NES alone can't store different background colors for each of the tiles in memory; the PPU, without any extension from a mapper, can only set individual background colors for 16x16 pixel regions in the attribute table (there's a great article about attribute tables on the NESdev wiki that you may want to go look at that explains this better than I can here).
You have two options for implementing this sort of text display on the NES:
1) Use a mapper like MMC5 that provides extended attribute tables and allows you to set backgrounds for individual 8x8 tiles, or;
2) Start pruning away at the number of displayable characters to try to cram them all into 4k of memory so you can use the same palette background for all of them, using the other "half" of the nametable data for sprites to fill in missing glyphs here and there.
Using MMC5 is by far the cleanest option, but it's also a more expensive one. I don't know what sort of access the PlayPower project has to this sort of hardware, but as a hobbyist developer one would have to purchase MMC5 cartridges of existing games, take them apart, and then gut them - which can get cost- and time-prohibitive very quickly on any sort of large scale at all.
The pruning option could quickly turn into a little nightmare to code, but it is in theory at least feasible. To fit the character digraphs into 4k, one would have to tear down the ASCII character set to 90 glyphs (90^2/2 = 4050 bytes). This is easier than it sounds, with 32 of the ASCII characters not being printable anyhow, but it would require choosing six glyphs out of the regular ASCII set to represent on screen as sprites - with all the limitations that entails. It wouldn't be possible to show more than eight of these (hopefully uncommon) glyphs on any one line at a time without resorting to flickering, and there would be a hard limit of 64 "sprite glyphs" per screen.
Aside from those limitations, though, this is a great idea. I hope this helps.
This is a clever idea. I like how you thought to use specialized palettes to encode two mono tiles on one 2bit tile. The split screen is either accomplished by polling the Sprite-0 Hit bit, or by using a more advanced mapper chip to generate raster IRQ's. Also, you would need a CHR-RAM cartridge setup to be sure the tiles are editable and not stored in ROM. This seems feasible to me.
Comment by Paulo Silva on April 13, 2010 at 5:59am
@BruceMcF yes, it's sharp enough, i remember running Taswide on a TK90X (ZX-Spectrum clone) when i lived in Brazil at 80's, and the TV i had were really crappy...
I don't know any of the details of getting it to operate in the NES, but I used a very similar bitmap font on the C64 in the 1980's (its 320 rather than 256 pixels wide, so it was 80 columns).
However, that was for a monochrome monitor, not for the television display: the issue is how sharp the television display is. Its definitely worthwhile exploring, as an option, but if the television display is not sharp enough to support it, a fallback to 32col by 30row text probably should be available.
You need to be a member of PLAYPOWER Volunteer Network to add comments!
Join PLAYPOWER Volunteer Network