mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
Make address maps complain when entry bounds lie outside the global mask (nw)
- Alter a bunch of address maps so all validity checks pass. These includes global address masks in Hexaa and the Newbrain FDC (regression testing should be done here). - Remove the Lisa wraparound read/write handlers.
This commit is contained in:
parent
6c8bb59ba2
commit
828f824708
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -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 */
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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 )
|
||||
|
Loading…
Reference in New Issue
Block a user