// license:BSD-3-Clause // copyright-holders:Felipe Sanches, Sandro Ronco /*************************************************************************** NT7534 LCD controller ***************************************************************************/ #ifndef MAME_VIDEO_NT7534_H #define MAME_VIDEO_NT7534_H #pragma once //************************************************************************** // TYPE DEFINITIONS //************************************************************************** #define NT7534_PIXEL_UPDATE(name) void name(bitmap_ind16 &bitmap, uint8_t line, uint8_t pos, uint8_t y, uint8_t x, int state) // ======================> nt7534_device class nt7534_device : public device_t { public: typedef device_delegate pixel_update_delegate; // construction/destruction nt7534_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); template void set_pixel_update_cb(T &&... args) { m_pixel_update_cb.set(std::forward(args)...); } // device interface virtual DECLARE_WRITE8_MEMBER(write); virtual DECLARE_READ8_MEMBER(read); virtual DECLARE_WRITE8_MEMBER(control_write); virtual DECLARE_READ8_MEMBER(control_read); virtual DECLARE_WRITE8_MEMBER(data_write); virtual DECLARE_READ8_MEMBER(data_read); const uint8_t *render(); virtual uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); protected: nt7534_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; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; private: // internal helper void set_busy_flag(uint16_t usec); void update_nibble(int rs, int rw); // internal state static constexpr device_timer_id TIMER_BUSY = 0; emu_timer * m_busy_timer; pixel_update_delegate m_pixel_update_cb; // pixel update callback bool m_busy_flag; uint8_t m_ddram[9*132]; // internal display data RAM uint8_t m_page; // page address uint16_t m_column; // column address uint16_t m_backup_column; // column address uint8_t m_display_start_line; uint8_t m_dr; // data register uint8_t m_ir; // instruction register bool m_display_on; // display on/off bool m_entire_display_on; bool m_reverse; // Reverse display bool m_read_modify_write; bool m_adc; int m_direction; // auto increment/decrement (-1 or +1) uint8_t m_data_len; // interface data length 4 or 8 bit int m_rs_state; int m_rw_state; bool m_nibble; }; // device type definition DECLARE_DEVICE_TYPE(NT7534, nt7534_device) #endif // MAME_VIDEO_NT7534_H