(MESS) visicom: Fixed colors and video. [Curt Coder]

(MESS) visicom.xml: Fixed cartridge data bit order. [Charles MacDonald, Marcel van Tongeren]
This commit is contained in:
Curt Coder 2013-08-07 15:20:46 +00:00
parent 411919feff
commit 302dc32c63
5 changed files with 87 additions and 36 deletions

View File

@ -6,12 +6,12 @@ Toshiba Visicom games list
ID Title Dumped
_________________________________________________________________
CAS-110 Arithmetic Drill (Math Fun & Fun with Numbers) no
CAS-130 Sports Fan (Baseball & Sumo Wrestling) yes
CAS-140 Gambler I (Blackjack) no
CAS-141 Gambler II (Slot Machine and Dice) no
CAS-160 Space Command (Space War) no
CAS-190 Inspiration (Bagua and Biorhythm) no
CAS-110 Arithmetic Drill (Math Fun & Fun with Numbers) no 算数ドリル
CAS-130 Sports Fan (Baseball & Sumo Wrestling) yes スポーツファン
CAS-140 Gambler I (Blackjack) no ギャンブラーI
CAS-141 Gambler II (Slot Machine and Dice) no ギャンブラーII
CAS-160 Space Command (Space War) no スペースコマンド
CAS-190 Inspiration (Bagua and Biorhythm) no 霊感
-->
<softwarelist name="visicom" description="Toshiba Visicom cartridges">
@ -20,10 +20,11 @@ CAS-190 Inspiration (Bagua and Biorhythm) no
<year>1978</year>
<publisher>Toshiba</publisher>
<info name="serial" value="CAS-130" />
<info name="alt_title" value="スポーツファン"/>
<part name="cart" interface="visicom_cart">
<dataarea name="rom" size="0x800">
<rom name="cas130.rom" size="0x800" crc="be86b65c" sha1="fdbcdf6b69de0ced2dea7695a777ec255b5df109" offset="0" />
<rom name="cas130.rom" size="0x800" crc="9da5c845" sha1="438d9fc67de1ef408718b4737c0d0fd48844dacb" offset="0" />
</dataarea>
</part>
</software>

View File

