summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2018-01-27 19:29:02 +1100
committer Vas Crabb <vas@vastheman.com>2018-01-27 19:29:02 +1100
commitaf7aba7d6fccf682158a3ab764dc9ee6de159d25 (patch)
tree89dcf27456d96860348e33a1851a4c1263df5909 /src/mame
parent5b939d1d375ec6157b8305c8a22431d95a2a27ef (diff)
playch10: expose countdown LEDs through output system and render with artwork
Diffstat (limited to 'src/mame')
-rw-r--r--src/mame/drivers/intellec4.cpp1
-rw-r--r--src/mame/drivers/playch10.cpp10
-rw-r--r--src/mame/includes/playch10.h139
-rw-r--r--src/mame/layout/playch10.lay86
-rw-r--r--src/mame/machine/playch10.cpp10
5 files changed, 179 insertions, 67 deletions
diff --git a/src/mame/drivers/intellec4.cpp b/src/mame/drivers/intellec4.cpp
index d8941c8edd5..cff6bc9b716 100644
--- a/src/mame/drivers/intellec4.cpp
+++ b/src/mame/drivers/intellec4.cpp
@@ -101,6 +101,7 @@ public:
DECLARE_INPUT_CHANGED_MEMBER(sw_do_enable);
void intellec4(machine_config &config);
+
protected:
intellec4_state(machine_config const &mconfig, device_type type, char const *tag)
: driver_device(mconfig, type, tag)
diff --git a/src/mame/drivers/playch10.cpp b/src/mame/drivers/playch10.cpp
index 4f018c76736..da21bba2c21 100644
--- a/src/mame/drivers/playch10.cpp
+++ b/src/mame/drivers/playch10.cpp
@@ -304,6 +304,8 @@ Notes & Todo:
#include "screen.h"
#include "speaker.h"
+#include "playch10.lh"
+
/******************************************************************************/
@@ -339,12 +341,10 @@ WRITE8_MEMBER(playch10_state::sprite_dma_w)
WRITE8_MEMBER(playch10_state::time_w)
{
- if(data == 0xf)
- data = 0;
+ constexpr static uint8_t DIGIT_MAP[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
m_timedata[offset] = data;
-
- popmessage("Time: %d%d%d%d",m_timedata[3],m_timedata[2],m_timedata[1],m_timedata[0]);
+ m_timedigits[offset] = DIGIT_MAP[data & 0x0f];
}
@@ -669,7 +669,7 @@ MACHINE_CONFIG_START(playch10_state::playch10)
MCFG_GFXDECODE_ADD("gfxdecode", "palette", playch10)
MCFG_PALETTE_ADD("palette", 256+8*4*16)
MCFG_PALETTE_INIT_OWNER(playch10_state, playch10)
- MCFG_DEFAULT_LAYOUT(layout_dualhuov)
+ MCFG_DEFAULT_LAYOUT(layout_playch10)
MCFG_SCREEN_ADD("top", RASTER)
MCFG_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/includes/playch10.h b/src/mame/includes/playch10.h
index 99fad14825b..8afea34a16d 100644
--- a/src/mame/includes/playch10.h
+++ b/src/mame/includes/playch10.h
@@ -1,14 +1,13 @@
// license:BSD-3-Clause
// copyright-holders:Ernesto Corvi,Brad Oliver
+#ifndef MAME_INCLUDES_PLAYCH10_H
+#define MAME_INCLUDES_PLAYCH10_H
+
+#pragma once
+
#include "machine/rp5h01.h"
#include "video/ppu2c0x.h"
-struct chr_bank
-{
- int writable; // 1 for RAM, 0 for ROM
- uint8_t* chr; // direct access to the memory
-};
-
class playch10_state : public driver_device
{
public:
@@ -23,55 +22,10 @@ public:
, m_work_ram(*this, "work_ram")
, m_gfxdecode(*this, "gfxdecode")
, m_vrom_region(*this, "gfx2")
+ , m_timedigits(*this, "digit_%u", 0U)
{
}
- required_device<cpu_device> m_maincpu;
- required_device<ppu2c0x_device> m_ppu;
- optional_device<rp5h01_device> m_rp5h01;
-
- required_shared_ptr<uint8_t> m_ram_8w;
- required_shared_ptr<uint8_t> m_videoram;
- required_shared_ptr<uint8_t> m_timedata;
- required_shared_ptr<uint8_t> m_work_ram;
- required_device<gfxdecode_device> m_gfxdecode;
-
- optional_memory_region m_vrom_region;
-
- int m_up_8w;
- int m_pc10_nmi_enable;
- int m_pc10_dog_di;
- int m_pc10_sdcs;
- int m_pc10_dispmask;
- int m_pc10_int_detect;
- int m_pc10_game_mode;
- int m_pc10_dispmask_old;
- int m_pc10_gun_controller;
- int m_cart_sel;
- int m_cntrl_mask;
- int m_input_latch[2];
- int m_mirroring;
- int m_MMC2_bank[4];
- int m_MMC2_bank_latch[2];
- uint8_t* m_vrom;
- std::unique_ptr<uint8_t[]> m_vram;
- uint8_t* m_nametable[4];
- std::unique_ptr<uint8_t[]> m_nt_ram;
- chr_bank m_chr_page[8];
- int m_mmc1_shiftreg;
- int m_mmc1_shiftcount;
- int m_mmc1_rom_mask;
- int m_gboard_scanline_counter;
- int m_gboard_scanline_latch;
- int m_gboard_banks[2];
- int m_gboard_4screen;
- int m_gboard_last_bank;
- int m_gboard_command;
- int m_IRQ_count;
- uint8_t m_IRQ_count_latch;
- int m_IRQ_enable;
- int m_pc10_bios;
- tilemap_t *m_bg_tilemap;
DECLARE_WRITE_LINE_MEMBER(up8w_w);
DECLARE_READ8_MEMBER(ram_8w_r);
DECLARE_WRITE8_MEMBER(ram_8w_w);
@@ -103,9 +57,9 @@ public:
DECLARE_WRITE8_MEMBER(gboard_rom_switch_w);
DECLARE_WRITE8_MEMBER(iboard_rom_switch_w);
DECLARE_WRITE8_MEMBER(hboard_rom_switch_w);
- void pc10_set_mirroring(int mirroring);
DECLARE_WRITE8_MEMBER(playch10_videoram_w);
DECLARE_CUSTOM_INPUT_MEMBER(pc10_int_detect_r);
+
DECLARE_DRIVER_INIT(playch10);
DECLARE_DRIVER_INIT(pc_gun);
DECLARE_DRIVER_INIT(pcaboard);
@@ -124,23 +78,90 @@ public:
DECLARE_DRIVER_INIT(pciboard);
DECLARE_DRIVER_INIT(pckboard);
DECLARE_DRIVER_INIT(pc_hrz);
+
TILE_GET_INFO_MEMBER(get_bg_tile_info);
+
+ // machine configuration builders
+ void playch10(machine_config &config);
+ void playchnv(machine_config &config);
+ void playch10_hboard(machine_config &config);
+
+protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
+
+private:
+ struct chr_bank
+ {
+ int writable; // 1 for RAM, 0 for ROM
+ uint8_t* chr; // direct access to the memory
+ };
+
DECLARE_PALETTE_INIT(playch10);
DECLARE_MACHINE_START(playch10_hboard);
DECLARE_VIDEO_START(playch10_hboard);
- uint32_t screen_update_playch10_top(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_playch10_bottom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_playch10_single(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(playch10_interrupt);
+
void pc10_set_videorom_bank( int first, int count, int bank, int size );
void set_videoram_bank( int first, int count, int bank, int size );
void gboard_scanline_cb( int scanline, int vblank, int blanked );
void ppu_irq(int *ppu_regs);
void mapper9_latch(offs_t offset);
- void playch10(machine_config &config);
- void playchnv(machine_config &config);
- void playch10_hboard(machine_config &config);
+ void pc10_set_mirroring(int mirroring);
+
+ uint32_t screen_update_playch10_top(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update_playch10_bottom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update_playch10_single(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+
+ required_device<cpu_device> m_maincpu;
+ required_device<ppu2c0x_device> m_ppu;
+ optional_device<rp5h01_device> m_rp5h01;
+
+ required_shared_ptr<uint8_t> m_ram_8w;
+ required_shared_ptr<uint8_t> m_videoram;
+ required_shared_ptr<uint8_t> m_timedata;
+ required_shared_ptr<uint8_t> m_work_ram;
+ required_device<gfxdecode_device> m_gfxdecode;
+
+ optional_memory_region m_vrom_region;
+
+ output_finder<4> m_timedigits;
+
+ int m_up_8w;
+ int m_pc10_nmi_enable;
+ int m_pc10_dog_di;
+ int m_pc10_sdcs;
+ int m_pc10_dispmask;
+ int m_pc10_int_detect;
+ int m_pc10_game_mode;
+ int m_pc10_dispmask_old;
+ int m_pc10_gun_controller;
+ int m_cart_sel;
+ int m_cntrl_mask;
+ int m_input_latch[2];
+ int m_mirroring;
+ int m_MMC2_bank[4];
+ int m_MMC2_bank_latch[2];
+ uint8_t* m_vrom;
+ std::unique_ptr<uint8_t[]> m_vram;
+ uint8_t* m_nametable[4];
+ std::unique_ptr<uint8_t[]> m_nt_ram;
+ chr_bank m_chr_page[8];
+ int m_mmc1_shiftreg;
+ int m_mmc1_shiftcount;
+ int m_mmc1_rom_mask;
+ int m_gboard_scanline_counter;
+ int m_gboard_scanline_latch;
+ int m_gboard_banks[2];
+ int m_gboard_4screen;
+ int m_gboard_last_bank;
+ int m_gboard_command;
+ int m_IRQ_count;
+ uint8_t m_IRQ_count_latch;
+ int m_IRQ_enable;
+ int m_pc10_bios;
+ tilemap_t *m_bg_tilemap;
};
+
+#endif // MAME_INCLUDES_PLAYCH10_H
diff --git a/src/mame/layout/playch10.lay b/src/mame/layout/playch10.lay
new file mode 100644
index 00000000000..b85d780f2e6
--- /dev/null
+++ b/src/mame/layout/playch10.lay
@@ -0,0 +1,86 @@
+<?xml version="1.0"?>
+<mamelayout version="2">
+ <element name="digit" defstate="0">
+ <led7seg>
+ <color red="0.15" green="1.0" blue="0.25" />
+ </led7seg>
+ </element>
+
+ <view name="Screen 0 Standard (4:3)">
+ <screen index="0">
+ <bounds left="0" top="0" right="4" bottom="3" />
+ </screen>
+ </view>
+
+ <view name="Screen 1 Standard (4:3)">
+ <screen index="1">
+ <bounds left="0" top="0" right="4" bottom="3" />
+ </screen>
+ </view>
+
+ <view name="Screen 0 Pixel Aspect (~scr0nativexaspect~:~scr0nativeyaspect~)">
+ <screen index="0">
+ <bounds left="0" top="0" right="~scr0width~" bottom="~scr0height~" />
+ </screen>
+ </view>
+
+ <view name="Screen 1 Pixel Aspect (~scr1nativexaspect~:~scr1nativeyaspect~)">
+ <screen index="1">
+ <bounds left="0" top="0" right="~scr1width~" bottom="~scr1height~" />
+ </screen>
+ </view>
+
+ <view name="Single Screen">
+ <bezel name="digit_3" element="digit">
+ <bounds x="25" y="0" width="2" height="3.2" />
+ </bezel>
+ <bezel name="digit_2" element="digit">
+ <bounds x="27.5" y="0" width="2" height="3.2" />
+ </bezel>
+ <bezel name="digit_1" element="digit">
+ <bounds x="30" y="0" width="2" height="3.2" />
+ </bezel>
+ <bezel name="digit_0" element="digit">
+ <bounds x="32.5" y="0" width="2" height="3.2" />
+ </bezel>
+ <screen index="0">
+ <bounds left="0" top="3.5" right="40" bottom="33.5" />
+ </screen>
+ </view>
+
+ <view name="Dual Under-Over">
+ <screen index="1">
+ <bounds x="0" y="-3.03" width="4" height="3" />
+ </screen>
+ <screen index="0">
+ <bounds x="0" y="0" width="4" height="3" />
+ </screen>
+ </view>
+
+ <view name="Dual Under-Over (Gapless)">
+ <screen index="1">
+ <bounds x="0" y="-3" width="4" height="3" />
+ </screen>
+ <screen index="0">
+ <bounds x="0" y="0" width="4" height="3" />
+ </screen>
+ </view>
+
+ <view name="Dual Side-by-Side">
+ <screen index="1">
+ <bounds x="0" y="0" width="4" height="3" />
+ </screen>
+ <screen index="0">
+ <bounds x="4.03" y="0" width="4" height="3" />
+ </screen>
+ </view>
+
+ <view name="Dual Side-by-Side (Gapless)">
+ <screen index="1">
+ <bounds x="0" y="0" width="4" height="3" />
+ </screen>
+ <screen index="0">
+ <bounds x="4" y="0" width="4" height="3" />
+ </screen>
+ </view>
+</mamelayout>
diff --git a/src/mame/machine/playch10.cpp b/src/mame/machine/playch10.cpp
index 587a60126e2..5538175cbbc 100644
--- a/src/mame/machine/playch10.cpp
+++ b/src/mame/machine/playch10.cpp
@@ -1,10 +1,12 @@
// license:BSD-3-Clause
// copyright-holders:Ernesto Corvi,Brad Oliver
#include "emu.h"
-#include "video/ppu2c0x.h"
-#include "machine/nvram.h"
#include "includes/playch10.h"
+#include "machine/nvram.h"
+#include "video/ppu2c0x.h"
+
+
/*************************************
*
* Init machine
@@ -35,6 +37,8 @@ void playch10_state::machine_reset()
void playch10_state::machine_start()
{
+ m_timedigits.resolve();
+
m_vrom = (m_vrom_region != nullptr) ? m_vrom_region->base() : nullptr;
/* allocate 4K of nametable ram here */
@@ -50,7 +54,7 @@ void playch10_state::machine_start()
nvram_device *nvram = machine().device<nvram_device>("nvram");
if (nvram != nullptr)
- nvram->set_base(memregion("cart" )->base() + 0x6000, 0x1000);
+ nvram->set_base(memregion("cart")->base() + 0x6000, 0x1000);
}
MACHINE_START_MEMBER(playch10_state,playch10_hboard)