trunk/src/mame/drivers/namcos23.c
| r19730 | r19731 | |
| 1407 | 1407 | |
| 1408 | 1408 | int m_s23_porta; |
| 1409 | 1409 | int m_s23_rtcstate; |
| 1410 | | int m_s23_lastpB; |
| 1410 | int m_s23_lastpb; |
| 1411 | 1411 | int m_s23_setstate; |
| 1412 | 1412 | int m_s23_setnum; |
| 1413 | 1413 | int m_s23_settings[8]; |
| r19730 | r19731 | |
| 1422 | 1422 | void update_main_interrupts(UINT32 cause); |
| 1423 | 1423 | void update_mixer(); |
| 1424 | 1424 | |
| 1425 | | DECLARE_WRITE32_MEMBER(namcos23_textram_w); |
| 1426 | | DECLARE_WRITE32_MEMBER(s23_txtchar_w); |
| 1427 | | DECLARE_WRITE32_MEMBER(namcos23_paletteram_w); |
| 1425 | DECLARE_WRITE32_MEMBER(s23_textram_w); |
| 1426 | DECLARE_WRITE32_MEMBER(s23_textchar_w); |
| 1427 | DECLARE_WRITE32_MEMBER(s23_paletteram_w); |
| 1428 | 1428 | DECLARE_READ16_MEMBER(s23_c417_r); |
| 1429 | 1429 | DECLARE_WRITE16_MEMBER(s23_c417_w); |
| 1430 | 1430 | DECLARE_READ16_MEMBER(s23_c412_ram_r); |
| r19730 | r19731 | |
| 1442 | 1442 | DECLARE_READ16_MEMBER(s23_c422_r); |
| 1443 | 1443 | DECLARE_WRITE16_MEMBER(s23_c422_w); |
| 1444 | 1444 | DECLARE_WRITE16_MEMBER(s23_mcuen_w); |
| 1445 | | DECLARE_READ32_MEMBER(s23_unk_status_r); |
| 1445 | DECLARE_READ16_MEMBER(s23_sub_comm_r); |
| 1446 | DECLARE_WRITE16_MEMBER(s23_sub_comm_w); |
| 1446 | 1447 | DECLARE_READ32_MEMBER(p3d_r); |
| 1447 | 1448 | DECLARE_WRITE32_MEMBER(p3d_w); |
| 1448 | 1449 | DECLARE_READ32_MEMBER(gmen_trigger_sh2); |
| r19730 | r19731 | |
| 1452 | 1453 | DECLARE_READ16_MEMBER(sharedram_sub_r); |
| 1453 | 1454 | DECLARE_WRITE16_MEMBER(sub_interrupt_main_w); |
| 1454 | 1455 | DECLARE_READ8_MEMBER(s23_mcu_p8_r); |
| 1456 | DECLARE_WRITE8_MEMBER(s23_mcu_p8_w); |
| 1455 | 1457 | DECLARE_READ8_MEMBER(s23_mcu_pa_r); |
| 1456 | 1458 | DECLARE_WRITE8_MEMBER(s23_mcu_pa_w); |
| 1457 | 1459 | DECLARE_READ8_MEMBER(s23_mcu_rtc_r); |
| 1458 | | DECLARE_READ8_MEMBER(s23_mcu_portB_r); |
| 1459 | | DECLARE_WRITE8_MEMBER(s23_mcu_portB_w); |
| 1460 | DECLARE_READ8_MEMBER(s23_mcu_pb_r); |
| 1461 | DECLARE_WRITE8_MEMBER(s23_mcu_pb_w); |
| 1460 | 1462 | DECLARE_WRITE8_MEMBER(s23_mcu_settings_w); |
| 1461 | 1463 | DECLARE_READ8_MEMBER(s23_mcu_iob_r); |
| 1462 | 1464 | DECLARE_WRITE8_MEMBER(s23_mcu_iob_w); |
| r19730 | r19731 | |
| 1535 | 1537 | SET_TILE_INFO_MEMBER(0, data&0x03ff, data>>12, TILE_FLIPYX((data&0x0c00)>>10)); |
| 1536 | 1538 | } |
| 1537 | 1539 | |
| 1538 | | WRITE32_MEMBER(namcos23_state::namcos23_textram_w) |
| 1540 | WRITE32_MEMBER(namcos23_state::s23_textram_w) |
| 1539 | 1541 | { |
| 1540 | 1542 | COMBINE_DATA( &m_textram[offset] ); |
| 1541 | 1543 | m_bgtilemap->mark_tile_dirty(offset*2); |
| 1542 | 1544 | m_bgtilemap->mark_tile_dirty((offset*2)+1); |
| 1543 | 1545 | } |
| 1544 | 1546 | |
| 1545 | | WRITE32_MEMBER(namcos23_state::s23_txtchar_w) |
| 1547 | WRITE32_MEMBER(namcos23_state::s23_textchar_w) |
| 1546 | 1548 | { |
| 1547 | 1549 | COMBINE_DATA(&m_charram[offset]); |
| 1548 | 1550 | machine().gfx[0]->mark_dirty(offset/32); |
| 1549 | 1551 | } |
| 1550 | 1552 | |
| 1551 | | WRITE32_MEMBER(namcos23_state::namcos23_paletteram_w) |
| 1553 | WRITE32_MEMBER(namcos23_state::s23_paletteram_w) |
| 1552 | 1554 | { |
| 1553 | 1555 | COMBINE_DATA(&m_generic_paletteram_32[offset]); |
| 1554 | 1556 | |
| r19730 | r19731 | |
| 1948 | 1950 | } |
| 1949 | 1951 | } |
| 1950 | 1952 | |
| 1951 | | // panicprk sits in a tight loop waiting for this AND 0002 to be non-zero (at PC=BFC02F00) |
| 1953 | // while getting the subcpu to be ready, panicprk sits in a tight loop waiting for this AND 0002 to be non-zero (at PC=BFC02F00) |
| 1952 | 1954 | // timecrs2 locks up in a similar way as panicprk, at the beginning of the 2nd level, by reading/writing to this register a couple of times |
| 1953 | | READ32_MEMBER(namcos23_state::s23_unk_status_r) |
| 1955 | READ16_MEMBER(namcos23_state::s23_sub_comm_r) |
| 1954 | 1956 | { |
| 1955 | | return 0x00020002; |
| 1957 | return 2; |
| 1956 | 1958 | } |
| 1957 | 1959 | |
| 1960 | WRITE16_MEMBER(namcos23_state::s23_sub_comm_w) |
| 1961 | { |
| 1962 | ; |
| 1963 | } |
| 1958 | 1964 | |
| 1959 | 1965 | // 3D hardware, to throw at least in part in video/namcos23.c |
| 1960 | 1966 | |
| r19730 | r19731 | |
| 2564 | 2570 | AM_RANGE(0x06080000, 0x0608000f) AM_RAM AM_SHARE("czattr") |
| 2565 | 2571 | AM_RANGE(0x06080200, 0x060803ff) AM_RAM // PCZ Convert RAM (C406) (should be banked) |
| 2566 | 2572 | AM_RANGE(0x06108000, 0x061087ff) AM_RAM AM_SHARE("gammaram") // Gamma RAM (C404) |
| 2567 | | AM_RANGE(0x06110000, 0x0613ffff) AM_RAM_WRITE(namcos23_paletteram_w) AM_SHARE("paletteram") // Palette RAM (C404) |
| 2568 | | AM_RANGE(0x06400000, 0x0641dfff) AM_RAM_WRITE(s23_txtchar_w) AM_SHARE("charram") // Text CGRAM (C361) |
| 2569 | | AM_RANGE(0x0641e000, 0x0641ffff) AM_RAM_WRITE(namcos23_textram_w) AM_SHARE("textram") // Text VRAM (C361) |
| 2573 | AM_RANGE(0x06110000, 0x0613ffff) AM_RAM_WRITE(s23_paletteram_w) AM_SHARE("paletteram") // Palette RAM (C404) |
| 2574 | AM_RANGE(0x06400000, 0x0641dfff) AM_RAM_WRITE(s23_textchar_w) AM_SHARE("charram") // Text CGRAM (C361) |
| 2575 | AM_RANGE(0x0641e000, 0x0641ffff) AM_RAM_WRITE(s23_textram_w) AM_SHARE("textram") // Text VRAM (C361) |
| 2570 | 2576 | AM_RANGE(0x06420000, 0x0642000f) AM_READWRITE16(s23_c361_r, s23_c361_w, 0xffffffff) // C361 |
| 2571 | 2577 | AM_RANGE(0x08000000, 0x087fffff) AM_ROM AM_REGION("data", 0) // data ROMs |
| 2572 | 2578 | AM_RANGE(0x0c000000, 0x0c00ffff) AM_RAM AM_SHARE("nvram") // Backup RAM |
| 2573 | 2579 | AM_RANGE(0x0d000000, 0x0d00000f) AM_READWRITE16(s23_ctl_r, s23_ctl_w, 0xffffffff) // write for LEDs at d000000, watchdog at d000004 |
| 2574 | 2580 | AM_RANGE(0x0e000000, 0x0e007fff) AM_RAM // C405 RAM - what is this? |
| 2575 | | AM_RANGE(0x0f000000, 0x0f000003) AM_READ(s23_unk_status_r) // error status, or protection? (also gets written to) |
| 2581 | AM_RANGE(0x0f000000, 0x0f000003) AM_READWRITE16(s23_sub_comm_r, s23_sub_comm_w, 0xffffffff) // not sure |
| 2576 | 2582 | AM_RANGE(0x0f200000, 0x0f203fff) AM_RAM // C422 RAM |
| 2577 | 2583 | AM_RANGE(0x0f300000, 0x0f30000f) AM_READWRITE16(s23_c422_r, s23_c422_w, 0xffffffff) // C422 registers |
| 2578 | 2584 | AM_RANGE(0x0fc00000, 0x0fffffff) AM_WRITENOP AM_ROM AM_REGION("user1", 0) |
| r19730 | r19731 | |
| 2588 | 2594 | AM_RANGE(0x06000000, 0x0600ffff) AM_RAM AM_SHARE("nvram") // Backup RAM |
| 2589 | 2595 | AM_RANGE(0x06200000, 0x06203fff) AM_RAM // C422 RAM |
| 2590 | 2596 | AM_RANGE(0x06400000, 0x0640000f) AM_READWRITE16(s23_c422_r, s23_c422_w, 0xffffffff) // C422 registers |
| 2591 | | AM_RANGE(0x06800000, 0x0681dfff) AM_RAM_WRITE(s23_txtchar_w) AM_SHARE("charram") // Text CGRAM (C361) |
| 2592 | | AM_RANGE(0x0681e000, 0x0681ffff) AM_RAM_WRITE(namcos23_textram_w) AM_SHARE("textram") // Text VRAM (C361) |
| 2597 | AM_RANGE(0x06800000, 0x0681dfff) AM_RAM_WRITE(s23_textchar_w) AM_SHARE("charram") // Text CGRAM (C361) |
| 2598 | AM_RANGE(0x0681e000, 0x0681ffff) AM_RAM_WRITE(s23_textram_w) AM_SHARE("textram") // Text VRAM (C361) |
| 2593 | 2599 | AM_RANGE(0x06820000, 0x0682000f) AM_READWRITE16(s23_c361_r, s23_c361_w, 0xffffffff) // C361 |
| 2594 | 2600 | AM_RANGE(0x06a08000, 0x06a087ff) AM_RAM AM_SHARE("gammaram") // Gamma RAM (C404) |
| 2595 | | AM_RANGE(0x06a10000, 0x06a3ffff) AM_RAM_WRITE(namcos23_paletteram_w) AM_SHARE("paletteram") // Palette RAM (C404) |
| 2601 | AM_RANGE(0x06a10000, 0x06a3ffff) AM_RAM_WRITE(s23_paletteram_w) AM_SHARE("paletteram") // Palette RAM (C404) |
| 2596 | 2602 | AM_RANGE(0x08000000, 0x08ffffff) AM_ROM AM_REGION("data", 0x0000000) AM_MIRROR(0x1000000) // data ROMs |
| 2597 | 2603 | AM_RANGE(0x0a000000, 0x0affffff) AM_ROM AM_REGION("data", 0x1000000) AM_MIRROR(0x1000000) |
| 2598 | 2604 | AM_RANGE(0x0c000000, 0x0c00001f) AM_READWRITE16(s23_c412_r, s23_c412_w, 0xffffffff) |
| 2599 | 2605 | AM_RANGE(0x0c400000, 0x0c400007) AM_READWRITE16(s23_c421_r, s23_c421_w, 0xffffffff) |
| 2600 | 2606 | AM_RANGE(0x0d000000, 0x0d00000f) AM_READWRITE16(s23_ctl_r, s23_ctl_w, 0xffffffff) |
| 2601 | | AM_RANGE(0x0e800000, 0x0e800003) AM_READ(s23_unk_status_r) // error status, or protection? (also gets written to) |
| 2607 | AM_RANGE(0x0e800000, 0x0e800003) AM_READWRITE16(s23_sub_comm_r, s23_sub_comm_w, 0xffffffff) // not sure |
| 2602 | 2608 | AM_RANGE(0x0fc00000, 0x0fffffff) AM_WRITENOP AM_ROM AM_REGION("user1", 0) |
| 2603 | 2609 | ADDRESS_MAP_END |
| 2604 | 2610 | |
| r19730 | r19731 | |
| 2686 | 2692 | AM_RANGE(0x300030, 0x300031) AM_WRITENOP // timecrs2 writes this when writing to the sync shared ram location, motoxgo doesn't |
| 2687 | 2693 | ADDRESS_MAP_END |
| 2688 | 2694 | |
| 2695 | // port 8, looks like serial comms, where to/from? |
| 2689 | 2696 | READ8_MEMBER(namcos23_state::s23_mcu_p8_r) |
| 2690 | 2697 | { |
| 2691 | 2698 | return 0x02; |
| 2692 | 2699 | } |
| 2693 | 2700 | |
| 2701 | WRITE8_MEMBER(namcos23_state::s23_mcu_p8_w) |
| 2702 | { |
| 2703 | ; |
| 2704 | } |
| 2705 | |
| 2694 | 2706 | // emulation of the Epson R4543 real time clock |
| 2695 | 2707 | // in System 12, bit 0 of H8/3002 port A is connected to it's chip enable |
| 2696 | 2708 | // the actual I/O takes place through the H8/3002's serial port B. |
| r19730 | r19731 | |
| 2724 | 2736 | } |
| 2725 | 2737 | |
| 2726 | 2738 | |
| 2727 | | READ8_MEMBER(namcos23_state::s23_mcu_portB_r) |
| 2739 | READ8_MEMBER(namcos23_state::s23_mcu_pb_r) |
| 2728 | 2740 | { |
| 2729 | | m_s23_lastpB ^= 0x80; |
| 2730 | | return m_s23_lastpB; |
| 2741 | m_s23_lastpb ^= 0x80; |
| 2742 | return m_s23_lastpb; |
| 2731 | 2743 | } |
| 2732 | 2744 | |
| 2733 | | WRITE8_MEMBER(namcos23_state::s23_mcu_portB_w) |
| 2745 | WRITE8_MEMBER(namcos23_state::s23_mcu_pb_w) |
| 2734 | 2746 | { |
| 2735 | 2747 | // bit 7 = chip enable for the video settings controller |
| 2736 | 2748 | if (data & 0x80) |
| r19730 | r19731 | |
| 2738 | 2750 | m_s23_setstate = 0; |
| 2739 | 2751 | } |
| 2740 | 2752 | |
| 2741 | | m_s23_lastpB = data; |
| 2753 | m_s23_lastpb = data; |
| 2742 | 2754 | } |
| 2743 | 2755 | |
| 2744 | 2756 | WRITE8_MEMBER(namcos23_state::s23_mcu_settings_w) |
| r19730 | r19731 | |
| 3068 | 3080 | |
| 3069 | 3081 | static ADDRESS_MAP_START( s23h8iomap, AS_IO, 8, namcos23_state ) |
| 3070 | 3082 | AM_RANGE(H8_PORT_6, H8_PORT_6) AM_READWRITE(s23_mcu_p6_r, s23_mcu_p6_w ) |
| 3071 | | AM_RANGE(H8_PORT_8, H8_PORT_8) AM_READ(s23_mcu_p8_r ) AM_WRITENOP |
| 3083 | AM_RANGE(H8_PORT_8, H8_PORT_8) AM_READWRITE(s23_mcu_p8_r, s23_mcu_p8_w ) |
| 3072 | 3084 | AM_RANGE(H8_PORT_A, H8_PORT_A) AM_READWRITE(s23_mcu_pa_r, s23_mcu_pa_w ) |
| 3073 | | AM_RANGE(H8_PORT_B, H8_PORT_B) AM_READWRITE(s23_mcu_portB_r, s23_mcu_portB_w ) |
| 3085 | AM_RANGE(H8_PORT_B, H8_PORT_B) AM_READWRITE(s23_mcu_pb_r, s23_mcu_pb_w ) |
| 3074 | 3086 | AM_RANGE(H8_SERIAL_0, H8_SERIAL_0) AM_READWRITE(s23_mcu_iob_r, s23_mcu_iob_w ) |
| 3075 | 3087 | AM_RANGE(H8_SERIAL_1, H8_SERIAL_1) AM_READWRITE(s23_mcu_rtc_r, s23_mcu_settings_w ) |
| 3076 | 3088 | AM_RANGE(H8_ADC_0_H, H8_ADC_0_L) AM_NOP |
| r19730 | r19731 | |
| 3082 | 3094 | // version without serial hookup to I/O board for games where the PIC isn't dumped |
| 3083 | 3095 | static ADDRESS_MAP_START( s23h8noiobmap, AS_IO, 8, namcos23_state ) |
| 3084 | 3096 | AM_RANGE(H8_PORT_6, H8_PORT_6) AM_READWRITE(s23_mcu_p6_r, s23_mcu_p6_w ) |
| 3085 | | AM_RANGE(H8_PORT_8, H8_PORT_8) AM_READ(s23_mcu_p8_r ) AM_WRITENOP |
| 3097 | AM_RANGE(H8_PORT_8, H8_PORT_8) AM_READWRITE(s23_mcu_p8_r, s23_mcu_p8_w ) |
| 3086 | 3098 | AM_RANGE(H8_PORT_A, H8_PORT_A) AM_READWRITE(s23_mcu_pa_r, s23_mcu_pa_w ) |
| 3087 | | AM_RANGE(H8_PORT_B, H8_PORT_B) AM_READWRITE(s23_mcu_portB_r, s23_mcu_portB_w ) |
| 3099 | AM_RANGE(H8_PORT_B, H8_PORT_B) AM_READWRITE(s23_mcu_pb_r, s23_mcu_pb_w ) |
| 3088 | 3100 | AM_RANGE(H8_SERIAL_1, H8_SERIAL_1) AM_READWRITE(s23_mcu_rtc_r, s23_mcu_settings_w ) |
| 3089 | 3101 | AM_RANGE(H8_ADC_0_H, H8_ADC_0_L) AM_NOP |
| 3090 | 3102 | AM_RANGE(H8_ADC_1_H, H8_ADC_1_L) AM_NOP |
| r19730 | r19731 | |
| 3219 | 3231 | m_jvssense = 1; |
| 3220 | 3232 | m_main_irqcause = 0; |
| 3221 | 3233 | m_ctl_vbl_active = false; |
| 3222 | | m_s23_lastpB = 0x50; |
| 3234 | m_s23_lastpb = 0x50; |
| 3223 | 3235 | m_s23_setstate = 0; |
| 3224 | 3236 | m_s23_setnum = 0; |
| 3225 | 3237 | memset(m_s23_settings, 0, sizeof(m_s23_settings)); |