Williams Special Chip 1&2: Add pinout diagram, and clarify the abbreviations to reduce confusion with similarly named chips. Fix a comment error about SC1 vs SC2 behavior. [Sean Riddle, Lord Nightmare]

This commit is contained in:
Lord-Nightmare 2017-05-04 01:03:21 -04:00
parent 4618b4dc2c
commit b2ab9d8a65
4 changed files with 80 additions and 25 deletions

View File

@ -3051,19 +3051,19 @@ DRIVER_INIT_MEMBER(williams_state,stargate)
DRIVER_INIT_MEMBER(williams_state,robotron)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0xc000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0xc000);
}
DRIVER_INIT_MEMBER(williams_state,joust)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0xc000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0xc000);
}
DRIVER_INIT_MEMBER(williams_state,bubbles)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0xc000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0xc000);
/* bubbles has a full 8-bit-wide CMOS */
m_maincpu->space(AS_PROGRAM).install_write_handler(0xcc00, 0xcfff, write8_delegate(FUNC(williams_state::bubbles_cmos_w),this));
@ -3072,25 +3072,25 @@ DRIVER_INIT_MEMBER(williams_state,bubbles)
DRIVER_INIT_MEMBER(williams_state,splat)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0xc000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC2, 0xc000);
}
DRIVER_INIT_MEMBER(williams_state,sinistar)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0x7400);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0x7400);
}
DRIVER_INIT_MEMBER(williams_state,playball)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0xc000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0xc000);
}
DRIVER_INIT_MEMBER(blaster_state,blaster)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0x9700);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC2, 0x9700);
}
@ -3098,7 +3098,7 @@ DRIVER_INIT_MEMBER(williams_state,spdball)
{
pia6821_device *pia_3 = machine().device<pia6821_device>("pia_3");
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0xc000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0xc000);
/* add a third PIA */
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xc808, 0xc80b, read8_delegate(FUNC(pia6821_device::read), pia_3), write8_delegate(FUNC(pia6821_device::write), pia_3));
@ -3113,21 +3113,21 @@ DRIVER_INIT_MEMBER(williams_state,spdball)
DRIVER_INIT_MEMBER(williams_state,alienar)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0xc000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0xc000);
m_maincpu->space(AS_PROGRAM).nop_write(0xcbff, 0xcbff);
}
DRIVER_INIT_MEMBER(williams_state,alienaru)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0xc000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0xc000);
m_maincpu->space(AS_PROGRAM).nop_write(0xcbff, 0xcbff);
}
DRIVER_INIT_MEMBER(williams_state,lottofun)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC01, 0xc000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC1, 0xc000);
}
@ -3140,28 +3140,28 @@ DRIVER_INIT_MEMBER(williams_state,lottofun)
DRIVER_INIT_MEMBER(williams2_state,mysticm)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0x9000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC2, 0x9000);
CONFIGURE_TILEMAP(WILLIAMS_TILEMAP_MYSTICM);
}
DRIVER_INIT_MEMBER(williams2_state,tshoot)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0x9000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC2, 0x9000);
CONFIGURE_TILEMAP(WILLIAMS_TILEMAP_TSHOOT);
}
DRIVER_INIT_MEMBER(williams2_state,inferno)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0x9000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC2, 0x9000);
CONFIGURE_TILEMAP(WILLIAMS_TILEMAP_TSHOOT);
}
DRIVER_INIT_MEMBER(joust2_state,joust2)
{
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC02, 0x9000);
CONFIGURE_BLITTER(WILLIAMS_BLITTER_SC2, 0x9000);
CONFIGURE_TILEMAP(WILLIAMS_TILEMAP_JOUST2);
}

View File

@ -480,7 +480,7 @@ DRIVER_INIT_MEMBER( wmg_state, wmg )
membank("bank5")->configure_entries(0, 8, &cpu[0x2d000], 0x10000); // Code
membank("bank6")->configure_entries(0, 8, &snd[0x10000], 0x1000); // Sound
membank("bank7")->configure_entries(1, 4, &cpu[0x78000], 0x1000); // Defender roms
m_blitter_config = WILLIAMS_BLITTER_SC01;
m_blitter_config = WILLIAMS_BLITTER_SC1;
m_blitter_clip_address = 0xc000;
}

View File

