summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/lh5801/5801tbl.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/lh5801/5801tbl.hxx')
-rw-r--r--src/devices/cpu/lh5801/5801tbl.hxx1743
1 files changed, 1302 insertions, 441 deletions
diff --git a/src/devices/cpu/lh5801/5801tbl.hxx b/src/devices/cpu/lh5801/5801tbl.hxx
index ac83d0c772e..9027ac5a093 100644
--- a/src/devices/cpu/lh5801/5801tbl.hxx
+++ b/src/devices/cpu/lh5801/5801tbl.hxx
@@ -1,79 +1,77 @@
// license:BSD-3-Clause
// copyright-holders:Peter Trauner
-/* assumed
- res=left+right+c
- sbc is like adc with inverted carry and right side
- (decrement, compare the same)
- (like in the m6502 processors)
+/* Assumptions:
+ result = left + right + c
+ SBC is like ADC with inverted carry and right side
+ (decrement, compare the same as in 6502)
*/
uint8_t lh5801_cpu_device::lh5801_add_generic(int left, int right, int carry)
{
- int res=left+right+carry;
- int v,c;
+ int res = left + right + carry;
+ int c = res & 0x100;
+ int v = ((left & 0x7f) + (right & 0x7f) + carry) & 0x80;
- m_t&=~(H|V|Z|C);
+ m_t &= ~(H | V | Z | C);
- if (!(res&0xff)) m_t|=Z;
- c=res&0x100;
+ if (!(res & 0xff)) m_t |= Z;
if (c) m_t|=C;
- if (((left&0xf)+(right&0xf)+carry)&0x10) m_t|=H;
- v=((left&0x7f)+(right&0x7f)+carry)&0x80;
- if ( (c&&!v)||(!c&&v) ) m_t|=V;
+ if (((left & 0xf) + (right & 0xf) + carry) & 0x10) m_t |= H;
+ if ((c && !v) || (!c && v)) m_t |= V;
return res;
}
uint16_t lh5801_cpu_device::lh5801_readop_word()
{
- uint16_t r;
- r=m_cache->read_byte(P++)<<8;
- r|=m_cache->read_byte(P++);
+ uint16_t r = m_cache->read_byte(P++) << 8;
+ r |= m_cache->read_byte(P++);
return r;
}
void lh5801_cpu_device::lh5801_adc(uint8_t data)
{
- m_a=lh5801_add_generic(m_a,data,m_t&C);
+ m_a=lh5801_add_generic(m_a, data, m_t & C);
}
void lh5801_cpu_device::lh5801_add_mem(address_space &space, int addr, uint8_t data)
{
- int v=lh5801_add_generic(space.read_byte(addr),data,0);
- space.write_byte(addr,v);
+ int v = lh5801_add_generic(space.read_byte(addr), data, 0);
+ space.write_byte(addr, v);
}
void lh5801_cpu_device::lh5801_adr(PAIR *reg)
{
- reg->b.l=lh5801_add_generic(reg->b.l,m_a,0);
- if (m_t&C) {
+ reg->b.l = lh5801_add_generic(reg->b.l, m_a, 0);
+ if (m_t & C)
+ {
reg->b.h++;
}
}
void lh5801_cpu_device::lh5801_sbc(uint8_t data)
{
- m_a=lh5801_add_generic(m_a,data^0xff,m_t&C);
+ m_a = lh5801_add_generic(m_a, data ^ 0xff, m_t & C);
}
void lh5801_cpu_device::lh5801_cpa(uint8_t a, uint8_t b)
{
- lh5801_add_generic(a, b^0xff, 1);
+ lh5801_add_generic(a, b ^ 0xff, 1);
}
uint8_t lh5801_cpu_device::lh5801_decimaladd_generic(int left, int right, int carry)
{
- int res=lh5801_add_generic(left, right, carry);
- uint8_t da;
+ int res = lh5801_add_generic(left, right, carry);
//DA values taken from official documentation
- if (!(m_t&C) && !(m_t&H))
+ uint8_t da;
+ if (!(m_t & C) && !(m_t & H))
da = 0x9a;
- else if (!(m_t&C) && (m_t&H))
+ else if (!(m_t & C) && (m_t & H))
da = 0xa0;
- else if ((m_t&C) && !(m_t&H))
+ else if ((m_t & C) && !(m_t & H))
da = 0xfa;
- else //if ((m_t&C) && (m_t&H))
+ else //if ((m_t & C) && (m_t & H))
da = 0x00;
return res + da;
@@ -81,71 +79,95 @@ uint8_t lh5801_cpu_device::lh5801_decimaladd_generic(int left, int right, int ca
void lh5801_cpu_device::lh5801_dca(uint8_t data)
{
- m_a += 0x66; //taken from official documentation
- m_a=lh5801_decimaladd_generic(m_a, data, m_t&C);
+ m_a += 0x66; // taken from official documentation
+ m_a = lh5801_decimaladd_generic(m_a, data, m_t & C);
}
void lh5801_cpu_device::lh5801_dcs(uint8_t data)
{
- m_a=lh5801_decimaladd_generic(m_a, data^0xff, m_t&C);
+ m_a = lh5801_decimaladd_generic(m_a, data ^ 0xff, m_t & C);
}
void lh5801_cpu_device::lh5801_and(uint8_t data)
{
- m_a&=data;
- m_t&=~Z;
- if (!m_a) m_t|=Z;
+ m_a &= data;
+ m_t &= ~Z;
+ if (!m_a)
+ {
+ m_t |= Z;
+ }
}
void lh5801_cpu_device::lh5801_and_mem(address_space &space, int addr, uint8_t data)
{
- data&=space.read_byte(addr);
- m_t&=~Z;
- if (!data) m_t|=Z;
- space.write_byte(addr,data);
+ data &= space.read_byte(addr);
+ m_t &= ~Z;
+ if (!data)
+ {
+ m_t |= Z;
+ }
+ space.write_byte(addr, data);
}
void lh5801_cpu_device::lh5801_bit(uint8_t a, uint8_t b)
{
- m_t&=~Z;
- if (!(a&b)) m_t|=Z;
+ m_t &= ~Z;
+ if (!(a & b))
+ {
+ m_t |= Z;
+ }
}
void lh5801_cpu_device::lh5801_eor(uint8_t data)
{
- m_a^=data;
- m_t&=~Z;
- if (!m_a) m_t|=Z;
+ m_a ^= data;
+ m_t &= ~Z;
+ if (!m_a)
+ {
+ m_t |= Z;
+ }
}
void lh5801_cpu_device::lh5801_ora(uint8_t data)
{
- m_a|=data;
- m_t&=~Z;
- if (!m_a) m_t|=Z;
+ m_a |= data;
+ m_t &= ~Z;
+ if (!m_a)
+ {
+ m_t |= Z;
+ }
}
void lh5801_cpu_device::lh5801_ora_mem(address_space &space, int addr, uint8_t data)
{
- data|=space.read_byte(addr);
- m_t&=~Z;
- if (!data) m_t|=Z;
- space.write_byte(addr,data);
+ data |= space.read_byte(addr);
+ m_t &= ~Z;
+ if (!data)
+ {
+ m_t |= Z;
+ }
+ space.write_byte(addr, data);
}
void lh5801_cpu_device::lh5801_lda(uint8_t data)
{
- m_a=data;
- m_t&=~Z;
- if (!m_a) m_t|=Z;
+ m_a = data;
+ m_t &= ~Z;
+ if (!m_a)
+ {
+ m_t |= Z;
+ }
}
void lh5801_cpu_device::lh5801_lde(PAIR *reg)
{
// or z flag depends on reg
- m_a=m_program->read_byte(reg->w.l--);
- m_t&=~Z;
- if (!m_a) m_t|=Z;
+ m_a = m_program->read_byte(reg->w.l--);
+ m_t &= ~Z;
+ if (!m_a)
+ {
+ m_t |= Z;
+ }
}
void lh5801_cpu_device::lh5801_sde(PAIR *reg)
@@ -156,9 +178,12 @@ void lh5801_cpu_device::lh5801_sde(PAIR *reg)
void lh5801_cpu_device::lh5801_lin(PAIR *reg)
{
// or z flag depends on reg
- m_a=m_program->read_byte(reg->w.l++);
- m_t&=~Z;
- if (!m_a) m_t|=Z;
+ m_a = m_program->read_byte(reg->w.l++);
+ m_t &= ~Z;
+ if (!m_a)
+ {
+ m_t |= Z;
+ }
}
void lh5801_cpu_device::lh5801_sin(PAIR *reg)
@@ -168,39 +193,43 @@ void lh5801_cpu_device::lh5801_sin(PAIR *reg)
void lh5801_cpu_device::lh5801_dec(uint8_t *adr)
{
- *adr=lh5801_add_generic(*adr,0xff,0);
+ *adr = lh5801_add_generic(*adr, 0xff, 0);
}
void lh5801_cpu_device::lh5801_inc(uint8_t *adr)
{
- *adr=lh5801_add_generic(*adr,1,0);
+ *adr = lh5801_add_generic(*adr, 1, 0);
}
void lh5801_cpu_device::lh5801_pop()
{
- m_a=m_program->read_byte(++S);
- m_t&=~Z;
- if (!m_a) m_t|=Z;
+ S++;
+ m_a = m_program->read_byte(S);
+ m_t &= ~Z;
+ if (!m_a)
+ {
+ m_t |= Z;
+ }
}
void lh5801_cpu_device::lh5801_pop_word(PAIR *reg)
{
- reg->b.h=m_program->read_byte(++S);
- reg->b.l=m_program->read_byte(++S);
+ reg->w.l = (m_program->read_byte(S + 1) << 8) | m_program->read_byte(S + 2);
+ S += 2;
// z flag?
}
void lh5801_cpu_device::lh5801_rtn()
{
- P=m_program->read_byte(++S)<<8;
- P|=m_program->read_byte(++S);
+ P = (m_program->read_byte(S + 1) << 8) | m_program->read_byte(S + 2);
+ S += 2;
}
void lh5801_cpu_device::lh5801_rti()
{
- P=m_program->read_byte(++S)<<8;
- P|=m_program->read_byte(++S);
- m_t=m_program->read_byte(++S);
+ P = (m_program->read_byte(S + 1) << 8) | m_program->read_byte(S + 2);
+ m_t = m_program->read_byte(S + 3);
+ S += 3;
}
void lh5801_cpu_device::lh5801_push(uint8_t data)
@@ -210,470 +239,1300 @@ void lh5801_cpu_device::lh5801_push(uint8_t data)
void lh5801_cpu_device::lh5801_push_word(uint16_t data)
{
- m_program->write_byte(S--, data&0xff);
- m_program->write_byte(S--, data>>8);
+ m_program->write_byte(S--, data & 0xff);
+ m_program->write_byte(S--, data >> 8);
}
void lh5801_cpu_device::lh5801_jmp(uint16_t adr)
{
- P=adr;
+ P = adr;
}
-void lh5801_cpu_device::lh5801_branch_plus(int doit)
+void lh5801_cpu_device::lh5801_branch_plus(int taken)
{
- uint8_t t=m_cache->read_byte(P++);
- if (doit) {
- m_icount-=3;
- P+=t;
+ uint8_t t = m_cache->read_byte(P++);
+ if (taken)
+ {
+ m_icount -= 3;
+ P += t;
}
}
-void lh5801_cpu_device::lh5801_branch_minus(int doit)
+void lh5801_cpu_device::lh5801_branch_minus(int taken)
{
- uint8_t t=m_cache->read_byte(P++);
- if (doit) {
- m_icount-=3;
- P-=t;
+ uint8_t t = m_cache->read_byte(P++);
+ if (taken)
+ {
+ m_icount -= 3;
+ P -= t;
}
}
void lh5801_cpu_device::lh5801_lop()
{
- uint8_t t=m_cache->read_byte(P++);
- m_icount-=8;
- if (UL--) {
- m_icount-=3;
- P-=t;
+ uint8_t t = m_cache->read_byte(P++);
+ m_icount -= 8;
+ if (UL--)
+ {
+ m_icount -= 3;
+ P -= t;
}
}
void lh5801_cpu_device::lh5801_sjp()
{
- uint16_t n=lh5801_readop_word();
+ uint16_t n = lh5801_readop_word();
lh5801_push_word(P);
- P=n;
+ P = n;
}
-void lh5801_cpu_device::lh5801_vector(int doit, int nr)
+void lh5801_cpu_device::lh5801_vector(int taken, int nr)
{
- if (doit) {
+ if (taken)
+ {
lh5801_push_word(P);
- P=m_program->read_byte(0xff00+nr)<<8;
- P|=m_program->read_byte(0xff00+nr+1);
- m_icount-=21-8;
+ P = m_program->read_byte(0xff00 + nr) << 8;
+ P |= m_program->read_byte(0xff00 + nr + 1);
+ m_icount -= 13;
}
- m_t&=~Z; // after the jump!?
+ m_t &= ~Z; // after the jump?
}
void lh5801_cpu_device::lh5801_aex()
{
- uint8_t t=m_a;
- m_a=(t<<4)|(t>>4);
+ m_a = (m_a << 4) | (m_a >> 4);
// flags?
}
void lh5801_cpu_device::lh5801_drl(address_space &space, int adr)
{
- uint16_t t=m_a|(space.read_byte(adr)<<8);
-
- m_a=t>>8;
- space.write_byte(adr,t>>4);
+ uint16_t t = m_a | (space.read_byte(adr) << 8);
+ m_a = t >> 8;
+ space.write_byte(adr, t >> 4);
}
void lh5801_cpu_device::lh5801_drr(address_space &space, int adr)
{
- uint16_t t=space.read_byte(adr)|(m_a<<8);
-
- m_a=t;
- space.write_byte(adr,t>>4);
+ uint16_t t = space.read_byte(adr) | (m_a << 8);
+ m_a = t;
+ space.write_byte(adr, t >> 4);
}
void lh5801_cpu_device::lh5801_rol()
{
- // maybe use of the adder
int n = m_a;
- m_a = (n<<1) | (m_t&C);
- // flags cvhz
- m_t&=~(H|V|Z|C);
- if (n&0x80) m_t|=C;
- if (!m_a) m_t|=Z;
- if (m_a & 0x10) m_t|=H;
- if ((BIT(n,6) && !BIT(n,7)) || (!BIT(n,6) && BIT(n,7))) m_t|=V;
+ m_a = (n << 1) | (m_t & C);
+ m_t &= ~(H | V | Z | C);
+ if (n & 0x80)
+ m_t |= C;
+ if (!m_a)
+ m_t |= Z;
+ if (m_a & 0x10)
+ m_t |= H;
+ if ((BIT(n, 6) && !BIT(n, 7)) || (!BIT(n, 6) && BIT(n, 7)))
+ m_t |= V;
}
void lh5801_cpu_device::lh5801_ror()
{
int n = m_a;
- m_a=(n | ((m_t&C)<<8))>>1;
- // flags cvhz
- m_t&=~(H|V|Z|C);
- if (n&0x01) m_t|=C;
- if (!m_a) m_t|=Z;
- if (m_a & 0x08) m_t|=H;
- if ((BIT(n,0) && BIT(m_a,1)) || (BIT(m_a,0) && BIT(n,1))) m_t|=V;
+ m_a = (n | ((m_t & C) << 8)) >> 1;
+ m_t &= ~(H | V | Z | C);
+ if (n & 0x01)
+ m_t |= C;
+ if (!m_a)
+ m_t |= Z;
+ if (m_a & 0x08)
+ m_t |= H;
+ if ((BIT(n, 0) && BIT(m_a, 1)) || (BIT(m_a, 0) && BIT(n, 1)))
+ m_t |= V;
}
void lh5801_cpu_device::lh5801_shl()
{
int n = m_a;
- m_a<<=1;
- // flags cvhz
- m_t&=~(H|V|Z|C);
- if (n&0x80) m_t|=C;
- if (!m_a) m_t|=Z;
- if (m_a & 0x10) m_t|=H;
- if ((BIT(n,6) && !BIT(n,7)) || (!BIT(n,6) && BIT(n,7))) m_t|=V;
+ m_a <<= 1;
+ m_t &= ~(H | V | Z | C);
+ if (n & 0x80)
+ m_t |= C;
+ if (!m_a)
+ m_t |= Z;
+ if (m_a & 0x10)
+ m_t |= H;
+ if ((BIT(n, 6) && !BIT(n, 7)) || (!BIT(n, 6) && BIT(n, 7)))
+ m_t |= V;
}
void lh5801_cpu_device::lh5801_shr()
{
int n = m_a;
- m_a>>=1;
- // flags cvhz
- m_t&=~(H|V|Z|C);
- if (n & 0x01) m_t|=C;
- if (!m_a) m_t|=Z;
- if (m_a & 0x08) m_t|=H;
- if ((BIT(n,0) && BIT(m_a,1)) || (BIT(m_a,0) && BIT(n,1))) m_t|=V;
+ m_a >>= 1;
+ m_t &= ~(H | V | Z | C);
+ if (n & 0x01)
+ m_t |= C;
+ if (!m_a)
+ m_t |= Z;
+ if (m_a & 0x08)
+ m_t |= H;
+ if ((BIT(n, 0) && BIT(m_a, 1)) || (BIT(m_a, 0) && BIT(n, 1)))
+ m_t |= V;
}
void lh5801_cpu_device::lh5801_am(int value)
{
- m_tm=value;
- // jfkas?jfkl?jkd?
+ m_tm = value;
}
void lh5801_cpu_device::lh5801_ita()
{
- m_a=m_in_func();
- m_t&=~Z;
- if (!m_a) m_t|=Z;
+ m_a = m_in_func();
+ m_t &= ~Z;
+ if (!m_a)
+ {
+ m_t |= Z;
+ }
}
void lh5801_cpu_device::lh5801_instruction_fd()
{
- int oper;
int adr;
- oper=m_cache->read_byte(P++);
- switch (oper) {
- case 0x01: lh5801_sbc(m_io->read_byte(X)); m_icount-=11;break;
- case 0x03: lh5801_adc(m_io->read_byte(X)); m_icount-=11;break;
- case 0x05: lh5801_lda(m_io->read_byte(X)); m_icount-=10;break;
- case 0x07: lh5801_cpa(m_a, m_io->read_byte(X)); m_icount-=11;break;
- case 0x08: X=X;m_icount-=11;break; //!!!
- case 0x09: lh5801_and(m_io->read_byte(X)); m_icount-=11;break;
- case 0x0a: lh5801_pop_word(&m_x); m_icount-=15;break;
- case 0x0b: lh5801_ora(m_io->read_byte(X)); m_icount-=11;break;
- case 0x0c: lh5801_dcs(m_io->read_byte(X)); m_icount-=17; break;
- case 0x0d: lh5801_eor(m_io->read_byte(X)); m_icount-=11;break;
- case 0x0e: m_io->write_byte(X,m_a); m_icount-=10;break;
- case 0x0f: lh5801_bit(m_io->read_byte(X),m_a); m_icount-=11;break;
- case 0x11: lh5801_sbc(m_io->read_byte(Y)); m_icount-=11;break;
- case 0x13: lh5801_adc(m_io->read_byte(Y)); m_icount-=11;break;
- case 0x15: lh5801_lda(m_io->read_byte(Y)); m_icount-=10;break;
- case 0x17: lh5801_cpa(m_a, m_io->read_byte(Y)); m_icount-=11;break;
- case 0x18: X=Y;m_icount-=11;break;
- case 0x19: lh5801_and(m_io->read_byte(Y)); m_icount-=11;break;
- case 0x1a: lh5801_pop_word(&m_y); m_icount-=15;break;
- case 0x1b: lh5801_ora(m_io->read_byte(Y)); m_icount-=11;break;
- case 0x1c: lh5801_dcs(m_io->read_byte(Y)); m_icount-=17; break;
- case 0x1d: lh5801_eor(m_io->read_byte(Y)); m_icount-=11;break;
- case 0x1e: m_io->write_byte(Y,m_a); m_icount-=10;break;
- case 0x1f: lh5801_bit(m_io->read_byte(Y),m_a); m_icount-=11;break;
- case 0x21: lh5801_sbc(m_io->read_byte(U)); m_icount-=11;break;
- case 0x23: lh5801_adc(m_io->read_byte(U)); m_icount-=11;break;
- case 0x25: lh5801_lda(m_io->read_byte(U)); m_icount-=10;break;
- case 0x27: lh5801_cpa(m_a, m_io->read_byte(U)); m_icount-=11;break;
- case 0x28: X=U;m_icount-=11;break;
- case 0x29: lh5801_and(m_io->read_byte(U)); m_icount-=11;break;
- case 0x2a: lh5801_pop_word(&m_u); m_icount-=15;break;
- case 0x2b: lh5801_ora(m_io->read_byte(U)); m_icount-=11;break;
- case 0x2c: lh5801_dcs(m_io->read_byte(U)); m_icount-=17; break;
- case 0x2d: lh5801_eor(m_io->read_byte(U)); m_icount-=11;break;
- case 0x2e: m_io->write_byte(U,m_a); m_icount-=10;break;
- case 0x2f: lh5801_bit(m_io->read_byte(U),m_a); m_icount-=11;break;
- case 0x40: lh5801_inc(&XH);m_icount-=9;break;
- case 0x42: lh5801_dec(&XH);m_icount-=9;break;
- case 0x48: X=S;m_icount-=11;break;
- case 0x49: lh5801_and_mem(*m_io, X, m_cache->read_byte(P++)); m_icount-=17;break;
- case 0x4a: X=X;m_icount-=11;break; //!!!
- case 0x4b: lh5801_ora_mem(*m_io, X, m_cache->read_byte(P++)); m_icount-=17;break;
- case 0x4c: m_bf=0;/*off !*/ m_icount-=8;break;
- case 0x4d: lh5801_bit(m_io->read_byte(X), m_cache->read_byte(P++));m_icount-=14;break;
- case 0x4e: S=X;m_icount-=11;break;
- case 0x4f: lh5801_add_mem(*m_io, X, m_cache->read_byte(P++)); m_icount-=17;break;
- case 0x50: lh5801_inc(&YH);m_icount-=9;break;
- case 0x52: lh5801_dec(&YH);m_icount-=9;break;
- case 0x58: X=P;m_icount-=11;break;
- case 0x59: lh5801_and_mem(*m_io, Y, m_cache->read_byte(P++)); m_icount-=17;break;
- case 0x5a: Y=X;m_icount-=11;break;
- case 0x5b: lh5801_ora_mem(*m_io, Y, m_cache->read_byte(P++)); m_icount-=17;break;
- case 0x5d: lh5801_bit(m_io->read_byte(Y), m_cache->read_byte(P++));m_icount-=14;break;
- case 0x5e: lh5801_jmp(X);m_icount-=11;break; // P=X
- case 0x5f: lh5801_add_mem(*m_io, Y, m_cache->read_byte(P++)); m_icount-=17;break;
- case 0x60: lh5801_inc(&UH);m_icount-=9;break;
- case 0x62: lh5801_dec(&UH);m_icount-=9;break;
- case 0x69: lh5801_and_mem(*m_io, U, m_cache->read_byte(P++)); m_icount-=17;break;
- case 0x6a: U=X;m_icount-=11;break;
- case 0x6b: lh5801_ora_mem(*m_io, U, m_cache->read_byte(P++)); m_icount-=17;break;
- case 0x6d: lh5801_bit(m_io->read_byte(X), m_cache->read_byte(P++));m_icount-=14;break;
- case 0x6f: lh5801_add_mem(*m_io, U, m_cache->read_byte(P++)); m_icount-=17;break;
- case 0x81: m_t|=IE; /*sie !*/m_icount-=8;break;
- case 0x88: lh5801_push_word(X); m_icount-=14;break;
- case 0x8a: lh5801_pop(); m_icount-=12; break;
- case 0x8c: lh5801_dca(m_io->read_byte(X)); m_icount-=19; break;
- case 0x8e: /*cdv clears internal devider*/m_icount-=8;break;
- case 0x98: lh5801_push_word(Y); m_icount-=14;break;
- case 0x9c: lh5801_dca(m_io->read_byte(Y)); m_icount-=19; break;
- case 0xa1: lh5801_sbc(m_io->read_byte(lh5801_readop_word())); m_icount-=17;break;
- case 0xa3: lh5801_adc(m_io->read_byte(lh5801_readop_word())); m_icount-=17;break;
- case 0xa5: lh5801_lda(m_io->read_byte(lh5801_readop_word())); m_icount-=16;break;
- case 0xa7: lh5801_cpa(m_a, m_io->read_byte(lh5801_readop_word())); m_icount-=17;break;
- case 0xa8: lh5801_push_word(U); m_icount-=14;break;
- case 0xa9: lh5801_and(m_io->read_byte(lh5801_readop_word())); m_icount-=17;break;
- case 0xaa: lh5801_lda(m_t); m_icount-=9;break;
- case 0xab: lh5801_ora(m_io->read_byte(lh5801_readop_word())); m_icount-=17;break;
- case 0xac: lh5801_dca(m_io->read_byte(U)); m_icount-=19; break;
- case 0xad: lh5801_eor(m_io->read_byte(lh5801_readop_word())); m_icount-=17;break;
- case 0xae: m_io->write_byte(lh5801_readop_word(),m_a); m_icount-=16;break;
- case 0xaf: lh5801_bit(m_io->read_byte(lh5801_readop_word()),m_a); m_icount-=17;break;
- case 0xb1: /*hlt*/m_icount-=8;break;
- case 0xba: lh5801_ita();m_icount-=9;break;
- case 0xbe: m_t&=~IE; /*rie !*/m_icount-=8;break;
- case 0xc0: m_dp=0; /*rdp !*/m_icount-=8;break;
- case 0xc1: m_dp=1; /*sdp !*/m_icount-=8;break;
- case 0xc8: lh5801_push(m_a); m_icount-=11;break;
- case 0xca: lh5801_adr(&m_x);m_icount-=11;break;
- case 0xcc: /*atp sends a to data bus*/m_icount-=9;break;
- case 0xce: lh5801_am(m_a); m_icount-=9; break;
- case 0xd3: lh5801_drr(*m_io, X); m_icount-=16; break;
- case 0xd7: lh5801_drl(*m_io, X); m_icount-=16; break;
- case 0xda: lh5801_adr(&m_y);m_icount-=11;break;
- case 0xde: lh5801_am(m_a|0x100); m_icount-=9; break;
- case 0xea: lh5801_adr(&m_u);m_icount-=11;break;
+ int oper = m_cache->read_byte(P++);
+ switch (oper)
+ {
+ case 0x01:
+ lh5801_sbc(m_io->read_byte(X));
+ m_icount -= 11;
+ break;
+ case 0x03:
+ lh5801_adc(m_io->read_byte(X));
+ m_icount -= 11;
+ break;
+ case 0x05:
+ lh5801_lda(m_io->read_byte(X));
+ m_icount -= 10;
+ break;
+ case 0x07:
+ lh5801_cpa(m_a, m_io->read_byte(X));
+ m_icount -= 11;
+ break;
+ case 0x08: // TODO: What does this opcode actually do?
+ X = X;
+ m_icount -= 11;
+ break;
+ case 0x09:
+ lh5801_and(m_io->read_byte(X));
+ m_icount -= 11;
+ break;
+ case 0x0a:
+ lh5801_pop_word(&m_x);
+ m_icount -= 15;
+ break;
+ case 0x0b:
+ lh5801_ora(m_io->read_byte(X));
+ m_icount -= 11;
+ break;
+ case 0x0c:
+ lh5801_dcs(m_io->read_byte(X));
+ m_icount -= 17;
+ break;
+ case 0x0d:
+ lh5801_eor(m_io->read_byte(X));
+ m_icount -= 11;
+ break;
+ case 0x0e:
+ m_io->write_byte(X, m_a);
+ m_icount -= 10;
+ break;
+ case 0x0f:
+ lh5801_bit(m_io->read_byte(X), m_a);
+ m_icount -= 11;
+ break;
+ case 0x11:
+ lh5801_sbc(m_io->read_byte(Y));
+ m_icount -= 11;
+ break;
+ case 0x13:
+ lh5801_adc(m_io->read_byte(Y));
+ m_icount -= 11;
+ break;
+ case 0x15:
+ lh5801_lda(m_io->read_byte(Y));
+ m_icount -= 10;
+ break;
+ case 0x17:
+ lh5801_cpa(m_a, m_io->read_byte(Y));
+ m_icount -= 11;
+ break;
+ case 0x18:
+ X = Y;
+ m_icount -= 11;
+ break;
+ case 0x19:
+ lh5801_and(m_io->read_byte(Y));
+ m_icount -= 11;
+ break;
+ case 0x1a:
+ lh5801_pop_word(&m_y);
+ m_icount -= 15;
+ break;
+ case 0x1b:
+ lh5801_ora(m_io->read_byte(Y));
+ m_icount -= 11;
+ break;
+ case 0x1c:
+ lh5801_dcs(m_io->read_byte(Y));
+ m_icount -= 17;
+ break;
+ case 0x1d:
+ lh5801_eor(m_io->read_byte(Y));
+ m_icount -= 11;
+ break;
+ case 0x1e: m_io->write_byte(Y,m_a);
+ m_icount -= 10;
+ break;
+ case 0x1f:
+ lh5801_bit(m_io->read_byte(Y),m_a);
+ m_icount -= 11;
+ break;
+ case 0x21:
+ lh5801_sbc(m_io->read_byte(U));
+ m_icount -= 11;
+ break;
+ case 0x23:
+ lh5801_adc(m_io->read_byte(U));
+ m_icount -= 11;
+ break;
+ case 0x25:
+ lh5801_lda(m_io->read_byte(U));
+ m_icount -= 10;
+ break;
+ case 0x27:
+ lh5801_cpa(m_a, m_io->read_byte(U));
+ m_icount -= 11;
+ break;
+ case 0x28:
+ X = U;
+ m_icount -= 11;
+ break;
+ case 0x29:
+ lh5801_and(m_io->read_byte(U));
+ m_icount -= 11;
+ break;
+ case 0x2a:
+ lh5801_pop_word(&m_u);
+ m_icount -= 15;
+ break;
+ case 0x2b:
+ lh5801_ora(m_io->read_byte(U));
+ m_icount -= 11;
+ break;
+ case 0x2c:
+ lh5801_dcs(m_io->read_byte(U));
+ m_icount -= 17;
+ break;
+ case 0x2d:
+ lh5801_eor(m_io->read_byte(U));
+ m_icount -= 11;
+ break;
+ case 0x2e: m_io->write_byte(U,m_a);
+ m_icount -= 10;
+ break;
+ case 0x2f:
+ lh5801_bit(m_io->read_byte(U),m_a);
+ m_icount -= 11;
+ break;
+ case 0x40:
+ lh5801_inc(&XH);
+ m_icount -= 9;
+ break;
+ case 0x42:
+ lh5801_dec(&XH);
+ m_icount -= 9;
+ break;
+ case 0x48:
+ X = S;
+ m_icount -= 11;
+ break;
+ case 0x49:
+ lh5801_and_mem(*m_io, X, m_cache->read_byte(P++));
+ m_icount -= 17;
+ break;
+ case 0x4a: // What does this opcode actually do?
+ X = X;
+ m_icount -= 11;
+ break;
+ case 0x4b:
+ lh5801_ora_mem(*m_io, X, m_cache->read_byte(P++));
+ m_icount -= 17;
+ break;
+ case 0x4c: /*off*/
+ m_bf = 0;
+ m_icount -= 8;
+ break;
+ case 0x4d:
+ lh5801_bit(m_io->read_byte(X), m_cache->read_byte(P++));
+ m_icount -= 14;
+ break;
+ case 0x4e:
+ S = X;
+ m_icount -= 11;
+ break;
+ case 0x4f:
+ lh5801_add_mem(*m_io, X, m_cache->read_byte(P++));
+ m_icount -= 17;
+ break;
+ case 0x50:
+ lh5801_inc(&YH);
+ m_icount -= 9;
+ break;
+ case 0x52:
+ lh5801_dec(&YH);
+ m_icount -= 9;
+ break;
+ case 0x58:
+ X = P;
+ m_icount -= 11;
+ break;
+ case 0x59:
+ lh5801_and_mem(*m_io, Y, m_cache->read_byte(P++));
+ m_icount -= 17;
+ break;
+ case 0x5a:
+ Y = X;
+ m_icount -= 11;
+ break;
+ case 0x5b:
+ lh5801_ora_mem(*m_io, Y, m_cache->read_byte(P++));
+ m_icount -= 17;
+ break;
+ case 0x5d:
+ lh5801_bit(m_io->read_byte(Y), m_cache->read_byte(P++));
+ m_icount -= 14;
+ break;
+ case 0x5e:
+ lh5801_jmp(X);
+ m_icount -= 11;
+ break; // P=X
+ case 0x5f:
+ lh5801_add_mem(*m_io, Y, m_cache->read_byte(P++));
+ m_icount -= 17;
+ break;
+ case 0x60:
+ lh5801_inc(&UH);
+ m_icount -= 9;
+ break;
+ case 0x62:
+ lh5801_dec(&UH);
+ m_icount -= 9;
+ break;
+ case 0x69:
+ lh5801_and_mem(*m_io, U, m_cache->read_byte(P++));
+ m_icount -= 17;
+ break;
+ case 0x6a:
+ U = X;
+ m_icount -= 11;
+ break;
+ case 0x6b:
+ lh5801_ora_mem(*m_io, U, m_cache->read_byte(P++));
+ m_icount -= 17;
+ break;
+ case 0x6d:
+ lh5801_bit(m_io->read_byte(X), m_cache->read_byte(P++));
+ m_icount -= 14;
+ break;
+ case 0x6f:
+ lh5801_add_mem(*m_io, U, m_cache->read_byte(P++));
+ m_icount -= 17;
+ break;
+ case 0x81: /*sie*/
+ m_t |= IE;
+ m_icount -= 8;
+ break;
+ case 0x88:
+ lh5801_push_word(X);
+ m_icount -= 14;
+ break;
+ case 0x8a:
+ lh5801_pop();
+ m_icount -= 12;
+ break;
+ case 0x8c:
+ lh5801_dca(m_io->read_byte(X));
+ m_icount -= 19;
+ break;
+ case 0x8e:
+ /*cdv clears internal divider*/
+ m_icount -= 8;
+ break;
+ case 0x98:
+ lh5801_push_word(Y);
+ m_icount -= 14;
+ break;
+ case 0x9c:
+ lh5801_dca(m_io->read_byte(Y));
+ m_icount -= 19;
+ break;
+ case 0xa1:
+ lh5801_sbc(m_io->read_byte(lh5801_readop_word()));
+ m_icount -= 17;
+ break;
+ case 0xa3:
+ lh5801_adc(m_io->read_byte(lh5801_readop_word()));
+ m_icount -= 17;
+ break;
+ case 0xa5:
+ lh5801_lda(m_io->read_byte(lh5801_readop_word()));
+ m_icount -= 16;
+ break;
+ case 0xa7:
+ lh5801_cpa(m_a, m_io->read_byte(lh5801_readop_word()));
+ m_icount -= 17;
+ break;
+ case 0xa8:
+ lh5801_push_word(U);
+ m_icount -= 14;
+ break;
+ case 0xa9:
+ lh5801_and(m_io->read_byte(lh5801_readop_word()));
+ m_icount -= 17;
+ break;
+ case 0xaa:
+ lh5801_lda(m_t);
+ m_icount -= 9;
+ break;
+ case 0xab:
+ lh5801_ora(m_io->read_byte(lh5801_readop_word()));
+ m_icount -= 17;
+ break;
+ case 0xac:
+ lh5801_dca(m_io->read_byte(U));
+ m_icount -= 19;
+ break;
+ case 0xad:
+ lh5801_eor(m_io->read_byte(lh5801_readop_word()));
+ m_icount -= 17;
+ break;
+ case 0xae:
+ m_io->write_byte(lh5801_readop_word(), m_a);
+ m_icount -= 16;
+ break;
+ case 0xaf:
+ lh5801_bit(m_io->read_byte(lh5801_readop_word()), m_a);
+ m_icount -= 17;
+ break;
+ case 0xb1: /*hlt*/
+ m_icount -= 8;
+ break;
+ case 0xba:
+ lh5801_ita();
+ m_icount -= 9;
+ break;
+ case 0xbe: /*rie*/
+ m_t &= ~IE;
+ m_icount -= 8;
+ break;
+ case 0xc0: /*rdp*/
+ m_dp = 0;
+ m_icount -= 8;
+ break;
+ case 0xc1:
+ m_dp = 1; /*sdp*/
+ m_icount -= 8;
+ break;
+ case 0xc8:
+ lh5801_push(m_a);
+ m_icount -= 11;
+ break;
+ case 0xca:
+ lh5801_adr(&m_x);
+ m_icount -= 11;
+ break;
+ case 0xcc:
+ /*atp sends a to data bus*/
+ m_icount -= 9;
+ break;
+ case 0xce:
+ lh5801_am(m_a);
+ m_icount -= 9;
+ break;
+ case 0xd3:
+ lh5801_drr(*m_io, X);
+ m_icount -= 16;
+ break;
+ case 0xd7:
+ lh5801_drl(*m_io, X);
+ m_icount -= 16;
+ break;
+ case 0xda:
+ lh5801_adr(&m_y);
+ m_icount -= 11;
+ break;
+ case 0xde:
+ lh5801_am(m_a | 0x100);
+ m_icount -= 9;
+ break;
+ case 0xea:
+ lh5801_adr(&m_u);
+ m_icount -= 11;
+ break;
case 0xe9:
- adr=lh5801_readop_word();
- lh5801_and_mem(*m_io, adr, m_cache->read_byte(P++)); m_icount-=23;
+ adr = lh5801_readop_word();
+ lh5801_and_mem(*m_io, adr, m_cache->read_byte(P++));
+ m_icount -= 23;
break;
case 0xeb:
- adr=lh5801_readop_word();
- lh5801_ora_mem(*m_io, adr, m_cache->read_byte(P++)); m_icount-=23;
+ adr = lh5801_readop_word();
+ lh5801_ora_mem(*m_io, adr, m_cache->read_byte(P++));
+ m_icount -= 23;
+ break;
+ case 0xec:
+ m_t = m_a;
+ m_icount -= 9;
break;
- case 0xec: m_t=m_a; m_icount-=9;break;
case 0xed:
- adr=lh5801_readop_word();
+ adr = lh5801_readop_word();
lh5801_bit(m_io->read_byte(adr), m_cache->read_byte(P++));
- m_icount-=20;break;
+ m_icount -= 20;
+ break;
case 0xef:
- adr=lh5801_readop_word();
- lh5801_add_mem(*m_io, adr, m_cache->read_byte(P++)); m_icount-=23;
+ adr = lh5801_readop_word();
+ lh5801_add_mem(*m_io, adr, m_cache->read_byte(P++));
+ m_icount -= 23;
break;
default:
- logerror("lh5801 illegal opcode at %.4x fd%.2x\n",P-2, oper);
+ logerror("lh5801 illegal opcode at %04x fd(%02x)\n", P-2, oper);
}
}
void lh5801_cpu_device::lh5801_instruction()
{
- int oper;
int adr;
- oper=m_cache->read_byte(P++);
+ int oper = m_cache->read_byte(P++);
switch (oper) {
- case 0x00: lh5801_sbc(XL); m_icount-=6;break;
- case 0x01: lh5801_sbc(m_program->read_byte(X)); m_icount-=7;break;
- case 0x02: lh5801_adc(XL); m_icount-=6;break;
- case 0x03: lh5801_adc(m_program->read_byte(X)); m_icount-=7;break;
- case 0x04: lh5801_lda(XL); m_icount-=5;break;
- case 0x05: lh5801_lda(m_program->read_byte(X)); m_icount-=6;break;
- case 0x06: lh5801_cpa(m_a, XL); m_icount-=6;break;
- case 0x07: lh5801_cpa(m_a, m_program->read_byte(X)); m_icount-=7;break;
- case 0x08: XH=m_a; m_icount-=5; break;
- case 0x09: lh5801_and(m_program->read_byte(X)); m_icount-=7;break;
- case 0x0a: XL=m_a; m_icount-=5; break;
- case 0x0b: lh5801_ora(m_program->read_byte(X)); m_icount-=7;break;
- case 0x0c: lh5801_dcs(m_program->read_byte(X)); m_icount-=13; break;
- case 0x0d: lh5801_eor(m_program->read_byte(X)); m_icount-=7;break;
- case 0x0e: m_program->write_byte(X,m_a); m_icount-=6;break;
- case 0x0f: lh5801_bit(m_program->read_byte(X),m_a); m_icount-=7;break;
- case 0x10: lh5801_sbc(YL); m_icount-=6;break;
- case 0x11: lh5801_sbc(m_program->read_byte(Y)); m_icount-=7;break;
- case 0x12: lh5801_adc(YL); m_icount-=6;break;
- case 0x13: lh5801_adc(m_program->read_byte(Y)); m_icount-=7;break;
- case 0x14: lh5801_lda(YL); m_icount-=5;break;
- case 0x15: lh5801_lda(m_program->read_byte(Y)); m_icount-=6;break;
- case 0x16: lh5801_cpa(m_a, YL); m_icount-=6;break;
- case 0x17: lh5801_cpa(m_a, m_program->read_byte(Y)); m_icount-=7;break;
- case 0x18: YH=m_a; m_icount-=5; break;
- case 0x19: lh5801_and(m_program->read_byte(Y)); m_icount-=7;break;
- case 0x1a: YL=m_a; m_icount-=5; break;
- case 0x1b: lh5801_ora(m_program->read_byte(Y)); m_icount-=7;break;
- case 0x1c: lh5801_dcs(m_program->read_byte(Y)); m_icount-=13; break;
- case 0x1d: lh5801_eor(m_program->read_byte(Y)); m_icount-=7;break;
- case 0x1e: m_program->write_byte(Y,m_a); m_icount-=6;break;
- case 0x1f: lh5801_bit(m_program->read_byte(Y),m_a); m_icount-=7;break;
- case 0x20: lh5801_sbc(UL); m_icount-=6;break;
- case 0x21: lh5801_sbc(m_program->read_byte(U)); m_icount-=7;break;
- case 0x22: lh5801_adc(UL); m_icount-=6;break;
- case 0x23: lh5801_adc(m_program->read_byte(U)); m_icount-=7;break;
- case 0x24: lh5801_lda(UL); m_icount-=5;break;
- case 0x25: lh5801_lda(m_program->read_byte(U)); m_icount-=6;break;
- case 0x26: lh5801_cpa(m_a, UL); m_icount-=6;break;
- case 0x27: lh5801_cpa(m_a, m_program->read_byte(U)); m_icount-=7;break;
- case 0x28: UH=m_a; m_icount-=5; break;
- case 0x29: lh5801_and(m_program->read_byte(U)); m_icount-=7;break;
- case 0x2a: UL=m_a; m_icount-=5; break;
- case 0x2b: lh5801_ora(m_program->read_byte(U)); m_icount-=7;break;
- case 0x2c: lh5801_dcs(m_program->read_byte(U)); m_icount-=13; break;
- case 0x2d: lh5801_eor(m_program->read_byte(U)); m_icount-=7;break;
- case 0x2e: m_program->write_byte(U,m_a); m_icount-=6;break;
- case 0x2f: lh5801_bit(m_program->read_byte(U),m_a); m_icount-=7;break;
- case 0x38: /*nop*/m_icount-=5;break;
- case 0x40: lh5801_inc(&XL);m_icount-=5;break;
- case 0x41: lh5801_sin(&m_x); m_icount-=6;break;
- case 0x42: lh5801_dec(&XL);m_icount-=5;break;
- case 0x43: lh5801_sde(&m_x); m_icount-=6;break;
- case 0x44: X++;m_icount-=5;break;
- case 0x45: lh5801_lin(&m_x);m_icount-=6;break;
- case 0x46: X--;m_icount-=5;break;
- case 0x47: lh5801_lde(&m_x);m_icount-=6;break;
- case 0x48: XH=m_cache->read_byte(P++);m_icount-=6;break;
- case 0x49: lh5801_and_mem(*m_program, X, m_cache->read_byte(P++)); m_icount-=13;break;
- case 0x4a: XL=m_cache->read_byte(P++);m_icount-=6;break;
- case 0x4b: lh5801_ora_mem(*m_program, X, m_cache->read_byte(P++)); m_icount-=13;break;
- case 0x4c: lh5801_cpa(XH, m_cache->read_byte(P++)); m_icount-=7;break;
- case 0x4d: lh5801_bit(m_program->read_byte(X), m_cache->read_byte(P++));m_icount-=10;break;
- case 0x4e: lh5801_cpa(XL, m_cache->read_byte(P++)); m_icount-=7;break;
- case 0x4f: lh5801_add_mem(*m_program, X, m_cache->read_byte(P++)); m_icount-=13;break;
- case 0x50: lh5801_inc(&YL);m_icount-=5;break;
- case 0x51: lh5801_sin(&m_y); m_icount-=6;break;
- case 0x52: lh5801_dec(&YL);m_icount-=5;break;
- case 0x53: lh5801_sde(&m_y); m_icount-=6;break;
- case 0x54: Y++;m_icount-=5;break;
- case 0x55: lh5801_lin(&m_y);m_icount-=6;break;
- case 0x56: Y--;m_icount-=5;break;
- case 0x57: lh5801_lde(&m_y);m_icount-=6;break;
- case 0x58: YH=m_cache->read_byte(P++);m_icount-=6;break;
- case 0x59: lh5801_and_mem(*m_program, Y, m_cache->read_byte(P++)); m_icount-=13;break;
- case 0x5a: YL=m_cache->read_byte(P++);m_icount-=6;break;
- case 0x5b: lh5801_ora_mem(*m_program, Y, m_cache->read_byte(P++)); m_icount-=13;break;
- case 0x5c: lh5801_cpa(YH, m_cache->read_byte(P++)); m_icount-=7;break;
- case 0x5d: lh5801_bit(m_program->read_byte(Y), m_cache->read_byte(P++));m_icount-=10;break;
- case 0x5e: lh5801_cpa(YL, m_cache->read_byte(P++)); m_icount-=7;break;
- case 0x5f: lh5801_add_mem(*m_program, Y, m_cache->read_byte(P++)); m_icount-=13;break;
- case 0x60: lh5801_inc(&UL);m_icount-=5;break;
- case 0x61: lh5801_sin(&m_u); m_icount-=6;break;
- case 0x62: lh5801_dec(&UL);m_icount-=5;break;
- case 0x63: lh5801_sde(&m_u); m_icount-=6;break;
- case 0x64: U++;m_icount-=5;break;
- case 0x65: lh5801_lin(&m_u);m_icount-=6;break;
- case 0x66: U--;m_icount-=5;break;
- case 0x67: lh5801_lde(&m_u);m_icount-=6;break;
- case 0x68: UH=m_cache->read_byte(P++);m_icount-=6;break;
- case 0x69: lh5801_and_mem(*m_program, U, m_cache->read_byte(P++)); m_icount-=13;break;
- case 0x6a: UL=m_cache->read_byte(P++);m_icount-=6;break;
- case 0x6b: lh5801_ora_mem(*m_program, U, m_cache->read_byte(P++)); m_icount-=13;break;
- case 0x6c: lh5801_cpa(UH, m_cache->read_byte(P++)); m_icount-=7;break;
- case 0x6d: lh5801_bit(m_program->read_byte(U), m_cache->read_byte(P++));m_icount-=10;break;
- case 0x6e: lh5801_cpa(UL, m_cache->read_byte(P++)); m_icount-=7;break;
- case 0x6f: lh5801_add_mem(*m_program, U, m_cache->read_byte(P++)); m_icount-=13;break;
- case 0x80: lh5801_sbc(XH); m_icount-=6;break;
- case 0x81: lh5801_branch_plus(!(m_t&C)); m_icount-=8; break;
- case 0x82: lh5801_adc(XH); m_icount-=6;break;
- case 0x83: lh5801_branch_plus(m_t&C); m_icount-=8; break;
- case 0x84: lh5801_lda(XH); m_icount-=5;break;
- case 0x85: lh5801_branch_plus(!(m_t&H)); m_icount-=8; break;
- case 0x86: lh5801_cpa(m_a, XH); m_icount-=6;break;
- case 0x87: lh5801_branch_plus(m_t&H); m_icount-=8; break;
- case 0x88: lh5801_lop(); break;
- case 0x89: lh5801_branch_plus(!(m_t&Z)); m_icount-=8; break;
- case 0x8a: lh5801_rti(); m_icount-=14; break;
- case 0x8b: lh5801_branch_plus(m_t&Z); m_icount-=8; break;
- case 0x8c: lh5801_dca(m_program->read_byte(X)); m_icount-=15; break;
- case 0x8d: lh5801_branch_plus(!(m_t&V)); m_icount-=8; break;
- case 0x8e: lh5801_branch_plus(1); m_icount-=5; break;
- case 0x8f: lh5801_branch_plus(m_t&V); m_icount-=8; break;
- case 0x90: lh5801_sbc(YH); m_icount-=6;break;
- case 0x91: lh5801_branch_minus(!(m_t&C)); m_icount-=8; break;
- case 0x92: lh5801_adc(YH); m_icount-=6;break;
- case 0x93: lh5801_branch_minus(m_t&C); m_icount-=8; break;
- case 0x94: lh5801_lda(YH); m_icount-=5;break;
- case 0x95: lh5801_branch_minus(!(m_t&H)); m_icount-=8; break;
- case 0x96: lh5801_cpa(m_a, YH); m_icount-=6;break;
- case 0x97: lh5801_branch_minus(m_t&H); m_icount-=8; break;
- case 0x99: lh5801_branch_minus(!(m_t&Z)); m_icount-=8; break;
- case 0x9a: lh5801_rtn(); m_icount-=11; break;
- case 0x9b: lh5801_branch_minus(m_t&Z); m_icount-=8; break;
- case 0x9c: lh5801_dca(m_program->read_byte(Y)); m_icount-=15; break;
- case 0x9d: lh5801_branch_minus(!(m_t&V)); m_icount-=8; break;
- case 0x9e: lh5801_branch_minus(1); m_icount-=6; break;
- case 0x9f: lh5801_branch_minus(m_t&V); m_icount-=8; break;
- case 0xa0: lh5801_sbc(UH); m_icount-=6;break;
- case 0xa2: lh5801_adc(UH); m_icount-=6;break;
- case 0xa1: lh5801_sbc(m_program->read_byte(lh5801_readop_word())); m_icount-=13;break;
- case 0xa3: lh5801_adc(m_program->read_byte(lh5801_readop_word())); m_icount-=13;break;
- case 0xa4: lh5801_lda(UH); m_icount-=5;break;
- case 0xa5: lh5801_lda(m_program->read_byte(lh5801_readop_word())); m_icount-=12;break;
- case 0xa6: lh5801_cpa(m_a, UH); m_icount-=6;break;
- case 0xa7: lh5801_cpa(m_a, m_program->read_byte(lh5801_readop_word())); m_icount-=13;break;
- case 0xa8: m_pv=1;/*spv!*/ m_icount-=4; break;
- case 0xa9: lh5801_and(m_program->read_byte(lh5801_readop_word())); m_icount-=13;break;
- case 0xaa: S=lh5801_readop_word();m_icount-=6;break;
- case 0xab: lh5801_ora(m_program->read_byte(lh5801_readop_word())); m_icount-=13;break;
- case 0xac: lh5801_dca(m_program->read_byte(U)); m_icount-=15; break;
- case 0xad: lh5801_eor(m_program->read_byte(lh5801_readop_word())); m_icount-=13;break;
- case 0xae: m_program->write_byte(lh5801_readop_word(),m_a); m_icount-=12;break;
- case 0xaf: lh5801_bit(m_program->read_byte(lh5801_readop_word()),m_a); m_icount-=13;break;
- case 0xb1: lh5801_sbc(m_cache->read_byte(P++)); m_icount-=7;break;
- case 0xb3: lh5801_adc(m_cache->read_byte(P++)); m_icount-=7;break;
- case 0xb5: lh5801_lda(m_cache->read_byte(P++)); m_icount-=6;break;
- case 0xb7: lh5801_cpa(m_a, m_cache->read_byte(P++)); m_icount-=7;break;
- case 0xb8: m_pv=0;/*rpv!*/ m_icount-=4; break;
- case 0xb9: lh5801_and(m_cache->read_byte(P++)); m_icount-=7;break;
- case 0xba: lh5801_jmp(lh5801_readop_word()); m_icount-=12;break;
- case 0xbb: lh5801_ora(m_cache->read_byte(P++)); m_icount-=7;break;
- case 0xbd: lh5801_eor(m_cache->read_byte(P++)); m_icount-=7;break;
- case 0xbe: lh5801_sjp(); m_icount-=19; break;
- case 0xbf: lh5801_bit(m_a, m_cache->read_byte(P++));m_icount-=7;break;
- case 0xc1: lh5801_vector(!(m_t&C), m_cache->read_byte(P++)); m_icount-=8;break;
- case 0xc3: lh5801_vector(m_t&C, m_cache->read_byte(P++)); m_icount-=8;break;
- case 0xc5: lh5801_vector(!(m_t&H), m_cache->read_byte(P++)); m_icount-=8;break;
- case 0xc7: lh5801_vector(m_t&H, m_cache->read_byte(P++)); m_icount-=8;break;
- case 0xc9: lh5801_vector(!(m_t&Z), m_cache->read_byte(P++)); m_icount-=8;break;
- case 0xcb: lh5801_vector(m_t&Z, m_cache->read_byte(P++)); m_icount-=8;break;
- case 0xcd: lh5801_vector(1, m_cache->read_byte(P++)); m_icount-=7;break;
- case 0xcf: lh5801_vector(m_t&V, m_cache->read_byte(P++)); m_icount-=8;break;
- case 0xd1: lh5801_ror(); m_icount-=6; break;
- case 0xd3: lh5801_drr(*m_program, X); m_icount-=12; break;
- case 0xd5: lh5801_shr(); m_icount-=6; break;
- case 0xd7: lh5801_drl(*m_program, X); m_icount-=12; break;
- case 0xd9: lh5801_shl(); m_icount-=6; break;
- case 0xdb: lh5801_rol(); m_icount-=6; break;
- case 0xdd: lh5801_inc(&m_a);m_icount-=5;break;
- case 0xdf: lh5801_dec(&m_a);m_icount-=5;break;
- case 0xe1: m_pu=1;/*spu!*/ m_icount-=4; break;
- case 0xe3: m_pu=0;/*rpu!*/ m_icount-=4; break;
+ case 0x00:
+ lh5801_sbc(XL);
+ m_icount -= 6;
+ break;
+ case 0x01:
+ lh5801_sbc(m_program->read_byte(X));
+ m_icount -= 7;
+ break;
+ case 0x02:
+ lh5801_adc(XL);
+ m_icount -= 6;
+ break;
+ case 0x03:
+ lh5801_adc(m_program->read_byte(X));
+ m_icount -= 7;
+ break;
+ case 0x04:
+ lh5801_lda(XL);
+ m_icount -= 5;
+ break;
+ case 0x05:
+ lh5801_lda(m_program->read_byte(X));
+ m_icount -= 6;
+ break;
+ case 0x06:
+ lh5801_cpa(m_a, XL);
+ m_icount -= 6;
+ break;
+ case 0x07:
+ lh5801_cpa(m_a, m_program->read_byte(X));
+ m_icount -= 7;
+ break;
+ case 0x08:
+ XH = m_a;
+ m_icount -= 5;
+ break;
+ case 0x09:
+ lh5801_and(m_program->read_byte(X));
+ m_icount -= 7;
+ break;
+ case 0x0a:
+ XL = m_a;
+ m_icount -= 5;
+ break;
+ case 0x0b:
+ lh5801_ora(m_program->read_byte(X));
+ m_icount -= 7;
+ break;
+ case 0x0c:
+ lh5801_dcs(m_program->read_byte(X));
+ m_icount -= 13;
+ break;
+ case 0x0d:
+ lh5801_eor(m_program->read_byte(X));
+ m_icount -= 7;
+ break;
+ case 0x0e:
+ m_program->write_byte(X,m_a);
+ m_icount -= 6;
+ break;
+ case 0x0f:
+ lh5801_bit(m_program->read_byte(X),m_a);
+ m_icount -= 7;
+ break;
+ case 0x10:
+ lh5801_sbc(YL);
+ m_icount -= 6;
+ break;
+ case 0x11:
+ lh5801_sbc(m_program->read_byte(Y));
+ m_icount -= 7;
+ break;
+ case 0x12:
+ lh5801_adc(YL);
+ m_icount -= 6;
+ break;
+ case 0x13:
+ lh5801_adc(m_program->read_byte(Y));
+ m_icount -= 7;
+ break;
+ case 0x14:
+ lh5801_lda(YL);
+ m_icount -= 5;
+ break;
+ case 0x15:
+ lh5801_lda(m_program->read_byte(Y));
+ m_icount -= 6;
+ break;
+ case 0x16:
+ lh5801_cpa(m_a, YL);
+ m_icount -= 6;
+ break;
+ case 0x17:
+ lh5801_cpa(m_a, m_program->read_byte(Y));
+ m_icount -= 7;
+ break;
+ case 0x18:
+ YH = m_a;
+ m_icount -= 5;
+ break;
+ case 0x19:
+ lh5801_and(m_program->read_byte(Y));
+ m_icount -= 7;
+ break;
+ case 0x1a:
+ YL = m_a;
+ m_icount -= 5;
+ break;
+ case 0x1b:
+ lh5801_ora(m_program->read_byte(Y));
+ m_icount -= 7;
+ break;
+ case 0x1c:
+ lh5801_dcs(m_program->read_byte(Y));
+ m_icount -= 13;
+ break;
+ case 0x1d:
+ lh5801_eor(m_program->read_byte(Y));
+ m_icount -= 7;
+ break;
+ case 0x1e: m_program->write_byte(Y,m_a);
+ m_icount -= 6;
+ break;
+ case 0x1f:
+ lh5801_bit(m_program->read_byte(Y),m_a);
+ m_icount -= 7;
+ break;
+ case 0x20:
+ lh5801_sbc(UL);
+ m_icount -= 6;
+ break;
+ case 0x21:
+ lh5801_sbc(m_program->read_byte(U));
+ m_icount -= 7;
+ break;
+ case 0x22:
+ lh5801_adc(UL);
+ m_icount -= 6;
+ break;
+ case 0x23:
+ lh5801_adc(m_program->read_byte(U));
+ m_icount -= 7;
+ break;
+ case 0x24:
+ lh5801_lda(UL);
+ m_icount -= 5;
+ break;
+ case 0x25:
+ lh5801_lda(m_program->read_byte(U));
+ m_icount -= 6;
+ break;
+ case 0x26:
+ lh5801_cpa(m_a, UL);
+ m_icount -= 6;
+ break;
+ case 0x27:
+ lh5801_cpa(m_a, m_program->read_byte(U));
+ m_icount -= 7;
+ break;
+ case 0x28:
+ UH = m_a;
+ m_icount -= 5;
+ break;
+ case 0x29:
+ lh5801_and(m_program->read_byte(U));
+ m_icount -= 7;
+ break;
+ case 0x2a:
+ UL = m_a;
+ m_icount -= 5;
+ break;
+ case 0x2b:
+ lh5801_ora(m_program->read_byte(U));
+ m_icount -= 7;
+ break;
+ case 0x2c:
+ lh5801_dcs(m_program->read_byte(U));
+ m_icount -= 13;
+ break;
+ case 0x2d:
+ lh5801_eor(m_program->read_byte(U));
+ m_icount -= 7;
+ break;
+ case 0x2e:
+ m_program->write_byte(U, m_a);
+ m_icount -= 6;
+ break;
+ case 0x2f:
+ lh5801_bit(m_program->read_byte(U), m_a);
+ m_icount -= 7;
+ break;
+ case 0x38: /*nop*/
+ m_icount -= 5;
+ break;
+ case 0x40:
+ lh5801_inc(&XL);
+ m_icount -= 5;
+ break;
+ case 0x41:
+ lh5801_sin(&m_x);
+ m_icount -= 6;
+ break;
+ case 0x42:
+ lh5801_dec(&XL);
+ m_icount -= 5;
+ break;
+ case 0x43:
+ lh5801_sde(&m_x);
+ m_icount -= 6;
+ break;
+ case 0x44: X++;
+ m_icount -= 5;
+ break;
+ case 0x45:
+ lh5801_lin(&m_x);
+ m_icount -= 6;
+ break;
+ case 0x46: X--;
+ m_icount -= 5;
+ break;
+ case 0x47:
+ lh5801_lde(&m_x);
+ m_icount -= 6;
+ break;
+ case 0x48: XH=m_cache->read_byte(P++);
+ m_icount -= 6;
+ break;
+ case 0x49:
+ lh5801_and_mem(*m_program, X, m_cache->read_byte(P++));
+ m_icount -= 13;
+ break;
+ case 0x4a: XL=m_cache->read_byte(P++);
+ m_icount -= 6;
+ break;
+ case 0x4b:
+ lh5801_ora_mem(*m_program, X, m_cache->read_byte(P++));
+ m_icount -= 13;
+ break;
+ case 0x4c:
+ lh5801_cpa(XH, m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0x4d:
+ lh5801_bit(m_program->read_byte(X), m_cache->read_byte(P++));
+ m_icount -= 10;
+ break;
+ case 0x4e:
+ lh5801_cpa(XL, m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0x4f:
+ lh5801_add_mem(*m_program, X, m_cache->read_byte(P++));
+ m_icount -= 13;
+ break;
+ case 0x50:
+ lh5801_inc(&YL);
+ m_icount -= 5;
+ break;
+ case 0x51:
+ lh5801_sin(&m_y);
+ m_icount -= 6;
+ break;
+ case 0x52:
+ lh5801_dec(&YL);
+ m_icount -= 5;
+ break;
+ case 0x53:
+ lh5801_sde(&m_y);
+ m_icount -= 6;
+ break;
+ case 0x54: Y++;
+ m_icount -= 5;
+ break;
+ case 0x55:
+ lh5801_lin(&m_y);
+ m_icount -= 6;
+ break;
+ case 0x56: Y--;
+ m_icount -= 5;
+ break;
+ case 0x57:
+ lh5801_lde(&m_y);
+ m_icount -= 6;
+ break;
+ case 0x58: YH=m_cache->read_byte(P++);
+ m_icount -= 6;
+ break;
+ case 0x59:
+ lh5801_and_mem(*m_program, Y, m_cache->read_byte(P++));
+ m_icount -= 13;
+ break;
+ case 0x5a: YL=m_cache->read_byte(P++);
+ m_icount -= 6;
+ break;
+ case 0x5b:
+ lh5801_ora_mem(*m_program, Y, m_cache->read_byte(P++));
+ m_icount -= 13;
+ break;
+ case 0x5c:
+ lh5801_cpa(YH, m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0x5d:
+ lh5801_bit(m_program->read_byte(Y), m_cache->read_byte(P++));
+ m_icount -= 10;
+ break;
+ case 0x5e:
+ lh5801_cpa(YL, m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0x5f:
+ lh5801_add_mem(*m_program, Y, m_cache->read_byte(P++));
+ m_icount -= 13;
+ break;
+ case 0x60:
+ lh5801_inc(&UL);
+ m_icount -= 5;
+ break;
+ case 0x61:
+ lh5801_sin(&m_u);
+ m_icount -= 6;
+ break;
+ case 0x62:
+ lh5801_dec(&UL);
+ m_icount -= 5;
+ break;
+ case 0x63:
+ lh5801_sde(&m_u);
+ m_icount -= 6;
+ break;
+ case 0x64: U++;
+ m_icount -= 5;
+ break;
+ case 0x65:
+ lh5801_lin(&m_u);
+ m_icount -= 6;
+ break;
+ case 0x66: U--;
+ m_icount -= 5;
+ break;
+ case 0x67:
+ lh5801_lde(&m_u);
+ m_icount -= 6;
+ break;
+ case 0x68: UH=m_cache->read_byte(P++);
+ m_icount -= 6;
+ break;
+ case 0x69:
+ lh5801_and_mem(*m_program, U, m_cache->read_byte(P++));
+ m_icount -= 13;
+ break;
+ case 0x6a: UL=m_cache->read_byte(P++);
+ m_icount -= 6;
+ break;
+ case 0x6b:
+ lh5801_ora_mem(*m_program, U, m_cache->read_byte(P++));
+ m_icount -= 13;
+ break;
+ case 0x6c:
+ lh5801_cpa(UH, m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0x6d:
+ lh5801_bit(m_program->read_byte(U), m_cache->read_byte(P++));
+ m_icount -= 10;
+ break;
+ case 0x6e:
+ lh5801_cpa(UL, m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0x6f:
+ lh5801_add_mem(*m_program, U, m_cache->read_byte(P++));
+ m_icount -= 13;
+ break;
+ case 0x80:
+ lh5801_sbc(XH);
+ m_icount -= 6;
+ break;
+ case 0x81:
+ lh5801_branch_plus(!(m_t&C));
+ m_icount -= 8;
+ break;
+ case 0x82:
+ lh5801_adc(XH);
+ m_icount -= 6;
+ break;
+ case 0x83:
+ lh5801_branch_plus(m_t&C);
+ m_icount -= 8;
+ break;
+ case 0x84:
+ lh5801_lda(XH);
+ m_icount -= 5;
+ break;
+ case 0x85:
+ lh5801_branch_plus(!(m_t&H));
+ m_icount -= 8;
+ break;
+ case 0x86:
+ lh5801_cpa(m_a, XH);
+ m_icount -= 6;
+ break;
+ case 0x87:
+ lh5801_branch_plus(m_t&H);
+ m_icount -= 8;
+ break;
+ case 0x88:
+ lh5801_lop();
+ break;
+ case 0x89:
+ lh5801_branch_plus(!(m_t&Z));
+ m_icount -= 8;
+ break;
+ case 0x8a:
+ lh5801_rti();
+ m_icount -= 14;
+ break;
+ case 0x8b:
+ lh5801_branch_plus(m_t&Z);
+ m_icount -= 8;
+ break;
+ case 0x8c:
+ lh5801_dca(m_program->read_byte(X));
+ m_icount -= 15;
+ break;
+ case 0x8d:
+ lh5801_branch_plus(!(m_t&V));
+ m_icount -= 8;
+ break;
+ case 0x8e:
+ lh5801_branch_plus(1);
+ m_icount -= 5;
+ break;
+ case 0x8f:
+ lh5801_branch_plus(m_t&V);
+ m_icount -= 8;
+ break;
+ case 0x90:
+ lh5801_sbc(YH);
+ m_icount -= 6;
+ break;
+ case 0x91:
+ lh5801_branch_minus(!(m_t&C));
+ m_icount -= 8;
+ break;
+ case 0x92:
+ lh5801_adc(YH);
+ m_icount -= 6;
+ break;
+ case 0x93:
+ lh5801_branch_minus(m_t&C);
+ m_icount -= 8;
+ break;
+ case 0x94:
+ lh5801_lda(YH);
+ m_icount -= 5;
+ break;
+ case 0x95:
+ lh5801_branch_minus(!(m_t&H));
+ m_icount -= 8;
+ break;
+ case 0x96:
+ lh5801_cpa(m_a, YH);
+ m_icount -= 6;
+ break;
+ case 0x97:
+ lh5801_branch_minus(m_t&H);
+ m_icount -= 8;
+ break;
+ case 0x99:
+ lh5801_branch_minus(!(m_t&Z));
+ m_icount -= 8;
+ break;
+ case 0x9a:
+ lh5801_rtn();
+ m_icount -= 11;
+ break;
+ case 0x9b:
+ lh5801_branch_minus(m_t&Z);
+ m_icount -= 8;
+ break;
+ case 0x9c:
+ lh5801_dca(m_program->read_byte(Y));
+ m_icount -= 15;
+ break;
+ case 0x9d:
+ lh5801_branch_minus(!(m_t&V));
+ m_icount -= 8;
+ break;
+ case 0x9e:
+ lh5801_branch_minus(1);
+ m_icount -= 6;
+ break;
+ case 0x9f:
+ lh5801_branch_minus(m_t&V);
+ m_icount -= 8;
+ break;
+ case 0xa0:
+ lh5801_sbc(UH);
+ m_icount -= 6;
+ break;
+ case 0xa2:
+ lh5801_adc(UH);
+ m_icount -= 6;
+ break;
+ case 0xa1:
+ lh5801_sbc(m_program->read_byte(lh5801_readop_word()));
+ m_icount -= 13;
+ break;
+ case 0xa3:
+ lh5801_adc(m_program->read_byte(lh5801_readop_word()));
+ m_icount -= 13;
+ break;
+ case 0xa4:
+ lh5801_lda(UH);
+ m_icount -= 5;
+ break;
+ case 0xa5:
+ lh5801_lda(m_program->read_byte(lh5801_readop_word()));
+ m_icount -= 12;
+ break;
+ case 0xa6:
+ lh5801_cpa(m_a, UH);
+ m_icount -= 6;
+ break;
+ case 0xa7:
+ lh5801_cpa(m_a, m_program->read_byte(lh5801_readop_word()));
+ m_icount -= 13;
+ break;
+ case 0xa8: /*spv*/
+ m_pv = 1;
+ m_icount -= 4;
+ break;
+ case 0xa9:
+ lh5801_and(m_program->read_byte(lh5801_readop_word()));
+ m_icount -= 13;
+ break;
+ case 0xaa:
+ S = lh5801_readop_word();
+ m_icount -= 6;
+ break;
+ case 0xab:
+ lh5801_ora(m_program->read_byte(lh5801_readop_word()));
+ m_icount -= 13;
+ break;
+ case 0xac:
+ lh5801_dca(m_program->read_byte(U));
+ m_icount -= 15;
+ break;
+ case 0xad:
+ lh5801_eor(m_program->read_byte(lh5801_readop_word()));
+ m_icount -= 13;
+ break;
+ case 0xae:
+ m_program->write_byte(lh5801_readop_word(), m_a);
+ m_icount -= 12;
+ break;
+ case 0xaf:
+ lh5801_bit(m_program->read_byte(lh5801_readop_word()), m_a);
+ m_icount -= 13;
+ break;
+ case 0xb1:
+ lh5801_sbc(m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0xb3:
+ lh5801_adc(m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0xb5:
+ lh5801_lda(m_cache->read_byte(P++));
+ m_icount -= 6;
+ break;
+ case 0xb7:
+ lh5801_cpa(m_a, m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0xb8: /*rpv*/
+ m_pv = 0;
+ m_icount -= 4;
+ break;
+ case 0xb9:
+ lh5801_and(m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0xba:
+ lh5801_jmp(lh5801_readop_word());
+ m_icount -= 12;
+ break;
+ case 0xbb:
+ lh5801_ora(m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0xbd:
+ lh5801_eor(m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0xbe:
+ lh5801_sjp();
+ m_icount -= 19;
+ break;
+ case 0xbf:
+ lh5801_bit(m_a, m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0xc1:
+ lh5801_vector(!(m_t&C), m_cache->read_byte(P++));
+ m_icount -= 8;
+ break;
+ case 0xc3:
+ lh5801_vector(m_t&C, m_cache->read_byte(P++));
+ m_icount -= 8;
+ break;
+ case 0xc5:
+ lh5801_vector(!(m_t&H), m_cache->read_byte(P++));
+ m_icount -= 8;
+ break;
+ case 0xc7:
+ lh5801_vector(m_t&H, m_cache->read_byte(P++));
+ m_icount -= 8;
+ break;
+ case 0xc9:
+ lh5801_vector(!(m_t&Z), m_cache->read_byte(P++));
+ m_icount -= 8;
+ break;
+ case 0xcb:
+ lh5801_vector(m_t & Z, m_cache->read_byte(P++));
+ m_icount -= 8;
+ break;
+ case 0xcd:
+ lh5801_vector(1, m_cache->read_byte(P++));
+ m_icount -= 7;
+ break;
+ case 0xcf:
+ lh5801_vector(m_t & V, m_cache->read_byte(P++));
+ m_icount -= 8;
+ break;
+ case 0xd1:
+ lh5801_ror();
+ m_icount -= 6;
+ break;
+ case 0xd3:
+ lh5801_drr(*m_program, X);
+ m_icount -= 12;
+ break;
+ case 0xd5:
+ lh5801_shr();
+ m_icount -= 6;
+ break;
+ case 0xd7:
+ lh5801_drl(*m_program, X);
+ m_icount -= 12;
+ break;
+ case 0xd9:
+ lh5801_shl();
+ m_icount -= 6;
+ break;
+ case 0xdb:
+ lh5801_rol();
+ m_icount -= 6;
+ break;
+ case 0xdd:
+ lh5801_inc(&m_a);
+ m_icount -= 5;
+ break;
+ case 0xdf:
+ lh5801_dec(&m_a);
+ m_icount -= 5;
+ break;
+ case 0xe1:
+ m_pu = 1; /*spu*/
+ m_icount -= 4;
+ break;
+ case 0xe3:
+ m_pu = 0; /*rpu*/
+ m_icount -= 4;
+ break;
case 0xe9:
- adr=lh5801_readop_word();lh5801_and_mem(*m_program, adr, m_cache->read_byte(P++));
- m_icount-=19;break;
+ adr = lh5801_readop_word();
+ lh5801_and_mem(*m_program, adr, m_cache->read_byte(P++));
+ m_icount -= 19;
+ break;
case 0xeb:
- adr=lh5801_readop_word();lh5801_ora_mem(*m_program, adr, m_cache->read_byte(P++));
- m_icount-=19;break;
+ adr = lh5801_readop_word();
+ lh5801_ora_mem(*m_program, adr, m_cache->read_byte(P++));
+ m_icount -= 19;
+ break;
case 0xed:
- adr=lh5801_readop_word();lh5801_bit(m_program->read_byte(adr), m_cache->read_byte(P++));
- m_icount-=16;break;
+ adr = lh5801_readop_word();
+ lh5801_bit(m_program->read_byte(adr), m_cache->read_byte(P++));
+ m_icount -= 16;
+ break;
case 0xef:
- adr=lh5801_readop_word();
- lh5801_add_mem(*m_program, adr, m_cache->read_byte(P++)); m_icount-=19;
- break;
- case 0xf1: lh5801_aex(); m_icount-=6; break;
- case 0xf5: m_program->write_byte(Y++, m_program->read_byte(X++)); m_icount-=7; break; //tin
- case 0xf7: lh5801_cpa(m_a, m_program->read_byte(X++));m_icount-=7; break; //cin
- case 0xf9: m_t&=~C;m_icount-=4;break;
- case 0xfb: m_t|=C;m_icount-=4;break;
- case 0xfd: lh5801_instruction_fd();break;
+ adr = lh5801_readop_word();
+ lh5801_add_mem(*m_program, adr, m_cache->read_byte(P++));
+ m_icount -= 19;
+ break;
+ case 0xf1:
+ lh5801_aex();
+ m_icount -= 6;
+ break;
+ case 0xf5: /*tin*/
+ m_program->write_byte(Y++, m_program->read_byte(X++));
+ m_icount -= 7;
+ break;
+ case 0xf7: /*cin*/
+ lh5801_cpa(m_a, m_program->read_byte(X++));
+ m_icount -= 7;
+ break;
+ case 0xf9:
+ m_t &= ~C;
+ m_icount -= 4;
+ break;
+ case 0xfb:
+ m_t |= C;
+ m_icount -= 4;
+ break;
+ case 0xfd:
+ lh5801_instruction_fd();
+ break;
case 0xc0: case 0xc2: case 0xc4: case 0xc6:
case 0xc8: case 0xca: case 0xcc: case 0xce:
case 0xd0: case 0xd2: case 0xd4: case 0xd6:
@@ -681,7 +1540,9 @@ void lh5801_cpu_device::lh5801_instruction()
case 0xe0: case 0xe2: case 0xe4: case 0xe6:
case 0xe8: case 0xea: case 0xec: case 0xee:
case 0xf0: case 0xf2: case 0xf4: case 0xf6:
- lh5801_vector(1, oper);m_icount-=4;break;
+ lh5801_vector(1, oper);
+ m_icount -= 4;
+ break;
default:
logerror("lh5801 illegal opcode at %.4x %.2x\n",P-1, oper);
}