// license:BSD-3-Clause // copyright-holders:Ryan Holtz /*********************************************************************** Fujitsu MB88303 NMOS Television Display Controller (TVDC) emulation ************************************************************************ _____ _____ /RESET 1 |* \_/ | 22 Vcc DO0 2 | | 21 DA7 DO1 3 | | 20 DA6 DO2 4 | | 19 DA5 VOW 5 | | 18 DA4 /VOB 6 | MB88303 | 17 DA3 /VSYNC 7 | | 16 DA2 /HSYNC 8 | | 15 DA1 EX 9 | | 14 DA0 X 10 | | 13 ADM Vss 11 |_____________| 12 LDI ************************************************************************/ #ifndef MAME_VIDEO_MB88303_H #define MAME_VIDEO_MB88303_H #pragma once //************************************************************************** // TYPE DEFINITIONS //************************************************************************** // ======================> mb88303_device class mb88303_device : public device_t { public: static constexpr unsigned VISIBLE_COLUMNS = 20; static constexpr unsigned VISIBLE_LINES = 9; // construction/destruction mb88303_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); auto vow_callback() { return m_write_vow.bind(); } auto vobn_callback() { return m_write_vobn.bind(); } auto do_callback() { return m_write_do.bind(); } DECLARE_WRITE8_MEMBER(da_w); DECLARE_WRITE_LINE_MEMBER(adm_w); DECLARE_WRITE_LINE_MEMBER(reset_n_w); DECLARE_WRITE_LINE_MEMBER(ldi_w); DECLARE_WRITE_LINE_MEMBER(hsync_n_w); DECLARE_WRITE_LINE_MEMBER(vsync_n_w); void update_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect); protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; private: enum { HSZ0 = 0x01, HSZ1 = 0x02, VSZ0 = 0x04, VSZ1 = 0x08, BLK = 0x10, BLKB = 0x20, BLINK = 0x40, HSZ0_BIT = 0, HSZ1_BIT = 1, VSZ0_BIT = 2, VSZ1_BIT = 3, BLK_BIT = 4, BLKB_BIT = 5, BLINK_BIT = 6, }; void hdpr_w(uint8_t data); // Horizontal Display Position Register void vdpr_w(uint8_t data); // Vertical Display Position Register void dcr_w(uint8_t data); // Display Control Register void gor_w(uint8_t data); // General Output Register void process_data(); bool blank_display(); bool show_background(); bool enable_blinking(); uint8_t hsize(); uint8_t vsize(); devcb_write_line m_write_vow; devcb_write_line m_write_vobn; devcb_write8 m_write_do; uint8_t m_da; uint8_t m_adm; uint8_t m_reset_n; uint8_t m_ldi; uint8_t m_hsync_n; uint8_t m_vsync_n; uint8_t m_display_mem[180]; uint8_t m_horiz_display_pos; uint8_t m_vert_display_pos; uint8_t m_display_ctrl; uint8_t m_general_out; uint8_t m_address; bool m_addr_inc_mode; static const uint8_t s_character_data[0x40][7]; }; // device type definition DECLARE_DEVICE_TYPE(MB88303, mb88303_device) #endif // MAME_VIDEO_MB88303_H