notes (nw)

This commit is contained in:
Vas Crabb 2015-12-30 13:15:04 +11:00
parent d1cc1254ad
commit e268dd2d5f
2 changed files with 87 additions and 45 deletions

View File

@ -6,7 +6,7 @@
original driver by Pierpaolo Prazzoli
The two games have identical game/video boards hardware, but
The two games have near identical game/video boards hardware, but
completely different sound boards. Laser Battle/Lazarian have a
dumb sound board with TMS organ and CSG chips driven directly by the
game program. Cat and Mouse uses an intelligent sound board with
@ -29,6 +29,12 @@
interface on J3. It seems there are no games that actually use the
bidirectional interface on J7.
The game board appears to have had some last-minute design changes
that aren't reflected in the Midway schematics, for example the last
program ROM being double the size of the others. There are also
some errors in the schematic like missing connections and incorrect
logic gate symbols.
Laser Battle/Lazarian notes:
* Manuals clearly indicate the controls to fire in four directions
are four buttons arranged in a diamond, not a four-way joystick
@ -46,16 +52,37 @@
* Laser Battle is far less forgiving, sending you back to the start
of an area on dying and not giving continues
Cat and Mouse notes:
* Tilt input causes loss of one credit
* Service coin 1 input grants two credits the first time it's
pushed, but remembers this and won't grant credits again unless
unless you trigger the tilt input
* Flyer suggests there should be an "old lady" sprite, which is not
present in our ROM dump
* Sprite ROM is likely double size, banking could be controlled by
one of the many unused CSOUND bits, the NEG2 bit, or even H128
* Judging by the PLA program, the colour weight resistors are likely
different to what Laser Battle/Lazarian uses - we need a detailed
colour photo of the game board or a schematic to confirm values
* Sound board emulation is based on tracing the program and guessing
what's connected where - we really need someone to trace out the
1b11107 sound board if we want to get this right
TODO:
- work out where all the magic layer offsets come from
- catnmous sprite ROM appears to be underdumped
- need to confirm colour weight resistors on catnmous (detailed photo required):
R58, R59, R60, R61, R62, R65, R66, R67, R68, R69, R72, R73, R74, R75
(network connected between 11M, 12M, Q5, Q7, Q8)
- sound in laserbat (with schematics) and in catnmous
*/
#include "emu.h"
#include "includes/laserbat.h"
#include "cpu/m6800/m6800.h"
#include "cpu/s2650/s2650.h"
#include "machine/6821pia.h"
#include "includes/laserbat.h"
WRITE8_MEMBER(laserbat_state_base::ct_io_w)
@ -69,29 +96,32 @@ WRITE8_MEMBER(laserbat_state_base::ct_io_w)
Bit 3 is an open collector output with a 2k2 pull-up resistor.
It is used to drive the "image commutation board" used to flip
the screen for player 2 in cocktail configuration.
the screen for player 2 in cocktail configuration. Note that
this output is asserted when player 2 is active even in upright
configuration, it's only supposed to be connected in a cocktail
cabinet.
Bits 4-5 feed the input row select decoder that switches between
ROW0, ROW1, SW1 and SW2 (ROW2 is selected using a bit in the
video effects register, just to be confusing).
+-----+-----------------------------+-------------------+------------------------------+
| bit | output | Laser Battle | Lazarian |
+-----+-----------------------------+-------------------+------------------------------+
| 0 | J2-3 solenoid driver | 1*Credits | 1*Coin C |
| | | | |
| 1 | J2-8 solenoid driver | 5*Coin A | 1*Coin A |
| | | 10*Coin B | |
| | | 1*Coin C | |
| | | | |
| 2 | J2-6 solenoid driver | | 1*Coin B |
| | | | |
| 3 | J3-4 open collector output | Connected to cocktail "image commutation board" |
| | | | |
| 4 | input row select A | | |
| | | | |
| 5 | input row select B | | |
+-----+-----------------------------+-------------------+------------------------------+
+-----+-----------------------------+--------------------+--------------+
| bit | output | laserbat/catnmous | lazarian |
+-----+-----------------------------+--------------------+--------------+
| 0 | J2-3 solenoid driver | 1*Credits | 1*Coin C |
| | | | |
| 1 | J2-8 solenoid driver | 5*Coin A | 1*Coin A |
| | | 10*Coin B | |
| | | 1*Coin C | |
| | | | |
| 2 | J2-6 solenoid driver | | 1*Coin B |
| | | | |
| 3 | J3-4 open collector output | Screen flip | Screen flip |
| | | | |
| 4 | input row select A | | |
| | | | |
| 5 | input row select B | | |
+-----+-----------------------------+--------------------+--------------+
*/
coin_counter_w(machine(), 0, data & 0x01);
@ -730,5 +760,5 @@ ROM_END
GAME( 1981, laserbat, 0, laserbat, laserbat, laserbat_state_base, laserbat, ROT0, "Zaccaria", "Laser Battle", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1981, lazarian, laserbat, laserbat, lazarian, laserbat_state_base, laserbat, ROT0, "Zaccaria (Bally Midway license)", "Lazarian", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1982, catnmous, 0, catnmous, catnmous, laserbat_state_base, laserbat, ROT90, "Zaccaria", "Cat and Mouse (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1982, catnmousa, catnmous, catnmous, catnmous, laserbat_state_base, laserbat, ROT90, "Zaccaria", "Cat and Mouse (set 2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1982, catnmous, 0, catnmous, catnmous, laserbat_state_base, laserbat, ROT90, "Zaccaria", "Cat and Mouse (set 1)", MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1982, catnmousa, catnmous, catnmous, catnmous, laserbat_state_base, laserbat, ROT90, "Zaccaria", "Cat and Mouse (set 2)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )

View File

@ -40,14 +40,26 @@
However video is actually generated in a 16-bit internal colour
space and mapped onto the 8-bit output colour space using a PLA.
The equations in the PAL give the following graphics priorities,
from highest to lowest:
The equations in the PLA for Laser Battle/Lazarian give the
following graphics priorities, from highest to lowest:
* TTL-generated sprite
* PVIs (colours ORed, object/score output ignored)
* Shell/area effect 2
* Background tilemap
* Area effect 1
The Cat and Mouse PLA program gives completely different priorities,
once again from highest to lowest:
* Background tilemap
* PVIs (colours ORed, object/score output ignored)
* TTL-generated sprite
* Shell
Cat and Mouse uses some signals completely differently. LUM affects
the background palette rather than the sprite palette, area effect 1
affects the background palette, and area effect 2 is completely
unused.
The game board has no logic for flipping the screen in cocktail
mode. It just provides an active-low open collector out with pull-
up indicating when player 2 is playing. In a cocktail cabinet this
@ -231,26 +243,26 @@ UINT32 laserbat_state_base::screen_update_laserbat(screen_device &screen, bitmap
TIMER_CALLBACK_MEMBER(laserbat_state_base::video_line)
{
/*
+-----+---------+-----------------------------------+
| bit | name | description |
+-----+---------+-----------------------------------+
| 0 | NAV0 | sprite bit 0 |
| 1 | NAV1 | sprite bit 1 |
| 2 | CLR0 | sprite colour bit 0 |
| 3 | CLR1 | sprite colour bit 1 |
| 4 | LUM | sprite luminance |
| 5 | C1* | combined PVI red (active low) |
| 6 | C2* | combined PVI green (active low) |
| 7 | C3* | combined PVI blue (active low) |
| 8 | BKR | background tilemap red |
| 9 | BKG | background tilemap green |
| 10 | BKB | background tilemap blue |
| 11 | SHELL | shell point |
| 12 | EFF1 | effect 1 area |
| 13 | EFF2 | effect 2 area |
| 14 | COLEFF0 | area effect colour bit 0 |
| 15 | COLEFF1 | area effect colour bit 1 |
+-----+---------+-----------------------------------+
+-----+---------+----------------------------------+-------------------------------------+
| bit | name | laserbat/lazarian | catnmous |
+-----+---------+----------------------------------+-------------------------------------+
| 0 | NAV0 | sprite bit 0 | sprite bit 0 |
| 1 | NAV1 | sprite bit 1 | sprite bit 1 |
| 2 | CLR0 | sprite palette bit 0 | sprite palette bit 0 |
| 3 | CLR1 | sprite palette bit 1 | sprite palette bit 1 |
| 4 | LUM | sprite luminance | background tilemap palette control |
| 5 | C1* | combined PVI red (active low) | combined PVI red (active low) |
| 6 | C2* | combined PVI green (active low) | combined PVI green (active low) |
| 7 | C3* | combined PVI blue (active low) | combined PVI blue (active low) |
| 8 | BKR | background tilemap red | background tilemap bit 0 |
| 9 | BKG | background tilemap green | background tilemap bit 1 |
| 10 | BKB | background tilemap blue | background tilemap bit 2 |
| 11 | SHELL | shell point | shell point |
| 12 | EFF1 | effect 1 area | background tilemap palette control |
| 13 | EFF2 | effect 2 area | unused |
| 14 | COLEFF0 | area effect colour bit 0 | background tilemap palette control |
| 15 | COLEFF1 | area effect colour bit 1 | background tilemap palette control |
+-----+---------+----------------------------------+-------------------------------------+
*/
assert(m_bitmap.width() > m_screen->visible_area().max_x);