trunk/src/mame/drivers/ksys573.c
| r22559 | r22560 | |
| 535 | 535 | driver_device(mconfig, type, tag), |
| 536 | 536 | m_psxirq(*this, ":maincpu:irq"), |
| 537 | 537 | m_cr589(*this, ":cdrom"), |
| 538 | | m_maincpu(*this, "maincpu") { } |
| 538 | m_maincpu(*this, "maincpu"), |
| 539 | m_ram(*this, "maincpu:ram") |
| 540 | { |
| 541 | } |
| 539 | 542 | |
| 540 | 543 | required_device<psxirq_device> m_psxirq; |
| 541 | 544 | |
| r22559 | r22560 | |
| 667 | 670 | void mamboagg_output_callback( int offset, int data ); |
| 668 | 671 | void punchmania_output_callback( int offset, int data ); |
| 669 | 672 | required_device<psxcpu_device> m_maincpu; |
| 673 | required_device<ram_device> m_ram; |
| 670 | 674 | }; |
| 671 | 675 | |
| 672 | 676 | void ATTR_PRINTF(3,4) ksys573_state::verboselog( int n_level, const char *s_fmt, ... ) |
| r22559 | r22560 | |
| 1462 | 1466 | { |
| 1463 | 1467 | /* patch out security-plate error */ |
| 1464 | 1468 | |
| 1465 | | UINT32 *p_n_psxram = m_maincpu->ram(); |
| 1469 | UINT32 *p_n_psxram = (UINT32 *) m_ram->pointer(); |
| 1466 | 1470 | |
| 1467 | 1471 | /* install cd */ |
| 1468 | 1472 | |
| r22559 | r22560 | |
| 1486 | 1490 | { |
| 1487 | 1491 | /* patch out security-plate error */ |
| 1488 | 1492 | |
| 1489 | | UINT32 *p_n_psxram = m_maincpu->ram(); |
| 1493 | UINT32 *p_n_psxram = (UINT32 *) m_ram->pointer(); |
| 1490 | 1494 | |
| 1491 | 1495 | /* 8001f850: jal $8003221c */ |
| 1492 | 1496 | if( p_n_psxram[ 0x1f850 / 4 ] == 0x0c00c887 ) |
| r22559 | r22560 | |
| 3056 | 3060 | static MACHINE_CONFIG_START( konami573, ksys573_state ) |
| 3057 | 3061 | /* basic machine hardware */ |
| 3058 | 3062 | MCFG_CPU_ADD( "maincpu", CXD8530CQ, XTAL_67_7376MHz ) |
| 3059 | | MCFG_PSX_RAM_SIZE( 0x400000 ) |
| 3060 | 3063 | MCFG_CPU_PROGRAM_MAP( konami573_map ) |
| 3061 | 3064 | |
| 3065 | MCFG_RAM_MODIFY("maincpu:ram") |
| 3066 | MCFG_RAM_DEFAULT_SIZE("4M") |
| 3067 | |
| 3062 | 3068 | MCFG_PSX_DMA_CHANNEL_READ( "maincpu", 5, psx_dma_read_delegate( FUNC( ksys573_state::cdrom_dma_read ), (ksys573_state *) owner ) ) |
| 3063 | 3069 | MCFG_PSX_DMA_CHANNEL_WRITE( "maincpu", 5, psx_dma_write_delegate( FUNC( ksys573_state::cdrom_dma_write ), (ksys573_state *) owner ) ) |
| 3064 | 3070 | |
trunk/src/mame/drivers/namcos11.c
| r22559 | r22560 | |
| 1010 | 1010 | static MACHINE_CONFIG_START( coh100, namcos11_state ) |
| 1011 | 1011 | /* basic machine hardware */ |
| 1012 | 1012 | MCFG_CPU_ADD( "maincpu", CXD8530AQ, XTAL_67_7376MHz ) |
| 1013 | | MCFG_PSX_RAM_SIZE( 0x400000 ) |
| 1014 | 1013 | MCFG_CPU_PROGRAM_MAP( namcos11_map ) |
| 1015 | 1014 | |
| 1015 | MCFG_RAM_MODIFY("maincpu:ram") |
| 1016 | MCFG_RAM_DEFAULT_SIZE("4M") |
| 1017 | |
| 1016 | 1018 | MCFG_CPU_ADD("c76", M37702, 16934400) |
| 1017 | 1019 | MCFG_CPU_PROGRAM_MAP(c76_map) |
| 1018 | 1020 | MCFG_CPU_IO_MAP(c76_io_map) |
| r22559 | r22560 | |
| 1038 | 1040 | |
| 1039 | 1041 | static MACHINE_CONFIG_DERIVED( coh110, coh100 ) |
| 1040 | 1042 | MCFG_CPU_REPLACE( "maincpu", CXD8530CQ, XTAL_67_7376MHz ) |
| 1041 | | MCFG_PSX_RAM_SIZE( 0x400000 ) |
| 1042 | 1043 | MCFG_CPU_PROGRAM_MAP( namcos11_map ) |
| 1043 | 1044 | |
| 1045 | MCFG_RAM_MODIFY("maincpu:ram") |
| 1046 | MCFG_RAM_DEFAULT_SIZE("4M") |
| 1047 | |
| 1044 | 1048 | MCFG_PSXGPU_REPLACE( "maincpu", "gpu", CXD8561Q, 0x200000, XTAL_53_693175MHz ) |
| 1045 | 1049 | MACHINE_CONFIG_END |
| 1046 | 1050 | |
trunk/src/mame/drivers/zn.c
| r22559 | r22560 | |
| 39 | 39 | m_znsec1(*this,"maincpu:sio0:znsec1"), |
| 40 | 40 | m_zndip(*this,"maincpu:sio0:zndip"), |
| 41 | 41 | m_maincpu(*this, "maincpu"), |
| 42 | | m_audiocpu(*this, "audiocpu") { |
| 42 | m_audiocpu(*this, "audiocpu"), |
| 43 | m_ram(*this, "maincpu:ram") |
| 44 | { |
| 43 | 45 | } |
| 44 | 46 | |
| 45 | 47 | required_device<psxgpu_device> m_gpu; |
| r22559 | r22560 | |
| 66 | 68 | DECLARE_READ32_MEMBER(znsecsel_r); |
| 67 | 69 | DECLARE_WRITE32_MEMBER(znsecsel_w); |
| 68 | 70 | DECLARE_READ32_MEMBER(boardconfig_r); |
| 69 | | DECLARE_READ32_MEMBER(boardconfig_8M_r); |
| 70 | 71 | DECLARE_READ32_MEMBER(unknown_r); |
| 71 | 72 | DECLARE_WRITE32_MEMBER(coin_w); |
| 72 | 73 | DECLARE_READ32_MEMBER(capcom_kickharness_r); |
| r22559 | r22560 | |
| 136 | 137 | DECLARE_WRITE_LINE_MEMBER(irqhandler); |
| 137 | 138 | required_device<cpu_device> m_maincpu; |
| 138 | 139 | optional_device<cpu_device> m_audiocpu; |
| 140 | required_device<ram_device> m_ram; |
| 139 | 141 | }; |
| 140 | 142 | |
| 141 | 143 | inline void ATTR_PRINTF(3,4) zn_state::verboselog( int n_level, const char *s_fmt, ... ) |
| r22559 | r22560 | |
| 360 | 362 | 111----- rev=5 |
| 361 | 363 | */ |
| 362 | 364 | |
| 365 | int boardconfig = 64 | 32; |
| 366 | |
| 363 | 367 | if( machine().primary_screen->height() == 1024 ) |
| 364 | 368 | { |
| 365 | | return 64|32|8; |
| 369 | boardconfig |= 8; |
| 366 | 370 | } |
| 367 | | else |
| 371 | |
| 372 | switch( m_ram->size() ) |
| 368 | 373 | { |
| 369 | | return 64|32; |
| 370 | | } |
| 371 | | } |
| 374 | case 0x400000: |
| 375 | boardconfig |= 1; |
| 376 | break; |
| 372 | 377 | |
| 373 | | READ32_MEMBER(zn_state::boardconfig_8M_r) |
| 374 | | { |
| 375 | | /* |
| 376 | | ------00 mem=4M |
| 377 | | ------01 mem=4M |
| 378 | | ------10 mem=8M |
| 379 | | ------11 mem=16M |
| 380 | | -----0-- smem=hM |
| 381 | | -----1-- smem=2M |
| 382 | | ----0--- vmem=1M |
| 383 | | ----1--- vmem=2M |
| 384 | | 000----- rev=-2 |
| 385 | | 001----- rev=-1 |
| 386 | | 010----- rev=0 |
| 387 | | 011----- rev=1 |
| 388 | | 100----- rev=2 |
| 389 | | 101----- rev=3 |
| 390 | | 110----- rev=4 |
| 391 | | 111----- rev=5 |
| 392 | | */ |
| 378 | case 0x800000: |
| 379 | boardconfig |= 2; |
| 380 | break; |
| 393 | 381 | |
| 394 | | if( machine().primary_screen->height() == 1024 ) |
| 395 | | { |
| 396 | | return 64|32|8|2; |
| 382 | case 0x1000000: |
| 383 | boardconfig |= 3; |
| 384 | break; |
| 397 | 385 | } |
| 398 | | else |
| 399 | | { |
| 400 | | return 64|32|2; |
| 401 | | } |
| 386 | |
| 387 | return boardconfig; |
| 402 | 388 | } |
| 403 | 389 | |
| 404 | 390 | READ32_MEMBER(zn_state::unknown_r) |
| r22559 | r22560 | |
| 441 | 427 | AM_RANGE(0xbfc00000, 0xbfc7ffff) AM_WRITENOP AM_ROM AM_SHARE("share2") /* bios mirror */ |
| 442 | 428 | ADDRESS_MAP_END |
| 443 | 429 | |
| 444 | | static ADDRESS_MAP_START( zn_8M_map, AS_PROGRAM, 32, zn_state ) |
| 445 | | AM_RANGE(0x1fa10200, 0x1fa10203) AM_READ(boardconfig_8M_r) |
| 446 | | AM_IMPORT_FROM(zn_map) |
| 447 | | ADDRESS_MAP_END |
| 448 | | |
| 449 | 430 | static ADDRESS_MAP_START( link_map, AS_PROGRAM, 8, zn_state ) |
| 450 | 431 | ADDRESS_MAP_END |
| 451 | 432 | |
| r22559 | r22560 | |
| 470 | 451 | static MACHINE_CONFIG_START( zn1_1mb_vram, zn_state ) |
| 471 | 452 | /* basic machine hardware */ |
| 472 | 453 | MCFG_CPU_ADD( "maincpu", CXD8530CQ, XTAL_67_7376MHz ) |
| 473 | | MCFG_PSX_RAM_SIZE( 0x400000 ) |
| 474 | 454 | MCFG_CPU_PROGRAM_MAP( zn_map) |
| 475 | 455 | |
| 456 | MCFG_RAM_MODIFY("maincpu:ram") |
| 457 | MCFG_RAM_DEFAULT_SIZE("4M") |
| 458 | |
| 476 | 459 | MCFG_DEVICE_ADD("maincpu:sio0:znsec0", ZNSEC, 0) |
| 477 | 460 | MCFG_DEVICE_ADD("maincpu:sio0:znsec1", ZNSEC, 0) |
| 478 | 461 | MCFG_DEVICE_ADD("maincpu:sio0:zndip", ZNDIP, 0) |
| r22559 | r22560 | |
| 498 | 481 | static MACHINE_CONFIG_START( zn2, zn_state ) |
| 499 | 482 | /* basic machine hardware */ |
| 500 | 483 | MCFG_CPU_ADD( "maincpu", CXD8661R, XTAL_100MHz ) |
| 501 | | MCFG_PSX_RAM_SIZE( 0x400000 ) |
| 502 | 484 | MCFG_CPU_PROGRAM_MAP( zn_map) |
| 503 | 485 | |
| 486 | MCFG_RAM_MODIFY("maincpu:ram") |
| 487 | MCFG_RAM_DEFAULT_SIZE("4M") |
| 488 | |
| 504 | 489 | MCFG_DEVICE_ADD("maincpu:sio0:znsec0", ZNSEC, 0) |
| 505 | 490 | MCFG_DEVICE_ADD("maincpu:sio0:znsec1", ZNSEC, 0) |
| 506 | 491 | MCFG_DEVICE_ADD("maincpu:sio0:zndip", ZNDIP, 0) |
| r22559 | r22560 | |
| 1447 | 1432 | } |
| 1448 | 1433 | |
| 1449 | 1434 | static MACHINE_CONFIG_DERIVED( coh1000w, zn1_2mb_vram ) |
| 1450 | | MCFG_CPU_MODIFY("maincpu") |
| 1451 | | MCFG_PSX_RAM_SIZE( 0x800000 ) |
| 1452 | | MCFG_CPU_PROGRAM_MAP(zn_8M_map) |
| 1435 | MCFG_RAM_MODIFY("maincpu:ram") |
| 1436 | MCFG_RAM_DEFAULT_SIZE("8M") |
| 1453 | 1437 | |
| 1454 | 1438 | MCFG_MACHINE_RESET_OVERRIDE(zn_state, coh1000w ) |
| 1455 | 1439 | |
trunk/src/mame/drivers/namcos10.c
| r22559 | r22560 | |
| 595 | 595 | static MACHINE_CONFIG_START( namcos10_memm, namcos10_state ) |
| 596 | 596 | /* basic machine hardware */ |
| 597 | 597 | MCFG_CPU_ADD( "maincpu", CXD8606BQ, XTAL_101_4912MHz ) |
| 598 | | MCFG_PSX_RAM_SIZE( 0x1000000 ) |
| 599 | 598 | MCFG_CPU_PROGRAM_MAP( namcos10_memm_map ) |
| 600 | 599 | |
| 600 | MCFG_RAM_MODIFY("maincpu:ram") |
| 601 | MCFG_RAM_DEFAULT_SIZE("16M") |
| 602 | |
| 601 | 603 | MCFG_MACHINE_RESET_OVERRIDE(namcos10_state, namcos10 ) |
| 602 | 604 | |
| 603 | 605 | /* video hardware */ |
| r22559 | r22560 | |
| 610 | 612 | static MACHINE_CONFIG_START( namcos10_memn, namcos10_state ) |
| 611 | 613 | /* basic machine hardware */ |
| 612 | 614 | MCFG_CPU_ADD( "maincpu", CXD8606BQ, XTAL_101_4912MHz ) |
| 613 | | MCFG_PSX_RAM_SIZE( 0x1000000 ) |
| 614 | 615 | MCFG_CPU_PROGRAM_MAP( namcos10_memn_map ) |
| 615 | 616 | |
| 617 | MCFG_RAM_MODIFY("maincpu:ram") |
| 618 | MCFG_RAM_DEFAULT_SIZE("16M") |
| 619 | |
| 616 | 620 | MCFG_MACHINE_RESET_OVERRIDE(namcos10_state, namcos10 ) |
| 617 | 621 | |
| 618 | 622 | /* video hardware */ |
trunk/src/mame/drivers/namcos12.c
| r22559 | r22560 | |
| 1044 | 1044 | public: |
| 1045 | 1045 | namcos12_state(const machine_config &mconfig, device_type type, const char *tag) |
| 1046 | 1046 | : driver_device(mconfig, type, tag), |
| 1047 | | m_rtc(*this, "rtc"), |
| 1048 | | m_sharedram(*this, "sharedram") , |
| 1049 | | m_maincpu(*this, "maincpu") { } |
| 1047 | m_rtc(*this, "rtc"), |
| 1048 | m_sharedram(*this, "sharedram") , |
| 1049 | m_maincpu(*this, "maincpu"), |
| 1050 | m_ram(*this, "maincpu:ram") |
| 1051 | { |
| 1052 | } |
| 1050 | 1053 | |
| 1051 | 1054 | required_device<rtc4543_device> m_rtc; |
| 1052 | 1055 | required_shared_ptr<UINT32> m_sharedram; |
| r22559 | r22560 | |
| 1102 | 1105 | void namcos12_sub_irq( screen_device &screen, bool vblank_state ); |
| 1103 | 1106 | void system11gun_install( ); |
| 1104 | 1107 | required_device<psxcpu_device> m_maincpu; |
| 1108 | required_device<ram_device> m_ram; |
| 1105 | 1109 | }; |
| 1106 | 1110 | |
| 1107 | 1111 | inline void ATTR_PRINTF(3,4) namcos12_state::verboselog( int n_level, const char *s_fmt, ... ) |
| r22559 | r22560 | |
| 1193 | 1197 | INT32 n_ramleft; |
| 1194 | 1198 | |
| 1195 | 1199 | // TODO: the check for going past the end of ram should be in dma.c |
| 1196 | | UINT32 m_n_psxramsize = m_maincpu->ram_size(); |
| 1200 | UINT32 m_n_psxramsize = m_ram->size(); |
| 1197 | 1201 | |
| 1198 | 1202 | if(m_has_tektagt_dma && !m_n_dmaoffset) |
| 1199 | 1203 | { |
| r22559 | r22560 | |
| 1621 | 1625 | static MACHINE_CONFIG_START( coh700, namcos12_state ) |
| 1622 | 1626 | /* basic machine hardware */ |
| 1623 | 1627 | MCFG_CPU_ADD( "maincpu", CXD8661R, XTAL_100MHz ) |
| 1624 | | MCFG_PSX_RAM_SIZE( 0x400000 ) |
| 1625 | 1628 | MCFG_CPU_PROGRAM_MAP( namcos12_map) |
| 1626 | 1629 | |
| 1630 | MCFG_RAM_MODIFY("maincpu:ram") |
| 1631 | MCFG_RAM_DEFAULT_SIZE("4M") |
| 1632 | |
| 1627 | 1633 | MCFG_PSX_DMA_CHANNEL_READ( "maincpu", 5, psx_dma_read_delegate( FUNC( namcos12_state::namcos12_rom_read ), (namcos12_state *) owner ) ) |
| 1628 | 1634 | |
| 1629 | 1635 | MCFG_CPU_ADD("sub", H83002, 16737350 ) |
trunk/src/emu/cpu/psx/psx.c
| r22559 | r22560 | |
| 1294 | 1294 | break; |
| 1295 | 1295 | } |
| 1296 | 1296 | |
| 1297 | | assert( m_ram_size != 0 ); |
| 1297 | UINT32 ram_size = m_ram->size(); |
| 1298 | UINT8 *pointer = m_ram->pointer(); |
| 1299 | |
| 1298 | 1300 | assert( window_size != 0 ); |
| 1299 | 1301 | |
| 1300 | 1302 | int start = 0; |
| 1301 | 1303 | while( start < window_size ) |
| 1302 | 1304 | { |
| 1303 | | m_program->install_ram( start + 0x00000000, start + 0x00000000 + m_ram_size - 1, m_ram ); |
| 1304 | | m_program->install_ram( start + 0x80000000, start + 0x80000000 + m_ram_size - 1, m_ram ); |
| 1305 | | m_program->install_ram( start + 0xa0000000, start + 0xa0000000 + m_ram_size - 1, m_ram ); |
| 1305 | m_program->install_ram( start + 0x00000000, start + 0x00000000 + ram_size - 1, pointer ); |
| 1306 | m_program->install_ram( start + 0x80000000, start + 0x80000000 + ram_size - 1, pointer ); |
| 1307 | m_program->install_ram( start + 0xa0000000, start + 0xa0000000 + ram_size - 1, pointer ); |
| 1306 | 1308 | |
| 1307 | | start += m_ram_size; |
| 1309 | start += ram_size; |
| 1308 | 1310 | } |
| 1309 | 1311 | |
| 1310 | 1312 | m_program->install_readwrite_handler( 0x00000000 + window_size, 0x1effffff, read32_delegate( FUNC(psxcpu_device::berr_r), this ), write32_delegate( FUNC(psxcpu_device::berr_w), this ) ); |
| r22559 | r22560 | |
| 1625 | 1627 | m_spu_write_handler(*this), |
| 1626 | 1628 | m_cd_read_handler(*this), |
| 1627 | 1629 | m_cd_write_handler(*this), |
| 1628 | | m_ram_size(0) |
| 1630 | m_ram(*this, "ram") |
| 1629 | 1631 | { |
| 1630 | 1632 | } |
| 1631 | 1633 | |
| r22559 | r22560 | |
| 1660 | 1662 | } |
| 1661 | 1663 | |
| 1662 | 1664 | //------------------------------------------------- |
| 1663 | | // set_ram_size - configuration helper |
| 1664 | | // to set the ram size |
| 1665 | | //------------------------------------------------- |
| 1666 | | |
| 1667 | | void psxcpu_device::set_ram_size(device_t &device, UINT32 ram_size) |
| 1668 | | { |
| 1669 | | downcast<psxcpu_device &>(device).m_ram_size = ram_size; |
| 1670 | | } |
| 1671 | | |
| 1672 | | |
| 1673 | | //------------------------------------------------- |
| 1674 | | // ram_size - temporary kludge to allow |
| 1675 | | // access to the current ram size |
| 1676 | | //------------------------------------------------- |
| 1677 | | |
| 1678 | | UINT32 psxcpu_device::ram_size() |
| 1679 | | { |
| 1680 | | return m_ram_size; |
| 1681 | | } |
| 1682 | | |
| 1683 | | //------------------------------------------------- |
| 1684 | | // ram - temporary kludge to allow |
| 1685 | | // access to the current ram |
| 1686 | | //------------------------------------------------- |
| 1687 | | |
| 1688 | | UINT32 *psxcpu_device::ram() |
| 1689 | | { |
| 1690 | | return m_ram; |
| 1691 | | } |
| 1692 | | |
| 1693 | | //------------------------------------------------- |
| 1694 | 1665 | // device_start - start up the device |
| 1695 | 1666 | //------------------------------------------------- |
| 1696 | 1667 | |
| r22559 | r22560 | |
| 1847 | 1818 | m_spu_write_handler.resolve_safe(); |
| 1848 | 1819 | m_cd_read_handler.resolve_safe(0); |
| 1849 | 1820 | m_cd_write_handler.resolve_safe(); |
| 1850 | | |
| 1851 | | m_ram = global_alloc_array( UINT32, m_ram_size / 4 ); |
| 1852 | | save_pointer( NAME(m_ram), m_ram_size / 4 ); |
| 1853 | | |
| 1854 | | m_ram_config = 0x800; |
| 1855 | | update_ram_config(); |
| 1856 | | |
| 1857 | | /// TODO: get dma to acess ram through the memory map? |
| 1858 | | psxdma_device *psxdma = subdevice<psxdma_device>( "dma" ); |
| 1859 | | psxdma->m_ram = m_ram; |
| 1860 | | psxdma->m_ramsize = m_ram_size; |
| 1861 | 1821 | } |
| 1862 | 1822 | |
| 1863 | 1823 | |
| 1864 | 1824 | //------------------------------------------------- |
| 1865 | | // device_stop - stop the device |
| 1866 | | //------------------------------------------------- |
| 1867 | | |
| 1868 | | void psxcpu_device::device_stop() |
| 1869 | | { |
| 1870 | | global_free( m_ram ); |
| 1871 | | } |
| 1872 | | |
| 1873 | | |
| 1874 | | //------------------------------------------------- |
| 1875 | 1825 | // device_reset - reset the device |
| 1876 | 1826 | //------------------------------------------------- |
| 1877 | 1827 | |
| 1878 | 1828 | void psxcpu_device::device_reset() |
| 1879 | 1829 | { |
| 1830 | m_ram_config = 0x800; |
| 1831 | update_ram_config(); |
| 1832 | |
| 1833 | /// TODO: get dma to access ram through the memory map? |
| 1834 | psxdma_device *psxdma = subdevice<psxdma_device>( "dma" ); |
| 1835 | psxdma->m_ram = (UINT32 *) m_ram->pointer(); |
| 1836 | psxdma->m_ramsize = m_ram->size(); |
| 1837 | |
| 1880 | 1838 | m_delayr = 0; |
| 1881 | 1839 | m_delayv = 0; |
| 1882 | 1840 | m_berr = 0; |
| r22559 | r22560 | |
| 3320 | 3278 | |
| 3321 | 3279 | MCFG_DEVICE_ADD("sio1", PSX_SIO1, 0) |
| 3322 | 3280 | MCFG_PSX_SIO_IRQ_HANDLER(DEVWRITELINE("irq", psxirq_device, intin8)) |
| 3281 | |
| 3282 | MCFG_RAM_ADD("ram") |
| 3323 | 3283 | MACHINE_CONFIG_END |
| 3324 | 3284 | |
| 3325 | 3285 | //------------------------------------------------- |
trunk/src/emu/cpu/psx/psx.h
| r22559 | r22560 | |
| 10 | 10 | #ifndef __PSXCPU_H__ |
| 11 | 11 | #define __PSXCPU_H__ |
| 12 | 12 | |
| 13 | #include "emu.h" |
| 14 | #include "machine/ram.h" |
| 13 | 15 | #include "dma.h" |
| 14 | 16 | #include "gte.h" |
| 15 | 17 | #include "irq.h" |
| r22559 | r22560 | |
| 125 | 127 | #define MCFG_PSX_CD_WRITE_HANDLER(_devcb) \ |
| 126 | 128 | devcb = &psxcpu_device::set_cd_write_handler(*device, DEVCB2_##_devcb); |
| 127 | 129 | |
| 128 | | #define MCFG_PSX_RAM_SIZE( size ) \ |
| 129 | | psxcpu_device::set_ram_size( *device, size ); |
| 130 | | |
| 131 | 130 | //************************************************************************** |
| 132 | 131 | // TYPE DEFINITIONS |
| 133 | 132 | //************************************************************************** |
| r22559 | r22560 | |
| 147 | 146 | template<class _Object> static devcb2_base &set_spu_write_handler(device_t &device, _Object object) { return downcast<psxcpu_device &>(device).m_spu_write_handler.set_callback(object); } |
| 148 | 147 | template<class _Object> static devcb2_base &set_cd_read_handler(device_t &device, _Object object) { return downcast<psxcpu_device &>(device).m_cd_read_handler.set_callback(object); } |
| 149 | 148 | template<class _Object> static devcb2_base &set_cd_write_handler(device_t &device, _Object object) { return downcast<psxcpu_device &>(device).m_cd_write_handler.set_callback(object); } |
| 150 | | static void set_ram_size(device_t &device, UINT32 size); |
| 151 | 149 | |
| 152 | 150 | // public interfaces |
| 153 | 151 | DECLARE_WRITE32_MEMBER( berr_w ); |
| r22559 | r22560 | |
| 173 | 171 | |
| 174 | 172 | static psxcpu_device *getcpu( device_t &device, const char *cputag ); |
| 175 | 173 | |
| 176 | | UINT32 ram_size(); |
| 177 | | UINT32 *ram(); |
| 178 | | |
| 179 | 174 | protected: |
| 180 | 175 | psxcpu_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); |
| 181 | 176 | |
| 182 | 177 | // device-level overrides |
| 183 | 178 | virtual void device_start(); |
| 184 | | virtual void device_stop(); |
| 185 | 179 | virtual void device_reset(); |
| 186 | 180 | virtual void device_post_load(); |
| 187 | 181 | virtual machine_config_constructor device_mconfig_additions() const; |
| r22559 | r22560 | |
| 319 | 313 | devcb2_write16 m_spu_write_handler; |
| 320 | 314 | devcb2_read8 m_cd_read_handler; |
| 321 | 315 | devcb2_write8 m_cd_write_handler; |
| 322 | | UINT32 *m_ram; |
| 323 | | UINT32 m_ram_size; |
| 316 | required_device<ram_device> m_ram; |
| 324 | 317 | }; |
| 325 | 318 | |
| 326 | 319 | class cxd8530aq_device : public psxcpu_device |
trunk/src/emu/device.c
| r22559 | r22560 | |
| 817 | 817 | // iterate over all devices and remove any references to the old device |
| 818 | 818 | device_iterator iter(mconfig().root_device()); |
| 819 | 819 | for (device_t *scan = iter.first(); scan != NULL; scan = iter.next()) |
| 820 | | scan->m_device_map.remove(&old); |
| 820 | scan->m_device_map.reset(); //remove(&old); |
| 821 | 821 | |
| 822 | 822 | // create a new device, and substitute it for the old one |
| 823 | 823 | device_t *device = (*type)(mconfig(), tag, this, clock); |
| r22559 | r22560 | |
| 840 | 840 | // iterate over all devices and remove any references |
| 841 | 841 | device_iterator iter(mconfig().root_device()); |
| 842 | 842 | for (device_t *scan = iter.first(); scan != NULL; scan = iter.next()) |
| 843 | | scan->m_device_map.remove(&device); |
| 843 | scan->m_device_map.reset(); //remove(&device); |
| 844 | 844 | |
| 845 | 845 | // remove from our list |
| 846 | 846 | m_subdevice_list.remove(device); |
trunk/src/mess/drivers/psx.c
| r22559 | r22560 | |
| 25 | 25 | public: |
| 26 | 26 | psx1_state(const machine_config &mconfig, device_type type, const char *tag) |
| 27 | 27 | : driver_device(mconfig, type, tag) , |
| 28 | | m_maincpu(*this, "maincpu") { } |
| 28 | m_maincpu(*this, "maincpu"), |
| 29 | m_ram(*this, "maincpu:ram") |
| 30 | { |
| 31 | } |
| 29 | 32 | |
| 30 | 33 | UINT8 *m_exe_buffer; |
| 31 | 34 | int m_exe_size; |
| r22559 | r22560 | |
| 52 | 55 | void cd_dma_write( UINT32 *p_n_psxram, UINT32 n_address, INT32 n_size ); |
| 53 | 56 | DECLARE_QUICKLOAD_LOAD_MEMBER( psx_exe_load ); |
| 54 | 57 | required_device<psxcpu_device> m_maincpu; |
| 58 | required_device<ram_device> m_ram; |
| 55 | 59 | }; |
| 56 | 60 | |
| 57 | 61 | |
| r22559 | r22560 | |
| 113 | 117 | if( n_len >= sizeof( struct PSXEXE_HEADER ) && |
| 114 | 118 | memcmp( psxexe_header->id, "PS-X EXE", 8 ) == 0 ) |
| 115 | 119 | { |
| 116 | | UINT8 *p_ram; |
| 117 | | UINT8 *p_psxexe; |
| 118 | | UINT32 n_stack; |
| 119 | | UINT32 n_ram; |
| 120 | | UINT32 n_address; |
| 121 | | UINT32 n_size; |
| 122 | | |
| 123 | 120 | psxexe_conv32( &psxexe_header->text ); |
| 124 | 121 | psxexe_conv32( &psxexe_header->data ); |
| 125 | 122 | psxexe_conv32( &psxexe_header->pc0 ); |
| r22559 | r22560 | |
| 146 | 143 | logerror( "psx_exe_load: sp %08x\n", psxexe_header->s_addr ); |
| 147 | 144 | logerror( "psx_exe_load: len %08x\n", psxexe_header->s_size ); |
| 148 | 145 | |
| 149 | | p_ram = (UINT8 *)m_maincpu->ram(); |
| 150 | | n_ram = m_maincpu->ram_size(); |
| 146 | UINT8 *p_ram = m_ram->pointer(); |
| 147 | UINT32 n_ram = m_ram->size(); |
| 151 | 148 | |
| 152 | | p_psxexe = p_n_file + sizeof( struct PSXEXE_HEADER ); |
| 149 | UINT8 *p_psxexe = p_n_file + sizeof( struct PSXEXE_HEADER ); |
| 153 | 150 | |
| 154 | | n_address = psxexe_header->t_addr; |
| 155 | | n_size = psxexe_header->t_size; |
| 151 | UINT32 n_address = psxexe_header->t_addr; |
| 152 | UINT32 n_size = psxexe_header->t_size; |
| 156 | 153 | while( n_size != 0 ) |
| 157 | 154 | { |
| 158 | 155 | p_ram[ BYTE4_XOR_LE( n_address ) % n_ram ] = *( p_psxexe ); |
| r22559 | r22560 | |
| 163 | 160 | |
| 164 | 161 | cpu->set_state_int( PSXCPU_PC, psxexe_header->pc0 ); |
| 165 | 162 | cpu->set_state_int( PSXCPU_R28, psxexe_header->gp0 ); |
| 166 | | n_stack = psxexe_header->s_addr + psxexe_header->s_size; |
| 163 | UINT32 n_stack = psxexe_header->s_addr + psxexe_header->s_size; |
| 167 | 164 | if( n_stack != 0 ) |
| 168 | 165 | { |
| 169 | 166 | cpu->set_state_int( PSXCPU_R29, n_stack ); |
| r22559 | r22560 | |
| 249 | 246 | ( (int)p_n_file[ n_offset + 6 ] << 16 ) | |
| 250 | 247 | ( (int)p_n_file[ n_offset + 7 ] << 24 ); |
| 251 | 248 | |
| 252 | | UINT8 *p_ram = (UINT8 *)m_maincpu->ram(); |
| 253 | | UINT32 n_ram = m_maincpu->ram_size(); |
| 249 | UINT8 *p_ram = m_ram->pointer(); |
| 250 | UINT32 n_ram = m_ram->size(); |
| 254 | 251 | |
| 255 | 252 | n_offset += 8; |
| 256 | 253 | |
| r22559 | r22560 | |
| 496 | 493 | static MACHINE_CONFIG_START( psxntsc, psx1_state ) |
| 497 | 494 | /* basic machine hardware */ |
| 498 | 495 | MCFG_CPU_ADD( "maincpu", CXD8530CQ, XTAL_67_7376MHz ) |
| 499 | | MCFG_PSX_RAM_SIZE( 0x200000 ) |
| 500 | 496 | MCFG_CPU_PROGRAM_MAP( psx_map ) |
| 501 | 497 | |
| 498 | MCFG_RAM_MODIFY("maincpu:ram") |
| 499 | MCFG_RAM_DEFAULT_SIZE("2M") |
| 500 | |
| 502 | 501 | MCFG_DEVICE_ADD("maincpu:sio0:controllers", PSXCONTROLLERPORTS, 0) |
| 503 | 502 | MCFG_PSX_CTRL_PORT_ADD("port1", psx_controllers, "digital_pad", NULL) |
| 504 | 503 | MCFG_PSX_CTRL_PORT_ADD("port2", psx_controllers, "digital_pad", NULL) |
| r22559 | r22560 | |
| 530 | 529 | static MACHINE_CONFIG_START( psxpal, psx1_state ) |
| 531 | 530 | /* basic machine hardware */ |
| 532 | 531 | MCFG_CPU_ADD( "maincpu", CXD8530AQ, XTAL_67_7376MHz ) |
| 533 | | MCFG_PSX_RAM_SIZE( 0x200000 ) |
| 534 | 532 | MCFG_CPU_PROGRAM_MAP( psx_map) |
| 535 | 533 | |
| 534 | MCFG_RAM_MODIFY("maincpu:ram") |
| 535 | MCFG_RAM_DEFAULT_SIZE("2M") |
| 536 | |
| 536 | 537 | MCFG_DEVICE_ADD("maincpu:sio0:controllers", PSXCONTROLLERPORTS, 0) |
| 537 | 538 | MCFG_PSX_CTRL_PORT_ADD("port1", psx_controllers, "digital_pad", NULL) |
| 538 | 539 | MCFG_PSX_CTRL_PORT_ADD("port2", psx_controllers, "digital_pad", NULL) |