CRAZY CLIMBER HARDWARE DETAILS AND MEMORY MAP by Lionel Theunissen. 08/01/97) Please don't take any of this information as gospel. This is what I have gleaned from my analysis of the CC ROMs and circuits, and I could be wrong about a few things. Some of it is best guess, but most of it should be correct. Bear in mind that it was quite a while ago (3 years) that I was originally working on this, so coming back into it I'm a little fuzzy on details. VIDEO: The video circuitry for Crazy Climber is similar to other early 80's games, but has some unique features. The display is character generated, 32 characters across and 28 high, which makes 256*224 pixels. The 1k of screen RAM addresses the character ROMs (ROMs 3-6); a pair for each character set, which give two bits per pixel, and along with the colour RAM, determine the colour for each pixel. Each vertical character column (32 in all) can be scrolled independantly using the column scroll registers at 9800h. Note that unlike most other games of the time CC uses a horizontally oriented picture tube (as in a VGA monitor), rather than the vertically oriented tube as used in Pacman, Galaxians, and Space Invaders. As in most character generated displays of the time, the colour of each pixel is determined by a combination of the lower 4 bits of the colour RAM and the two bits per pixel from the character generator ROMS. Bit 4 of the colour RAM selects between two character sets. An unusual feature of the display circuitry is what I call the Big (or main) sprite. There are 256 bytes of RAM at 8800h which are attached to their own character generator ROMs (ROMs 1&2). This can be moved as one big block using the control registers at 98dch-98dfh. This sprite is used for the logo in the opening screen, the bird, and other large objects in the game. I have yet to work out much of the detail regarding the small sprites, but they seem to be similar to pacman/galaxian. Anyone who would like to help out with this please contact me (I have limited time at the moment.) SOUND: Crazy Climber uses an AY-3-8910 addressed at I/O 8&9 for music, and has a sample playback system for other sounds controlled by the two ports on the AY-3-8910 and registers at a004h, a800h, and b000h. ROMs 12&13 contain the sample data. From the circuit it appears that the sample information is 4 bit with two 4 bit nybbles per byte of ROM which are read sequentially. I haven't confirmed this though. OTHER DETAILS: There is a watchdog circuit which will reset the processor if the machine switches (coin, player start, etc) at b800h are not read for a certain period of time. This ensures that if the program crashes due to a power glitch or whatever, the program will reset. There is little point in emulating this. MEMORY MAP: Note that the address decoder on CC only decodes to 2k blocks, therefore 1k of RAM at 9800h will also appear at 9c00h. In places the software will write to a mirror address; Eg. the Colour RAM is addressed at 9c00h and the column scroll registers at 9800h. These are actually both part of the same 1k RAM on the CC boards. The column scroll registers take up the first 32 bytes of the colour RAM. Since these bytes correspond to an area of the screen which is not displayed they can be used for this purpose. 0000h-4fffh ;20k program ROMs. ROM11=0000h ROM10=1000h ROM09=2000h ROM08=3000h ROM07=4000h 8000h-83ffh ;1k scratchpad RAM. 8800h-87ffh ;256 bytes Bigsprite RAM. 9000h-93ffh ;1k screen RAM. 9800h-981fh ;Column smooth scroll position. Corresponds to each char column. *This is actually part of the colour RAM. 98dch ;big sprite control. 98ddh ;big sprite colour. 98deh ;big sprite y position. 98dfh ;big sprite x position. 9c00h-9fffh ;1k Colour RAM: Bits 0-3: char colour scheme. Bit 4: 0=charset1, 1=charset2. 0a000h ;RD: player 1 cntl. WR: NMI: 0=disable, 1=enable. 0a001h ;WR: Video horizontal invert. 0a002h ;WR: Video vertical invert 0a004h ;WR: dig sound trigger? 0a800h ;RD: player 2 cntl. WR: dig sound speed? 0b000h ;RD: dip switches. WR: dig sound volume? 0b800h ;RD: machine switches/watchdog. I/O 8 ;AY-3-8910 Reg? I/O 9 ;AY-3-8910 Reg? *If anyone can help fill in some of the blanks or has corrections please email me. Lionel Theunissen (lionelth@ozemail.com.au)