Previous 15994 Revisions Next

r5147 Saturday 4th July, 2009 at 16:56:06 UTC by Curt Coder
[MC1000] Fixed video, keyboard, and ROM mapping at boot. System is now usable.
[docs]messnew.txt
[src/mess/drivers]mc1000.c
[src/mess/includes]mc1000.h

src/mess/includes/mc1000.h
r5146r5147
1616struct _mc1000_state
1717{
1818   /* memory state */
19   int rom0000;
1920   int mc6845_bank;
2021   int mc6847_bank;
2122
src/mess/drivers/mc1000.c
r5146r5147
1818
1919   TODO:
2020
21   - video
21   - 60 Hz interrupt from NE555
22   - Z80 _WAIT on 6847 _FS or _HS
2223   - joystick
2324   - tape
2425   - 80-column card (MC6845)
r5146r5147
7778         memory_install_readwrite8_handler(program, 0x8000, 0x97ff, 0, 0, SMH_UNMAP, SMH_UNMAP);
7879      }
7980   }
81   else
82   {
83      memory_install_readwrite8_handler(program, 0x8000, 0x97ff, 0, 0, SMH_BANK(4), SMH_BANK(4));
84   }
8085
8186   memory_set_bank(machine, 4, state->mc6847_bank);
8287
r5146r5147
113118
114119   state->mc6845_bank = BIT(data, 0);
115120
116   memory_set_bank(space->machine, 1, 0);
117
118121   mc1000_bankswitch(space->machine);
119122}
120123
r5146r5147
142145   mc1000_bankswitch(space->machine);
143146
144147   state->mc6847_attr = data;
145
146   logerror("MC6847 %02x\n", data);
147148}
148149
149150/* Memory Maps */
r5146r5147
181182   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
182183   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
183184   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
185   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
184186
185187   PORT_START("ROW1")
186188   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
r5146r5147
189191   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
190192   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('1')
191193   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('9')
194   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
192195
193196   PORT_START("ROW2")
194197   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
r5146r5147
197200   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
198201   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('"')
199202   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
203   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
200204
201205   PORT_START("ROW3")
202206   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
r5146r5147
205209   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
206210   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
207211   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR('+')
212   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
208213
209214   PORT_START("ROW4")
210215   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
r5146r5147
213218   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
214219   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
215220   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
221   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
216222
217223   PORT_START("ROW5")
218224   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
r5146r5147
221227   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RUBOUT") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
222228   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
223229   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
230   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
224231
225232   PORT_START("ROW6")
226233   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
r5146r5147
229236   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('^')
230237   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
231238   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
239   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
232240
233241   PORT_START("ROW7")
234242   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
r5146r5147
237245   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RESET")
238246   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
239247   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
248   PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNUSED )
240249
241250   PORT_START("MODIFIERS")
242251   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
r5146r5147
247256
248257/* Video */
249258
259static void mc1000_hsync(running_machine *machine, int data)
260{
261   // Z80 WAIT
262}
263   
264static void mc1000_vsync(running_machine *machine, int data)
265{
266   // Z80 WAIT
267}
268
250269static ATTR_CONST UINT8 mc1000_get_attributes(running_machine *machine, UINT8 c, int scanline, int pos)
251270{
252271   mc1000_state *state = machine->driver_data;
253272
254273   UINT8 data = 0;
255274
275   data |= BIT(c, 7) ? M6847_INV : 0;
256276   data |= BIT(state->mc6847_attr, 1) ? M6847_CSS : 0;
257277   data |= BIT(state->mc6847_attr, 2) ? M6847_GM0 : 0;
258278   data |= BIT(state->mc6847_attr, 3) ? M6847_GM1 : 0;
r5146r5147
268288{
269289   mc1000_state *state = machine->driver_data;
270290
271   return state->mc6847_video_ram + scanline*32;
291   return state->mc6847_video_ram + (scanline / 12) * 0x20;
272292}
273293
274294static VIDEO_START( mc1000 )
r5146r5147
277297
278298   memset(&cfg, 0, sizeof(cfg));
279299
280   cfg.type = M6847_VERSION_ORIGINAL_PAL;
300   cfg.type = M6847_VERSION_ORIGINAL_NTSC;
301   cfg.horizontal_sync_callback = mc1000_hsync;
302   cfg.field_sync_callback = mc1000_vsync;
281303   cfg.get_attributes = mc1000_get_attributes;
282304   cfg.get_video_ram = mc1000_get_video_ram;
283305
r5146r5147
312334
313335   data &= ((input_port_read(device->machine, "MODIFIERS") & 0xc0) | 0x3f);
314336
315   data &= (((cassette_input(cassette_device_image(device->machine)) < +0.0) << 7) | 0x7f);
337//   data &= (((cassette_input(cassette_device_image(device->machine)) < +0.0) << 7) | 0x7f);
316338
317339   return data;
318340}
r5146r5147
327349   DEVCB_NULL
328350};
329351
330/* Machine Start */
352/* Machine Initialization */
331353
332354static MACHINE_START( mc1000 )
333355{
r5146r5147
346368   memory_configure_bank(machine, 1, 1, 1, memory_region(machine, Z80_TAG) + 0xc000, 0);
347369   memory_set_bank(machine, 1, 1);
348370
371   state->rom0000 = 1;
372
349373   memory_configure_bank(machine, 2, 0, 1, memory_region(machine, Z80_TAG) + 0x2000, 0);
350374   memory_configure_bank(machine, 2, 1, 1, state->mc6845_video_ram, 0);
351375   memory_set_bank(machine, 2, 0);
r5146r5147
353377   memory_configure_bank(machine, 3, 0, 1, memory_region(machine, Z80_TAG) + 0x4000, 0);
354378   memory_set_bank(machine, 3, 0);
355379
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);
380   memory_configure_bank(machine, 4, 0, 1, state->mc6847_video_ram, 0);
381   memory_configure_bank(machine, 4, 1, 1, memory_region(machine, Z80_TAG) + 0x8000, 0);
358382   memory_set_bank(machine, 4, 0);
359383
360384   memory_configure_bank(machine, 5, 0, 1, memory_region(machine, Z80_TAG) + 0x9800, 0);
r5146r5147
363387   mc1000_bankswitch(machine);
364388}
365389
390static MACHINE_RESET( mc1000 )
391{
392   mc1000_state *state = machine->driver_data;
393
394   memory_set_bank(machine, 1, 1);
395
396   state->rom0000 = 1;
397}
398
366399/* Machine Driver */
367400
368401static const cassette_config mc1000_cassette_config =
r5146r5147
372405   CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED
373406};
374407
375static INTERRUPT_GEN( mc1000_int )
376{
377   cputag_set_input_line(device->machine, Z80_TAG, INPUT_LINE_IRQ0, ASSERT_LINE);
378}
379
380408static MACHINE_DRIVER_START( mc1000 )
381409   MDRV_DRIVER_DATA(mc1000_state)
382410
r5146r5147
384412    MDRV_CPU_ADD(Z80_TAG, Z80, 3579545)
385413    MDRV_CPU_PROGRAM_MAP(mc1000_mem)
386414    MDRV_CPU_IO_MAP(mc1000_io)
387   MDRV_CPU_VBLANK_INT(SCREEN_TAG, mc1000_int)
388415
389416    MDRV_MACHINE_START(mc1000)
417    MDRV_MACHINE_RESET(mc1000)
390418
391419    /* video hardware */
392420    MDRV_SCREEN_ADD(SCREEN_TAG, RASTER)
r5146r5147
426454   CONFIG_RAM        ( 48 * 1024 )
427455SYSTEM_CONFIG_END
428456
457/* Driver Initialization */
458
459static DIRECT_UPDATE_HANDLER( mc1000_direct_update_handler )
460{
461   mc1000_state *state = space->machine->driver_data;
462
463   if (state->rom0000)
464   {
465      if (address >= 0xc000)
466      {
467         memory_set_bank(space->machine, 1, 0);
468         state->rom0000 = 0;
469      }
470   }
471
472   return address;
473}
474
475static DRIVER_INIT( mc1000 )
476{
477   memory_set_direct_update_handler(cputag_get_address_space(machine, Z80_TAG, ADDRESS_SPACE_PROGRAM), mc1000_direct_update_handler);
478}
479
429480/* System Drivers */
430481
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)
482/*    YEAR   NAME      PARENT      COMPAT   MACHINE      INPUT      INIT      CONFIG      COMPANY            FULLNAME      FLAGS */
483COMP( 1985,   mc1000,      0,         0,      mc1000,      mc1000,      mc1000,      mc1000,      "CCE",            "MC-1000",      0 )
docs/messnew.txt
r5146r5147
3434- [GENESIS] Save RAM emulation improved for several games (bugs #1691, #1696,
3535  #1823, #1824) [Enik]
3636
37- [MC1000] System is now basically working. [Curt Coder]
38
3739- [PC] Renamed bondwell to bw230. [Curt Coder]
3840
3941- [SEGA CD] Split up sets and added new dumps. [Justin Kerk, TmEE]
r5146r5147
4345- [TI85] Fixed TI-82/TI-83 on/off and NVRAM, added a DSW to TI-83 for the
4446  battery status [Xander]
4547 
46- [TIKI100] System is now working, except DS disks and scroll. [Curt Coder]
48- [TIKI100] System is now working, except for double sided disks. [Curt Coder]
4749
4850
4951

Previous 15994 Revisions Next


© 1998-2018 The MESS Team