1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 #ifndef MAME_INCLUDES_PROF80_H
4 #define MAME_INCLUDES_PROF80_H
5 
6 #pragma once
7 
8 #include "bus/ecbbus/ecbbus.h"
9 #include "bus/rs232/rs232.h"
10 #include "cpu/z80/z80.h"
11 #include "imagedev/floppy.h"
12 #include "machine/z80daisy.h"
13 #include "machine/prof80mmu.h"
14 #include "machine/74259.h"
15 #include "machine/ram.h"
16 #include "machine/rescap.h"
17 #include "machine/upd1990a.h"
18 #include "machine/upd765.h"
19 
20 #define Z80_TAG         "z1"
21 #define UPD765_TAG      "z38"
22 #define UPD1990A_TAG    "z43"
23 
24 // ------------------------------------------------------------------------
25 
26 #define UNIO_Z80STI_TAG         "z5"
27 #define UNIO_Z80SIO_TAG         "z15"
28 #define UNIO_Z80PIO_TAG         "z13"
29 #define UNIO_CENTRONICS1_TAG    "n3"
30 #define UNIO_CENTRONICS2_TAG    "n4"
31 
32 class prof80_state : public driver_device
33 {
34 public:
prof80_state(const machine_config & mconfig,device_type type,const char * tag)35 	prof80_state(const machine_config &mconfig, device_type type, const char *tag)
36 		: driver_device(mconfig, type, tag)
37 		, m_maincpu(*this, Z80_TAG)
38 		, m_mmu(*this, "mmu")
39 		, m_rtc(*this, UPD1990A_TAG)
40 		, m_fdc(*this, UPD765_TAG)
41 		, m_ram(*this, RAM_TAG)
42 		, m_floppy(*this, UPD765_TAG":%u", 0U)
43 		, m_ecb(*this, "ecbbus")
44 		, m_rs232a(*this, "rs232a")
45 		, m_rs232b(*this, "rs232b")
46 		, m_flra(*this, "z44")
47 		, m_flrb(*this, "z45")
48 		, m_rom(*this, Z80_TAG)
49 		, m_j4(*this, "J4")
50 		, m_j5(*this, "J5")
51 	{ }
52 
53 	void prof80(machine_config &config);
54 
55 private:
56 	required_device<cpu_device> m_maincpu;
57 	required_device<prof80_mmu_device> m_mmu;
58 	required_device<upd1990a_device> m_rtc;
59 	required_device<upd765a_device> m_fdc;
60 	required_device<ram_device> m_ram;
61 	required_device_array<floppy_connector, 2> m_floppy;
62 	required_device<ecbbus_device> m_ecb;
63 	required_device<rs232_port_device> m_rs232a;
64 	required_device<rs232_port_device> m_rs232b;
65 	required_device<ls259_device> m_flra;
66 	required_device<ls259_device> m_flrb;
67 	required_memory_region m_rom;
68 	required_ioport m_j4;
69 	required_ioport m_j5;
70 
71 	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
72 	virtual void machine_start() override;
73 
74 	enum
75 	{
76 		TIMER_ID_MOTOR
77 	};
78 
79 	void flr_w(uint8_t data);
80 	uint8_t status_r();
81 	uint8_t status2_r();
82 
83 	void motor(int mon);
84 
85 	DECLARE_WRITE_LINE_MEMBER(ready_w);
86 	DECLARE_WRITE_LINE_MEMBER(inuse_w);
87 	DECLARE_WRITE_LINE_MEMBER(motor_w);
88 	DECLARE_WRITE_LINE_MEMBER(select_w);
89 	DECLARE_WRITE_LINE_MEMBER(mini_w);
90 	DECLARE_WRITE_LINE_MEMBER(mstop_w);
91 
92 	// floppy state
93 	int m_motor;
94 	int m_ready;
95 	int m_select;
96 
97 	// timers
98 	emu_timer   *m_floppy_motor_off_timer;
99 
100 	void prof80_io(address_map &map);
101 	void prof80_mem(address_map &map);
102 	void prof80_mmu(address_map &map);
103 };
104 
105 #endif
106