diff options
Diffstat (limited to 'src/mame/includes/nc.h')
-rw-r--r-- | src/mame/includes/nc.h | 125 |
1 files changed, 84 insertions, 41 deletions
diff --git a/src/mame/includes/nc.h b/src/mame/includes/nc.h index 39c51be1b2d..985bb7aec0b 100644 --- a/src/mame/includes/nc.h +++ b/src/mame/includes/nc.h @@ -30,17 +30,16 @@ #define NC200_NUM_COLOURS 4 -enum -{ - NC_TYPE_1xx, /* nc100/nc150 */ - NC_TYPE_200 /* nc200 */ -}; - - class nc_state : public driver_device { public: - nc_state(const machine_config &mconfig, device_type type, const char *tag) : + enum nc_type + { + NC_TYPE_1xx, // nc100/nc150 + NC_TYPE_200 // nc200 + }; + + nc_state(const machine_config &mconfig, device_type type, const char *tag, nc_type variant) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_ram(*this, RAM_TAG), @@ -50,7 +49,8 @@ public: m_card(*this, "cardslot"), m_uart(*this, "uart"), m_uart_clock(*this, "uart_clock"), - m_nvram(*this, "nvram") + m_nvram(*this, "nvram"), + m_nc_type(variant) { } @@ -63,57 +63,34 @@ public: DECLARE_WRITE8_MEMBER(nc_sound_w); DECLARE_WRITE8_MEMBER(nc_uart_control_w); DECLARE_WRITE8_MEMBER(nc100_display_memory_start_w); - DECLARE_WRITE8_MEMBER(nc100_uart_control_w); - DECLARE_WRITE8_MEMBER(nc100_poweroff_control_w); - DECLARE_READ8_MEMBER(nc100_card_battery_status_r); - DECLARE_WRITE8_MEMBER(nc100_memory_card_wait_state_w); - DECLARE_READ8_MEMBER(nc200_card_battery_status_r); - DECLARE_READ8_MEMBER(nc200_printer_status_r); - DECLARE_WRITE8_MEMBER(nc200_uart_control_w); - DECLARE_WRITE8_MEMBER(nc200_memory_card_wait_state_w); - DECLARE_WRITE8_MEMBER(nc200_poweroff_control_w); DECLARE_PALETTE_INIT(nc); - DECLARE_MACHINE_START(nc200); - DECLARE_MACHINE_RESET(nc200); - uint32_t screen_update_nc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(nc_keyboard_timer_callback); TIMER_DEVICE_CALLBACK_MEMBER(dummy_timer_callback); - DECLARE_WRITE_LINE_MEMBER(nc100_tc8521_alarm_callback); - DECLARE_WRITE_LINE_MEMBER(nc100_txrdy_callback); - DECLARE_WRITE_LINE_MEMBER(nc100_rxrdy_callback); DECLARE_WRITE_LINE_MEMBER(write_uart_clock); - DECLARE_WRITE_LINE_MEMBER(write_nc100_centronics_ack); - DECLARE_WRITE_LINE_MEMBER(write_nc200_centronics_ack); DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); - DECLARE_WRITE_LINE_MEMBER(nc200_txrdy_callback); - DECLARE_WRITE_LINE_MEMBER(nc200_rxrdy_callback); - DECLARE_WRITE_LINE_MEMBER(nc200_fdc_interrupt); void init_nc(); DECLARE_DEVICE_IMAGE_LOAD_MEMBER( nc_pcmcia_card ); DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( nc_pcmcia_card ); - void nc200(machine_config &config); - void nc100(machine_config &config); - void nc100_io(address_map &map); - void nc200_io(address_map &map); - void nc_map(address_map &map); protected: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; + void nc_base(machine_config &config); + void nc_map(address_map &map); + + uint32_t screen_update_nc(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int height, int width, int const (&pens)[2]); + void nc_update_interrupts(); + private: - void nc200_video_set_backlight(int state); int card_calculate_mask(int size); void set_card_present_state(int state); - void nc_update_interrupts(); void nc_refresh_memory_bank_config(int bank); void nc_refresh_memory_config(); - void nc_common_init_machine(); void nc_sound_update(int channel); - void nc200_refresh_uart_interrupt(); public: // HACK FOR MC6845 required_device<cpu_device> m_maincpu; @@ -140,17 +117,83 @@ public: // HACK FOR MC6845 int m_sound_channel_periods[2]; int m_previous_inputport_10_state; int m_previous_alarm_state; - uint8_t m_nc200_uart_interrupt_irq; memory_region *m_card_ram; int m_membank_card_ram_mask; int m_card_size; unsigned long m_display_memory_start; - uint8_t m_type; - int m_nc200_backlight; + const nc_type m_nc_type; int m_centronics_ack; int m_centronics_busy; }; +class nc100_state : public nc_state +{ +public: + nc100_state(const machine_config &mconfig, device_type type, const char *tag) : + nc_state(mconfig, type, tag, NC_TYPE_1xx) + { + } + + void nc100(machine_config &config); + +protected: + DECLARE_WRITE8_MEMBER(nc100_uart_control_w); + DECLARE_WRITE8_MEMBER(nc100_poweroff_control_w); + DECLARE_READ8_MEMBER(nc100_card_battery_status_r); + DECLARE_WRITE8_MEMBER(nc100_memory_card_wait_state_w); + + DECLARE_WRITE_LINE_MEMBER(nc100_tc8521_alarm_callback); + DECLARE_WRITE_LINE_MEMBER(nc100_txrdy_callback); + DECLARE_WRITE_LINE_MEMBER(nc100_rxrdy_callback); + DECLARE_WRITE_LINE_MEMBER(write_nc100_centronics_ack); + + virtual void machine_reset() override; + + void nc100_io(address_map &map); + + uint32_t screen_update_nc100(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); +}; + + + +class nc200_state : public nc_state +{ +public: + nc200_state(const machine_config &mconfig, device_type type, const char *tag) : + nc_state(mconfig, type, tag, NC_TYPE_200) + { + } + + void nc200(machine_config &config); + +protected: + DECLARE_WRITE8_MEMBER(nc200_irq_status_w); + DECLARE_READ8_MEMBER(nc200_card_battery_status_r); + DECLARE_READ8_MEMBER(nc200_printer_status_r); + DECLARE_WRITE8_MEMBER(nc200_uart_control_w); + DECLARE_WRITE8_MEMBER(nc200_memory_card_wait_state_w); + DECLARE_WRITE8_MEMBER(nc200_poweroff_control_w); + + DECLARE_WRITE_LINE_MEMBER(write_nc200_centronics_ack); + DECLARE_WRITE_LINE_MEMBER(nc200_txrdy_callback); + DECLARE_WRITE_LINE_MEMBER(nc200_rxrdy_callback); + DECLARE_WRITE_LINE_MEMBER(nc200_fdc_interrupt); + + virtual void machine_reset() override; + + uint32_t screen_update_nc200(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + void nc200_io(address_map &map); + +private: + void nc200_video_set_backlight(int state); + void nc200_refresh_uart_interrupt(); + + uint8_t m_nc200_uart_interrupt_irq; + int m_nc200_backlight; +}; + + #endif // MAME_INCLUDES_NC_H |