changes per #1 from pi1541

This commit is contained in:
xlar54
2022-06-14 00:25:52 -05:00
parent 72a21b6af3
commit db9d5467b6
2 changed files with 22 additions and 13 deletions

View File

@@ -118,7 +118,7 @@ void emu816::step()
case 0x1e: op_asl(am_absx()); break; case 0x1e: op_asl(am_absx()); break;
case 0x1f: op_ora(am_alnx()); break; case 0x1f: op_ora(am_alnx()); break;
case 0x20: op_jsr(am_absl()); break; case 0x20: op_jsr(am_absl2()); break;
case 0x21: op_and(am_dpix()); break; case 0x21: op_and(am_dpix()); break;
case 0x22: op_jsl(am_alng()); break; case 0x22: op_jsl(am_alng()); break;
case 0x23: op_and(am_srel()); break; case 0x23: op_and(am_srel()); break;
@@ -164,7 +164,7 @@ void emu816::step()
case 0x49: op_eor(am_immm()); break; case 0x49: op_eor(am_immm()); break;
case 0x4a: op_lsra(am_impl()); break; case 0x4a: op_lsra(am_impl()); break;
case 0x4b: op_phk(am_impl()); break; case 0x4b: op_phk(am_impl()); break;
case 0x4c: op_jmp(am_absl()); break; case 0x4c: op_jmp(am_absl2()); break;
case 0x4d: op_eor(am_absl()); break; case 0x4d: op_eor(am_absl()); break;
case 0x4e: op_lsr(am_absl()); break; case 0x4e: op_lsr(am_absl()); break;
case 0x4f: op_eor(am_alng()); break; case 0x4f: op_eor(am_alng()); break;
@@ -176,7 +176,7 @@ void emu816::step()
case 0x54: op_mvn(am_immw()); break; case 0x54: op_mvn(am_immw()); break;
case 0x55: op_eor(am_dpgx()); break; case 0x55: op_eor(am_dpgx()); break;
case 0x56: op_lsr(am_dpgx()); break; case 0x56: op_lsr(am_dpgx()); break;
case 0x57: op_eor(am_dpil()); break; case 0x57: op_eor(am_dpiy()); break;
case 0x58: op_cli(am_impl()); break; case 0x58: op_cli(am_impl()); break;
case 0x59: op_eor(am_absy()); break; case 0x59: op_eor(am_absy()); break;
case 0x5a: op_phy(am_impl()); break; case 0x5a: op_phy(am_impl()); break;

View File

@@ -145,6 +145,16 @@ private:
return (ea); return (ea);
} }
// Absolute - a (fix for 4c and 20)
INLINE static Addr am_absl2()
{
register Addr ea = join(pbr, getWord(bank(pbr) | pc));
BYTES(2);
cycles += 2;
return (ea);
}
// Absolute Indexed X - a,X // Absolute Indexed X - a,X
INLINE static Addr am_absx() INLINE static Addr am_absx()
{ {
@@ -168,7 +178,7 @@ private:
// Absolute Indirect - (a) // Absolute Indirect - (a)
INLINE static Addr am_absi() INLINE static Addr am_absi()
{ {
register Addr ia = join(0, getWord(bank(pbr) | pc)); register Addr ia = join(pbr, getWord(bank(pbr) | pc));
BYTES(2); BYTES(2);
cycles += 4; cycles += 4;
@@ -531,12 +541,12 @@ private:
if (e || p.f_m) { if (e || p.f_m) {
setc(a.b & 0x80); setc(a.b & 0x80);
setnz_b(a.b <<= 1); setnz_b(a.b <<= 1);
setByte(ea, a.b); //setByte(ea, a.b);
} }
else { else {
setc(a.w & 0x8000); setc(a.w & 0x8000);
setnz_w(a.w <<= 1); setnz_w(a.w <<= 1);
setWord(ea, a.w); //setWord(ea, a.w);
} }
cycles += 2; cycles += 2;
} }
@@ -771,7 +781,7 @@ private:
Byte data = getByte(ea); Byte data = getByte(ea);
Word temp = a.b - data; Word temp = a.b - data;
setc(temp & 0x100); setc(a.b >= data);
setnz_b(lo(temp)); setnz_b(lo(temp));
cycles += 2; cycles += 2;
} }
@@ -779,7 +789,7 @@ private:
Word data = getWord(ea); Word data = getWord(ea);
Addr temp = a.w - data; Addr temp = a.w - data;
setc(temp & 0x10000L); setc(a.w >= data);
setnz_w((Word)temp); setnz_w((Word)temp);
cycles += 3; cycles += 3;
} }
@@ -822,7 +832,7 @@ private:
Byte data = getByte(ea); Byte data = getByte(ea);
Word temp = x.b - data; Word temp = x.b - data;
setc(temp & 0x100); setc(x.b >= data);
setnz_b(lo(temp)); setnz_b(lo(temp));
cycles += 2; cycles += 2;
} }
@@ -830,7 +840,7 @@ private:
Word data = getWord(ea); Word data = getWord(ea);
Addr temp = x.w - data; Addr temp = x.w - data;
setc(temp & 0x10000); setc(x.w >= data);
setnz_w((Word) temp); setnz_w((Word) temp);
cycles += 3; cycles += 3;
} }
@@ -844,7 +854,7 @@ private:
Byte data = getByte(ea); Byte data = getByte(ea);
Word temp = y.b - data; Word temp = y.b - data;
setc(temp & 0x100); setc(y.b >= data);
setnz_b(lo(temp)); setnz_b(lo(temp));
cycles += 2; cycles += 2;
} }
@@ -852,7 +862,7 @@ private:
Word data = getWord(ea); Word data = getWord(ea);
Addr temp = y.w - data; Addr temp = y.w - data;
setc(temp & 0x10000); setc(y.w >= data);
setnz_w((Word) temp); setnz_w((Word) temp);
cycles += 3; cycles += 3;
} }
@@ -1432,7 +1442,6 @@ private:
pbr = pullByte(); pbr = pullByte();
cycles += 7; cycles += 7;
} }
p.f_i = 0;
} }
INLINE static void op_rtl(Addr ea) INLINE static void op_rtl(Addr ea)