diff options
Diffstat (limited to 'src/devices/bus/mm2/crtc186.h')
| -rw-r--r-- | src/devices/bus/mm2/crtc186.h | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/src/devices/bus/mm2/crtc186.h b/src/devices/bus/mm2/crtc186.h new file mode 100644 index 00000000000..e9207866841 --- /dev/null +++ b/src/devices/bus/mm2/crtc186.h @@ -0,0 +1,96 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Nokia MikroMikko 2 CRTC186 emulation + +*********************************************************************/ + +#ifndef MAME_NOKIA_CRTC186_H +#define MAME_NOKIA_CRTC186_H + +#pragma once + +#include "exp.h" +#include "emupal.h" +#include "mm2kb.h" +#include "screen.h" +#include "machine/clock.h" +#include "machine/i8251.h" +#include "machine/timer.h" +#include "video/crt9007.h" +#include "video/crt9212.h" + +DECLARE_DEVICE_TYPE(NOKIA_CRTC186, crtc186_device) + +class crtc186_device : public device_t, public device_mikromikko2_expansion_bus_card_interface +{ +public: + crtc186_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + +protected: + virtual const tiny_rom_entry *device_rom_region() const override ATTR_COLD; + virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + virtual void device_start() override ATTR_COLD; + virtual void device_reset() override ATTR_COLD; + +private: + void map(address_map &map) ATTR_COLD; + + void int_w(int state) { m_bus->ir5_w(state); } + + memory_share_creator<uint16_t> m_video_ram; + required_memory_region m_char_rom; + required_memory_region m_attr_rom; + required_device<crt9007_device> m_vpac; + required_device<crt9212_device> m_drb0; + required_device<crt9212_device> m_drb1; + required_device<palette_device> m_palette; + required_device<timer_device> m_timer_vidldsh; + required_device<i8251_device> m_sio; + required_device<mm2_keyboard_device> m_kb; + required_device<screen_device> m_screen; + + void palette(palette_device &palette) const; + + void vpac_mem(address_map &map) ATTR_COLD; + + bitmap_rgb32 m_bitmap; + + uint16_t vpac_r(offs_t offset, uint16_t mem_mask); + void vpac_w(offs_t offset, uint16_t data, uint16_t mem_mask); + void cpl_w(offs_t offset, uint8_t data) { m_cpl = BIT(data, 0); } + void blc_w(offs_t offset, uint8_t data) { m_blc = BIT(data, 0); } + void mode_w(offs_t offset, uint8_t data) { m_mode = BIT(data, 0); set_vidldsh_timer(); } + void modeg_w(offs_t offset, uint8_t data) { m_modeg = BIT(data, 0); set_vidldsh_timer(); } + void c70_50_w(offs_t offset, uint8_t data) { m_c70_50 = BIT(data, 0); } + void cru_w(offs_t offset, uint8_t data) { m_cru = BIT(data, 0); } + void crb_w(offs_t offset, uint8_t data) { m_crb = BIT(data, 0); } + + uint8_t videoram_r(offs_t offset); + void vpac_vlt_w(int state); + void vpac_drb_w(int state); + void vpac_wben_w(int state); + void vpac_cblank_w(int state); + void vpac_slg_w(int state); + void vpac_sld_w(int state); + void vidla_w(uint8_t data); + void drb_attr_w(uint8_t data); + void set_vidldsh_timer(); + + TIMER_DEVICE_CALLBACK_MEMBER( vidldsh_tick ); + + u8 m_vidla; + bool m_cpl; + bool m_blc; + bool m_mode; + bool m_modeg; + bool m_c70_50; + bool m_cru; + bool m_crb; +}; + +#endif // MAME_NOKIA_CRTC186_H |
