1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 #ifndef MAME_INCLUDES_MIKROMIK_H
4 #define MAME_INCLUDES_MIKROMIK_H
5 
6 #pragma once
7 
8 #include "bus/rs232/rs232.h"
9 #include "cpu/i8085/i8085.h"
10 #include "formats/mm_dsk.h"
11 #include "imagedev/floppy.h"
12 #include "machine/am9517a.h"
13 #include "machine/bankdev.h"
14 #include "machine/i8212.h"
15 #include "machine/mm1kb.h"
16 #include "machine/pit8253.h"
17 #include "machine/ram.h"
18 #include "machine/z80sio.h"
19 #include "machine/upd765.h"
20 #include "video/i8275.h"
21 #include "video/upd7220.h"
22 #include "emupal.h"
23 
24 #define SCREEN_TAG      "screen"
25 #define I8085A_TAG      "ic40"
26 #define I8212_TAG       "ic12"
27 #define I8237_TAG       "ic45"
28 #define I8253_TAG       "ic6"
29 #define UPD765_TAG      "ic15"
30 #define I8275_TAG       "ic59"
31 #define UPD7201_TAG     "ic11"
32 #define UPD7220_TAG     "ic101"
33 #define RS232_A_TAG     "rs232a"
34 #define RS232_B_TAG     "rs232b"
35 #define RS232_C_TAG     "rs232c"
36 #define KB_TAG          "kb"
37 
38 class mm1_state : public driver_device
39 {
40 public:
mm1_state(const machine_config & mconfig,device_type type,const char * tag)41 	mm1_state(const machine_config &mconfig, device_type type, const char *tag) :
42 		driver_device(mconfig, type, tag),
43 		m_maincpu(*this, I8085A_TAG),
44 		m_io(*this, "io"),
45 		m_iop(*this, I8212_TAG),
46 		m_dmac(*this, I8237_TAG),
47 		m_pit(*this, I8253_TAG),
48 		m_crtc(*this, I8275_TAG),
49 		m_fdc(*this, UPD765_TAG),
50 		m_mpsc(*this, UPD7201_TAG),
51 		m_hgdc(*this, UPD7220_TAG),
52 		m_palette(*this, "palette"),
53 		m_floppy0(*this, UPD765_TAG ":0:525qd"),
54 		m_floppy1(*this, UPD765_TAG ":1:525qd"),
55 		m_rs232a(*this, RS232_A_TAG),
56 		m_rs232b(*this, RS232_B_TAG),
57 		m_rs232c(*this, RS232_C_TAG),
58 		m_ram(*this, RAM_TAG),
59 		m_rom(*this, I8085A_TAG),
60 		m_mmu_rom(*this, "address"),
61 		m_char_rom(*this, "chargen"),
62 		m_video_ram(*this, "video_ram"),
63 		m_a8(0),
64 		m_recall(0),
65 		m_dack3(1),
66 		m_tc(CLEAR_LINE),
67 		m_fdc_tc(0)
68 	{ }
69 
70 	void mm1(machine_config &config);
71 	void mm1m6(machine_config &config);
72 	void mm1m6_video(machine_config &config);
73 	void mm1m7(machine_config &config);
74 
75 protected:
76 	virtual void machine_start() override;
77 	virtual void machine_reset() override;
78 
79 private:
80 	required_device<i8085a_cpu_device> m_maincpu;
81 	required_device<address_map_bank_device> m_io;
82 	required_device<i8212_device> m_iop;
83 	required_device<am9517a_device> m_dmac;
84 	required_device<pit8253_device> m_pit;
85 	required_device<i8275_device> m_crtc;
86 	required_device<upd765a_device> m_fdc;
87 	required_device<upd7201_device> m_mpsc;
88 	required_device<upd7220_device> m_hgdc;
89 	required_device<palette_device> m_palette;
90 	required_device<floppy_image_device> m_floppy0;
91 	required_device<floppy_image_device> m_floppy1;
92 	required_device<rs232_port_device> m_rs232a;
93 	required_device<rs232_port_device> m_rs232b;
94 	required_device<rs232_port_device> m_rs232c;
95 	required_device<ram_device> m_ram;
96 	required_memory_region m_rom;
97 	required_memory_region m_mmu_rom;
98 	required_memory_region m_char_rom;
99 	required_shared_ptr<uint16_t> m_video_ram;
100 
101 	int m_a8;
102 
103 	// video state
104 	int m_llen;
105 
106 	// serial state
107 	int m_intc;
108 	int m_rx21;
109 	int m_tx21;
110 	int m_rcl;
111 
112 	// floppy state
113 	int m_recall;
114 	int m_dack3;
115 	int m_tc;
116 	int m_fdc_tc;
117 
118 	uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
119 
120 	uint8_t read(offs_t offset);
121 	void write(offs_t offset, uint8_t data);
122 	DECLARE_WRITE_LINE_MEMBER( a8_w );
123 	DECLARE_WRITE_LINE_MEMBER( recall_w );
124 	DECLARE_WRITE_LINE_MEMBER( rx21_w );
125 	DECLARE_WRITE_LINE_MEMBER( tx21_w );
126 	DECLARE_WRITE_LINE_MEMBER( rcl_w );
127 	DECLARE_WRITE_LINE_MEMBER( intc_w );
128 	DECLARE_WRITE_LINE_MEMBER( llen_w );
129 	DECLARE_WRITE_LINE_MEMBER( motor_on_w );
130 	DECLARE_WRITE_LINE_MEMBER( dma_hrq_w );
131 	uint8_t mpsc_dack_r();
132 	void mpsc_dack_w(uint8_t data);
133 	DECLARE_WRITE_LINE_MEMBER( dma_eop_w );
134 	DECLARE_WRITE_LINE_MEMBER( dack3_w );
135 	DECLARE_WRITE_LINE_MEMBER( itxc_w );
136 	DECLARE_WRITE_LINE_MEMBER( irxc_w );
137 	DECLARE_WRITE_LINE_MEMBER( auxc_w );
138 	DECLARE_WRITE_LINE_MEMBER( drq2_w );
139 	DECLARE_WRITE_LINE_MEMBER( drq1_w );
140 	DECLARE_READ_LINE_MEMBER( dsra_r );
141 
142 	void update_tc();
143 
144 	DECLARE_FLOPPY_FORMATS( floppy_formats );
145 	I8275_DRAW_CHARACTER_MEMBER( crtc_display_pixels );
146 	UPD7220_DISPLAY_PIXELS_MEMBER( hgdc_display_pixels );
147 	void mm1_palette(palette_device &palette) const;
148 	void mm1_map(address_map &map);
149 	void mmu_io_map(address_map &map);
150 	void mm1_upd7220_map(address_map &map);
151 };
152 
153 #endif // MAME_INCLUDES_MIKROMIK_H
154