// license:LGPL-2.1+ // copyright-holders:Ville Linde, Angelo Salese, hap /************************************************************************* Taito JC System *************************************************************************/ #include "video/tc0780fpa.h" #include "machine/taitoio.h" #include "emupal.h" #include "screen.h" #include "tilemap.h" class taitojc_state : public driver_device { public: taitojc_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this,"maincpu"), m_dsp(*this,"dsp"), m_tc0640fio(*this, "tc0640fio"), m_dspgfx(*this, "dspgfx"), m_vram(*this, "vram"), m_objlist(*this, "objlist"), m_main_ram(*this, "main_ram"), m_dsp_shared_ram(*this, "dsp_shared"), m_palette_ram(*this, "palette_ram"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette"), m_analog_ports(*this, "AN.%u", 0), m_tc0780fpa(*this, "tc0780fpa"), m_lamps(*this, "lamp%u", 0U), m_counters(*this, "counter%u", 0U) { m_speed_meter = 0; m_brake_meter = 0; } void taitojc(machine_config &config); void dendego(machine_config &config); void init_dendego2(); void init_dangcurv(); void init_taitojc(); private: // device/memory pointers required_device m_maincpu; required_device m_dsp; required_device m_tc0640fio; required_region_ptr m_dspgfx; required_shared_ptr m_vram; required_shared_ptr m_objlist; required_shared_ptr m_main_ram; required_shared_ptr m_dsp_shared_ram; required_shared_ptr m_palette_ram; required_device m_gfxdecode; required_device m_screen; required_device m_palette; optional_ioport_array<8> m_analog_ports; required_device m_tc0780fpa; output_finder<8> m_lamps; output_finder<5> m_counters; uint32_t m_dsp_rom_pos; int m_first_dsp_reset; int16_t m_viewport_data[3]; int16_t m_projection_data[3]; int16_t m_intersection_data[3]; int m_gfx_index; std::unique_ptr m_char_ram; std::unique_ptr m_tile_ram; tilemap_t *m_tilemap; uint8_t m_mcu_comm_main; uint8_t m_mcu_comm_hc11; uint8_t m_mcu_data_main; uint8_t m_mcu_data_hc11; uint8_t m_has_dsp_hack; int m_speed_meter; int m_brake_meter; DECLARE_WRITE8_MEMBER(coin_control_w); DECLARE_READ8_MEMBER(mcu_comm_r); DECLARE_WRITE8_MEMBER(mcu_comm_w); DECLARE_READ8_MEMBER(jc_pcbid_r); DECLARE_READ8_MEMBER(jc_lan_r); DECLARE_WRITE8_MEMBER(jc_lan_w); DECLARE_WRITE8_MEMBER(jc_irq_unk_w); DECLARE_WRITE8_MEMBER(dendego_speedmeter_w); DECLARE_WRITE8_MEMBER(dendego_brakemeter_w); DECLARE_READ8_MEMBER(hc11_comm_r); DECLARE_WRITE8_MEMBER(hc11_comm_w); DECLARE_WRITE8_MEMBER(hc11_output_w); DECLARE_READ8_MEMBER(hc11_data_r); DECLARE_WRITE8_MEMBER(hc11_data_w); template uint8_t hc11_analog_r(); DECLARE_READ16_MEMBER(dsp_shared_r); DECLARE_WRITE16_MEMBER(dsp_shared_w); DECLARE_READ16_MEMBER(dsp_to_main_7fe_r); DECLARE_WRITE16_MEMBER(dsp_to_main_7fe_w); DECLARE_WRITE16_MEMBER(main_to_dsp_7ff_w); DECLARE_READ16_MEMBER(dsp_rom_r); DECLARE_WRITE16_MEMBER(dsp_rom_w); DECLARE_WRITE16_MEMBER(dsp_math_viewport_w); DECLARE_WRITE16_MEMBER(dsp_math_projection_w); DECLARE_READ16_MEMBER(dsp_math_projection_y_r); DECLARE_READ16_MEMBER(dsp_math_projection_x_r); DECLARE_WRITE16_MEMBER(dsp_math_intersection_w); DECLARE_READ16_MEMBER(dsp_math_intersection_r); DECLARE_READ16_MEMBER(dsp_math_unk_r); DECLARE_READ16_MEMBER(taitojc_dsp_idle_skip_r); DECLARE_READ16_MEMBER(dendego2_dsp_idle_skip_r); DECLARE_READ32_MEMBER(taitojc_palette_r); DECLARE_WRITE32_MEMBER(taitojc_palette_w); DECLARE_READ32_MEMBER(taitojc_tile_r); DECLARE_READ32_MEMBER(taitojc_char_r); DECLARE_WRITE32_MEMBER(taitojc_tile_w); DECLARE_WRITE32_MEMBER(taitojc_char_w); TILE_GET_INFO_MEMBER(taitojc_tile_info); virtual void machine_reset() override; virtual void machine_start() override; virtual void video_start() override; uint32_t screen_update_taitojc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_dendego(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(taitojc_vblank); void draw_object(bitmap_ind16 &bitmap, const rectangle &cliprect, uint32_t w1, uint32_t w2, uint8_t bank_type); void draw_object_bank(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t bank_type, uint8_t pri); void dendego_map(address_map &map); void hc11_pgm_map(address_map &map); void taitojc_map(address_map &map); void tms_data_map(address_map &map); void tms_program_map(address_map &map); void cpu_space_map(address_map &map); };