1 // license:BSD-3-Clause 2 // copyright-holders:Krzysztof Strzecha 3 /***************************************************************************** 4 * 5 * includes/pmd85.h 6 * 7 ****************************************************************************/ 8 #ifndef MAME_INCLUDES_PMD85_H 9 #define MAME_INCLUDES_PMD85_H 10 11 #pragma once 12 13 #include "machine/i8251.h" 14 #include "machine/pit8253.h" 15 #include "machine/i8255.h" 16 #include "imagedev/cassette.h" 17 #include "sound/spkrdev.h" 18 #include "machine/ram.h" 19 #include "emupal.h" 20 21 22 class pmd85_state : public driver_device 23 { 24 public: pmd85_state(const machine_config & mconfig,device_type type,const char * tag)25 pmd85_state(const machine_config &mconfig, device_type type, const char *tag) 26 : driver_device(mconfig, type, tag) 27 , m_maincpu(*this, "maincpu") 28 , m_rom(*this, "maincpu") 29 , m_ram(*this, RAM_TAG) 30 , m_cassette(*this, "cassette") 31 , m_speaker(*this, "speaker") 32 , m_pit(*this, "pit") 33 , m_uart(*this, "uart") 34 , m_ppi0(*this, "ppi0") 35 , m_ppi1(*this, "ppi1") 36 , m_ppi2(*this, "ppi2") 37 , m_ppi3(*this, "ppi3") 38 , m_bank(*this, "bank%d", 0U) 39 , m_io_dsw0(*this, "DSW0") 40 , m_palette(*this, "palette") 41 , m_io_keyboard(*this, "KEY%u", 0U) 42 , m_leds(*this, "led%u", 0U) 43 { } 44 45 void pmd85(machine_config &config, bool with_uart = true); 46 void pmd851(machine_config &config); 47 void pmd853(machine_config &config); 48 void pmd852a(machine_config &config); 49 void alfa(machine_config &config); 50 void c2717(machine_config &config); 51 void mato(machine_config &config); 52 53 void init_mato(); 54 void init_pmd852a(); 55 void init_pmd851(); 56 void init_pmd852(); 57 void init_pmd853(); 58 void init_alfa(); 59 void init_c2717(); 60 61 DECLARE_INPUT_CHANGED_MEMBER(pmd85_reset); 62 63 private: 64 enum 65 { 66 TIMER_CASSETTE 67 }; 68 69 bool m_txd, m_rts; 70 uint8_t m_rom_module_present; 71 uint8_t m_ppi_port_outputs[4][3]; 72 uint8_t m_startup_mem_map; 73 uint8_t m_pmd853_memory_mapping; 74 bool m_previous_level; 75 bool m_clk_level; 76 bool m_clk_level_tape; 77 uint8_t m_model; 78 emu_timer * m_cassette_timer; 79 void (pmd85_state::*update_memory)(); 80 uint8_t io_r(offs_t offset); 81 void io_w(offs_t offset, uint8_t data); 82 uint8_t mato_io_r(offs_t offset); 83 void mato_io_w(offs_t offset, uint8_t data); 84 85 virtual void machine_reset() override; 86 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 87 TIMER_CALLBACK_MEMBER(cassette_timer_callback); 88 uint8_t ppi0_porta_r(); 89 uint8_t ppi0_portb_r(); 90 uint8_t ppi0_portc_r(); 91 void ppi0_porta_w(uint8_t data); 92 void ppi0_portb_w(uint8_t data); 93 void ppi0_portc_w(uint8_t data); 94 uint8_t mato_ppi0_portb_r(); 95 uint8_t mato_ppi0_portc_r(); 96 void mato_ppi0_portc_w(uint8_t data); 97 uint8_t ppi1_porta_r(); 98 uint8_t ppi1_portb_r(); 99 uint8_t ppi1_portc_r(); 100 void ppi1_porta_w(uint8_t data); 101 void ppi1_portb_w(uint8_t data); 102 void ppi1_portc_w(uint8_t data); 103 uint8_t ppi2_porta_r(); 104 uint8_t ppi2_portb_r(); 105 uint8_t ppi2_portc_r(); 106 void ppi2_porta_w(uint8_t data); 107 void ppi2_portb_w(uint8_t data); 108 void ppi2_portc_w(uint8_t data); 109 uint8_t ppi3_porta_r(); 110 uint8_t ppi3_portb_r(); 111 uint8_t ppi3_portc_r(); 112 void ppi3_porta_w(uint8_t data); 113 void ppi3_portb_w(uint8_t data); 114 void ppi3_portc_w(uint8_t data); 115 116 void alfa_mem(address_map &map); 117 void c2717_mem(address_map &map); 118 void mato_io(address_map &map); 119 void mato_mem(address_map &map); 120 void pmd852a_mem(address_map &map); 121 void pmd853_mem(address_map &map); 122 void pmd85_io(address_map &map); 123 void pmd85_mem(address_map &map); 124 125 virtual void machine_start() override; 126 127 void pmd851_update_memory(); 128 void pmd852a_update_memory(); 129 void pmd853_update_memory(); 130 void alfa_update_memory(); 131 void mato_update_memory(); 132 void c2717_update_memory(); 133 void common_driver_init(); 134 virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; 135 136 required_device<cpu_device> m_maincpu; 137 required_region_ptr<u8> m_rom; 138 required_device<ram_device> m_ram; 139 required_device<cassette_image_device> m_cassette; 140 required_device<speaker_sound_device> m_speaker; 141 required_device<pit8253_device> m_pit; 142 optional_device<i8251_device> m_uart; 143 optional_device<i8255_device> m_ppi0; 144 optional_device<i8255_device> m_ppi1; 145 optional_device<i8255_device> m_ppi2; 146 optional_device<i8255_device> m_ppi3; 147 optional_memory_bank_array<17> m_bank; 148 optional_ioport m_io_dsw0; 149 required_device<palette_device> m_palette; 150 optional_ioport_array<16> m_io_keyboard; 151 output_finder<3> m_leds; 152 }; 153 154 155 #endif // MAME_INCLUDES_PMD85_H 156