summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/nsc810.cpp
diff options
context:
space:
mode:
author MooglyGuy <MooglyGuy@users.noreply.github.com>2022-06-04 09:14:21 +0200
committer GitHub <noreply@github.com>2022-06-04 17:14:21 +1000
commit1bc5484698bb746c6f9f7dae58b005d2472f1215 (patch)
tree54d6a10bc728cc7ce9858d771788a595e324141c /src/devices/machine/nsc810.cpp
parentcd83335913a6cfe4aa2db720692fa34487b1d7a3 (diff)
- Removed device_timer, device_timer_id, et al in favor of direct callback members. (#9788)
Primarily, this removes device_t::device_timer, device_t::timer_set, device_t::synchronize, device_t::timer_expired, and device_timer_id. Use of device_timer often resulted in unnecessary trampolining in addition to switch/case overhead on a driver/device level, and additional logic to manage delegated vs. ID-based timers on a core level. In the worst cases, devices were performing a switch/case with only one valid case. device_scheduler::timer_set is marked deprecated as the only remaining direct uses are via the Lua engine and a few drivers that need refactoring anyway. The remaining uses occur via device_scheduler::synchronize. As a middle ground between the extremely short timer_alloc() and the extremely long machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(widget_device::contoso_tick), this)), a helper function in device_t has been added which can be invoked with the following syntax: timer_alloc(FUNC(widget_device::contoso_tick), this) - Additional changes/cleanups performed along the way: - Converted to use logmacro: * src/devices/bus/ieee488/hp9895.cpp * src/devices/bus/ieee488/remote488.cpp * src/devices/bus/isa/hdc.cpp * src/devices/bus/isa/omti8621.cpp * src/devices/bus/isa/sc499.cpp * src/devices/bus/vip/vp550.cpp * src/devices/cpu/i86/i186.cpp * src/devices/cpu/lc8670/lc8670.cpp * src/devices/machine/68230pit.cpp * src/devices/machine/corvushd.cpp * src/devices/machine/ds1994.cpp * src/devices/machine/ticket.cpp * src/mame/audio/pinsnd88.cpp * src/mame/drivers/notetaker.cpp * src/mame/machine/asic65.cpp * src/mame/machine/rmnimbus.cpp * src/mame/machine/victor9k_fdc.cpp * src/mame/video/uv201.cpp - Made usage of m_member prefix consistent: * src/devices/bus/isa/hdc.cpp * src/devices/bus/isa/omti8621.cpp * src/devices/bus/vme/vme_fccpu20.cpp * src/devices/machine/ds1386.cpp * src/devices/machine/i7220.cpp - Spacing consistency pass: * src/devices/bus/isa/hdc.cpp * src/devices/bus/isa/omti8621.cpp * src/devices/bus/thomson/nanoresau.cpp * src/devices/bus/ti99/internal/992board.cpp * src/devices/bus/ti99/internal/genkbd.cpp * src/devices/bus/ti99/internal/joyport/handset.cpp * src/devices/bus/vme/vme_fccpu20.cpp * src/devices/cpu/i86/i186.cpp * src/devices/cpu/lc8670/lc8670.cpp * src/devices/machine/68230pit.cpp * src/devices/machine/cop452.cpp * src/devices/machine/corvushd.cpp * src/devices/machine/hp_dc100_tape.cpp * src/devices/machine/hp_taco.cpp * src/devices/machine/meters.cpp * src/devices/machine/microtch.cpp * src/devices/machine/phi.cpp * src/devices/video/ef9365.cpp * src/devices/video/v9938.cpp * src/mame/drivers/alphaskop41xx.cpp * src/mame/drivers/myb3k.cpp * src/mame/drivers/notetaker.cpp * src/mame/drivers/wpc_an.cpp * src/mame/machine/midikbd.cpp * src/mame/machine/rmnimbus.cpp * src/mame/machine/wpc_lamp.cpp * src/mame/machine/wpc_out.cpp - Removed string-based ioport lookups: * src/devices/bus/ti99/internal/joyport/handset.cpp * src/devices/bus/ti99/internal/joyport/mecmouse.cpp * src/devices/bus/vme/vme_hcpu30.cpp * src/mame/machine/k7659kb.cpp * src/mame/machine/ti85.cpp - Adjustments to grammar/wording in comments * src/devices/bus/sms_ctrl/lphaser.cpp * src/devices/bus/sms_ctrl/sports.cpp * src/devices/bus/snes/event.cpp * src/devices/bus/snes/sa1.cpp * src/devices/bus/thomson/nanoresau.cpp * src/devices/bus/z88/z88.cpp * src/devices/machine/ds1386.cpp * src/devices/machine/vic_pl192.cpp - Favored BIT() macro for single-bit checks * src/devices/bus/ti99/internal/992board.cpp * src/devices/bus/ti99/joyport/handset.cpp * src/mame/drivers/notetaker.cpp * src/mame/machine/wpc_lamp.cpp * src/mame/machine/wpc_out.cpp - Removed C89-style variable declarations when noticed * src/devices/bus/isa/hdc.cpp * src/devices/bus/sms_ctrl/lphaser.cpp * src/devices/bus/ti99/joyport/mecmouse.cpp * src/devices/machine/acorn_vidc.cpp * src/devices/sound/ymz280b.cpp * src/devices/video/vic4567.cpp - Removed FUNCNAME to avoid compiler-specific #define checks in devices * src/devices/bus/vme/vme_fccpu20.cpp * src/devices/bus/vme/vme_hcpu30.cpp * src/devices/machine/68230pit.cpp * src/devices/machine/mc14411.cpp * src/mame/drivers/myb3k.cpp - Removed unecessary member prefixes/suffixes * src/devices/video/ef9340_1.cpp * src/mame/drivers/fuukifg2.cpp * src/mame/drivers/fuukifg3.cpp * src/mame/drivers/intv.cpp * src/mame/drivers/simpsons.cpp * src/mame/drivers/socrates.cpp * src/mame/drivers/special_gambl.cpp * src/mame/drivers/sprint4.cpp * src/mame/drivers/ti990_10.cpp * src/mame/drivers/tubep.cpp * src/mame/drivers/vectrex.cpp * src/mame/drivers/wpc_an.cpp * src/mame/drivers/wpc_dot.cpp * src/mame/drivers/wpc_flip1.cpp * src/mame/drivers/wpc_flip2.cpp * src/mame/machine/z80ne.cpp * src/mame/video/rollerg.cpp - Switched to lower-case hex constants * src/devices/video/ef9365.cpp * src/mame/machine/rmnimbus.cpp - Re-ordered driver overrides and function members * src/mame/drivers/boxer.cpp * src/mame/drivers/eurocom2.cpp * src/mame/drivers/exidy.cpp * src/mame/drivers/gpworld.cpp * src/mame/drivers/h19.cpp * src/mame/drivers/ibmpcjr.cpp * src/mame/drivers/mekd5.cpp * src/mame/drivers/mgolf.cpp * src/mame/drivers/myb3k.cpp * src/mame/drivers/nightmare.cpp * src/mame/drivers/notetaker.cpp * src/mame/drivers/ptcsol.cpp * src/mame/drivers/pwrview.cpp * src/mame/drivers/rabbit.cpp * src/mame/drivers/sitcom.cpp * src/mame/drivers/socrates.cpp * src/mame/drivers/sprint4.cpp * src/mame/drivers/techno.cpp * src/mame/drivers/thayers.cpp * src/mame/drivers/ti990_10.cpp * src/mame/drivers/ti990_4.cpp * src/mame/drivers/tv912.cpp * src/mame/drivers/tv990.cpp * src/mame/drivers/uchroma68.cpp * src/mame/drivers/vk100.cpp * src/mame/drivers/votrhv.cpp * src/mame/drivers/wicat.cpp * src/mame/drivers/wpc_an.cpp * src/mame/includes/abc80.h * src/mame/includes/asterix.h * src/mame/includes/fuukifg2.h * src/mame/includes/fuukifg3.h * src/mame/includes/gunbustr.h * src/mame/includes/intv.h * src/mame/includes/namcona1.h * src/mame/includes/newbrain.h * src/mame/includes/poly.h * src/mame/includes/prof80.h * src/mame/includes/rollerg.h * src/mame/includes/s11.h * src/mame/includes/segahang.h * src/mame/includes/simpsons.h * src/mame/includes/spacefb.h * src/mame/includes/tandy2k.h * src/mame/includes/trucocl.h * src/mame/includes/tubebp.h * src/mame/includes/vidbrain.h * src/mame/includes/wolfpack.h * src/mame/includes/wpc_dot.h - Made capitalization consistent on class members * src/devices/machine/meters.cpp * src/mame/drivers/namcona1.cpp * src/mame/drivers/notetaker.cpp -src/devices/bus/isa/hdc.cpp: * Removed fixed-size std::vector in favor of std::unique_ptr -src/devices/bus/isa/s3virge.cpp: * Moved unusually large (for a header) functions into .cpp from header -src/devices/bus/vip/vp550.cpp * Switched to required_device_array to simplify code paths -src/devices/machine/arm_iomd.cpp * Added initializers to constructor * Favored std::size over fixed static sizes -src/devices/machine/ds1386.cpp * Moved register #defines into header enums -src/devices/machine/mc68901.cpp * Removed unnecessary parameters and emu_timer::enable calls -src/devices/machine/mccs1850.cpp * Removed inline overuse -src/devices/machine/meters.cpp * Removed unused members -src/devices/machine/mos6526.cpp * Removed inline overuse -src/devices/machine/nsc810.cpp * Converted to arrays rather than individually-numbered members -src/devices/machine/pxa255.cpp * Simplified DMA transfer code -src/devices/machine/saa1043.cpp * Removed extraneous members in favor of resolve_all_safe -src/devices/machine/vic_pl192.cpp * Shifted constructors, start-up, and maps to be at the top of the source file -src/devices/machine/z8536.cpp * Removed stray uses of device_timer_id -src/devices/sound/cdp1869.cpp * Removed inline overuse -src/devices/sound/mos7360.cpp * Converted to arrays rather than individually-numbered members -src/emu/device.cpp * Removed ID-based timer_alloc * Removed timer_set * Removed synchronize * Removed timer_expired * Added shorthand timer_alloc to avoid lengthy machine().scheduler().timer_alloc() calls -src/emu/schedule.cpp * Removed now-unused m_id and m_device members -src/mame/audio/alesis.cpp * Added initializers to constructor -src/mame/drivers/alto2.cpp * Removed custom-named driver init in favor of driver_init override * Removed octal constant in favor of more standard hex -src/mame/drivers/astinvad.cpp * Fixed 'kamizake' typo -src/mame/drivers/tm990189.cpp * Removed unnecessary machine reset override -src/mame/drivers/unichamp.cpp * Removed custom-named driver init in favor of driver_init override -src/mame/drivers/votrhv.cpp * Fixed ROM_LOAD macros and region() usage in memory maps -src/mame/machine/victor9k_fdc.cpp * Made bracing style consistent across the file -src/mame/video/gime.cpp * Removed unnecessary void specifiers in function prototypes
Diffstat (limited to 'src/devices/machine/nsc810.cpp')
-rw-r--r--src/devices/machine/nsc810.cpp218
1 files changed, 100 insertions, 118 deletions
diff --git a/src/devices/machine/nsc810.cpp b/src/devices/machine/nsc810.cpp
index c077a86eff1..a416e6ccca4 100644
--- a/src/devices/machine/nsc810.cpp
+++ b/src/devices/machine/nsc810.cpp
@@ -29,12 +29,6 @@ nsc810_device::nsc810_device(const machine_config &mconfig, const char *tag, dev
m_portA_latch(0), m_portB_latch(0), m_portC_latch(0),
m_ddrA(0), m_ddrB(0), m_ddrC(0),
m_mode(0),
- m_timer0(nullptr), m_timer1(nullptr),
- m_timer0_mode(0), m_timer1_mode(0),
- m_timer0_counter(0), m_timer1_counter(0),
- m_timer0_base(0), m_timer1_base(0),
- m_timer0_running(false), m_timer1_running(false),
- m_timer0_clock(0), m_timer1_clock(0),
m_ramselect(false),
m_portA_r(*this),
m_portB_r(*this),
@@ -42,9 +36,14 @@ nsc810_device::nsc810_device(const machine_config &mconfig, const char *tag, dev
m_portA_w(*this),
m_portB_w(*this),
m_portC_w(*this),
- m_timer0_out(*this),
- m_timer1_out(*this)
+ m_timer_out(*this)
{
+ std::fill(std::begin(m_timer), std::end(m_timer), nullptr);
+ std::fill(std::begin(m_timer_mode), std::end(m_timer_mode), 0);
+ std::fill(std::begin(m_timer_counter), std::end(m_timer_counter), 0);
+ std::fill(std::begin(m_timer_base), std::end(m_timer_base), 0);
+ std::fill(std::begin(m_timer_running), std::end(m_timer_running), false);
+ std::fill(std::begin(m_timer_clock), std::end(m_timer_clock), 0);
}
void nsc810_device::device_start()
@@ -55,17 +54,16 @@ void nsc810_device::device_start()
m_portA_w.resolve_safe();
m_portB_w.resolve_safe();
m_portC_w.resolve_safe();
- m_timer0_out.resolve_safe();
- m_timer1_out.resolve_safe();
+ m_timer_out.resolve_all_safe();
m_portA_w(0);
m_portB_w(0);
m_portC_w(0);
- m_timer0_out(0);
- m_timer1_out(0);
+ m_timer_out[0](0);
+ m_timer_out[1](0);
- m_timer0 = timer_alloc(TIMER0_CLOCK);
- m_timer1 = timer_alloc(TIMER1_CLOCK);
+ m_timer[0] = timer_alloc(FUNC(nsc810_device::timer_tick<0>), this);
+ m_timer[1] = timer_alloc(FUNC(nsc810_device::timer_tick<1>), this);
}
void nsc810_device::device_reset()
@@ -77,43 +75,27 @@ void nsc810_device::device_reset()
m_ddrB = 0;
m_ddrC = 0;
m_mode = 0;
- m_timer0_mode = 0;
- m_timer1_mode = 0;
- m_timer0_counter = 0;
- m_timer1_counter = 0;
- m_timer0_running = false;
- m_timer1_running = false;
+ m_timer_mode[0] = 0;
+ m_timer_mode[1] = 0;
+ m_timer_counter[0] = 0;
+ m_timer_counter[1] = 0;
+ m_timer_running[0] = false;
+ m_timer_running[1] = false;
m_ramselect = false;
}
-void nsc810_device::device_timer(emu_timer &timer, device_timer_id id, int param)
+template <int Timer>
+TIMER_CALLBACK_MEMBER(nsc810_device::timer_tick)
{
- switch(id)
+ m_timer_counter[Timer]--;
+ if ((m_timer_mode[Timer] & 0x07) == 0x01 || (m_timer_mode[Timer] & 0x07) == 0x02)
{
- case TIMER0_CLOCK:
- m_timer0_counter--;
- if((m_timer0_mode & 0x07) == 0x01 || (m_timer0_mode & 0x07) == 0x02)
+ if (m_timer_counter[Timer] == 0)
{
- if(m_timer0_counter == 0)
- {
- m_timer0_out(ASSERT_LINE);
- m_timer0_counter = m_timer0_base;
- LOG("NSC810: Timer 0 output set\n");
- }
- }
- break;
- case TIMER1_CLOCK:
- m_timer1_counter--;
- if((m_timer1_mode & 0x07) == 0x01 || (m_timer1_mode & 0x07) == 0x02)
- {
- if(m_timer1_counter == 0)
- {
- m_timer1_out(ASSERT_LINE);
- m_timer1_counter = m_timer1_base;
- LOG("NSC810: Timer 1 output set\n");
- }
+ m_timer_out[Timer](ASSERT_LINE);
+ m_timer_counter[Timer] = m_timer_base[Timer];
+ LOG("NSC810: Timer %d output set\n", Timer);
}
- break;
}
}
@@ -121,70 +103,70 @@ uint8_t nsc810_device::read(offs_t offset)
{
uint8_t res = 0xff;
- if(m_ramselect)
+ if (m_ramselect)
{
// TODO: 128 byte RAM access
}
else
{
// Register access
- switch(offset & 0x1f)
+ switch (offset & 0x1f)
{
case REG_PORTA:
res = m_portA_latch &= m_ddrA;
res |= (m_portA_r() & ~m_ddrA);
- //LOG("NSC810: Port A data read %02x\n",res);
+ //LOG("NSC810: Port A data read %02x\n", res);
break;
case REG_PORTB:
res = m_portB_latch &= m_ddrB;
res |= (m_portB_r() & ~m_ddrB);
- //LOG("NSC810: Port B data read %02x\n",res);
+ //LOG("NSC810: Port B data read %02x\n", res);
break;
case REG_PORTC:
res = m_portC_latch &= m_ddrC;
res |= (m_portC_r() & ~m_ddrC);
- //LOG("NSC810: Port C data read %02x\n",res);
+ //LOG("NSC810: Port C data read %02x\n", res);
break;
case REG_MODE_TIMER0:
- res = m_timer0_mode;
+ res = m_timer_mode[0];
break;
case REG_MODE_TIMER1:
- res = m_timer1_mode;
+ res = m_timer_mode[1];
break;
case REG_TIMER0_LOW:
- res = m_timer0_counter & 0xff;
- if((m_timer0_mode & 0x07) == 0x01 || (m_timer0_mode & 0x07) == 0x02)
+ res = m_timer_counter[0] & 0xff;
+ if ((m_timer_mode[0] & 0x07) == 0x01 || (m_timer_mode[0] & 0x07) == 0x02)
{
- m_timer0_out(CLEAR_LINE);
+ m_timer_out[0](CLEAR_LINE);
LOG("NSC810: Timer 0 output reset\n");
}
break;
case REG_TIMER0_HIGH:
- res = m_timer0_counter >> 8;
- if((m_timer0_mode & 0x07) == 0x01 || (m_timer0_mode & 0x07) == 0x02)
+ res = m_timer_counter[0] >> 8;
+ if ((m_timer_mode[0] & 0x07) == 0x01 || (m_timer_mode[0] & 0x07) == 0x02)
{
- m_timer0_out(CLEAR_LINE);
+ m_timer_out[0](CLEAR_LINE);
LOG("NSC810: Timer 0 output reset\n");
}
break;
case REG_TIMER1_LOW:
- res = m_timer1_counter & 0xff;
- if((m_timer1_mode & 0x07) == 0x01 || (m_timer1_mode & 0x07) == 0x02)
+ res = m_timer_counter[1] & 0xff;
+ if ((m_timer_mode[1] & 0x07) == 0x01 || (m_timer_mode[1] & 0x07) == 0x02)
{
- m_timer1_out(0);
+ m_timer_out[1](0);
LOG("NSC810: Timer 1 output reset\n");
}
break;
case REG_TIMER1_HIGH:
- res = m_timer1_counter >> 8;
- if((m_timer1_mode & 0x07) == 0x01 || (m_timer1_mode & 0x07) == 0x02)
+ res = m_timer_counter[1] >> 8;
+ if ((m_timer_mode[1] & 0x07) == 0x01 || (m_timer_mode[1] & 0x07) == 0x02)
{
- m_timer1_out(0);
+ m_timer_out[1](0);
LOG("NSC810: Timer 1 output reset\n");
}
break;
default:
- LOG("NSC810: unused port %02x read\n",offset);
+ LOG("NSC810: unused port %02x read\n", offset);
}
}
return res;
@@ -194,41 +176,41 @@ void nsc810_device::write(offs_t offset, uint8_t data)
{
uint32_t rate;
- if(m_ramselect)
+ if (m_ramselect)
{
// TODO: 128 byte RAM access
}
else
{
// Register access
- switch(offset & 0x1f)
+ switch (offset & 0x1f)
{
case REG_PORTA:
m_portA_latch = data & ~m_ddrA;
m_portA_w((0xff & ~m_ddrA) | (data & m_ddrA));
- LOG("NSC810: Port A data write %02x\n",data);
+ LOG("NSC810: Port A data write %02x\n", data);
break;
case REG_PORTB:
m_portB_latch = data & ~m_ddrB;
m_portB_w((0xff & ~m_ddrB) | (data & m_ddrB));
- LOG("NSC810: Port B data write %02x\n",data);
+ LOG("NSC810: Port B data write %02x\n", data);
break;
case REG_PORTC:
m_portC_latch = data & ~m_ddrC;
m_portC_w((0xff & ~m_ddrC) | (data & m_ddrC));
- LOG("NSC810: Port C data write %02x\n",data);
+ LOG("NSC810: Port C data write %02x\n", data);
break;
case REG_DDRA:
m_ddrA = data;
- LOG("NSC810: Port A direction write %02x\n",data);
+ LOG("NSC810: Port A direction write %02x\n", data);
break;
case REG_DDRB:
m_ddrB = data;
- LOG("NSC810: Port B direction write %02x\n",data);
+ LOG("NSC810: Port B direction write %02x\n", data);
break;
case REG_DDRC:
m_ddrC = data;
- LOG("NSC810: Port C direction write %02x\n",data);
+ LOG("NSC810: Port C direction write %02x\n", data);
break;
case REG_MODE_DEF:
if ((data & 0x01) == 0x00)
@@ -239,106 +221,106 @@ void nsc810_device::write(offs_t offset, uint8_t data)
m_mode = 2;
else if ((data & 0x07) == 0x07)
m_mode = 3;
- LOG("NSC810: Mode Definition write %02x\n",data);
+ LOG("NSC810: Mode Definition write %02x\n", data);
break;
case REG_PORTA_BITCLR:
m_portA_latch &= ~data;
m_portA_w((0xff & ~m_ddrA) | (m_portA_latch & m_ddrA));
- LOG("NSC810: Port A bit-clear write %02x (PA=%02x)\n",data,m_portA_latch);
+ LOG("NSC810: Port A bit-clear write %02x (PA=%02x)\n", data, m_portA_latch);
break;
case REG_PORTB_BITCLR:
m_portB_latch &= ~data;
m_portB_w((0xff & ~m_ddrB) | (m_portB_latch & m_ddrB));
- LOG("NSC810: Port B bit-clear write %02x (PB=%02x)\n",data,m_portB_latch);
+ LOG("NSC810: Port B bit-clear write %02x (PB=%02x)\n", data, m_portB_latch);
break;
case REG_PORTC_BITCLR:
m_portC_latch &= ~data;
m_portC_w((0xff & ~m_ddrC) | (m_portC_latch & m_ddrC));
- LOG("NSC810: Port C bit-clear write %02x (PC=%02x)\n",data,m_portC_latch);
+ LOG("NSC810: Port C bit-clear write %02x (PC=%02x)\n", data, m_portC_latch);
break;
case REG_PORTA_BITSET:
m_portA_latch |= data;
m_portA_w((0xff & ~m_ddrA) | (m_portA_latch & m_ddrA));
- LOG("NSC810: Port A bit-set write %02x (PA=%02x)\n",data,m_portA_latch);
+ LOG("NSC810: Port A bit-set write %02x (PA=%02x)\n", data, m_portA_latch);
break;
case REG_PORTB_BITSET:
m_portB_latch |= data;
m_portB_w((0xff & ~m_ddrB) | (m_portB_latch & m_ddrB));
- LOG("NSC810: Port B bit-set write %02x (PB=%02x)\n",data,m_portB_latch);
+ LOG("NSC810: Port B bit-set write %02x (PB=%02x)\n", data, m_portB_latch);
break;
case REG_PORTC_BITSET:
m_portC_latch |= data;
m_portC_w((0xff & ~m_ddrC) | (m_portC_latch & m_ddrC));
- LOG("NSC810: Port C bit-set write %02x (PC=%02x)\n",data,m_portC_latch);
+ LOG("NSC810: Port C bit-set write %02x (PC=%02x)\n", data, m_portC_latch);
break;
case REG_TIMER0_LOW:
- m_timer0_base = (m_timer0_base & 0xff00) | data;
- m_timer0_counter = (m_timer0_counter & 0xff00) | data;
- LOG("NSC810: Timer 0 low-byte write %02x (base=%04x)\n",data,m_timer0_base);
+ m_timer_base[0] = (m_timer_base[0] & 0xff00) | data;
+ m_timer_counter[0] = (m_timer_counter[0] & 0xff00) | data;
+ LOG("NSC810: Timer 0 low-byte write %02x (base=%04x)\n", data, m_timer_base[0]);
break;
case REG_TIMER0_HIGH:
- m_timer0_base = (m_timer0_base & 0x00ff) | (data << 8);
- m_timer0_counter = (m_timer0_counter & 0x00ff) | (data << 8);
- LOG("NSC810: Timer 0 high-byte write %02x (base=%04x)\n",data,m_timer0_base);
+ m_timer_base[0] = (m_timer_base[0] & 0x00ff) | (data << 8);
+ m_timer_counter[0] = (m_timer_counter[0] & 0x00ff) | (data << 8);
+ LOG("NSC810: Timer 0 high-byte write %02x (base=%04x)\n", data, m_timer_base[0]);
break;
case REG_TIMER1_LOW:
- m_timer1_base = (m_timer1_base & 0xff00) | data;
- m_timer1_counter = (m_timer1_counter & 0xff00) | data;
- LOG("NSC810: Timer 1 low-byte write %02x (base=%04x)\n",data,m_timer1_base);
+ m_timer_base[1] = (m_timer_base[1] & 0xff00) | data;
+ m_timer_counter[1] = (m_timer_counter[1] & 0xff00) | data;
+ LOG("NSC810: Timer 1 low-byte write %02x (base=%04x)\n", data, m_timer_base[1]);
break;
case REG_TIMER1_HIGH:
- m_timer1_base = (m_timer1_base & 0x00ff) | (data << 8);
- m_timer1_counter = (m_timer1_counter & 0x00ff) | (data << 8);
- LOG("NSC810: Timer 1 high-byte write %02x (base=%04x)\n",data,m_timer1_base);
+ m_timer_base[1] = (m_timer_base[1] & 0x00ff) | (data << 8);
+ m_timer_counter[1] = (m_timer_counter[1] & 0x00ff) | (data << 8);
+ LOG("NSC810: Timer 1 high-byte write %02x (base=%04x)\n", data, m_timer_base[1]);
break;
case REG_TIMER0_STOP:
- m_timer0_running = false;
- m_timer0->reset();
- LOG("NSC810: Timer 0 Stop write %02x\n",tag(),data);
+ m_timer_running[0] = false;
+ m_timer[0]->reset();
+ LOG("NSC810: Timer 0 Stop write %02x\n", tag(), data);
break;
case REG_TIMER0_START:
- if((m_timer0_mode & 0x07) != 0x00 && (m_timer0_mode & 0x07) != 0x07)
+ if ((m_timer_mode[0] & 0x07) != 0x00 && (m_timer_mode[0] & 0x07) != 0x07)
{
- m_timer0_running = true;
- if(m_timer0_mode & 0x10)
- rate = m_timer0_clock / 64;
+ m_timer_running[0] = true;
+ if (m_timer_mode[0] & 0x10)
+ rate = m_timer_clock[0] / 64;
else
- if(m_timer0_mode & 0x08)
- rate = m_timer0_clock / 2;
+ if (m_timer_mode[0] & 0x08)
+ rate = m_timer_clock[0] / 2;
else
- rate = m_timer0_clock;
- m_timer0->adjust(attotime::zero,0,attotime::from_hz(rate));
+ rate = m_timer_clock[0];
+ m_timer[0]->adjust(attotime::zero, 0, attotime::from_hz(rate));
}
- LOG("NSC810: Timer 0 Start write %02x\n",data);
+ LOG("NSC810: Timer 0 Start write %02x\n", data);
break;
case REG_TIMER1_STOP:
- m_timer1_running = false;
- m_timer1->reset();
- LOG("NSC810: Timer 1 Stop write %02x\n",data);
+ m_timer_running[1] = false;
+ m_timer[1]->reset();
+ LOG("NSC810: Timer 1 Stop write %02x\n", data);
break;
case REG_TIMER1_START:
- if((m_timer1_mode & 0x07) != 0x00 && (m_timer1_mode & 0x07) != 0x07)
+ if ((m_timer_mode[1] & 0x07) != 0x00 && (m_timer_mode[1] & 0x07) != 0x07)
{
- m_timer1_running = true;
+ m_timer_running[1] = true;
// no /64 prescaler on timer 1
- if(m_timer0_mode & 0x08)
- rate = m_timer0_clock / 2;
+ if (m_timer_mode[0] & 0x08)
+ rate = m_timer_clock[0] / 2;
else
- rate = m_timer0_clock;
- m_timer1->adjust(attotime::zero,0,attotime::from_hz(rate));
+ rate = m_timer_clock[0];
+ m_timer[1]->adjust(attotime::zero, 0, attotime::from_hz(rate));
}
- LOG("NSC810: Timer 1 Start write %02x\n",data);
+ LOG("NSC810: Timer 1 Start write %02x\n", data);
break;
case REG_MODE_TIMER0:
- m_timer0_mode = data;
- LOG("NSC810: Timer 0 Mode write %02x\n",data);
+ m_timer_mode[0] = data;
+ LOG("NSC810: Timer 0 Mode write %02x\n", data);
break;
case REG_MODE_TIMER1:
- m_timer1_mode = data;
- LOG("NSC810: Timer 1 Mode write %02x\n",data);
+ m_timer_mode[1] = data;
+ LOG("NSC810: Timer 1 Mode write %02x\n", data);
break;
default:
- logerror("NSC810: Unused register %02x write %02x\n",offset,data);
+ logerror("NSC810: Unused register %02x write %02x\n", offset, data);
}
}
}