Hey guys,
I've decided to take on the challenge of writing a menu program for
the Cinematronics multi-game thing. I've already got some of the code
written on paper and will probably hand assemble it since it's short
and no Cinematronics assembler exists (YET!)
Here's how I see it working from a hardware perspective, though this
is subject to change:
I assume all the games will be 16K. The smaller ones will have multiple
copies of the data to fill in the blank ROM space. 16 such games would
fit in 256K or 2 1-Meg Eproms which is nice because we have a "high" and
"low" socket to fill. Since there aren't 16 games available it's no
problem to make game 0 a menu program, but how to switch?
2 4-bit latches will be used for game select. L1 will hold the current
game number with its 4 outputs going to the upper address lines of the
ROMs as well as a connector to send them to the universal control pannel
y'all wanna make. L2 will hold the game number as selected from the menu
until it's time to start that game at which time it will get loaded into
L1.
Here's the magic. L2 will be cleared on reset (via the reset line). L1
will be loaded from L2 every time location $000 is read from the current
games ROM (which happens immediately after a reset). On power up reset will
clear L2 and since the first read is from $000 L1 will load and the menu
program will run. Once the menu program has loaded L2 with the game
number and you press the "go" button it will jump to address $000 which
will load L1 and is also the entry point for all games! Notice that L1
MUST load asynchronously and quickly for this to work. This leaves only
one problem: how to load L2.
Suppose the menu program fits in 2K (which it will) this means address line
A11 will stay zero while running the menu. We can load L2 whenever game
zero is selected AND A11 goes high with data taken from A7-A10. This way the
menu program can jump to $800 + 256*Game (or is it 128...) to load L2. Each
of these addresses would simply jump back to the menu program. Remember this
only takes place when game0 is running (the menu). The advantage of all this
is that it can be done with 4-5 TTL chips and 2 Eproms on a daughter card
plugged into 2 rom sockets with only *1* extra wire running to the board
to catch the reset signal! As I said before, we'd put a connector on the
daughter board to send the game selects over to the universal control pannel.
One potential problem: There is a reset instruction in the processor. If any
game executed this it would clear L2 and go back to the menu. I think we can
work around this if need be, but otherwise I think the idea is sound.
Excuse me if any of my powers of 2 are off in the description, I just wanted
to throw the idea out and let you know I've started writing a menu program.
Any comments and discussion about the above idea are encouraged. Now I just
need to get that test setup going... Steve verified for me that just because
a program runs right on the emulator doesn't mean it works on the real thing,
but this time I'm not cutting corners with code :-)
___ __ _ _ _
| \ / \ | | | || | Engineer/Programmer
| _/| || || |_| || |__ " What makes someone care so much?
|_| |_||_| \___/ |____) for things another man can just ignore. " -S.H.