1 // license:GPL-2.0+ 2 // copyright-holders:Juergen Buchmueller, Dirk Best 3 /****************************************************************************** 4 * Sharp MZ700 5 * 6 * Reference: http://sharpmz.computingmuseum.com 7 * 8 ******************************************************************************/ 9 #ifndef MAME_INCLUDES_MZ700_H 10 #define MAME_INCLUDES_MZ700_H 11 12 #pragma once 13 14 #include "bus/centronics/ctronics.h" 15 #include "imagedev/cassette.h" 16 #include "machine/bankdev.h" 17 #include "machine/74145.h" 18 #include "machine/i8255.h" 19 #include "machine/pit8253.h" 20 #include "machine/ram.h" 21 #include "machine/timer.h" 22 #include "machine/z80pio.h" 23 #include "sound/spkrdev.h" 24 #include "emupal.h" 25 #include "screen.h" 26 27 class mz_state : public driver_device 28 { 29 public: mz_state(const machine_config & mconfig,device_type type,const char * tag)30 mz_state(const machine_config &mconfig, device_type type, const char *tag) 31 : driver_device(mconfig, type, tag) 32 , m_maincpu(*this, "maincpu") 33 , m_speaker(*this, "speaker") 34 , m_pit(*this, "pit8253") 35 , m_ppi(*this, "ppi8255") 36 , m_cassette(*this, "cassette") 37 , m_centronics(*this, "centronics") 38 , m_ram(*this, RAM_TAG) 39 , m_palette(*this, "palette") 40 , m_screen(*this, "screen") 41 , m_banke(*this, "banke") 42 , m_bankf(*this, "bankf") 43 , m_ls145(*this, "ls145") 44 , m_cursor_timer(*this, "cursor") 45 { } 46 47 void mz800(machine_config &config); 48 void mz700(machine_config &config); 49 50 void init_mz800(); 51 void init_mz700(); 52 53 private: 54 uint8_t mz700_e008_r(); 55 void mz700_e008_w(uint8_t data); 56 uint8_t mz800_bank_0_r(); 57 void mz700_bank_0_w(uint8_t data); 58 void mz800_bank_0_w(uint8_t data); 59 uint8_t mz800_bank_1_r(); 60 void mz700_bank_1_w(uint8_t data); 61 void mz700_bank_2_w(uint8_t data); 62 void mz700_bank_3_w(uint8_t data); 63 void mz700_bank_4_w(uint8_t data); 64 void mz700_bank_5_w(uint8_t data); 65 void mz700_bank_6_w(uint8_t data); 66 uint8_t mz800_crtc_r(); 67 void mz800_write_format_w(uint8_t data); 68 void mz800_read_format_w(uint8_t data); 69 void mz800_display_mode_w(uint8_t data); 70 void mz800_scroll_border_w(uint8_t data); 71 uint8_t mz800_ramdisk_r(); 72 void mz800_ramdisk_w(uint8_t data); 73 void mz800_ramaddr_w(uint8_t data); 74 void mz800_palette_w(uint8_t data); 75 void mz800_cgram_w(offs_t offset, uint8_t data); 76 DECLARE_MACHINE_RESET(mz700); 77 DECLARE_MACHINE_RESET(mz800); 78 virtual void machine_start() override; 79 uint32_t screen_update_mz700(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 80 uint32_t screen_update_mz800(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 81 TIMER_DEVICE_CALLBACK_MEMBER(ne556_cursor_callback); 82 TIMER_DEVICE_CALLBACK_MEMBER(ne556_other_callback); 83 DECLARE_WRITE_LINE_MEMBER(pit_out0_changed); 84 DECLARE_WRITE_LINE_MEMBER(pit_irq_2); 85 uint8_t pio_port_b_r(); 86 uint8_t pio_port_c_r(); 87 void pio_port_a_w(uint8_t data); 88 void pio_port_c_w(uint8_t data); 89 DECLARE_WRITE_LINE_MEMBER(mz800_z80pio_irq); 90 uint8_t mz800_z80pio_port_a_r(); 91 void mz800_z80pio_port_a_w(uint8_t data); 92 DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); 93 DECLARE_WRITE_LINE_MEMBER(write_centronics_perror); 94 95 void mz700_banke(address_map &map); 96 void mz700_io(address_map &map); 97 void mz700_mem(address_map &map); 98 void mz800_bankf(address_map &map); 99 void mz800_io(address_map &map); 100 void mz800_mem(address_map &map); 101 102 int m_mz700; /* 1 if running on an mz700 */ 103 104 int m_cursor_bit; 105 int m_other_timer; 106 107 int m_intmsk; /* PPI8255 pin PC2 */ 108 109 int m_mz700_ram_lock; /* 1 if ram lock is active */ 110 int m_mz700_ram_vram; /* 1 if vram is banked in */ 111 112 /* mz800 specific */ 113 std::unique_ptr<uint8_t[]> m_cgram; 114 uint8_t *m_p_chargen; 115 116 int m_mz700_mode; /* 1 if in mz700 mode */ 117 int m_mz800_ram_lock; /* 1 if lock is active */ 118 int m_mz800_ram_monitor; /* 1 if monitor rom banked in */ 119 120 int m_hires_mode; /* 1 if in 640x200 mode */ 121 int m_screennum; /* screen designation */ 122 123 int m_centronics_busy; 124 int m_centronics_perror; 125 126 uint8_t *m_colorram; 127 std::unique_ptr<uint8_t[]> m_videoram; 128 uint8_t m_speaker_level; 129 uint8_t m_prev_state; 130 uint16_t m_mz800_ramaddr; 131 uint8_t m_mz800_palette[4]; 132 uint8_t m_mz800_palette_bank; 133 134 required_device<cpu_device> m_maincpu; 135 required_device<speaker_sound_device> m_speaker; 136 required_device<pit8253_device> m_pit; 137 required_device<i8255_device> m_ppi; 138 required_device<cassette_image_device> m_cassette; 139 optional_device<centronics_device> m_centronics; 140 required_device<ram_device> m_ram; 141 required_device<palette_device> m_palette; 142 required_device<screen_device> m_screen; 143 optional_device<address_map_bank_device> m_banke; 144 optional_device<address_map_bank_device> m_bankf; 145 146 required_device<ttl74145_device> m_ls145; 147 required_device<timer_device> m_cursor_timer; 148 }; 149 150 #endif // MAME_INCLUDES_MZ700_H 151