diff options
author | 2022-06-04 09:14:21 +0200 | |
---|---|---|
committer | 2022-06-04 17:14:21 +1000 | |
commit | 1bc5484698bb746c6f9f7dae58b005d2472f1215 (patch) | |
tree | 54d6a10bc728cc7ce9858d771788a595e324141c /src/devices/machine/nsc810.cpp | |
parent | cd83335913a6cfe4aa2db720692fa34487b1d7a3 (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.cpp | 218 |
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); } } } |