1 // license:BSD-3-Clause
2 // copyright-holders:Miodrag Milanovic
3 /*****************************************************************************
4  *
5  * includes/poly88.h
6  *
7  ****************************************************************************/
8 #ifndef MAME_INCLUDES_POLY88_H
9 #define MAME_INCLUDES_POLY88_H
10 
11 #pragma once
12 
13 #include "bus/s100/s100.h"
14 #include "machine/bankdev.h"
15 #include "machine/i8251.h"
16 #include "machine/mm5307.h"
17 #include "imagedev/cassette.h"
18 #include "imagedev/snapquik.h"
19 #include "machine/timer.h"
20 
21 class poly88_state : public driver_device
22 {
23 public:
poly88_state(const machine_config & mconfig,device_type type,const char * tag)24 	poly88_state(const machine_config &mconfig, device_type type, const char *tag)
25 		: driver_device(mconfig, type, tag)
26 		, m_maincpu(*this, "maincpu")
27 		, m_onboard_io(*this, "onboard_io")
28 		, m_s100(*this, "s100")
29 		, m_s100_slot(*this, "s100:%u", 1U)
30 		, m_usart(*this, "usart")
31 		, m_brg(*this, "brg")
32 		, m_cassette(*this, "cassette")
33 		, m_onboard_rom(*this, "maincpu")
34 		, m_linec(*this, "CONFIG")
35 		, m_onboard_config(*this, "ONBOARD")
36 	{ }
37 
38 	void poly88(machine_config &config);
39 	void poly8813(machine_config &config);
40 
41 protected:
42 	virtual void machine_start() override;
43 	virtual void machine_reset() override;
44 
45 private:
46 	bool is_onboard(offs_t offset);
47 	uint8_t mem_r(offs_t offset);
48 	void mem_w(offs_t offset, uint8_t data);
49 	uint8_t in_r(offs_t offset);
50 	void out_w(offs_t offset, uint8_t data);
51 	void baud_rate_w(uint8_t data);
52 	void intr_w(uint8_t data);
53 
54 	TIMER_DEVICE_CALLBACK_MEMBER(kansas_r);
55 	DECLARE_WRITE_LINE_MEMBER(cassette_clock_w);
56 	TIMER_DEVICE_CALLBACK_MEMBER(rtc_tick);
57 	DECLARE_WRITE_LINE_MEMBER(vi2_w);
58 	DECLARE_WRITE_LINE_MEMBER(vi5_w);
59 	DECLARE_WRITE_LINE_MEMBER(usart_ready_w);
60 	IRQ_CALLBACK_MEMBER(poly88_irq_callback);
61 	DECLARE_SNAPSHOT_LOAD_MEMBER(snapshot_cb);
62 
63 	void s100_mem(address_map &map);
64 	void s100_io(address_map &map);
65 	void poly88_mem(address_map &map);
66 	void poly88_io(address_map &map);
67 	void poly8813_mem(address_map &map);
68 	void poly8813_io(address_map &map);
69 
70 	required_device<cpu_device> m_maincpu;
71 	required_device<address_map_bank_device> m_onboard_io;
72 	required_device<s100_bus_device> m_s100;
73 	optional_device_array<s100_slot_device, 9> m_s100_slot;
74 	required_device<i8251_device> m_usart;
75 	required_device<mm5307_device> m_brg;
76 	required_device<cassette_image_device> m_cassette;
77 	required_region_ptr<u8> m_onboard_rom;
78 	required_ioport m_linec;
79 	required_ioport m_onboard_config;
80 
81 	uint8_t m_int_vector;
82 	bool m_dtr, m_rts, m_txd, m_rxd, m_cassold, m_casspol;
83 	u8 m_cass_data[5];
84 	std::unique_ptr<u8[]> m_onboard_ram;
85 	bool m_onboard_disable;
86 };
87 
88 #endif // MAME_INCLUDES_POLY88_H
89