1 // license:BSD-3-Clause 2 // copyright-holders:Curt Coder 3 #ifndef MAME_INCLUDES_MPZ80_H 4 #define MAME_INCLUDES_MPZ80_H 5 6 #pragma once 7 8 #include "bus/s100/s100.h" 9 #include "cpu/z80/z80.h" 10 #include "machine/ram.h" 11 12 #define Z80_TAG "17a" 13 #define AM9512_TAG "17d" 14 #define S100_TAG "s100" 15 16 class mpz80_state : public driver_device 17 { 18 public: mpz80_state(const machine_config & mconfig,device_type type,const char * tag)19 mpz80_state(const machine_config &mconfig, device_type type, const char *tag) 20 : driver_device(mconfig, type, tag), 21 m_maincpu(*this, Z80_TAG), 22 m_ram(*this, RAM_TAG), 23 m_s100(*this, S100_TAG), 24 m_rom(*this, Z80_TAG), 25 m_map_ram(*this, "map_ram"), 26 m_16c(*this, "16C"), 27 m_nmi(1), 28 m_pint(1), 29 m_int_pend(0), 30 m_pretrap(0), 31 m_trap(0), 32 m_trap_reset(0), 33 m_trap_void(1), 34 m_trap_halt(1), 35 m_trap_int(1), 36 m_trap_stop(1), 37 m_trap_aux(1) 38 { } 39 40 void mpz80(machine_config &config); 41 42 private: 43 required_device<cpu_device> m_maincpu; 44 required_device<ram_device> m_ram; 45 required_device<s100_bus_device> m_s100; 46 required_memory_region m_rom; 47 optional_shared_ptr<uint8_t> m_map_ram; 48 required_ioport m_16c; 49 50 virtual void machine_start() override; 51 virtual void machine_reset() override; 52 53 inline offs_t get_address(offs_t offset); 54 inline offs_t get_io_address(offs_t offset); 55 56 inline void check_traps(); 57 inline void check_interrupt(); 58 59 uint8_t mmu_r(offs_t offset); 60 void mmu_w(offs_t offset, uint8_t data); 61 uint8_t mmu_io_r(offs_t offset); 62 void mmu_io_w(offs_t offset, uint8_t data); 63 uint8_t trap_addr_r(); 64 uint8_t keyboard_r(); 65 uint8_t switch_r(); 66 uint8_t status_r(); 67 void disp_seg_w(uint8_t data); 68 void disp_col_w(uint8_t data); 69 void task_w(uint8_t data); 70 void mask_w(uint8_t data); 71 DECLARE_WRITE_LINE_MEMBER( s100_pint_w ); 72 DECLARE_WRITE_LINE_MEMBER( s100_nmi_w ); 73 74 // memory state 75 uint32_t m_addr; 76 uint8_t m_task; 77 uint8_t m_mask; 78 79 // interrupt state 80 int m_nmi; 81 int m_pint; 82 int m_int_pend; 83 84 // trap state 85 uint8_t m_pretrap_addr; 86 uint8_t m_trap_addr; 87 uint8_t m_status; 88 uint16_t m_trap_start; 89 int m_pretrap; 90 int m_trap; 91 int m_trap_reset; 92 int m_trap_void; 93 int m_trap_halt; 94 int m_trap_int; 95 int m_trap_stop; 96 int m_trap_aux; 97 void init_mpz80(); 98 void mpz80_io(address_map &map); 99 void mpz80_mem(address_map &map); 100 }; 101 102 #endif // MAME_INCLUDES_MPZ80_H 103