1 // license:GPL-2.0+ 2 // copyright-holders:Kevin Thacker 3 /***************************************************************************** 4 * 5 * includes/pcw16.h 6 * 7 ****************************************************************************/ 8 #ifndef MAME_INCLUDES_PCW16_H 9 #define MAME_INCLUDES_PCW16_H 10 11 #pragma once 12 13 #include "cpu/z80/z80.h" 14 #include "machine/upd765.h" /* FDC superio */ 15 #include "machine/pc_lpt.h" /* PC-Parallel Port */ 16 #include "machine/pckeybrd.h" /* PC-AT keyboard */ 17 #include "machine/upd765.h" /* FDC superio */ 18 #include "machine/ins8250.h" /* pc com port */ 19 #include "sound/beep.h" /* pcw/pcw16 beeper */ 20 #include "machine/intelfsh.h" 21 #include "formats/pc_dsk.h" 22 #include "imagedev/floppy.h" 23 #include "machine/ram.h" 24 #include "machine/timer.h" 25 #include "emupal.h" 26 27 #define PCW16_BORDER_HEIGHT 8 28 #define PCW16_BORDER_WIDTH 8 29 #define PCW16_NUM_COLOURS 32 30 #define PCW16_DISPLAY_WIDTH 640 31 #define PCW16_DISPLAY_HEIGHT 480 32 33 #define PCW16_SCREEN_WIDTH (PCW16_DISPLAY_WIDTH + (PCW16_BORDER_WIDTH<<1)) 34 #define PCW16_SCREEN_HEIGHT (PCW16_DISPLAY_HEIGHT + (PCW16_BORDER_HEIGHT<<1)) 35 36 37 class pcw16_state : public driver_device 38 { 39 public: pcw16_state(const machine_config & mconfig,device_type type,const char * tag)40 pcw16_state(const machine_config &mconfig, device_type type, const char *tag) : 41 driver_device(mconfig, type, tag), 42 m_maincpu(*this, "maincpu"), 43 m_flash0(*this, "flash0"), 44 m_flash1(*this, "flash1"), 45 m_fdc(*this, "fdc"), 46 m_uart2(*this, "ns16550_2"), 47 m_beeper(*this, "beeper"), 48 m_ram(*this, RAM_TAG), 49 m_keyboard(*this, "at_keyboard"), 50 m_region_rom(*this, "maincpu"), 51 m_io_extra(*this, "EXTRA") 52 { } 53 54 void pcw16(machine_config &config); 55 56 protected: 57 void pcw16_palette_w(offs_t offset, uint8_t data); 58 uint8_t pcw16_bankhw_r(offs_t offset); 59 void pcw16_bankhw_w(offs_t offset, uint8_t data); 60 void pcw16_video_control_w(uint8_t data); 61 uint8_t pcw16_keyboard_data_shift_r(); 62 void pcw16_keyboard_data_shift_w(uint8_t data); 63 uint8_t pcw16_keyboard_status_r(); 64 void pcw16_keyboard_control_w(uint8_t data); 65 uint8_t rtc_year_invalid_r(); 66 uint8_t rtc_month_r(); 67 uint8_t rtc_days_r(); 68 uint8_t rtc_hours_r(); 69 uint8_t rtc_minutes_r(); 70 uint8_t rtc_seconds_r(); 71 uint8_t rtc_256ths_seconds_r(); 72 void rtc_control_w(uint8_t data); 73 void rtc_seconds_w(uint8_t data); 74 void rtc_minutes_w(uint8_t data); 75 void rtc_hours_w(uint8_t data); 76 void rtc_days_w(uint8_t data); 77 void rtc_month_w(uint8_t data); 78 void rtc_year_w(uint8_t data); 79 uint8_t pcw16_system_status_r(); 80 uint8_t pcw16_timer_interrupt_counter_r(); 81 void pcw16_system_control_w(uint8_t data); 82 uint8_t pcw16_mem_r(offs_t offset); 83 void pcw16_mem_w(offs_t offset, uint8_t data); 84 void pcw16_keyboard_init(); 85 void pcw16_keyboard_refresh_outputs(); 86 void pcw16_keyboard_set_clock_state(int state); 87 void pcw16_keyboard_int(int state); 88 void pcw16_keyboard_reset(); 89 int pcw16_keyboard_can_transmit(); 90 void pcw16_keyboard_signal_byte_received(int data); 91 void pcw16_refresh_ints(); 92 void rtc_setup_max_days(); 93 uint8_t pcw16_read_mem(uint8_t bank, uint16_t offset); 94 void pcw16_write_mem(uint8_t bank, uint16_t offset, uint8_t data); 95 uint8_t read_bank_data(uint8_t type, uint16_t offset); 96 void write_bank_data(uint8_t type, uint16_t offset, uint8_t data); 97 virtual void machine_start() override; 98 virtual void machine_reset() override; 99 virtual void video_start() override; 100 void pcw16_colours(palette_device &palette) const; 101 uint32_t screen_update_pcw16(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 102 TIMER_DEVICE_CALLBACK_MEMBER(pcw16_timer_callback); 103 TIMER_DEVICE_CALLBACK_MEMBER(rtc_timer_callback); 104 DECLARE_WRITE_LINE_MEMBER(pcw16_com_interrupt_1); 105 DECLARE_WRITE_LINE_MEMBER(pcw16_com_interrupt_2); 106 DECLARE_WRITE_LINE_MEMBER(pcw16_keyboard_callback); 107 108 void trigger_fdc_int(); 109 DECLARE_WRITE_LINE_MEMBER( fdc_interrupt ); 110 DECLARE_FLOPPY_FORMATS( floppy_formats ); 111 inline void pcw16_plot_pixel(bitmap_ind16 &bitmap, int x, int y, uint32_t color); 112 void pcw16_vh_decode_mode0(bitmap_ind16 &bitmap, int x, int y, uint8_t byte); 113 void pcw16_vh_decode_mode1(bitmap_ind16 &bitmap, int x, int y, uint8_t byte); 114 void pcw16_vh_decode_mode2(bitmap_ind16 &bitmap, int x, int y, uint8_t byte); 115 116 void pcw16_io(address_map &map); 117 void pcw16_map(address_map &map); 118 119 private: 120 required_device<cpu_device> m_maincpu; 121 required_device<intel_e28f008sa_device> m_flash0; 122 required_device<intel_e28f008sa_device> m_flash1; 123 required_device<pc_fdc_superio_device> m_fdc; 124 required_device<ns16550_device> m_uart2; 125 required_device<beep_device> m_beeper; 126 required_device<ram_device> m_ram; 127 required_device<at_keyboard_device> m_keyboard; 128 required_memory_region m_region_rom; 129 required_ioport m_io_extra; 130 131 unsigned long m_interrupt_counter; 132 int m_banks[4]; 133 int m_4_bit_port; 134 int m_fdc_int_code; 135 int m_system_status; 136 char *m_mem_ptr[4]; 137 unsigned char m_keyboard_data_shift; 138 int m_keyboard_parity_table[256]; 139 int m_keyboard_bits; 140 int m_keyboard_bits_output; 141 int m_keyboard_state; 142 int m_keyboard_previous_state; 143 unsigned char m_rtc_seconds; 144 unsigned char m_rtc_minutes; 145 unsigned char m_rtc_hours; 146 unsigned char m_rtc_days_max; 147 unsigned char m_rtc_days; 148 unsigned char m_rtc_months; 149 unsigned char m_rtc_years; 150 unsigned char m_rtc_control; 151 unsigned char m_rtc_256ths_seconds; 152 int m_previous_fdc_int_state; 153 int m_colour_palette[16]; 154 int m_video_control; 155 }; 156 157 #endif // MAME_INCLUDES_PCW16_H 158