diff options
| author | 2014-06-18 03:10:07 +0000 | |
|---|---|---|
| committer | 2014-06-18 03:10:07 +0000 | |
| commit | 2df40a8073e58055a91ffe8997cd1df52791c876 (patch) | |
| tree | ae88dc14637867a05f8ca523b23d5a002f0d7583 /src/emu | |
| parent | dd842afff6149a431bdc7806a428ae6c62e46910 (diff) | |
i186: fix timer read (nw)
(mess) rmnimbus: bit of refactoring and cleanup, fix some video ram reads and writes, use eepromser and remove er59256 (nw)
Diffstat (limited to 'src/emu')
| -rw-r--r-- | src/emu/cpu/i86/i186.c | 7 | ||||
| -rw-r--r-- | src/emu/cpu/i86/i86.c | 2 | ||||
| -rw-r--r-- | src/emu/machine/er59256.c | 203 | ||||
| -rw-r--r-- | src/emu/machine/er59256.h | 132 | ||||
| -rw-r--r-- | src/emu/machine/machine.mak | 9 |
5 files changed, 7 insertions, 346 deletions
diff --git a/src/emu/cpu/i86/i186.c b/src/emu/cpu/i86/i186.c index b7d096e0cc6..a3162964732 100644 --- a/src/emu/cpu/i86/i186.c +++ b/src/emu/cpu/i86/i186.c @@ -1008,6 +1008,7 @@ void i80186_cpu_device::device_timer(emu_timer &timer, device_timer_id id, int p count = count ? count : 0x10000; t->int_timer->adjust((attotime::from_hz(clock()/8) * count), which); + t->count = 0; if (LOG_TIMER) logerror(" Repriming interrupt\n"); } else @@ -1041,7 +1042,11 @@ void i80186_cpu_device::internal_timer_sync(int which) /* if we have a timing timer running, adjust the count */ if (t->time_timer_active && !(t->control & 0x0c)) { - t->last_time = t->time_timer->elapsed(); + attotime current_time = t->time_timer->elapsed(); + int net_clocks = ((current_time - t->last_time) * (clock()/8)).seconds; + t->last_time = current_time; + + t->count = t->count + net_clocks; } } diff --git a/src/emu/cpu/i86/i86.c b/src/emu/cpu/i86/i86.c index 5790e0d7382..cb7b412d62e 100644 --- a/src/emu/cpu/i86/i86.c +++ b/src/emu/cpu/i86/i86.c @@ -2077,7 +2077,7 @@ bool i8086_common_cpu_device::common_op(UINT8 op) break; case 0xf4: // i_hlt - logerror("%s: %06x: HALT\n", tag(), pc()); + //logerror("%s: %06x: HALT\n", tag(), pc()); m_icount = 0; m_halt = true; break; diff --git a/src/emu/machine/er59256.c b/src/emu/machine/er59256.c deleted file mode 100644 index 9ad49210b6e..00000000000 --- a/src/emu/machine/er59256.c +++ /dev/null @@ -1,203 +0,0 @@ -/********************************************************************* - - er59256.c - - Microchip ER59256 serial eeprom. - - -*********************************************************************/ - -#include "emu.h" -#include "er59256.h" - -/* LOGLEVEL 0=no logging, 1=just commands and data, 2=everything ! */ - -#define LOGLEVEL 0 - -#define LOG(level, ...) if(LOGLEVEL>=level) logerror(__VA_ARGS__) -#define LOG_BITS(bits) logerror("CS=%d CK=%d DI=%d DO=%d", (bits&CS_MASK) ? 1 : 0, (bits&CK_MASK) ? 1 : 0, (bits&DI_MASK) ? 1 : 0, (bits&DO_MASK) ? 1 : 0) - -const device_type ER59256 = &device_creator<er59256_device>; - -er59256_device::er59256_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) - : device_t(mconfig, ER59256, "Microchip ER59256 serial eeprom.", tag, owner, clock, "er59256", __FILE__), - m_io_bits(0), - m_old_io_bits(0), - m_in_shifter(0), - m_out_shifter(0), - m_bitcount(0), - m_command(0), - m_flags(0) -{ -} - -//------------------------------------------------- -// device_config_complete - perform any -// operations now that the configuration is -// complete -//------------------------------------------------- - -void er59256_device::device_config_complete() -{ -} - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void er59256_device::device_start() -{ - // Start with rom defaulted to erased - memset(&m_eerom, 0xFF, EEROM_WORDS*2); - - m_command=CMD_INVALID; - - m_flags&= ~FLAG_DATA_LOADED; - - save_item(NAME(m_eerom)); - save_item(NAME(m_io_bits)); - save_item(NAME(m_old_io_bits)); - save_item(NAME(m_in_shifter)); - save_item(NAME(m_out_shifter)); - save_item(NAME(m_bitcount)); - save_item(NAME(m_command)); - save_item(NAME(m_flags)); -} - -//------------------------------------------------- -// device_stop - device-specific stop -//------------------------------------------------- - -void er59256_device::device_stop() -{ - /* Save contents of eerom */ -} - -/*************************************************************************** - IMPLEMENTATION -***************************************************************************/ - -void er59256_device::preload_rom(const UINT16 *rom_data, int count) -{ - int WordNo; - - logerror("Preloading %d words of data\n",count); - - if(count>EEROM_WORDS) - memcpy(&m_eerom,rom_data,count*2); - else - memcpy(&m_eerom,rom_data,EEROM_WORDS*2); - - for(WordNo=0;WordNo<EEROM_WORDS;WordNo++) - logerror("%04X ",m_eerom[WordNo]); - - logerror("\n"); -} - -UINT8 er59256_device::data_loaded() -{ - return (m_flags & FLAG_DATA_LOADED) ? 1 : 0; -} - -void er59256_device::set_iobits(UINT8 newbits) -{ - //UINT32 bit; - - // Make sure we only apply valid bits - newbits&=ALL_MASK; - - if(LOGLEVEL>1) - { - logerror("er59256:newbits=%02X : ",newbits); - LOG_BITS(newbits); - logerror(" io_bits=%02X : ",m_io_bits); - LOG_BITS(m_io_bits); - logerror(" old_io_bits=%02X : ",m_old_io_bits); - LOG_BITS(m_old_io_bits); - logerror(" bitcount=%d, in_shifter=%04X, out_shifter=%05X, flags=%02X\n",m_bitcount,m_in_shifter,m_out_shifter,m_flags); - } - // Only do anything if the inputs have changed - if((newbits&IN_MASK)!=(m_io_bits&IN_MASK)) - { - // save the current state, then set the new one, remembering to preserve data out - m_old_io_bits=m_io_bits; - m_io_bits=(newbits & ~DO_MASK) | (m_old_io_bits&DO_MASK); - - if(CS_RISE()) - { - m_flags&=~FLAG_START_BIT; - m_command=CMD_INVALID; - } - - if(LOGLEVEL>1) - { - if(CK_RISE()) logerror("er59256:CK rise\n"); - if(CS_RISE()) logerror("er59256:CS rise\n"); - if(CK_FALL()) logerror("er59256:CK fall\n"); - if(CS_FALL()) logerror("er59256:CS fall\n"); - } - - if(CK_RISE() && CS_VALID()) - { - if((STARTED()==0) && (GET_DI()==1)) - { - m_bitcount=0; - m_flags|=FLAG_START_BIT; - } - else - { - SHIFT_IN(); - m_bitcount++; - - if(m_bitcount==CMD_BITLEN) - decode_command(); - - if((m_bitcount==WRITE_BITLEN) && ((m_command & CMD_MASK)==CMD_WRITE)) - { - m_eerom[m_command & ADDR_MASK]=m_in_shifter; - LOG(1,"er59256:write[%02X]=%04X\n",(m_command & ADDR_MASK),m_in_shifter); - m_command=CMD_INVALID; - } - LOG(1,"out_shifter=%05X, io_bits=%02X\n",m_out_shifter,m_io_bits); - SHIFT_OUT(); - } - - LOG(2,"io_bits:out=%02X\n",m_io_bits); - } - } -} - -UINT8 er59256_device::get_iobits() -{ - return m_io_bits; -} - - -void er59256_device::decode_command() -{ - m_out_shifter=0x0000; - m_command=(m_in_shifter & (CMD_MASK | ADDR_MASK)); - - switch(m_command & CMD_MASK) - { - case CMD_READ : m_out_shifter=m_eerom[m_command & ADDR_MASK]; - LOG(1,"er59256:read[%02X]=%04X\n",(m_command&ADDR_MASK),m_eerom[m_command & ADDR_MASK]); - break; - case CMD_WRITE : break; - case CMD_ERASE : if (WRITE_ENABLED()) m_eerom[m_command & ADDR_MASK]=0xFF; - LOG(1,"er59256:erase[%02X]\n",(m_command&ADDR_MASK)); - break; - case CMD_EWEN : m_flags|=FLAG_WRITE_EN; - LOG(1,"er59256:erase/write enabled\n"); - break; - case CMD_EWDS : m_flags&=~FLAG_WRITE_EN; - LOG(1,"er59256:erase/write disabled\n"); - break; - case CMD_ERAL : if (WRITE_ENABLED()) memset(&m_eerom, 0xFF, EEROM_WORDS*2); - LOG(1,"er59256:erase all\n"); - break; - } - - if ((m_command & CMD_MASK)!=CMD_WRITE) - m_command=CMD_INVALID; -} diff --git a/src/emu/machine/er59256.h b/src/emu/machine/er59256.h deleted file mode 100644 index 1cdfa42df38..00000000000 --- a/src/emu/machine/er59256.h +++ /dev/null @@ -1,132 +0,0 @@ -/********************************************************************* - - er59256.h - - Microchip ER59256 serial eeprom. - - -*********************************************************************/ - -#ifndef _ER59256_H_ -#define _ER59256_H_ - -#define EEROM_WORDS 0x10 - -/*************************************************************************** - MACROS -***************************************************************************/ - -class er59256_device : public device_t -{ -public: - er59256_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); - ~er59256_device() {} - - void set_iobits(UINT8 newbits); - UINT8 get_iobits(); - void preload_rom(const UINT16 *rom_data, int count); - UINT8 data_loaded(); - -protected: - // device-level overrides - virtual void device_config_complete(); - virtual void device_start(); - virtual void device_stop(); - -private: - // internal state - - /* The actual memory */ - UINT16 m_eerom[EEROM_WORDS]; - - /* Bits as they appear on the io pins, current state */ - UINT8 m_io_bits; - - /* Bits as they appear on the io pins, previous state */ - UINT8 m_old_io_bits; - - - /* the 16 bit shift in/out reg */ - UINT16 m_in_shifter; - UINT32 m_out_shifter; - - /* Count of bits received since last CS low->high */ - UINT8 m_bitcount; - - /* Command & addresss */ - UINT8 m_command; - - /* Write enable and write in progress flags */ - UINT8 m_flags; - - void decode_command(); -}; - -extern const device_type ER59256; - - -#define MCFG_ER59256_ADD(_tag) \ - MCFG_DEVICE_ADD((_tag), ER59256, 0) - -/*************************************************************************** - CONSTANTS -***************************************************************************/ - -#define CK_SHIFT 0x00 -#define DI_SHIFT 0x01 -#define DO_SHIFT 0x02 -#define CS_SHIFT 0x03 - -#define CK_MASK (1<<CK_SHIFT) -#define DI_MASK (1<<DI_SHIFT) -#define DO_MASK (1<<DO_SHIFT) -#define CS_MASK (1<<CS_SHIFT) - -#define ALL_MASK (CK_MASK | DI_MASK | DO_MASK | CS_MASK) -#define IN_MASK (CK_MASK | DI_MASK | CS_MASK) - -#define GET_CK() ((m_io_bits & CK_MASK) >> CK_SHIFT) -#define GET_DI() ((m_io_bits & DI_MASK) >> DI_SHIFT) -#define GET_DO() ((m_io_bits & DO_MASK) >> DO_SHIFT) -#define GET_CS() ((m_io_bits & CS_MASK) >> CS_SHIFT) - -#define SET_CK(data) m_io_bits=((m_io_bits & ~CK_MASK) | ((data & 0x01) << CK_SHIFT)) -#define SET_DI(data) m_io_bits=((m_io_bits & ~DI_MASK) | ((data & 0x01) << DI_SHIFT)) -#define SET_DO(data) m_io_bits=((m_io_bits & ~DO_MASK) | ((data & 0x01) << DO_SHIFT)) -#define SET_CS(data) m_io_bits=((m_io_bits & ~CS_MASK) | ((data & 0x01) << CS_SHIFT)) - -#define CK_RISE() ((m_io_bits & CK_MASK) & ~(m_old_io_bits & CK_MASK)) -#define CS_RISE() ((m_io_bits & CS_MASK) & ~(m_old_io_bits & CS_MASK)) -#define CS_VALID() ((m_io_bits & CS_MASK) & (m_old_io_bits & CS_MASK)) - -#define CK_FALL() (~(m_io_bits & CK_MASK) & (m_old_io_bits & CK_MASK)) -#define CS_FALL() (~(m_io_bits & CS_MASK) & (m_old_io_bits & CS_MASK)) - - -#define SHIFT_IN() m_in_shifter=(m_in_shifter<<1) | GET_DI() -#define SHIFT_OUT() SET_DO((m_out_shifter & 0x10000)>>16); m_out_shifter=(m_out_shifter<<1) - -#define CMD_READ 0x80 -#define CMD_WRITE 0x40 -#define CMD_ERASE 0xC0 -#define CMD_EWEN 0x30 -#define CMD_EWDS 0x00 -#define CMD_ERAL 0x20 -#define CMD_INVALID 0xF0 - -#define CMD_MASK 0xF0 -#define ADDR_MASK 0x0F - -// CMD_BITLEN is 1 start bit plus 4 command bits plus 4 address bits -#define CMD_BITLEN 8 -#define DATA_BITLEN 16 -#define WRITE_BITLEN CMD_BITLEN+DATA_BITLEN - -#define FLAG_WRITE_EN 0x01 -#define FLAG_START_BIT 0x02 -#define FLAG_DATA_LOADED 0x04 - -#define WRITE_ENABLED() ((m_flags & FLAG_WRITE_EN) ? 1 : 0) -#define STARTED() ((m_flags & FLAG_START_BIT) ? 1 : 0) - -#endif diff --git a/src/emu/machine/machine.mak b/src/emu/machine/machine.mak index 7b8b61ba407..2e605630689 100644 --- a/src/emu/machine/machine.mak +++ b/src/emu/machine/machine.mak @@ -543,15 +543,6 @@ endif #------------------------------------------------- # -#@src/emu/machine/er59256.h,MACHINES += ER59256 -#------------------------------------------------- - -ifneq ($(filter ER59256,$(MACHINES)),) -MACHINEOBJS += $(MACHINEOBJ)/er59256.o -endif - -#------------------------------------------------- -# #@src/emu/machine/f3853.h,MACHINES += F3853 #------------------------------------------------- |
