trunk/src/mame/drivers/coolridr.c
| r21258 | r21259 | |
| 248 | 248 | |
| 249 | 249 | /* |
| 250 | 250 | |
| 251 | | some Sprite compression notes from Charles and Andrew |
| 251 | some Sprite compression notes from Charles and Andrew |
| 252 | 252 | |
| 253 | 253 | OK so here's what we know. Andrew and I were playing with the ROMs and |
| 254 | 254 | Guru traced out connections on the board at the time: |
| r21258 | r21259 | |
| 427 | 427 | UINT32 m_blit10; // an address |
| 428 | 428 | |
| 429 | 429 | UINT16 m_tempshape[16*16]; |
| 430 | | |
| 430 | |
| 431 | 431 | required_device<cpu_device> m_maincpu; |
| 432 | 432 | required_device<cpu_device> m_subcpu; |
| 433 | 433 | required_device<cpu_device> m_soundcpu; |
| r21258 | r21259 | |
| 449 | 449 | UINT8 m_vblank; |
| 450 | 450 | int m_scsp_last_line; |
| 451 | 451 | UINT8 an_mux_data; |
| 452 | | UINT8 sound_data; |
| 452 | UINT8 sound_data, sound_fifo_full; |
| 453 | 453 | |
| 454 | 454 | UINT8* m_compressedgfx; |
| 455 | 455 | UINT32 get_20bit_data(UINT32 romoffset, int _20bitwordnum); |
| r21258 | r21259 | |
| 472 | 472 | DECLARE_READ8_MEMBER(analog_mux_r); |
| 473 | 473 | DECLARE_WRITE8_MEMBER(analog_mux_w); |
| 474 | 474 | DECLARE_WRITE8_MEMBER(lamps_w); |
| 475 | | DECLARE_WRITE_LINE_MEMBER(scsp_to_main_irq); |
| 475 | DECLARE_WRITE_LINE_MEMBER(scsp1_to_sh1_irq); |
| 476 | DECLARE_WRITE_LINE_MEMBER(scsp2_to_sh1_irq); |
| 476 | 477 | DECLARE_WRITE8_MEMBER(sound_to_sh1_w); |
| 477 | 478 | DECLARE_DRIVER_INIT(coolridr); |
| 478 | 479 | virtual void machine_start(); |
| r21258 | r21259 | |
| 691 | 692 | m_textBytesToWrite = (data & 0xff000000) >> 24; |
| 692 | 693 | m_textOffset = (data & 0x0000ffff); |
| 693 | 694 | m_blitterSerialCount = 0; |
| 694 | | |
| 695 | |
| 695 | 696 | // this is ONLY used when there is text on the screen |
| 696 | | |
| 697 | |
| 697 | 698 | //printf("set mode %08x\n", data); |
| 698 | 699 | |
| 699 | | |
| 700 | |
| 700 | 701 | } |
| 701 | 702 | else if (m_blitterMode == 0x30 || m_blitterMode == 0x40 || m_blitterMode == 0x50 || m_blitterMode == 0x60 |
| 702 | 703 | || m_blitterMode == 0x90 || m_blitterMode == 0xa0 || m_blitterMode == 0xb0 || m_blitterMode == 0xc0) |
| r21258 | r21259 | |
| 706 | 707 | // The lower word always seems to be 0x0001 and the upper byte always 0xac. |
| 707 | 708 | m_blitterSerialCount = 0; |
| 708 | 709 | |
| 709 | | // form 0xacMM-xxx ac = fixed value for this mode? MM = modes above. -xxx = some kind of offset? but it doesn't increment for each blit like the textOffset / paletteOffset stuff, investigate |
| 710 | // form 0xacMM-xxx ac = fixed value for this mode? MM = modes above. -xxx = some kind of offset? but it doesn't increment for each blit like the textOffset / paletteOffset stuff, investigate |
| 710 | 711 | |
| 711 | 712 | } |
| 712 | 713 | else if (m_blitterMode == 0x10) |
| r21258 | r21259 | |
| 786 | 787 | // this is also set at times during the game |
| 787 | 788 | // |
| 788 | 789 | // the sprites with 1 set appear to have 0x00000000 in everything after the 4th write (m_blit4 and above) |
| 789 | | // so likely have some other meaning and are NOT regular sprite data |
| 790 | // so likely have some other meaning and are NOT regular sprite data |
| 790 | 791 | m_blit0 = data; |
| 791 | 792 | |
| 792 | | |
| 793 | 793 | |
| 794 | 794 | |
| 795 | 795 | |
| 796 | |
| 796 | 797 | // if (data!=0) printf("blit %08x\n", data); |
| 797 | 798 | } |
| 798 | 799 | else if (m_blitterSerialCount == 1) |
| r21258 | r21259 | |
| 805 | 806 | m_blit1_unused = data & 0xfffef800; |
| 806 | 807 | m_b1mode = (data & 0x00010000)>>16; |
| 807 | 808 | m_b1colorNumber = (data & 0x000007ff); // Probably more bits |
| 808 | | |
| 809 | |
| 809 | 810 | if (m_blit1_unused!=0) printf("blit1 unknown bits set %08x\n", data); |
| 810 | 811 | } |
| 811 | 812 | } |
| 812 | 813 | else if (m_blitterSerialCount == 2) |
| 813 | 814 | { |
| 814 | 815 | if (!(m_blit0 & 1)) // don't bother for non-sprites |
| 815 | | { |
| 816 | | |
| 816 | { |
| 817 | |
| 817 | 818 | // seems to be more complex than just transparency |
| 818 | 819 | m_blit2_unused = data&0xff80f800; |
| 819 | 820 | m_b2tpen = (data & 0x007f0000)>>16; |
| 820 | 821 | m_b2colorNumber = (data & 0x000007ff); |
| 821 | | |
| 822 | |
| 822 | 823 | if (m_blit2_unused!=0) printf("blit1 unknown bits set %08x\n", data); |
| 823 | 824 | if (m_b1mode) |
| 824 | 825 | { |
| r21258 | r21259 | |
| 830 | 831 | if ((m_b2tpen != 0x00) && (m_b2tpen != 0x01) && (m_b2tpen != 0x02)) printf("m_b1mode 0, m_b2tpen!=0x00,0x01 or 0x02 (is %02x)\n", m_b2tpen); |
| 831 | 832 | } |
| 832 | 833 | |
| 833 | | // 00??0uuu |
| 834 | // 00??0uuu |
| 834 | 835 | // ?? seems to be 00 or 7f, set depending on b1mode |
| 835 | 836 | // uuu, at least 11 bits used, maybe 12 usually the same as m_blit1_unused? leftover? |
| 836 | 837 | } |
| r21258 | r21259 | |
| 839 | 840 | else if (m_blitterSerialCount == 3) |
| 840 | 841 | { |
| 841 | 842 | if (!(m_blit0 & 1)) // don't bother for non-sprites |
| 842 | | { |
| 843 | { |
| 843 | 844 | m_blit3_unused = data & 0xffe00000; |
| 844 | 845 | m_b3romoffset = (data & 0x001fffff)*2; |
| 845 | 846 | // if this is an offset into the compressed data then it's probably a word offset into each rom (each is 0x400000 bytes) with the data from all 10 being used in parallel as per the notes from Charles |
| r21258 | r21259 | |
| 862 | 863 | printf("\n"); |
| 863 | 864 | #endif |
| 864 | 865 | #if 0 |
| 865 | | // look at the values actually at the address we're using.. |
| 866 | // look at the values actually at the address we're using.. |
| 866 | 867 | // often have a similar form to |
| 867 | 868 | // 0008, 0000, 8000, 0800, 0080, 0008, 0000, 8000, 0800, 0080, |
| 868 | 869 | // 1 2 3 4 5 6 7 8 9 10 |
| r21258 | r21259 | |
| 870 | 871 | if (m_b3romoffset == 0x0000848e) |
| 871 | 872 | { |
| 872 | 873 | printf("rom offset %08x, values : \n", m_b3romoffset); |
| 873 | | |
| 874 | |
| 874 | 875 | for (int b=0;b<8;b++) |
| 875 | 876 | { |
| 876 | 877 | for (int i=0;i<8;i++) |
| r21258 | r21259 | |
| 896 | 897 | |
| 897 | 898 | |
| 898 | 899 | |
| 899 | | |
| 900 | 900 | |
| 901 | |
| 901 | 902 | // these are used for slider bars in test mode |
| 902 | 903 | // rom offset 00140000, values : 0008, 0000, 8000, 0800, 0080, 0008, 0000, 8000, 0800, 0080, |
| 903 | 904 | // rom offset 00140008, values : 0004, 9000, 4900, 0490, 0049, 0004, 9000, 4900, 0490, 0049, |
| 904 | | |
| 905 | |
| 905 | 906 | // or as groups of 20-bits 00080 00080 00080 00080 00080 00080 00080 00080 |
| 906 | 907 | // or as groups of 20-bits 00049 00049 00049 00049 00049 00049 00049 00049 |
| 907 | | |
| 908 | |
| 908 | 909 | #endif |
| 909 | 910 | } |
| 910 | | |
| 911 | 911 | |
| 912 | |
| 912 | 913 | } |
| 913 | 914 | } |
| 914 | 915 | else if (m_blitterSerialCount == 4) |
| 915 | 916 | { |
| 916 | 917 | if (!(m_blit0 & 1)) // don't bother for non-sprites |
| 917 | | { |
| 918 | { |
| 918 | 919 | m_blit4_unused = data & 0xf8fefefe; |
| 919 | 920 | m_blit4 = data & 0x07010101; |
| 920 | 921 | |
| r21258 | r21259 | |
| 995 | 996 | // we also use this to trigger the actual draw operation |
| 996 | 997 | |
| 997 | 998 | //printf("blit %08x\n", data); |
| 998 | | |
| 999 | |
| 999 | 1000 | // debug, hide objects without m_blit10 set |
| 1000 | 1001 | //if (m_blit10==0) return; |
| 1001 | 1002 | //if (m_blit0==0) return; |
| r21258 | r21259 | |
| 1005 | 1006 | { |
| 1006 | 1007 | // with this bit enabled m_blit10 is a look up to the zoom(?) value eg. 03f42600 |
| 1007 | 1008 | //UINT32 temp = space.read_dword(m_blit10); |
| 1008 | | //PRINT_BLIT_STUFF |
| 1009 | //PRINT_BLIT_STUFF |
| 1009 | 1010 | /* for the horizontal road during attract there are tables 0x480 bytes long (0x120 dwords) and the value passed points to the start of them */ |
| 1010 | 1011 | /* cell sizes for those are are 0011 (v) 0007 (h) with zoom factors of 0020 (half v) 0040 (normal h) */ |
| 1011 | 1012 | /* tables seem to be 2x 8-bit values, possibly zoom + linescroll, although ingame ones seem to be 2x16-bit (corrupt? more meaning) */ |
| r21258 | r21259 | |
| 1140 | 1141 | |
| 1141 | 1142 | 01a0(0x340) - 0403f 0003e 0f83e 0f83e 0f83a dd37e 05b2c e0f3c cf014 cb33c c5b16 c5800 0f83e 0f83e 0cb2c 01b2c // the compressed data referenced by (0x340) |
| 1142 | 1143 | 01b0(0x360) - 03374 de349 d0f83 d0f9a d0f83 02b9a e0f16 e8f16 d9688 c5a89 00b2c 00b7e e6365 d2348 c8b31 b7720 |
| 1143 | | c838a e4372 e0f43 d0f0e d2369 ce6dd da741 d07a7 c3b3c cf35c cf383 cf322 d2348 b7739 c8339 d0711 |
| 1144 | c838a e4372 e0f43 d0f0e d2369 ce6dd da741 d07a7 c3b3c cf35c cf383 cf322 d2348 b7739 c8339 d0711 |
| 1144 | 1145 | */ |
| 1145 | 1146 | |
| 1146 | 1147 | |
| r21258 | r21259 | |
| 1179 | 1180 | { |
| 1180 | 1181 | int lookupnum = h + (v*m_hCellCount); |
| 1181 | 1182 | UINT32 spriteNumber = get_20bit_data( m_b3romoffset, lookupnum); |
| 1182 | | |
| 1183 | |
| 1183 | 1184 | #if 0 |
| 1184 | 1185 | printf("%05x (%08x,%d) ",spriteNumber, (m_b3romoffset + (spriteNumber>>3)), spriteNumber&7 ); |
| 1185 | 1186 | |
| 1186 | 1187 | |
| 1187 | 1188 | if ((h == m_hCellCount-1)) |
| 1188 | 1189 | printf("\n"); |
| 1189 | | |
| 1190 | |
| 1190 | 1191 | if ((h == m_hCellCount-1) && (v == m_vCellCount-1)) |
| 1191 | 1192 | printf("\n"); |
| 1192 | 1193 | #endif |
| r21258 | r21259 | |
| 1197 | 1198 | if ((compdataoffset >= 0x016590) && (compdataoffset<=0x0165e6) && (h==0)) |
| 1198 | 1199 | { |
| 1199 | 1200 | printf("%05x (%08x,%d) | ",spriteNumber, compdataoffset, spriteNumber&7 ); |
| 1200 | | |
| 1201 | 1201 | |
| 1202 | |
| 1202 | 1203 | //00200 (00016590,0) 00200 (00016590,0) |
| 1203 | 1204 | //00210 (00016592,0) 00210 (00016592,0) |
| 1204 | 1205 | |
| r21258 | r21259 | |
| 1213 | 1214 | |
| 1214 | 1215 | // as 10-bit (pretty, I like this) |
| 1215 | 1216 | /* |this is where 210 starts |
| 1216 | | 00200 (00016590,0) | 00f 03e 03e 03e 03e 03e 03e 03e 257 257 257 257 257 257 257 257 (00f 257) |
| 1217 | 00200 (00016590,0) | 00f 03e 03e 03e 03e 03e 03e 03e 257 257 257 257 257 257 257 257 (00f 257) |
| 1217 | 1218 | 00210 (00016592,0) | 00f 257 257 257 257 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 207 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 237 (00f 237) - these lines are 64 lone |
| 1218 | 1219 | 00251 (0001659a,1) | 00f 237 237 237 237 237 237 237 237 237 237 237 237 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 22f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f (00f 21f) |
| 1219 | 1220 | 00292 (000165a2,2) | 00f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 21f 24f 24f 24f 24f 24f 24f 24f 24f 24f 24f 24f 24f 0be 0be 0be 0be (00f 0be) |
| 1220 | 1221 | 002b7 (000165a6,7) | 00f 0be 0be 0be 263 263 263 263 07e 07e 07e 07e 05e (00f 07e) |
| 1221 | | 002c4 (000165a8,4) | 00f 07e 07e 05e 247 247 247 247 247 247 247 247 247 247 247 247 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f (00f 20f) |
| 1222 | 002c4 (000165a8,4) | 00f 07e 07e 05e 247 247 247 247 247 247 247 247 247 247 247 247 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f (00f 20f) |
| 1222 | 1223 | 002f4 (000165ae,4) | 00f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 20f 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 233 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b 23b (00f 23b) |
| 1223 | 1224 | 00335 (000165b6,5) | 00f 23b 23b 23b 23b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 20b 24b 24b 24b 24b 24b 24b 24b 24b 24b 24b 24b 24b 0de (00f 0fe) |
| 1224 | 1225 | 00373 (000165be,3) | 00f 0fe 0fe 0fe 0fe 0fe 0fe 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 00f 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 223 267 267 267 267 17e 17e 17e 17e 15e (00f 17e) |
| r21258 | r21259 | |
| 1246 | 1247 | for (int v = 0; v < m_vCellCount; v++) |
| 1247 | 1248 | { |
| 1248 | 1249 | const int pixelOffsetY = ((m_vPosition) + (v* 16 * m_vZoom)) / 0x40; |
| 1249 | | |
| 1250 | |
| 1250 | 1251 | if (pixelOffsetY>383) |
| 1251 | 1252 | { |
| 1252 | 1253 | v = m_vCellCount; |
| 1253 | 1254 | continue; |
| 1254 | 1255 | } |
| 1255 | | |
| 1256 | 1256 | |
| 1257 | |
| 1257 | 1258 | for (int h = 0; h < m_hCellCount; h++) |
| 1258 | 1259 | { |
| 1259 | 1260 | const int pixelOffsetX = ((m_hPosition) + (h* 16 * m_hZoom)) / 0x40; |
| 1260 | | |
| 1261 | |
| 1261 | 1262 | if (pixelOffsetX>495) |
| 1262 | 1263 | { |
| 1263 | 1264 | h = m_hCellCount; |
| 1264 | 1265 | continue; |
| 1265 | 1266 | } |
| 1266 | | |
| 1267 | |
| 1267 | 1268 | int lookupnum = h + (v*m_hCellCount); |
| 1268 | | |
| 1269 | |
| 1269 | 1270 | // with this bit enabled the tile numbers gets looked up using 'data' (which would be m_blit11) (eg 03f40000 for startup text) |
| 1270 | 1271 | // this allows text strings to be written as 8-bit ascii in one area (using command 0x10), and drawn using multi-width sprites |
| 1271 | 1272 | if (m_indirect_tile_enable) |
| r21258 | r21259 | |
| 1276 | 1277 | |
| 1277 | 1278 | |
| 1278 | 1279 | // these should be 'cell numbers' (tile numbers) which look up RLE data? |
| 1279 | | UINT32 spriteNumber = get_20bit_data( m_b3romoffset, lookupnum ); |
| 1280 | UINT32 spriteNumber = get_20bit_data( m_b3romoffset, lookupnum ); |
| 1280 | 1281 | |
| 1281 | 1282 | int i = 1;// skip first 10 bits for now |
| 1282 | 1283 | int data_written = 0; |
| r21258 | r21259 | |
| 1285 | 1286 | { |
| 1286 | 1287 | |
| 1287 | 1288 | UINT16 compdata = get_10bit_data( m_b3romoffset, spriteNumber + i); |
| 1288 | | |
| 1289 | |
| 1289 | 1290 | if (((compdata & 0x300) == 0x000) || ((compdata & 0x300) == 0x100)) |
| 1290 | 1291 | { |
| 1291 | 1292 | // mm ccrr rrr0 |
| r21258 | r21259 | |
| 1323 | 1324 | i++; |
| 1324 | 1325 | } |
| 1325 | 1326 | |
| 1326 | | |
| 1327 | 1327 | |
| 1328 | | |
| 1329 | | |
| 1330 | 1328 | |
| 1329 | |
| 1330 | |
| 1331 | |
| 1331 | 1332 | int blockwide = ((16*m_hZoom)/0x40)-1; |
| 1332 | 1333 | int blockhigh = ((16*m_vZoom)/0x40)-1; |
| 1333 | 1334 | // hack |
| r21258 | r21259 | |
| 1352 | 1353 | if (line[drawx]==0) line[drawx] = clut[pix+0x4000]; |
| 1353 | 1354 | } |
| 1354 | 1355 | } |
| 1355 | | |
| 1356 | |
| 1356 | 1357 | #if 0 // this one does zooming |
| 1357 | 1358 | // DEBUG: Draw 16x16 block |
| 1358 | 1359 | UINT32* line; |
| r21258 | r21259 | |
| 1612 | 1613 | if(offset == 8) |
| 1613 | 1614 | { |
| 1614 | 1615 | //popmessage("%02x",sound_data); |
| 1615 | | /* TODO: this probably stalls the DMA transfers. */ |
| 1616 | /* |
| 1617 | Checked in irq routine |
| 1618 | --x- ---- second SCSP |
| 1619 | ---x ---- first SCSP |
| 1620 | */ |
| 1621 | m_subcpu->set_input_line(0xe, CLEAR_LINE); |
| 1616 | 1622 | return sound_data; |
| 1617 | 1623 | } |
| 1618 | 1624 | |
| r21258 | r21259 | |
| 1711 | 1717 | AM_RANGE(0x60000000, 0x600003ff) AM_WRITENOP |
| 1712 | 1718 | ADDRESS_MAP_END |
| 1713 | 1719 | |
| 1720 | /* TODO: what is this for, mixing? */ |
| 1714 | 1721 | WRITE8_MEMBER(coolridr_state::sound_to_sh1_w) |
| 1715 | 1722 | { |
| 1716 | | sound_data = data; |
| 1723 | sound_fifo_full = data & 0x80; |
| 1724 | // sound_data = data; |
| 1725 | // printf("%02x sound\n",data); |
| 1717 | 1726 | } |
| 1718 | 1727 | |
| 1719 | 1728 | static ADDRESS_MAP_START( system_h1_sound_map, AS_PROGRAM, 16, coolridr_state ) |
| r21258 | r21259 | |
| 2170 | 2179 | device->machine().device("soundcpu")->execute().set_input_line(-irq, CLEAR_LINE); |
| 2171 | 2180 | } |
| 2172 | 2181 | |
| 2173 | | WRITE_LINE_MEMBER(coolridr_state::scsp_to_main_irq) |
| 2182 | /* TODO: how to clear the vector? */ |
| 2183 | WRITE_LINE_MEMBER(coolridr_state::scsp1_to_sh1_irq) |
| 2174 | 2184 | { |
| 2175 | | m_subcpu->set_input_line(0xe, HOLD_LINE); |
| 2185 | m_subcpu->set_input_line(0xe, ASSERT_LINE); |
| 2186 | sound_data = 0x10; |
| 2176 | 2187 | } |
| 2177 | 2188 | |
| 2189 | WRITE_LINE_MEMBER(coolridr_state::scsp2_to_sh1_irq) |
| 2190 | { |
| 2191 | m_subcpu->set_input_line(0xe, ASSERT_LINE); |
| 2192 | sound_data = 0x20; |
| 2193 | } |
| 2194 | |
| 2178 | 2195 | static const scsp_interface scsp_config = |
| 2179 | 2196 | { |
| 2180 | 2197 | 0, |
| 2181 | 2198 | scsp_irq, |
| 2182 | | DEVCB_DRIVER_LINE_MEMBER(coolridr_state, scsp_to_main_irq) |
| 2199 | DEVCB_DRIVER_LINE_MEMBER(coolridr_state, scsp1_to_sh1_irq) |
| 2183 | 2200 | }; |
| 2184 | 2201 | |
| 2185 | 2202 | static const scsp_interface scsp2_interface = |
| 2186 | 2203 | { |
| 2187 | 2204 | 0, |
| 2188 | 2205 | NULL, |
| 2189 | | DEVCB_DRIVER_LINE_MEMBER(coolridr_state, scsp_to_main_irq) |
| 2206 | DEVCB_DRIVER_LINE_MEMBER(coolridr_state, scsp2_to_sh1_irq) |
| 2190 | 2207 | }; |
| 2191 | 2208 | |
| 2192 | 2209 | #define MAIN_CLOCK XTAL_28_63636MHz |
| r21258 | r21259 | |
| 2275 | 2292 | ROM_LOAD16_WORD_SWAP( "mpr-17647.ic8", 0x1c00000, 0x0400000, CRC(9dd9330c) SHA1(c91a7f497c1f4bd283bd683b06dff88893724d51) ) // 4900 |
| 2276 | 2293 | ROM_LOAD16_WORD_SWAP( "mpr-17646.ic7", 0x2000000, 0x0400000, CRC(b77eb2ad) SHA1(b832c0f1798aca39adba840d56ae96a75346670a) ) // 0490 |
| 2277 | 2294 | ROM_LOAD16_WORD_SWAP( "mpr-17645.ic6", 0x2400000, 0x0400000, CRC(56968d07) SHA1(e88c3d66ea05affb4681a25d155f097bd1b5a84b) ) // 0049 |
| 2278 | | |
| 2279 | 2295 | |
| 2280 | 2296 | |
| 2297 | |
| 2281 | 2298 | ROM_REGION( 0x80000, "scsp1", 0 ) /* first SCSP's RAM */ |
| 2282 | 2299 | ROM_FILL( 0x000000, 0x80000, 0 ) |
| 2283 | 2300 | |