diff options
author | Aaron Giles <aaron@aarongiles.com> | 2010-09-10 23:33:36 +0000 |
---|---|---|
committer | Aaron Giles <aaron@aarongiles.com> | 2010-09-10 23:33:36 +0000 |
commit | 958c161bccdd1f785c0760b3125db616bc60717c (patch) | |
tree | fe5f45f96babff1f1f83fd84b09bcec83a0d1c41 | |
parent | fdc0db7e2683a803e91cff1790730bbdf4b83f21 (diff) |
Made the mc146818 a proper device, modernized it, and added an NVRAM interface
so that drivers don't have to ask it to be manually saved.
-rw-r--r-- | src/emu/devintrf.c | 11 | ||||
-rw-r--r-- | src/emu/devintrf.h | 5 | ||||
-rw-r--r-- | src/emu/machine/mc146818.c | 347 | ||||
-rw-r--r-- | src/emu/machine/mc146818.h | 116 | ||||
-rw-r--r-- | src/emu/timer.c | 25 | ||||
-rw-r--r-- | src/emu/timer.h | 5 | ||||
-rw-r--r-- | src/mame/drivers/aristmk4.c | 10 | ||||
-rw-r--r-- | src/mame/drivers/calchase.c | 5 | ||||
-rw-r--r-- | src/mame/drivers/gamecstl.c | 5 | ||||
-rw-r--r-- | src/mame/drivers/mediagx.c | 5 | ||||
-rw-r--r-- | src/mame/drivers/pcat_dyn.c | 5 | ||||
-rw-r--r-- | src/mame/drivers/pcat_nit.c | 3 | ||||
-rw-r--r-- | src/mame/drivers/pcxt.c | 4 | ||||
-rw-r--r-- | src/mame/drivers/photoply.c | 5 | ||||
-rw-r--r-- | src/mame/drivers/quakeat.c | 2 | ||||
-rw-r--r-- | src/mame/drivers/queen.c | 2 | ||||
-rw-r--r-- | src/mame/drivers/taitowlf.c | 5 | ||||
-rw-r--r-- | src/mame/machine/pcshare.c | 4 |
18 files changed, 339 insertions, 225 deletions
diff --git a/src/emu/devintrf.c b/src/emu/devintrf.c index cf89765c5d6..3123c60c7e5 100644 --- a/src/emu/devintrf.c +++ b/src/emu/devintrf.c @@ -864,6 +864,17 @@ void device_t::device_debug_setup() //------------------------------------------------- +// device_timer - called whenever a device timer +// fires +//------------------------------------------------- + +void device_t::device_timer(emu_timer &timer, int param, void *ptr) +{ + // do nothing by default +} + + +//------------------------------------------------- // notify_clock_changed - notify all interfaces // that the clock has changed //------------------------------------------------- diff --git a/src/emu/devintrf.h b/src/emu/devintrf.h index 07b39c9e548..71029d0cb2d 100644 --- a/src/emu/devintrf.h +++ b/src/emu/devintrf.h @@ -126,6 +126,7 @@ class device_memory_interface; class device_state_interface; struct rom_entry; class machine_config; +class emu_timer; // exception classes @@ -405,6 +406,8 @@ public: const region_info *subregion(const char *tag) const; device_t *subdevice(const char *tag) const; device_t *siblingdevice(const char *tag) const; + template<class T> inline T *subdevice(const char *tag) { return downcast<T *>(subdevice(tag)); } + template<class T> inline T *siblingdevice(const char *tag) { return downcast<T *>(siblingdevice(tag)); } // configuration helpers const device_config &baseconfig() const { return m_baseconfig; } @@ -422,6 +425,7 @@ public: void set_clock_scale(double clockscale); attotime clocks_to_attotime(UINT64 clocks) const; UINT64 attotime_to_clocks(attotime duration) const; + void timer_fired(emu_timer &timer, int param, void *ptr) { device_timer(timer, param, ptr); } // debugging device_debug *debug() const { return m_debug; } @@ -456,6 +460,7 @@ protected: virtual void device_post_load(); virtual void device_clock_changed(); virtual void device_debug_setup(); + virtual void device_timer(emu_timer &timer, int param, void *ptr); //------------------- end derived class overrides diff --git a/src/emu/machine/mc146818.c b/src/emu/machine/mc146818.c index 880af65a408..2abbda53669 100644 --- a/src/emu/machine/mc146818.c +++ b/src/emu/machine/mc146818.c @@ -72,69 +72,150 @@ *********************************************************************/ #include "emu.h" -#include "memconv.h" #include "coreutil.h" #include "machine/mc146818.h" +//************************************************************************** +// DEBUGGING +//************************************************************************** + #define LOG_MC146818 0 -#define MC146818_DATA_SIZE 0x80 -struct mc146818_chip + + +//************************************************************************** +// MACROS +//************************************************************************** + +#define HOURS_24 (m_data[0xb]&2) +#define BCD_MODE !(m_data[0xb]&4) // book has other description! +#define CENTURY m_data[50] +#define YEAR m_data[9] +#define MONTH m_data[8] +#define DAY m_data[7] +#define WEEK_DAY m_data[6] + + + +//************************************************************************** +// DEVICE DEFINITIONS +//************************************************************************** + +const device_type MC146818 = mc146818_device_config::static_alloc_device_config; + + + +//************************************************************************** +// DEVICE CONFIGURATION +//************************************************************************** + +//------------------------------------------------- +// mc146818_device_config - constructor +//------------------------------------------------- + +mc146818_device_config::mc146818_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock) + : device_config(mconfig, static_alloc_device_config, "NVRAM", tag, owner, clock), + device_config_nvram_interface(mconfig, *this), + m_type(MC146818_STANDARD) { - MC146818_TYPE type; +} - UINT8 index; - UINT8 data[MC146818_DATA_SIZE]; - UINT16 eindex; - UINT8 edata[0x2000]; +//------------------------------------------------- +// static_alloc_device_config - allocate a new +// configuration object +//------------------------------------------------- + +device_config *mc146818_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock) +{ + return global_alloc(mc146818_device_config(mconfig, tag, owner, clock)); +} - int updated; /* update ended interrupt flag */ - attotime last_refresh; -}; +//------------------------------------------------- +// alloc_device - allocate a new device object +//------------------------------------------------- -static struct mc146818_chip *mc146818; +device_t *mc146818_device_config::alloc_device(running_machine &machine) const +{ + return auto_alloc(&machine, mc146818_device(machine, *this)); +} +//------------------------------------------------- +// static_set_interface - configuration helper +// to set the interface +//------------------------------------------------- -#define HOURS_24 (mc146818->data[0xb]&2) -#define BCD_MODE !(mc146818->data[0xb]&4) // book has other description! -#define CENTURY mc146818->data[50] -#define YEAR mc146818->data[9] -#define MONTH mc146818->data[8] -#define DAY mc146818->data[7] -#define WEEK_DAY mc146818->data[6] +void mc146818_device_config::static_set_type(device_config *device, mc146818_type type) +{ + downcast<mc146818_device_config *>(device)->m_type = type; +} -static void mc146818_set_base_datetime(running_machine *machine); +//************************************************************************** +// LIVE DEVICE +//************************************************************************** -static TIMER_CALLBACK( mc146818_timer ) +//------------------------------------------------- +// mc146818_device - constructor +//------------------------------------------------- + +mc146818_device::mc146818_device(running_machine &_machine, const mc146818_device_config &config) + : device_t(_machine, config), + device_nvram_interface(_machine, config, *this), + m_config(config), + m_index(0), + m_eindex(0), + m_updated(false), + m_last_refresh(attotime_zero) +{ +} + + +//------------------------------------------------- +// device_start - device-specific startup +//------------------------------------------------- + +void mc146818_device::device_start() +{ + m_last_refresh = timer_get_time(&m_machine); + emu_timer *timer = device_timer_alloc(*this); + timer_adjust_periodic(timer, ATTOTIME_IN_HZ(1), 0, ATTOTIME_IN_HZ(1)); + set_base_datetime(); +} + + +//------------------------------------------------- +// device_timer - handler timer events +//------------------------------------------------- + +void mc146818_device::device_timer(emu_timer &timer, int param, void *ptr) { int year/*, month*/; if (BCD_MODE) { - mc146818->data[0]=bcd_adjust(mc146818->data[0]+1); - if (mc146818->data[0]>=0x60) + m_data[0]=bcd_adjust(m_data[0]+1); + if (m_data[0]>=0x60) { - mc146818->data[0]=0; - mc146818->data[2]=bcd_adjust(mc146818->data[2]+1); - if (mc146818->data[2]>=0x60) + m_data[0]=0; + m_data[2]=bcd_adjust(m_data[2]+1); + if (m_data[2]>=0x60) { - mc146818->data[2]=0; - mc146818->data[4]=bcd_adjust(mc146818->data[4]+1); + m_data[2]=0; + m_data[4]=bcd_adjust(m_data[4]+1); // different handling of hours - if (mc146818->data[4]>=0x24) + if (m_data[4]>=0x24) { - mc146818->data[4]=0; + m_data[4]=0; WEEK_DAY=bcd_adjust(WEEK_DAY+1)%7; DAY=bcd_adjust(DAY+1); //month=bcd_2_dec(MONTH); year=bcd_2_dec(YEAR); - if (mc146818->type!=MC146818_IGNORE_CENTURY) year+=bcd_2_dec(CENTURY)*100; + if (m_config.m_type!=mc146818_device_config::MC146818_IGNORE_CENTURY) year+=bcd_2_dec(CENTURY)*100; else year+=2000; // save for julian_days_in_month calculation DAY=bcd_adjust(DAY+1); if (DAY>gregorian_days_in_month(MONTH, year)) @@ -145,7 +226,7 @@ static TIMER_CALLBACK( mc146818_timer ) { MONTH=1; YEAR=year=bcd_adjust(YEAR+1); - if (mc146818->type!=MC146818_IGNORE_CENTURY) + if (m_config.m_type!=mc146818_device_config::MC146818_IGNORE_CENTURY) { if (year>=0x100) { @@ -160,27 +241,27 @@ static TIMER_CALLBACK( mc146818_timer ) } else { - mc146818->data[0]=mc146818->data[0]+1; - if (mc146818->data[0]>=60) + m_data[0]=m_data[0]+1; + if (m_data[0]>=60) { - mc146818->data[0]=0; - mc146818->data[2]=mc146818->data[2]+1; - if (mc146818->data[2]>=60) { - mc146818->data[2]=0; - mc146818->data[4]=mc146818->data[4]+1; + m_data[0]=0; + m_data[2]=m_data[2]+1; + if (m_data[2]>=60) { + m_data[2]=0; + m_data[4]=m_data[4]+1; // different handling of hours //? - if (mc146818->data[4]>=24) { - mc146818->data[4]=0; + if (m_data[4]>=24) { + m_data[4]=0; WEEK_DAY=(WEEK_DAY+1)%7; year=YEAR; - if (mc146818->type!=MC146818_IGNORE_CENTURY) year+=CENTURY*100; + if (m_config.m_type!=mc146818_device_config::MC146818_IGNORE_CENTURY) year+=CENTURY*100; else year+=2000; // save for julian_days_in_month calculation if (++DAY>gregorian_days_in_month(MONTH, year)) { DAY=1; if (++MONTH>12) { MONTH=1; YEAR++; - if (mc146818->type!=MC146818_IGNORE_CENTURY) { + if (m_config.m_type!=mc146818_device_config::MC146818_IGNORE_CENTURY) { if (YEAR>=100) { CENTURY++;YEAR=0; } } else { YEAR%=100; @@ -191,218 +272,162 @@ static TIMER_CALLBACK( mc146818_timer ) } } } - mc146818->updated = 1; /* clock has been updated */ - mc146818->last_refresh = timer_get_time(machine); + m_updated = true; /* clock has been updated */ + m_last_refresh = timer_get_time(&m_machine); } -void mc146818_init(running_machine *machine, MC146818_TYPE type) +//------------------------------------------------- +// nvram_default - called to initialize NVRAM to +// its default state +//------------------------------------------------- + +void mc146818_device::nvram_default() { - mc146818 = auto_alloc_clear(machine, struct mc146818_chip); - mc146818->type = type; - mc146818->last_refresh = timer_get_time(machine); - timer_pulse(machine, ATTOTIME_IN_HZ(1), NULL, 0, mc146818_timer); - mc146818_set_base_datetime(machine); + set_base_datetime(); } +//------------------------------------------------- +// nvram_read - called to read NVRAM from the +// .nv file +//------------------------------------------------- -void mc146818_load(running_machine *machine) +void mc146818_device::nvram_read(mame_file &file) { - mame_file *file; - - file = nvram_fopen(machine, OPEN_FLAG_READ); - if (file) - { - mc146818_load_stream(file); - mame_fclose(file); - } + mame_fread(&file, m_data, sizeof(m_data)); } +//------------------------------------------------- +// nvram_write - called to write NVRAM to the +// .nv file +//------------------------------------------------- -void mc146818_load_stream(mame_file *file) +void mc146818_device::nvram_write(mame_file &file) { - mame_fread(file, mc146818->data, sizeof(mc146818->data)); + mame_fwrite(&file, m_data, sizeof(m_data)); } +//------------------------------------------------- +// dec_2_local - convert from decimal to BCD if +// necessary +//------------------------------------------------- -static int dec_2_local(int a) +inline int mc146818_device::dec_2_local(int a) { return BCD_MODE ? dec_2_bcd(a) : a; } +//------------------------------------------------- +// dec_2_local - convert from decimal to BCD if +// necessary +//------------------------------------------------- -static void mc146818_set_base_datetime(running_machine *machine) +void mc146818_device::set_base_datetime() { system_time systime; - machine->base_datetime(systime); + m_machine.base_datetime(systime); if (HOURS_24 || (systime.local_time.hour < 12)) - mc146818->data[4] = dec_2_local(systime.local_time.hour); + m_data[4] = dec_2_local(systime.local_time.hour); else - mc146818->data[4] = dec_2_local(systime.local_time.hour - 12) | 0x80; + m_data[4] = dec_2_local(systime.local_time.hour - 12) | 0x80; - if (mc146818->type != MC146818_IGNORE_CENTURY) + if (m_config.m_type != mc146818_device_config::MC146818_IGNORE_CENTURY) CENTURY = dec_2_local(systime.local_time.year /100); - mc146818->data[0] = dec_2_local(systime.local_time.second); - mc146818->data[2] = dec_2_local(systime.local_time.minute); + m_data[0] = dec_2_local(systime.local_time.second); + m_data[2] = dec_2_local(systime.local_time.minute); DAY = dec_2_local(systime.local_time.day); MONTH = dec_2_local(systime.local_time.month + 1); YEAR = dec_2_local(systime.local_time.year % 100); WEEK_DAY = systime.local_time.weekday; if (systime.local_time.is_dst) - mc146818->data[0xb] |= 1; + m_data[0xb] |= 1; else - mc146818->data[0xb] &= ~1; + m_data[0xb] &= ~1; } +//------------------------------------------------- +// read - I/O handler for reading +//------------------------------------------------- -void mc146818_save(running_machine *machine) -{ - mame_file *file; - - file = nvram_fopen(machine, OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); - if (file) - { - mame_fwrite(file, mc146818->data, sizeof(mc146818->data)); - mame_fclose(file); - } -} - - - -void mc146818_save_stream(mame_file *file) -{ - mame_fwrite(file, mc146818->data, sizeof(mc146818->data)); -} - - - -NVRAM_HANDLER( mc146818 ) -{ - if (file == NULL) - { - mc146818_set_base_datetime(machine); - // init only - } - else if (read_or_write) - { - mc146818_save_stream(file); - } - else - { - mc146818_load_stream(file); - } -} - - - -READ8_HANDLER(mc146818_port_r) +READ8_MEMBER( mc146818_device::read ) { UINT8 data = 0; switch (offset) { case 0: - data = mc146818->index; + data = m_index; break; case 1: - switch (mc146818->index % MC146818_DATA_SIZE) { + switch (m_index % MC146818_DATA_SIZE) { case 0xa: - data = mc146818->data[mc146818->index % MC146818_DATA_SIZE]; - if (attotime_compare(attotime_sub(timer_get_time(space->machine), mc146818->last_refresh), ATTOTIME_IN_HZ(32768)) < 0) + data = m_data[m_index % MC146818_DATA_SIZE]; + if (attotime_compare(attotime_sub(timer_get_time(space.machine), m_last_refresh), ATTOTIME_IN_HZ(32768)) < 0) data |= 0x80; #if 0 /* for pc1512 bios realtime clock test */ - mc146818->data[mc146818->index % MC146818_DATA_SIZE] ^= 0x80; /* 0x80 update in progress */ + m_data[m_index % MC146818_DATA_SIZE] ^= 0x80; /* 0x80 update in progress */ #endif break; case 0xc: - if(mc146818->updated != 0) /* the clock has been updated */ + if (m_updated) /* the clock has been updated */ data = 0x10; else data = 0x00; break; case 0xd: /* battery ok */ - data = mc146818->data[mc146818->index % MC146818_DATA_SIZE] | 0x80; + data = m_data[m_index % MC146818_DATA_SIZE] | 0x80; break; default: - data = mc146818->data[mc146818->index % MC146818_DATA_SIZE]; + data = m_data[m_index % MC146818_DATA_SIZE]; break; } break; } if (LOG_MC146818) - logerror("mc146818_port_r(): index=0x%02x data=0x%02x\n", mc146818->index, data); + logerror("mc146818_port_r(): index=0x%02x data=0x%02x\n", m_index, data); return data; } +//------------------------------------------------- +// write - I/O handler for writing +//------------------------------------------------- -WRITE8_HANDLER(mc146818_port_w) +WRITE8_MEMBER( mc146818_device::write ) { if (LOG_MC146818) - logerror("mc146818_port_w(): index=0x%02x data=0x%02x\n", mc146818->index, data); + logerror("mc146818_port_w(): index=0x%02x data=0x%02x\n", m_index, data); switch (offset) { case 0: - mc146818->index = data; + m_index = data; break; case 1: - switch(mc146818->index % MC146818_DATA_SIZE) + switch(m_index % MC146818_DATA_SIZE) { case 0x0b: if(data & 0x80) - mc146818->updated = 0; - mc146818->data[mc146818->index % MC146818_DATA_SIZE] = data; + m_updated = false; + m_data[m_index % MC146818_DATA_SIZE] = data; break; default: - mc146818->data[mc146818->index % MC146818_DATA_SIZE] = data; + m_data[m_index % MC146818_DATA_SIZE] = data; } break; } } - - - -READ16_HANDLER(mc146818_port16le_r) -{ - return read16le_with_read8_handler(mc146818_port_r, space, offset, mem_mask); -} - -WRITE16_HANDLER(mc146818_port16le_w) -{ - write16le_with_write8_handler(mc146818_port_w, space, offset, data, mem_mask); -} - -READ32_HANDLER(mc146818_port32le_r) -{ - return read32le_with_read8_handler(mc146818_port_r, space, offset, mem_mask); -} - -WRITE32_HANDLER(mc146818_port32le_w) -{ - write32le_with_write8_handler(mc146818_port_w, space, offset, data, mem_mask); -} - -READ64_HANDLER(mc146818_port64be_r) -{ - return read64be_with_read8_handler(mc146818_port_r, space, offset, mem_mask); -} - -WRITE64_HANDLER(mc146818_port64be_w) -{ - write64be_with_write8_handler(mc146818_port_w, space, offset, data, mem_mask); -} diff --git a/src/emu/machine/mc146818.h b/src/emu/machine/mc146818.h index 7739a982ffd..78a59747bb2 100644 --- a/src/emu/machine/mc146818.h +++ b/src/emu/machine/mc146818.h @@ -11,45 +11,107 @@ *********************************************************************/ -#ifndef MC146818_H -#define MC146818_H +#ifndef __MC146818_H__ +#define __MC146818_H__ -typedef enum + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MDRV_MC146818_ADD(_tag, _type) \ + MDRV_DEVICE_ADD(_tag, MC146818, 0) \ + mc146818_device_config::static_set_type(device, mc146818_device_config::_type); \ + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class mc146818_device; + + +// ======================> mc146818_device_config + +class mc146818_device_config : public device_config, + public device_config_nvram_interface { - MC146818_STANDARD, - MC146818_IGNORE_CENTURY, // century is NOT set, for systems having other usage of this byte - MC146818_ENHANCED -} MC146818_TYPE; + friend class mc146818_device; + + // construction/destruction + mc146818_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock); + +public: + // values + enum mc146818_type + { + MC146818_STANDARD, + MC146818_IGNORE_CENTURY, // century is NOT set, for systems having other usage of this byte + MC146818_ENHANCED + }; + + // allocators + static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock); + virtual device_t *alloc_device(running_machine &machine) const; + + // inline configuration helpers + static void static_set_type(device_config *device, mc146818_type type); + +protected: + // internal state + mc146818_type m_type; +}; + + +// ======================> mc146818_device + +class mc146818_device : public device_t, + public device_nvram_interface +{ + friend class mc146818_device_config; + + // construction/destruction + mc146818_device(running_machine &_machine, const mc146818_device_config &config); +public: + // read/write access + DECLARE_READ8_MEMBER( read ); + DECLARE_WRITE8_MEMBER( write ); +protected: + // device-level overrides + virtual void device_start(); + virtual void device_timer(emu_timer &timer, int param, void *ptr); -/* initialize mc146818 emulation, call only once at beginning */ -void mc146818_init(running_machine *machine, MC146818_TYPE type); + // device_mc146818_interface overrides + virtual void nvram_default(); + virtual void nvram_read(mame_file &file); + virtual void nvram_write(mame_file &file); -/* loads data from standard nvram file */ -void mc146818_load(running_machine *machine); + // internal helpers + int dec_2_local(int a); + void set_base_datetime(); + + // internal state + static const int MC146818_DATA_SIZE = 0x80; -/* loads data from file stream */ -void mc146818_load_stream(mame_file *file); + const mc146818_device_config & m_config; -/* saves data into standard nvram file */ -void mc146818_save(running_machine *machine); + UINT8 m_index; + UINT8 m_data[MC146818_DATA_SIZE]; -/* saves data into file stream */ -void mc146818_save_stream(mame_file *file); + UINT16 m_eindex; + UINT8 m_edata[0x2000]; -NVRAM_HANDLER( mc146818 ); + bool m_updated; /* update ended interrupt flag */ -READ8_HANDLER(mc146818_port_r); -WRITE8_HANDLER(mc146818_port_w); + attotime m_last_refresh; +}; -READ16_HANDLER(mc146818_port16le_r); -WRITE16_HANDLER(mc146818_port16le_w); -READ32_HANDLER(mc146818_port32le_r); -WRITE32_HANDLER(mc146818_port32le_w); +// device type definition +extern const device_type MC146818; -READ64_HANDLER(mc146818_port64be_r); -WRITE64_HANDLER(mc146818_port64be_w); -#endif /* MC146818_H */ +#endif /* __MC146818_H__ */ diff --git a/src/emu/timer.c b/src/emu/timer.c index aadeb4f6a47..55231d3ee24 100644 --- a/src/emu/timer.c +++ b/src/emu/timer.c @@ -56,6 +56,7 @@ public: attotime period; /* the repeat frequency of the timer */ attotime start; /* time when the timer was started */ attotime expire; /* time when the timer will expire */ + device_t * device; /* for device timers, a pointer to the device */ }; @@ -368,12 +369,17 @@ void timer_execute_timers(running_machine *machine) global->callback_timer_expire_time = timer->expire; /* call the callback */ - if (was_enabled && timer->callback != NULL) + if (was_enabled) { - LOG(("Timer %s:%d[%s] fired (expire=%s)\n", timer->file, timer->line, timer->func, attotime_string(timer->expire, 9))); - g_profiler.start(PROFILER_TIMER_CALLBACK); - (*timer->callback)(machine, timer->ptr, timer->param); - g_profiler.stop(); + if (timer->device != NULL) + timer->device->timer_fired(*timer, timer->param, timer->ptr); + else if (timer->callback != NULL) + { + LOG(("Timer %s:%d[%s] fired (expire=%s)\n", timer->file, timer->line, timer->func, attotime_string(timer->expire, 9))); + g_profiler.start(PROFILER_TIMER_CALLBACK); + (*timer->callback)(machine, timer->ptr, timer->param); + g_profiler.stop(); + } } /* clear the callback timer global */ @@ -603,6 +609,7 @@ INLINE emu_timer *_timer_alloc_common(running_machine *machine, timer_fired_func timer->file = file; timer->line = line; timer->func = func; + timer->device = NULL; /* compute the time of the next firing and insert into the list */ timer->start = time; @@ -626,6 +633,14 @@ emu_timer *_timer_alloc_internal(running_machine *machine, timer_fired_func call return _timer_alloc_common(machine, callback, ptr, file, line, func, FALSE); } +emu_timer *device_timer_alloc(device_t &device, void *ptr, int param) +{ + emu_timer *timer = _timer_alloc_common(device.machine, NULL, ptr, __FILE__, __LINE__, device.tag(), FALSE); + timer->param = param; + timer->device = &device; + return timer; +} + /*------------------------------------------------- timer_remove - remove a timer from the diff --git a/src/emu/timer.h b/src/emu/timer.h index 0018e3e4356..13972622485 100644 --- a/src/emu/timer.h +++ b/src/emu/timer.h @@ -63,8 +63,6 @@ typedef void (*timer_fired_func)(running_machine *machine, void *ptr, INT32 para typedef void (*timer_device_fired_func)(timer_device &timer, void *ptr, INT32 param); - - struct timer_execution_state { attotime nextfire; /* time that the head of the timer list will fire */ @@ -150,6 +148,9 @@ int timer_count_anonymous(running_machine *machine); /* allocate a permament timer that isn't primed yet */ emu_timer *_timer_alloc_internal(running_machine *machine, timer_fired_func callback, void *param, const char *file, int line, const char *func); +/* allocate a permament device timer that isn't primed yet */ +emu_timer *device_timer_alloc(device_t &device, void *ptr = NULL, int param = 0); + /* adjust the time when this timer will fire and disable any periodic firings */ void timer_adjust_oneshot(emu_timer *which, attotime duration, INT32 param); diff --git a/src/mame/drivers/aristmk4.c b/src/mame/drivers/aristmk4.c index 542082a0ac0..84ea49b72d9 100644 --- a/src/mame/drivers/aristmk4.c +++ b/src/mame/drivers/aristmk4.c @@ -290,22 +290,23 @@ PORTB - MECHANICAL METERS static READ8_HANDLER(mkiv_pia_ina) { - return mc146818_port_r(space,1); + return space->machine->device<mc146818_device>("rtc")->read(*space,1); } //output a static WRITE8_HANDLER(mkiv_pia_outa) { + mc146818_device *mc = space->machine->device<mc146818_device>("rtc"); if(rtc_data_strobe) { - mc146818_port_w(space,1,data); + mc->write(*space,1,data); //logerror("rtc protocol write data: %02X\n",data); } else { - mc146818_port_w(space,0,data); + mc->write(*space,0,data); //logerror("rtc protocol write address: %02X\n",data); } @@ -1166,7 +1167,6 @@ static PALETTE_INIT( aristmk4 ) static DRIVER_INIT( aristmk4 ) { - mc146818_init(machine, MC146818_IGNORE_CENTURY); shapeRomPtr = (UINT8 *)memory_region(machine, "tile_gfx"); memcpy(shapeRom,shapeRomPtr,sizeof(shapeRom)); // back up } @@ -1202,7 +1202,6 @@ static MACHINE_CONFIG_START( aristmk4, driver_device ) MDRV_CPU_PROGRAM_MAP(aristmk4_map) MDRV_CPU_VBLANK_INT("screen", irq0_line_hold) MDRV_MACHINE_START(aristmk4) - MDRV_NVRAM_HANDLER( mc146818 ) MDRV_MACHINE_RESET(aristmk4 ) MDRV_NVRAM_ADD_0FILL("nvram") @@ -1225,6 +1224,7 @@ static MACHINE_CONFIG_START( aristmk4, driver_device ) MDRV_VIA6522_ADD("via6522_0", 0, via_interface) /* 1 MHz.(only 1 or 2 MHz.are valid) */ MDRV_PIA6821_ADD("pia6821_0", aristmk4_pia1_intf) MDRV_MC6845_ADD("crtc", MC6845, MAIN_CLOCK/8, mc6845_intf) + MDRV_MC146818_ADD("rtc", MC146818_IGNORE_CENTURY) MDRV_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mame/drivers/calchase.c b/src/mame/drivers/calchase.c index dcbc35f4df0..e401b423a70 100644 --- a/src/mame/drivers/calchase.c +++ b/src/mame/drivers/calchase.c @@ -478,7 +478,7 @@ static ADDRESS_MAP_START( calchase_io, ADDRESS_SPACE_IO, 32) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8253_r, pit8253_w, 0xffffffff) AM_RANGE(0x0060, 0x006f) AM_READWRITE(kbdc8042_32le_r, kbdc8042_32le_w) - AM_RANGE(0x0070, 0x007f) AM_READWRITE(mc146818_port32le_r, mc146818_port32le_w) + AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8_MODERN("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE(at_page32_r, at_page32_w) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE("dma8237_2", at32_dma8237_2_r, at32_dma8237_2_w) @@ -662,7 +662,7 @@ static MACHINE_CONFIG_START( calchase, driver_device ) MDRV_PIC8259_ADD( "pic8259_1", calchase_pic8259_1_config ) MDRV_PIC8259_ADD( "pic8259_2", calchase_pic8259_2_config ) MDRV_IDE_CONTROLLER_ADD("ide", ide_interrupt) - MDRV_NVRAM_HANDLER( mc146818 ) + MDRV_MC146818_ADD( "rtc", MC146818_STANDARD ) MDRV_PCI_BUS_ADD("pcibus", 0) MDRV_PCI_BUS_DEVICE(0, NULL, intel82439tx_pci_r, intel82439tx_pci_w) MDRV_PCI_BUS_DEVICE(7, NULL, intel82371ab_pci_r, intel82371ab_pci_w) @@ -686,7 +686,6 @@ static DRIVER_INIT( calchase ) bios_ram = auto_alloc_array(machine, UINT32, 0x10000/4); init_pc_common(machine, PCCOMMON_KEYBOARD_AT, calchase_set_keyb_int); - mc146818_init(machine, MC146818_STANDARD); intel82439tx_init(); diff --git a/src/mame/drivers/gamecstl.c b/src/mame/drivers/gamecstl.c index fab7c710ec4..e2c87c6cdf1 100644 --- a/src/mame/drivers/gamecstl.c +++ b/src/mame/drivers/gamecstl.c @@ -509,7 +509,7 @@ static ADDRESS_MAP_START(gamecstl_io, ADDRESS_SPACE_IO, 32) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8253_r, pit8253_w, 0xffffffff) AM_RANGE(0x0060, 0x006f) AM_READWRITE(kbdc8042_32le_r, kbdc8042_32le_w) - AM_RANGE(0x0070, 0x007f) AM_READWRITE(mc146818_port32le_r, mc146818_port32le_w) + AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8_MODERN("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE(at_page32_r, at_page32_w) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE("dma8237_2", at32_dma8237_2_r, at32_dma8237_2_w) @@ -682,7 +682,7 @@ static MACHINE_CONFIG_START( gamecstl, driver_device ) MDRV_IDE_CONTROLLER_ADD("ide", ide_interrupt) - MDRV_NVRAM_HANDLER( mc146818 ) + MDRV_MC146818_ADD( "rtc", MC146818_STANDARD ) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -735,7 +735,6 @@ static DRIVER_INIT( gamecstl ) bios_ram = auto_alloc_array(machine, UINT32, 0x10000/4); init_pc_common(machine, PCCOMMON_KEYBOARD_AT, gamecstl_set_keyb_int); - mc146818_init(machine, MC146818_STANDARD); intel82439tx_init(); diff --git a/src/mame/drivers/mediagx.c b/src/mame/drivers/mediagx.c index be5642d417b..b158946ab01 100644 --- a/src/mame/drivers/mediagx.c +++ b/src/mame/drivers/mediagx.c @@ -912,7 +912,7 @@ static ADDRESS_MAP_START(mediagx_io, ADDRESS_SPACE_IO, 32) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_master", io20_r, io20_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8253_r, pit8253_w, 0xffffffff) AM_RANGE(0x0060, 0x006f) AM_READWRITE(kbdc8042_32le_r, kbdc8042_32le_w) - AM_RANGE(0x0070, 0x007f) AM_READWRITE(mc146818_port32le_r, mc146818_port32le_w) + AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8_MODERN("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_slave", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE8("dma8237_2", at_dma8237_2_r, at_dma8237_2_w, 0xffffffff) @@ -1125,7 +1125,7 @@ static MACHINE_CONFIG_START( mediagx, mediagx_state ) MDRV_TIMER_ADD("sound_timer", sound_timer_callback) - MDRV_NVRAM_HANDLER( mc146818 ) + MDRV_MC146818_ADD( "rtc", MC146818_STANDARD ) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -1195,7 +1195,6 @@ static void init_mediagx(running_machine *machine) state->frame_width = state->frame_height = 1; init_pc_common(machine, PCCOMMON_KEYBOARD_AT,mediagx_set_keyb_int); - mc146818_init(machine, MC146818_STANDARD); kbdc8042_init(machine, &at8042); } diff --git a/src/mame/drivers/pcat_dyn.c b/src/mame/drivers/pcat_dyn.c index edf61d9cfb3..9122a1c88f4 100644 --- a/src/mame/drivers/pcat_dyn.c +++ b/src/mame/drivers/pcat_dyn.c @@ -373,7 +373,7 @@ static ADDRESS_MAP_START( pcat_io, ADDRESS_SPACE_IO, 32 ) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8253_r, pit8253_w, 0xffffffff) AM_RANGE(0x0060, 0x006f) AM_READWRITE(kbdc8042_32le_r, kbdc8042_32le_w) - AM_RANGE(0x0070, 0x007f) AM_READWRITE(mc146818_port32le_r, mc146818_port32le_w) + AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8_MODERN("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8(dma_page_select_r,dma_page_select_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE8("dma8237_2", i8237_r, i8237_w, 0xffff) @@ -491,7 +491,6 @@ static MACHINE_START( pcat_dyn ) pcat_dyn_devices.dma8237_2 = machine->device( "dma8237_2" ); init_pc_common(machine, PCCOMMON_KEYBOARD_AT, pcat_dyn_set_keyb_int); - mc146818_init(machine, MC146818_STANDARD); } static const gfx_layout CGA_charlayout = @@ -526,7 +525,7 @@ static MACHINE_CONFIG_START( pcat_dyn, driver_device ) MDRV_GFXDECODE( pcat_dyn ) MDRV_MACHINE_START(pcat_dyn) - MDRV_NVRAM_HANDLER( mc146818 ) + MDRV_MC146818_ADD( "rtc", MC146818_STANDARD ) // MDRV_FRAGMENT_ADD( at_kbdc8042 ) MDRV_PIC8259_ADD( "pic8259_1", pic8259_1_config ) diff --git a/src/mame/drivers/pcat_nit.c b/src/mame/drivers/pcat_nit.c index cbcf9ceeaff..3dacba0a683 100644 --- a/src/mame/drivers/pcat_nit.c +++ b/src/mame/drivers/pcat_nit.c @@ -216,7 +216,6 @@ static MACHINE_START( streetg2 ) cpu_set_irq_callback(machine->device("maincpu"), pcat_irq_callback); init_pc_common(machine, PCCOMMON_KEYBOARD_AT, streetg2_set_keyb_int); - mc146818_init(machine, MC146818_STANDARD); memory_configure_bank(machine, "rombank", 0, 0x80, memory_region(machine, "game_prg"), 0x8000 ); memory_set_bank(machine, "rombank", 0); @@ -238,7 +237,7 @@ static MACHINE_CONFIG_START( pcat_nit, driver_device ) MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ MDRV_MACHINE_START(streetg2) - MDRV_NVRAM_HANDLER( mc146818 ) + MDRV_MC146818_ADD( "rtc", MC146818_STANDARD ) // MDRV_FRAGMENT_ADD( at_kbdc8042 ) MDRV_FRAGMENT_ADD( pcat_common ) diff --git a/src/mame/drivers/pcxt.c b/src/mame/drivers/pcxt.c index deee903e868..69879551529 100644 --- a/src/mame/drivers/pcxt.c +++ b/src/mame/drivers/pcxt.c @@ -684,7 +684,7 @@ static ADDRESS_MAP_START( filetto_io, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE("pit8253", pit8253_r, pit8253_w) //8253 PIT AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w) //PPI 8255 AM_RANGE(0x0064, 0x0066) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w) //PPI 8255 - AM_RANGE(0x0070, 0x007f) AM_READWRITE(mc146818_port_r,mc146818_port_w) + AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE_MODERN("rtc", mc146818_device, read, write) AM_RANGE(0x0080, 0x0087) AM_READWRITE(dma_page_select_r,dma_page_select_w) AM_RANGE(0x00a0, 0x00af) AM_DEVREADWRITE("pic8259_2", pic8259_r, pic8259_w ) // AM_RANGE(0x0200, 0x020f) AM_RAM //game port @@ -713,7 +713,7 @@ static ADDRESS_MAP_START( tetriskr_io, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x0040, 0x0043) AM_DEVREADWRITE("pit8253", pit8253_r, pit8253_w) //8253 PIT AM_RANGE(0x0060, 0x0063) AM_DEVREADWRITE("ppi8255_0", ppi8255_r, ppi8255_w) //PPI 8255 AM_RANGE(0x0064, 0x0066) AM_DEVREADWRITE("ppi8255_1", ppi8255_r, ppi8255_w) //PPI 8255 - AM_RANGE(0x0070, 0x007f) AM_READWRITE(mc146818_port_r,mc146818_port_w) + AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE_MODERN("rtc", mc146818_device, read, write) AM_RANGE(0x0080, 0x0087) AM_READWRITE(dma_page_select_r,dma_page_select_w) AM_RANGE(0x00a0, 0x00af) AM_DEVREADWRITE("pic8259_2", pic8259_r, pic8259_w ) AM_RANGE(0x0200, 0x020f) AM_RAM //game port diff --git a/src/mame/drivers/photoply.c b/src/mame/drivers/photoply.c index 47f376031e2..83216cb3726 100644 --- a/src/mame/drivers/photoply.c +++ b/src/mame/drivers/photoply.c @@ -357,7 +357,7 @@ static ADDRESS_MAP_START( photoply_io, ADDRESS_SPACE_IO, 32 ) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8253_r, pit8253_w, 0xffffffff) AM_RANGE(0x0060, 0x006f) AM_READWRITE(kbdc8042_32le_r, kbdc8042_32le_w) - AM_RANGE(0x0070, 0x007f) AM_RAM//READWRITE(mc146818_port32le_r, mc146818_port32le_w) + AM_RANGE(0x0070, 0x007f) AM_RAM//DEVREADWRITE8_MODERN("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8(dma_page_select_r,dma_page_select_w, 0xffffffff)//TODO AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE8("dma8237_2", i8237_r, i8237_w, 0xffff) @@ -475,7 +475,6 @@ static MACHINE_START( photoply ) photoply_devices.dma8237_2 = machine->device( "dma8237_2" ); init_pc_common(machine, PCCOMMON_KEYBOARD_AT, photoply_set_keyb_int); - mc146818_init(machine, MC146818_STANDARD); } static const gfx_layout CGA_charlayout = @@ -512,7 +511,7 @@ static MACHINE_CONFIG_START( photoply, driver_device ) MDRV_GFXDECODE( photoply ) MDRV_MACHINE_START(photoply) - MDRV_NVRAM_HANDLER( mc146818 ) + MDRV_MC146818_ADD( "rtc", MC146818_STANDARD ) // MDRV_FRAGMENT_ADD( at_kbdc8042 ) MDRV_PIC8259_ADD( "pic8259_1", pic8259_1_config ) diff --git a/src/mame/drivers/quakeat.c b/src/mame/drivers/quakeat.c index 6388e4c1b5f..15164d7ce5b 100644 --- a/src/mame/drivers/quakeat.c +++ b/src/mame/drivers/quakeat.c @@ -85,7 +85,7 @@ static ADDRESS_MAP_START( quake_io, ADDRESS_SPACE_IO, 32 ) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) // AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8253_r, pit8253_w, 0xffffffff) // AM_RANGE(0x0060, 0x006f) AM_READWRITE(kbdc8042_32le_r, kbdc8042_32le_w) -// AM_RANGE(0x0070, 0x007f) AM_READWRITE(mc146818_port32le_r, mc146818_port32le_w) +// AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8_MODERN("rtc", mc146818_device, read, write, 0xffffffff) // AM_RANGE(0x0080, 0x009f) AM_READWRITE(at_page32_r, at_page32_w) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) // AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE("dma8237_2", at32_dma8237_2_r, at32_dma8237_2_w) diff --git a/src/mame/drivers/queen.c b/src/mame/drivers/queen.c index 9d5ac3b8921..ee1ce1681d4 100644 --- a/src/mame/drivers/queen.c +++ b/src/mame/drivers/queen.c @@ -50,7 +50,7 @@ static ADDRESS_MAP_START(queen_io, ADDRESS_SPACE_IO, 32) AM_RANGE(0x0020, 0x003f) AM_RAM//AM_DEVREADWRITE8("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_RAM//AM_DEVREADWRITE8("pit8254", pit8253_r, pit8253_w, 0xffffffff) AM_RANGE(0x0060, 0x006f) AM_RAM//AM_READWRITE(kbdc8042_32le_r, kbdc8042_32le_w) - AM_RANGE(0x0070, 0x007f) AM_RAM//AM_READWRITE(mc146818_port32le_r, mc146818_port32le_w) + AM_RANGE(0x0070, 0x007f) AM_RAM//AM_DEVREADWRITE8_MODERN("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_RAM//AM_READWRITE(at_page32_r, at_page32_w) AM_RANGE(0x00a0, 0x00bf) AM_RAM//AM_DEVREADWRITE8("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x00c0, 0x00df) AM_RAM//AM_DEVREADWRITE("dma8237_2", at32_dma8237_2_r, at32_dma8237_2_w) diff --git a/src/mame/drivers/taitowlf.c b/src/mame/drivers/taitowlf.c index 8806ce88691..1a9f1211f2c 100644 --- a/src/mame/drivers/taitowlf.c +++ b/src/mame/drivers/taitowlf.c @@ -450,7 +450,7 @@ static ADDRESS_MAP_START(taitowlf_io, ADDRESS_SPACE_IO, 32) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8253_r, pit8253_w, 0xffffffff) AM_RANGE(0x0060, 0x006f) AM_READWRITE(kbdc8042_32le_r, kbdc8042_32le_w) - AM_RANGE(0x0070, 0x007f) AM_READWRITE(mc146818_port32le_r, mc146818_port32le_w) + AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8_MODERN("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE(at_page32_r, at_page32_w) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE("dma8237_2", at32_dma8237_2_r, at32_dma8237_2_w) @@ -623,7 +623,7 @@ static MACHINE_CONFIG_START( taitowlf, driver_device ) MDRV_IDE_CONTROLLER_ADD("ide", ide_interrupt) - MDRV_NVRAM_HANDLER( mc146818 ) + MDRV_MC146818_ADD( "rtc", MC146818_STANDARD ) /* video hardware */ MDRV_SCREEN_ADD("screen", RASTER) @@ -676,7 +676,6 @@ static DRIVER_INIT( taitowlf ) bios_ram = auto_alloc_array(machine, UINT32, 0x10000/4); init_pc_common(machine, PCCOMMON_KEYBOARD_AT, taitowlf_set_keyb_int); - mc146818_init(machine, MC146818_STANDARD); intel82439tx_init(); diff --git a/src/mame/machine/pcshare.c b/src/mame/machine/pcshare.c index 0f5450b86fb..96b47db16a7 100644 --- a/src/mame/machine/pcshare.c +++ b/src/mame/machine/pcshare.c @@ -27,6 +27,7 @@ #include "machine/pic8259.h" #include "machine/pit8253.h" #include "machine/8042kbdc.h" +#include "machine/mc146818.h" #define VERBOSE_DBG 0 /* general debug messages */ #define DBG_LOG(N,M,A) \ @@ -321,7 +322,7 @@ ADDRESS_MAP_START( pcat32_io_common, ADDRESS_SPACE_IO, 32 ) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8("pit8254", pit8253_r, pit8253_w, 0xffffffff) AM_RANGE(0x0060, 0x006f) AM_READWRITE8(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) - AM_RANGE(0x0070, 0x007f) AM_RAM//READWRITE(mc146818_port32le_r, mc146818_port32le_w) + AM_RANGE(0x0070, 0x007f) AM_RAM //AM_DEVREADWRITE8_MODERN("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8(dma_page_select_r,dma_page_select_w, 0xffffffff)//TODO AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x00c0, 0x00df) AM_DEVREADWRITE8("dma8237_2", i8237_r, i8237_w, 0xffff) @@ -333,4 +334,5 @@ MACHINE_CONFIG_FRAGMENT(pcat_common) MDRV_I8237_ADD( "dma8237_1", XTAL_14_31818MHz/3, dma8237_1_config ) MDRV_I8237_ADD( "dma8237_2", XTAL_14_31818MHz/3, dma8237_2_config ) MDRV_PIT8254_ADD( "pit8254", at_pit8254_config ) +// MDRV_MC146818_ADD( "rtc", MC146818_STANDARD ) MACHINE_CONFIG_END |