DVG Multigame and Clay's ADL Multigame

From: Clay Cowgill <vector_clay_at_hotmail.com>
Date: Fri Mar 10 2000 - 23:32:14 EST

Geez... Teach me not to read this list for a day... ;-)

Ok, up front stuff: Yep, when I make things I sell them for reasonable
amounts of money. I only run my video-game activities out of a separate
fund to avoid any harassment from Tara. :-) For something like the
MultiJAMMA I'm looking at about $8K out of pocket up front (proto's, parts,
boards). I don't like floating that much for too long so I sell them for a
profit. For my time on the circuit boards, software, hardware, manuals,
packaging, etc. I expect to earn a profit. I'm setup as a business in
Washington and have to pay taxes, industrial insurance, unemployment
insurance, state use tax, etc. So, yeah, I'm damn near commercial, but
still "just for fun" 'cause my day-job pays the "real" bills. (But enough
of that.)

My Asteroids/Deluxe/LL is a little different than what Neil is talking
about.

Basically what it is is a RAM wedge that's loadable from software control.
There's a big DIP EPROM on the Multigame that holds boot code and sort-of a
file-system. The program ROM and VROM are replaced with SRAM. The menu
system loads the SRAM from the main EPROM for either Asteroids/Deluxe/LL or
a new (user-written) game.

This has some major advantages:
* Vector ROM and Program ROM both reside on one IC, so the user only has one
chip if upgrades are ever needed. (New games, etc.)
* It's easy to add new games to the "filesystem" (like Vector Breakout was
on the Tempest Multigame)
* It allows RAM-patches to be applied without needing a separate
bank-selected region in ROM. (So speed patches, more shots, harder/easier
need not be separate programs, but simply patched in after the code is
loaded.)
* Easier to develop on with an EPROM emulator for testing on real hardware.
(only need one EPROM emulator)

My hardware adds:
* NVSRAM for saving game state and highscores
* POKEY for sound
* Analog to Digital convertor for (optional) LL thrust control
* misc stuff in a big CPLD

I already patched Lunar Lander and Asteroids Deluxe to run on Asteroids
hardware. Lunar Lander has about 130 bytes of patch, Deluxe closer to 50-60
(don't recall). Doesn't look like much until you have to do it. ;-) Adding
a POKEY to Asteroids was a more pallatable solution than adding analog sound
hardware to Deluxe for me. I like the analog sounds from the Asteroids
hardware better than the Pokey sounds in Deluxe anyway...

This is the functional description:

-------------------------------------------------------------------

0000-03FF Zero page RAM and work RAM (1K)
2000-2FFF I/O
3000-3FFF I/O
4000-47FF Vector RAM (2K)
4800-5FFF Vector ROM (6K)
6000-7FFF Program ROM (8K)
...
8000-FFFF Mirror of 0000-FFFF

Multigame memory map:

0000-03FF Zero page RAM and work RAM (1K)
2000-2FFF I/O
3000-3FFF I/O
4000-47FF Vector RAM (2K)
4800-5FFF Vector SRAM (6K)
6000-7FFF Program SRAM (8K total)
...
8000-83FF Work RAM (1K)
8800-DFFF Mirror of 0000-5FFF
E000-E1FF Non-volatile SRAM (512 bytes, bank selected from 2K)
E800-EFFF ROM Bank Window (2K, bank selected from 64K)
F000-FFFF ROM on Reset, SRAM after load (4K)

2000-2007 CPLD Registers (Write)

        2000 = Bank select enable latch (low) [xxxxDDDD] bank number LSN
        2001 = Bank select enable latch (high) [xxxxDDDD] bank number MSN

        2003 = 0xF000-0xFFFF RAM/ROM select latch [xxxxxCAB] A (0= ROM, 1= RAM)
                POKEY enabled select latch B (0=no pokey, 1=pokey at 2C00-2C0F)
                RW buffer enable latch C (0=RWB=RW, 1=RWB=1)

Theory of Operation:
--------------------

The Asteroids/Deluxe/Lunar Lander (ADL) Multigame operates by replacing the
CPU ROM are of an Asteroids board with SRAM. The SRAM in turn is loaded by
the ADL software to allow any of the supported games to occupy the memory
map.

An 8K SRAM replaces all 6K of Vector ROM. It can also be loaded from
program control.

Upon system reset the ADL CPLD maps 0xF000-0xFFFF into the physical bottom
4K of a 64K EPROM. This is the boot code. The 6502 vectors through
0xFFFE-F and runs the Menu program.

The menu program displays a fancy menu to select a game. It can load the 8K
"VROM" with graphics to display while watching for a user selection. Once
the user chooses a game to run, the menu program copies it's critical code
out to RAM in the 0x8000-0x83FF range. Once the menu code is copied into
work RAM, the code jumps to work RAM
for execution.

The menu code then writes %xxxxxx1x to CPLD location 0x2003 which converts
the 0xF000-0xFFFF range to RAM. All the ROM areas on the Asteroids board
are now represented with RAM.

The menu code then writes a 4 bit value to CPLD location 0x2000 which is
presented to the EPROM as a bank select for A14-A11 bits of address. The
menu code then write a 4 bit value to CPLD location 0x2001 which is
presented to the EPROM as a bank select for
A18-A15. This allows any of 256 2K banks to be selected to appear at
0xE800-0xEFFF. That allows support for up to a 27C040 type EPROM. The menu
code then copies to appropriate bank to RAM, selects the next bank and
continues to load PROM and VROM until complete. Code patches may then be
applied.

If a POKEY is required the menu code can write %xxxxxxx1 to CPLD location
0x2003 which will enable address decode for the POKEY at 0x2C00-0x2C0F.

The menu program can also write a final 4 bit value to 0x2000 which is also
connected to the NVSRAM as a bank select.

The menu program should as a final step write %xxxxx1xx to CPLD location
0x2003 which will disable further writes to the program or vector ROM areas.

Once any patches are applied the menu code does an indirect jump to the
reset vector in 0xFFFE-F and the "real" game plays.

Pressing the "menu" button on the main daughtercard resets the CPLD and the
6502, resulting in the entire machine restarting to the menu.

--------------------------------------------------------------------

Anyway, that's about it. Response to the multigame has been pretty good
now-- probably around 20 people. I'd still do it if people want it, but
I'll get out of the way if Neil wants to do it instead...

Sorry, but I'm not really keen on sharing the internals of how to make the
rest of it work. I end up holding the bag on costs when stuff doesn't sell,
and having a bunch of people making something 80% the same as what I had
planned doesn't bode well for me breaking even or making any money. I don't
want to come across sounding snotty-- I can help up to a point, but I still
need to watch my bottom line if I want to keep doing this stuff.

-Clay
______________________________________________________
Get Your Private, Free Email at http://www.hotmail.com

---------------------------------------------------------------------------
** To UNSUBSCRIBE from vectorlist, send a message with "UNSUBSCRIBE" in the
** message body to vectorlist-request@synthcom.com. Please direct other
** questions, comments, or problems to neil@synthcom.com.
Received on Fri Mar 10 23:45:39 2000

This archive was generated by hypermail 2.1.8 : Fri Aug 01 2003 - 00:31:58 EDT