trunk/src/mess/drivers/snes.c
| r22608 | r22609 | |
| 95 | 95 | DECLARE_READ8_MEMBER(snes_oldjoy1_read); |
| 96 | 96 | DECLARE_READ8_MEMBER(snes_oldjoy2_read); |
| 97 | 97 | |
| 98 | virtual void machine_start(); |
| 99 | virtual void machine_reset(); |
| 98 | 100 | int m_type; |
| 99 | 101 | optional_device<sns_cart_slot_device> m_cartslot; |
| 100 | 102 | }; |
| r22608 | r22609 | |
| 1497 | 1499 | SLOT_INTERFACE_INTERNAL("lorom_st11leg", SNS_LOROM_SETA11_LEG) |
| 1498 | 1500 | SLOT_INTERFACE_END |
| 1499 | 1501 | |
| 1500 | | static MACHINE_START( snes_console ) |
| 1502 | void snes_console_state::machine_start() |
| 1501 | 1503 | { |
| 1502 | | snes_console_state *state = machine.driver_data<snes_console_state>(); |
| 1504 | snes_state::machine_start(); |
| 1503 | 1505 | |
| 1504 | | MACHINE_START_CALL(snes); |
| 1506 | m_type = m_cartslot->get_type(); |
| 1505 | 1507 | |
| 1506 | | state->m_type = state->m_cartslot->get_type(); |
| 1507 | | |
| 1508 | | switch (state->m_type) |
| 1508 | switch (m_type) |
| 1509 | 1509 | { |
| 1510 | 1510 | // LoROM & LoROM + addons |
| 1511 | 1511 | case SNES_MODE20: |
| r22608 | r22609 | |
| 1519 | 1519 | case SNES_Z80GB: // still unemulated |
| 1520 | 1520 | break; |
| 1521 | 1521 | case SNES_DSP: |
| 1522 | | state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x208000, 0x20ffff, 0, 0x9f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1523 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x208000, 0x20ffff, 0, 0x9f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1522 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x208000, 0x20ffff, 0, 0x9f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1523 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x208000, 0x20ffff, 0, 0x9f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1524 | 1524 | break; |
| 1525 | 1525 | case SNES_DSP_2MB: |
| 1526 | | state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x600000, 0x607fff, 0, 0x8f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1527 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x600000, 0x607fff, 0, 0x8f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1526 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x600000, 0x607fff, 0, 0x8f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1527 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x600000, 0x607fff, 0, 0x8f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1528 | 1528 | break; |
| 1529 | 1529 | case SNES_DSP4: |
| 1530 | | state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x308000, 0x30ffff, 0, 0x8f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1531 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x308000, 0x30ffff, 0, 0x8f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1530 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x308000, 0x30ffff, 0, 0x8f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1531 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x308000, 0x30ffff, 0, 0x8f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1532 | 1532 | break; |
| 1533 | 1533 | case SNES_OBC1: |
| 1534 | | state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x006000, 0x007fff, 0, 0xbf0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1535 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x006000, 0x007fff, 0, 0xbf0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1534 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x006000, 0x007fff, 0, 0xbf0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1535 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x006000, 0x007fff, 0, 0xbf0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1536 | 1536 | break; |
| 1537 | 1537 | case SNES_SFX: |
| 1538 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snessfx_lo_r),state), write8_delegate(FUNC(snes_console_state::snessfx_lo_w),state)); |
| 1539 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snessfx_hi_r),state), write8_delegate(FUNC(snes_console_state::snessfx_hi_w),state)); |
| 1540 | | set_5a22_map(state->m_maincpu); |
| 1538 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snessfx_lo_r),this), write8_delegate(FUNC(snes_console_state::snessfx_lo_w),this)); |
| 1539 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snessfx_hi_r),this), write8_delegate(FUNC(snes_console_state::snessfx_hi_w),this)); |
| 1540 | set_5a22_map(m_maincpu); |
| 1541 | 1541 | break; |
| 1542 | 1542 | case SNES_SDD1: |
| 1543 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snessdd1_lo_r),state), write8_delegate(FUNC(snes_console_state::snessdd1_lo_w),state)); |
| 1544 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snessdd1_hi_r),state), write8_delegate(FUNC(snes_console_state::snessdd1_hi_w),state)); |
| 1545 | | set_5a22_map(state->m_maincpu); |
| 1543 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snessdd1_lo_r),this), write8_delegate(FUNC(snes_console_state::snessdd1_lo_w),this)); |
| 1544 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snessdd1_hi_r),this), write8_delegate(FUNC(snes_console_state::snessdd1_hi_w),this)); |
| 1545 | set_5a22_map(m_maincpu); |
| 1546 | 1546 | break; |
| 1547 | 1547 | case SNES_BSX: |
| 1548 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snesbsx_lo_r),state), write8_delegate(FUNC(snes_console_state::snesbsx_lo_w),state)); |
| 1549 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snesbsx_hi_r),state), write8_delegate(FUNC(snes_console_state::snesbsx_hi_w),state)); |
| 1550 | | set_5a22_map(state->m_maincpu); |
| 1548 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snesbsx_lo_r),this), write8_delegate(FUNC(snes_console_state::snesbsx_lo_w),this)); |
| 1549 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snesbsx_hi_r),this), write8_delegate(FUNC(snes_console_state::snesbsx_hi_w),this)); |
| 1550 | set_5a22_map(m_maincpu); |
| 1551 | 1551 | break; |
| 1552 | 1552 | // HiROM & HiROM + addons |
| 1553 | 1553 | case SNES_MODE21: |
| 1554 | 1554 | case SNES_BSXHI: |
| 1555 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes21_lo_r),state), write8_delegate(FUNC(snes_console_state::snes21_lo_w),state)); |
| 1556 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes21_hi_r),state), write8_delegate(FUNC(snes_console_state::snes21_hi_w),state)); |
| 1557 | | set_5a22_map(state->m_maincpu); |
| 1555 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes21_lo_r),this), write8_delegate(FUNC(snes_console_state::snes21_lo_w),this)); |
| 1556 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes21_hi_r),this), write8_delegate(FUNC(snes_console_state::snes21_hi_w),this)); |
| 1557 | set_5a22_map(m_maincpu); |
| 1558 | 1558 | break; |
| 1559 | 1559 | case SNES_DSP_MODE21: |
| 1560 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes21_lo_r),state), write8_delegate(FUNC(snes_console_state::snes21_lo_w),state)); |
| 1561 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes21_hi_r),state), write8_delegate(FUNC(snes_console_state::snes21_hi_w),state)); |
| 1562 | | state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x006000, 0x007fff, 0, 0x9f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1563 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x006000, 0x007fff, 0, 0x9f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1564 | | set_5a22_map(state->m_maincpu); |
| 1560 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes21_lo_r),this), write8_delegate(FUNC(snes_console_state::snes21_lo_w),this)); |
| 1561 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes21_hi_r),this), write8_delegate(FUNC(snes_console_state::snes21_hi_w),this)); |
| 1562 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x006000, 0x007fff, 0, 0x9f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1563 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x006000, 0x007fff, 0, 0x9f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1564 | set_5a22_map(m_maincpu); |
| 1565 | 1565 | break; |
| 1566 | 1566 | case SNES_SRTC: |
| 1567 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes21_lo_r),state), write8_delegate(FUNC(snes_console_state::snes21_lo_w),state)); |
| 1568 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes21_hi_r),state), write8_delegate(FUNC(snes_console_state::snes21_hi_w),state)); |
| 1569 | | state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x002800, 0x002800, 0, 0xbf0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1570 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x002801, 0x002801, 0, 0xbf0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1571 | | set_5a22_map(state->m_maincpu); |
| 1567 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes21_lo_r),this), write8_delegate(FUNC(snes_console_state::snes21_lo_w),this)); |
| 1568 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes21_hi_r),this), write8_delegate(FUNC(snes_console_state::snes21_hi_w),this)); |
| 1569 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x002800, 0x002800, 0, 0xbf0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1570 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x002801, 0x002801, 0, 0xbf0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1571 | set_5a22_map(m_maincpu); |
| 1572 | 1572 | break; |
| 1573 | 1573 | case SNES_SPC7110: |
| 1574 | 1574 | case SNES_SPC7110_RTC: |
| 1575 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes7110_lo_r),state), write8_delegate(FUNC(snes_console_state::snes7110_lo_w),state)); |
| 1576 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes7110_hi_r),state), write8_delegate(FUNC(snes_console_state::snes7110_hi_w),state)); |
| 1577 | | set_5a22_map(state->m_maincpu); |
| 1575 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::snes7110_lo_r),this), write8_delegate(FUNC(snes_console_state::snes7110_lo_w),this)); |
| 1576 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::snes7110_hi_r),this), write8_delegate(FUNC(snes_console_state::snes7110_hi_w),this)); |
| 1577 | set_5a22_map(m_maincpu); |
| 1578 | 1578 | break; |
| 1579 | 1579 | case SNES_PFEST94: |
| 1580 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::pfest94_lo_r),state), write8_delegate(FUNC(snes_console_state::pfest94_lo_w),state)); |
| 1581 | | state->m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::pfest94_hi_r),state), write8_delegate(FUNC(snes_console_state::pfest94_hi_w),state)); |
| 1582 | | set_5a22_map(state->m_maincpu); |
| 1580 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x000000, 0x7dffff, read8_delegate(FUNC(snes_console_state::pfest94_lo_r),this), write8_delegate(FUNC(snes_console_state::pfest94_lo_w),this)); |
| 1581 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x800000, 0xffffff, read8_delegate(FUNC(snes_console_state::pfest94_hi_r),this), write8_delegate(FUNC(snes_console_state::pfest94_hi_w),this)); |
| 1582 | set_5a22_map(m_maincpu); |
| 1583 | 1583 | break; |
| 1584 | 1584 | // pirate 'mappers' |
| 1585 | 1585 | case SNES_POKEMON: |
| 1586 | | state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x800000, 0x80ffff, 0, 0x780000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1587 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x800000, 0x80ffff, 0, 0x780000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1586 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x800000, 0x80ffff, 0, 0x780000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1587 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x800000, 0x80ffff, 0, 0x780000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1588 | 1588 | break; |
| 1589 | 1589 | case SNES_TEKKEN2: |
| 1590 | | state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x8087ff, 0, 0x3f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1591 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x808000, 0x8087ff, 0, 0x3f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1590 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x8087ff, 0, 0x3f0000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1591 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x808000, 0x8087ff, 0, 0x3f0000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1592 | 1592 | break; |
| 1593 | 1593 | case SNES_MCPIR1: |
| 1594 | 1594 | case SNES_MCPIR2: |
| 1595 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0xffff00, 0xffffff, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1595 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xffff00, 0xffffff, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1596 | 1596 | break; |
| 1597 | 1597 | case SNES_20COL: |
| 1598 | | state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x008000, 0x008fff, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1598 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x008000, 0x008fff, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1599 | 1599 | break; |
| 1600 | 1600 | case SNES_SOULBLAD: |
| 1601 | 1601 | // reads from xxx0-xxx3in range [80-bf] return a fixed sequence of 4bits; reads in range [c0-ff] return open bus |
| 1602 | | state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x808003, 0, 0x3f7ff0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1603 | | state->m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0xc00000, 0xffffff, FUNC(snes_open_bus_r)); |
| 1602 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x808003, 0, 0x3f7ff0, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1603 | m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0xc00000, 0xffffff, FUNC(snes_open_bus_r)); |
| 1604 | 1604 | break; |
| 1605 | 1605 | case SNES_BUGS: |
| 1606 | 1606 | case SNES_BANANA: |
| 1607 | | // state->m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x80ffff, 0, 0x780000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1608 | | // state->m_maincpu->space(AS_PROGRAM).install_write_handler(0x808000, 0x80ffff, 0, 0x780000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)state->m_cartslot)); |
| 1609 | | // set_5a22_map(state->m_maincpu); |
| 1607 | // m_maincpu->space(AS_PROGRAM).install_read_handler(0x808000, 0x80ffff, 0, 0x780000, read8_delegate(FUNC(base_sns_cart_slot_device::chip_read),(base_sns_cart_slot_device*)m_cartslot)); |
| 1608 | // m_maincpu->space(AS_PROGRAM).install_write_handler(0x808000, 0x80ffff, 0, 0x780000, write8_delegate(FUNC(base_sns_cart_slot_device::chip_write),(base_sns_cart_slot_device*)m_cartslot)); |
| 1609 | // set_5a22_map(m_maincpu); |
| 1610 | 1610 | break; |
| 1611 | 1611 | } |
| 1612 | 1612 | } |
| 1613 | 1613 | |
| 1614 | | static MACHINE_RESET( snes_console ) |
| 1614 | void snes_console_state::machine_reset() |
| 1615 | 1615 | { |
| 1616 | | snes_console_state *state = machine.driver_data<snes_console_state>(); |
| 1616 | snes_state::machine_reset(); |
| 1617 | 1617 | |
| 1618 | | MACHINE_RESET_CALL(snes); |
| 1619 | | |
| 1620 | | state->m_io_read = write8_delegate(FUNC(snes_console_state::snes_input_read),state); |
| 1621 | | state->m_oldjoy1_read = read8_delegate(FUNC(snes_console_state::snes_oldjoy1_read),state); |
| 1622 | | state->m_oldjoy2_read = read8_delegate(FUNC(snes_console_state::snes_oldjoy2_read),state); |
| 1618 | m_io_read = write8_delegate(FUNC(snes_console_state::snes_input_read),this); |
| 1619 | m_oldjoy1_read = read8_delegate(FUNC(snes_console_state::snes_oldjoy1_read),this); |
| 1620 | m_oldjoy2_read = read8_delegate(FUNC(snes_console_state::snes_oldjoy2_read),this); |
| 1623 | 1621 | } |
| 1624 | 1622 | |
| 1625 | 1623 | |
| r22608 | r22609 | |
| 1635 | 1633 | //MCFG_QUANTUM_TIME(attotime::from_hz(48000)) |
| 1636 | 1634 | MCFG_QUANTUM_PERFECT_CPU("maincpu") |
| 1637 | 1635 | |
| 1638 | | MCFG_MACHINE_START(snes_console) |
| 1639 | | MCFG_MACHINE_RESET(snes_console) |
| 1640 | | |
| 1641 | 1636 | /* video hardware */ |
| 1642 | 1637 | MCFG_SCREEN_ADD("screen", RASTER) |
| 1643 | 1638 | MCFG_SCREEN_RAW_PARAMS(DOTCLK_NTSC * 2, SNES_HTOTAL * 2, 0, SNES_SCR_WIDTH * 2, SNES_VTOTAL_NTSC, 0, SNES_SCR_HEIGHT_NTSC) |
trunk/src/mame/drivers/seattle.c
| r22608 | r22609 | |
| 481 | 481 | DECLARE_WRITE32_MEMBER(widget_w); |
| 482 | 482 | DECLARE_READ32_MEMBER(seattle_ide_r); |
| 483 | 483 | DECLARE_WRITE_LINE_MEMBER(ide_interrupt); |
| 484 | DECLARE_WRITE_LINE_MEMBER(vblank_assert); |
| 485 | DECLARE_WRITE_LINE_MEMBER(voodoo_stall); |
| 484 | 486 | DECLARE_DRIVER_INIT(sfrush); |
| 485 | 487 | DECLARE_DRIVER_INIT(blitz2k); |
| 486 | 488 | DECLARE_DRIVER_INIT(carnevil); |
| r22608 | r22609 | |
| 777 | 779 | } |
| 778 | 780 | |
| 779 | 781 | |
| 780 | | static void vblank_assert(device_t *device, int state) |
| 782 | WRITE_LINE_MEMBER(seattle_state::vblank_assert) |
| 781 | 783 | { |
| 782 | | seattle_state *drvstate = device->machine().driver_data<seattle_state>(); |
| 783 | 784 | /* cache the raw state */ |
| 784 | | drvstate->m_vblank_state = state; |
| 785 | m_vblank_state = state; |
| 785 | 786 | |
| 786 | 787 | /* latch on the correct polarity transition */ |
| 787 | | if ((state && !(*drvstate->m_interrupt_enable & 0x100)) || (!state && (*drvstate->m_interrupt_enable & 0x100))) |
| 788 | if ((state && !(*m_interrupt_enable & 0x100)) || (!state && (*m_interrupt_enable & 0x100))) |
| 788 | 789 | { |
| 789 | | drvstate->m_vblank_latch = 1; |
| 790 | | drvstate->update_vblank_irq(); |
| 790 | m_vblank_latch = 1; |
| 791 | update_vblank_irq(); |
| 791 | 792 | } |
| 792 | 793 | } |
| 793 | 794 | |
| r22608 | r22609 | |
| 1363 | 1364 | } |
| 1364 | 1365 | |
| 1365 | 1366 | |
| 1366 | | static void voodoo_stall(device_t *device, int stall) |
| 1367 | WRITE_LINE_MEMBER(seattle_state::voodoo_stall) |
| 1367 | 1368 | { |
| 1368 | | seattle_state *state = device->machine().driver_data<seattle_state>(); |
| 1369 | 1369 | /* set the new state */ |
| 1370 | | state->m_voodoo_stalled = stall; |
| 1370 | m_voodoo_stalled = state; |
| 1371 | 1371 | |
| 1372 | 1372 | /* if we're stalling and DMA is active, take note */ |
| 1373 | | if (stall) |
| 1373 | if (state) |
| 1374 | 1374 | { |
| 1375 | | if (state->m_galileo.dma_active != -1) |
| 1375 | if (m_galileo.dma_active != -1) |
| 1376 | 1376 | { |
| 1377 | | if (LOG_DMA) logerror("Stalling DMA%d on voodoo\n", state->m_galileo.dma_active); |
| 1378 | | state->m_galileo.dma_stalled_on_voodoo[state->m_galileo.dma_active] = TRUE; |
| 1377 | if (LOG_DMA) logerror("Stalling DMA%d on voodoo\n", m_galileo.dma_active); |
| 1378 | m_galileo.dma_stalled_on_voodoo[m_galileo.dma_active] = TRUE; |
| 1379 | 1379 | } |
| 1380 | 1380 | else |
| 1381 | 1381 | { |
| 1382 | | if (LOG_DMA) logerror("%08X:Stalling CPU on voodoo\n", state->m_maincpu->pc()); |
| 1383 | | state->m_maincpu->spin_until_trigger(45678); |
| 1382 | if (LOG_DMA) logerror("%08X:Stalling CPU on voodoo\n", m_maincpu->pc()); |
| 1383 | m_maincpu->spin_until_trigger(45678); |
| 1384 | 1384 | } |
| 1385 | 1385 | } |
| 1386 | 1386 | |
| r22608 | r22609 | |
| 1391 | 1391 | |
| 1392 | 1392 | /* loop over any active DMAs and resume them */ |
| 1393 | 1393 | for (which = 0; which < 4; which++) |
| 1394 | | if (state->m_galileo.dma_stalled_on_voodoo[which]) |
| 1394 | if (m_galileo.dma_stalled_on_voodoo[which]) |
| 1395 | 1395 | { |
| 1396 | | address_space &space = state->m_maincpu->space(AS_PROGRAM); |
| 1396 | address_space &space = m_maincpu->space(AS_PROGRAM); |
| 1397 | 1397 | if (LOG_DMA) logerror("Resuming DMA%d on voodoo\n", which); |
| 1398 | 1398 | |
| 1399 | 1399 | /* mark this DMA as no longer stalled */ |
| 1400 | | state->m_galileo.dma_stalled_on_voodoo[which] = FALSE; |
| 1400 | m_galileo.dma_stalled_on_voodoo[which] = FALSE; |
| 1401 | 1401 | |
| 1402 | 1402 | /* resume execution */ |
| 1403 | | state->galileo_perform_dma(space, which); |
| 1403 | galileo_perform_dma(space, which); |
| 1404 | 1404 | break; |
| 1405 | 1405 | } |
| 1406 | 1406 | |
| 1407 | 1407 | /* if we finished all our pending DMAs, then we can resume CPU operations */ |
| 1408 | | if (!state->m_voodoo_stalled) |
| 1408 | if (!m_voodoo_stalled) |
| 1409 | 1409 | { |
| 1410 | 1410 | /* if the CPU had a pending write, do it now */ |
| 1411 | | if (state->m_cpu_stalled_on_voodoo) |
| 1411 | if (m_cpu_stalled_on_voodoo) |
| 1412 | 1412 | { |
| 1413 | | address_space &space = device->machine().firstcpu->space(AS_PROGRAM); |
| 1414 | | voodoo_w(device, space, state->m_cpu_stalled_offset, state->m_cpu_stalled_data, state->m_cpu_stalled_mem_mask); |
| 1413 | address_space &space = machine().firstcpu->space(AS_PROGRAM); |
| 1414 | voodoo_w(m_voodoo, space, m_cpu_stalled_offset, m_cpu_stalled_data, m_cpu_stalled_mem_mask); |
| 1415 | 1415 | } |
| 1416 | | state->m_cpu_stalled_on_voodoo = FALSE; |
| 1416 | m_cpu_stalled_on_voodoo = FALSE; |
| 1417 | 1417 | |
| 1418 | 1418 | /* resume CPU execution */ |
| 1419 | 1419 | if (LOG_DMA) logerror("Resuming CPU on voodoo\n"); |
| 1420 | | device->machine().scheduler().trigger(45678); |
| 1420 | machine().scheduler().trigger(45678); |
| 1421 | 1421 | } |
| 1422 | 1422 | } |
| 1423 | 1423 | } |
| r22608 | r22609 | |
| 2518 | 2518 | 0,// tmumem1; |
| 2519 | 2519 | "screen",// screen; |
| 2520 | 2520 | "maincpu",// cputag; |
| 2521 | | vblank_assert,// vblank; |
| 2522 | | voodoo_stall,// stall; |
| 2521 | DEVCB_DRIVER_LINE_MEMBER(seattle_state,vblank_assert),// vblank; |
| 2522 | DEVCB_DRIVER_LINE_MEMBER(seattle_state,voodoo_stall)// stall; |
| 2523 | 2523 | }; |
| 2524 | 2524 | |
| 2525 | 2525 | static MACHINE_CONFIG_START( seattle_common, seattle_state ) |
| r22608 | r22609 | |
| 2595 | 2595 | 4,// tmumem1; |
| 2596 | 2596 | "screen",// screen; |
| 2597 | 2597 | "maincpu",// cputag; |
| 2598 | | vblank_assert,// vblank; |
| 2599 | | voodoo_stall,// stall; |
| 2598 | DEVCB_DRIVER_LINE_MEMBER(seattle_state,vblank_assert),// vblank; |
| 2599 | DEVCB_DRIVER_LINE_MEMBER(seattle_state,voodoo_stall)// stall; |
| 2600 | 2600 | }; |
| 2601 | 2601 | |
| 2602 | 2602 | static MACHINE_CONFIG_DERIVED( flagstaff, seattle_common ) |
trunk/src/mame/machine/snes.c
| r22608 | r22609 | |
| 992 | 992 | |
| 993 | 993 | *************************************/ |
| 994 | 994 | |
| 995 | | static void snes_init_timers( running_machine &machine ) |
| 995 | void snes_state::snes_init_timers() |
| 996 | 996 | { |
| 997 | | snes_state *state = machine.driver_data<snes_state>(); |
| 998 | | |
| 999 | 997 | /* init timers and stop them */ |
| 1000 | | state->m_scanline_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_scanline_tick),state)); |
| 1001 | | state->m_scanline_timer->adjust(attotime::never); |
| 1002 | | state->m_hblank_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_hblank_tick),state)); |
| 1003 | | state->m_hblank_timer->adjust(attotime::never); |
| 1004 | | state->m_nmi_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_nmi_tick),state)); |
| 1005 | | state->m_nmi_timer->adjust(attotime::never); |
| 1006 | | state->m_hirq_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_hirq_tick_callback),state)); |
| 1007 | | state->m_hirq_timer->adjust(attotime::never); |
| 1008 | | //state->m_div_timer = machine.scheduler().timer_alloc(FUNC(snes_div_callback)); |
| 1009 | | //state->m_div_timer->adjust(attotime::never); |
| 1010 | | //state->m_mult_timer = machine.scheduler().timer_alloc(FUNC(snes_mult_callback)); |
| 1011 | | //state->m_mult_timer->adjust(attotime::never); |
| 1012 | | state->m_io_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_update_io),state)); |
| 1013 | | state->m_io_timer->adjust(attotime::never); |
| 998 | m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_scanline_tick),this)); |
| 999 | m_scanline_timer->adjust(attotime::never); |
| 1000 | m_hblank_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_hblank_tick),this)); |
| 1001 | m_hblank_timer->adjust(attotime::never); |
| 1002 | m_nmi_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_nmi_tick),this)); |
| 1003 | m_nmi_timer->adjust(attotime::never); |
| 1004 | m_hirq_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_hirq_tick_callback),this)); |
| 1005 | m_hirq_timer->adjust(attotime::never); |
| 1006 | //m_div_timer = machine().scheduler().timer_alloc(FUNC(snes_div_callback)); |
| 1007 | //m_div_timer->adjust(attotime::never); |
| 1008 | //m_mult_timer = machine().scheduler().timer_alloc(FUNC(snes_mult_callback)); |
| 1009 | //m_mult_timer->adjust(attotime::never); |
| 1010 | m_io_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(snes_state::snes_update_io),this)); |
| 1011 | m_io_timer->adjust(attotime::never); |
| 1014 | 1012 | |
| 1015 | 1013 | // SNES hcounter has a 0-339 range. hblank starts at counter 260. |
| 1016 | 1014 | // clayfighter sets an HIRQ at 260, apparently it wants it to be before hdma kicks off, so we'll delay 2 pixels. |
| 1017 | | state->m_hblank_offset = 274; |
| 1018 | | state->m_hblank_timer->adjust(machine.primary_screen->time_until_pos(((state->m_ppu.m_stat78 & 0x10) == SNES_NTSC) ? SNES_VTOTAL_NTSC - 1 : SNES_VTOTAL_PAL - 1, state->m_hblank_offset)); |
| 1015 | m_hblank_offset = 274; |
| 1016 | m_hblank_timer->adjust(machine().primary_screen->time_until_pos(((m_ppu.m_stat78 & 0x10) == SNES_NTSC) ? SNES_VTOTAL_NTSC - 1 : SNES_VTOTAL_PAL - 1, m_hblank_offset)); |
| 1019 | 1017 | } |
| 1020 | 1018 | |
| 1021 | 1019 | void snes_state::snes_init_ram() |
| r22608 | r22609 | |
| 1051 | 1049 | m_ppu.m_beam.current_vert = SNES_VTOTAL_PAL; |
| 1052 | 1050 | } |
| 1053 | 1051 | |
| 1054 | | MACHINE_START( snes ) |
| 1052 | void snes_state::machine_start() |
| 1055 | 1053 | { |
| 1056 | | snes_state *state = machine.driver_data<snes_state>(); |
| 1057 | 1054 | // power-on sets these registers like this |
| 1058 | | SNES_CPU_REG_STATE(WRIO) = 0xff; |
| 1059 | | // SNES_CPU_REG_STATE(WRMPYA) = 0xff; |
| 1060 | | // SNES_CPU_REG_STATE(WRDIVL) = 0xff; |
| 1061 | | // SNES_CPU_REG_STATE(WRDIVH) = 0xff; |
| 1055 | SNES_CPU_REG(WRIO) = 0xff; |
| 1056 | // SNES_CPU_REG(WRMPYA) = 0xff; |
| 1057 | // SNES_CPU_REG(WRDIVL) = 0xff; |
| 1058 | // SNES_CPU_REG(WRDIVH) = 0xff; |
| 1062 | 1059 | |
| 1063 | | snes_init_timers(machine); |
| 1060 | snes_init_timers(); |
| 1064 | 1061 | |
| 1065 | 1062 | for (int i = 0; i < 6; i++) |
| 1066 | 1063 | { |
| 1067 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].dmap); |
| 1068 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].dest_addr); |
| 1069 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].src_addr); |
| 1070 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].bank); |
| 1071 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].trans_size); |
| 1072 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].ibank); |
| 1073 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].hdma_addr); |
| 1074 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].hdma_line_counter); |
| 1075 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].unk); |
| 1076 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].do_transfer); |
| 1077 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_dma_channel[i].dma_disabled); |
| 1064 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].dmap); |
| 1065 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].dest_addr); |
| 1066 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].src_addr); |
| 1067 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].bank); |
| 1068 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].trans_size); |
| 1069 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].ibank); |
| 1070 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].hdma_addr); |
| 1071 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].hdma_line_counter); |
| 1072 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].unk); |
| 1073 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].do_transfer); |
| 1074 | state_save_register_item(machine(), "snes_dma", NULL, i, m_dma_channel[i].dma_disabled); |
| 1078 | 1075 | } |
| 1079 | 1076 | |
| 1080 | | state->save_item(NAME(state->m_hblank_offset)); |
| 1081 | | state->save_item(NAME(state->m_wram_address)); |
| 1082 | | state->save_item(NAME(state->m_htime)); |
| 1083 | | state->save_item(NAME(state->m_vtime)); |
| 1084 | | state->save_item(NAME(state->m_hdmaen)); |
| 1085 | | state->save_item(NAME(state->m_data1)); |
| 1086 | | state->save_item(NAME(state->m_data2)); |
| 1087 | | state->save_item(NAME(state->m_read_idx)); |
| 1088 | | state->save_item(NAME(state->m_dma_regs)); |
| 1089 | | state->save_item(NAME(state->m_cpu_regs)); |
| 1090 | | state->save_item(NAME(state->m_oldjoy1_latch)); |
| 1077 | save_item(NAME(m_hblank_offset)); |
| 1078 | save_item(NAME(m_wram_address)); |
| 1079 | save_item(NAME(m_htime)); |
| 1080 | save_item(NAME(m_vtime)); |
| 1081 | save_item(NAME(m_hdmaen)); |
| 1082 | save_item(NAME(m_data1)); |
| 1083 | save_item(NAME(m_data2)); |
| 1084 | save_item(NAME(m_read_idx)); |
| 1085 | save_item(NAME(m_dma_regs)); |
| 1086 | save_item(NAME(m_cpu_regs)); |
| 1087 | save_item(NAME(m_oldjoy1_latch)); |
| 1091 | 1088 | |
| 1092 | 1089 | for (int i = 0; i < 2; i++) |
| 1093 | 1090 | { |
| 1094 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_joypad[i].buttons); |
| 1095 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_mouse[i].x); |
| 1096 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_mouse[i].oldx); |
| 1097 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_mouse[i].y); |
| 1098 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_mouse[i].oldy); |
| 1099 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_mouse[i].buttons); |
| 1100 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_mouse[i].deltax); |
| 1101 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_mouse[i].deltay); |
| 1102 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_mouse[i].speed); |
| 1103 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_scope[i].x); |
| 1104 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_scope[i].y); |
| 1105 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_scope[i].buttons); |
| 1106 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_scope[i].turbo_lock); |
| 1107 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_scope[i].pause_lock); |
| 1108 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_scope[i].fire_lock); |
| 1109 | | state_save_register_item(machine, "snes_dma", NULL, i, state->m_scope[i].offscreen); |
| 1091 | state_save_register_item(machine(), "snes_dma", NULL, i, m_joypad[i].buttons); |
| 1092 | state_save_register_item(machine(), "snes_dma", NULL, i, m_mouse[i].x); |
| 1093 | state_save_register_item(machine(), "snes_dma", NULL, i, m_mouse[i].oldx); |
| 1094 | state_save_register_item(machine(), "snes_dma", NULL, i, m_mouse[i].y); |
| 1095 | state_save_register_item(machine(), "snes_dma", NULL, i, m_mouse[i].oldy); |
| 1096 | state_save_register_item(machine(), "snes_dma", NULL, i, m_mouse[i].buttons); |
| 1097 | state_save_register_item(machine(), "snes_dma", NULL, i, m_mouse[i].deltax); |
| 1098 | state_save_register_item(machine(), "snes_dma", NULL, i, m_mouse[i].deltay); |
| 1099 | state_save_register_item(machine(), "snes_dma", NULL, i, m_mouse[i].speed); |
| 1100 | state_save_register_item(machine(), "snes_dma", NULL, i, m_scope[i].x); |
| 1101 | state_save_register_item(machine(), "snes_dma", NULL, i, m_scope[i].y); |
| 1102 | state_save_register_item(machine(), "snes_dma", NULL, i, m_scope[i].buttons); |
| 1103 | state_save_register_item(machine(), "snes_dma", NULL, i, m_scope[i].turbo_lock); |
| 1104 | state_save_register_item(machine(), "snes_dma", NULL, i, m_scope[i].pause_lock); |
| 1105 | state_save_register_item(machine(), "snes_dma", NULL, i, m_scope[i].fire_lock); |
| 1106 | state_save_register_item(machine(), "snes_dma", NULL, i, m_scope[i].offscreen); |
| 1110 | 1107 | } |
| 1111 | 1108 | |
| 1112 | | state->m_is_nss = 0; |
| 1113 | | state->m_is_sfcbox = 0; |
| 1109 | m_is_nss = 0; |
| 1110 | m_is_sfcbox = 0; |
| 1114 | 1111 | } |
| 1115 | 1112 | |
| 1116 | | MACHINE_RESET( snes ) |
| 1113 | void snes_state::machine_reset() |
| 1117 | 1114 | { |
| 1118 | | snes_state *state = machine.driver_data<snes_state>(); |
| 1119 | 1115 | int i; |
| 1120 | 1116 | |
| 1121 | | state->snes_init_ram(); |
| 1117 | snes_init_ram(); |
| 1122 | 1118 | |
| 1123 | 1119 | /* init DMA regs to be 0xff */ |
| 1124 | 1120 | for(i = 0; i < 8; i++) |
| 1125 | 1121 | { |
| 1126 | | state->m_dma_channel[i].dmap = 0xff; |
| 1127 | | state->m_dma_channel[i].dest_addr = 0xff; |
| 1128 | | state->m_dma_channel[i].src_addr = 0xffff; |
| 1129 | | state->m_dma_channel[i].bank = 0xff; |
| 1130 | | state->m_dma_channel[i].trans_size = 0xffff; |
| 1131 | | state->m_dma_channel[i].ibank = 0xff; |
| 1132 | | state->m_dma_channel[i].hdma_addr = 0xffff; |
| 1133 | | state->m_dma_channel[i].hdma_line_counter = 0xff; |
| 1134 | | state->m_dma_channel[i].unk = 0xff; |
| 1122 | m_dma_channel[i].dmap = 0xff; |
| 1123 | m_dma_channel[i].dest_addr = 0xff; |
| 1124 | m_dma_channel[i].src_addr = 0xffff; |
| 1125 | m_dma_channel[i].bank = 0xff; |
| 1126 | m_dma_channel[i].trans_size = 0xffff; |
| 1127 | m_dma_channel[i].ibank = 0xff; |
| 1128 | m_dma_channel[i].hdma_addr = 0xffff; |
| 1129 | m_dma_channel[i].hdma_line_counter = 0xff; |
| 1130 | m_dma_channel[i].unk = 0xff; |
| 1135 | 1131 | } |
| 1136 | 1132 | |
| 1137 | 1133 | /* Set STAT78 to NTSC or PAL */ |
| 1138 | | if (ATTOSECONDS_TO_HZ(machine.primary_screen->frame_period().attoseconds) >= 59.0f) |
| 1139 | | state->m_ppu.m_stat78 = SNES_NTSC; |
| 1134 | if (ATTOSECONDS_TO_HZ(machine().primary_screen->frame_period().attoseconds) >= 59.0f) |
| 1135 | m_ppu.m_stat78 = SNES_NTSC; |
| 1140 | 1136 | else /* if (ATTOSECONDS_TO_HZ(machine.primary_screen->frame_period().attoseconds) == 50.0f) */ |
| 1141 | | state->m_ppu.m_stat78 = SNES_PAL; |
| 1137 | m_ppu.m_stat78 = SNES_PAL; |
| 1142 | 1138 | |
| 1143 | 1139 | // reset does this to these registers |
| 1144 | | SNES_CPU_REG_STATE(NMITIMEN) = 0; |
| 1145 | | state->m_htime = 0x1ff; |
| 1146 | | state->m_vtime = 0x1ff; |
| 1140 | SNES_CPU_REG(NMITIMEN) = 0; |
| 1141 | m_htime = 0x1ff; |
| 1142 | m_vtime = 0x1ff; |
| 1147 | 1143 | |
| 1148 | | state->m_ppu.m_htmult = 1; |
| 1149 | | state->m_ppu.m_interlace = 1; |
| 1150 | | state->m_ppu.m_obj_interlace = 1; |
| 1144 | m_ppu.m_htmult = 1; |
| 1145 | m_ppu.m_interlace = 1; |
| 1146 | m_ppu.m_obj_interlace = 1; |
| 1151 | 1147 | } |
| 1152 | 1148 | |
| 1153 | 1149 | |