1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #pragma once 4 5 #ifndef MAME_INCLUDES_PC8001_H 6 #define MAME_INCLUDES_PC8001_H 7 8 9 #include "cpu/z80/z80.h" 10 #include "imagedev/cassette.h" 11 #include "machine/buffer.h" 12 #include "bus/centronics/ctronics.h" 13 #include "machine/i8257.h" 14 #include "machine/i8255.h" 15 #include "machine/i8251.h" 16 #include "machine/ram.h" 17 #include "machine/upd1990a.h" 18 #include "sound/beep.h" 19 #include "video/upd3301.h" 20 21 #define Z80_TAG "z80" 22 #define I8251_TAG "i8251" 23 #define I8255A_TAG "i8255" 24 #define I8257_TAG "i8257" 25 #define UPD1990A_TAG "upd1990a" 26 #define UPD3301_TAG "upd3301" 27 #define CENTRONICS_TAG "centronics" 28 #define SCREEN_TAG "screen" 29 30 class pc8001_state : public driver_device 31 { 32 public: pc8001_state(const machine_config & mconfig,device_type type,const char * tag)33 pc8001_state(const machine_config &mconfig, device_type type, const char *tag) 34 : driver_device(mconfig, type, tag), 35 m_maincpu(*this, Z80_TAG), 36 m_rtc(*this, UPD1990A_TAG), 37 m_dma(*this, I8257_TAG), 38 m_crtc(*this, UPD3301_TAG), 39 m_cassette(*this, "cassette"), 40 m_centronics(*this, CENTRONICS_TAG), 41 m_cent_data_out(*this, "cent_data_out"), 42 m_beep(*this, "beeper"), 43 m_ram(*this, RAM_TAG), 44 m_rom(*this, Z80_TAG), 45 m_char_rom(*this, UPD3301_TAG) 46 { } 47 48 required_device<cpu_device> m_maincpu; 49 required_device<upd1990a_device> m_rtc; 50 required_device<i8257_device> m_dma; 51 required_device<upd3301_device> m_crtc; 52 required_device<cassette_image_device> m_cassette; 53 required_device<centronics_device> m_centronics; 54 required_device<output_latch_device> m_cent_data_out; 55 required_device<beep_device> m_beep; 56 required_device<ram_device> m_ram; 57 required_memory_region m_rom; 58 required_memory_region m_char_rom; 59 60 virtual void machine_start() override; 61 62 void port10_w(uint8_t data); 63 void port30_w(uint8_t data); 64 uint8_t port40_r(); 65 void port40_w(uint8_t data); 66 DECLARE_WRITE_LINE_MEMBER( hrq_w ); 67 uint8_t dma_mem_r(offs_t offset); 68 69 /* video state */ 70 int m_width80; 71 int m_color; 72 73 int m_centronics_busy; 74 int m_centronics_ack; 75 76 DECLARE_WRITE_LINE_MEMBER(write_centronics_busy); 77 DECLARE_WRITE_LINE_MEMBER(write_centronics_ack); 78 UPD3301_DRAW_CHARACTER_MEMBER( pc8001_display_pixels ); 79 void pc8001(machine_config &config); 80 void pc8001_io(address_map &map); 81 void pc8001_mem(address_map &map); 82 }; 83 84 class pc8001mk2_state : public pc8001_state 85 { 86 public: pc8001mk2_state(const machine_config & mconfig,device_type type,const char * tag)87 pc8001mk2_state(const machine_config &mconfig, device_type type, const char *tag) 88 : pc8001_state(mconfig, type, tag), 89 m_kanji_rom(*this, "kanji") 90 { } 91 92 required_memory_region m_kanji_rom; 93 94 void port31_w(uint8_t data); 95 void pc8001mk2(machine_config &config); 96 void pc8001mk2_io(address_map &map); 97 void pc8001mk2_mem(address_map &map); 98 }; 99 100 #endif 101