@ -44,7 +44,11 @@ cdp1861_device::cdp1861_device(const machine_config &mconfig, const char *tag, d
device_video_interface(mconfig, *this),
m_write_irq(*this),
m_write_dma_out(*this),
m_write_efx(*this)
m_write_efx(*this),
m_disp(0),
m_dispon(0),
m_dispoff(0),
m_dmaout(CLEAR_LINE)
{
}
@ -165,7 +169,7 @@ void cdp1861_device::device_timer(emu_timer &timer, device_timer_id id, int para
m_dma_timer->adjust(clocks_to_attotime(CDP1861_CYCLES_DMA_WAIT));
m_dmaout = 0;
m_dmaout = CLEAR_LINE;
}
else
{
@ -179,7 +183,7 @@ void cdp1861_device::device_timer(emu_timer &timer, device_timer_id id, int para
m_dma_timer->adjust(clocks_to_attotime(CDP1861_CYCLES_DMA_ACTIVE));
m_dmaout = 1;
m_dmaout = ASSERT_LINE;
}
break;
}

View File

@ -102,6 +102,8 @@ public:
UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
bitmap_rgb32 m_bitmap;
protected:
// device-level overrides
virtual void device_start();
@ -120,8 +122,6 @@ private:
devcb2_write_line m_write_dma_out;
devcb2_write_line m_write_efx;
bitmap_rgb32 m_bitmap; // bitmap
int m_disp; // display enabled
int m_dispon; // display on latch
int m_dispoff; // display off latch

View File

@ -177,8 +177,6 @@ Notes:
TODO:
- mpt02 clones' colors
- visicom colors
- NE555 discrete sound
*/
@ -299,8 +297,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( visicom_map, AS_PROGRAM, 8, visicom_state )
AM_RANGE(0x0000, 0x0fff) AM_ROM
AM_RANGE(0x1000, 0x10ff) AM_RAM
AM_RANGE(0x1100, 0x11ff) AM_RAM AM_SHARE("color_ram")
AM_RANGE(0x1300, 0x13ff) AM_RAM AM_SHARE("color_ram1")
AM_RANGE(0x1100, 0x11ff) AM_RAM AM_SHARE("color0_ram")
AM_RANGE(0x1300, 0x13ff) AM_RAM AM_SHARE("color1_ram")
ADDRESS_MAP_END
static ADDRESS_MAP_START( visicom_io_map, AS_IO, 8, visicom_state )
@ -364,12 +362,21 @@ INPUT_PORTS_END
static const rgb_t VISICOM_PALETTE[] =
{
MAKE_RGB(0x00, 0x80, 0x00),
MAKE_RGB(0x00, 0x00, 0xff),
MAKE_RGB(0x00, 0xff, 0x00),
MAKE_RGB(0xff, 0x00, 0x00)
MAKE_RGB(0x00, 0x40, 0x00),
MAKE_RGB(0xaf, 0xdf, 0xe4),
MAKE_RGB(0xb9, 0xc4, 0x2f),
MAKE_RGB(0xef, 0x45, 0x4a)
};
UINT32 visicom_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
m_vdc->screen_update(screen, bitmap, cliprect);
m_vdc->m_bitmap.fill(VISICOM_PALETTE[0], cliprect);
return 0;
}
READ_LINE_MEMBER( mpt02_state::rdata_r )
{
return BIT(m_color, 0);
@ -423,6 +430,40 @@ static COSMAC_INTERFACE( studio2_cosmac_intf )
DEVCB_NULL
};
WRITE8_MEMBER( visicom_state::dma_w )
{
int sx = m_screen->hpos() + 4;
int y = m_screen->vpos();
UINT8 addr = offset & 0xff;
UINT8 color0 = m_color0_ram[addr];
UINT8 color1 = m_color1_ram[addr];
for (int x = 0; x < 8; x++)
{
int color = (BIT(color1, 7) << 1) | BIT(color0, 7);
m_vdc->m_bitmap.pix32(y, sx + x) = VISICOM_PALETTE[color];
color0 <<= 1;
color1 <<= 1;
}
}
static COSMAC_INTERFACE( visicom_cosmac_intf )
{
DEVCB_LINE_VCC,
DEVCB_DRIVER_LINE_MEMBER(studio2_state, clear_r),
DEVCB_NULL,
DEVCB_NULL,
DEVCB_DRIVER_LINE_MEMBER(studio2_state, ef3_r),
DEVCB_DRIVER_LINE_MEMBER(studio2_state, ef4_r),
DEVCB_DRIVER_LINE_MEMBER(studio2_state, q_w),
DEVCB_NULL,
DEVCB_DRIVER_MEMBER(visicom_state, dma_w),
NULL,
DEVCB_NULL,
DEVCB_NULL
};
WRITE8_MEMBER( mpt02_state::dma_w )
{
UINT8 addr = ((offset & 0xe0) >> 2) | (offset & 0x07);
@ -511,7 +552,7 @@ DEVICE_IMAGE_LOAD_MEMBER( visicom_state, visicom_cart_load )
else
{
size_t size = image.get_software_region_length("rom");
if (size) memcpy(ptr, image.get_software_region("rom_800"), MAX(size, 0x800));
if (size) memcpy(ptr, image.get_software_region("rom"), MAX(size, 0x800));
}
return IMAGE_INIT_PASS;
@ -554,11 +595,12 @@ static MACHINE_CONFIG_START( visicom, visicom_state )
MCFG_CPU_ADD(CDP1802_TAG, CDP1802, XTAL_3_579545MHz/2)
MCFG_CPU_PROGRAM_MAP(visicom_map)
MCFG_CPU_IO_MAP(visicom_io_map)
MCFG_CPU_CONFIG(studio2_cosmac_intf)
MCFG_CPU_CONFIG(visicom_cosmac_intf)
/* video hardware */
MCFG_CDP1861_SCREEN_ADD(CDP1861_TAG, SCREEN_TAG, XTAL_3_579545MHz/2)
MCFG_CDP1861_ADD(CDP1861_TAG, SCREEN_TAG, XTAL_3_579545MHz/2/8, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1))
MCFG_SCREEN_UPDATE_DRIVER(visicom_state, screen_update)
MCFG_CDP1861_ADD(CDP1861_TAG, SCREEN_TAG, XTAL_3_579545MHz/2, INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_INT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_DMAOUT), INPUTLINE(CDP1802_TAG, COSMAC_INPUT_LINE_EF1))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@ -653,12 +695,12 @@ DRIVER_INIT_MEMBER(studio2_state,studio2)
/* Game Drivers */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
CONS( 1977, studio2, 0, 0, studio2, studio2, studio2_state, studio2, "RCA", "Studio II", GAME_SUPPORTS_SAVE )
CONS( 1978, visicom, studio2,0, visicom, studio2, studio2_state, studio2, "Toshiba", "Visicom COM-100 (Japan)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
CONS( 1978, mpt02, studio2,0, mpt02, studio2, studio2_state, studio2, "Soundic", "Victory MPT-02 Home TV Programmer (Austria)", GAME_SUPPORTS_SAVE )
CONS( 1978, mpt02h, studio2,0, mpt02, studio2, studio2_state, studio2, "Hanimex", "MPT-02 Jeu TV Programmable (France)", GAME_SUPPORTS_SAVE)
CONS( 1978, mtc9016, studio2,0, mpt02, studio2, studio2_state, studio2, "Mustang", "9016 Telespiel Computer (Germany)", GAME_SUPPORTS_SAVE )
CONS( 1978, shmc1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Sheen", "1200 Micro Computer (Australia)", GAME_SUPPORTS_SAVE )
CONS( 1978, cm1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Conic", "M-1200 (?)", GAME_SUPPORTS_SAVE )
CONS( 1978, apollo80, studio2,0, mpt02, studio2, studio2_state, studio2, "Academy", "Apollo 80 (Germany)", GAME_SUPPORTS_SAVE )
// YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS
CONS( 1977, studio2, 0, 0, studio2, studio2, studio2_state, studio2, "RCA", "Studio II", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
CONS( 1978, visicom, studio2,0, visicom, studio2, studio2_state, studio2, "Toshiba", "Visicom COM-100 (Japan)", GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
CONS( 1978, mpt02, studio2,0, mpt02, studio2, studio2_state, studio2, "Soundic", "Victory MPT-02 Home TV Programmer (Austria)", GAME_SUPPORTS_SAVE )
CONS( 1978, mpt02h, studio2,0, mpt02, studio2, studio2_state, studio2, "Hanimex", "MPT-02 Jeu TV Programmable (France)", GAME_SUPPORTS_SAVE )
CONS( 1978, mtc9016, studio2,0, mpt02, studio2, studio2_state, studio2, "Mustang", "9016 Telespiel Computer (Germany)", GAME_SUPPORTS_SAVE )
CONS( 1978, shmc1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Sheen", "1200 Micro Computer (Australia)", GAME_SUPPORTS_SAVE )
CONS( 1978, cm1200, studio2,0, mpt02, studio2, studio2_state, studio2, "Conic", "M-1200 (?)", GAME_SUPPORTS_SAVE )
CONS( 1978, apollo80, studio2,0, mpt02, studio2, studio2_state, studio2, "Academy", "Apollo 80 (Germany)", GAME_SUPPORTS_SAVE )

View File

@ -69,13 +69,17 @@ class visicom_state : public studio2_state
public:
visicom_state(const machine_config &mconfig, device_type type, const char *tag)
: studio2_state(mconfig, type, tag),
m_color_ram(*this, "color_ram"),
m_color_ram1(*this, "color_ram1")
m_color0_ram(*this, "color0_ram"),
m_color1_ram(*this, "color1_ram")
{ }
required_shared_ptr<UINT8> m_color_ram;
required_shared_ptr<UINT8> m_color_ram1;
virtual UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
required_shared_ptr<UINT8> m_color0_ram;
required_shared_ptr<UINT8> m_color1_ram;
DECLARE_WRITE8_MEMBER( dma_w );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( visicom_cart_load );
};