1 // license:BSD-3-Clause 2 // copyright-holders:Philip Bennett 3 /************************************************************************* 4 5 Lock-On hardware 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_LOCKON_H 9 #define MAME_INCLUDES_LOCKON_H 10 11 #pragma once 12 13 #include "machine/watchdog.h" 14 #include "sound/flt_vol.h" 15 #include "emupal.h" 16 #include "screen.h" 17 #include "tilemap.h" 18 19 /* Calculated from CRT controller writes */ 20 #define PIXEL_CLOCK (XTAL(21'000'000) / 3) 21 #define FRAMEBUFFER_CLOCK XTAL(10'000'000) 22 #define HBSTART 320 23 #define HBEND 0 24 #define HTOTAL 448 25 #define VBSTART 240 26 #define VBEND 0 27 #define VTOTAL 280 28 29 30 class lockon_state : public driver_device 31 { 32 public: lockon_state(const machine_config & mconfig,device_type type,const char * tag)33 lockon_state(const machine_config &mconfig, device_type type, const char *tag) 34 : driver_device(mconfig, type, tag) 35 , m_char_ram(*this, "char_ram") 36 , m_hud_ram(*this, "hud_ram") 37 , m_scene_ram(*this, "scene_ram") 38 , m_ground_ram(*this, "ground_ram") 39 , m_object_ram(*this, "object_ram") 40 , m_maincpu(*this, "maincpu") 41 , m_audiocpu(*this, "audiocpu") 42 , m_ground(*this, "ground") 43 , m_object(*this, "object") 44 , m_watchdog(*this, "watchdog") 45 , m_f2203_1l(*this, "f2203.1l") 46 , m_f2203_2l(*this, "f2203.2l") 47 , m_f2203_3l(*this, "f2203.3l") 48 , m_f2203_1r(*this, "f2203.1r") 49 , m_f2203_2r(*this, "f2203.2r") 50 , m_f2203_3r(*this, "f2203.3r") 51 , m_gfxdecode(*this, "gfxdecode") 52 , m_screen(*this, "screen") 53 , m_palette(*this, "palette") 54 , m_lamp(*this, "lamp1") 55 { } 56 57 void lockon(machine_config &config); 58 59 protected: 60 virtual void machine_start() override; 61 virtual void machine_reset() override; 62 virtual void video_start() override; 63 64 private: 65 /* memory pointers */ 66 required_shared_ptr<uint16_t> m_char_ram; 67 required_shared_ptr<uint16_t> m_hud_ram; 68 required_shared_ptr<uint16_t> m_scene_ram; 69 required_shared_ptr<uint16_t> m_ground_ram; 70 required_shared_ptr<uint16_t> m_object_ram; 71 72 /* video-related */ 73 tilemap_t *m_tilemap; 74 uint8_t m_ground_ctrl; 75 uint16_t m_scroll_h; 76 uint16_t m_scroll_v; 77 std::unique_ptr<bitmap_ind16> m_front_buffer; 78 std::unique_ptr<bitmap_ind16> m_back_buffer; 79 emu_timer *m_bufend_timer; 80 emu_timer *m_cursor_timer; 81 82 /* Rotation Control */ 83 uint16_t m_xsal; 84 uint16_t m_x0ll; 85 uint16_t m_dx0ll; 86 uint16_t m_dxll; 87 uint16_t m_ysal; 88 uint16_t m_y0ll; 89 uint16_t m_dy0ll; 90 uint16_t m_dyll; 91 92 /* Object palette RAM control */ 93 uint32_t m_iden; 94 std::unique_ptr<uint8_t[]> m_obj_pal_ram; 95 uint32_t m_obj_pal_latch; 96 uint32_t m_obj_pal_addr; 97 98 /* misc */ 99 uint8_t m_ctrl_reg; 100 uint32_t m_main_inten; 101 102 /* devices */ 103 required_device<cpu_device> m_maincpu; 104 required_device<cpu_device> m_audiocpu; 105 required_device<cpu_device> m_ground; 106 required_device<cpu_device> m_object; 107 required_device<watchdog_timer_device> m_watchdog; 108 required_device<filter_volume_device> m_f2203_1l; 109 required_device<filter_volume_device> m_f2203_2l; 110 required_device<filter_volume_device> m_f2203_3l; 111 required_device<filter_volume_device> m_f2203_1r; 112 required_device<filter_volume_device> m_f2203_2r; 113 required_device<filter_volume_device> m_f2203_3r; 114 required_device<gfxdecode_device> m_gfxdecode; 115 required_device<screen_device> m_screen; 116 required_device<palette_device> m_palette; 117 output_finder<> m_lamp; 118 119 uint16_t lockon_crtc_r(); 120 void lockon_crtc_w(offs_t offset, uint16_t data); 121 void lockon_char_w(offs_t offset, uint16_t data); 122 void lockon_scene_h_scr_w(uint16_t data); 123 void lockon_scene_v_scr_w(uint16_t data); 124 void lockon_ground_ctrl_w(uint16_t data); 125 void lockon_tza112_w(offs_t offset, uint16_t data); 126 uint16_t lockon_obj_4000_r(); 127 void lockon_obj_4000_w(uint16_t data); 128 void lockon_fb_clut_w(offs_t offset, uint16_t data); 129 void lockon_rotate_w(offs_t offset, uint16_t data); 130 void adrst_w(uint16_t data); 131 uint16_t main_gnd_r(offs_t offset); 132 void main_gnd_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 133 uint16_t main_obj_r(offs_t offset); 134 void main_obj_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 135 void tst_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 136 uint16_t main_z80_r(offs_t offset); 137 void main_z80_w(offs_t offset, uint16_t data); 138 void inten_w(uint16_t data); 139 void emres_w(uint16_t data); 140 void sound_vol(uint8_t data); 141 void ym2203_out_b(uint8_t data); 142 TILE_GET_INFO_MEMBER(get_lockon_tile_info); 143 void lockon_palette(palette_device &palette) const; 144 uint32_t screen_update_lockon(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 145 DECLARE_WRITE_LINE_MEMBER(screen_vblank_lockon); 146 TIMER_CALLBACK_MEMBER(cursor_callback); 147 TIMER_CALLBACK_MEMBER(bufend_callback); 148 void scene_draw(); 149 void ground_draw(); 150 void objects_draw(); 151 void rotate_draw( bitmap_ind16 &bitmap, const rectangle &cliprect ); 152 void hud_draw( bitmap_ind16 &bitmap, const rectangle &cliprect ); 153 DECLARE_WRITE_LINE_MEMBER(ym2203_irq); 154 void ground_v30(address_map &map); 155 void main_v30(address_map &map); 156 void object_v30(address_map &map); 157 void sound_io(address_map &map); 158 void sound_prg(address_map &map); 159 }; 160 161 #endif // MAME_INCLUDES_LOCKON_H 162