summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Michaël Banaan Ananas <happppp@users.noreply.github.com>2012-09-09 16:11:37 +0000
committer Michaël Banaan Ananas <happppp@users.noreply.github.com>2012-09-09 16:11:37 +0000
commit2b0c45d0052fb99516f42de01975eacac6040a27 (patch)
tree4305b5ea5cc8c3306424f8d7285cc8acb16fe189 /src
parent043d7775a5355a4c3103b7094706cc69f614f4c5 (diff)
rommask makes more sense
Diffstat (limited to 'src')
-rw-r--r--src/emu/sound/upd7759.c19
-rw-r--r--src/mame/drivers/homerun.c6
-rw-r--r--src/mame/drivers/snk68.c4
3 files changed, 19 insertions, 10 deletions
diff --git a/src/emu/sound/upd7759.c b/src/emu/sound/upd7759.c
index 63c0076d120..785ba1de89f 100644
--- a/src/emu/sound/upd7759.c
+++ b/src/emu/sound/upd7759.c
@@ -189,6 +189,7 @@ struct _upd7759_state
UINT8 * rom; /* pointer to ROM data or NULL for slave mode */
UINT8 * rombase; /* pointer to ROM data or NULL for slave mode */
UINT32 romoffset; /* ROM offset to make save/restore easier */
+ UINT32 rommask; /* maximum address offset */
};
@@ -342,6 +343,7 @@ static void advance_state(upd7759_state *chip)
case STATE_ADDR_LSB:
chip->offset |= (chip->rom ? chip->rom[chip->req_sample * 2 + 6] : chip->fifo_in) << chip->sample_offset_shift;
if (DEBUG_STATES) DEBUG_METHOD("UPD7759: offset_lo = %02X, requesting dummy 2\n", (chip->offset >> chip->sample_offset_shift) & 0xff);
+ if (chip->offset > chip->rommask) logerror("upd7759 offset %X > rommask %X\n",chip->offset, chip->rommask);
chip->drq = 1;
/* 36 cycles later, we will latch this value and request another byte */
@@ -371,7 +373,7 @@ static void advance_state(upd7759_state *chip)
chip->repeat_count--;
chip->offset = chip->repeat_offset;
}
- chip->block_header = chip->rom ? chip->rom[chip->offset++ & 0x1ffff] : chip->fifo_in;
+ chip->block_header = chip->rom ? chip->rom[chip->offset++ & chip->rommask] : chip->fifo_in;
if (DEBUG_STATES) DEBUG_METHOD("UPD7759: header (@%05X) = %02X, requesting next byte\n", chip->offset, chip->block_header);
chip->drq = 1;
@@ -414,7 +416,7 @@ static void advance_state(upd7759_state *chip)
/* Nibble count state: latch the number of nibbles to play and request another byte */
/* The expected response will be the first data byte */
case STATE_NIBBLE_COUNT:
- chip->nibbles_left = (chip->rom ? chip->rom[chip->offset++ & 0x1ffff] : chip->fifo_in) + 1;
+ chip->nibbles_left = (chip->rom ? chip->rom[chip->offset++ & chip->rommask] : chip->fifo_in) + 1;
if (DEBUG_STATES) DEBUG_METHOD("UPD7759: nibble_count = %u, requesting next byte\n", (unsigned)chip->nibbles_left);
chip->drq = 1;
@@ -426,7 +428,7 @@ static void advance_state(upd7759_state *chip)
/* MSN state: latch the data for this pair of samples and request another byte */
/* The expected response will be the next sample data or another header */
case STATE_NIBBLE_MSN:
- chip->adpcm_data = chip->rom ? chip->rom[chip->offset++ & 0x1ffff] : chip->fifo_in;
+ chip->adpcm_data = chip->rom ? chip->rom[chip->offset++ & chip->rommask] : chip->fifo_in;
update_adpcm(chip, chip->adpcm_data >> 4);
chip->drq = 1;
@@ -544,7 +546,7 @@ static TIMER_CALLBACK( upd7759_slave_update )
advance_state(chip);
/* if the DRQ changed, update it */
- logerror("slave_update: DRQ %d->%d\n", olddrq, chip->drq);
+ logerror("upd7759_slave_update: DRQ %d->%d\n", olddrq, chip->drq);
if (olddrq != chip->drq && chip->drqcallback)
(*chip->drqcallback)(chip->device, chip->drq);
@@ -662,9 +664,16 @@ static DEVICE_START( upd7759 )
chip->romoffset = 0;
chip->rom = chip->rombase = *device->region();
if (chip->rombase == NULL)
+ {
chip->timer = device->machine().scheduler().timer_alloc(FUNC(upd7759_slave_update), chip);
+ chip->rommask = 0;
+ }
else
- assert((device->region()->bytes() & 0x1ffff) == 0);
+ {
+ UINT32 romsize = device->region()->bytes();
+ if (romsize >= 0x20000) chip->rommask = 0x1ffff;
+ else chip->rommask = romsize - 1;
+ }
/* set the DRQ callback */
chip->drqcallback = intf->drqcallback;
diff --git a/src/mame/drivers/homerun.c b/src/mame/drivers/homerun.c
index f0eb89148fe..022f40b2307 100644
--- a/src/mame/drivers/homerun.c
+++ b/src/mame/drivers/homerun.c
@@ -361,7 +361,7 @@ ROM_START( homerun )
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "homerun.ic120", 0x00000, 0x20000, CRC(52f0709b) SHA1(19e675bcccadb774f60ec5929fc1fb5cf0d3f617) )
- ROM_REGION( 0x20000, "d7756c", ROMREGION_ERASE00 )
+ ROM_REGION( 0x08000, "d7756c", ROMREGION_ERASE00 )
ROM_LOAD( "d7756c.ic98", 0x00000, 0x08000, NO_DUMP ) /* D7756C built-in rom */
ROM_END
@@ -377,7 +377,7 @@ ROM_START( dynashot )
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "2.ic120", 0x00000, 0x20000, CRC(bedf7b98) SHA1(cb6c5fcaf8df5f5c7636c3c8f79b9dda78e30c2e) )
- ROM_REGION( 0x20000, "d7756c", ROMREGION_ERASE00 )
+ ROM_REGION( 0x08000, "d7756c", ROMREGION_ERASE00 )
ROM_LOAD( "d7756c.ic98", 0x00000, 0x08000, NO_DUMP ) /* D7756C built-in rom */
ROM_END
@@ -393,7 +393,7 @@ ROM_START( ganjaja )
ROM_REGION( 0x20000, "gfx2", 0 )
ROM_LOAD( "2.ic120", 0x00000, 0x20000, CRC(e65d4d57) SHA1(2ec9e5bdaa94b808573313b6eca657d798004b53) )
- ROM_REGION( 0x20000, "d7756c", ROMREGION_ERASE00 )
+ ROM_REGION( 0x08000, "d7756c", 0 )
ROM_LOAD( "d77p56cr.ic98", 0x00000, 0x08000, CRC(06a234ac) SHA1(b4ceff3f9f78551cf4a085642e162e33b266f067) ) /* D77P56CR OTP rom (One-Time Programmable, note the extra P) */
ROM_END
diff --git a/src/mame/drivers/snk68.c b/src/mame/drivers/snk68.c
index 7ea1a5905af..53ff0175a9b 100644
--- a/src/mame/drivers/snk68.c
+++ b/src/mame/drivers/snk68.c
@@ -665,7 +665,7 @@ ROM_START( pow )
ROM_LOAD16_BYTE( "snk880.22a", 0x1c0000, 0x20000, CRC(aa9c00d8) SHA1(1017ed1cc036c6084b71204a998fd05557a6e59f) )
ROM_LOAD16_BYTE( "snk880.26a", 0x1c0001, 0x20000, CRC(9bc261c5) SHA1(f07fef465191d48ccc149d1a62e6382d3fc0ef9f) )
- ROM_REGION( 0x20000, "upd", ROMREGION_ERASE00 ) /* UPD7759 samples */
+ ROM_REGION( 0x10000, "upd", 0 ) /* UPD7759 samples */
ROM_LOAD( "dg7.d20", 0x000000, 0x10000, CRC(aba9a9d3) SHA1(5098cd3a064b8ede24797de8879a277d79e79d75) )
ROM_REGION( 0x0100, "plds", 0 )
@@ -702,7 +702,7 @@ ROM_START( powj )
ROM_LOAD16_BYTE( "snk880.22a", 0x1c0000, 0x20000, CRC(aa9c00d8) SHA1(1017ed1cc036c6084b71204a998fd05557a6e59f) )
ROM_LOAD16_BYTE( "snk880.26a", 0x1c0001, 0x20000, CRC(9bc261c5) SHA1(f07fef465191d48ccc149d1a62e6382d3fc0ef9f) )
- ROM_REGION( 0x20000, "upd", ROMREGION_ERASE00 ) /* UPD7759 samples */
+ ROM_REGION( 0x10000, "upd", 0 ) /* UPD7759 samples */
ROM_LOAD( "dg7.d20", 0x000000, 0x10000, CRC(aba9a9d3) SHA1(5098cd3a064b8ede24797de8879a277d79e79d75) )
ROM_REGION( 0x0100, "plds", 0 )