1 // license:BSD-3-Clause
2 // copyright-holders:Sergey Svishchev
3 /*****************************************************************************
4  *
5  * includes/mc1502.h
6  *
7  ****************************************************************************/
8 
9 #ifndef MAME_INCLUDES_MC1502_H
10 #define MAME_INCLUDES_MC1502_H
11 
12 #pragma once
13 
14 #include "imagedev/cassette.h"
15 #include "machine/i8251.h"
16 #include "machine/i8255.h"
17 #include "machine/pic8259.h"
18 #include "machine/pit8253.h"
19 #include "machine/ram.h"
20 #include "sound/spkrdev.h"
21 
22 #include "bus/centronics/ctronics.h"
23 #include "bus/isa/isa.h"
24 #include "bus/isa/xsu_cards.h"
25 #include "bus/isa/mc1502_fdc.h"
26 
27 
28 class mc1502_state : public driver_device
29 {
30 public:
mc1502_state(const machine_config & mconfig,device_type type,const char * tag)31 	mc1502_state(const machine_config &mconfig, device_type type, const char *tag)
32 		: driver_device(mconfig, type, tag)
33 		, m_maincpu(*this, "maincpu")
34 		, m_upd8251(*this, "upd8251")
35 		, m_pic8259(*this, "pic8259")
36 		, m_pit8253(*this, "pit8253")
37 		, m_ppi8255n1(*this, "ppi8255n1")
38 		, m_ppi8255n2(*this, "ppi8255n2")
39 		, m_isabus(*this, "isa")
40 		, m_speaker(*this, "speaker")
41 		, m_cassette(*this, "cassette")
42 		, m_centronics(*this, "centronics")
43 		, m_ram(*this, RAM_TAG)
44 		, m_kbdio(*this, "Y%u", 1)
45 	{ }
46 
47 	void mc1502(machine_config &config);
48 
49 	void init_mc1502();
50 
51 	void fdc_config(device_t *device);
52 
53 private:
54 	required_device<cpu_device>  m_maincpu;
55 	required_device<i8251_device> m_upd8251;
56 	required_device<pic8259_device>  m_pic8259;
57 	required_device<pit8253_device>  m_pit8253;
58 	required_device<i8255_device>  m_ppi8255n1;
59 	required_device<i8255_device>  m_ppi8255n2;
60 	required_device<isa8_device>  m_isabus;
61 	required_device<speaker_sound_device>  m_speaker;
62 	required_device<cassette_image_device>  m_cassette;
63 	required_device<centronics_device> m_centronics;
64 	required_device<ram_device> m_ram;
65 	required_ioport_array<12> m_kbdio;
66 
67 	DECLARE_MACHINE_START(mc1502);
68 	DECLARE_MACHINE_RESET(mc1502);
69 
70 	TIMER_CALLBACK_MEMBER(keyb_signal_callback);
71 
72 	struct {
73 		uint8_t       pulsing;
74 		uint16_t      mask;       /* input lines */
75 		emu_timer   *keyb_signal_timer;
76 	} m_kbd;
77 
78 	uint8_t m_ppi_portb;
79 	uint8_t m_ppi_portc;
80 	uint8_t m_spkrdata;
81 
82 	DECLARE_WRITE_LINE_MEMBER(mc1502_pit8253_out1_changed);
83 	DECLARE_WRITE_LINE_MEMBER(mc1502_pit8253_out2_changed);
84 	DECLARE_WRITE_LINE_MEMBER(mc1502_speaker_set_spkrdata);
85 	DECLARE_WRITE_LINE_MEMBER(mc1502_i8251_syndet);
86 
87 	void mc1502_ppi_portb_w(uint8_t data);
88 	void mc1502_ppi_portc_w(uint8_t data);
89 	uint8_t mc1502_ppi_portc_r();
90 	uint8_t mc1502_kppi_porta_r();
91 	void mc1502_kppi_portb_w(uint8_t data);
92 	void mc1502_kppi_portc_w(uint8_t data);
93 
94 	void mc1502_io(address_map &map);
95 	void mc1502_map(address_map &map);
96 
97 	int m_pit_out2;
98 };
99 
100 #endif // MAME_INCLUDES_MC1502_H
101