summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/includes/nc.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/includes/nc.h')
-rw-r--r--src/mame/includes/nc.h125
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