1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 #ifndef MAME_INCLUDES_BW2_H
4 #define MAME_INCLUDES_BW2_H
5 
6 #pragma once
7 
8 #include "bus/bw2/exp.h"
9 #include "cpu/z80/z80.h"
10 #include "formats/bw2_dsk.h"
11 #include "imagedev/floppy.h"
12 #include "bus/centronics/ctronics.h"
13 #include "machine/i8251.h"
14 #include "machine/i8255.h"
15 #include "machine/pit8253.h"
16 #include "machine/ram.h"
17 #include "machine/wd_fdc.h"
18 #include "video/msm6255.h"
19 #include "emupal.h"
20 #include "rendlay.h"
21 
22 #define Z80_TAG         "ic1"
23 #define I8255A_TAG      "ic4"
24 #define WD2797_TAG      "ic5"
25 #define MSM6255_TAG     "ic49"
26 #define CENTRONICS_TAG  "centronics"
27 #define RS232_TAG       "rs232"
28 #define SCREEN_TAG      "screen"
29 
30 class bw2_state : public driver_device
31 {
32 public:
bw2_state(const machine_config & mconfig,device_type type,const char * tag)33 	bw2_state(const machine_config &mconfig, device_type type, const char *tag) :
34 		driver_device(mconfig, type, tag),
35 		m_maincpu(*this, Z80_TAG),
36 		m_uart(*this, "ic7"),
37 		m_fdc(*this, WD2797_TAG),
38 		m_lcdc(*this, MSM6255_TAG),
39 		m_pit(*this, "ic6"),
40 		m_centronics(*this, CENTRONICS_TAG),
41 		m_exp(*this, BW2_EXPANSION_SLOT_TAG),
42 		m_ram(*this, RAM_TAG),
43 		m_floppy0(*this, WD2797_TAG":0"),
44 		m_floppy1(*this, WD2797_TAG":1"),
45 		m_floppy(nullptr),
46 		m_rom(*this, Z80_TAG),
47 		m_y(*this, "Y%u", 0),
48 		m_video_ram(*this, "videoram")
49 	{ }
50 
51 	required_device<cpu_device> m_maincpu;
52 	required_device<i8251_device> m_uart;
53 	required_device<wd2797_device> m_fdc;
54 	required_device<msm6255_device> m_lcdc;
55 	required_device<pit8253_device> m_pit;
56 	required_device<centronics_device> m_centronics;
57 	required_device<bw2_expansion_slot_device> m_exp;
58 	required_device<ram_device> m_ram;
59 	required_device<floppy_connector> m_floppy0;
60 	required_device<floppy_connector> m_floppy1;
61 	floppy_image_device *m_floppy;
62 	required_memory_region m_rom;
63 	required_ioport_array<10> m_y;
64 
65 	virtual void machine_start() override;
66 
67 	uint8_t read(offs_t offset);
68 	void write(offs_t offset, uint8_t data);
69 
70 	void ppi_pa_w(uint8_t data);
71 	uint8_t ppi_pb_r();
72 	void ppi_pc_w(uint8_t data);
73 	uint8_t  ppi_pc_r();
74 
75 	DECLARE_WRITE_LINE_MEMBER( mtron_w );
76 
77 	DECLARE_WRITE_LINE_MEMBER( fdc_drq_w );
78 	DECLARE_FLOPPY_FORMATS( floppy_formats );
79 
80 	// keyboard state
81 	uint8_t m_kb;
82 
83 	// memory state
84 	uint8_t m_bank;
85 
86 	// floppy state
87 	int m_mtron;
88 	int m_mfdbk;
89 
90 	// video state
91 	optional_shared_ptr<uint8_t> m_video_ram;
92 	void bw2_palette(palette_device &palette) const;
93 
94 	DECLARE_WRITE_LINE_MEMBER(write_centronics_busy);
95 	int m_centronics_busy;
96 	void bw2(machine_config &config);
97 	void bw2_io(address_map &map);
98 	void bw2_mem(address_map &map);
99 	void lcdc_map(address_map &map);
100 };
101 
102 #endif // MAME_INCLUDES_BW2_H
103