diff options
Diffstat (limited to 'src/mame/itech/itech32.h')
-rw-r--r-- | src/mame/itech/itech32.h | 90 |
1 files changed, 48 insertions, 42 deletions
diff --git a/src/mame/itech/itech32.h b/src/mame/itech/itech32.h index 95a5d66381a..8f07d22177e 100644 --- a/src/mame/itech/itech32.h +++ b/src/mame/itech/itech32.h @@ -20,12 +20,7 @@ #include "emupal.h" #include "screen.h" -#define VIDEO_CLOCK XTAL(8'000'000) // video (pixel) clock -#define CPU_CLOCK XTAL(12'000'000) // clock for 68000-based systems -#define CPU020_CLOCK XTAL(25'000'000) // clock for 68EC020-based systems -#define SOUND_CLOCK XTAL(16'000'000) // clock for sound board -#define TMS_CLOCK XTAL(40'000'000) // TMS320C31 clocks on drivedge - +#define LOG_DRIVEDGE_UNINIT_RAM 0 class itech32_state : public driver_device { @@ -34,7 +29,7 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), - m_via(*this, "via6522_0"), + m_via(*this, "via6522"), m_ensoniq(*this, "ensoniq"), m_screen(*this, "screen"), m_palette(*this, "palette"), @@ -46,10 +41,12 @@ public: m_nvram32(*this, "nvram32"), m_main_ram32(*this, "main_ram"), m_video(*this, "video", 0x200, ENDIANNESS_BIG), - m_main_rom16(*this, "user1"), - m_main_rom32(*this, "user1"), - m_grom(*this, "gfx1"), - m_soundbank(*this, "soundbank") + m_main_rom16(*this, "maindata"), + m_main_rom32(*this, "maindata"), + m_grom(*this, "grom"), + m_soundbank(*this, "soundbank"), + m_trackball_x(*this, "TRACKX%u", 1U), + m_trackball_y(*this, "TRACKY%u", 1U) { } void base_devices(machine_config &config); @@ -82,6 +79,8 @@ public: int special_port_r(); protected: + static constexpr XTAL VIDEO_CLOCK = XTAL(8'000'000); // video (pixel) clock + required_device<cpu_device> m_maincpu; required_device<cpu_device> m_soundcpu; optional_device<via6522_device> m_via; // sftm, wcbowl and gt games don't have the via @@ -103,6 +102,9 @@ protected: required_region_ptr<u8> m_grom; required_memory_bank m_soundbank; + optional_ioport_array<2> m_trackball_x; + optional_ioport_array<2> m_trackball_y; + virtual void nvram_init(nvram_device &nvram, void *base, size_t length); std::unique_ptr<u16[]> m_videoram; @@ -112,16 +114,11 @@ protected: u8 m_irq_base = 0; u8 m_sound_return = 0; offs_t m_itech020_prot_address = 0; - int m_special_result = 0; - int m_p1_effx = 0; - int m_p1_effy = 0; - int m_p1_lastresult = 0; - attotime m_p1_lasttime{}; - int m_p2_effx = 0; - int m_p2_effy = 0; - int m_p2_lastresult = 0; - attotime m_p2_lasttime{}; - u8 m_written[0x8000]{}; + u8 m_special_result = 0; + s32 m_effx[2]{}; + s32 m_effy[2]{}; + u8 m_lastresult[2]{}; + attotime m_lasttime[2]{}; u16 m_xfer_xcount = 0; u16 m_xfer_ycount = 0; u16 m_xfer_xcur = 0; @@ -144,11 +141,9 @@ protected: u32 m_grom_bank_mask = 0; void int1_ack_w(u16 data); - u8 trackball_r(); - u8 trackball_p2_r(); + template<unsigned Which> u8 trackball_r(); u16 trackball_8bit_r(); - u32 trackball32_4bit_p1_r(); - u32 trackball32_4bit_p2_r(); + template<unsigned Which> u32 trackball32_4bit_r(); u32 trackball32_4bit_combined_r(); u16 wcbowl_prot_result_r(); u8 itech020_prot_result_r(); @@ -174,9 +169,9 @@ protected: u16 bloodstm_video_r(offs_t offset); void pia_portb_out(u8 data); - virtual void machine_start() override; - virtual void machine_reset() override; - virtual void video_start() override; + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD; + virtual void video_start() override ATTR_COLD; void init_program_rom(); void init_sftm_common(int prot_addr); void init_shuffle_bowl_common(int prot_addr); @@ -190,7 +185,7 @@ protected: inline void disable_clipping(); inline void enable_clipping(); virtual void logblit(const char *tag); - void update_interrupts(int fast); + void update_interrupts(); void draw_raw(u16 *base, u16 color); void draw_raw_widthpix(u16 *base, u16 color); virtual void command_blit_raw(); @@ -202,12 +197,12 @@ protected: virtual void shiftreg_clear(u16 *base, u16 *zbase); void handle_video_command(); virtual void update_interrupts(int vint, int xint, int qint); - void bloodstm_map(address_map &map); - void itech020_map(address_map &map); - void sound_020_map(address_map &map); - void sound_map(address_map &map); - void timekill_map(address_map &map); - void pubball_map(address_map &map); + void bloodstm_map(address_map &map) ATTR_COLD; + void itech020_map(address_map &map) ATTR_COLD; + void sound_020_map(address_map &map) ATTR_COLD; + void sound_map(address_map &map) ATTR_COLD; + void timekill_map(address_map &map) ATTR_COLD; + void pubball_map(address_map &map) ATTR_COLD; }; class drivedge_state : public itech32_state @@ -229,12 +224,20 @@ public: protected: virtual void driver_start() override; - virtual void machine_start() override; - virtual void machine_reset() override; + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD; +private: u16 steering_r(); u16 gas_r(); +#if LOG_DRIVEDGE_UNINIT_RAM + u32 test1_r(offs_t offset, u32 mem_mask); + u32 test2_r(offs_t offset, u32 mem_mask); + void test1_w(offs_t offset, u32 data, u32 mem_mask); + void test2_w(offs_t offset, u32 data, u32 mem_mask); +#endif + u32 tms1_speedup_r(address_space &space); u32 tms2_speedup_r(address_space &space); void tms_reset_assert_w(u32 data); @@ -249,9 +252,9 @@ protected: void portb_out(u8 data); void turbo_light(int state); - void main_map(address_map &map); - void tms1_map(address_map &map); - void tms2_map(address_map &map); + void main_map(address_map &map) ATTR_COLD; + void tms1_map(address_map &map) ATTR_COLD; + void tms2_map(address_map &map) ATTR_COLD; virtual void nvram_init(nvram_device &nvram, void *base, size_t length) override; virtual void logblit(const char *tag) override; @@ -270,6 +273,9 @@ protected: required_ioport m_gas; u8 m_tms_spinning[2]; +#if LOG_DRIVEDGE_UNINIT_RAM + u8 m_written[0x8000]{}; +#endif }; class shoottv_state : public itech32_state @@ -288,11 +294,11 @@ public: private: virtual void driver_start() override; - virtual void video_start() override; + virtual void video_start() override ATTR_COLD; void update_interrupts(int vint, int xint, int qint) override; - void shoottv_map(address_map &map); + void shoottv_map(address_map &map) ATTR_COLD; TIMER_CALLBACK_MEMBER(gun_interrupt); |