diff options
Diffstat (limited to 'src/devices/cpu/tms34010/tms34010.h')
-rw-r--r-- | src/devices/cpu/tms34010/tms34010.h | 210 |
1 files changed, 103 insertions, 107 deletions
diff --git a/src/devices/cpu/tms34010/tms34010.h b/src/devices/cpu/tms34010/tms34010.h index a4efa7b14da..32b445629a9 100644 --- a/src/devices/cpu/tms34010/tms34010.h +++ b/src/devices/cpu/tms34010/tms34010.h @@ -9,10 +9,10 @@ ***************************************************************************/ -#pragma once +#ifndef MAME_CPU_TMS34010_TMS34010_H +#define MAME_CPU_TMS34010_TMS34010_H -#ifndef __TMS34010_H__ -#define __TMS34010_H__ +#pragma once /* register indexes for get_reg and set_reg */ @@ -95,77 +95,6 @@ enum REG_REFCNT }; -enum -{ - REG020_VESYNC, - REG020_HESYNC, - REG020_VEBLNK, - REG020_HEBLNK, - REG020_VSBLNK, - REG020_HSBLNK, - REG020_VTOTAL, - REG020_HTOTAL, - REG020_DPYCTL, /* matches 010 */ - REG020_DPYSTRT, /* matches 010 */ - REG020_DPYINT, /* matches 010 */ - REG020_CONTROL, /* matches 010 */ - REG020_HSTDATA, /* matches 010 */ - REG020_HSTADRL, /* matches 010 */ - REG020_HSTADRH, /* matches 010 */ - REG020_HSTCTLL, /* matches 010 */ - - REG020_HSTCTLH, /* matches 010 */ - REG020_INTENB, /* matches 010 */ - REG020_INTPEND, /* matches 010 */ - REG020_CONVSP, /* matches 010 */ - REG020_CONVDP, /* matches 010 */ - REG020_PSIZE, /* matches 010 */ - REG020_PMASKL, - REG020_PMASKH, - REG020_CONVMP, - REG020_CONTROL2, - REG020_CONFIG, - REG020_DPYTAP, /* matches 010 */ - REG020_VCOUNT, - REG020_HCOUNT, - REG020_DPYADR, /* matches 010 */ - REG020_REFADR, - - REG020_DPYSTL, - REG020_DPYSTH, - REG020_DPYNXL, - REG020_DPYNXH, - REG020_DINCL, - REG020_DINCH, - REG020_RES0, - REG020_HESERR, - REG020_RES1, - REG020_RES2, - REG020_RES3, - REG020_RES4, - REG020_SCOUNT, - REG020_BSFLTST, - REG020_DPYMSK, - REG020_RES5, - - REG020_SETVCNT, - REG020_SETHCNT, - REG020_BSFLTDL, - REG020_BSFLTDH, - REG020_RES6, - REG020_RES7, - REG020_RES8, - REG020_RES9, - REG020_IHOST1L, - REG020_IHOST1H, - REG020_IHOST2L, - REG020_IHOST2H, - REG020_IHOST3L, - REG020_IHOST3H, - REG020_IHOST4L, - REG020_IHOST4H -}; - /* Interrupts that are generated by the processor internally */ #define TMS34010_INT1 0x0002 /* External Interrupt 1 */ #define TMS34010_INT2 0x0004 /* External Interrupt 2 */ @@ -174,18 +103,6 @@ enum #define TMS34010_WV 0x0800 /* Window Violation Interrupt */ -/* Configuration structure */ -struct tms34010_display_params -{ - uint16_t vcount; /* most recent VCOUNT */ - uint16_t veblnk, vsblnk; /* start/end of VBLANK */ - uint16_t heblnk, hsblnk; /* start/end of HBLANK */ - uint16_t rowaddr, coladdr; /* row/column addresses */ - uint8_t yoffset; /* y offset from addresses */ - uint8_t enabled; /* video enabled */ -}; - - #define MCFG_TMS340X0_HALT_ON_RESET(_value) \ tms340x0_device::set_halt_on_reset(*device, _value); @@ -195,59 +112,64 @@ struct tms34010_display_params #define MCFG_TMS340X0_PIXELS_PER_CLOCK(_value) \ tms340x0_device::set_pixels_per_clock(*device, _value); -typedef device_delegate<void (screen_device &screen, bitmap_ind16 &bitmap, int scanline, const tms34010_display_params *params)> scanline_ind16_cb_delegate; - -#define TMS340X0_SCANLINE_IND16_CB_MEMBER(_name) void _name(screen_device &screen, bitmap_ind16 &bitmap, int scanline, const tms34010_display_params *params) +#define TMS340X0_SCANLINE_IND16_CB_MEMBER(_name) void _name(screen_device &screen, bitmap_ind16 &bitmap, int scanline, const tms340x0_device::display_params *params) #define MCFG_TMS340X0_SCANLINE_IND16_CB(_class, _method) \ - tms340x0_device::set_scanline_ind16_callback(*device, scanline_ind16_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); - + tms340x0_device::set_scanline_ind16_callback(*device, tms340x0_device::scanline_ind16_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); -typedef device_delegate<void (screen_device &screen, bitmap_rgb32 &bitmap, int scanline, const tms34010_display_params *params)> scanline_rgb32_cb_delegate; -#define TMS340X0_SCANLINE_RGB32_CB_MEMBER(_name) void _name(screen_device &screen, bitmap_rgb32 &bitmap, int scanline, const tms34010_display_params *params) +#define TMS340X0_SCANLINE_RGB32_CB_MEMBER(_name) void _name(screen_device &screen, bitmap_rgb32 &bitmap, int scanline, const tms340x0_device::display_params *params) #define MCFG_TMS340X0_SCANLINE_RGB32_CB(_class, _method) \ - tms340x0_device::set_scanline_rgb32_callback(*device, scanline_rgb32_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); + tms340x0_device::set_scanline_rgb32_callback(*device, tms340x0_device::scanline_rgb32_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); #define MCFG_TMS340X0_OUTPUT_INT_CB(_devcb) \ devcb = &tms340x0_device::set_output_int_callback(*device, DEVCB_##_devcb); -typedef device_delegate<void (address_space &space, offs_t address, uint16_t *shiftreg)> to_shiftreg_cb_delegate; - #define TMS340X0_TO_SHIFTREG_CB_MEMBER(_name) void _name(address_space &space, offs_t address, uint16_t *shiftreg) #define MCFG_TMS340X0_TO_SHIFTREG_CB(_class, _method) \ - tms340x0_device::set_to_shiftreg_callback(*device, to_shiftreg_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); - + tms340x0_device::set_to_shiftreg_callback(*device, tms340x0_device::to_shiftreg_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); -typedef device_delegate<void (address_space &space, offs_t address, uint16_t *shiftreg)> from_shiftreg_cb_delegate; #define TMS340X0_FROM_SHIFTREG_CB_MEMBER(_name) void _name(address_space &space, offs_t address, uint16_t *shiftreg) #define MCFG_TMS340X0_FROM_SHIFTREG_CB(_class, _method) \ - tms340x0_device::set_from_shiftreg_callback(*device, from_shiftreg_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); + tms340x0_device::set_from_shiftreg_callback(*device, tms340x0_device::from_shiftreg_cb_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner))); class tms340x0_device : public cpu_device, public device_video_interface { public: - // construction/destruction - tms340x0_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname); + // Configuration structure + struct display_params + { + uint16_t vcount; /* most recent VCOUNT */ + uint16_t veblnk, vsblnk; /* start/end of VBLANK */ + uint16_t heblnk, hsblnk; /* start/end of HBLANK */ + uint16_t rowaddr, coladdr; /* row/column addresses */ + uint8_t yoffset; /* y offset from addresses */ + uint8_t enabled; /* video enabled */ + }; + + typedef device_delegate<void (screen_device &screen, bitmap_ind16 &bitmap, int scanline, const display_params *params)> scanline_ind16_cb_delegate; + typedef device_delegate<void (screen_device &screen, bitmap_rgb32 &bitmap, int scanline, const display_params *params)> scanline_rgb32_cb_delegate; + typedef device_delegate<void (address_space &space, offs_t address, uint16_t *shiftreg)> to_shiftreg_cb_delegate; + typedef device_delegate<void (address_space &space, offs_t address, uint16_t *shiftreg)> from_shiftreg_cb_delegate; static void set_halt_on_reset(device_t &device, bool halt_on_reset) { downcast<tms340x0_device &>(device).m_halt_on_reset = halt_on_reset; } static void set_pixel_clock(device_t &device, uint32_t pixclock) { downcast<tms340x0_device &>(device).m_pixclock = pixclock; } static void set_pixels_per_clock(device_t &device, int pixperclock) { downcast<tms340x0_device &>(device).m_pixperclock = pixperclock; } static void set_scanline_ind16_callback(device_t &device, scanline_ind16_cb_delegate callback) { downcast<tms340x0_device &>(device).m_scanline_ind16_cb = callback; } static void set_scanline_rgb32_callback(device_t &device, scanline_rgb32_cb_delegate callback) { downcast<tms340x0_device &>(device).m_scanline_rgb32_cb = callback; } - template<class _Object> static devcb_base &set_output_int_callback(device_t &device, _Object object) { return downcast<tms340x0_device &>(device).m_output_int_cb.set_callback(object); } + template <class Object> static devcb_base &set_output_int_callback(device_t &device, Object &&cb) { return downcast<tms340x0_device &>(device).m_output_int_cb.set_callback(std::forward<Object>(cb)); } static void set_to_shiftreg_callback(device_t &device, to_shiftreg_cb_delegate callback) { downcast<tms340x0_device &>(device).m_to_shiftreg_cb = callback; } static void set_from_shiftreg_callback(device_t &device, from_shiftreg_cb_delegate callback) { downcast<tms340x0_device &>(device).m_from_shiftreg_cb = callback; } - void get_display_params(tms34010_display_params *params); + void get_display_params(display_params *params); void tms34010_state_postload(); uint32_t tms340x0_ind16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -263,6 +185,80 @@ public: TIMER_CALLBACK_MEMBER(scanline_callback); protected: + enum + { + REG020_VESYNC, + REG020_HESYNC, + REG020_VEBLNK, + REG020_HEBLNK, + REG020_VSBLNK, + REG020_HSBLNK, + REG020_VTOTAL, + REG020_HTOTAL, + REG020_DPYCTL, /* matches 010 */ + REG020_DPYSTRT, /* matches 010 */ + REG020_DPYINT, /* matches 010 */ + REG020_CONTROL, /* matches 010 */ + REG020_HSTDATA, /* matches 010 */ + REG020_HSTADRL, /* matches 010 */ + REG020_HSTADRH, /* matches 010 */ + REG020_HSTCTLL, /* matches 010 */ + + REG020_HSTCTLH, /* matches 010 */ + REG020_INTENB, /* matches 010 */ + REG020_INTPEND, /* matches 010 */ + REG020_CONVSP, /* matches 010 */ + REG020_CONVDP, /* matches 010 */ + REG020_PSIZE, /* matches 010 */ + REG020_PMASKL, + REG020_PMASKH, + REG020_CONVMP, + REG020_CONTROL2, + REG020_CONFIG, + REG020_DPYTAP, /* matches 010 */ + REG020_VCOUNT, + REG020_HCOUNT, + REG020_DPYADR, /* matches 010 */ + REG020_REFADR, + + REG020_DPYSTL, + REG020_DPYSTH, + REG020_DPYNXL, + REG020_DPYNXH, + REG020_DINCL, + REG020_DINCH, + REG020_RES0, + REG020_HESERR, + REG020_RES1, + REG020_RES2, + REG020_RES3, + REG020_RES4, + REG020_SCOUNT, + REG020_BSFLTST, + REG020_DPYMSK, + REG020_RES5, + + REG020_SETVCNT, + REG020_SETHCNT, + REG020_BSFLTDL, + REG020_BSFLTDH, + REG020_RES6, + REG020_RES7, + REG020_RES8, + REG020_RES9, + REG020_IHOST1L, + REG020_IHOST1H, + REG020_IHOST2L, + REG020_IHOST2H, + REG020_IHOST3L, + REG020_IHOST3H, + REG020_IHOST4L, + REG020_IHOST4H + }; + + // construction/destruction + tms340x0_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + // device-level overrides virtual void device_start() override; virtual void device_reset() override; @@ -1032,7 +1028,7 @@ protected: virtual offs_t disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override; }; -extern const device_type TMS34010; +DECLARE_DEVICE_TYPE(TMS34010, tms34010_device) class tms34020_device : public tms340x0_device { @@ -1049,7 +1045,7 @@ protected: virtual offs_t disasm_disassemble(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override; }; -extern const device_type TMS34020; +DECLARE_DEVICE_TYPE(TMS34020, tms34020_device) @@ -1067,4 +1063,4 @@ extern const device_type TMS34020; CPU_DISASSEMBLE( tms34010 ); CPU_DISASSEMBLE( tms34020 ); -#endif /* __TMS34010_H__ */ +#endif // MAME_CPU_TMS34010_TMS34010_H |