diff --git a/src/huc6280.cpp b/src/huc6280.cpp index ef4292c..26fe786 100644 --- a/src/huc6280.cpp +++ b/src/huc6280.cpp @@ -123,7 +123,7 @@ unsigned int HuC6280::Tick() m_t_states += k_opcode_tstates[opcode]; m_t_states += m_page_crossed ? k_opcode_tstates_cross_paged[opcode] : 0; - m_t_states += m_branch_taken ? 1 : 0; + m_t_states += m_branch_taken ? 2 : 0; return m_t_states; } diff --git a/src/huc6280_opcodes.cpp b/src/huc6280_opcodes.cpp index 65bee87..ba10764 100644 --- a/src/huc6280_opcodes.cpp +++ b/src/huc6280_opcodes.cpp @@ -122,9 +122,9 @@ void HuC6280::OPCode0x0E() void HuC6280::OPCode0x0F() { - // UNOFFICIAL - // SLO $nn - UnofficialOPCode(); + // OK + // BBR0 ZZ,hhll + OPcodes_Branch(!IsSetBit(0, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0x10() @@ -228,9 +228,9 @@ void HuC6280::OPCode0x1E() void HuC6280::OPCode0x1F() { - // UNOFFICIAL - // SLO $nn,X - UnofficialOPCode(); + // OK + // BBR1 ZZ,hhll + OPcodes_Branch(!IsSetBit(1, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0x20() @@ -336,9 +336,9 @@ void HuC6280::OPCode0x2E() void HuC6280::OPCode0x2F() { - // UNOFFICIAL - // RLA $nn - UnofficialOPCode(); + // OK + // BBR2 ZZ,hhll + OPcodes_Branch(!IsSetBit(2, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0x30() @@ -444,9 +444,9 @@ void HuC6280::OPCode0x3E() void HuC6280::OPCode0x3F() { - // UNOFFICIAL - // RLA $nn,X - UnofficialOPCode(); + // OK + // BBR3 ZZ,hhll + OPcodes_Branch(!IsSetBit(3, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0x40() @@ -548,9 +548,9 @@ void HuC6280::OPCode0x4E() void HuC6280::OPCode0x4F() { - // UNOFFICIAL - // SRE $nn - UnofficialOPCode(); + // OK + // BBR4 ZZ,hhll + OPcodes_Branch(!IsSetBit(4, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0x50() @@ -652,9 +652,9 @@ void HuC6280::OPCode0x5E() void HuC6280::OPCode0x5F() { - // UNOFFICIAL - // SRE $nn,X - UnofficialOPCode(); + // OK + // BBR5 ZZ,hhll + OPcodes_Branch(!IsSetBit(5, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0x60() @@ -764,9 +764,9 @@ void HuC6280::OPCode0x6E() void HuC6280::OPCode0x6F() { - // UNOFFICIAL - // RRA $nn - UnofficialOPCode(); + // OK + // BBR6 ZZ,hhll + OPcodes_Branch(!IsSetBit(6, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0x70() @@ -872,9 +872,9 @@ void HuC6280::OPCode0x7E() void HuC6280::OPCode0x7F() { - // UNOFFICIAL - // RRA $nn,X - UnofficialOPCode(); + // OK + // BBR7 ZZ,hhll + OPcodes_Branch(!IsSetBit(7, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0x80() @@ -975,9 +975,9 @@ void HuC6280::OPCode0x8E() void HuC6280::OPCode0x8F() { - // UNOFFICIAL - // SAX $nn - UnofficialOPCode(); + // OK + // BBS0 ZZ,hhll + OPcodes_Branch(IsSetBit(0, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0x90() @@ -1078,9 +1078,9 @@ void HuC6280::OPCode0x9E() void HuC6280::OPCode0x9F() { - // UNOFFICIAL - // AHX $nn,Y - UnofficialOPCode(); + // OK + // BBS1 ZZ,hhll + OPcodes_Branch(IsSetBit(1, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0xA0() @@ -1178,9 +1178,9 @@ void HuC6280::OPCode0xAE() void HuC6280::OPCode0xAF() { - // UNOFFICIAL - // LAX $nn - UnofficialOPCode(); + // OK + // BBS2 ZZ,hhll + OPcodes_Branch(IsSetBit(2, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0xB0() @@ -1279,9 +1279,9 @@ void HuC6280::OPCode0xBE() void HuC6280::OPCode0xBF() { - // UNOFFICIAL - // LAX $nn,Y - UnofficialOPCode(); + // OK + // BBS3 ZZ,hhll + OPcodes_Branch(IsSetBit(3, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0xC0() @@ -1380,9 +1380,9 @@ void HuC6280::OPCode0xCE() void HuC6280::OPCode0xCF() { - // UNOFFICIAL - // DCP $nn - UnofficialOPCode(); + // OK + // BBS4 ZZ,hhll + OPcodes_Branch(IsSetBit(4, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0xD0() @@ -1484,9 +1484,9 @@ void HuC6280::OPCode0xDE() void HuC6280::OPCode0xDF() { - // UNOFFICIAL - // DCP $nn,X - UnofficialOPCode(); + // OK + // BBS5 ZZ,hhll + OPcodes_Branch(IsSetBit(5, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0xE0() @@ -1584,9 +1584,9 @@ void HuC6280::OPCode0xEE() void HuC6280::OPCode0xEF() { - // UNOFFICIAL - // ISC $nn - UnofficialOPCode(); + // OK + // BBS6 ZZ,hhll + OPcodes_Branch(IsSetBit(6, m_memory->Read(ZeroPageAddressing()))); } void HuC6280::OPCode0xF0() @@ -1688,7 +1688,7 @@ void HuC6280::OPCode0xFE() void HuC6280::OPCode0xFF() { - // UNOFFICIAL - // ISC $nn,X - UnofficialOPCode(); + // OK + // BBS7 ZZ,hhll + OPcodes_Branch(IsSetBit(7, m_memory->Read(ZeroPageAddressing()))); } \ No newline at end of file diff --git a/src/huc6280_registers.h b/src/huc6280_registers.h index 0224262..ee4acae 100644 --- a/src/huc6280_registers.h +++ b/src/huc6280_registers.h @@ -29,7 +29,9 @@ class EightBitRegister u8 GetValue() const; void SetValue(u8 value); void Increment(); + void Increment(u8 value); void Decrement(); + void Decrement(u8 value); private: u8 m_value; @@ -50,11 +52,21 @@ inline void EightBitRegister::Increment() m_value++; } +inline void EightBitRegister::Increment(u8 value) +{ + m_value += value; +} + inline void EightBitRegister::Decrement() { m_value--; } +inline void EightBitRegister::Decrement(u8 value) +{ + m_value -= value; +} + ////////////////////////////////////////////////////////////////////////// class SixteenBitRegister @@ -68,7 +80,9 @@ class SixteenBitRegister void SetHigh(u8 high); void SetValue(u16 value); void Increment(); + void Increment(u16 value); void Decrement(); + void Decrement(u16 value); private: u16 m_value; @@ -109,9 +123,19 @@ inline void SixteenBitRegister::Increment() m_value++; } +inline void SixteenBitRegister::Increment(u16 value) +{ + m_value += value; +} + inline void SixteenBitRegister::Decrement() { m_value--; } +inline void SixteenBitRegister::Decrement(u16 value) +{ + m_value -= value; +} + #endif /* HUC6280_REGISTERS_H */ \ No newline at end of file diff --git a/src/huc6280_timing.h b/src/huc6280_timing.h index 25fb8a8..773fb0d 100644 --- a/src/huc6280_timing.h +++ b/src/huc6280_timing.h @@ -26,21 +26,21 @@ const u8 k_opcode_tstates[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ /* 0x00 */ 7, 6, 2, 8, 3, 3, 6, 5, 3, 2, 2, 2, 4, 4, 7, 6, -/* 0x10 */ 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, +/* 0x10 */ 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 6, /* 0x20 */ 6, 7, 2, 8, 3, 4, 5, 5, 4, 2, 2, 2, 4, 5, 6, 6, -/* 0x30 */ 2, 7, 7, 8, 4, 4, 6, 6, 2, 5, 2, 7, 4, 5, 7, 7, +/* 0x30 */ 2, 7, 7, 8, 4, 4, 6, 6, 2, 5, 2, 7, 4, 5, 7, 6, /* 0x40 */ 6, 6, 2, 8, 3, 3, 5, 5, 3, 2, 2, 2, 3, 4, 6, 6, -/* 0x50 */ 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, +/* 0x50 */ 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 6, /* 0x60 */ 6, 7, 2, 8, 3, 4, 5, 5, 4, 2, 2, 2, 5, 5, 6, 6, -/* 0x70 */ 2, 7, 7, 8, 4, 4, 6, 6, 2, 5, 2, 7, 4, 5, 7, 7, -/* 0x80 */ 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, -/* 0x90 */ 2, 6, 2, 6, 4, 4, 4, 4, 2, 5, 2, 5, 5, 5, 5, 5, -/* 0xA0 */ 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 4, -/* 0xB0 */ 2, 5, 2, 5, 4, 4, 4, 4, 2, 4, 2, 4, 4, 4, 4, 4, +/* 0x70 */ 2, 7, 7, 8, 4, 4, 6, 6, 2, 5, 2, 7, 4, 5, 7, 6, +/* 0x80 */ 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 6, +/* 0x90 */ 2, 6, 2, 6, 4, 4, 4, 4, 2, 5, 2, 5, 5, 5, 5, 6, +/* 0xA0 */ 2, 6, 2, 6, 3, 3, 3, 3, 2, 2, 2, 2, 4, 4, 4, 6, +/* 0xB0 */ 2, 5, 2, 5, 4, 4, 4, 4, 2, 4, 2, 4, 4, 4, 4, 6, /* 0xC0 */ 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, -/* 0xD0 */ 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7, +/* 0xD0 */ 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 6, /* 0xE0 */ 2, 6, 2, 8, 3, 3, 5, 5, 2, 2, 2, 2, 4, 4, 6, 6, -/* 0xF0 */ 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 7 +/* 0xF0 */ 2, 5, 2, 8, 4, 4, 6, 6, 2, 4, 2, 7, 4, 4, 7, 6 }; const u8 k_opcode_tstates_cross_paged[256] = @@ -67,22 +67,22 @@ const u8 k_opcode_tstates_cross_paged[256] = const u8 k_opcode_sizes[256] = { /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */ -/* 0x00 */ 1, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, -/* 0x10 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, -/* 0x20 */ 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, -/* 0x30 */ 2, 2, 2, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, -/* 0x40 */ 1, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, -/* 0x50 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, -/* 0x60 */ 1, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, -/* 0x70 */ 2, 2, 2, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, -/* 0x80 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 0, -/* 0x90 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 0, -/* 0xA0 */ 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, -/* 0xB0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, -/* 0xC0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, -/* 0xD0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0, -/* 0xE0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 0, -/* 0xF0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 0 +/* 0x00 */ 1, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 3, +/* 0x10 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 3, +/* 0x20 */ 3, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 3, +/* 0x30 */ 2, 2, 2, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 3, +/* 0x40 */ 1, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 3, +/* 0x50 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 3, +/* 0x60 */ 1, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 3, +/* 0x70 */ 2, 2, 2, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 3, +/* 0x80 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 0, 1, 0, 3, 3, 3, 3, +/* 0x90 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 0, 3, 0, 3, +/* 0xA0 */ 2, 2, 2, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 3, +/* 0xB0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 3, +/* 0xC0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 3, +/* 0xD0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 3, +/* 0xE0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 2, 1, 0, 3, 3, 3, 3, +/* 0xF0 */ 2, 2, 0, 0, 2, 2, 2, 0, 1, 3, 1, 0, 3, 3, 3, 3 };