@ -227,11 +227,11 @@ public:
DECLARE_WRITE_LINE_MEMBER(joust2_pia_3_cb1_w);
};
/*----------- defined in video/williams.c -----------*/
/*----------- defined in video/williams.cpp -----------*/
#define WILLIAMS_BLITTER_NONE 0 /* no blitter */
#define WILLIAMS_BLITTER_SC01 1 /* SC-01 blitter */
#define WILLIAMS_BLITTER_SC02 2 /* SC-02 "fixed" blitter */
#define WILLIAMS_BLITTER_SC1 1 /* Special Chip 1 blitter */
#define WILLIAMS_BLITTER_SC2 2 /* Special Chip 2 "bugfixed" blitter */
#define WILLIAMS_TILEMAP_MYSTICM 0 /* IC79 is a 74LS85 comparator */
#define WILLIAMS_TILEMAP_TSHOOT 1 /* IC79 is a 74LS157 selector jumpered to be enabled */

View File

@ -14,13 +14,14 @@
Defender and Stargate simply draw graphics to the framebuffer directly
with no extra intervention.
Later games added a pair of "special chips" (SC-01) to the board which
Later games added a pair of "special chips" (Special Chip 1, and Special
Chip 2, abbreviated for clarity as SC1 and SC2) to the board which
are special purpose blitters. During their operation they HALT the
main CPU so that they can control the busses. The operation of the
chips is described in detail below.
The original SC-01 had a bug that forced an XOR of the width and height
values with 4. This was fixed in the SC-02, which was used on several
The original SC1 had a bug that forced an XOR of the width and height
values with 4. This was fixed in the SC2, which was used on several
later games.
Beginning with Sinistar, additional video tweaks were added.
@ -57,7 +58,7 @@
were added to the ROM boards of the later games. Splat!, Blaster, Mystic
Marathon and Joust 2 used Special Chip 2s. The only difference that I've
seen is that SC1s have a small bug. When you tell the SC1 the size of
the data to move, you have to exclusive-or the width and height with 2.
the data to move, you have to exclusive-or the width and height with 4.
The SC2s eliminate this bug.
The blitters were accessed at memory location $CA00-CA06.
@ -91,7 +92,61 @@
Bits 6 and 7 only blit every other pixel of the image. Bit 6 says even only,
while bit 7 says odd only.
***************************************************************************/
******************************************************************************
Special Chip 1 and 2 aka VLSI VL2001/2001A Pinout:
_______ _______
_|* \__/ |_
/E <- |_|1 40|_| ?-> /WINH
_| |_
TCF <- |_|2 39|_| -> A15
_| |_
/HTCF <-? |_|3 38|_| -> A14
_| |_
D7 <> |_|4 37|_| -> A13
_| |_
/HALT -> |_|5 36|_| <- /RESET
_| |_
/BABS -> |_|6 35|_| == /4MHZ
_| |_
D6 <> |_|7 34|_| -> A12
_| |_
D5 <> |_|8 33|_| -> A11
_| |_
D4 <> |_|9 5 V 32|_| -> A10
_| 4 T |_
(not bonded, pcb GND) N/C |_|10 1 V I 31|_| -> A9
_| 0 L |_
D3 <> |_|11 - 2 30|_| -> A8
_| 0 0 8 |_
D2 <> |_|12 9 0 2 29|_| -- VCC(+5v)
_| 8 1 2 |_
D1 <> |_|13 6 0 28|_| <> A0
_| 6 |_
U/L -> |_|14 27|_| <> A1
_| |_
(not bonded, pcb +12v) N/C |_|15 26|_| <> A2
_| |_
GND -- |_|16 25|_| <- /CS
_| |_
D0 <> |_|17 24|_| N/C (not bonded, pcb GND)
_| |_
R/W <>? |_|18 23|_| -> A7
_| |_
A3 <- |_|19 22|_| -> A6
_| |_
A4 <- |_|20 21|_| -> A5
|__________________|
The full silkscreen markings of SC1 (under the "Special Chip 1" sticker, if it is present) are:
VTI 8220
VL2001
5410-09866
The full silkscreen markings of SC2 (under the "Special Chip 2" sticker, if it is present) are:
<VTi Logo> 242
VL2001A
5410-09958
******************************************************************************/
#include "emu.h"
#include "video/resnet.h"
@ -458,7 +513,7 @@ void williams_state::blitter_init(int blitter_config, const uint8_t *remap_prom)
m_blitter_window_enable = 0;
/* switch off the video config */
m_blitter_xor = (blitter_config == WILLIAMS_BLITTER_SC01) ? 4 : 0;
m_blitter_xor = (blitter_config == WILLIAMS_BLITTER_SC1) ? 4 : 0;
/* create the remap table; if no PROM, make an identity remap table */
m_blitter_remap_lookup = std::make_unique<uint8_t[]>(256 * 256);