summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/video/tms9928a.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/video/tms9928a.cpp')
-rw-r--r--src/devices/video/tms9928a.cpp53
1 files changed, 27 insertions, 26 deletions
diff --git a/src/devices/video/tms9928a.cpp b/src/devices/video/tms9928a.cpp
index bc31b1b1db9..c068d8b4ce8 100644
--- a/src/devices/video/tms9928a.cpp
+++ b/src/devices/video/tms9928a.cpp
@@ -52,11 +52,11 @@ DEFINE_DEVICE_TYPE(EFO90501, efo90501_device, "efo90501", "EFO90501 VDP")
*/
void tms9928a_device::memmap(address_map &map)
{
- map.global_mask(0x3fff);
- map(0x0000, 0x3fff).ram();
+ if (!has_configured_map(0))
+ map(0x0000, 0x3fff).ram();
}
-tms9928a_device::tms9928a_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, bool is_50hz, bool is_reva, bool is_99)
+tms9928a_device::tms9928a_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, uint16_t horz_total, bool is_50hz, bool is_reva, bool is_99)
: device_t(mconfig, type, tag, owner, clock)
, device_memory_interface(mconfig, *this)
, device_palette_interface(mconfig, *this)
@@ -64,10 +64,11 @@ tms9928a_device::tms9928a_device(const machine_config &mconfig, device_type type
, m_vram_size(0)
, m_out_int_line_cb(*this)
, m_out_gromclk_cb(*this)
+ , m_total_horz(horz_total)
, m_50hz(is_50hz)
, m_reva(is_reva)
, m_99(is_99)
- , m_space_config("vram", ENDIANNESS_BIG, 8, 14, 0, address_map_constructor(), address_map_constructor(FUNC(tms9928a_device::memmap), this))
+ , m_space_config("vram", ENDIANNESS_BIG, 8, 14, 0, address_map_constructor(FUNC(tms9928a_device::memmap), this))
{
}
@@ -82,57 +83,57 @@ void tms9928a_device::device_config_complete()
if (!screen().refresh_attoseconds())
{
if (m_50hz)
- screen().set_raw(clock() / 2, TOTAL_HORZ, HORZ_DISPLAY_START - 12, HORZ_DISPLAY_START + 256 + 12,
+ screen().set_raw(clock() / 2, m_total_horz, HORZ_DISPLAY_START - 12, HORZ_DISPLAY_START + 256 + 12,
TOTAL_VERT_PAL, VERT_DISPLAY_START_PAL - 12, VERT_DISPLAY_START_PAL + 192 + 12);
else
- screen().set_raw(clock() / 2, TOTAL_HORZ, HORZ_DISPLAY_START - 12, HORZ_DISPLAY_START + 256 + 12,
+ screen().set_raw(clock() / 2, m_total_horz, HORZ_DISPLAY_START - 12, HORZ_DISPLAY_START + 256 + 12,
TOTAL_VERT_NTSC, VERT_DISPLAY_START_NTSC - 12, VERT_DISPLAY_START_NTSC + 192 + 12);
}
}
tms9928a_device::tms9928a_device( const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : tms9928a_device(mconfig, TMS9928A, tag, owner, clock, false, true, true)
+ : tms9928a_device(mconfig, TMS9928A, tag, owner, clock, 342, false, true, true)
{
}
tms9129_device::tms9129_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : tms9928a_device(mconfig, TMS9129, tag, owner, clock, true, true, false)
+ : tms9928a_device(mconfig, TMS9129, tag, owner, clock, 342, true, true, false)
{
}
tms9918_device::tms9918_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : tms9928a_device(mconfig, TMS9918, tag, owner, clock, false, false, true)
+ : tms9928a_device(mconfig, TMS9918, tag, owner, clock, 342, false, false, true)
{
}
tms9918a_device::tms9918a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : tms9928a_device(mconfig, TMS9918A, tag, owner, clock, false, true, true)
+ : tms9928a_device(mconfig, TMS9918A, tag, owner, clock, 342, false, true, true)
{
}
tms9118_device::tms9118_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : tms9928a_device(mconfig, TMS9118, tag, owner, clock, false, true, false)
+ : tms9928a_device(mconfig, TMS9118, tag, owner, clock, 342, false, true, false)
{
}
tms9128_device::tms9128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : tms9928a_device(mconfig, TMS9128, tag, owner, clock, false, true, false)
+ : tms9928a_device(mconfig, TMS9128, tag, owner, clock, 342, false, true, false)
{
}
tms9929_device::tms9929_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : tms9928a_device(mconfig, TMS9929, tag, owner, clock, true, false, true)
+ : tms9928a_device(mconfig, TMS9929, tag, owner, clock, 342, true, false, true)
{
}
tms9929a_device::tms9929a_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : tms9928a_device(mconfig, TMS9929A, tag, owner, clock, true, true, true)
+ : tms9928a_device(mconfig, TMS9929A, tag, owner, clock, 342, true, true, true)
{
}
efo90501_device::efo90501_device( const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : tms9928a_device(mconfig, EFO90501, tag, owner, clock, true, true, true)
+ : tms9928a_device(mconfig, EFO90501, tag, owner, clock, 346, true, true, true)
{
}
@@ -143,7 +144,7 @@ device_memory_interface::space_config_vector tms9928a_device::memory_space_confi
};
}
-READ8_MEMBER( tms9928a_device::read )
+uint8_t tms9928a_device::read(offs_t offset)
{
uint8_t value = 0;
@@ -155,7 +156,7 @@ READ8_MEMBER( tms9928a_device::read )
return value;
}
-WRITE8_MEMBER( tms9928a_device::write )
+void tms9928a_device::write(offs_t offset, uint8_t data)
{
if ((offset & 1) == 0)
vram_write(data);
@@ -165,11 +166,11 @@ WRITE8_MEMBER( tms9928a_device::write )
u8 tms9928a_device::vram_read()
{
- // prevent debugger from changing the address base
- if (machine().side_effects_disabled()) return 0;
-
uint8_t data = m_ReadAhead;
+ // prevent debugger from changing the address base
+ if (machine().side_effects_disabled()) return data;
+
m_ReadAhead = m_vram_space->read_byte(m_Addr);
m_Addr = (m_Addr + 1) & (m_vram_size - 1);
m_latch = 0;
@@ -192,11 +193,11 @@ void tms9928a_device::vram_write(u8 data)
u8 tms9928a_device::register_read()
{
- // prevent debugger from changing the internal state
- if (machine().side_effects_disabled()) return 0;
-
uint8_t data = m_StatusReg;
+ // prevent debugger from changing the internal state
+ if (machine().side_effects_disabled()) return data;
+
m_StatusReg = m_FifthSprite;
check_interrupt();
m_latch = 0;
@@ -371,7 +372,7 @@ void tms9928a_device::device_timer(emu_timer &timer, device_timer_id id, int par
if ( y < 0 || y >= 192 || ! (m_Regs[1] & 0x40) )
{
/* Draw backdrop colour */
- for ( int i = 0; i < TOTAL_HORZ; i++ )
+ for ( int i = 0; i < m_total_horz; i++ )
p[i] = pen(BackColour);
/* vblank is set at the last cycle of the first inactive line */
@@ -650,7 +651,7 @@ void tms9928a_device::device_timer(emu_timer &timer, device_timer_id id, int par
}
/* Right border */
- for ( int i = HORZ_DISPLAY_START + 256; i < TOTAL_HORZ; i++ )
+ for ( int i = HORZ_DISPLAY_START + 256; i < m_total_horz; i++ )
p[i] = pen(BackColour);
}
@@ -734,7 +735,7 @@ void tms9928a_device::device_start()
m_vram_space = &space(AS_DATA);
/* back bitmap */
- m_tmpbmp.allocate(TOTAL_HORZ, TOTAL_VERT_PAL);
+ m_tmpbmp.allocate(m_total_horz, TOTAL_VERT_PAL);
m_line_timer = timer_alloc(TIMER_LINE);
m_gromclk_timer = timer_alloc(GROMCLK);