Previous 15994 Revisions Next

r5146 Saturday 4th July, 2009 at 14:54:41 UTC by Curt Coder
[MC1000] Almost boots now.
[src/mess/drivers]mc1000.c
[src/mess/includes]mc1000.h*

src/mess/includes/mc1000.h
r0r5146
1#ifndef __MC1000__
2#define __MC1000__
3
4#define SCREEN_TAG      "screen"
5#define Z80_TAG         "u13"
6#define AY8910_TAG      "u21"
7#define MC6845_TAG      "mc6845"
8#define MC6847_TAG      "u19"
9#define CASSETTE_TAG   "cassette"
10#define CENTRONICS_TAG   "centronics"
11
12#define MC1000_MC6845_VIDEORAM_SIZE      0x800
13#define MC1000_MC6847_VIDEORAM_SIZE      0x1800
14
15typedef struct _mc1000_state mc1000_state;
16struct _mc1000_state
17{
18   /* memory state */
19   int mc6845_bank;
20   int mc6847_bank;
21
22   /* keyboard state */
23   int keylatch;
24
25   /* video state */
26   UINT8 *mc6845_video_ram;
27   UINT8 *mc6847_video_ram;
28   UINT8 mc6847_attr;
29
30   /* devices */
31   const device_config *mc6845;
32   const device_config *mc6847;
33   const device_config *centronics;
34};
35
36#endif
src/mess/drivers/mc1000.c
r5145r5146
11/***************************************************************************
22
3        MC 1000
3    MC 1000
44
5        12/05/2009 Skeleton driver.
5    12/05/2009 Skeleton driver.
66
7This is running - look at memory at 8000. There's even a flashing cursor.
7   This is running - look at memory at 8000. There's even a flashing cursor.
88
9The display looks like 32x16 although memory from 8000-97FE is filled with
10spaces. The character generator rom is missing - unless it uses a 6847.
11This is a color computer.
9   The display looks like 32x16 although memory from 8000-97FE is filled with
10   spaces. The character generator rom is missing - unless it uses a 6847.
11   This is a color computer.
1212
13   http://ensjo.wikispaces.com/MC-1000+on+JEMU
14
1315****************************************************************************/
1416
17/*
18
19   TODO:
20
21   - video
22   - joystick
23   - tape
24   - 80-column card (MC6845)
25   - save state
26   - B&W mode color artifacting (mc6847 takes care of this?)
27   - Charlemagne / GEM-1000 / Junior Computer
28
29*/
30
1531#include "driver.h"
32#include "includes/mc1000.h"
1633#include "cpu/z80/z80.h"
34#include "devices/cassette.h"
35#include "video/m6847.h"
36#include "sound/ay8910.h"
37#include "machine/ctronics.h"
1738
18static ADDRESS_MAP_START(mc1000_mem, ADDRESS_SPACE_PROGRAM, 8)
19   ADDRESS_MAP_UNMAP_HIGH
20   AM_RANGE( 0x0000, 0xbfff ) AM_RAM
21   AM_RANGE( 0xc000, 0xffff ) AM_ROM
39static const device_config *cassette_device_image(running_machine *machine)
40{
41   return devtag_get_device(machine, CASSETTE_TAG);
42}
43
44/* Memory Banking */
45
46static void mc1000_bankswitch(running_machine *machine)
47{
48   mc1000_state *state = machine->driver_data;
49   const address_space *program = cputag_get_address_space(machine, Z80_TAG, ADDRESS_SPACE_PROGRAM);
50
51   /* ROM/RAM */
52   memory_install_readwrite8_handler(program, 0x0000, 0x1fff, 0, 0, SMH_BANK(1), SMH_BANK(1));
53
54   /* MC6845 video RAM */
55   memory_install_readwrite8_handler(program, 0x2000, 0x27ff, 0, 0, SMH_BANK(2), SMH_BANK(2));
56   memory_set_bank(machine, 2, state->mc6845_bank);
57
58   /* extended RAM */
59   if (mess_ram_size > 16*1024)
60   {
61      memory_install_readwrite8_handler(program, 0x4000, 0x7fff, 0, 0, SMH_BANK(3), SMH_BANK(3));
62   }
63   else
64   {
65      memory_install_readwrite8_handler(program, 0x4000, 0x7fff, 0, 0, SMH_UNMAP, SMH_UNMAP);
66   }
67
68   /* MC6847 video RAM */
69   if (state->mc6847_bank)
70   {
71      if (mess_ram_size > 16*1024)
72      {
73         memory_install_readwrite8_handler(program, 0x8000, 0x97ff, 0, 0, SMH_BANK(4), SMH_BANK(4));
74      }
75      else
76      {
77         memory_install_readwrite8_handler(program, 0x8000, 0x97ff, 0, 0, SMH_UNMAP, SMH_UNMAP);
78      }
79   }
80
81   memory_set_bank(machine, 4, state->mc6847_bank);
82
83   /* extended RAM */
84   if (mess_ram_size > 16*1024)
85   {
86      memory_install_readwrite8_handler(program, 0x9800, 0xbfff, 0, 0, SMH_BANK(5), SMH_BANK(5));
87   }
88   else
89   {
90      memory_install_readwrite8_handler(program, 0x9800, 0xbfff, 0, 0, SMH_UNMAP, SMH_UNMAP);
91   }
92}
93
94/* Read/Write Handlers */
95
96static READ8_HANDLER( printer_r )
97{
98   mc1000_state *state = space->machine->driver_data;
99   
100   return centronics_busy_r(state->centronics);
101}
102
103static WRITE8_HANDLER( printer_w )
104{
105   mc1000_state *state = space->machine->driver_data;
106
107   centronics_strobe_w(state->centronics, BIT(data, 0));
108}
109
110static WRITE8_HANDLER( mc6845_ctrl_w )
111{
112   mc1000_state *state = space->machine->driver_data;
113
114   state->mc6845_bank = BIT(data, 0);
115
116   memory_set_bank(space->machine, 1, 0);
117
118   mc1000_bankswitch(space->machine);
119}
120
121static WRITE8_HANDLER( mc6847_attr_w )
122{
123   /*
124
125      bit      description
126
127      0      enable CPU video RAM access
128      1      CSS
129      2      GM0
130      3      GM1
131      4      GM2
132      5      _INT/EXT
133      6      _A/S
134      7      _A/G
135
136   */
137
138   mc1000_state *state = space->machine->driver_data;
139
140   state->mc6847_bank = BIT(data, 0);
141
142   mc1000_bankswitch(space->machine);
143
144   state->mc6847_attr = data;
145
146   logerror("MC6847 %02x\n", data);
147}
148
149/* Memory Maps */
150
151static ADDRESS_MAP_START( mc1000_mem, ADDRESS_SPACE_PROGRAM, 8 )
152   AM_RANGE(0x0000, 0x1fff) AM_RAMBANK(1)
153   AM_RANGE(0x2000, 0x27ff) AM_RAMBANK(2) // MC6845 video RAM
154   AM_RANGE(0x2800, 0x3fff) AM_RAM
155   AM_RANGE(0x4000, 0x7fff) AM_RAMBANK(3)
156   AM_RANGE(0x8000, 0x97ff) AM_RAMBANK(4) // MC6847 video RAM
157   AM_RANGE(0x9800, 0xbfff) AM_RAMBANK(5)
158   AM_RANGE(0xc000, 0xffff) AM_ROM
22159ADDRESS_MAP_END
23160
24static ADDRESS_MAP_START( mc1000_io , ADDRESS_SPACE_IO, 8)
25   ADDRESS_MAP_UNMAP_HIGH
161static ADDRESS_MAP_START( mc1000_io, ADDRESS_SPACE_IO, 8 )
162   ADDRESS_MAP_GLOBAL_MASK(0xff)
163   AM_RANGE(0x04, 0x04) AM_READWRITE(printer_r, printer_w)
164   AM_RANGE(0x05, 0x05) AM_DEVWRITE(CENTRONICS_TAG, centronics_data_w)
165//   AM_RANGE(0x10, 0x10) AM_DEVWRITE(MC6845_TAG, mc6845_address_w)
166//   AM_RANGE(0x11, 0x11) AM_DEVREADWRITE(MC6845_TAG, mc6845_register_r, mc6845_register_w)
167   AM_RANGE(0x12, 0x12) AM_WRITE(mc6845_ctrl_w)   
168   AM_RANGE(0x20, 0x20) AM_DEVWRITE(AY8910_TAG, ay8910_address_w)
169   AM_RANGE(0x40, 0x40) AM_DEVREAD(AY8910_TAG, ay8910_r)
170   AM_RANGE(0x60, 0x60) AM_DEVWRITE(AY8910_TAG, ay8910_data_w)
171   AM_RANGE(0x80, 0x80) AM_WRITE(mc6847_attr_w)
26172ADDRESS_MAP_END
27173
28/* Input ports */
174/* Input Ports */
175
29176static INPUT_PORTS_START( mc1000 )
177   PORT_START("ROW0")
178   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('@')
179   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
180   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
181   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
182   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
183   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
184
185   PORT_START("ROW1")
186   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
187   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
188   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
189   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
190   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('1')
191   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('9')
192
193   PORT_START("ROW2")
194   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
195   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
196   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
197   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
198   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
199   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
200
201   PORT_START("ROW3")
202   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
203   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
204   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
205   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
206   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
207   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
208
209   PORT_START("ROW4")
210   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
211   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
212   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
213   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
214   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
215   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
216
217   PORT_START("ROW5")
218   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
219   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
220   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
221   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RUBOUT") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
222   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
223   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
224
225   PORT_START("ROW6")
226   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
227   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
228   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
229   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('^')
230   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
231   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
232
233   PORT_START("ROW7")
234   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
235   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
236   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
237   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RESET")
238   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
239   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
240
241   PORT_START("MODIFIERS")
242   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
243   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
244
245   PORT_INCLUDE( m6847_artifacting )
30246INPUT_PORTS_END
31247
248/* Video */
32249
33static MACHINE_RESET(mc1000)
250static ATTR_CONST UINT8 mc1000_get_attributes(running_machine *machine, UINT8 c, int scanline, int pos)
34251{
252   mc1000_state *state = machine->driver_data;
253
254   UINT8 data = 0;
255
256   data |= BIT(state->mc6847_attr, 1) ? M6847_CSS : 0;
257   data |= BIT(state->mc6847_attr, 2) ? M6847_GM0 : 0;
258   data |= BIT(state->mc6847_attr, 3) ? M6847_GM1 : 0;
259   data |= BIT(state->mc6847_attr, 4) ? M6847_GM2 : 0;
260   data |= BIT(state->mc6847_attr, 5) ? M6847_INTEXT : 0;
261   data |= BIT(state->mc6847_attr, 6) ? M6847_AS : 0;
262   data |= BIT(state->mc6847_attr, 7) ? M6847_AG : 0;
263
264   return data;
35265}
36266
267static const UINT8 *mc1000_get_video_ram(running_machine *machine, int scanline)
268{
269   mc1000_state *state = machine->driver_data;
270
271   return state->mc6847_video_ram + scanline*32;
272}
273
37274static VIDEO_START( mc1000 )
38275{
276   m6847_config cfg;
277
278   memset(&cfg, 0, sizeof(cfg));
279
280   cfg.type = M6847_VERSION_ORIGINAL_PAL;
281   cfg.get_attributes = mc1000_get_attributes;
282   cfg.get_video_ram = mc1000_get_video_ram;
283
284   m6847_init(machine, &cfg);
39285}
40286
41static VIDEO_UPDATE( mc1000 )
287/* AY-3-8910 Interface */
288
289static WRITE8_DEVICE_HANDLER( keylatch_w )
42290{
43    return 0;
291   mc1000_state *state = device->machine->driver_data;
292
293   state->keylatch = data;
294
295   cassette_output(cassette_device_image(device->machine), BIT(data, 7) ? +1.0 : -1.0);
44296}
45297
298static READ8_DEVICE_HANDLER( keydata_r )
299{
300   mc1000_state *state = device->machine->driver_data;
301
302   UINT8 data = 0xff;
303
304   if (!BIT(state->keylatch, 0)) data &= input_port_read(device->machine, "ROW0");
305   if (!BIT(state->keylatch, 1)) data &= input_port_read(device->machine, "ROW1");
306   if (!BIT(state->keylatch, 2)) data &= input_port_read(device->machine, "ROW2");
307   if (!BIT(state->keylatch, 3)) data &= input_port_read(device->machine, "ROW3");
308   if (!BIT(state->keylatch, 4)) data &= input_port_read(device->machine, "ROW4");
309   if (!BIT(state->keylatch, 5)) data &= input_port_read(device->machine, "ROW5");
310   if (!BIT(state->keylatch, 6)) data &= input_port_read(device->machine, "ROW6");
311   if (!BIT(state->keylatch, 7)) data &= input_port_read(device->machine, "ROW7");
312
313   data &= ((input_port_read(device->machine, "MODIFIERS") & 0xc0) | 0x3f);
314
315   data &= (((cassette_input(cassette_device_image(device->machine)) < +0.0) << 7) | 0x7f);
316
317   return data;
318}
319
320static const ay8910_interface ay8910_intf =
321{
322   AY8910_LEGACY_OUTPUT,
323   AY8910_DEFAULT_LOADS,
324   DEVCB_NULL,
325   DEVCB_HANDLER(keydata_r),
326   DEVCB_HANDLER(keylatch_w),
327   DEVCB_NULL
328};
329
330/* Machine Start */
331
332static MACHINE_START( mc1000 )
333{
334   mc1000_state *state = machine->driver_data;
335
336   /* find devices */
337   state->mc6845 = devtag_get_device(machine, MC6845_TAG);
338   state->centronics = devtag_get_device(machine, CENTRONICS_TAG);
339
340   /* allocate video RAM */
341   state->mc6845_video_ram = auto_alloc_array(machine, UINT8, MC1000_MC6845_VIDEORAM_SIZE);
342   state->mc6847_video_ram = auto_alloc_array(machine, UINT8, MC1000_MC6847_VIDEORAM_SIZE);
343
344   /* setup memory banking */
345   memory_configure_bank(machine, 1, 0, 1, memory_region(machine, Z80_TAG), 0);
346   memory_configure_bank(machine, 1, 1, 1, memory_region(machine, Z80_TAG) + 0xc000, 0);
347   memory_set_bank(machine, 1, 1);
348
349   memory_configure_bank(machine, 2, 0, 1, memory_region(machine, Z80_TAG) + 0x2000, 0);
350   memory_configure_bank(machine, 2, 1, 1, state->mc6845_video_ram, 0);
351   memory_set_bank(machine, 2, 0);
352
353   memory_configure_bank(machine, 3, 0, 1, memory_region(machine, Z80_TAG) + 0x4000, 0);
354   memory_set_bank(machine, 3, 0);
355
356   memory_configure_bank(machine, 4, 0, 1, memory_region(machine, Z80_TAG) + 0x8000, 0);
357   memory_configure_bank(machine, 4, 1, 1, state->mc6847_video_ram, 0);
358   memory_set_bank(machine, 4, 0);
359
360   memory_configure_bank(machine, 5, 0, 1, memory_region(machine, Z80_TAG) + 0x9800, 0);
361   memory_set_bank(machine, 5, 0);
362
363   mc1000_bankswitch(machine);
364}
365
366/* Machine Driver */
367
368static const cassette_config mc1000_cassette_config =
369{
370   cassette_default_formats,
371   NULL,
372   CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED
373};
374
375static INTERRUPT_GEN( mc1000_int )
376{
377   cputag_set_input_line(device->machine, Z80_TAG, INPUT_LINE_IRQ0, ASSERT_LINE);
378}
379
46380static MACHINE_DRIVER_START( mc1000 )
47    /* basic machine hardware */
48    MDRV_CPU_ADD("maincpu",Z80, XTAL_4MHz)
381   MDRV_DRIVER_DATA(mc1000_state)
382
383   /* basic machine hardware */
384    MDRV_CPU_ADD(Z80_TAG, Z80, 3579545)
49385    MDRV_CPU_PROGRAM_MAP(mc1000_mem)
50386    MDRV_CPU_IO_MAP(mc1000_io)
387   MDRV_CPU_VBLANK_INT(SCREEN_TAG, mc1000_int)
51388
52    MDRV_MACHINE_RESET(mc1000)
389    MDRV_MACHINE_START(mc1000)
53390
54391    /* video hardware */
55    MDRV_SCREEN_ADD("screen", RASTER)
56    MDRV_SCREEN_REFRESH_RATE(50)
392    MDRV_SCREEN_ADD(SCREEN_TAG, RASTER)
393    MDRV_SCREEN_REFRESH_RATE(M6847_NTSC_FRAMES_PER_SECOND)
57394    MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
58    MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
59    MDRV_SCREEN_SIZE(640, 480)
60    MDRV_SCREEN_VISIBLE_AREA(0, 640-1, 0, 480-1)
61    MDRV_PALETTE_LENGTH(2)
62    MDRV_PALETTE_INIT(black_and_white)
395    MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB32)
396   MDRV_SCREEN_SIZE(320, 25+192+26)
397   MDRV_SCREEN_VISIBLE_AREA(0, 319, 1, 239)
398    MDRV_PALETTE_LENGTH(16)
63399
64400    MDRV_VIDEO_START(mc1000)
65    MDRV_VIDEO_UPDATE(mc1000)
401    MDRV_VIDEO_UPDATE(m6847)
402
403   /* sound hardware */
404   MDRV_SPEAKER_STANDARD_MONO("mono")
405   MDRV_SOUND_ADD(AY8910_TAG, AY8910, 3579545/2)
406   MDRV_SOUND_CONFIG(ay8910_intf)
407   MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
408
409   /* devices */
410   MDRV_CASSETTE_ADD(CASSETTE_TAG, mc1000_cassette_config)
411   MDRV_CENTRONICS_ADD(CENTRONICS_TAG, standard_centronics)
66412MACHINE_DRIVER_END
67413
68static SYSTEM_CONFIG_START(mc1000)
69SYSTEM_CONFIG_END
414/* ROMs */
70415
71/* ROM definition */
72416ROM_START( mc1000 )
73   ROM_REGION( 0x10000, "maincpu", 0 )
74   ROM_LOAD( "mc1000.rom", 0xc000, 0x4000, CRC(d46f67d5) SHA1(48a2539506a24ea7478cb20ae1ea1226e2f670c4))
417   ROM_REGION( 0x10000, Z80_TAG, 0 )
418   ROM_LOAD( "mc1000.ic17", 0xc000, 0x2000, CRC(8e78d80d) SHA1(9480270e67a5db2e7de8bc5c8b9e0bb210d4142b) )
419   ROM_LOAD( "mc1000.ic12", 0xe000, 0x2000, CRC(750c95f0) SHA1(fd766f5ea4481ef7fd4df92cf7d8397cc2b5a6c4) )
75420ROM_END
76421
77/* Driver */
422/* System Configuration */
78423
79/*    YEAR  NAME    PARENT  COMPAT   MACHINE    INPUT    INIT    CONFIG COMPANY   FULLNAME       FLAGS */
80COMP( ????, mc1000,  0,       0,    mc1000,    mc1000,     0,       mc1000,      "CCE",   "MC-1000",      GAME_NOT_WORKING)
424static SYSTEM_CONFIG_START( mc1000 )
425   CONFIG_RAM_DEFAULT( 16 * 1024 )
426   CONFIG_RAM        ( 48 * 1024 )
427SYSTEM_CONFIG_END
81428
429/* System Drivers */
430
431/*    YEAR   NAME      PARENT      COMPAT   MACHINE      INPUT      INIT   CONFIG      COMPANY            FULLNAME      FLAGS */
432COMP( 1985,   mc1000,      0,         0,      mc1000,      mc1000,      0,      mc1000,      "CCE",            "MC-1000",      GAME_NOT_WORKING)

Previous 15994 Revisions Next


© 1998-2018 The MESS Team