summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/abc1600.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/abc1600.h')
-rw-r--r--src/mame/video/abc1600.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/src/mame/video/abc1600.h b/src/mame/video/abc1600.h
new file mode 100644
index 00000000000..172967c783d
--- /dev/null
+++ b/src/mame/video/abc1600.h
@@ -0,0 +1,151 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Luxor ABC 1600 Mover emulation
+
+**********************************************************************/
+
+#pragma once
+
+#ifndef __ABC1600_MOVER__
+#define __ABC1600_MOVER__
+
+#include "emu.h"
+#include "video/mc6845.h"
+
+
+
+///*************************************************************************
+// INTERFACE CONFIGURATION MACROS
+///*************************************************************************
+
+#define ABC1600_MOVER_TAG "mover"
+
+
+#define MCFG_ABC1600_MOVER_ADD() \
+ MCFG_DEVICE_ADD(ABC1600_MOVER_TAG, ABC1600_MOVER, 0)
+
+
+
+///*************************************************************************
+// TYPE DEFINITIONS
+///*************************************************************************
+
+// ======================> abc1600_mover_device
+
+class abc1600_mover_device : public device_t,
+ public device_memory_interface
+{
+public:
+ // construction/destruction
+ abc1600_mover_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // optional information overrides
+ virtual const rom_entry *device_rom_region() const;
+ virtual machine_config_constructor device_mconfig_additions() const;
+
+ virtual DECLARE_ADDRESS_MAP(vram_map, 8);
+ virtual DECLARE_ADDRESS_MAP(crtc_map, 8);
+ virtual DECLARE_ADDRESS_MAP(io_map, 8);
+
+ UINT32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
+ MC6845_UPDATE_ROW(crtc_update_row);
+ MC6845_ON_UPDATE_ADDR_CHANGED(crtc_update);
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
+
+private:
+ inline UINT16 get_drmsk();
+ inline void get_shinf();
+ inline UINT16 get_wrmsk();
+ inline UINT16 barrel_shift(UINT16 gmdr);
+ inline UINT16 word_mixer(UINT16 rot);
+ inline void clock_mfa_x();
+ inline void clock_mfa_y();
+ inline void clock_mta_x();
+ inline void clock_mta_y();
+ inline void load_mfa_x();
+ inline void load_mta_x();
+ inline void compare_mta_x();
+ inline void compare_mta_y();
+ inline void load_xy_reg();
+ void mover();
+
+ DECLARE_READ8_MEMBER( video_ram_r );
+ DECLARE_WRITE8_MEMBER( video_ram_w );
+
+ DECLARE_READ8_MEMBER( iord0_r );
+ DECLARE_WRITE8_MEMBER( ldsx_hb_w );
+ DECLARE_WRITE8_MEMBER( ldsx_lb_w );
+ DECLARE_WRITE8_MEMBER( ldsy_hb_w );
+ DECLARE_WRITE8_MEMBER( ldsy_lb_w );
+ DECLARE_WRITE8_MEMBER( ldtx_hb_w );
+ DECLARE_WRITE8_MEMBER( ldtx_lb_w );
+ DECLARE_WRITE8_MEMBER( ldty_hb_w );
+ DECLARE_WRITE8_MEMBER( ldty_lb_w );
+ DECLARE_WRITE8_MEMBER( ldfx_hb_w );
+ DECLARE_WRITE8_MEMBER( ldfx_lb_w );
+ DECLARE_WRITE8_MEMBER( ldfy_hb_w );
+ DECLARE_WRITE8_MEMBER( ldfy_lb_w );
+ DECLARE_WRITE8_MEMBER( wrml_w );
+ DECLARE_WRITE8_MEMBER( wrdl_w );
+ DECLARE_WRITE8_MEMBER( wrmask_strobe_hb_w );
+ DECLARE_WRITE8_MEMBER( wrmask_strobe_lb_w );
+ DECLARE_WRITE8_MEMBER( enable_clocks_w );
+ DECLARE_WRITE8_MEMBER( flag_strobe_w );
+ DECLARE_WRITE8_MEMBER( endisp_w );
+
+ inline UINT16 read_videoram(offs_t offset);
+ inline void write_videoram(offs_t offset, UINT16 data, UINT16 mask);
+ inline UINT16 get_crtca(UINT16 ma, UINT8 ra, UINT8 column);
+
+ const address_space_config m_space_config;
+
+ required_device<mc6845_device> m_crtc;
+ required_device<palette_device> m_palette;
+ required_region_ptr<UINT16> m_wrmsk_rom;
+ required_region_ptr<UINT8> m_shinf_rom;
+ required_region_ptr<UINT16> m_drmsk_rom;
+
+ int m_endisp; // enable display
+ int m_clocks_disabled; // clocks disabled
+ UINT16 m_gmdi; // video RAM data latch
+ UINT16 m_wrm; // write mask latch
+ UINT8 m_ms[16]; // mover sequence control
+ UINT8 m_ds[16]; // display sequence control
+ UINT8 m_flag; // flags
+ UINT16 m_xsize; // X size
+ UINT16 m_ysize; // Y size
+ int m_udx; // up/down X
+ int m_udy; // up/down Y
+ UINT16 m_xfrom; // X from
+ UINT16 m_xto; // X to
+ UINT16 m_yto; // Y to
+ UINT16 m_ty; // to Y
+ UINT32 m_mfa; // mover from address
+ UINT32 m_mta; // mover to address
+ UINT8 m_sh; //
+ UINT16 m_mdor; //
+ int m_hold_1w_cyk; //
+ int m_wrms0; //
+ int m_wrms1; //
+ int m_rmc; // row match count
+ int m_cmc; // column match count
+ int m_amm; // active mover mask
+};
+
+
+// device type definition
+extern const device_type ABC1600_MOVER;
+
+
+
+#endif