Previous 199869 Revisions Next

r20138 Wednesday 9th January, 2013 at 01:19:08 UTC by R. Belmont
(MESS) pce/tg16/sgx: Convert to using new more accurate video chip device emulation [Wilbert Pol]
[src/mess/drivers]pce.c

trunk/src/mess/drivers/pce.c
r20137r20138
6666#include "video/huc6270.h"
6767#include "video/huc6202.h"
6868
69
70static ADDRESS_MAP_START( pce_mem , AS_PROGRAM, 8, pce_state )
71   AM_RANGE( 0x000000, 0x07FFFF) AM_ROMBANK("bank1")
72   AM_RANGE( 0x080000, 0x087FFF) AM_ROMBANK("bank2")
73   AM_RANGE( 0x088000, 0x0CFFFF) AM_ROMBANK("bank3")
74   AM_RANGE( 0x0D0000, 0x0FFFFF) AM_ROMBANK("bank4")
75   AM_RANGE( 0x100000, 0x10FFFF) AM_RAM AM_SHARE("cd_ram")
76   AM_RANGE( 0x110000, 0x1EDFFF) AM_NOP
77   AM_RANGE( 0x1EE000, 0x1EE7FF) AM_ROMBANK("bank10") AM_WRITE(pce_cd_bram_w )
78   AM_RANGE( 0x1EE800, 0x1EFFFF) AM_NOP
79   AM_RANGE( 0x1F0000, 0x1F1FFF) AM_RAM AM_MIRROR(0x6000) AM_SHARE("user_ram")
80   AM_RANGE( 0x1FE000, 0x1FE3FF) AM_READWRITE_LEGACY(vdc_0_r, vdc_0_w )
81   AM_RANGE( 0x1FE400, 0x1FE7FF) AM_READWRITE_LEGACY(vce_r, vce_w )
82   AM_RANGE( 0x1FE800, 0x1FEBFF) AM_DEVREADWRITE(C6280_TAG, c6280_device, c6280_r, c6280_w )
83   AM_RANGE( 0x1FEC00, 0x1FEFFF) AM_DEVREADWRITE("maincpu", h6280_device, timer_r, timer_w )
84   AM_RANGE( 0x1FF000, 0x1FF3FF) AM_READWRITE(mess_pce_joystick_r, mess_pce_joystick_w )
85   AM_RANGE( 0x1FF400, 0x1FF7FF) AM_DEVREADWRITE("maincpu", h6280_device, irq_status_r, irq_status_w )
86   AM_RANGE( 0x1FF800, 0x1FFBFF) AM_READWRITE(pce_cd_intf_r, pce_cd_intf_w )
87ADDRESS_MAP_END
88
89static ADDRESS_MAP_START( pce_io , AS_IO, 8, pce_state )
90   AM_RANGE( 0x00, 0x03) AM_READWRITE_LEGACY(vdc_0_r, vdc_0_w )
91ADDRESS_MAP_END
92
93static ADDRESS_MAP_START( sgx_mem , AS_PROGRAM, 8, pce_state )
94   AM_RANGE( 0x000000, 0x07FFFF) AM_ROMBANK("bank1")
95   AM_RANGE( 0x080000, 0x087FFF) AM_ROMBANK("bank2")
96   AM_RANGE( 0x088000, 0x0CFFFF) AM_ROMBANK("bank3")
97   AM_RANGE( 0x0D0000, 0x0FFFFF) AM_ROMBANK("bank4")
98   AM_RANGE( 0x100000, 0x10FFFF) AM_RAM AM_SHARE("cd_ram")
99   AM_RANGE( 0x110000, 0x1EDFFF) AM_NOP
100   AM_RANGE( 0x1EE000, 0x1EE7FF) AM_ROMBANK("bank10") AM_WRITE(pce_cd_bram_w )
101   AM_RANGE( 0x1EE800, 0x1EFFFF) AM_NOP
102   AM_RANGE( 0x1F0000, 0x1F7FFF) AM_RAM AM_SHARE("user_ram")
103   AM_RANGE( 0x1FE000, 0x1FE007) AM_READWRITE_LEGACY(vdc_0_r, vdc_0_w ) AM_MIRROR(0x03E0)
104   AM_RANGE( 0x1FE008, 0x1FE00F) AM_READWRITE_LEGACY(vpc_r, vpc_w ) AM_MIRROR(0x03E0)
105   AM_RANGE( 0x1FE010, 0x1FE017) AM_READWRITE_LEGACY(vdc_1_r, vdc_1_w ) AM_MIRROR(0x03E0)
106   AM_RANGE( 0x1FE400, 0x1FE7FF) AM_READWRITE_LEGACY(vce_r, vce_w )
107   AM_RANGE( 0x1FE800, 0x1FEBFF) AM_DEVREADWRITE(C6280_TAG, c6280_device, c6280_r, c6280_w )
108   AM_RANGE( 0x1FEC00, 0x1FEFFF) AM_DEVREADWRITE("maincpu", h6280_device, timer_r, timer_w )
109   AM_RANGE( 0x1FF000, 0x1FF3FF) AM_READWRITE(mess_pce_joystick_r, mess_pce_joystick_w )
110   AM_RANGE( 0x1FF400, 0x1FF7FF) AM_DEVREADWRITE("maincpu", h6280_device, irq_status_r, irq_status_w )
111   AM_RANGE( 0x1FF800, 0x1FFBFF) AM_READWRITE(pce_cd_intf_r, pce_cd_intf_w )
112ADDRESS_MAP_END
113
114static ADDRESS_MAP_START( sgx_io , AS_IO, 8, pce_state )
115   AM_RANGE( 0x00, 0x03) AM_READWRITE_LEGACY(sgx_vdc_r, sgx_vdc_w )
116ADDRESS_MAP_END
117
11869/* todo: alternate forms of input (multitap, mouse, etc.) */
11970static INPUT_PORTS_START( pce )
12071
r20137r20138
344295   MCFG_SOFTWARE_LIST_ADD("cart_list","sgx")
345296MACHINE_CONFIG_END
346297
347static MACHINE_CONFIG_START( pce_common, pce_state )
348   /* basic machine hardware */
349   MCFG_CPU_ADD("maincpu", H6280, MAIN_CLOCK/3)
350   MCFG_CPU_PROGRAM_MAP(pce_mem)
351   MCFG_CPU_IO_MAP(pce_io)
352   MCFG_TIMER_ADD_SCANLINE("scantimer", pce_interrupt, "screen", 0, 1)
353
354//  MCFG_QUANTUM_TIME(attotime::from_hz(60))
355
356   MCFG_MACHINE_START_OVERRIDE(pce_state, pce )
357   MCFG_MACHINE_RESET_OVERRIDE(pce_state, mess_pce )
358
359    /* video hardware */
360   MCFG_SCREEN_ADD("screen", RASTER)
361   MCFG_SCREEN_REFRESH_RATE(60)
362   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
363   MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK/2, VDC_WPF, 70, 70 + 512 + 32, VDC_LPF, 14, 14+242)
364   MCFG_SCREEN_UPDATE_STATIC( pce )
365
366   /* MCFG_GFXDECODE( pce ) */
367   MCFG_PALETTE_LENGTH(1024)
368   MCFG_PALETTE_INIT( vce )
369
370   MCFG_VIDEO_START( pce )
371
372   MCFG_NVRAM_ADD_0FILL("nvram")
373
374   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
375   MCFG_SOUND_ADD(C6280_TAG, C6280, MAIN_CLOCK/6)
376   MCFG_SOUND_CONFIG(c6280_config)
377   MCFG_SOUND_ROUTE( 0, "lspeaker", 1.00 )
378   MCFG_SOUND_ROUTE( 1, "rspeaker", 1.00 )
379
380   MCFG_SOUND_ADD( "msm5205", MSM5205, PCE_CD_CLOCK / 6 )
381   MCFG_SOUND_CONFIG( pce_cd_msm5205_interface )
382   MCFG_SOUND_ROUTE( ALL_OUTPUTS, "lspeaker", 0.50 )
383   MCFG_SOUND_ROUTE( ALL_OUTPUTS, "rspeaker", 0.50 )
384
385   MCFG_SOUND_ADD( "cdda", CDDA, 0 )
386   MCFG_SOUND_ROUTE( 0, "lspeaker", 1.00 )
387   MCFG_SOUND_ROUTE( 1, "rspeaker", 1.00 )
388MACHINE_CONFIG_END
389
390static MACHINE_CONFIG_DERIVED( pce, pce_common )
391   MCFG_FRAGMENT_ADD( pce_cartslot )
392   MCFG_FRAGMENT_ADD( pce_cdslot )
393MACHINE_CONFIG_END
394
395static MACHINE_CONFIG_DERIVED( tg16, pce_common )
396   MCFG_FRAGMENT_ADD( tg16_cartslot )
397   MCFG_FRAGMENT_ADD( pce_cdslot )
398MACHINE_CONFIG_END
399
400static MACHINE_CONFIG_START( sgx, pce_state )
401   /* basic machine hardware */
402   MCFG_CPU_ADD("maincpu", H6280, MAIN_CLOCK/3)
403   MCFG_CPU_PROGRAM_MAP(sgx_mem)
404   MCFG_CPU_IO_MAP(sgx_io)
405   MCFG_TIMER_ADD_SCANLINE("scantimer", sgx_interrupt, "screen", 0, 1)
406   MCFG_QUANTUM_TIME(attotime::from_hz(60))
407
408   MCFG_MACHINE_START_OVERRIDE(pce_state, pce )
409   MCFG_MACHINE_RESET_OVERRIDE(pce_state, mess_pce )
410
411   /* video hardware */
412   MCFG_SCREEN_ADD("screen", RASTER)
413   MCFG_SCREEN_REFRESH_RATE(60)
414   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
415   MCFG_SCREEN_RAW_PARAMS(MAIN_CLOCK/2, VDC_WPF, 70, 70 + 512 + 32, VDC_LPF, 14, 14+242)
416   MCFG_SCREEN_UPDATE_STATIC( pce )
417
418   MCFG_PALETTE_LENGTH(1024)
419   MCFG_PALETTE_INIT( vce )
420
421   MCFG_VIDEO_START( pce )
422
423   MCFG_NVRAM_ADD_0FILL("nvram")
424
425   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
426   MCFG_SOUND_ADD(C6280_TAG, C6280, MAIN_CLOCK/6)
427   MCFG_SOUND_CONFIG(c6280_config)
428   MCFG_SOUND_ROUTE(0, "lspeaker", 1.00)
429   MCFG_SOUND_ROUTE(1, "rspeaker", 1.00)
430
431   MCFG_SOUND_ADD( "msm5205", MSM5205, PCE_CD_CLOCK / 6 )
432   MCFG_SOUND_CONFIG( pce_cd_msm5205_interface )
433   MCFG_SOUND_ROUTE( ALL_OUTPUTS, "lspeaker", 0.00 )
434   MCFG_SOUND_ROUTE( ALL_OUTPUTS, "rspeaker", 0.00 )
435
436   MCFG_SOUND_ADD( "cdda", CDDA, 0 )
437   MCFG_SOUND_ROUTE( 0, "lspeaker", 1.00 )
438   MCFG_SOUND_ROUTE( 1, "rspeaker", 1.00 )
439
440   MCFG_FRAGMENT_ADD( sgx_cartslot )
441   MCFG_FRAGMENT_ADD( pce_cdslot )
442MACHINE_CONFIG_END
443
444
445
446static ADDRESS_MAP_START( pce_mem_new , AS_PROGRAM, 8, pce_state )
298static ADDRESS_MAP_START( pce_mem , AS_PROGRAM, 8, pce_state )
447299   AM_RANGE( 0x000000, 0x07FFFF) AM_ROMBANK("bank1")
448300   AM_RANGE( 0x080000, 0x087FFF) AM_ROMBANK("bank2")
449301   AM_RANGE( 0x088000, 0x0CFFFF) AM_ROMBANK("bank3")
r20137r20138
462314   AM_RANGE( 0x1FF800, 0x1FFBFF) AM_READWRITE( pce_cd_intf_r, pce_cd_intf_w )
463315ADDRESS_MAP_END
464316
465static ADDRESS_MAP_START( pce_io_new , AS_IO, 8, pce_state )
317static ADDRESS_MAP_START( pce_io , AS_IO, 8, pce_state )
466318   AM_RANGE( 0x00, 0x03) AM_DEVREADWRITE( "huc6270", huc6270_device, read, write )
467319ADDRESS_MAP_END
468320
469321
470static ADDRESS_MAP_START( sgx_mem_new , AS_PROGRAM, 8, pce_state )
322static ADDRESS_MAP_START( sgx_mem , AS_PROGRAM, 8, pce_state )
471323   AM_RANGE( 0x000000, 0x07FFFF) AM_ROMBANK("bank1")
472324   AM_RANGE( 0x080000, 0x087FFF) AM_ROMBANK("bank2")
473325   AM_RANGE( 0x088000, 0x0CFFFF) AM_ROMBANK("bank3")
r20137r20138
489341ADDRESS_MAP_END
490342
491343
492static ADDRESS_MAP_START( sgx_io_new , AS_IO, 8, pce_state )
344static ADDRESS_MAP_START( sgx_io , AS_IO, 8, pce_state )
493345   AM_RANGE( 0x00, 0x03) AM_DEVREADWRITE( "huc6202", huc6202_device, io_read, io_write )
494346ADDRESS_MAP_END
495347
r20137r20138
564416   DEVCB_DEVICE_LINE_MEMBER( "huc6202", huc6202_device, hsync_changed )
565417};
566418
567static MACHINE_CONFIG_START( pce_common_new, pce_state )
419static MACHINE_CONFIG_START( pce_common, pce_state )
568420   /* basic machine hardware */
569421   MCFG_CPU_ADD("maincpu", H6280, MAIN_CLOCK/3)
570   MCFG_CPU_PROGRAM_MAP(pce_mem_new)
571   MCFG_CPU_IO_MAP(pce_io_new)
422   MCFG_CPU_PROGRAM_MAP(pce_mem)
423   MCFG_CPU_IO_MAP(pce_io)
572424   MCFG_QUANTUM_TIME(attotime::from_hz(60))
573425
574426   MCFG_MACHINE_START_OVERRIDE(pce_state, pce )
r20137r20138
604456MACHINE_CONFIG_END
605457
606458
607static MACHINE_CONFIG_DERIVED( pce_new, pce_common_new )
459static MACHINE_CONFIG_DERIVED( pce, pce_common )
608460   MCFG_FRAGMENT_ADD( pce_cartslot )
609461   MCFG_FRAGMENT_ADD( pce_cdslot )
610462MACHINE_CONFIG_END
611463
612464
613static MACHINE_CONFIG_DERIVED( tg16_new, pce_common_new )
465static MACHINE_CONFIG_DERIVED( tg16, pce_common )
614466   MCFG_FRAGMENT_ADD( tg16_cartslot )
615467   MCFG_FRAGMENT_ADD( pce_cdslot )
616468MACHINE_CONFIG_END
617469
618470
619static MACHINE_CONFIG_START( sgx_new, pce_state )
471static MACHINE_CONFIG_START( sgx, pce_state )
620472   /* basic machine hardware */
621473   MCFG_CPU_ADD("maincpu", H6280, MAIN_CLOCK/3)
622   MCFG_CPU_PROGRAM_MAP(sgx_mem_new)
623   MCFG_CPU_IO_MAP(sgx_io_new)
474   MCFG_CPU_PROGRAM_MAP(sgx_mem)
475   MCFG_CPU_IO_MAP(sgx_io)
624476   MCFG_QUANTUM_TIME(attotime::from_hz(60))
625477
626478   MCFG_MACHINE_START_OVERRIDE(pce_state, pce )
r20137r20138
673525#define rom_tg16 rom_pce
674526#define rom_sgx rom_pce
675527
676/*    YEAR  NAME    PARENT  COMPAT  MACHINE INPUT    INIT   COMPANY  FULLNAME */
677CONS( 1987, pce,    0,      0,      pce,    pce, pce_state,     mess_pce,          "Nippon Electronic Company", "PC Engine", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND)
678CONS( 1989, tg16,   pce,    0,      tg16,   pce, pce_state,     tg16,             "Nippon Electronic Company", "TurboGrafx 16",GAME_IMPERFECT_GRAPHICS |  GAME_IMPERFECT_SOUND)
679CONS( 1989, sgx,    pce,    0,      sgx,    pce, pce_state,     sgx,             "Nippon Electronic Company", "SuperGrafx",GAME_IMPERFECT_GRAPHICS |  GAME_IMPERFECT_SOUND)
528CONS( 1987, pce,    0,      0,      pce,    pce, pce_state,     mess_pce,   "Nippon Electronic Company", "PC Engine", GAME_IMPERFECT_SOUND)
529CONS( 1989, tg16,   pce,    0,      tg16,   pce, pce_state,     tg16,       "Nippon Electronic Company", "TurboGrafx 16", GAME_IMPERFECT_SOUND)
530CONS( 1989, sgx,    pce,    0,      sgx,    pce, pce_state,     sgx,        "Nippon Electronic Company", "SuperGrafx", GAME_IMPERFECT_SOUND)
680531
681/* Experimental versions of drivers using newer but slower device implementation of the video chips */
682#define rom_pce_new rom_pce
683#define rom_tg16_new rom_pce
684#define rom_sgx_new rom_pce
685CONS( 1987, pce_new,    0,      0,      pce_new,    pce, pce_state,     mess_pce,   "Nippon Electronic Company", "PC Engine (NEW video core)", GAME_IMPERFECT_SOUND)
686CONS( 1989, tg16_new,   pce_new,    0,      tg16_new,   pce, pce_state,     tg16,   "Nippon Electronic Company", "TurboGrafx 16 (NEW video core)", GAME_IMPERFECT_SOUND)
687CONS( 1989, sgx_new,    pce_new,    0,      sgx_new,    pce, pce_state,     sgx,    "Nippon Electronic Company", "SuperGrafx (NEW video core)", GAME_IMPERFECT_SOUND)
688

Previous 199869 Revisions Next


© 1997-2024 The MAME Team