This may sounds strange but it's possible to do a ColecoVision game with not much graphics but still can be interresting to look at and provide more a lot more than 1KB RAM space to deal with by using the free Video RAM and some restrictions in the graphics.
Here I'm presenting an extreme case where I'm freeing up to 12KB of VRAM to be used as almost anything I want including a freaking huge level map pretty much as big as the one in the Coleco ADAM game : ADAMBomb 2.
The trick is to use graphic mode 1, not graphic mode 2, which only use 32 bytes for the COLOR table (2 colors per 8 characters). Because the character graphics look pretty much monochrome depending on how you deal with the colors limitation, the following VDP settings might be or not for one of your future ColecoVision projects.
Also, these VDP settings restrict to only 32 16x16 patterns for the sprites in Video RAM... which is not a problem for some games, but there's still a workaround solution if you need more by uploading, from time to time, other patterns for sprites during the game depending on your needs... be creative!
VDP REGISTERS ------------- REG#0,$00 REG#1,$82 (Screen Off, no NMI) $E2 (Screen On, NMI) REG#2,$0F (NAME @ $3C00) REG#3,$FE (COLOR @ $3F80) REG#4,$06 (PATTERN @ $3000) REG#5,$7E (SPRITE ATTRIBUTES @ $3F00) REG#6,$07 (SPRITE GENERATOR @ $3800) REG#7,$01 (Black backdrop color) VIDEO MEMORY MAP ---------------- $0000 - $2FFF = FREE 12KB $3000 - $37FF = PATTERN (CHARSET) $3800 - $3BFF = SPRITE GENERATOR (SPRITES PATTERNS) $3C00 - $3EFF = NAME (CHARS ON SCREEN) $3F00 - $3F7F = SPRITE ATTRIBUTES (32 times Y,X,#,COLOR) $3F80 - $3F9F = COLOR (CHARS COLOR, 2 COLORS per 8 CHARS IN THE CHARSET) $3FA0 - $3FFF = An extra 96 free bytes if needed 12KB USAGE SUGGESTION ALMOST LIKE IN ADAMBOMB2 ---------------------------------------------- Each byte can be splited into nibbles (two 4 bits), and each nibble may represent a 2x2 chars tile on screen. Either if you decide to display screens one at a time or use a smooth scrolling while walking around the map, this solution provides you pretty much the equivalent of size as what is used in ADAMBomb 2. The resulting map is 16 screens wide by 12 screens height, each screen is composed of 16 per 8 tiles, and each tile is a 2 by 2 chars on screen (16x16 pixels). You can use the CPU RAM to get the portion of the map you want to render at a first NMI interuption, and then render it quickly based on a various manipulations and a dictionnary of tiles (to conver nibble into 2x2 chars), and then upload to result on screen at the next NMI interrupt. A similar memory manipulation was done in my ColecoVision project titled GhostBlaster without any problem.
Please note that the advantage of using a map in RAM instead of ROM is the possibility to update it. If the player actions need to modify what is on screen and this screen represent part of a huge level or map, the level or map should be in RAM to do so. It's particulary the case if the player is allowed to do actions like collecting objects, destroying or moving blocks (tiles).
Another usage for this 12KB free space is to split it for various purpose, like a game composed of an overview map and multiple dungeons, multiple floors of a tall building, free space to let the user make temporary custom levels, or even more. Use your imagination.
I'm thinking of using a variant of this solution of extreme extra RAM space for a Coleco project, if I have time to work on it.
Thanks for reading and happy programming!
- Daniel Bienvenu
Edited by newcoleco, Tue May 10, 2011 4:17 PM.














