Previous 199869 Revisions Next

r30843 Thursday 5th June, 2014 at 09:31:51 UTC by Curt Coder
(MESS) ql: SandyQMouse WIP. (nw)
[src/emu/bus/ql]exp.c sandy_superqboard.c sandy_superqboard.h
[src/mess/drivers]ql.c
[src/mess/machine]qimi.c qimi.h

trunk/src/emu/bus/ql/exp.c
r30842r30843
103103   SLOT_INTERFACE("sdisk", SANDY_SUPER_DISK)
104104   SLOT_INTERFACE("sqboard", SANDY_SUPERQBOARD)
105105   SLOT_INTERFACE("sqboard512k", SANDY_SUPERQBOARD_512K)
106   SLOT_INTERFACE("sqmouse", SANDY_SUPERQMOUSE)
107   SLOT_INTERFACE("sqmouse512k", SANDY_SUPERQMOUSE_512K)
106108   SLOT_INTERFACE("opdbasic", OPD_BASIC_MASTER)
107109   SLOT_INTERFACE("trump", QL_TRUMP_CARD)
108110   SLOT_INTERFACE("trump256k", QL_TRUMP_CARD_256K)
trunk/src/emu/bus/ql/sandy_superqboard.c
r30842r30843
22// copyright-holders:Curt Coder, Phill Harvey-Smith
33/**********************************************************************
44
5    Sandy SuperQBoard (with HD upgrade) emulation
5    Sandy SuperQBoard/SuperQMouse (with HD upgrade) emulation
66
77    Copyright MESS Team.
88    Visit http://mamedev.org for licensing and usage restrictions.
99
1010**********************************************************************/
1111
12/*
13
14   TODO:
15
16   - mouse
17
18*/
19
2012#include "sandy_superqboard.h"
2113
2214
r30842r30843
3729
3830const device_type SANDY_SUPERQBOARD = &device_creator<sandy_superqboard_t>;
3931const device_type SANDY_SUPERQBOARD_512K = &device_creator<sandy_superqboard_512k_t>;
32const device_type SANDY_SUPERQMOUSE = &device_creator<sandy_superqmouse_t>;
33const device_type SANDY_SUPERQMOUSE_512K = &device_creator<sandy_superqmouse_512k_t>;
4034
4135
4236//-------------------------------------------------
r30842r30843
9387
9488WRITE_LINE_MEMBER( sandy_superqboard_t::busy_w )
9589{
96   m_busy = state;
90   if (state)
91   {
92      m_status |= ST_BUSY;
93   }
94   else
95   {
96      m_status &= ~ST_BUSY;
97   }
98
9799   check_interrupt();
98100}
99101
r30842r30843
124126}
125127
126128
129//-------------------------------------------------
130//  INPUT_CHANGED_MEMBER( mouse_x_changed )
131//-------------------------------------------------
127132
133INPUT_CHANGED_MEMBER( sandy_superqboard_t::mouse_x_changed )
134{
135   if (newval > oldval)
136   {
137      m_status |= ST_X_DIR;
138   }
139   else
140   {
141      m_status &= ~ST_X_DIR;
142   }
143
144   m_status |= ST_X_INT;
145
146   check_interrupt();
147}
148
149
150//-------------------------------------------------
151//  INPUT_CHANGED_MEMBER( mouse_y_changed )
152//-------------------------------------------------
153
154INPUT_CHANGED_MEMBER( sandy_superqboard_t::mouse_y_changed )
155{
156   if (newval < oldval)
157   {
158      m_status |= ST_Y_DIR;
159   }
160   else
161   {
162      m_status &= ~ST_Y_DIR;
163   }
164
165   m_status |= ST_Y_INT;
166
167   check_interrupt();
168}
169
170
171//-------------------------------------------------
172//  INPUT_PORTS( sandy_superqmouse )
173//-------------------------------------------------
174
175INPUT_PORTS_START( sandy_superqmouse )
176   PORT_START("mouse_x")
177   PORT_BIT( 0xff, 0x00, IPT_MOUSE_X ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) PORT_CHANGED_MEMBER(DEVICE_SELF, sandy_superqmouse_t, mouse_x_changed, 0)
178
179   PORT_START("mouse_y")
180   PORT_BIT( 0xff, 0x00, IPT_MOUSE_Y ) PORT_SENSITIVITY(50) PORT_KEYDELTA(5) PORT_MINMAX(0, 255) PORT_PLAYER(1) PORT_CHANGED_MEMBER(DEVICE_SELF, sandy_superqmouse_t, mouse_y_changed, 0)
181
182   PORT_START("mouse_buttons")
183   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Middle Mouse Button") PORT_CODE(MOUSECODE_BUTTON3)
184   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Right Mouse Button") PORT_CODE(MOUSECODE_BUTTON2)
185   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Left Mouse Button") PORT_CODE(MOUSECODE_BUTTON1)
186INPUT_PORTS_END
187
188
189//-------------------------------------------------
190//  input_ports - device-specific input ports
191//-------------------------------------------------
192
193ioport_constructor sandy_superqmouse_t::device_input_ports() const
194{
195   return INPUT_PORTS_NAME( sandy_superqmouse );
196}
197
198
199//-------------------------------------------------
200//  input_ports - device-specific input ports
201//-------------------------------------------------
202
203ioport_constructor sandy_superqmouse_512k_t::device_input_ports() const
204{
205   return INPUT_PORTS_NAME( sandy_superqmouse );
206}
207
208
209
128210//**************************************************************************
129211//  LIVE DEVICE
130212//**************************************************************************
r30842r30843
143225   m_latch(*this, TTL74273_TAG),
144226   m_rom(*this, "rom"),
145227   m_ram(*this, "ram"),
228   m_buttons(*this, "mouse_buttons"),
146229   m_ram_size(256*1024),
147   m_busy(1),
148   m_int2(0),
149   m_int3(0),
150230   m_fd6(0),
151   m_fd7(0)
231   m_fd7(0),
232   m_status(0)
152233{
153234}
154235
r30842r30843
162243   m_latch(*this, TTL74273_TAG),
163244   m_rom(*this, "rom"),
164245   m_ram(*this, "ram"),
246   m_buttons(*this, "mouse_buttons"),
165247   m_ram_size(ram_size),
166   m_busy(1),
167   m_int2(0),
168   m_int3(0),
169248   m_fd6(0),
170   m_fd7(0)
249   m_fd7(0),
250   m_status(0)
171251{
172252}
173253
174254sandy_superqboard_512k_t::sandy_superqboard_512k_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
175255   : sandy_superqboard_t(mconfig, SANDY_SUPERQBOARD_512K, "Sandy SuperQBoard 512K", tag, owner, clock, "ql_sqboard", __FILE__, 512*1024) { }
176256
257sandy_superqmouse_t::sandy_superqmouse_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
258   : sandy_superqboard_t(mconfig, SANDY_SUPERQMOUSE, "Sandy SuperQMouse", tag, owner, clock, "ql_sqboard", __FILE__, 256*1024) { }
177259
260sandy_superqmouse_512k_t::sandy_superqmouse_512k_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
261   : sandy_superqboard_t(mconfig, SANDY_SUPERQMOUSE_512K, "Sandy SuperQMouse 512K", tag, owner, clock, "ql_sqboard", __FILE__, 512*1024) { }
262
263
178264//-------------------------------------------------
179265//  device_start - device-specific startup
180266//-------------------------------------------------
r30842r30843
185271   m_ram.allocate(m_ram_size);
186272
187273   // state saving
188   save_item(NAME(m_busy));
189   save_item(NAME(m_int2));
190   save_item(NAME(m_int3));
191274   save_item(NAME(m_fd6));
192275   save_item(NAME(m_fd7));
276   save_item(NAME(m_status));
193277}
194278
195279
r30842r30843
206290   m_latch->write(0);
207291   m_centronics->write_strobe(1);
208292   
209   m_int2 = 0;
210   m_int3 = 0;
211293   m_fd6 = 0;
212294   m_fd7 = 0;
295   m_status = 0;
296
297   check_interrupt();
213298}
214299
215300
r30842r30843
235320               bit      description
236321
237322               0       BUSY
238               1       mouse pin 8
239               2       mouse pin 1
240               3       mouse pin 2
241               4       mouse pin 4 flip-flop Q
242               5       mouse pin 3 flip-flop Q
243               6       INT3
244               7       INT2
323               1       mouse pin 8 (middle button)
324               2       mouse pin 1 (right button)
325               3       mouse pin 2 (left button)
326               4       mouse pin 4 flip-flop Q (Y direction)
327               5       mouse pin 3 flip-flop Q (X direction)
328               6       INT3 (Y interrupt)
329               7       INT2 (X interrupt)
245330
246331            */
247332
248            data = m_busy;
249            data |= m_int3 << 6;
250            data |= m_int2 << 7;
333            data = m_buttons->read() & 0x0e;
334            data |= m_status & 0xf1;
251335            break;
252336         }
253337      }
r30842r30843
327411
328412            m_fd6 = BIT(data, 6);
329413            m_fd7 = BIT(data, 7);
414
330415            check_interrupt();
331416            }
332417            break;
r30842r30843
336421            break;
337422
338423         case 4:
339            m_int2 = 0;
340            m_int3 = 0;
424            m_status &= ~(ST_Y_INT | ST_X_INT);
341425            check_interrupt();
342426            break;
343427
r30842r30843
359443
360444void sandy_superqboard_t::check_interrupt()
361445{
362   int extint = (m_fd6 && m_busy) || (m_fd7 && (m_int2 || m_int3));
446   bool busy_int = m_fd6 && (m_status & ST_BUSY);
447   bool mouse_int = m_fd7 && (m_status & (ST_Y_INT | ST_X_INT));
448   bool extint = busy_int || mouse_int;
363449
364450   m_slot->extintl_w(extint ? ASSERT_LINE : CLEAR_LINE);
365451}
trunk/src/emu/bus/ql/sandy_superqboard.h
r30842r30843
22// copyright-holders:Curt Coder, Phill Harvey-Smith
33/**********************************************************************
44
5    Sandy SuperQBoard (with HD upgrade) emulation
5    Sandy SuperQBoard/SuperQMouse (with HD upgrade) emulation
66
77    Copyright MESS Team.
88    Visit http://mamedev.org for licensing and usage restrictions.
r30842r30843
4343
4444   DECLARE_FLOPPY_FORMATS( floppy_formats );
4545
46   DECLARE_INPUT_CHANGED_MEMBER( mouse_x_changed );
47   DECLARE_INPUT_CHANGED_MEMBER( mouse_y_changed );
48
4649protected:
4750   // device-level overrides
4851   virtual void device_start();
r30842r30843
5356   virtual void write(address_space &space, offs_t offset, UINT8 data);
5457
5558private:
59   enum
60   {
61      ST_BUSY = 0x01,
62      ST_MIDDLE = 0x02,
63      ST_RIGHT = 0x04,
64      ST_LEFT = 0x08,
65      ST_Y_DIR = 0x10,
66      ST_X_DIR = 0x20,
67      ST_Y_INT = 0x40,
68      ST_X_INT = 0x80
69   };
70
5671   void check_interrupt();
5772
5873   required_device<wd1772_t> m_fdc;
r30842r30843
6277   required_device<output_latch_device> m_latch;
6378   required_memory_region m_rom;
6479   optional_shared_ptr<UINT8> m_ram;
80   optional_ioport m_buttons;
6581
6682   int m_ram_size;
67   int m_busy;
68   int m_int2;
69   int m_int3;
7083   int m_fd6;
7184   int m_fd7;
85
86   UINT8 m_status;
7287};
7388
7489
r30842r30843
8297};
8398
8499
100// ======================> sandy_superqmouse_t
101
102class sandy_superqmouse_t :  public sandy_superqboard_t
103{
104public:
105   // construction/destruction
106   sandy_superqmouse_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
107
108   // optional information overrides
109   virtual ioport_constructor device_input_ports() const;
110};
111
112
113// ======================> sandy_superqmouse_512k_t
114
115class sandy_superqmouse_512k_t :  public sandy_superqboard_t
116{
117public:
118   // construction/destruction
119   sandy_superqmouse_512k_t(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
120
121   // optional information overrides
122   virtual ioport_constructor device_input_ports() const;
123};
124
125
85126// device type definition
86127extern const device_type SANDY_SUPERQBOARD;
87128extern const device_type SANDY_SUPERQBOARD_512K;
129extern const device_type SANDY_SUPERQMOUSE;
130extern const device_type SANDY_SUPERQMOUSE_512K;
88131
89132
133
90134#endif
trunk/src/mess/drivers/ql.c
r30842r30843
1212
1313    TODO:
1414
15   - Sandy mouse
1615    - microdrive
1716    - ZX8301 memory access slowdown
1817    - use resnet.h to create palette
trunk/src/mess/machine/qimi.c
r30842r30843
2828{
2929   if (newval > oldval)
3030   {
31      m_status |= ST_HORZ_DIR;
31      m_status |= ST_X_DIR;
3232   }
3333   else
3434   {
35      m_status &= ~ST_HORZ_DIR;
35      m_status &= ~ST_X_DIR;
3636   }
3737
38   m_status |= ST_HORZ_MOVE;
38   m_status |= ST_X_INT;
3939
4040   if (m_extint_en)
4141   {
r30842r30843
5252{
5353   if (newval < oldval)
5454   {
55      m_status |= ST_VERT_DIR;
55      m_status |= ST_Y_DIR;
5656   }
5757   else
5858   {
59      m_status &= ~ST_VERT_DIR;
59      m_status &= ~ST_Y_DIR;
6060   }
6161
62   m_status |= ST_VERT_MOVE;
62   m_status |= ST_Y_INT;
6363
6464   if (m_extint_en)
6565   {
r30842r30843
156156      break;
157157
158158   case 0x1bfbe:
159      m_status &= ~(ST_VERT_MOVE | ST_HORZ_MOVE);
159      m_status &= ~(ST_Y_INT | ST_X_INT);
160160      m_extint_en = true;
161161
162162      m_write_extint(CLEAR_LINE);
r30842r30843
176176   // write to 0x1bfbe resets int status
177177   if (offset == 0x1bfbe)
178178   {
179      m_status &= ~(ST_VERT_MOVE | ST_HORZ_MOVE);
179      m_status &= ~(ST_Y_INT | ST_X_INT);
180180      m_extint_en = true;
181181
182182      m_write_extint(CLEAR_LINE);
trunk/src/mess/machine/qimi.h
r30842r30843
5858private:
5959   enum
6060   {
61      ST_VERT_DIR = 0x01,
62      ST_HORZ_MOVE = 0x04,
63      ST_HORZ_DIR = 0x10,
64      ST_VERT_MOVE = 0x20
61      ST_Y_DIR = 0x01,
62      ST_X_INT = 0x04,
63      ST_X_DIR = 0x10,
64      ST_Y_INT = 0x20
6565   };
6666
6767   devcb_write_line m_write_extint;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team