summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
author cracyc <cracyc@users.noreply.github.com>2014-06-18 03:10:07 +0000
committer cracyc <cracyc@users.noreply.github.com>2014-06-18 03:10:07 +0000
commit2df40a8073e58055a91ffe8997cd1df52791c876 (patch)
treeae88dc14637867a05f8ca523b23d5a002f0d7583 /src/emu
parentdd842afff6149a431bdc7806a428ae6c62e46910 (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.c7
-rw-r--r--src/emu/cpu/i86/i86.c2
-rw-r--r--src/emu/machine/er59256.c203
-rw-r--r--src/emu/machine/er59256.h132
-rw-r--r--src/emu/machine/machine.mak9
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
#-------------------------------------------------