mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
Last memory change fixes (nw)
This commit is contained in:
parent
8bc3040e21
commit
dbfff24288
@ -37,16 +37,19 @@ m6502_device::m6502_device(const machine_config &mconfig, device_type type, cons
|
||||
|
||||
void m6502_device::device_start()
|
||||
{
|
||||
mintf = std::make_unique<mi_default>();
|
||||
mintf = space(AS_PROGRAM).addr_width() > 14 ? std::make_unique<mi_default>() : std::make_unique<mi_default14>();
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
void m6502_device::init()
|
||||
{
|
||||
{
|
||||
space(AS_PROGRAM).cache(mintf->cprogram);
|
||||
space(AS_PROGRAM).specific(mintf->program);
|
||||
space(has_space(AS_OPCODES) ? AS_OPCODES : AS_PROGRAM).cache(mintf->csprogram);
|
||||
if(space(AS_PROGRAM).addr_width() > 14)
|
||||
space(AS_PROGRAM).specific(mintf->program);
|
||||
else
|
||||
space(AS_PROGRAM).specific(mintf->program14);
|
||||
|
||||
sync_w.resolve_safe();
|
||||
|
||||
@ -544,6 +547,15 @@ void m6502_device::mi_default::write(uint16_t adr, uint8_t val)
|
||||
program.write_byte(adr, val);
|
||||
}
|
||||
|
||||
uint8_t m6502_device::mi_default14::read(uint16_t adr)
|
||||
{
|
||||
return program14.read_byte(adr);
|
||||
}
|
||||
|
||||
void m6502_device::mi_default14::write(uint16_t adr, uint8_t val)
|
||||
{
|
||||
program14.write_byte(adr, val);
|
||||
}
|
||||
|
||||
m6502_mcu_device::m6502_mcu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
|
||||
m6502_device(mconfig, type, tag, owner, clock)
|
||||
|
@ -35,8 +35,9 @@ protected:
|
||||
public:
|
||||
memory_access<16, 0, 0, ENDIANNESS_LITTLE>::cache cprogram, csprogram;
|
||||
memory_access<16, 0, 0, ENDIANNESS_LITTLE>::specific program;
|
||||
memory_access<14, 0, 0, ENDIANNESS_LITTLE>::specific program14;
|
||||
|
||||
virtual ~memory_interface() {}
|
||||
virtual ~memory_interface() = default;
|
||||
virtual uint8_t read(uint16_t adr) = 0;
|
||||
virtual uint8_t read_9(uint16_t adr);
|
||||
virtual uint8_t read_sync(uint16_t adr) = 0;
|
||||
@ -47,13 +48,20 @@ protected:
|
||||
|
||||
class mi_default : public memory_interface {
|
||||
public:
|
||||
virtual ~mi_default() {}
|
||||
virtual ~mi_default() = default;
|
||||
virtual uint8_t read(uint16_t adr) override;
|
||||
virtual uint8_t read_sync(uint16_t adr) override;
|
||||
virtual uint8_t read_arg(uint16_t adr) override;
|
||||
virtual void write(uint16_t adr, uint8_t val) override;
|
||||
};
|
||||
|
||||
class mi_default14 : public mi_default {
|
||||
public:
|
||||
virtual ~mi_default14() = default;
|
||||
virtual uint8_t read(uint16_t adr) override;
|
||||
virtual void write(uint16_t adr, uint8_t val) override;
|
||||
};
|
||||
|
||||
enum {
|
||||
STATE_RESET = 0xff00
|
||||
};
|
||||
|
@ -19,30 +19,3 @@ m6504_device::m6504_device(const machine_config &mconfig, const char *tag, devic
|
||||
program_config.m_addr_width = 13;
|
||||
sprogram_config.m_addr_width = 13;
|
||||
}
|
||||
|
||||
void m6504_device::device_start()
|
||||
{
|
||||
mintf = std::make_unique<mi_6504>();
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
uint8_t m6504_device::mi_6504::read(uint16_t adr)
|
||||
{
|
||||
return program.read_byte(adr & 0x1fff);
|
||||
}
|
||||
|
||||
uint8_t m6504_device::mi_6504::read_sync(uint16_t adr)
|
||||
{
|
||||
return csprogram.read_byte(adr & 0x1fff);
|
||||
}
|
||||
|
||||
uint8_t m6504_device::mi_6504::read_arg(uint16_t adr)
|
||||
{
|
||||
return cprogram.read_byte(adr & 0x1fff);
|
||||
}
|
||||
|
||||
void m6504_device::mi_6504::write(uint16_t adr, uint8_t val)
|
||||
{
|
||||
program.write_byte(adr & 0x1fff, val);
|
||||
}
|
||||
|
@ -16,18 +16,6 @@
|
||||
class m6504_device : public m6502_device {
|
||||
public:
|
||||
m6504_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
class mi_6504 : public memory_interface {
|
||||
public:
|
||||
virtual ~mi_6504() {}
|
||||
virtual uint8_t read(uint16_t adr) override;
|
||||
virtual uint8_t read_sync(uint16_t adr) override;
|
||||
virtual uint8_t read_arg(uint16_t adr) override;
|
||||
virtual void write(uint16_t adr, uint8_t val) override;
|
||||
};
|
||||
|
||||
virtual void device_start() override;
|
||||
};
|
||||
|
||||
|
||||
|
@ -19,30 +19,3 @@ m6507_device::m6507_device(const machine_config &mconfig, const char *tag, devic
|
||||
program_config.m_addr_width = 13;
|
||||
sprogram_config.m_addr_width = 13;
|
||||
}
|
||||
|
||||
void m6507_device::device_start()
|
||||
{
|
||||
mintf = std::make_unique<mi_6507>();
|
||||
|
||||
init();
|
||||
}
|
||||
|
||||
uint8_t m6507_device::mi_6507::read(uint16_t adr)
|
||||
{
|
||||
return program.read_byte(adr & 0x1fff);
|
||||
}
|
||||
|
||||
uint8_t m6507_device::mi_6507::read_sync(uint16_t adr)
|
||||
{
|
||||
return csprogram.read_byte(adr & 0x1fff);
|
||||
}
|
||||
|
||||
uint8_t m6507_device::mi_6507::read_arg(uint16_t adr)
|
||||
{
|
||||
return cprogram.read_byte(adr & 0x1fff);
|
||||
}
|
||||
|
||||
void m6507_device::mi_6507::write(uint16_t adr, uint8_t val)
|
||||
{
|
||||
program.write_byte(adr & 0x1fff, val);
|
||||
}
|
||||
|
@ -16,18 +16,6 @@
|
||||
class m6507_device : public m6502_device {
|
||||
public:
|
||||
m6507_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
class mi_6507 : public memory_interface {
|
||||
public:
|
||||
virtual ~mi_6507() {}
|
||||
virtual uint8_t read(uint16_t adr) override;
|
||||
virtual uint8_t read_sync(uint16_t adr) override;
|
||||
virtual uint8_t read_arg(uint16_t adr) override;
|
||||
virtual void write(uint16_t adr, uint8_t val) override;
|
||||
};
|
||||
|
||||
virtual void device_start() override;
|
||||
};
|
||||
|
||||
|
||||
|
@ -599,25 +599,25 @@ public:
|
||||
// native read
|
||||
NativeType read_native(offs_t offset, NativeType mask)
|
||||
{
|
||||
return dispatch_read<Level, Width, AddrShift, Endian>(m_addrmask, offset, mask, m_dispatch_read);;
|
||||
return dispatch_read<Level, Width, AddrShift, Endian>(offs_t(-1), offset & m_addrmask, mask, m_dispatch_read);;
|
||||
}
|
||||
|
||||
// mask-less native read
|
||||
NativeType read_native(offs_t offset)
|
||||
{
|
||||
return dispatch_read<Level, Width, AddrShift, Endian>(m_addrmask, offset, uX(0xffffffffffffffffU), m_dispatch_read);
|
||||
return dispatch_read<Level, Width, AddrShift, Endian>(offs_t(-1), offset & m_addrmask, uX(0xffffffffffffffffU), m_dispatch_read);
|
||||
}
|
||||
|
||||
// native write
|
||||
void write_native(offs_t offset, NativeType data, NativeType mask)
|
||||
{
|
||||
dispatch_write<Level, Width, AddrShift, Endian>(m_addrmask, offset, data, mask, m_dispatch_write);;
|
||||
dispatch_write<Level, Width, AddrShift, Endian>(offs_t(-1), offset & m_addrmask, data, mask, m_dispatch_write);;
|
||||
}
|
||||
|
||||
// mask-less native write
|
||||
void write_native(offs_t offset, NativeType data)
|
||||
{
|
||||
dispatch_write<Level, Width, AddrShift, Endian>(m_addrmask, offset, data, uX(0xffffffffffffffffU), m_dispatch_write);;
|
||||
dispatch_write<Level, Width, AddrShift, Endian>(offs_t(-1), offset & m_addrmask, data, uX(0xffffffffffffffffU), m_dispatch_write);;
|
||||
}
|
||||
|
||||
// virtual access to these functions
|
||||
|
@ -1053,11 +1053,11 @@ private:
|
||||
const handler_entry_write<Width, AddrShift, Endian> *const *m_dispatch_write;
|
||||
|
||||
NativeType read_native(offs_t address, NativeType mask = ~NativeType(0)) {
|
||||
return dispatch_read<Level, Width, AddrShift, Endian>(m_addrmask, address, mask, m_dispatch_read);;
|
||||
return dispatch_read<Level, Width, AddrShift, Endian>(offs_t(-1), address & m_addrmask, mask, m_dispatch_read);;
|
||||
}
|
||||
|
||||
void write_native(offs_t address, NativeType data, NativeType mask = ~NativeType(0)) {
|
||||
dispatch_write<Level, Width, AddrShift, Endian>(m_addrmask, address, data, mask, m_dispatch_write);;
|
||||
dispatch_write<Level, Width, AddrShift, Endian>(offs_t(-1), address & m_addrmask, data, mask, m_dispatch_write);;
|
||||
}
|
||||
|
||||
void set(address_space *space, std::pair<const void *, const void *> rw);
|
||||
@ -1272,7 +1272,7 @@ public:
|
||||
|
||||
template<int Level, int Width, int AddrShift, endianness_t Endian> void specific(emu::detail::memory_access_specific<Level, Width, AddrShift, Endian> &v) {
|
||||
if(Level != emu::detail::handler_entry_dispatch_level(m_config.addr_width()))
|
||||
fatalerror("Requesting specific() with wrong level, bad address witdh (the config says %d\n", m_config.addr_width());
|
||||
fatalerror("Requesting specific() with wrong level, bad address width (the config says %d)\n", m_config.addr_width());
|
||||
if(AddrShift != m_config.addr_shift())
|
||||
fatalerror("Requesting specific() with address shift %d while the config says %d\n", AddrShift, m_config.addr_shift());
|
||||
if(8 << Width != m_config.data_width())
|
||||
|
@ -355,7 +355,7 @@ void DebuggerMemView::mousePressEvent(QMouseEvent* event)
|
||||
const offs_t address = memView->addressAtCursorPosition(clickViewPosition);
|
||||
const debug_view_memory_source* source = downcast<const debug_view_memory_source*>(memView->source());
|
||||
address_space* addressSpace = source->space();
|
||||
offs_t a = address & space->logaddrmask();
|
||||
offs_t a = address & addressSpace->logaddrmask();
|
||||
if (!addressSpace->device().memory().translate(addressSpace->spacenum(), TRANSLATE_READ_DEBUG, a))
|
||||
{
|
||||
QToolTip::showText(QCursor::pos(), "Bad address", nullptr);
|
||||
@ -367,19 +367,19 @@ void DebuggerMemView::mousePressEvent(QMouseEvent* event)
|
||||
switch (addressSpace->data_width())
|
||||
{
|
||||
case 8:
|
||||
memValue = space->read_byte(a);
|
||||
memValue = addressSpace->read_byte(a);
|
||||
break;
|
||||
|
||||
case 16:
|
||||
memValue = space->read_word_unaligned(a);
|
||||
memValue = addressSpace->read_word_unaligned(a);
|
||||
break;
|
||||
|
||||
case 32:
|
||||
memValue = space->read_dword_unaligned(a);
|
||||
memValue = addressSpace->read_dword_unaligned(a);
|
||||
break;
|
||||
|
||||
case 64:
|
||||
memValue = space->read_qword_unaligned(a);
|
||||
memValue = addressSpace->read_qword_unaligned(a);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include "deviceswindow.h"
|
||||
|
||||
#include "debug/debugcpu.h"
|
||||
#include "debug/debugcon.h"
|
||||
|
||||
bool WindowQt::s_refreshAll = false;
|
||||
bool WindowQt::s_hideAll = false;
|
||||
|
Loading…
Reference in New Issue
Block a user