Merge pull request #1211 from ajrhacker/globalmask

Make address maps complain when entry bounds lie outside the global m…
This commit is contained in:
Miodrag Milanović 2016-08-08 19:56:52 +02:00 committed by GitHub
commit d3da9b6e91
15 changed files with 43 additions and 98 deletions

View File

@ -80,7 +80,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( newbrain_fdc_io, AS_IO, 8, newbrain_fdc_t )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0xd1)
ADDRESS_MAP_GLOBAL_MASK(0x71)
AM_RANGE(0x00, 0x01) AM_MIRROR(0x10) AM_DEVICE(UPD765_TAG, upd765a_device, map)
AM_RANGE(0x20, 0x20) AM_MIRROR(0x11) AM_WRITE(fdc_auxiliary_w)
AM_RANGE(0x40, 0x40) AM_MIRROR(0x11) AM_READ(fdc_control_r)

View File

@ -32,8 +32,8 @@ address_map_entry::address_map_entry(device_t &device, address_map &map, offs_t
: m_next(nullptr),
m_map(map),
m_devbase(device),
m_addrstart((map.m_globalmask == 0) ? start : start & map.m_globalmask),
m_addrend((map.m_globalmask == 0) ? end : end & map.m_globalmask),
m_addrstart(start),
m_addrend(end),
m_addrmirror(0),
m_addrmask(0),
m_addrselect(0),
@ -47,6 +47,17 @@ address_map_entry::address_map_entry(device_t &device, address_map &map, offs_t
m_bytemirror(0),
m_bytemask(0)
{
if (map.m_globalmask != 0 && (start & ~map.m_globalmask) != 0)
{
osd_printf_warning("AS_%d map entry start %08X lies outside global address mask %08X\n", map.m_spacenum, start, map.m_globalmask);
m_addrstart &= map.m_globalmask;
}
if (map.m_globalmask != 0 && (end & ~map.m_globalmask) != 0)
{
osd_printf_warning("AS_%d map entry end %08X lies outside global address mask %08X\n", map.m_spacenum, end, map.m_globalmask);
m_addrend &= map.m_globalmask;
}
}

View File

@ -878,7 +878,7 @@ READ8_MEMBER(arkanoid_state::hexaa_sub_90_r)
}
static ADDRESS_MAP_START( hexaa_sub_iomap, AS_IO, 8, arkanoid_state )
ADDRESS_MAP_GLOBAL_MASK(0x0f)
ADDRESS_MAP_GLOBAL_MASK(0x9f)
AM_RANGE(0x00, 0x0f) AM_RAM // ?? could be communication with the other chip (protection?)
AM_RANGE(0x80, 0x80) AM_WRITE(hexaa_sub_80_w)
AM_RANGE(0x90, 0x90) AM_READ(hexaa_sub_90_r)

View File

@ -843,7 +843,7 @@ static ADDRESS_MAP_START( s903mod_map, AS_PROGRAM, 8, calomega_state )
AM_RANGE(0x08c8, 0x08cb) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
AM_RANGE(0x1000, 0x13ff) AM_RAM_WRITE(calomega_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x1400, 0x17ff) AM_RAM_WRITE(calomega_colorram_w) AM_SHARE("colorram")
AM_RANGE(0x1800, 0xffff) AM_ROM
AM_RANGE(0x1800, 0x3fff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( sys905_map, AS_PROGRAM, 8, calomega_state )
@ -856,7 +856,7 @@ static ADDRESS_MAP_START( sys905_map, AS_PROGRAM, 8, calomega_state )
AM_RANGE(0x10c8, 0x10cb) AM_DEVREADWRITE("pia1", pia6821_device, read, write)
AM_RANGE(0x2000, 0x23ff) AM_RAM_WRITE(calomega_videoram_w) AM_SHARE("videoram")
AM_RANGE(0x2400, 0x27ff) AM_RAM_WRITE(calomega_colorram_w) AM_SHARE("colorram")
AM_RANGE(0x2800, 0xffff) AM_ROM
AM_RANGE(0x2800, 0x7fff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( sys906_map, AS_PROGRAM, 8, calomega_state )

View File

@ -96,7 +96,7 @@ static ADDRESS_MAP_START(eacc_mem, AS_PROGRAM, 8, eacc_state)
ADDRESS_MAP_GLOBAL_MASK(0xc7ff) // A11,A12,A13 not connected
AM_RANGE(0x0000, 0x001f) AM_RAM AM_SHARE("nvram") // inside cpu, battery-backed
AM_RANGE(0x0020, 0x007f) AM_RAM // inside cpu
AM_RANGE(0x6000, 0x67ff) AM_ROM AM_MIRROR(0x8000)
AM_RANGE(0x4000, 0x47ff) AM_ROM AM_MIRROR(0x8000)
AM_RANGE(0x8000, 0x8003) AM_MIRROR(0x7fc) AM_DEVREADWRITE("pia", pia6821_device, read, write)
ADDRESS_MAP_END

View File

@ -37,8 +37,8 @@ Galaksija driver by Krzysztof Strzecha and Miodrag Milanovic
static ADDRESS_MAP_START (galaxyp_io, AS_IO, 8, galaxy_state )
ADDRESS_MAP_GLOBAL_MASK(0x01)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0xbe, 0xbe) AM_DEVWRITE("ay8910", ay8910_device, address_w)
AM_RANGE(0xbf, 0xbf) AM_DEVWRITE("ay8910", ay8910_device, data_w)
AM_RANGE(0x00, 0x00) AM_DEVWRITE("ay8910", ay8910_device, address_w)
AM_RANGE(0x01, 0x01) AM_DEVWRITE("ay8910", ay8910_device, data_w)
ADDRESS_MAP_END

View File

@ -1690,7 +1690,7 @@ static ADDRESS_MAP_START( wildcrdb_map, AS_PROGRAM, 8, goldnpkr_state )
AM_RANGE(0x2100, 0x2100) AM_DEVWRITE("crtc", mc6845_device, address_w)
AM_RANGE(0x2101, 0x2101) AM_DEVREADWRITE("crtc", mc6845_device, register_r, register_w)
AM_RANGE(0x2800, 0x2fff) AM_RAM
AM_RANGE(0x3000, 0xffff) AM_ROM
AM_RANGE(0x3000, 0x7fff) AM_ROM
ADDRESS_MAP_END
static ADDRESS_MAP_START( wildcrdb_mcu_map, AS_PROGRAM, 8, goldnpkr_state )

View File

@ -64,9 +64,9 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( lc80_io, AS_IO, 8, lc80_state )
ADDRESS_MAP_GLOBAL_MASK(0x1f)
AM_RANGE(0xf4, 0xf7) AM_DEVREADWRITE(Z80PIO1_TAG, z80pio_device, read, write)
AM_RANGE(0xf8, 0xfb) AM_DEVREADWRITE(Z80PIO2_TAG, z80pio_device, read, write)
AM_RANGE(0xec, 0xef) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write)
AM_RANGE(0x14, 0x17) AM_DEVREADWRITE(Z80PIO1_TAG, z80pio_device, read, write)
AM_RANGE(0x18, 0x1b) AM_DEVREADWRITE(Z80PIO2_TAG, z80pio_device, read, write)
AM_RANGE(0x0c, 0x0f) AM_DEVREADWRITE(Z80CTC_TAG, z80ctc_device, read, write)
ADDRESS_MAP_END
/* Input Ports */

View File

@ -31,7 +31,6 @@ static ADDRESS_MAP_START(lisa_fdc_map, AS_PROGRAM, 8, lisa_state )
AM_RANGE(0x0400, 0x07ff) AM_READWRITE(lisa_fdc_io_r, lisa_fdc_io_w) /* disk controller (IWM and TTL logic) */
AM_RANGE(0x0800, 0x0fff) AM_NOP
AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("fdccpu", 0x1000) AM_SHARE("fdc_rom") /* ROM */
AM_RANGE(0x2000, 0xffff) AM_READWRITE(lisa_fdc_r, lisa_fdc_w) /* handler for wrap-around */
ADDRESS_MAP_END
static ADDRESS_MAP_START(lisa210_fdc_map, AS_PROGRAM, 8, lisa_state )
@ -41,7 +40,6 @@ static ADDRESS_MAP_START(lisa210_fdc_map, AS_PROGRAM, 8, lisa_state )
AM_RANGE(0x0800, 0x0bff) AM_READWRITE(lisa_fdc_io_r, lisa_fdc_io_w) /* disk controller (IWM and TTL logic) */
AM_RANGE(0x0c00, 0x0fff) AM_NOP /* nothing, or IO port wrap-around ??? */
AM_RANGE(0x1000, 0x1fff) AM_ROM AM_REGION("fdccpu", 0x1000) AM_SHARE("fdc_rom") /* ROM */
AM_RANGE(0x2000, 0xffff) AM_READWRITE(lisa_fdc_r, lisa_fdc_w) /* handler for wrap-around */
ADDRESS_MAP_END

View File

@ -120,7 +120,7 @@ static ADDRESS_MAP_START( s6_main_map, AS_PROGRAM, 8, s6_state )
AM_RANGE(0x2200, 0x2203) AM_DEVREADWRITE("pia22", pia6821_device, read, write) // solenoids
AM_RANGE(0x2400, 0x2403) AM_DEVREADWRITE("pia24", pia6821_device, read, write) // lamps
AM_RANGE(0x2800, 0x2803) AM_DEVREADWRITE("pia28", pia6821_device, read, write) // display
AM_RANGE(0xb000, 0x3003) AM_DEVREADWRITE("pia30", pia6821_device, read, write) // inputs
AM_RANGE(0x3000, 0x3003) AM_DEVREADWRITE("pia30", pia6821_device, read, write) // inputs
AM_RANGE(0x6000, 0x7fff) AM_ROM AM_REGION("roms", 0)
ADDRESS_MAP_END

View File

@ -182,7 +182,7 @@ static ADDRESS_MAP_START( slc1_map, AS_PROGRAM, 8, slc1_state )
ADDRESS_MAP_UNMAP_HIGH
ADDRESS_MAP_GLOBAL_MASK(0x4fff)
AM_RANGE(0x0000, 0x0fff) AM_ROM
AM_RANGE(0x5000, 0x53ff) AM_RAM AM_MIRROR(0xc00)
AM_RANGE(0x4000, 0x43ff) AM_RAM AM_MIRROR(0xc00)
ADDRESS_MAP_END
static ADDRESS_MAP_START( slc1_io, AS_IO, 8, slc1_state )

View File

@ -86,22 +86,22 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, toobin_state )
AM_RANGE(0xc08000, 0xc097ff) AM_MIRROR(0x046000) AM_RAM_DEVWRITE("alpha", tilemap_device, write) AM_SHARE("alpha")
AM_RANGE(0xc09800, 0xc09fff) AM_MIRROR(0x046000) AM_RAM AM_SHARE("mob")
AM_RANGE(0xc10000, 0xc107ff) AM_MIRROR(0x047800) AM_RAM_WRITE(paletteram_w) AM_SHARE("paletteram")
AM_RANGE(0xba6000, 0xba6001) AM_MIRROR(0x4500fe) AM_READNOP /* who knows? read at controls time */
AM_RANGE(0xba8000, 0xba8001) AM_MIRROR(0x4500fe) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0xba8100, 0xba8101) AM_MIRROR(0x4500fe) AM_DEVWRITE8("jsa", atari_jsa_i_device, main_command_w, 0x00ff)
AM_RANGE(0xba8300, 0xba8301) AM_MIRROR(0x45003e) AM_WRITE(intensity_w)
AM_RANGE(0xba8340, 0xba8341) AM_MIRROR(0x45003e) AM_WRITE(interrupt_scan_w) AM_SHARE("interrupt_scan")
AM_RANGE(0xba8380, 0xba8381) AM_MIRROR(0x45003e) AM_RAM_WRITE(slip_w) AM_SHARE("mob:slip")
AM_RANGE(0xba83c0, 0xba83c1) AM_MIRROR(0x45003e) AM_WRITE(scanline_int_ack_w)
AM_RANGE(0xba8400, 0xba8401) AM_MIRROR(0x4500fe) AM_DEVWRITE("jsa", atari_jsa_i_device, sound_reset_w)
AM_RANGE(0xba8500, 0xba8501) AM_MIRROR(0x4500fe) AM_DEVWRITE("eeprom", atari_eeprom_device, unlock_write)
AM_RANGE(0xba8600, 0xba8601) AM_MIRROR(0x4500fe) AM_WRITE(xscroll_w) AM_SHARE("xscroll")
AM_RANGE(0xba8700, 0xba8701) AM_MIRROR(0x4500fe) AM_WRITE(yscroll_w) AM_SHARE("yscroll")
AM_RANGE(0xba8800, 0xba8801) AM_MIRROR(0x4507fe) AM_READ_PORT("FF8800")
AM_RANGE(0xba9000, 0xba9001) AM_MIRROR(0x4507fe) AM_READ_PORT("FF9000")
AM_RANGE(0xba9800, 0xba9801) AM_MIRROR(0x4507fe) AM_DEVREAD8("jsa", atari_jsa_i_device, main_response_r, 0x00ff)
AM_RANGE(0xbaa000, 0xbaafff) AM_MIRROR(0x451000) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff)
AM_RANGE(0xbac000, 0xbaffff) AM_MIRROR(0x450000) AM_RAM
AM_RANGE(0x826000, 0x826001) AM_MIRROR(0x4500fe) AM_READNOP /* who knows? read at controls time */
AM_RANGE(0x828000, 0x828001) AM_MIRROR(0x4500fe) AM_DEVWRITE("watchdog", watchdog_timer_device, reset16_w)
AM_RANGE(0x828100, 0x828101) AM_MIRROR(0x4500fe) AM_DEVWRITE8("jsa", atari_jsa_i_device, main_command_w, 0x00ff)
AM_RANGE(0x828300, 0x828301) AM_MIRROR(0x45003e) AM_WRITE(intensity_w)
AM_RANGE(0x828340, 0x828341) AM_MIRROR(0x45003e) AM_WRITE(interrupt_scan_w) AM_SHARE("interrupt_scan")
AM_RANGE(0x828380, 0x828381) AM_MIRROR(0x45003e) AM_RAM_WRITE(slip_w) AM_SHARE("mob:slip")
AM_RANGE(0x8283c0, 0x8283c1) AM_MIRROR(0x45003e) AM_WRITE(scanline_int_ack_w)
AM_RANGE(0x828400, 0x828401) AM_MIRROR(0x4500fe) AM_DEVWRITE("jsa", atari_jsa_i_device, sound_reset_w)
AM_RANGE(0x828500, 0x828501) AM_MIRROR(0x4500fe) AM_DEVWRITE("eeprom", atari_eeprom_device, unlock_write)
AM_RANGE(0x828600, 0x828601) AM_MIRROR(0x4500fe) AM_WRITE(xscroll_w) AM_SHARE("xscroll")
AM_RANGE(0x828700, 0x828701) AM_MIRROR(0x4500fe) AM_WRITE(yscroll_w) AM_SHARE("yscroll")
AM_RANGE(0x828800, 0x828801) AM_MIRROR(0x4507fe) AM_READ_PORT("FF8800")
AM_RANGE(0x829000, 0x829001) AM_MIRROR(0x4507fe) AM_READ_PORT("FF9000")
AM_RANGE(0x829800, 0x829801) AM_MIRROR(0x4507fe) AM_DEVREAD8("jsa", atari_jsa_i_device, main_response_r, 0x00ff)
AM_RANGE(0x82a000, 0x82afff) AM_MIRROR(0x451000) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff)
AM_RANGE(0x82c000, 0x82ffff) AM_MIRROR(0x450000) AM_RAM
ADDRESS_MAP_END

