1 // license:BSD-3-Clause
2 // copyright-holders:Miodrag Milanovic
3 /*****************************************************************************
4  *
5  * includes/radio86.h
6  *
7  ****************************************************************************/
8 #ifndef MAME_INCLUDES_RADIO86_H
9 #define MAME_INCLUDES_RADIO86_H
10 
11 #pragma once
12 
13 #include "machine/i8255.h"
14 #include "machine/i8257.h"
15 #include "video/i8275.h"
16 #include "imagedev/cassette.h"
17 #include "bus/generic/slot.h"
18 #include "bus/generic/carts.h"
19 #include "emupal.h"
20 
21 
22 class radio86_state : public driver_device
23 {
24 public:
radio86_state(const machine_config & mconfig,device_type type,const char * tag)25 	radio86_state(const machine_config &mconfig, device_type type, const char *tag)
26 		: driver_device(mconfig, type, tag)
27 		, m_maincpu(*this, "maincpu")
28 		, m_cassette(*this, "cassette")
29 		, m_cart(*this, "cartslot")
30 		, m_dma(*this, "dma")
31 		, m_ppi1(*this, "ppi1")
32 		, m_ppi2(*this, "ppi2")
33 		, m_rom(*this, "maincpu")
34 		, m_ram(*this, "mainram")
35 		, m_bank1(*this, "bank1")
36 		, m_io_line(*this, "LINE%u", 0U)
37 		, m_io_cline(*this, "CLINE%u", 0U)
38 		, m_palette(*this, "palette")
39 		, m_chargen(*this, "chargen")
40 	{ }
41 
42 	void impuls03(machine_config &config);
43 	void mikron2(machine_config &config);
44 	void rk7007(machine_config &config);
45 	void rk700716(machine_config &config);
46 	void radiorom(machine_config &config);
47 	void radio86(machine_config &config);
48 	void radio16(machine_config &config);
49 	void radioram(machine_config &config);
50 	void kr03(machine_config &config);
51 	void init_radioram();
52 	void init_radio86();
53 
54 protected:
55 
56 
57 	void machine_reset() override;
58 	void machine_start() override;
59 
60 	void radio86_init_keyboard();
61 
62 	void impuls03_mem(address_map &map);
63 	void mikron2_mem(address_map &map);
64 	void radio86_16_mem(address_map &map);
65 	void radio86_io(address_map &map);
66 	void radio86_mem(address_map &map);
67 	void radio86ram_mem(address_map &map);
68 	void radio86rom_mem(address_map &map);
69 	void rk7007_io(address_map &map);
70 
71 	uint8_t m_tape_value;
72 	uint8_t radio_cpu_state_r();
73 	uint8_t radio_io_r(offs_t offset);
74 	void radio_io_w(offs_t offset, uint8_t data);
75 	uint8_t radio86_8255_portb_r2();
76 	uint8_t radio86_8255_portc_r2();
77 	uint8_t rk7007_8255_portc_r();
78 	void radio86_8255_porta_w2(uint8_t data);
79 	void radio86_8255_portc_w2(uint8_t data);
80 	void radio86_palette(palette_device &palette) const;
81 	void hrq_w(int state);
82 	uint8_t memory_read_byte(offs_t offset);
83 	void memory_write_byte(offs_t offset, uint8_t data);
84 
85 	memory_passthrough_handler *m_rom_shadow_tap;
86 	required_device<cpu_device> m_maincpu;
87 	required_device<cassette_image_device> m_cassette;
88 	optional_device<generic_slot_device> m_cart;    // for ROMDisk - only Radio86K & Orion?
89 	optional_device<i8257_device> m_dma;
90 	required_device<i8255_device> m_ppi1;
91 	optional_device<i8255_device> m_ppi2;
92 	required_region_ptr<u8> m_rom;
93 	optional_shared_ptr<u8> m_ram;
94 	optional_memory_bank m_bank1;
95 	required_ioport_array<9> m_io_line;
96 	optional_ioport_array<8> m_io_cline;
97 	required_device<palette_device> m_palette;
98 	optional_region_ptr<uint8_t> m_chargen;
99 
100 private:
101 	int m_keyboard_mask;
102 	std::unique_ptr<uint8_t[]> m_radio_ram_disk;
103 	uint8_t m_romdisk_lsb;
104 	uint8_t m_romdisk_msb;
105 	uint8_t m_disk_sel;
106 	void radio86_pagesel(uint8_t data);
107 	uint8_t kr03_8255_portb_r2();
108 	uint8_t radio86rom_romdisk_porta_r();
109 	uint8_t radio86ram_romdisk_porta_r();
110 	void radio86_romdisk_portb_w(uint8_t data);
111 	void radio86_romdisk_portc_w(uint8_t data);
112 	I8275_DRAW_CHARACTER_MEMBER(display_pixels);
113 };
114 
115 
116 /*----------- defined in drivers/radio86.c -----------*/
117 
118 INPUT_PORTS_EXTERN( radio86 );
119 INPUT_PORTS_EXTERN( ms7007 );
120 
121 #endif // MAME_INCLUDES_RADIO86_H
122