1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
// license:BSD-3-Clause
// copyright-holders:Sandro Ronco
/*********************************************************************
iq151cart.h
IQ151 cartridge slot pinout:
+--------+
+12V | 01 32 | IO /MW
+12V | 02 33 | IO /IOR
+5V | 03 34 | IO /IOW
+5V | 04 35 | O /NRDY
GND | 05 36 | O /HOLD
GND | 06 37 | I HLDA
A0 IO | 07 38 | O /RAM
A1 IO | 08 39 | O /INT0
A2 IO | 09 40 | O /INT1
A3 IO | 10 41 | O /INT2
A4 IO | 11 42 | O /INT3
A5 IO | 12 43 | O /INT4
A6 IO | 13 44 | O /VID
A7 IO | 14 45 | I OSC
A8 IO | 15 46 | I TTL
A9 IO | 16 47 | O NF
A10 IO | 17 48 | N.C.
A11 IO | 18 49 | N.C.
A12 IO | 19 50 | I /INIT
A13 IO | 20 51 | IO /SS
A14 IO | 21 52 | IO /SR
A15 IO | 22 53 | N.C.
D0 IO | 23 54 | IO /ZS
D1 IO | 24 55 | IO /ZR
D2 IO | 25 56 | O /DMA
D3 IO | 26 57 | GND
D4 IO | 27 58 | GND
D5 IO | 28 59 | -5V
D6 IO | 29 60 | -5V
D7 IO | 30 61 | -12V
/MR IO | 31 62 | -12V
+--------+
*********************************************************************/
#ifndef MAME_BUS_IQ151_IQ151_H
#define MAME_BUS_IQ151_IQ151_H
#pragma once
#include "softlist_dev.h"
#include "screen.h"
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
// ======================> device_iq151cart_interface
class device_iq151cart_interface : public device_interface
{
public:
// construction/destruction
virtual ~device_iq151cart_interface();
// reading and writing
virtual void read(offs_t offset, uint8_t &data) { }
virtual void write(offs_t offset, uint8_t data) { }
virtual void io_read(offs_t offset, uint8_t &data) { }
virtual void io_write(offs_t offset, uint8_t data) { }
virtual uint8_t* get_cart_base() { return nullptr; }
virtual void set_screen_device(screen_device &screen) { m_screen = &screen; }
// video update
virtual void video_update(bitmap_ind16 &bitmap, const rectangle &cliprect) { }
protected:
device_iq151cart_interface(const machine_config &mconfig, device_t &device);
screen_device *m_screen;
};
// ======================> iq151cart_slot_device
class iq151cart_slot_device : public device_t,
public device_single_card_slot_interface<device_iq151cart_interface>,
public device_image_interface
{
public:
// construction/destruction
template <typename T>
iq151cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
: iq151cart_slot_device(mconfig, tag, owner, 0)
{
option_reset();
opts(*this);
set_default_option(dflt);
set_fixed(false);
}
iq151cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
virtual ~iq151cart_slot_device();
template <typename T> void set_screen_tag(T &&tag) { m_screen.set_tag(std::forward<T>(tag)); }
auto out_irq0_callback() { return m_out_irq0_cb.bind(); }
auto out_irq1_callback() { return m_out_irq1_cb.bind(); }
auto out_irq2_callback() { return m_out_irq2_cb.bind(); }
auto out_irq3_callback() { return m_out_irq3_cb.bind(); }
auto out_irq4_callback() { return m_out_irq4_cb.bind(); }
auto out_drq_callback() { return m_out_drq_cb.bind(); }
// image-level overrides
virtual image_init_result call_load() override;
virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
virtual iodevice_t image_type() const override { return IO_CARTSLOT; }
virtual bool is_readable() const override { return true; }
virtual bool is_writeable() const override { return false; }
virtual bool is_creatable() const override { return false; }
virtual bool must_be_loaded() const override { return false; }
virtual bool is_reset_on_load() const override { return true; }
virtual const char *image_interface() const override { return "iq151_cart"; }
virtual const char *file_extensions() const override { return "bin,rom"; }
// slot interface overrides
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// reading and writing
virtual void read(offs_t offset, uint8_t &data);
virtual void write(offs_t offset, uint8_t data);
virtual void io_read(offs_t offset, uint8_t &data);
virtual void io_write(offs_t offset, uint8_t data);
virtual void video_update(bitmap_ind16 &bitmap, const rectangle &cliprect);
protected:
// device-level overrides
virtual void device_start() override;
devcb_write_line m_out_irq0_cb;
devcb_write_line m_out_irq1_cb;
devcb_write_line m_out_irq2_cb;
devcb_write_line m_out_irq3_cb;
devcb_write_line m_out_irq4_cb;
devcb_write_line m_out_drq_cb;
device_iq151cart_interface* m_cart;
required_device<screen_device> m_screen;
};
// device type definition
DECLARE_DEVICE_TYPE(IQ151CART_SLOT, iq151cart_slot_device)
#endif // MAME_BUS_IQ151_IQ151_H
|