trunk/src/mame/drivers/hng64.c
| r244822 | r244823 | |
| 224 | 224 | |
| 225 | 225 | Games that use the LVS-DG2 cart: Fatal Fury: Wild Ambition, Buriki One, SS 64 II |
| 226 | 226 | |
| 227 | | Other games not dumped yet : Samurai Spirits 64 / Samurai Shodown 64 |
| 228 | | Samurai Spirits II: Asura Zanmaden / Samurai Shodown: Warrior's Rage |
| 229 | | Off Beat Racer / Xtreme Rally |
| 230 | | Beast Busters: Second Nightmare |
| 231 | | Garou Densetsu 64: Wild Ambition (=Fatal Fury Wild Ambition)* |
| 232 | | Round Trip RV (=Road's Edge)* |
| 227 | There might be Rev.A boards for Buriki and Round Trip, we have Rev. B |
| 233 | 228 | |
| 234 | | * Different regions might use the same roms, not known yet |
| 235 | | |
| 236 | | There might be Rev.A boards for Buriki and Round Trip |
| 237 | | |
| 238 | 229 | pr = program |
| 239 | 230 | sc = scroll characters? |
| 240 | 231 | sd = sound |
| r244822 | r244823 | |
| 444 | 435 | or Fatal Fury for example). |
| 445 | 436 | */ |
| 446 | 437 | |
| 447 | | #define DUMP_SOUNDPRG 0 |
| 448 | 438 | |
| 449 | | #define MASTER_CLOCK 50000000 |
| 439 | |
| 450 | 440 | #include "emu.h" |
| 451 | 441 | #include "cpu/z80/z80.h" |
| 452 | | #include "cpu/nec/nec.h" |
| 453 | 442 | #include "cpu/mips/mips3.h" |
| 454 | 443 | #include "machine/nvram.h" |
| 455 | 444 | #include "includes/hng64.h" |
| 456 | 445 | |
| 457 | 446 | /* TODO: NOT measured! */ |
| 458 | | #define PIXEL_CLOCK ((MASTER_CLOCK*2)/4) // x 2 is due of the interlaced screen ... |
| 447 | #define PIXEL_CLOCK ((HNG64_MASTER_CLOCK*2)/4) // x 2 is due of the interlaced screen ... |
| 459 | 448 | |
| 460 | 449 | #define HTOTAL (0x200+0x100) |
| 461 | 450 | #define HBEND (0) |
| r244822 | r244823 | |
| 866 | 855 | // return ++m_unk_vreg_toggle; |
| 867 | 856 | } |
| 868 | 857 | |
| 869 | | /***** I don't think there is a soundram2, having it NOT hooked up causes xrally to copy the sound program to the expected location, see memory map note *****/ |
| 870 | 858 | |
| 871 | | WRITE32_MEMBER(hng64_state::hng64_soundram2_w) |
| 872 | | { |
| 873 | | // xrally uploads the sound program here, and 00 in the usual hng64_soundram_w straight after it?? |
| 874 | | logerror("hng64_soundram2_w %08x: %08x %08x\n", offset, data, mem_mask); |
| 875 | 859 | |
| 876 | | UINT32 mem_mask32 = mem_mask; |
| 877 | | UINT32 data32 = data; |
| 878 | | |
| 879 | | /* swap data around.. keep the v55 happy */ |
| 880 | | data = data32 >> 16; |
| 881 | | data = FLIPENDIAN_INT16(data); |
| 882 | | mem_mask = mem_mask32 >> 16; |
| 883 | | mem_mask = FLIPENDIAN_INT16(mem_mask); |
| 884 | | COMBINE_DATA(&m_soundram2[offset * 2 + 0]); |
| 885 | | |
| 886 | | data = data32 & 0xffff; |
| 887 | | data = FLIPENDIAN_INT16(data); |
| 888 | | mem_mask = mem_mask32 & 0xffff; |
| 889 | | mem_mask = FLIPENDIAN_INT16(mem_mask); |
| 890 | | COMBINE_DATA(&m_soundram2[offset * 2 + 1]); |
| 891 | | |
| 892 | | if (DUMP_SOUNDPRG) |
| 893 | | { |
| 894 | | if (offset==0x7ffff) |
| 895 | | { |
| 896 | | logerror("dumping sound program in m_soundram2\n"); |
| 897 | | FILE *fp; |
| 898 | | char filename[256]; |
| 899 | | sprintf(filename,"soundram2_%s", space.machine().system().name); |
| 900 | | fp=fopen(filename, "w+b"); |
| 901 | | if (fp) |
| 902 | | { |
| 903 | | fwrite((UINT8*)m_soundram2, 0x80000*4, 1, fp); |
| 904 | | fclose(fp); |
| 905 | | } |
| 906 | | } |
| 907 | | } |
| 908 | | } |
| 909 | | |
| 910 | | READ32_MEMBER(hng64_state::hng64_soundram2_r) |
| 911 | | { |
| 912 | | UINT16 datalo = m_soundram2[offset * 2 + 0]; |
| 913 | | UINT16 datahi = m_soundram2[offset * 2 + 1]; |
| 914 | | |
| 915 | | return FLIPENDIAN_INT16(datahi) | (FLIPENDIAN_INT16(datalo) << 16); |
| 916 | | } |
| 917 | | |
| 918 | 860 | /************************************************************************************************************/ |
| 919 | 861 | |
| 920 | | WRITE32_MEMBER(hng64_state::hng64_soundram_w) |
| 921 | | { |
| 922 | | //logerror("hng64_soundram_w %08x: %08x %08x\n", offset, data, mem_mask); |
| 923 | | |
| 924 | | UINT32 mem_mask32 = mem_mask; |
| 925 | | UINT32 data32 = data; |
| 926 | | |
| 927 | | /* swap data around.. keep the v55 happy */ |
| 928 | | data = data32 >> 16; |
| 929 | | data = FLIPENDIAN_INT16(data); |
| 930 | | mem_mask = mem_mask32 >> 16; |
| 931 | | mem_mask = FLIPENDIAN_INT16(mem_mask); |
| 932 | | COMBINE_DATA(&m_soundram[offset * 2 + 0]); |
| 933 | | |
| 934 | | data = data32 & 0xffff; |
| 935 | | data = FLIPENDIAN_INT16(data); |
| 936 | | mem_mask = mem_mask32 & 0xffff; |
| 937 | | mem_mask = FLIPENDIAN_INT16(mem_mask); |
| 938 | | COMBINE_DATA(&m_soundram[offset * 2 + 1]); |
| 939 | | |
| 940 | | if (DUMP_SOUNDPRG) |
| 941 | | { |
| 942 | | if (offset==0x7ffff) |
| 943 | | { |
| 944 | | logerror("dumping sound program in m_soundram\n"); |
| 945 | | FILE *fp; |
| 946 | | char filename[256]; |
| 947 | | sprintf(filename,"soundram_%s", space.machine().system().name); |
| 948 | | fp=fopen(filename, "w+b"); |
| 949 | | if (fp) |
| 950 | | { |
| 951 | | fwrite((UINT8*)m_soundram, 0x80000*4, 1, fp); |
| 952 | | fclose(fp); |
| 953 | | } |
| 954 | | } |
| 955 | | } |
| 956 | | } |
| 957 | | |
| 958 | | |
| 959 | | READ32_MEMBER(hng64_state::hng64_soundram_r) |
| 960 | | { |
| 961 | | UINT16 datalo = m_soundram[offset * 2 + 0]; |
| 962 | | UINT16 datahi = m_soundram[offset * 2 + 1]; |
| 963 | | |
| 964 | | return FLIPENDIAN_INT16(datahi) | (FLIPENDIAN_INT16(datalo) << 16); |
| 965 | | } |
| 966 | | |
| 967 | | WRITE32_MEMBER( hng64_state::hng64_soundcpu_enable_w ) |
| 968 | | { |
| 969 | | if (mem_mask&0xffff0000) |
| 970 | | { |
| 971 | | int cmd = data >> 16; |
| 972 | | // I guess it's only one of the bits, the commands are inverse of each other |
| 973 | | if (cmd==0x55AA) |
| 974 | | { |
| 975 | | printf("soundcpu ON\n"); |
| 976 | | m_audiocpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); |
| 977 | | m_audiocpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); |
| 978 | | } |
| 979 | | else if (cmd==0xAA55) |
| 980 | | { |
| 981 | | printf("soundcpu OFF\n"); |
| 982 | | m_audiocpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); |
| 983 | | m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); |
| 984 | | } |
| 985 | | else |
| 986 | | { |
| 987 | | printf("unknown hng64_soundcpu_enable_w cmd %04x\n", cmd); |
| 988 | | } |
| 989 | | } |
| 990 | | |
| 991 | | if (mem_mask&0x0000ffff) |
| 992 | | { |
| 993 | | printf("unknown hng64_soundcpu_enable_w %08x %08x\n", data, mem_mask); |
| 994 | | } |
| 995 | | } |
| 996 | | |
| 997 | 862 | /* The following is guesswork, needs confirmation with a test on the real board. */ |
| 998 | 863 | WRITE32_MEMBER(hng64_state::hng64_sprite_clear_even_w) |
| 999 | 864 | { |
| r244822 | r244823 | |
| 1060 | 925 | static ADDRESS_MAP_START( hng_map, AS_PROGRAM, 32, hng64_state ) |
| 1061 | 926 | |
| 1062 | 927 | AM_RANGE(0x00000000, 0x00ffffff) AM_RAM AM_SHARE("mainram") |
| 1063 | | AM_RANGE(0x04000000, 0x05ffffff) AM_WRITENOP AM_ROM AM_REGION("user3", 0) AM_SHARE("cart") |
| 928 | AM_RANGE(0x04000000, 0x05ffffff) AM_WRITENOP AM_ROM AM_REGION("gameprg", 0) AM_SHARE("cart") |
| 1064 | 929 | |
| 1065 | 930 | // Ports |
| 1066 | 931 | AM_RANGE(0x1f700000, 0x1f702fff) AM_READWRITE(hng64_sysregs_r, hng64_sysregs_w) AM_SHARE("sysregs") |
| r244822 | r244823 | |
| 1094 | 959 | AM_RANGE(0x30200000, 0x3025ffff) AM_READWRITE(hng64_3d_2_r, hng64_3d_2_w) AM_SHARE("3d_2") // 3D Display Buffer B |
| 1095 | 960 | |
| 1096 | 961 | // Sound |
| 1097 | | // AM_RANGE(0x60000000, 0x601fffff) AM_READWRITE(hng64_soundram2_r, hng64_soundram2_w) // if this area acts as RAM then xrally will copy the sound program here and blank out the usual area below. None of the other games test this as sound ram (usually just write to the first byte) -- maybe it's actually unmapped? |
| 1098 | | AM_RANGE(0x60200000, 0x603fffff) AM_READWRITE(hng64_soundram_r, hng64_soundram_w) // uploads the v53 sound program here, elsewhere on ss64-2 |
| 962 | AM_RANGE(0x60000000, 0x601fffff) AM_READWRITE(hng64_soundram2_r, hng64_soundram2_w) // actually seems unmapped, see note in audio/hng64.c |
| 963 | AM_RANGE(0x60200000, 0x603fffff) AM_READWRITE(hng64_soundram_r, hng64_soundram_w) // program + data for V53A gets uploaded here |
| 1099 | 964 | |
| 1100 | 965 | // These are sound ports of some sort |
| 1101 | 966 | // AM_RANGE(0x68000000, 0x68000003) AM_WRITENOP // ?? |
| r244822 | r244823 | |
| 1115 | 980 | /* a0000000-a3ffffff */ |
| 1116 | 981 | ADDRESS_MAP_END |
| 1117 | 982 | |
| 1118 | | /* |
| 1119 | | 0x6010: tests RAM at [3]8000 |
| 1120 | 983 | |
| 1121 | | */ |
| 1122 | | |
| 1123 | | UINT8 hng64_state::read_comm_data(UINT32 offset) |
| 1124 | | { |
| 1125 | | if((offset & 0x10000) == 0) |
| 1126 | | return m_comm_rom[offset & 0xffff]; |
| 1127 | | |
| 1128 | | if(offset & 0x10000) |
| 1129 | | return m_comm_ram[(offset & 0xffff)]; |
| 1130 | | |
| 1131 | | printf("%08x\n",offset); |
| 1132 | | return 0xff; |
| 1133 | | } |
| 1134 | | |
| 1135 | | void hng64_state::write_comm_data(UINT32 offset,UINT8 data) |
| 1136 | | { |
| 1137 | | if((offset & 0x10000) == 0) |
| 1138 | | { |
| 1139 | | //m_comm_rom[offset]; |
| 1140 | | return; |
| 1141 | | } |
| 1142 | | if(offset & 0x10000) |
| 1143 | | { |
| 1144 | | m_comm_ram[offset & 0xffff] = data; |
| 1145 | | return; |
| 1146 | | } |
| 1147 | | |
| 1148 | | |
| 1149 | | printf("%08x %02x\n",offset,data); |
| 1150 | | |
| 1151 | | } |
| 1152 | | |
| 1153 | | READ8_MEMBER(hng64_state::hng64_comm_space_r) |
| 1154 | | { |
| 1155 | | if((offset & 0xfc00) == 0) // B0 is fixed at 0-0x3ff |
| 1156 | | return m_comm_rom[offset]; |
| 1157 | | |
| 1158 | | for(int i=0;i<5;i++) |
| 1159 | | { |
| 1160 | | if(offset >= m_mmub[i] && offset <= m_mmub[i+1]-1) |
| 1161 | | return read_comm_data(m_mmua[i]|offset); |
| 1162 | | } |
| 1163 | | |
| 1164 | | return 0xff; |
| 1165 | | } |
| 1166 | | |
| 1167 | | WRITE8_MEMBER(hng64_state::hng64_comm_space_w) |
| 1168 | | { |
| 1169 | | if((offset & 0xfc00) == 0) // B0 is fixed at 0-0x3ff |
| 1170 | | return;// m_comm_rom[offset]; |
| 1171 | | |
| 1172 | | for(int i=0;i<5;i++) |
| 1173 | | { |
| 1174 | | if(offset >= m_mmub[i] && offset <= m_mmub[i+1]-1) |
| 1175 | | { |
| 1176 | | write_comm_data(m_mmua[i]|offset,data); |
| 1177 | | return; |
| 1178 | | } |
| 1179 | | } |
| 1180 | | } |
| 1181 | | |
| 1182 | | READ8_MEMBER(hng64_state::hng64_comm_mmu_r) |
| 1183 | | { |
| 1184 | | return m_mmu_regs[offset]; |
| 1185 | | } |
| 1186 | | |
| 1187 | | #define MMUA (m_mmu_regs[(offset&~1)+0]>>6)|(m_mmu_regs[(offset&~1)+1]<<2) |
| 1188 | | #define MMUB (m_mmu_regs[(offset&~1)+0]&0x3f) |
| 1189 | | |
| 1190 | | WRITE8_MEMBER(hng64_state::hng64_comm_mmu_w) |
| 1191 | | { |
| 1192 | | m_mmu_regs[offset] = data; |
| 1193 | | |
| 1194 | | /* cheap: avoid to overwrite read only params*/ |
| 1195 | | if((offset & 6) == 6) |
| 1196 | | { |
| 1197 | | m_mmu_regs[6] = m_mmu_regs[6] & 0x3f; |
| 1198 | | m_mmu_regs[7] = 0xf0; |
| 1199 | | |
| 1200 | | } |
| 1201 | | |
| 1202 | | { |
| 1203 | | m_mmua[offset/2+1] = (m_mmu_regs[(offset&~1)+0]>>6)|(m_mmu_regs[(offset&~1)+1]<<2); |
| 1204 | | m_mmua[offset/2+1]*= 0x400; |
| 1205 | | m_mmub[offset/2+1] = (m_mmu_regs[(offset&~1)+0]&0x3f); |
| 1206 | | m_mmub[offset/2+1]++; |
| 1207 | | m_mmub[offset/2+1]*= 0x400; |
| 1208 | | //printf("%d A %08x B %04x\n",offset/2,m_mmua[offset/2],m_mmub[offset/2]); |
| 1209 | | //printf("A %04x B %02x\n",MMUA,MMUB); |
| 1210 | | } |
| 1211 | | } |
| 1212 | | |
| 1213 | | static ADDRESS_MAP_START( hng_comm_map, AS_PROGRAM, 8, hng64_state ) |
| 1214 | | AM_RANGE(0x0000,0xffff) AM_READWRITE(hng64_comm_space_r, hng64_comm_space_w ) |
| 1215 | | ADDRESS_MAP_END |
| 1216 | | |
| 1217 | | static ADDRESS_MAP_START( hng_comm_io_map, AS_IO, 8, hng64_state ) |
| 1218 | | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 1219 | | /* Reserved for the KL5C80 internal hardware */ |
| 1220 | | AM_RANGE(0x00, 0x07) AM_READWRITE(hng64_comm_mmu_r,hng64_comm_mmu_w ) |
| 1221 | | // AM_RANGE(0x08,0x1f) AM_NOP /* Reserved */ |
| 1222 | | // AM_RANGE(0x20,0x25) AM_READWRITE /* Timer/Counter B */ /* hng64 writes here */ |
| 1223 | | // AM_RANGE(0x27,0x27) AM_NOP /* Reserved */ |
| 1224 | | // AM_RANGE(0x28,0x2b) AM_READWRITE /* Timer/Counter A */ /* hng64 writes here */ |
| 1225 | | // AM_RANGE(0x2c,0x2f) AM_READWRITE /* Parallel port A */ |
| 1226 | | // AM_RANGE(0x30,0x33) AM_READWRITE /* Parallel port B */ |
| 1227 | | // AM_RANGE(0x34,0x37) AM_READWRITE /* Interrupt controller */ /* hng64 writes here */ |
| 1228 | | // AM_RANGE(0x38,0x39) AM_READWRITE /* Serial port */ /* hng64 writes here */ |
| 1229 | | // AM_RANGE(0x3a,0x3b) AM_READWRITE /* System control register */ /* hng64 writes here */ |
| 1230 | | // AM_RANGE(0x3c,0x3f) AM_NOP /* Reserved */ |
| 1231 | | |
| 1232 | | /* General IO */ |
| 1233 | | AM_RANGE(0x50,0x57) AM_READWRITE(hng64_com_share_r, hng64_com_share_w) |
| 1234 | | // AM_RANGE(0x72,0x72) AM_WRITE /* dunno yet */ |
| 1235 | | ADDRESS_MAP_END |
| 1236 | | |
| 1237 | | |
| 1238 | | static ADDRESS_MAP_START( hng_sound_map, AS_PROGRAM, 16, hng64_state ) |
| 1239 | | AM_RANGE(0x00000, 0x0ffff) AM_RAMBANK("bank2") |
| 1240 | | AM_RANGE(0x10000, 0x1ffff) AM_RAM // tmp, roadedge |
| 1241 | | AM_RANGE(0xf0000, 0xfffff) AM_RAMBANK("bank1") |
| 1242 | | ADDRESS_MAP_END |
| 1243 | | |
| 1244 | | static ADDRESS_MAP_START( hng_sound_io, AS_IO, 16, hng64_state ) |
| 1245 | | AM_RANGE(0xc002, 0xc003) AM_NOP // buriki one fills the log, wants 0xffff |
| 1246 | | ADDRESS_MAP_END |
| 1247 | | |
| 1248 | 984 | static INPUT_PORTS_START( hng64 ) |
| 1249 | 985 | PORT_START("VBLANK") |
| 1250 | 986 | PORT_BIT( 0xffffffff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_VBLANK("screen") |
| r244822 | r244823 | |
| 1637 | 1373 | hng64_reorder(memregion("scrtile")->base(), memregion("scrtile")->bytes()); |
| 1638 | 1374 | } |
| 1639 | 1375 | |
| 1640 | | #define HACK_REGION |
| 1641 | | #ifdef HACK_REGION |
| 1642 | | void hng64_state::hng64_patch_bios_region(int region) |
| 1643 | | { |
| 1644 | | UINT8 *rom = memregion("user1")->base(); |
| 1645 | 1376 | |
| 1646 | | if ((rom[0x4000]==0xff) && (rom[0x4001] == 0xff)) |
| 1647 | | { |
| 1648 | | // both? |
| 1649 | | rom[0x4002] = region; |
| 1650 | | rom[0x4003] = region; |
| 1651 | | |
| 1652 | | } |
| 1653 | | } |
| 1654 | | #endif |
| 1655 | | |
| 1656 | 1377 | DRIVER_INIT_MEMBER(hng64_state,hng64) |
| 1657 | 1378 | { |
| 1658 | | // region hacking, english error messages are more useful to us, but no english bios is dumped... |
| 1659 | | #ifdef HACK_REGION |
| 1660 | | // versions according to fatal fury test mode |
| 1661 | | // hng64_patch_bios_region( 0); // 'Others Ver' (invalid?) |
| 1662 | | hng64_patch_bios_region( 1); // Japan |
| 1663 | | // hng64_patch_bios_region( 2); // USA |
| 1664 | | // hng64_patch_bios_region( 3); // Korea |
| 1665 | | // hng64_patch_bios_region( 4); // 'Others' |
| 1666 | | #endif |
| 1667 | | |
| 1668 | 1379 | /* 1 meg of virtual address space for the com cpu */ |
| 1669 | 1380 | m_com_virtual_mem = auto_alloc_array(machine(), UINT8, 0x100000); |
| 1670 | 1381 | m_com_op_base = auto_alloc_array(machine(), UINT8, 0x10000); |
| r244822 | r244823 | |
| 1798 | 1509 | |
| 1799 | 1510 | void hng64_state::machine_reset() |
| 1800 | 1511 | { |
| 1801 | | /* Sound CPU */ |
| 1802 | | UINT8 *RAM = (UINT8*)m_soundram; |
| 1803 | | membank("bank1")->set_base(&RAM[0x1f0000]); // allows us to boot |
| 1804 | | membank("bank2")->set_base(&RAM[0x1f0000]); // seems to be the right default for most games (initial area jumps to a DI here) |
| 1805 | | m_audiocpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); |
| 1806 | | m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); |
| 1807 | | |
| 1808 | | // m_comm->set_input_line(INPUT_LINE_RESET, PULSE_LINE); // reset the CPU and let 'er rip |
| 1809 | | // m_comm->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); // hold on there pardner... |
| 1810 | | |
| 1811 | 1512 | // "Display List" init - ugly |
| 1812 | 1513 | // m_activeBuffer = 0; |
| 1813 | 1514 | |
| r244822 | r244823 | |
| 1815 | 1516 | m_mcu_fake_time = 0; |
| 1816 | 1517 | m_mcu_en = 0; |
| 1817 | 1518 | |
| 1818 | | m_mmub[0] = 0; |
| 1819 | | m_mmub[5] = 0; // rolls back to 0xffff |
| 1519 | reset_net(); |
| 1520 | reset_sound(); |
| 1820 | 1521 | } |
| 1821 | 1522 | |
| 1523 | MACHINE_CONFIG_EXTERN(hng64_audio); |
| 1524 | MACHINE_CONFIG_EXTERN(hng64_network); |
| 1822 | 1525 | |
| 1823 | | static MACHINE_CONFIG_START( hng64, hng64_state ) |
| 1824 | | |
| 1526 | static MACHINE_CONFIG_START(hng64, hng64_state) |
| 1825 | 1527 | /* basic machine hardware */ |
| 1826 | | MCFG_CPU_ADD("maincpu", VR4300BE, MASTER_CLOCK) // actually R4300 |
| 1528 | MCFG_CPU_ADD("maincpu", VR4300BE, HNG64_MASTER_CLOCK) // actually R4300 |
| 1827 | 1529 | MCFG_MIPS3_ICACHE_SIZE(16384) |
| 1828 | 1530 | MCFG_MIPS3_DCACHE_SIZE(16384) |
| 1829 | 1531 | MCFG_CPU_PROGRAM_MAP(hng_map) |
| 1830 | 1532 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", hng64_state, hng64_irq, "screen", 0, 1) |
| 1831 | 1533 | |
| 1832 | | MCFG_CPU_ADD("audiocpu", V33, 8000000) // v53, 16? mhz! |
| 1833 | | MCFG_CPU_PROGRAM_MAP(hng_sound_map) |
| 1834 | | MCFG_CPU_IO_MAP(hng_sound_io) |
| 1835 | 1534 | |
| 1836 | | MCFG_CPU_ADD("comm", Z80,MASTER_CLOCK/4) /* KL5C80A12CFP - binary compatible with Z80. */ |
| 1837 | | MCFG_CPU_PROGRAM_MAP(hng_comm_map) |
| 1838 | | MCFG_CPU_IO_MAP(hng_comm_io_map) |
| 1839 | 1535 | |
| 1536 | |
| 1840 | 1537 | MCFG_NVRAM_ADD_0FILL("nvram") |
| 1841 | 1538 | |
| 1842 | 1539 | MCFG_DEVICE_ADD("rtc", MSM6242, XTAL_32_768kHz) |
| r244822 | r244823 | |
| 1849 | 1546 | MCFG_SCREEN_VBLANK_DRIVER(hng64_state, screen_eof_hng64) |
| 1850 | 1547 | |
| 1851 | 1548 | MCFG_PALETTE_ADD("palette", 0x1000) |
| 1549 | |
| 1550 | MCFG_FRAGMENT_ADD( hng64_audio ) |
| 1551 | MCFG_FRAGMENT_ADD( hng64_network ) |
| 1552 | |
| 1852 | 1553 | MACHINE_CONFIG_END |
| 1853 | 1554 | |
| 1555 | #define ROM_LOAD_HNG64_BIOS(bios,name,offset,length,hash) \ |
| 1556 | ROMX_LOAD(name, offset, length, hash, ROM_BIOS(bios+1)) /* Note '+1' */ |
| 1854 | 1557 | |
| 1558 | // all BIOS roms are said to be from 'fighting' type PCB, it is unknown if the actual MIPS BIOS differs on the others, or only the MCU internal ROM |
| 1559 | #define HNG64_BIOS \ |
| 1560 | ROM_REGION32_BE( 0x0100000, "user1", 0 ) /* 512k for R4300 BIOS code */ \ |
| 1561 | ROM_SYSTEM_BIOS( 0, "japan", "Japan" ) \ |
| 1562 | ROM_LOAD_HNG64_BIOS( 0, "brom1.bin", 0x00000, 0x080000, CRC(a30dd3de) SHA1(3e2fd0a56214e6f5dcb93687e409af13d065ea30) ) \ |
| 1563 | ROM_SYSTEM_BIOS( 1, "us", "USA" ) \ |
| 1564 | ROM_LOAD_HNG64_BIOS( 1, "bios_us.bin", 0x00000, 0x080000, CRC(ab5948d6) SHA1(f8b940c1ae5ce2d3b2cd0c9bfaf6e5b063cec06e) ) \ |
| 1565 | ROM_SYSTEM_BIOS( 2, "export", "Export" ) \ |
| 1566 | ROM_LOAD_HNG64_BIOS( 2, "bios_export.bin", 0x00000, 0x080000, CRC(bbf07ec6) SHA1(5656aa077f6a6d43953f15b5123eea102a9d5313) ) \ |
| 1567 | ROM_SYSTEM_BIOS( 3, "korea", "Korea" ) \ |
| 1568 | ROM_LOAD_HNG64_BIOS( 3, "bios_korea.bin", 0x00000, 0x080000, CRC(ac953e2e) SHA1(f502188ef252b7c9d04934c4b525730a116de48b) ) \ |
| 1569 | ROM_REGION( 0x0100000, "user2", 0 ) /* KL5C80 BIOS */ \ |
| 1570 | ROM_LOAD ( "from1.bin", 0x000000, 0x080000, CRC(6b933005) SHA1(e992747f46c48b66e5509fe0adf19c91250b00c7) ) \ |
| 1571 | ROM_REGION( 0x0100000, "fpga", 0 ) /* FPGA data */ \ |
| 1572 | ROM_LOAD ( "rom1.bin", 0x000000, 0x01ff32, CRC(4a6832dc) SHA1(ae504f7733c2f40450157cd1d3b85bc83fac8569) ) \ |
| 1573 | |
| 1574 | |
| 1855 | 1575 | ROM_START( hng64 ) |
| 1856 | 1576 | /* BIOS */ |
| 1857 | | ROM_REGION32_BE( 0x0100000, "user1", 0 ) /* 512k for R4300 BIOS code */ |
| 1858 | | ROM_LOAD ( "brom1.bin", 0x000000, 0x080000, CRC(a30dd3de) SHA1(3e2fd0a56214e6f5dcb93687e409af13d065ea30) ) |
| 1859 | | ROM_REGION( 0x0100000, "user2", 0 ) /* KL5C80 BIOS and unknown ROM */ |
| 1860 | | ROM_LOAD ( "from1.bin", 0x000000, 0x080000, CRC(6b933005) SHA1(e992747f46c48b66e5509fe0adf19c91250b00c7) ) |
| 1861 | | ROM_LOAD ( "rom1.bin", 0x080000, 0x01ff32, CRC(4a6832dc) SHA1(ae504f7733c2f40450157cd1d3b85bc83fac8569) ) |
| 1577 | HNG64_BIOS |
| 1862 | 1578 | |
| 1863 | 1579 | /* To placate MAME */ |
| 1864 | | ROM_REGION32_LE( 0x2000000, "user3", ROMREGION_ERASEFF ) |
| 1580 | ROM_REGION32_LE( 0x2000000, "gameprg", ROMREGION_ERASEFF ) |
| 1865 | 1581 | ROM_REGION( 0x4000, "scrtile", ROMREGION_ERASEFF ) |
| 1866 | 1582 | ROM_REGION( 0x4000, "sprtile", ROMREGION_ERASEFF ) |
| 1867 | 1583 | ROM_REGION( 0x1000000, "textures", ROMREGION_ERASEFF ) |
| r244822 | r244823 | |
| 1871 | 1587 | |
| 1872 | 1588 | |
| 1873 | 1589 | ROM_START( roadedge ) |
| 1874 | | /* BIOS */ |
| 1875 | | ROM_REGION32_BE( 0x0100000, "user1", 0 ) /* 512k for R4300 BIOS code */ |
| 1876 | | ROM_LOAD ( "brom1.bin", 0x000000, 0x080000, CRC(a30dd3de) SHA1(3e2fd0a56214e6f5dcb93687e409af13d065ea30) ) |
| 1877 | | ROM_REGION( 0x0100000, "user2", 0 ) /* KL5C80 BIOS and unknown ROM */ |
| 1878 | | ROM_LOAD ( "from1.bin", 0x000000, 0x080000, CRC(6b933005) SHA1(e992747f46c48b66e5509fe0adf19c91250b00c7) ) |
| 1879 | | ROM_LOAD ( "rom1.bin", 0x080000, 0x01ff32, CRC(4a6832dc) SHA1(ae504f7733c2f40450157cd1d3b85bc83fac8569) ) |
| 1880 | | /* END BIOS */ |
| 1590 | HNG64_BIOS |
| 1881 | 1591 | |
| 1882 | | ROM_REGION32_LE( 0x2000000, "user3", 0 ) |
| 1592 | ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) |
| 1883 | 1593 | ROM_LOAD32_WORD( "001pr01b.81", 0x0000000, 0x400000, CRC(effbac30) SHA1(c1bddf3e511a8950f65ac7e452f81dbc4b7fd977) ) |
| 1884 | 1594 | ROM_LOAD32_WORD( "001pr02b.82", 0x0000002, 0x400000, CRC(b9aa4ad3) SHA1(9ab3c896dbdc45560b7127486e2db6ca3b15a057) ) |
| 1885 | 1595 | |
| r244822 | r244823 | |
| 1930 | 1640 | |
| 1931 | 1641 | |
| 1932 | 1642 | ROM_START( sams64 ) |
| 1933 | | /* BIOS */ |
| 1934 | | ROM_REGION32_BE( 0x0100000, "user1", 0 ) /* 512k for R4300 BIOS code */ |
| 1935 | | ROM_LOAD ( "brom1.bin", 0x000000, 0x080000, CRC(a30dd3de) SHA1(3e2fd0a56214e6f5dcb93687e409af13d065ea30) ) |
| 1936 | | ROM_REGION( 0x0100000, "user2", 0 ) /* KL5C80 BIOS and unknown ROM */ |
| 1937 | | ROM_LOAD ( "from1.bin", 0x000000, 0x080000, CRC(6b933005) SHA1(e992747f46c48b66e5509fe0adf19c91250b00c7) ) |
| 1938 | | ROM_LOAD ( "rom1.bin", 0x080000, 0x01ff32, CRC(4a6832dc) SHA1(ae504f7733c2f40450157cd1d3b85bc83fac8569) ) |
| 1939 | | /* END BIOS */ |
| 1643 | HNG64_BIOS |
| 1940 | 1644 | |
| 1941 | | ROM_REGION32_LE( 0x2000000, "user3", 0 ) |
| 1645 | ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) |
| 1942 | 1646 | ROM_LOAD32_WORD( "002-pro1a.81", 0x0000000, 0x400000, CRC(e5b907c5) SHA1(83637ffaa9031d41a5bed3397a519d1dfa8052cb) ) |
| 1943 | 1647 | ROM_LOAD32_WORD( "002-pro2a.82", 0x0000002, 0x400000, CRC(803ed2eb) SHA1(666db47886a316e68b911311e5db3bc0f5b8a34d) ) |
| 1944 | 1648 | ROM_LOAD32_WORD( "002-pro3a.83", 0x0800000, 0x400000, CRC(582156a7) SHA1(a7bbbd472a53072cbfaed5d41d4265123c9e3f3d) ) |
| r244822 | r244823 | |
| 1991 | 1695 | |
| 1992 | 1696 | |
| 1993 | 1697 | ROM_START( xrally ) |
| 1994 | | /* BIOS */ |
| 1995 | | ROM_REGION32_BE( 0x0100000, "user1", 0 ) /* 512k for R4300 BIOS code */ |
| 1996 | | ROM_LOAD ( "brom1.bin", 0x000000, 0x080000, CRC(a30dd3de) SHA1(3e2fd0a56214e6f5dcb93687e409af13d065ea30) ) |
| 1997 | | ROM_REGION( 0x0100000, "user2", 0 ) /* KL5C80 BIOS and unknown ROM */ |
| 1998 | | ROM_LOAD ( "from1.bin", 0x000000, 0x080000, CRC(6b933005) SHA1(e992747f46c48b66e5509fe0adf19c91250b00c7) ) |
| 1999 | | ROM_LOAD ( "rom1.bin", 0x080000, 0x01ff32, CRC(4a6832dc) SHA1(ae504f7733c2f40450157cd1d3b85bc83fac8569) ) |
| 2000 | | /* END BIOS */ |
| 1698 | HNG64_BIOS |
| 2001 | 1699 | |
| 2002 | | ROM_REGION32_LE( 0x2000000, "user3", 0 ) |
| 1700 | ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) |
| 2003 | 1701 | ROM_LOAD32_WORD( "003-pr01a.81", 0x0000000, 0x400000, CRC(4e160388) SHA1(08fba66d0f0dab47f7db5bc7d411f4fc0e8219c8) ) |
| 2004 | 1702 | ROM_LOAD32_WORD( "003-pr02a.82", 0x0000002, 0x400000, CRC(c4dd4f18) SHA1(4db0e6d5cabd9e4f82d5905556174b9eff8ad4d9) ) |
| 2005 | 1703 | |
| r244822 | r244823 | |
| 2039 | 1737 | |
| 2040 | 1738 | |
| 2041 | 1739 | ROM_START( bbust2 ) |
| 2042 | | /* BIOS */ |
| 2043 | | ROM_REGION32_BE( 0x0100000, "user1", 0 ) /* 512k for R4300 BIOS code */ |
| 2044 | | ROM_LOAD ( "brom1.bin", 0x000000, 0x080000, CRC(a30dd3de) SHA1(3e2fd0a56214e6f5dcb93687e409af13d065ea30) ) |
| 2045 | | ROM_REGION( 0x0100000, "user2", 0 ) /* KL5C80 BIOS and unknown ROM */ |
| 2046 | | ROM_LOAD ( "from1.bin", 0x000000, 0x080000, CRC(6b933005) SHA1(e992747f46c48b66e5509fe0adf19c91250b00c7) ) |
| 2047 | | ROM_LOAD ( "rom1.bin", 0x080000, 0x01ff32, CRC(4a6832dc) SHA1(ae504f7733c2f40450157cd1d3b85bc83fac8569) ) |
| 2048 | | /* END BIOS */ |
| 1740 | HNG64_BIOS |
| 2049 | 1741 | |
| 2050 | | ROM_REGION32_LE( 0x2000000, "user3", 0 ) |
| 1742 | ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) |
| 2051 | 1743 | ROM_LOAD32_WORD( "004-pr01a.81", 0x0000000, 0x400000, CRC(7b836ece) SHA1(7a4a08251f1dd66c368ac203f5a006266e77f73d) ) |
| 2052 | 1744 | ROM_LOAD32_WORD( "004-pr02a.82", 0x0000002, 0x400000, CRC(8c55a988) SHA1(d9a61ac3d8550ce0ee6aab374c9f024912163180) ) |
| 2053 | 1745 | ROM_LOAD32_WORD( "004-pr03a.83", 0x0800000, 0x400000, CRC(f25a82dd) SHA1(74c0a03021ef424e0b9c3c818be297d2967b3012) ) |
| r244822 | r244823 | |
| 2093 | 1785 | |
| 2094 | 1786 | |
| 2095 | 1787 | ROM_START( sams64_2 ) |
| 2096 | | /* BIOS */ |
| 2097 | | ROM_REGION32_BE( 0x0100000, "user1", 0 ) /* 512k for R4300 BIOS code */ |
| 2098 | | ROM_LOAD ( "brom1.bin", 0x000000, 0x080000, CRC(a30dd3de) SHA1(3e2fd0a56214e6f5dcb93687e409af13d065ea30) ) |
| 2099 | | ROM_REGION( 0x0100000, "user2", 0 ) /* KL5C80 BIOS and unknown ROM */ |
| 2100 | | ROM_LOAD ( "from1.bin", 0x000000, 0x080000, CRC(6b933005) SHA1(e992747f46c48b66e5509fe0adf19c91250b00c7) ) |
| 2101 | | ROM_LOAD ( "rom1.bin", 0x080000, 0x01ff32, CRC(4a6832dc) SHA1(ae504f7733c2f40450157cd1d3b85bc83fac8569) ) |
| 2102 | | /* END BIOS */ |
| 1788 | HNG64_BIOS |
| 2103 | 1789 | |
| 2104 | | ROM_REGION32_LE( 0x2000000, "user3", 0 ) |
| 1790 | ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) |
| 2105 | 1791 | ROM_LOAD32_WORD( "005pr01a.81", 0x0000000, 0x400000, CRC(a69d7700) SHA1(a580783a109bc3e24248d70bcd67f62dd7d8a5dd) ) |
| 2106 | 1792 | ROM_LOAD32_WORD( "005pr02a.82", 0x0000002, 0x400000, CRC(38b9e6b3) SHA1(d1dad8247d920cc66854a0096e1c7845842d2e1c) ) |
| 2107 | 1793 | ROM_LOAD32_WORD( "005pr03a.83", 0x0800000, 0x400000, CRC(0bc738a8) SHA1(79893b0e1c4a31e02ab385c4382684245975ae8f) ) |
| r244822 | r244823 | |
| 2171 | 1857 | |
| 2172 | 1858 | |
| 2173 | 1859 | ROM_START( fatfurwa ) |
| 2174 | | /* BIOS */ |
| 2175 | | ROM_REGION32_BE( 0x0100000, "user1", 0 ) /* 512k for R4300 BIOS code */ |
| 2176 | | ROM_LOAD ( "brom1.bin", 0x000000, 0x080000, CRC(a30dd3de) SHA1(3e2fd0a56214e6f5dcb93687e409af13d065ea30) ) |
| 2177 | | ROM_REGION( 0x0100000, "user2", 0 ) /* KL5C80 BIOS and unknown ROM */ |
| 2178 | | ROM_LOAD ( "from1.bin", 0x000000, 0x080000, CRC(6b933005) SHA1(e992747f46c48b66e5509fe0adf19c91250b00c7) ) |
| 2179 | | ROM_LOAD ( "rom1.bin", 0x080000, 0x01ff32, CRC(4a6832dc) SHA1(ae504f7733c2f40450157cd1d3b85bc83fac8569) ) |
| 2180 | | /* END BIOS */ |
| 1860 | HNG64_BIOS |
| 2181 | 1861 | |
| 2182 | | ROM_REGION32_LE( 0x2000000, "user3", 0 ) |
| 1862 | ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) |
| 2183 | 1863 | ROM_LOAD32_WORD( "006pr01a.81", 0x0000000, 0x400000, CRC(3830efa1) SHA1(9d8c941ccb6cbe8d138499cf9d335db4ac7a9ec0) ) |
| 2184 | 1864 | ROM_LOAD32_WORD( "006pr02a.82", 0x0000002, 0x400000, CRC(8d5de84e) SHA1(e3ae014263f370c2836f62ab323f1560cb3a9cf0) ) |
| 2185 | 1865 | ROM_LOAD32_WORD( "006pr03a.83", 0x0800000, 0x400000, CRC(c811b458) SHA1(7d94e0df501fb086b2e5cf08905d7a3adc2c6472) ) |
| r244822 | r244823 | |
| 2242 | 1922 | |
| 2243 | 1923 | |
| 2244 | 1924 | ROM_START( buriki ) |
| 2245 | | /* BIOS */ |
| 2246 | | ROM_REGION32_BE( 0x0100000, "user1", 0 ) /* 512k for R4300 BIOS code */ |
| 2247 | | ROM_LOAD ( "brom1.bin", 0x000000, 0x080000, CRC(a30dd3de) SHA1(3e2fd0a56214e6f5dcb93687e409af13d065ea30) ) |
| 2248 | | ROM_REGION( 0x0100000, "user2", 0 ) /* KL5C80 BIOS and unknown ROM */ |
| 2249 | | ROM_LOAD ( "from1.bin", 0x000000, 0x080000, CRC(6b933005) SHA1(e992747f46c48b66e5509fe0adf19c91250b00c7) ) |
| 2250 | | ROM_LOAD ( "rom1.bin", 0x080000, 0x01ff32, CRC(4a6832dc) SHA1(ae504f7733c2f40450157cd1d3b85bc83fac8569) ) |
| 2251 | | /* END BIOS */ |
| 1925 | HNG64_BIOS |
| 2252 | 1926 | |
| 2253 | | ROM_REGION32_LE( 0x2000000, "user3", 0 ) |
| 1927 | ROM_REGION32_LE( 0x2000000, "gameprg", 0 ) |
| 2254 | 1928 | ROM_LOAD32_WORD( "007pr01b.81", 0x0000000, 0x400000, CRC(a31202f5) SHA1(c657729b292d394ced021a0201a1c5608a7118ba) ) |
| 2255 | 1929 | ROM_LOAD32_WORD( "007pr02b.82", 0x0000002, 0x400000, CRC(a563fed6) SHA1(9af9a021beb814e35df968abe5a99225a124b5eb) ) |
| 2256 | 1930 | ROM_LOAD32_WORD( "007pr03a.83", 0x0800000, 0x400000, CRC(da5f6105) SHA1(5424cf5289cef66e301e968b4394e551918fe99b) ) |