diff options
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 |
commit | af7aba7d6fccf682158a3ab764dc9ee6de159d25 (patch) | |
tree | 89dcf27456d96860348e33a1851a4c1263df5909 /src | |
parent | 5b939d1d375ec6157b8305c8a22431d95a2a27ef (diff) |
playch10: expose countdown LEDs through output system and render with artwork
Diffstat (limited to 'src')
-rw-r--r-- | src/mame/drivers/intellec4.cpp | 1 | ||||
-rw-r--r-- | src/mame/drivers/playch10.cpp | 10 | ||||
-rw-r--r-- | src/mame/includes/playch10.h | 139 | ||||
-rw-r--r-- | src/mame/layout/playch10.lay | 86 | ||||
-rw-r--r-- | src/mame/machine/playch10.cpp | 10 |
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) |