View File

@ -192,10 +192,6 @@ public:
int m_videoROM_address;
DECLARE_READ8_MEMBER(lisa_fdc_io_r);
DECLARE_WRITE8_MEMBER(lisa_fdc_io_w);
DECLARE_READ8_MEMBER(lisa_fdc_r);
DECLARE_READ8_MEMBER(lisa210_fdc_r);
DECLARE_WRITE8_MEMBER(lisa_fdc_w);
DECLARE_WRITE8_MEMBER(lisa210_fdc_w);
DECLARE_READ16_MEMBER(lisa_r);
DECLARE_WRITE16_MEMBER(lisa_w);
DECLARE_READ16_MEMBER(lisa_IO_r);

View File

@ -1221,66 +1221,6 @@ WRITE8_MEMBER(lisa_state::lisa_fdc_io_w)
}
}
READ8_MEMBER(lisa_state::lisa_fdc_r)
{
if (! (offset & 0x1000))
{
if (! (offset & 0x0800))
if (! (offset & 0x0400))
return m_fdc_ram[offset & 0x03ff];
else
return lisa_fdc_io_r(space, offset & 0x03ff);
else
return 0; /* ??? */
}
else
return m_fdc_rom[offset & 0x0fff];
}
READ8_MEMBER(lisa_state::lisa210_fdc_r)
{
if (! (offset & 0x1000))
{
if (! (offset & 0x0400))
if (! (offset & 0x0800))
return m_fdc_ram[offset & 0x03ff];
else
return lisa_fdc_io_r(space, offset & 0x03ff);
else
return 0; /* ??? */
}
else
return m_fdc_rom[offset & 0x0fff];
}
WRITE8_MEMBER(lisa_state::lisa_fdc_w)
{
if (! (offset & 0x1000))
{
if (! (offset & 0x0800))
{
if (! (offset & 0x0400))
m_fdc_ram[offset & 0x03ff] = data;
else
lisa_fdc_io_w(space, offset & 0x03ff, data);
}
}
}
WRITE8_MEMBER(lisa_state::lisa210_fdc_w)
{
if (! (offset & 0x1000))
{
if (! (offset & 0x0400))
{
if (! (offset & 0x0800))
m_fdc_ram[offset & 0x03ff] = data;
else
lisa_fdc_io_w(space, offset & 0x03ff, data);
}
}
}
READ16_MEMBER(lisa_state::lisa_r)
{
int answer=0;

View File

@ -77,7 +77,7 @@ static ADDRESS_MAP_START( m1comm_io, AS_IO, 8, m1comm_device )
AM_RANGE(0x20, 0x2F) AM_READWRITE(dma_reg_r, dma_reg_w)
AM_RANGE(0x40, 0x40) AM_READWRITE(syn_r, syn_w)
AM_RANGE(0x60, 0x60) AM_READWRITE(zfg_r, zfg_w)
AM_RANGE(0xFFFF, 0xFFFF) AM_RAM
AM_RANGE(0xFF, 0xFF) AM_RAM
ADDRESS_MAP_END
MACHINE_CONFIG_FRAGMENT( m1comm )