summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/konami/combatsc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/konami/combatsc.h')
-rw-r--r--src/mame/konami/combatsc.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/src/mame/konami/combatsc.h b/src/mame/konami/combatsc.h
new file mode 100644
index 00000000000..9d1025ec444
--- /dev/null
+++ b/src/mame/konami/combatsc.h
@@ -0,0 +1,171 @@
+// license:BSD-3-Clause
+// copyright-holders:Phil Stroffolino, Manuel Abadia
+/*************************************************************************
+
+ Combat School
+
+*************************************************************************/
+#ifndef MAME_KONAMI_COMBATSC_H
+#define MAME_KONAMI_COMBATSC_H
+
+#pragma once
+
+#include "machine/gen_latch.h"
+#include "k007452.h"
+#include "sound/msm5205.h"
+#include "sound/upd7759.h"
+#include "k007121.h"
+#include "emupal.h"
+#include "screen.h"
+#include "tilemap.h"
+
+class combatsc_base_state : public driver_device
+{
+public:
+ combatsc_base_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_videoram(*this, "videoram%u", 0U),
+ m_maincpu(*this, "maincpu"),
+ m_audiocpu(*this, "audiocpu"),
+ m_screen(*this, "screen"),
+ m_palette(*this, "palette"),
+ m_soundlatch(*this, "soundlatch"),
+ m_track_ports(*this, {"TRACK0_Y", "TRACK0_X", "TRACK1_Y", "TRACK1_X"}),
+ m_mainbank(*this, "mainbank"),
+ m_video_view(*this, "video_view")
+ {
+ }
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+
+ // memory pointers
+ required_shared_ptr_array<uint8_t, 2> m_videoram;
+ std::unique_ptr<uint8_t[]> m_spriteram[2];
+
+ // video-related
+ tilemap_t *m_bg_tilemap[2]{};
+ tilemap_t *m_textlayer = nullptr;
+ uint8_t m_priority = 0U;
+
+ uint8_t m_vreg = 0U;
+ uint8_t m_video_circuit = 0U; // 0 or 1
+
+ // devices
+ required_device<cpu_device> m_maincpu;
+ required_device<cpu_device> m_audiocpu;
+ required_device<screen_device> m_screen;
+ required_device<palette_device> m_palette;
+ required_device<generic_latch_8_device> m_soundlatch;
+
+ optional_ioport_array<4> m_track_ports;
+
+ required_memory_bank m_mainbank;
+ memory_view m_video_view;
+
+ void vreg_w(uint8_t data);
+ void videoview0_w(offs_t offset, uint8_t data);
+ void videoview1_w(offs_t offset, uint8_t data);
+};
+
+class combatsc_state : public combatsc_base_state
+{
+public:
+ combatsc_state(const machine_config &mconfig, device_type type, const char *tag) :
+ combatsc_base_state(mconfig, type, tag),
+ m_k007121(*this, "k007121_%u", 1U),
+ m_k007452(*this, "k007452"),
+ m_upd7759(*this, "upd"),
+ m_scrollram(*this, "scrollram%u", 0U),
+ m_scroll_view(*this, "scrollview")
+ {
+ }
+
+ void combatsc(machine_config &config);
+
+ void init_combatsc();
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+ virtual void video_start() override ATTR_COLD;
+
+private:
+ required_device_array<k007121_device, 2> m_k007121;
+ required_device<k007452_device> m_k007452;
+ required_device<upd7759_device> m_upd7759;
+ required_shared_ptr_array<uint8_t, 2> m_scrollram;
+ memory_view m_scroll_view;
+
+ bool m_textflip = false;
+
+ // misc
+ uint8_t m_pos[4]{};
+ uint8_t m_sign[4]{};
+
+ void bankselect_w(uint8_t data);
+ void coin_counter_w(uint8_t data);
+ uint8_t trackball_r(offs_t offset);
+ uint8_t unk_r();
+ void sh_irqtrigger_w(uint8_t data);
+ void pf_control_w(offs_t offset, uint8_t data);
+ uint8_t busy_r();
+ void play_w(uint8_t data);
+ void voice_reset_w(uint8_t data);
+ void portA_w(uint8_t data);
+ TILE_GET_INFO_MEMBER(get_tile_info0);
+ TILE_GET_INFO_MEMBER(get_tile_info1);
+ TILE_GET_INFO_MEMBER(get_text_info);
+ void palette(palette_device &palette) const;
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, const uint8_t *source, int circuit, bitmap_ind8 &priority_bitmap, uint32_t pri_mask);
+ void main_map(address_map &map) ATTR_COLD;
+ void sound_map(address_map &map) ATTR_COLD;
+};
+
+class combatscb_state : public combatsc_base_state
+{
+public:
+ combatscb_state(const machine_config &mconfig, device_type type, const char *tag) :
+ combatsc_base_state(mconfig, type, tag),
+ m_gfxdecode(*this, "gfxdecode"),
+ m_msm(*this, "msm"),
+ m_soundbank(*this, "soundbank"),
+ m_io_ram(*this, "io_ram", 0x4000, ENDIANNESS_BIG),
+ m_bank_io_view(*this, "bank_io_view")
+ {
+ }
+
+ void combatscb(machine_config &config);
+
+protected:
+ virtual void machine_start() override ATTR_COLD;
+ virtual void machine_reset() override ATTR_COLD;
+ virtual void video_start() override ATTR_COLD;
+
+private:
+ optional_device<gfxdecode_device> m_gfxdecode;
+ required_device<msm5205_device> m_msm;
+ required_memory_bank m_soundbank;
+ memory_share_creator<uint8_t> m_io_ram;
+ memory_view m_bank_io_view;
+
+ uint8_t m_bank_select = 0; // 0x00..0x1f
+
+ void priority_w(uint8_t data);
+ void io_w(offs_t offset, uint8_t data);
+ void bankselect_w(uint8_t data);
+ void msm_w(uint8_t data);
+ void sound_irq_ack(uint8_t data);
+ TILE_GET_INFO_MEMBER(get_tile_info0);
+ TILE_GET_INFO_MEMBER(get_tile_info1);
+ TILE_GET_INFO_MEMBER(get_text_info);
+ void palette(palette_device &palette) const;
+ uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, const uint8_t *source, int circuit);
+ void main_map(address_map &map) ATTR_COLD;
+ void sound_map(address_map &map) ATTR_COLD;
+};
+
+#endif // MAME_KONAMI_COMBATSC_H