Previous 199869 Revisions Next

r20507 Saturday 26th January, 2013 at 20:15:40 UTC by Wilbert Pol
(MESS) einstein.c: Tagmap cleanups (nw)
[src/mess/drivers]einstein.c
[src/mess/includes]einstein.h

trunk/src/mess/includes/einstein.h
r20506r20507
77#ifndef EINSTEIN_H_
88#define EINSTEIN_H_
99
10#include "emu.h"
1011#include "video/mc6845.h"
1112#include "cpu/z80/z80daisy.h"
1213#include "machine/wd_fdc.h"
1314#include "machine/z80ctc.h"
15#include "video/tms9928a.h"
16#include "machine/ram.h"
17#include "machine/i8251.h"
18#include "machine/ctronics.h"
1419
1520/***************************************************************************
1621    CONSTANTS
r20506r20507
4348{
4449public:
4550   einstein_state(const machine_config &mconfig, device_type type, const char *tag)
46      : driver_device(mconfig, type, tag),
47         m_fdc(*this, IC_I042)
48         { }
51      : driver_device(mconfig, type, tag)
52      , m_fdc(*this, IC_I042)
53      , m_color_screen(*this, "screen")
54      , m_ctc(*this, IC_I058)
55      , m_tms9929a(*this, "tms9929a")
56      , m_region_gfx1(*this, "gfx1")
57      , m_mc6845(*this, "crtc")
58      , m_crtc_screen(*this, "80column")
59      , m_uart(*this, IC_I060)
60      , m_ram(*this, RAM_TAG)
61      , m_centronics(*this, "centronics")
62      , m_region_bios(*this, "bios")
63      , m_bank1(*this, "bank1")
64      , m_bank2(*this, "bank2")
65      , m_bank3(*this, "bank3")
66      , m_line0(*this, "LINE0")
67      , m_line1(*this, "LINE1")
68      , m_line2(*this, "LINE2")
69      , m_line3(*this, "LINE3")
70      , m_line4(*this, "LINE4")
71      , m_line5(*this, "LINE5")
72      , m_line6(*this, "LINE6")
73      , m_line7(*this, "LINE7")
74      , m_extra(*this, "EXTRA")
75      , m_buttons(*this, "BUTTONS")
76      , m_config(*this, "config")
77      , m_80column_dips(*this, "80column_dips")
78   { }
4979
5080   required_device<wd1770_t> m_fdc;
51   device_t *m_color_screen;
52   z80ctc_device *m_ctc;
81   required_device<screen_device> m_color_screen;
82   required_device<z80ctc_device> m_ctc;
83   required_device<tms9929a_device> m_tms9929a;
84   optional_memory_region m_region_gfx1;
5385
5486   int m_rom_enabled;
5587   int m_interrupt;
r20506r20507
6193   UINT8 m_keyboard_data;
6294
6395   /* 80 column device */
64   mc6845_device *m_mc6845;
65   screen_device *m_crtc_screen;
96   optional_device<mc6845_device> m_mc6845;
97   optional_device<screen_device> m_crtc_screen;
6698   UINT8 *m_crtc_ram;
6799   UINT8   m_de;
68100
r20506r20507
88120   DECLARE_WRITE8_MEMBER(einstein_drsel_w);
89121   DECLARE_WRITE_LINE_MEMBER(einstein_serial_transmit_clock);
90122   DECLARE_WRITE_LINE_MEMBER(einstein_serial_receive_clock);
123
124protected:
125   required_device<i8251_device> m_uart;
126   required_device<ram_device> m_ram;
127   required_device<centronics_device> m_centronics;
128   required_memory_region m_region_bios;
129   required_memory_bank m_bank1;
130   required_memory_bank m_bank2;
131   required_memory_bank m_bank3;
132   required_ioport m_line0;
133   required_ioport m_line1;
134   required_ioport m_line2;
135   required_ioport m_line3;
136   required_ioport m_line4;
137   required_ioport m_line5;
138   required_ioport m_line6;
139   required_ioport m_line7;
140   required_ioport m_extra;
141   required_ioport m_buttons;
142   required_ioport m_config;
143   optional_ioport m_80column_dips;
144
145   void einstein_scan_keyboard();
146   void einstein_page_rom();
91147};
92148
93149
trunk/src/mess/drivers/einstein.c
r20506r20507
5555 ******************************************************************************/
5656
5757#include "emu.h"
58#include "machine/z80ctc.h"
5958#include "machine/z80pio.h"
6059#include "machine/z80sio.h"
61#include "video/tms9928a.h"
6260#include "cpu/z80/z80.h"
6361#include "cpu/z80/z80daisy.h"
64#include "machine/wd_fdc.h"
6562#include "formats/dsk_dsk.h"
66#include "machine/ctronics.h"
67#include "machine/i8251.h"
6863#include "sound/ay8910.h"
69#include "video/mc6845.h"
7064#include "rendlay.h"
71#include "machine/ram.h"
7265#include "includes/einstein.h"
7366
7467#define VERBOSE_KEYBOARD    0
r20506r20507
108101{
109102   einstein_state *einstein = device->machine().driver_data<einstein_state>();
110103   const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
111   UINT8 *data = device->machine().root_device().memregion("gfx1")->base();
104   UINT8 *data = einstein->m_region_gfx1->base();
112105   UINT8 char_code, data_byte;
113106   int i, x;
114107
r20506r20507
143136   UINT8 result = 0;
144137
145138   result |= m_de;
146   result |= ioport("80column_dips")->read() & 0x06;
139   result |= m_80column_dips->read() & 0x06;
147140
148141   return result;
149142}
r20506r20507
166159***************************************************************************/
167160
168161/* refresh keyboard data. It is refreshed when the keyboard line is written */
169static void einstein_scan_keyboard(running_machine &machine)
162void einstein_state::einstein_scan_keyboard()
170163{
171   einstein_state *einstein = machine.driver_data<einstein_state>();
172164   UINT8 data = 0xff;
173165
174   if (!BIT(einstein->m_keyboard_line, 0)) data &= machine.root_device().ioport("LINE0")->read();
175   if (!BIT(einstein->m_keyboard_line, 1)) data &= machine.root_device().ioport("LINE1")->read();
176   if (!BIT(einstein->m_keyboard_line, 2)) data &= machine.root_device().ioport("LINE2")->read();
177   if (!BIT(einstein->m_keyboard_line, 3)) data &= machine.root_device().ioport("LINE3")->read();
178   if (!BIT(einstein->m_keyboard_line, 4)) data &= machine.root_device().ioport("LINE4")->read();
179   if (!BIT(einstein->m_keyboard_line, 5)) data &= machine.root_device().ioport("LINE5")->read();
180   if (!BIT(einstein->m_keyboard_line, 6)) data &= machine.root_device().ioport("LINE6")->read();
181   if (!BIT(einstein->m_keyboard_line, 7)) data &= machine.root_device().ioport("LINE7")->read();
166   if (!BIT(m_keyboard_line, 0)) data &= m_line0->read();
167   if (!BIT(m_keyboard_line, 1)) data &= m_line1->read();
168   if (!BIT(m_keyboard_line, 2)) data &= m_line2->read();
169   if (!BIT(m_keyboard_line, 3)) data &= m_line3->read();
170   if (!BIT(m_keyboard_line, 4)) data &= m_line4->read();
171   if (!BIT(m_keyboard_line, 5)) data &= m_line5->read();
172   if (!BIT(m_keyboard_line, 6)) data &= m_line6->read();
173   if (!BIT(m_keyboard_line, 7)) data &= m_line7->read();
182174
183   einstein->m_keyboard_data = data;
175   m_keyboard_data = data;
184176}
185177
186178TIMER_DEVICE_CALLBACK_MEMBER(einstein_state::einstein_keyboard_timer_callback)
187179{
188180   /* re-scan keyboard */
189   einstein_scan_keyboard(machine());
181   einstein_scan_keyboard();
190182
191183   /* if /fire1 or /fire2 is 0, signal a fire interrupt */
192   if ((machine().root_device().ioport("BUTTONS")->read() & 0x03) != 0)
184   if ((m_buttons->read() & 0x03) != 0)
193185   {
194186      m_interrupt |= EINSTEIN_FIRE_INT;
195187   }
r20506r20507
210202   m_keyboard_line = data;
211203
212204   /* re-scan the keyboard */
213   einstein_scan_keyboard(machine());
205   einstein_scan_keyboard();
214206}
215207
216208READ8_MEMBER(einstein_state::einstein_keyboard_data_read)
217209{
218210   /* re-scan the keyboard */
219   einstein_scan_keyboard(machine());
211   einstein_scan_keyboard();
220212
221213   if (VERBOSE_KEYBOARD)
222214      logerror("einstein_keyboard_data_read: %02x\n", m_keyboard_data);
r20506r20507
246238   }
247239
248240   /* double sided drive connected? */
249   if (machine().root_device().ioport("config")->read() & data)
241   if (m_config->read() & data)
250242   {
251243      /* bit 4 selects the side then */
252244      //floppy->ss_w(BIT(data, 4));
r20506r20507
277269
278270WRITE_LINE_MEMBER(einstein_state::einstein_serial_transmit_clock)
279271{
280   i8251_device *uart = machine().device<i8251_device>(IC_I060);
281   uart->transmit_clock();
272   m_uart->transmit_clock();
282273}
283274
284275WRITE_LINE_MEMBER(einstein_state::einstein_serial_receive_clock)
285276{
286   i8251_device *uart = machine().device<i8251_device>(IC_I060);
287   uart->receive_clock();
277   m_uart->receive_clock();
288278}
289279
290280
r20506r20507
292282    MEMORY BANKING
293283***************************************************************************/
294284
295static void einstein_page_rom(running_machine &machine)
285void einstein_state::einstein_page_rom()
296286{
297   einstein_state *state = machine.driver_data<einstein_state>();
298   state->membank("bank1")->set_base(state->m_rom_enabled ? machine.root_device().memregion("bios")->base() : machine.device<ram_device>(RAM_TAG)->pointer());
287   m_bank1->set_base(m_rom_enabled ? m_region_bios->base() : m_ram->pointer());
299288}
300289
301290/* writing to this port is a simple trigger, and switches between RAM and ROM */
302291WRITE8_MEMBER(einstein_state::einstein_rom_w)
303292{
304293   m_rom_enabled ^= 1;
305   einstein_page_rom(machine());
294   einstein_page_rom();
306295}
307296
308297
r20506r20507
312301
313302READ8_MEMBER(einstein_state::einstein_kybintmsk_r)
314303{
315   centronics_device *centronics = machine().device<centronics_device>("centronics");
316304   UINT8 data = 0;
317305
318306   /* clear key int. a read of this I/O port will do this or a reset */
319307   m_interrupt &= ~EINSTEIN_KEY_INT;
320308
321309   /* bit 0 and 1: fire buttons on the joysticks */
322   data |= ioport("BUTTONS")->read();
310   data |= m_buttons->read();
323311
324312   /* bit 2 to 4: printer status */
325   data |= centronics->busy_r() << 2;
326   data |= centronics->pe_r() << 3;
327   data |= centronics->fault_r() << 4;
313   data |= m_centronics->busy_r() << 2;
314   data |= m_centronics->pe_r() << 3;
315   data |= m_centronics->fault_r() << 4;
328316
329317   /* bit 5 to 7: graph, control and shift key */
330   data |= ioport("EXTRA")->read();
318   data |= m_extra->read();
331319
332320   if(VERBOSE_KEYBOARD)
333321      logerror("%s: einstein_kybintmsk_r %02x\n", machine().describe_context(), data);
r20506r20507
407395void einstein_state::machine_reset()
408396{
409397   //device_t *floppy;
410   //UINT8 config = machine().root_device().ioport("config")->read();
398   //UINT8 config = m_config->read();
411399
412   /* save pointers to our devices */
413   m_color_screen = machine().device("screen");
414   m_ctc = machine().device<z80ctc_device>(IC_I058);
415
416400   /* initialize memory mapping */
417   membank("bank2")->set_base(machine().device<ram_device>(RAM_TAG)->pointer());
418   membank("bank3")->set_base(machine().device<ram_device>(RAM_TAG)->pointer() + 0x8000);
401   m_bank2->set_base(m_ram->pointer());
402   m_bank3->set_base(m_ram->pointer() + 0x8000);
419403   m_rom_enabled = 1;
420   einstein_page_rom(machine());
404   einstein_page_rom();
421405
422406   /* a reset causes the fire int, adc int, keyboard int mask
423407   to be set to 1, which causes all these to be DISABLED */
r20506r20507
444428   /* call standard initialization first */
445429   einstein_state::machine_reset();
446430
447   /* get 80 column specific devices */
448   m_mc6845 = machine().device<mc6845_device>("crtc");
449   m_crtc_screen = machine().device<screen_device>("80column");
450
451431   /* 80 column card palette */
452432   palette_set_color(machine(), TMS9928A_PALETTE_SIZE, RGB_BLACK);
453433   palette_set_color(machine(), TMS9928A_PALETTE_SIZE + 1, MAKE_RGB(0, 224, 0));
r20506r20507
468448{
469449   if (&screen == m_color_screen)
470450   {
471      tms9929a_device *tms9929a = machine().device<tms9929a_device>( "tms9929a" );
472      bitmap_rgb32 &src = tms9929a->get_bitmap();
451      bitmap_rgb32 &src = m_tms9929a->get_bitmap();
473452      for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
474453         for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
475454            bitmap.pix32(y, x) = src.pix32(y, x);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team