62 std::string instruction =
"ADC.b #$01";
63 std::vector<std::string> tokens = asm_parser.
Tokenize(instruction);
65 std::vector<std::string> expected_tokens = {
"ADC",
".b",
"#",
"$",
"01"};
66 EXPECT_THAT(tokens, ::testing::ContainerEq(expected_tokens));
68 auto opcode = asm_parser.
Parse(instruction);
69 EXPECT_EQ(opcode[0], 0x69);
74 std::vector<uint8_t> data = {0x00, 0x01, 0x02, 0x03, 0x04};
77 EXPECT_CALL(memory, ReadByte(0)).WillOnce(Return(0x00));
78 EXPECT_CALL(memory, ReadByte(1)).WillOnce(Return(0x01));
79 EXPECT_CALL(memory, ReadByte(2)).WillOnce(Return(0x02));
80 EXPECT_CALL(memory, ReadByte(3)).WillOnce(Return(0x03));
81 EXPECT_CALL(memory, ReadByte(4)).WillOnce(Return(0x04));
82 EXPECT_CALL(memory, ReadByte(63999)).WillOnce(Return(0x00));
89 EXPECT_EQ(memory.
ReadByte(63999), 0x00);
97 cpu.SetAccumulatorSize(
true);
98 std::vector<uint8_t> data = {0x69, 0x15, 0x01};
99 mock_memory.SetMemoryContents(data);
101 cpu.ExecuteInstruction(cpu.ReadOpcode());
103 EXPECT_EQ(cpu.A, 0x00);
104 EXPECT_TRUE(cpu.GetCarryFlag());
110 std::vector<uint8_t> data = {0x61, 0x10};
111 mock_memory.SetMemoryContents(data);
112 mock_memory.InsertMemory(0x2012, {0x00, 0x30});
113 mock_memory.InsertMemory(0x3000, {0x06});
116 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
117 EXPECT_CALL(mock_memory, ReadWord(0x2012)).WillOnce(Return(0x3000));
118 EXPECT_CALL(mock_memory, ReadByte(0x3000)).WillOnce(Return(0x06));
120 cpu.ExecuteInstruction(0x61);
121 EXPECT_EQ(cpu.A, 0x09);
126 std::vector<uint8_t> data = {0x63, 0x02};
127 mock_memory.SetMemoryContents(data);
128 mock_memory.InsertMemory(0x0201, {0x06});
130 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
131 EXPECT_CALL(mock_memory, ReadByte(0x0201))
132 .WillOnce(Return(0x06));
134 cpu.ExecuteInstruction(0x63);
135 EXPECT_EQ(cpu.A, 0x09);
141 std::vector<uint8_t> data = {0x65, 0x10};
142 mock_memory.SetMemoryContents(data);
143 mock_memory.InsertMemory(0x2010, {0x05});
145 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
146 EXPECT_CALL(mock_memory, ReadByte(0x2010)).WillOnce(Return(0x05));
148 cpu.ExecuteInstruction(0x65);
149 EXPECT_EQ(cpu.A, 0x06);
155 std::vector<uint8_t> data = {0x67, 0x10};
156 mock_memory.SetMemoryContents(data);
157 mock_memory.InsertMemory(0x2010, {0x05, 0x00, 0x30});
158 mock_memory.InsertMemory(0x030005, {0x06});
160 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
161 EXPECT_CALL(mock_memory, ReadWordLong(0x2010)).WillOnce(Return(0x300005));
162 EXPECT_CALL(mock_memory, ReadWord(0x300005)).WillOnce(Return(0x06));
164 cpu.ExecuteInstruction(0x67);
165 EXPECT_EQ(cpu.A, 0x09);
170 cpu.SetAccumulatorSize(
true);
171 std::vector<uint8_t> data = {0x01};
172 mock_memory.SetMemoryContents(data);
174 EXPECT_CALL(mock_memory, ReadByte(_)).WillOnce(Return(0x01));
176 cpu.ExecuteInstruction(0x69);
177 EXPECT_EQ(cpu.A, 0x02);
182 cpu.SetAccumulatorSize(
true);
183 std::vector<uint8_t> data = {0x69,
static_cast<uint8_t
>(-20)};
184 mock_memory.SetMemoryContents(data);
186 EXPECT_CALL(mock_memory, ReadByte(_)).WillOnce(Return(-20));
188 cpu.ExecuteInstruction(0x69);
189 EXPECT_EQ(cpu.A,
static_cast<uint8_t
>(-10));
195 std::vector<uint8_t> data = {0x6D, 0x03, 0x00, 0x05, 0x00};
196 mock_memory.SetMemoryContents(data);
198 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x0003));
200 EXPECT_CALL(mock_memory, ReadWord(0x0003)).WillOnce(Return(0x0005));
202 cpu.ExecuteInstruction(0x6D);
203 EXPECT_EQ(cpu.A, 0x06);
208 cpu.SetAccumulatorSize(
false);
209 cpu.SetCarryFlag(
false);
210 std::vector<uint8_t> data = {0x6F, 0x04, 0x00, 0x00, 0x05, 0x00};
211 mock_memory.SetMemoryContents(data);
213 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x0004));
214 EXPECT_CALL(mock_memory, ReadWord(0x0004)).WillOnce(Return(0x0005));
216 cpu.ExecuteInstruction(0x6F);
217 EXPECT_EQ(cpu.A, 0x06);
224 std::vector<uint8_t> data = {0x71, 0x10};
225 mock_memory.SetMemoryContents(data);
226 mock_memory.InsertMemory(0x2010, {0x00, 0x30});
227 mock_memory.InsertMemory(0x3002, {0x06});
229 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
230 EXPECT_CALL(mock_memory, ReadWord(0x2010)).WillOnce(Return(0x3000));
231 EXPECT_CALL(mock_memory, ReadByte(0x3002)).WillOnce(Return(0x06));
233 cpu.ExecuteInstruction(0x71);
234 EXPECT_EQ(cpu.A, 0x09);
240 std::vector<uint8_t> data = {0x72, 0x10};
241 mock_memory.SetMemoryContents(data);
242 mock_memory.InsertMemory(0x2010, {0x00, 0x30});
243 mock_memory.InsertMemory(0x3000, {0x05});
245 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
246 EXPECT_CALL(mock_memory, ReadWord(0x2010)).WillOnce(Return(0x3000));
247 EXPECT_CALL(mock_memory, ReadByte(0x3000)).WillOnce(Return(0x05));
249 cpu.ExecuteInstruction(0x72);
250 EXPECT_EQ(cpu.A, 0x07);
257 std::vector<uint8_t> data = {0x73, 0x02};
258 mock_memory.SetMemoryContents(data);
259 mock_memory.InsertMemory(0x0201, {0x00, 0x30});
260 mock_memory.InsertMemory(0x103002, {0x06});
262 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
263 EXPECT_CALL(mock_memory, ReadWord(0x0201)).WillOnce(Return(0x3000));
264 EXPECT_CALL(mock_memory, ReadByte(0x103002)).WillOnce(Return(0x06));
266 cpu.ExecuteInstruction(0x73);
267 EXPECT_EQ(cpu.A, 0x09);
274 std::vector<uint8_t> data = {0x75, 0x10};
275 mock_memory.SetMemoryContents(data);
276 mock_memory.InsertMemory(0x2012, {0x06});
278 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
279 EXPECT_CALL(mock_memory, ReadByte(0x2012)).WillOnce(Return(0x06));
281 cpu.ExecuteInstruction(0x75);
282 EXPECT_EQ(cpu.A, 0x09);
290 std::vector<uint8_t> data = {0x77, 0x10};
291 mock_memory.SetMemoryContents(data);
292 mock_memory.InsertMemory(0x2010, {0x05, 0x00, 0x01});
293 mock_memory.InsertMemory(0x010007, {0x06});
295 EXPECT_CALL(mock_memory, ReadWordLong(0x2010)).WillOnce(Return(0x010005));
296 EXPECT_CALL(mock_memory, ReadWord(0x010007)).WillOnce(Return(0x06));
298 cpu.ExecuteInstruction(0x77);
299 EXPECT_EQ(cpu.A, 0x09);
306 std::vector<uint8_t> data = {0x79, 0x03, 0x00, 0x00, 0x05, 0x00};
307 mock_memory.SetMemoryContents(data);
309 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x0003));
310 EXPECT_CALL(mock_memory, ReadWord(0x200005)).WillOnce(Return(0x0005));
312 mock_memory.InsertMemory(0x200005, {0x05});
314 cpu.ExecuteInstruction(0x79);
315 EXPECT_EQ(cpu.A, 0x08);
322 cpu.SetCarryFlag(
false);
323 cpu.SetAccumulatorSize(
false);
324 std::vector<uint8_t> data = {0x7D, 0x03, 0x00};
325 mock_memory.SetMemoryContents(data);
327 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x0003));
328 EXPECT_CALL(mock_memory, ReadWord(0x200005)).WillOnce(Return(0x0005));
330 mock_memory.InsertMemory(0x200005, {0x05});
332 cpu.ExecuteInstruction(0x7D);
333 EXPECT_EQ(cpu.A, 0x08);
339 cpu.SetCarryFlag(
false);
340 cpu.SetAccumulatorSize(
false);
341 std::vector<uint8_t> data = {0x7F, 0x00, 0x00, 0x01};
342 mock_memory.SetMemoryContents(data);
343 mock_memory.InsertMemory(0x010000, {0x03, 0x05});
345 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x010000));
346 EXPECT_CALL(mock_memory, ReadWord(0x010002)).WillOnce(Return(0x0005));
348 cpu.ExecuteInstruction(0x7F);
349 EXPECT_EQ(cpu.A, 0x08);
360 std::vector<uint8_t> data = {0x21, 0x10};
361 mock_memory.SetMemoryContents(data);
362 mock_memory.InsertMemory(0x2012, {0x00, 0x30});
363 mock_memory.InsertMemory(0x3000, {0b10101010});
366 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
369 EXPECT_CALL(mock_memory, ReadWord(0x2012)).WillOnce(Return(0x3000));
372 EXPECT_CALL(mock_memory, ReadByte(0x3000)).WillOnce(Return(0b10101010));
374 cpu.ExecuteInstruction(0x21);
376 EXPECT_EQ(cpu.A, 0b10100000);
382 std::vector<uint8_t> data = {0x23, 0x02};
383 mock_memory.SetMemoryContents(data);
384 mock_memory.InsertMemory(0x0201, {0b10101010});
386 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
389 EXPECT_CALL(mock_memory, ReadByte(0x0201)).WillOnce(Return(0b10101010));
391 cpu.ExecuteInstruction(0x23);
393 EXPECT_EQ(cpu.A, 0b10100000);
399 std::vector<uint8_t> data = {0x25, 0x10};
400 mock_memory.SetMemoryContents(data);
401 mock_memory.InsertMemory(0x2010, {0b10101010});
404 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
407 EXPECT_CALL(mock_memory, ReadByte(0x2010)).WillOnce(Return(0b10101010));
409 cpu.ExecuteInstruction(0x25);
411 EXPECT_EQ(cpu.A, 0b10100000);
418 std::vector<uint8_t> data = {0x27, 0x10};
419 mock_memory.SetMemoryContents(data);
420 mock_memory.InsertMemory(0x2010, {0x05, 0x00, 0x30});
421 mock_memory.InsertMemory(0x300005, {0b10101010});
424 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
427 EXPECT_CALL(mock_memory, ReadWordLong(0x2010)).WillOnce(Return(0x300005));
430 EXPECT_CALL(mock_memory, ReadByte(0x300005)).WillOnce(Return(0b10101010));
432 cpu.ExecuteInstruction(0x27);
434 EXPECT_EQ(cpu.A, 0b10100000);
450 std::vector<uint8_t> data = {0x2D, 0x03, 0x00, 0b10101010, 0x01, 0x02};
451 mock_memory.SetMemoryContents(data);
454 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x0003));
457 EXPECT_CALL(mock_memory, ReadWord(0x0003)).WillOnce(Return(0b10101010));
459 cpu.ExecuteInstruction(0x2D);
461 EXPECT_THAT(cpu.PC, testing::Eq(0x03));
462 EXPECT_EQ(cpu.A, 0b10101010);
468 std::vector<uint8_t> data = {0x2F, 0x04, 0x00, 0x00, 0x05, 0x00};
470 mock_memory.SetMemoryContents(data);
471 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x000004));
473 EXPECT_CALL(mock_memory, ReadWordLong(0x0004)).WillOnce(Return(0x000005));
475 cpu.ExecuteInstruction(0x2F);
476 EXPECT_EQ(cpu.A, 0x01);
483 std::vector<uint8_t> data = {0x31, 0x10};
484 mock_memory.SetMemoryContents(data);
485 mock_memory.InsertMemory(0x2010, {0x00, 0x30});
486 mock_memory.InsertMemory(0x3002, {0b10101010});
489 EXPECT_CALL(mock_memory, ReadWord(0x2010)).WillOnce(Return(0x3000));
491 cpu.ExecuteInstruction(0x31);
493 EXPECT_EQ(cpu.A, 0b10100000);
499 std::vector<uint8_t> data = {0x32, 0x10};
500 mock_memory.SetMemoryContents(data);
501 mock_memory.InsertMemory(0x2010, {0x00, 0x30});
502 mock_memory.InsertMemory(0x3000, {0b10101010});
505 EXPECT_CALL(mock_memory, ReadWord(0x2010)).WillOnce(Return(0x3000));
507 cpu.ExecuteInstruction(0x32);
509 EXPECT_EQ(cpu.A, 0b10100000);
516 mock_memory.SetSP(0x01FF);
517 std::vector<uint8_t> data = {0x33, 0x02};
518 mock_memory.SetMemoryContents(data);
519 mock_memory.InsertMemory(0x0201, {0x00, 0x30});
520 mock_memory.InsertMemory(0x103002, {0b10101010});
522 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
523 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
524 EXPECT_CALL(mock_memory, ReadWord(0x0201)).WillOnce(Return(0x3000));
525 EXPECT_CALL(mock_memory, ReadByte(0x103002)).WillOnce(Return(0b10101010));
526 cpu.ExecuteInstruction(0x33);
528 EXPECT_EQ(cpu.A, 0b10100000);
535 std::vector<uint8_t> data = {0x35, 0x10};
536 mock_memory.SetMemoryContents(data);
537 mock_memory.InsertMemory(0x2012, {0b10101010});
540 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
541 EXPECT_CALL(mock_memory, ReadByte(0x2012)).WillOnce(Return(0b10101010));
543 cpu.ExecuteInstruction(0x35);
545 EXPECT_EQ(cpu.A, 0b10100000);
552 std::vector<uint8_t> data = {0x37, 0x10};
553 mock_memory.SetMemoryContents(data);
554 mock_memory.InsertMemory(0x2010, {0x05, 0x00, 0x30});
555 mock_memory.InsertMemory(0x300005, {0b10101010});
557 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
558 EXPECT_CALL(mock_memory, ReadWordLong(0x2010)).WillOnce(Return(0x300005));
559 EXPECT_CALL(mock_memory, ReadByte(0x300007)).WillOnce(Return(0b10101010));
561 cpu.ExecuteInstruction(0x37);
563 EXPECT_EQ(cpu.A, 0b10100000);
569 std::vector<uint8_t> data = {0x39, 0x03, 0x00,
570 0b00000000, 0b10101010, 0b01010101};
571 mock_memory.SetMemoryContents(data);
574 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x0003));
577 uint16_t address = 0x0003 + cpu.Y;
580 EXPECT_CALL(mock_memory, ReadByte(address)).WillOnce(Return(0b10101010));
582 cpu.ExecuteInstruction(0x39);
584 EXPECT_THAT(cpu.PC, testing::Eq(0x03));
585 EXPECT_EQ(cpu.A, 0b10100000);
591 std::vector<uint8_t> data = {0x3D, 0x03, 0x00,
592 0b00000000, 0b10101010, 0b01010101};
593 mock_memory.SetMemoryContents(data);
594 mock_memory.InsertMemory(0x200005, {0b10101010});
597 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x0003));
600 uint16_t address = 0x0003 +
static_cast<uint16_t
>(cpu.X & 0xFF);
603 EXPECT_CALL(mock_memory, ReadByte(address)).WillOnce(Return(0b10101010));
605 cpu.ExecuteInstruction(0x3D);
608 EXPECT_EQ(cpu.A, 0b10100000);
615 std::vector<uint8_t> data = {0x3F, 0x03, 0x00, 0x00,
616 0b00000000, 0b10101010, 0b01010101};
617 mock_memory.SetMemoryContents(data);
620 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x0003));
623 uint16_t address = 0x0003 +
static_cast<uint16_t
>(cpu.X & 0xFF);
626 EXPECT_CALL(mock_memory, ReadByte(address)).WillOnce(Return(0b10101010));
628 cpu.ExecuteInstruction(0x3F);
630 EXPECT_THAT(cpu.PC, testing::Eq(0x04));
631 EXPECT_EQ(cpu.A, 0b10100000);
640 std::vector<uint8_t> data = {0x06, 0x10};
641 mock_memory.SetMemoryContents(data);
642 mock_memory.InsertMemory(0x1010, {0x40});
644 cpu.ExecuteInstruction(0x06);
645 EXPECT_TRUE(cpu.GetCarryFlag());
646 EXPECT_FALSE(cpu.GetZeroFlag());
647 EXPECT_TRUE(cpu.GetNegativeFlag());
653 std::vector<uint8_t> data = {0x0A};
654 mock_memory.SetMemoryContents(data);
656 cpu.ExecuteInstruction(0x0A);
657 EXPECT_EQ(cpu.A, 0x80);
658 EXPECT_TRUE(cpu.GetCarryFlag());
659 EXPECT_FALSE(cpu.GetZeroFlag());
660 EXPECT_TRUE(cpu.GetNegativeFlag());
664 std::vector<uint8_t> data = {0x0E, 0x10, 0x20};
665 mock_memory.SetMemoryContents(data);
666 mock_memory.InsertMemory(0x2010, {0x40});
668 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x2010));
669 EXPECT_CALL(mock_memory, ReadByte(0x2010)).WillOnce(Return(0x40));
671 cpu.ExecuteInstruction(0x0E);
672 EXPECT_TRUE(cpu.GetCarryFlag());
673 EXPECT_TRUE(cpu.GetZeroFlag());
674 EXPECT_FALSE(cpu.GetNegativeFlag());
680 std::vector<uint8_t> data = {0x16, 0x10};
681 mock_memory.SetMemoryContents(data);
682 mock_memory.InsertMemory(0x1012, {0x40});
684 cpu.ExecuteInstruction(0x16);
685 EXPECT_TRUE(cpu.GetCarryFlag());
686 EXPECT_FALSE(cpu.GetZeroFlag());
687 EXPECT_TRUE(cpu.GetNegativeFlag());
692 std::vector<uint8_t> data = {0x1E, 0x10, 0x20};
693 mock_memory.SetMemoryContents(data);
694 mock_memory.InsertMemory(0x2012, {0x40});
696 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x2010));
697 EXPECT_CALL(mock_memory, ReadByte(0x2012)).WillOnce(Return(0x40));
699 cpu.ExecuteInstruction(0x1E);
700 EXPECT_TRUE(cpu.GetCarryFlag());
701 EXPECT_TRUE(cpu.GetZeroFlag());
702 EXPECT_FALSE(cpu.GetNegativeFlag());
709 cpu.SetCarryFlag(
false);
710 std::vector<uint8_t> data = {0x90, 0x05, 0x01};
711 mock_memory.SetMemoryContents(data);
713 EXPECT_CALL(mock_memory, ReadByte(_)).WillOnce(Return(5));
715 cpu.ExecuteInstruction(0x90);
716 EXPECT_EQ(cpu.PC, 0x05);
720 cpu.SetCarryFlag(
true);
721 std::vector<uint8_t> data = {0x90, 0x02, 0x01};
722 mock_memory.SetMemoryContents(data);
724 EXPECT_CALL(mock_memory, ReadByte(_)).WillOnce(Return(2));
726 cpu.ExecuteInstruction(0x90);
728 EXPECT_EQ(cpu.PC, 2);
735 cpu.SetCarryFlag(
true);
736 std::vector<uint8_t> data = {0xB0, 0x07, 0x02};
737 mock_memory.SetMemoryContents(data);
739 EXPECT_CALL(mock_memory, ReadByte(_)).WillOnce(Return(0x07));
741 cpu.ExecuteInstruction(0xB0);
742 EXPECT_EQ(cpu.PC, 0x07);
746 cpu.SetCarryFlag(
false);
747 std::vector<uint8_t> data = {0x10, 0x02, 0x01};
748 mock_memory.SetMemoryContents(data);
749 EXPECT_CALL(mock_memory, ReadByte(_)).WillOnce(Return(2));
750 cpu.ExecuteInstruction(0xB0);
751 EXPECT_EQ(cpu.PC, 2);
759 cpu.SetZeroFlag(
true);
760 std::vector<uint8_t> data = {0xF0, 0x09};
761 mock_memory.SetMemoryContents(data);
763 cpu.ExecuteInstruction(0xF0);
765 EXPECT_EQ(cpu.PC, 0x09);
769 cpu.SetZeroFlag(
false);
770 std::vector<uint8_t> data = {0xF0, 0x03};
771 mock_memory.SetMemoryContents(data);
773 EXPECT_CALL(mock_memory, ReadByte(_)).WillOnce(Return(0x03));
775 cpu.ExecuteInstruction(0xF0);
777 EXPECT_EQ(cpu.PC, 0x02);
781 cpu.SetZeroFlag(
true);
782 cpu.SetOverflowFlag(
true);
783 std::vector<uint8_t> data = {0xF0, 0x03};
784 mock_memory.SetMemoryContents(data);
786 EXPECT_CALL(mock_memory, ReadByte(_)).WillOnce(Return(0x03));
788 cpu.ExecuteInstruction(0xF0);
790 EXPECT_EQ(cpu.PC, 0x03);
794 cpu.SetZeroFlag(
false);
795 cpu.SetOverflowFlag(
true);
796 std::vector<uint8_t> data = {0xF0, 0x03, 0x02};
797 mock_memory.SetMemoryContents(data);
799 EXPECT_CALL(mock_memory, ReadByte(_)).WillOnce(Return(0x03));
801 cpu.ExecuteInstruction(0xF0);
803 EXPECT_EQ(cpu.PC, 0x02);
813 std::vector<uint8_t> data = {0x24, 0x10};
814 mock_memory.SetMemoryContents(data);
815 mock_memory.InsertMemory(0x1010, {0x81});
818 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
821 EXPECT_CALL(mock_memory, ReadByte(0x1010)).WillOnce(Return(0x81));
823 cpu.ExecuteInstruction(0x24);
824 EXPECT_TRUE(cpu.GetNegativeFlag());
825 EXPECT_FALSE(cpu.GetOverflowFlag());
826 EXPECT_FALSE(cpu.GetZeroFlag());
832 std::vector<uint8_t> data = {0x00, 0x10};
833 mock_memory.SetMemoryContents(data);
834 mock_memory.InsertMemory(0x0010, {0x81});
837 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
840 EXPECT_CALL(mock_memory, ReadByte(0x0010)).WillOnce(Return(0x81));
842 cpu.ExecuteInstruction(0x24);
843 EXPECT_TRUE(cpu.GetNegativeFlag());
844 EXPECT_FALSE(cpu.GetOverflowFlag());
845 EXPECT_FALSE(cpu.GetZeroFlag());
853 std::vector<uint8_t> data = {0x34, 0x10};
854 mock_memory.SetMemoryContents(data);
855 mock_memory.InsertMemory(0x1012, {0x81});
858 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
861 EXPECT_CALL(mock_memory, ReadByte(0x1012)).WillOnce(Return(0x81));
863 cpu.ExecuteInstruction(0x34);
864 EXPECT_TRUE(cpu.GetNegativeFlag());
865 EXPECT_FALSE(cpu.GetOverflowFlag());
866 EXPECT_FALSE(cpu.GetZeroFlag());
873 std::vector<uint8_t> data = {0x00, 0x10};
874 mock_memory.SetMemoryContents(data);
875 mock_memory.InsertMemory(0x0012, {0x81});
878 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x10));
881 EXPECT_CALL(mock_memory, ReadByte(0x0012)).WillOnce(Return(0x81));
883 cpu.ExecuteInstruction(0x3C);
884 EXPECT_TRUE(cpu.GetNegativeFlag());
885 EXPECT_FALSE(cpu.GetOverflowFlag());
886 EXPECT_FALSE(cpu.GetZeroFlag());
892 std::vector<uint8_t> data = {0x24, 0x00, 0x10};
893 mock_memory.SetMemoryContents(data);
894 mock_memory.InsertMemory(0x0010, {0x81});
897 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
900 EXPECT_CALL(mock_memory, ReadByte(0x0010)).WillOnce(Return(0x81));
902 cpu.ExecuteInstruction(0x24);
903 EXPECT_TRUE(cpu.GetNegativeFlag());
904 EXPECT_FALSE(cpu.GetOverflowFlag());
905 EXPECT_FALSE(cpu.GetZeroFlag());
985 std::vector<uint8_t> data = {0x00};
986 mock_memory.SetMemoryContents(data);
987 mock_memory.InsertMemory(0xFFFE, {0x10, 0x20});
989 EXPECT_CALL(mock_memory, ReadWord(0xFFFE)).WillOnce(Return(0x2010));
991 cpu.ExecuteInstruction(0x00);
992 EXPECT_EQ(cpu.PC, 0x2010);
993 EXPECT_TRUE(cpu.GetInterruptFlag());
1000 std::vector<uint8_t> data = {0x82, 0x10, 0x20};
1001 mock_memory.SetMemoryContents(data);
1003 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x2010));
1005 cpu.ExecuteInstruction(0x82);
1006 EXPECT_EQ(cpu.PC, 0x2010);
1090 cpu.SetAccumulatorSize(
true);
1095 std::vector<uint8_t> data = {0xC1, 0x10};
1096 mock_memory.SetMemoryContents(data);
1097 mock_memory.InsertMemory(0x1012, {0x00, 0x30});
1098 mock_memory.InsertMemory(0x013000, {0x40});
1100 cpu.ExecuteInstruction(0xC1);
1102 EXPECT_TRUE(cpu.GetCarryFlag());
1103 EXPECT_FALSE(cpu.GetZeroFlag());
1104 EXPECT_TRUE(cpu.GetNegativeFlag());
1109 mock_memory.SetSP(0x01FF);
1110 std::vector<uint8_t> data = {0xC3, 0x02};
1111 mock_memory.SetMemoryContents(data);
1112 mock_memory.InsertMemory(0x0201, {0x40, 0x9F});
1114 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
1115 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
1116 EXPECT_CALL(mock_memory, ReadByte(0x0201)).WillOnce(Return(0x30));
1119 cpu.ExecuteInstruction(0xC3);
1121 EXPECT_TRUE(cpu.GetCarryFlag());
1122 EXPECT_FALSE(cpu.GetZeroFlag());
1123 EXPECT_FALSE(cpu.GetNegativeFlag());
1125 mock_memory.InsertMemory(0x0002, {0xC3, 0x03});
1127 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
1128 EXPECT_CALL(mock_memory, ReadByte(0x0003)).WillOnce(Return(0x03));
1129 EXPECT_CALL(mock_memory, ReadByte(0x0202)).WillOnce(Return(0x9F));
1131 cpu.status = 0b00110000;
1132 cpu.ExecuteInstruction(0xC3);
1134 EXPECT_TRUE(cpu.GetCarryFlag());
1135 EXPECT_FALSE(cpu.GetZeroFlag());
1136 EXPECT_TRUE(cpu.GetNegativeFlag());
1142 cpu.SetAccumulatorSize(
true);
1144 mock_memory.InsertMemory(0x0000, {0xC5});
1147 cpu.ExecuteInstruction(0xC5);
1150 EXPECT_TRUE(cpu.GetCarryFlag());
1151 EXPECT_FALSE(cpu.GetZeroFlag());
1152 EXPECT_TRUE(cpu.GetNegativeFlag());
1158 cpu.SetAccumulatorSize(
true);
1162 mock_memory.InsertMemory(0x0000, {0xC7, 0x02});
1166 mock_memory.InsertMemory(0x1002, {0x00, 0x00, 0x01});
1167 mock_memory.InsertMemory(0x010000, {0x40});
1170 cpu.ExecuteInstruction(0xC7);
1173 EXPECT_TRUE(cpu.GetCarryFlag());
1174 EXPECT_FALSE(cpu.GetZeroFlag());
1175 EXPECT_FALSE(cpu.GetNegativeFlag());
1181 cpu.SetAccumulatorSize(
true);
1183 mock_memory.InsertMemory(0x0000, {0x40});
1186 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(::testing::Return(0x40));
1189 cpu.ExecuteInstruction(0xC9);
1192 EXPECT_TRUE(cpu.GetCarryFlag());
1193 EXPECT_FALSE(cpu.GetZeroFlag());
1194 EXPECT_FALSE(cpu.GetNegativeFlag());
1199 cpu.SetAccumulatorSize(
false);
1201 mock_memory.InsertMemory(0x0000, {0x34, 0x12});
1204 cpu.ExecuteInstruction(0xCD);
1207 EXPECT_TRUE(cpu.GetCarryFlag());
1208 EXPECT_FALSE(cpu.GetZeroFlag());
1209 EXPECT_TRUE(cpu.GetNegativeFlag());
1214 cpu.status = 0b00000001;
1215 std::vector<uint8_t> data = {0xCF, 0x04, 0x00, 0x00, 0x05, 0x00};
1217 mock_memory.SetMemoryContents(data);
1218 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x000004));
1220 EXPECT_CALL(mock_memory, ReadWord(0x0004)).WillOnce(Return(0x000005));
1222 cpu.ExecuteInstruction(0xCF);
1224 EXPECT_FALSE(cpu.GetCarryFlag());
1225 EXPECT_FALSE(cpu.GetZeroFlag());
1226 EXPECT_TRUE(cpu.GetNegativeFlag());
1230 cpu.SetAccumulatorSize(
true);
1232 std::vector<uint8_t> data = {0xD1, 0x3C};
1233 mock_memory.SetMemoryContents(data);
1234 mock_memory.InsertMemory(0x00023C, {0x00, 0x10});
1236 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
1237 EXPECT_CALL(mock_memory, ReadWord(0x00023C)).WillOnce(Return(0x1000));
1239 EXPECT_CALL(mock_memory, ReadByte(0x1000)).WillOnce(Return(0x7F));
1242 cpu.ExecuteInstruction(0xD1);
1245 EXPECT_TRUE(cpu.GetCarryFlag());
1246 EXPECT_FALSE(cpu.GetZeroFlag());
1247 EXPECT_TRUE(cpu.GetNegativeFlag());
1254 mock_memory.SetSP(0x01FF);
1255 std::vector<uint8_t> data = {0xD3, 0x02};
1256 mock_memory.SetMemoryContents(data);
1257 mock_memory.InsertMemory(0x0201, {0x00, 0x30});
1258 mock_memory.InsertMemory(0x103002, {0x06});
1260 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
1261 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
1262 EXPECT_CALL(mock_memory, ReadWord(0x0201)).WillOnce(Return(0x3000));
1263 EXPECT_CALL(mock_memory, ReadByte(0x103002)).WillOnce(Return(0x06));
1266 cpu.ExecuteInstruction(0xD3);
1269 EXPECT_TRUE(cpu.GetCarryFlag());
1270 EXPECT_FALSE(cpu.GetZeroFlag());
1271 EXPECT_TRUE(cpu.GetNegativeFlag());
1277 cpu.SetAccumulatorSize(
true);
1280 mock_memory.InsertMemory(0x0000, {0xD5});
1284 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(::testing::Return(0x40));
1285 EXPECT_CALL(mock_memory, ReadByte(0x0042)).WillOnce(::testing::Return(0x40));
1288 cpu.ExecuteInstruction(0xD5);
1291 EXPECT_TRUE(cpu.GetCarryFlag());
1292 EXPECT_FALSE(cpu.GetZeroFlag());
1293 EXPECT_FALSE(cpu.GetNegativeFlag());
1300 std::vector<uint8_t> data = {0xD7, 0x10};
1301 mock_memory.SetMemoryContents(data);
1302 mock_memory.InsertMemory(0x2010, {0x05, 0x00, 0x30});
1303 mock_memory.InsertMemory(0x300005, {0b10101010});
1305 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x10));
1306 EXPECT_CALL(mock_memory, ReadWordLong(0x2010)).WillOnce(Return(0x300005));
1307 EXPECT_CALL(mock_memory, ReadByte(0x300007)).WillOnce(Return(0b10101010));
1310 cpu.ExecuteInstruction(0xD7);
1313 EXPECT_TRUE(cpu.GetCarryFlag());
1314 EXPECT_FALSE(cpu.GetZeroFlag());
1315 EXPECT_FALSE(cpu.GetNegativeFlag());
1320 cpu.SetAccumulatorSize(
false);
1323 mock_memory.InsertMemory(0x0000, {0xD9});
1326 cpu.ExecuteInstruction(0xD9);
1329 EXPECT_TRUE(cpu.GetCarryFlag());
1330 EXPECT_FALSE(cpu.GetZeroFlag());
1331 EXPECT_TRUE(cpu.GetNegativeFlag());
1336 cpu.SetAccumulatorSize(
false);
1339 mock_memory.InsertMemory(0x0000, {0xDD});
1342 cpu.ExecuteInstruction(0xDD);
1345 EXPECT_TRUE(cpu.GetCarryFlag());
1346 EXPECT_FALSE(cpu.GetZeroFlag());
1347 EXPECT_TRUE(cpu.GetNegativeFlag());
1352 cpu.SetAccumulatorSize(
false);
1355 mock_memory.InsertMemory(0x0000, {0xDF});
1358 cpu.ExecuteInstruction(0xDF);
1361 EXPECT_TRUE(cpu.GetCarryFlag());
1362 EXPECT_FALSE(cpu.GetZeroFlag());
1363 EXPECT_TRUE(cpu.GetNegativeFlag());
1389 cpu.SetIndexSize(
false);
1390 cpu.SetAccumulatorSize(
false);
1392 std::vector<uint8_t> data = {0xE0, 0x34, 0x12};
1393 mock_memory.SetMemoryContents(data);
1394 cpu.ExecuteInstruction(0xE0);
1395 ASSERT_TRUE(cpu.GetZeroFlag());
1399 cpu.SetIndexSize(
false);
1402 std::vector<uint8_t> data = {0xE0, 0xFF, 0xFF};
1403 mock_memory.SetMemoryContents(data);
1404 cpu.ExecuteInstruction(0xE0);
1405 ASSERT_TRUE(cpu.GetNegativeFlag());
1410 cpu.SetIndexSize(
false);
1413 std::vector<uint8_t> data = {0xE4, 0x34, 0x12};
1414 mock_memory.SetMemoryContents(data);
1415 cpu.ExecuteInstruction(0xE4);
1416 ASSERT_TRUE(cpu.GetCarryFlag());
1420 cpu.SetIndexSize(
false);
1423 std::vector<uint8_t> data = {0xEC, 0x34, 0x12};
1424 mock_memory.SetMemoryContents(data);
1425 cpu.ExecuteInstruction(0xEC);
1426 ASSERT_TRUE(cpu.GetCarryFlag());
1430 cpu.SetIndexSize(
false);
1431 cpu.SetAccumulatorSize(
false);
1433 std::vector<uint8_t> data = {0xC0, 0x78, 0x56};
1434 mock_memory.SetMemoryContents(data);
1435 cpu.ExecuteInstruction(0xC0);
1436 ASSERT_TRUE(cpu.GetZeroFlag());
1440 cpu.SetIndexSize(
false);
1443 std::vector<uint8_t> data = {0xC0, 0x01, 0x80};
1444 mock_memory.SetMemoryContents(data);
1445 cpu.ExecuteInstruction(0xC0);
1446 ASSERT_TRUE(cpu.GetNegativeFlag());
1451 cpu.SetIndexSize(
false);
1454 std::vector<uint8_t> data = {0xC4, 0x34, 0x12};
1455 mock_memory.SetMemoryContents(data);
1456 cpu.ExecuteInstruction(0xC4);
1457 ASSERT_TRUE(cpu.GetCarryFlag());
1461 cpu.SetIndexSize(
false);
1464 std::vector<uint8_t> data = {0xCC, 0x34, 0x12};
1465 mock_memory.SetMemoryContents(data);
1466 cpu.ExecuteInstruction(0xCC);
1467 ASSERT_TRUE(cpu.GetCarryFlag());
1491 std::vector<uint8_t> data = {0xC6, 0x7F};
1492 mock_memory.SetMemoryContents(data);
1493 mock_memory.InsertMemory(0x107F, {0x02});
1495 cpu.ExecuteInstruction(0xC6);
1496 EXPECT_EQ(0x01, mock_memory.ReadByte(0x107F));
1502 std::vector<uint8_t> data = {0xCE, 0x00, 0x10};
1503 mock_memory.SetMemoryContents(data);
1504 mock_memory.InsertMemory(0x1000, {0x02});
1506 cpu.ExecuteInstruction(0xCE);
1507 EXPECT_EQ(0x01, mock_memory.ReadByte(0x1000));
1515 std::vector<uint8_t> data = {0xD6, 0x7F};
1516 mock_memory.SetMemoryContents(data);
1517 mock_memory.InsertMemory(0x1081, {0x02});
1519 cpu.ExecuteInstruction(0xD6);
1520 EXPECT_EQ(0x01, mock_memory.ReadByte(0x1081));
1527 std::vector<uint8_t> data = {0xDE, 0x00, 0x10};
1528 mock_memory.SetMemoryContents(data);
1529 mock_memory.InsertMemory(0x1002, {0x02});
1531 cpu.ExecuteInstruction(0xDE);
1532 EXPECT_EQ(0x01, mock_memory.ReadByte(0x1002));
1579 std::vector<uint8_t> data = {0x41, 0x7E};
1580 mock_memory.SetMemoryContents(data);
1581 mock_memory.InsertMemory(0x0080, {0x00, 0x10});
1582 mock_memory.InsertMemory(0x1000, {0b01010101});
1584 cpu.ExecuteInstruction(0x41);
1585 EXPECT_EQ(cpu.A, 0b11111111);
1591 mock_memory.SetSP(0x01FF);
1592 std::vector<uint8_t> data = {0x43, 0x02};
1593 mock_memory.SetMemoryContents(data);
1594 mock_memory.InsertMemory(0x0201, {0b01010101});
1596 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
1597 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
1598 EXPECT_CALL(mock_memory, ReadByte(0x0201)).WillOnce(Return(0b01010101));
1600 cpu.ExecuteInstruction(0x43);
1601 EXPECT_EQ(cpu.A, 0b11111111);
1607 std::vector<uint8_t> data = {0x45, 0x7F};
1608 mock_memory.SetMemoryContents(data);
1609 mock_memory.InsertMemory(0x007F, {0b01010101});
1611 cpu.ExecuteInstruction(0x45);
1612 EXPECT_EQ(cpu.A, 0b11111111);
1618 std::vector<uint8_t> data = {0x47, 0x7F};
1619 mock_memory.SetMemoryContents(data);
1620 mock_memory.InsertMemory(0x007F, {0x00, 0x10, 0x00});
1621 mock_memory.InsertMemory(0x1000, {0b01010101});
1623 cpu.ExecuteInstruction(0x47);
1624 EXPECT_EQ(cpu.A, 0b11111111);
1630 std::vector<uint8_t> data = {0x49, 0b01010101};
1631 mock_memory.SetMemoryContents(data);
1633 cpu.ExecuteInstruction(0x49);
1634 EXPECT_EQ(cpu.A, 0b11111111);
1640 std::vector<uint8_t> data = {0x4D, 0x00, 0x10};
1641 mock_memory.SetMemoryContents(data);
1642 mock_memory.InsertMemory(0x1000, {0b01010101});
1644 cpu.ExecuteInstruction(0x4D);
1645 EXPECT_EQ(cpu.A, 0b11111111);
1651 std::vector<uint8_t> data = {0x4F, 0x00, 0x10, 0x00};
1652 mock_memory.SetMemoryContents(data);
1653 mock_memory.InsertMemory(0x1000, {0b01010101});
1655 cpu.ExecuteInstruction(0x4F);
1656 EXPECT_EQ(cpu.A, 0b11111111);
1663 std::vector<uint8_t> data = {0x51, 0x7E};
1664 mock_memory.SetMemoryContents(data);
1665 mock_memory.InsertMemory(0x007E, {0x00, 0x10});
1666 mock_memory.InsertMemory(0x1002, {0b01010101});
1668 cpu.ExecuteInstruction(0x51);
1669 EXPECT_EQ(cpu.A, 0b11111111);
1675 std::vector<uint8_t> data = {0x52, 0x7E};
1676 mock_memory.SetMemoryContents(data);
1677 mock_memory.InsertMemory(0x007E, {0x00, 0x10});
1678 mock_memory.InsertMemory(0x1000, {0b01010101});
1680 cpu.ExecuteInstruction(0x52);
1681 EXPECT_EQ(cpu.A, 0b11111111);
1688 std::vector<uint8_t> data = {0x53, 0x02};
1689 mock_memory.SetMemoryContents(data);
1690 mock_memory.InsertMemory(0x0201, {0x00, 0x10});
1691 mock_memory.InsertMemory(0x1002, {0b01010101});
1693 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
1694 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
1695 EXPECT_CALL(mock_memory, ReadWord(0x0201)).WillOnce(Return(0x1000));
1696 EXPECT_CALL(mock_memory, ReadByte(0x1002)).WillOnce(Return(0b01010101));
1698 cpu.ExecuteInstruction(0x53);
1699 EXPECT_EQ(cpu.A, 0b11111111);
1706 std::vector<uint8_t> data = {0x55, 0x7E};
1707 mock_memory.SetMemoryContents(data);
1708 mock_memory.InsertMemory(0x0080, {0b01010101});
1710 cpu.ExecuteInstruction(0x55);
1711 EXPECT_EQ(cpu.A, 0b11111111);
1718 std::vector<uint8_t> data = {0x51, 0x7E};
1719 mock_memory.SetMemoryContents(data);
1720 mock_memory.InsertMemory(0x007E, {0x00, 0x10, 0x00});
1721 mock_memory.InsertMemory(0x1002, {0b01010101});
1723 cpu.ExecuteInstruction(0x51);
1724 EXPECT_EQ(cpu.A, 0b11111111);
1732 std::vector<uint8_t> data = {0x59, 0x7C, 0x00};
1733 mock_memory.SetMemoryContents(data);
1734 mock_memory.InsertMemory(0x007E, {0b01010101});
1736 cpu.ExecuteInstruction(0x59);
1737 EXPECT_EQ(cpu.A, 0b11111111);
1745 std::vector<uint8_t> data = {0x5D, 0x7C, 0x00};
1746 mock_memory.SetMemoryContents(data);
1747 mock_memory.InsertMemory(0x007E, {0b01010101});
1749 cpu.ExecuteInstruction(0x5D);
1750 EXPECT_EQ(cpu.A, 0b11111111);
1758 std::vector<uint8_t> data = {0x5F, 0x7C, 0x00, 0x00};
1759 mock_memory.SetMemoryContents(data);
1760 mock_memory.InsertMemory(0x007E, {0b01010101});
1762 cpu.ExecuteInstruction(0x5F);
1763 EXPECT_EQ(cpu.A, 0b11111111);
1785 cpu.SetAccumulatorSize(
true);
1787 std::vector<uint8_t> data = {0xE6, 0x20};
1788 mock_memory.SetMemoryContents(data);
1789 mock_memory.InsertMemory(0x0220, {0x40});
1791 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x20));
1792 EXPECT_CALL(mock_memory, ReadByte(0x0220)).WillOnce(Return(0x40));
1794 cpu.ExecuteInstruction(0xE6);
1795 EXPECT_EQ(mock_memory[0x0220], 0x41);
1796 EXPECT_FALSE(cpu.GetNegativeFlag());
1797 EXPECT_FALSE(cpu.GetZeroFlag());
1801 std::vector<uint8_t> data = {0xEE, 0x00, 0x10};
1802 mock_memory.SetMemoryContents(data);
1803 mock_memory.InsertMemory(0x1000, {0x40});
1805 cpu.SetAccumulatorSize(
false);
1806 cpu.ExecuteInstruction(0xEE);
1807 EXPECT_EQ(mock_memory[0x1000], 0x41);
1808 EXPECT_FALSE(cpu.GetNegativeFlag());
1809 EXPECT_FALSE(cpu.GetZeroFlag());
1814 std::vector<uint8_t> data = {0xE6, 0x20};
1815 mock_memory.SetMemoryContents(data);
1816 mock_memory.InsertMemory(0x0220, {0xFF});
1818 cpu.SetAccumulatorSize(
true);
1819 cpu.ExecuteInstruction(0xE6);
1820 EXPECT_FALSE(cpu.GetNegativeFlag());
1821 EXPECT_TRUE(cpu.GetZeroFlag());
1825 std::vector<uint8_t> data = {0xEE, 0x00, 0x10};
1826 mock_memory.SetMemoryContents(data);
1827 mock_memory.InsertMemory(0x1000, {0xFF});
1829 cpu.SetAccumulatorSize(
false);
1830 cpu.ExecuteInstruction(0xEE);
1831 EXPECT_FALSE(cpu.GetNegativeFlag());
1832 EXPECT_FALSE(cpu.GetZeroFlag());
1836 std::vector<uint8_t> data = {0xE6, 0x80};
1837 mock_memory.SetMemoryContents(data);
1839 cpu.SetAccumulatorSize(
true);
1840 cpu.ExecuteInstruction(0xE6);
1841 EXPECT_FALSE(cpu.GetNegativeFlag());
1842 EXPECT_FALSE(cpu.GetZeroFlag());
1848 std::vector<uint8_t> data = {0xF6, 0x20};
1849 mock_memory.SetMemoryContents(data);
1850 mock_memory.InsertMemory(0x0221, {0x40});
1852 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x20));
1853 EXPECT_CALL(mock_memory, ReadByte(0x0221)).WillOnce(Return(0x40));
1855 cpu.ExecuteInstruction(0xF6);
1856 EXPECT_EQ(mock_memory[0x0221], 0x41);
1857 EXPECT_FALSE(cpu.GetNegativeFlag());
1858 EXPECT_FALSE(cpu.GetZeroFlag());
1863 std::vector<uint8_t> data = {0xFE, 0x00, 0x10};
1864 mock_memory.SetMemoryContents(data);
1865 mock_memory.InsertMemory(0x1001, {0x40});
1867 cpu.SetAccumulatorSize(
false);
1868 cpu.ExecuteInstruction(0xFE);
1869 EXPECT_EQ(mock_memory[0x1001], 0x41);
1870 EXPECT_FALSE(cpu.GetNegativeFlag());
1871 EXPECT_FALSE(cpu.GetZeroFlag());
1907 std::vector<uint8_t> data = {0x4C, 0x05, 0x20};
1908 mock_memory.SetMemoryContents(data);
1910 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x2005));
1912 cpu.ExecuteInstruction(0x4C);
1913 cpu.ExecuteInstruction(0xEA);
1915 EXPECT_EQ(cpu.PC, 0x2006);
1919 std::vector<uint8_t> data = {0x6C, 0x03, 0x20, 0x05, 0x30};
1920 mock_memory.SetMemoryContents(data);
1922 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x2003));
1923 EXPECT_CALL(mock_memory, ReadWord(0x2003)).WillOnce(Return(0x3005));
1925 cpu.ExecuteInstruction(0x6C);
1926 EXPECT_EQ(cpu.PC, 0x3005);
1935 std::vector<uint8_t> data = {0x5C, 0x05, 0x00, 0x03};
1936 mock_memory.SetMemoryContents(data);
1937 mock_memory.InsertMemory(0x030005, {0x00, 0x20, 0x00});
1939 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x030005));
1941 cpu.ExecuteInstruction(0x5C);
1942 EXPECT_EQ(cpu.PC, 0x0005);
1943 EXPECT_EQ(cpu.PB, 0x03);
1948 std::vector<uint8_t> data = {0x7C, 0x05, 0x20, 0x00};
1949 mock_memory.SetMemoryContents(data);
1950 mock_memory.InsertMemory(0x2007, {0x30, 0x05});
1952 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x2005));
1953 EXPECT_CALL(mock_memory, ReadWord(0x2007)).WillOnce(Return(0x3005));
1955 cpu.ExecuteInstruction(0x7C);
1956 EXPECT_EQ(cpu.PC, 0x3005);
1960 std::vector<uint8_t> data = {0xDC, 0x05, 0x20, 0x00};
1961 mock_memory.SetMemoryContents(data);
1962 mock_memory.InsertMemory(0x2005, {0x01, 0x30, 0x05});
1964 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x2005));
1965 EXPECT_CALL(mock_memory, ReadWordLong(0x2005)).WillOnce(Return(0x013005));
1967 cpu.ExecuteInstruction(0xDC);
1968 EXPECT_EQ(cpu.PC, 0x3005);
1969 EXPECT_EQ(cpu.PB, 0x01);
1976 std::vector<uint8_t> data = {0x20, 0x05, 0x20};
1977 mock_memory.SetMemoryContents(data);
1979 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x2005));
1980 EXPECT_CALL(mock_memory, PushWord(0x0000)).Times(1);
1982 cpu.ExecuteInstruction(0x20);
1983 EXPECT_EQ(cpu.PC, 0x2005);
1986 cpu.ExecuteInstruction(0x60);
1987 EXPECT_EQ(cpu.PC, 0x0003);
1994 std::vector<uint8_t> data = {0x22, 0x05, 0x20, 0x00};
1995 mock_memory.SetMemoryContents(data);
1997 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x002005));
1998 EXPECT_CALL(mock_memory, PushLong(0x0000)).Times(1);
2000 cpu.ExecuteInstruction(0x22);
2001 EXPECT_EQ(cpu.PC, 0x002005);
2006 std::vector<uint8_t> data = {0xFC, 0x05, 0x20, 0x00};
2007 mock_memory.SetMemoryContents(data);
2008 mock_memory.InsertMemory(0x2007, {0x00, 0x20, 0x00});
2010 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x2005));
2011 EXPECT_CALL(mock_memory, ReadWord(0x2007)).WillOnce(Return(0x002000));
2013 cpu.ExecuteInstruction(0xFC);
2014 EXPECT_EQ(cpu.PC, 0x2000);
2021 cpu.SetAccumulatorSize(
true);
2024 std::vector<uint8_t> data = {0xA1, 0x3C};
2025 mock_memory.SetMemoryContents(data);
2026 mock_memory.InsertMemory(0x00023E, {0x00, 0x10});
2028 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2029 EXPECT_CALL(mock_memory, ReadWord(0x00023E)).WillOnce(Return(0x1000));
2031 EXPECT_CALL(mock_memory, ReadByte(0x1000)).WillOnce(Return(0x80));
2033 cpu.ExecuteInstruction(0xA1);
2034 EXPECT_EQ(cpu.A, 0x80);
2035 EXPECT_TRUE(cpu.GetNegativeFlag());
2036 EXPECT_FALSE(cpu.GetZeroFlag());
2040 cpu.SetAccumulatorSize(
true);
2042 mock_memory.SetSP(0x01FF);
2043 std::vector<uint8_t> data = {0xA3, 0x02};
2044 mock_memory.SetMemoryContents(data);
2045 mock_memory.InsertMemory(0x0201, {0x7F});
2047 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
2048 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
2049 EXPECT_CALL(mock_memory, ReadByte(0x0201)).WillOnce(Return(0x7F));
2051 cpu.ExecuteInstruction(0xA3);
2052 EXPECT_EQ(cpu.A, 0x7F);
2053 EXPECT_FALSE(cpu.GetNegativeFlag());
2054 EXPECT_FALSE(cpu.GetZeroFlag());
2058 cpu.SetAccumulatorSize(
true);
2060 std::vector<uint8_t> data = {0xA5, 0x3C, 0x00};
2061 mock_memory.SetMemoryContents(data);
2062 mock_memory.InsertMemory(0x00023C, {0x80});
2064 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2065 EXPECT_CALL(mock_memory, ReadByte(0x00023C)).WillOnce(Return(0x80));
2067 cpu.ExecuteInstruction(0xA5);
2068 EXPECT_EQ(cpu.A, 0x80);
2069 EXPECT_TRUE(cpu.GetNegativeFlag());
2070 EXPECT_FALSE(cpu.GetZeroFlag());
2074 cpu.SetAccumulatorSize(
true);
2076 std::vector<uint8_t> data = {0xA7, 0x3C, 0x00};
2077 mock_memory.SetMemoryContents(data);
2078 mock_memory.InsertMemory(0x00023C, {0x00, 0x10, 0x00});
2080 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2081 EXPECT_CALL(mock_memory, ReadWordLong(0x00023C)).WillOnce(Return(0x1000));
2083 EXPECT_CALL(mock_memory, ReadByte(0x1000)).WillOnce(Return(0x80));
2085 cpu.ExecuteInstruction(0xA7);
2086 EXPECT_EQ(cpu.A, 0x80);
2087 EXPECT_TRUE(cpu.GetNegativeFlag());
2088 EXPECT_FALSE(cpu.GetZeroFlag());
2092 cpu.SetAccumulatorSize(
true);
2093 std::vector<uint8_t> data = {0xA9, 0xFF};
2094 mock_memory.SetMemoryContents(data);
2096 cpu.ExecuteInstruction(0xA9);
2097 EXPECT_EQ(cpu.A, 0xFF);
2098 EXPECT_TRUE(cpu.GetNegativeFlag());
2099 EXPECT_FALSE(cpu.GetZeroFlag());
2103 std::vector<uint8_t> data = {0xA9, 0x7F, 0xFF};
2104 mock_memory.SetMemoryContents(data);
2106 cpu.SetAccumulatorSize(
false);
2107 cpu.ExecuteInstruction(0xA9);
2108 EXPECT_EQ(cpu.A, 0xFF7F);
2109 EXPECT_TRUE(cpu.GetNegativeFlag());
2110 EXPECT_FALSE(cpu.GetZeroFlag());
2114 cpu.SetAccumulatorSize(
true);
2115 std::vector<uint8_t> data = {0xAD, 0x7F, 0xFF};
2116 mock_memory.SetMemoryContents(data);
2117 mock_memory.InsertMemory(0x7FFF, {0x7F});
2119 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2121 EXPECT_CALL(mock_memory, ReadByte(0x7FFF)).WillOnce(Return(0x7F));
2123 cpu.SetAccumulatorSize(
true);
2124 cpu.ExecuteInstruction(0xAD);
2125 EXPECT_EQ(cpu.A, 0x7F);
2126 EXPECT_FALSE(cpu.GetZeroFlag());
2130 cpu.SetAccumulatorSize(
true);
2131 std::vector<uint8_t> data = {0xAF, 0x7F, 0xFF, 0x00};
2132 mock_memory.SetMemoryContents(data);
2133 mock_memory.InsertMemory(0x7FFF, {0x7F});
2135 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x7FFF));
2137 EXPECT_CALL(mock_memory, ReadByte(0x7FFF)).WillOnce(Return(0x7F));
2139 cpu.SetAccumulatorSize(
true);
2140 cpu.ExecuteInstruction(0xAF);
2141 EXPECT_EQ(cpu.A, 0x7F);
2142 EXPECT_FALSE(cpu.GetZeroFlag());
2146 cpu.SetAccumulatorSize(
true);
2149 std::vector<uint8_t> data = {0xB1, 0x3C};
2150 mock_memory.SetMemoryContents(data);
2151 mock_memory.InsertMemory(0x00023C, {0x00, 0x10});
2152 mock_memory.InsertMemory(0x1002, {0x80});
2154 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2155 EXPECT_CALL(mock_memory, ReadWord(0x00023C)).WillOnce(Return(0x1000));
2157 EXPECT_CALL(mock_memory, ReadByte(0x1002)).WillOnce(Return(0x80));
2159 cpu.ExecuteInstruction(0xB1);
2160 EXPECT_EQ(cpu.A, 0x80);
2161 EXPECT_TRUE(cpu.GetNegativeFlag());
2162 EXPECT_FALSE(cpu.GetZeroFlag());
2166 cpu.SetAccumulatorSize(
true);
2168 std::vector<uint8_t> data = {0xA1, 0x3C};
2169 mock_memory.SetMemoryContents(data);
2170 mock_memory.InsertMemory(0x00023C, {0x00, 0x10});
2172 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2173 EXPECT_CALL(mock_memory, ReadWord(0x00023C)).WillOnce(Return(0x1000));
2175 EXPECT_CALL(mock_memory, ReadByte(0x1000)).WillOnce(Return(0x7F));
2177 cpu.ExecuteInstruction(0xB2);
2178 EXPECT_EQ(cpu.A, 0x7F);
2179 EXPECT_FALSE(cpu.GetZeroFlag());
2183 cpu.SetAccumulatorSize(
true);
2186 std::vector<uint8_t> data = {0xB3, 0x02};
2187 mock_memory.SetMemoryContents(data);
2188 mock_memory.InsertMemory(0x0201, {0x00, 0x10});
2190 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
2191 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
2192 EXPECT_CALL(mock_memory, ReadWord(0x0201)).WillOnce(Return(0x1000));
2194 EXPECT_CALL(mock_memory, ReadByte(0x1002)).WillOnce(Return(0x80));
2196 cpu.ExecuteInstruction(0xB3);
2197 EXPECT_EQ(cpu.A, 0x80);
2198 EXPECT_TRUE(cpu.GetNegativeFlag());
2199 EXPECT_FALSE(cpu.GetZeroFlag());
2203 cpu.SetAccumulatorSize(
true);
2206 std::vector<uint8_t> data = {0xB5, 0x3C};
2207 mock_memory.SetMemoryContents(data);
2208 mock_memory.InsertMemory(0x00023E, {0x7F});
2210 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2211 EXPECT_CALL(mock_memory, ReadByte(0x00023E)).WillOnce(Return(0x80));
2213 cpu.ExecuteInstruction(0xB5);
2214 EXPECT_EQ(cpu.A, 0x80);
2215 EXPECT_TRUE(cpu.GetNegativeFlag());
2216 EXPECT_FALSE(cpu.GetZeroFlag());
2220 cpu.SetAccumulatorSize(
true);
2223 std::vector<uint8_t> data = {0xB7, 0x3C};
2224 mock_memory.SetMemoryContents(data);
2225 mock_memory.InsertMemory(0x00023C, {0x00, 0x10, 0x00});
2227 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2228 EXPECT_CALL(mock_memory, ReadWordLong(0x00023C)).WillOnce(Return(0x1000));
2230 EXPECT_CALL(mock_memory, ReadByte(0x1002)).WillOnce(Return(0x80));
2232 cpu.ExecuteInstruction(0xB7);
2233 EXPECT_EQ(cpu.A, 0x80);
2234 EXPECT_TRUE(cpu.GetNegativeFlag());
2235 EXPECT_FALSE(cpu.GetZeroFlag());
2239 cpu.SetAccumulatorSize(
true);
2241 std::vector<uint8_t> data = {0xB9, 0x7F, 0xFF};
2242 mock_memory.SetMemoryContents(data);
2243 mock_memory.InsertMemory(0x8001, {0x80});
2245 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2247 EXPECT_CALL(mock_memory, ReadByte(0x8001)).WillOnce(Return(0x80));
2249 cpu.ExecuteInstruction(0xB9);
2250 EXPECT_EQ(cpu.A, 0x80);
2251 EXPECT_FALSE(cpu.GetZeroFlag());
2255 cpu.SetAccumulatorSize(
true);
2257 std::vector<uint8_t> data = {0xBD, 0x7F, 0xFF};
2258 mock_memory.SetMemoryContents(data);
2259 mock_memory.InsertMemory(0x8001, {0x80});
2261 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2263 EXPECT_CALL(mock_memory, ReadByte(0x8001)).WillOnce(Return(0x80));
2265 cpu.ExecuteInstruction(0xBD);
2266 EXPECT_EQ(cpu.A, 0x80);
2267 EXPECT_FALSE(cpu.GetZeroFlag());
2271 cpu.SetAccumulatorSize(
true);
2273 std::vector<uint8_t> data = {0xBF, 0x7F, 0xFF, 0x00};
2274 mock_memory.SetMemoryContents(data);
2275 mock_memory.InsertMemory(0x8001, {0x80});
2277 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x7FFF));
2279 EXPECT_CALL(mock_memory, ReadByte(0x8001)).WillOnce(Return(0x80));
2281 cpu.ExecuteInstruction(0xBF);
2282 EXPECT_EQ(cpu.A, 0x80);
2283 EXPECT_FALSE(cpu.GetZeroFlag());
2299 cpu.SetIndexSize(
true);
2300 std::vector<uint8_t> data = {0xA6, 0x80};
2301 mock_memory.SetMemoryContents(data);
2302 mock_memory.InsertMemory(0x0080, {0x42});
2304 cpu.ExecuteInstruction(0xA6);
2305 EXPECT_EQ(cpu.X, 0x42);
2306 EXPECT_FALSE(cpu.GetZeroFlag());
2310 cpu.SetIndexSize(
true);
2311 std::vector<uint8_t> data = {0xAE, 0x7F, 0xFF};
2312 mock_memory.SetMemoryContents(data);
2313 mock_memory.InsertMemory(0x7FFF, {0x42});
2315 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2317 cpu.ExecuteInstruction(0xAE);
2318 EXPECT_EQ(cpu.X, 0x42);
2319 EXPECT_FALSE(cpu.GetZeroFlag());
2323 cpu.SetIndexSize(
true);
2325 std::vector<uint8_t> data = {0xB6, 0x80};
2326 mock_memory.SetMemoryContents(data);
2327 mock_memory.InsertMemory(0x0082, {0x42});
2329 cpu.ExecuteInstruction(0xB6);
2330 EXPECT_EQ(cpu.X, 0x42);
2331 EXPECT_FALSE(cpu.GetZeroFlag());
2335 cpu.SetIndexSize(
true);
2337 std::vector<uint8_t> data = {0xBE, 0x7F, 0xFF};
2338 mock_memory.SetMemoryContents(data);
2339 mock_memory.InsertMemory(0x8001, {0x42});
2341 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2343 cpu.ExecuteInstruction(0xBE);
2344 EXPECT_EQ(cpu.X, 0x42);
2345 EXPECT_FALSE(cpu.GetZeroFlag());
2361 cpu.SetIndexSize(
true);
2362 std::vector<uint8_t> data = {0xA4, 0x80};
2363 mock_memory.SetMemoryContents(data);
2364 mock_memory.InsertMemory(0x0080, {0x42});
2366 cpu.ExecuteInstruction(0xA4);
2367 EXPECT_EQ(cpu.Y, 0x42);
2368 EXPECT_FALSE(cpu.GetZeroFlag());
2372 cpu.SetIndexSize(
true);
2373 std::vector<uint8_t> data = {0xAC, 0x7F, 0xFF};
2374 mock_memory.SetMemoryContents(data);
2375 mock_memory.InsertMemory(0x7FFF, {0x42});
2377 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2379 cpu.ExecuteInstruction(0xAC);
2380 EXPECT_EQ(cpu.Y, 0x42);
2381 EXPECT_FALSE(cpu.GetZeroFlag());
2385 cpu.SetIndexSize(
true);
2387 std::vector<uint8_t> data = {0xB4, 0x80};
2388 mock_memory.SetMemoryContents(data);
2389 mock_memory.InsertMemory(0x0082, {0x42});
2391 cpu.ExecuteInstruction(0xB4);
2392 EXPECT_EQ(cpu.Y, 0x42);
2393 EXPECT_FALSE(cpu.GetZeroFlag());
2397 cpu.SetIndexSize(
true);
2399 std::vector<uint8_t> data = {0xBC, 0x7F, 0xFF};
2400 mock_memory.SetMemoryContents(data);
2401 mock_memory.InsertMemory(0x8001, {0x42});
2403 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2405 cpu.ExecuteInstruction(0xBC);
2406 EXPECT_EQ(cpu.Y, 0x42);
2407 EXPECT_FALSE(cpu.GetZeroFlag());
2413 cpu.SetAccumulatorSize(
true);
2414 std::vector<uint8_t> data = {0x46, 0x80};
2415 mock_memory.SetMemoryContents(data);
2416 mock_memory.InsertMemory(0x0080, {0x42});
2418 cpu.ExecuteInstruction(0x46);
2419 EXPECT_EQ(mock_memory[0x0080], 0x21);
2420 EXPECT_FALSE(cpu.GetNegativeFlag());
2421 EXPECT_FALSE(cpu.GetZeroFlag());
2434 cpu.SetAccumulatorSize(
true);
2435 std::vector<uint8_t> data = {0x4E, 0x7F, 0xFF};
2436 mock_memory.SetMemoryContents(data);
2437 mock_memory.InsertMemory(0x7FFF, {0x42});
2439 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2441 cpu.ExecuteInstruction(0x4E);
2442 EXPECT_EQ(mock_memory[0x7FFF], 0x21);
2443 EXPECT_FALSE(cpu.GetNegativeFlag());
2444 EXPECT_FALSE(cpu.GetZeroFlag());
2448 cpu.SetAccumulatorSize(
true);
2450 std::vector<uint8_t> data = {0x56, 0x80};
2451 mock_memory.SetMemoryContents(data);
2452 mock_memory.InsertMemory(0x0082, {0x42});
2454 cpu.ExecuteInstruction(0x56);
2455 EXPECT_EQ(mock_memory[0x0082], 0x21);
2456 EXPECT_FALSE(cpu.GetNegativeFlag());
2457 EXPECT_FALSE(cpu.GetZeroFlag());
2461 cpu.SetAccumulatorSize(
true);
2463 std::vector<uint8_t> data = {0x5E, 0x7F, 0xFF};
2464 mock_memory.SetMemoryContents(data);
2465 mock_memory.InsertMemory(0x8001, {0x42});
2467 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2469 cpu.ExecuteInstruction(0x5E);
2470 EXPECT_EQ(mock_memory[0x8001], 0x21);
2471 EXPECT_FALSE(cpu.GetNegativeFlag());
2472 EXPECT_FALSE(cpu.GetZeroFlag());
2479 cpu.SetAccumulatorSize(
true);
2482 std::vector<uint8_t> data = {0x01, 0x3C};
2483 mock_memory.SetMemoryContents(data);
2484 mock_memory.InsertMemory(0x00023E, {0x00, 0x10});
2486 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2487 EXPECT_CALL(mock_memory, ReadWord(0x00023E)).WillOnce(Return(0x1000));
2489 EXPECT_CALL(mock_memory, ReadByte(0x1000)).WillOnce(Return(0x80));
2491 cpu.ExecuteInstruction(0x01);
2492 EXPECT_EQ(cpu.A, 0x80);
2493 EXPECT_TRUE(cpu.GetNegativeFlag());
2494 EXPECT_FALSE(cpu.GetZeroFlag());
2498 cpu.SetAccumulatorSize(
true);
2500 mock_memory.SetSP(0x01FF);
2501 std::vector<uint8_t> data = {0x03, 0x02};
2502 mock_memory.SetMemoryContents(data);
2503 mock_memory.InsertMemory(0x0201, {0x7F});
2505 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
2506 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
2507 EXPECT_CALL(mock_memory, ReadByte(0x0201)).WillOnce(Return(0x7F));
2509 cpu.ExecuteInstruction(0x03);
2510 EXPECT_EQ(cpu.A, 0x7F);
2511 EXPECT_FALSE(cpu.GetNegativeFlag());
2512 EXPECT_FALSE(cpu.GetZeroFlag());
2516 cpu.SetAccumulatorSize(
true);
2518 std::vector<uint8_t> data = {0x05, 0x3C, 0x00};
2519 mock_memory.SetMemoryContents(data);
2520 mock_memory.InsertMemory(0x00023C, {0x80});
2522 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2523 EXPECT_CALL(mock_memory, ReadByte(0x00023C)).WillOnce(Return(0x80));
2525 cpu.ExecuteInstruction(0x05);
2526 EXPECT_EQ(cpu.A, 0x80);
2527 EXPECT_TRUE(cpu.GetNegativeFlag());
2528 EXPECT_FALSE(cpu.GetZeroFlag());
2532 cpu.SetAccumulatorSize(
true);
2534 std::vector<uint8_t> data = {0x07, 0x3C, 0x00};
2535 mock_memory.SetMemoryContents(data);
2536 mock_memory.InsertMemory(0x00023C, {0x00, 0x10, 0x00});
2538 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2539 EXPECT_CALL(mock_memory, ReadWordLong(0x00023C)).WillOnce(Return(0x1000));
2541 EXPECT_CALL(mock_memory, ReadByte(0x1000)).WillOnce(Return(0x80));
2543 cpu.ExecuteInstruction(0x07);
2544 EXPECT_EQ(cpu.A, 0x80);
2545 EXPECT_TRUE(cpu.GetNegativeFlag());
2546 EXPECT_FALSE(cpu.GetZeroFlag());
2550 cpu.SetAccumulatorSize(
true);
2551 std::vector<uint8_t> data = {0x09, 0xFF};
2552 mock_memory.SetMemoryContents(data);
2554 cpu.ExecuteInstruction(0x09);
2555 EXPECT_EQ(cpu.A, 0xFF);
2556 EXPECT_TRUE(cpu.GetNegativeFlag());
2557 EXPECT_FALSE(cpu.GetZeroFlag());
2561 cpu.SetAccumulatorSize(
true);
2562 std::vector<uint8_t> data = {0x0D, 0x7F, 0xFF};
2563 mock_memory.SetMemoryContents(data);
2564 mock_memory.InsertMemory(0x7FFF, {0x7F});
2566 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2568 EXPECT_CALL(mock_memory, ReadByte(0x7FFF)).WillOnce(Return(0x7F));
2570 cpu.SetAccumulatorSize(
true);
2571 cpu.ExecuteInstruction(0x0D);
2572 EXPECT_EQ(cpu.A, 0x7F);
2573 EXPECT_FALSE(cpu.GetZeroFlag());
2577 cpu.SetAccumulatorSize(
true);
2578 std::vector<uint8_t> data = {0x0F, 0x7F, 0xFF, 0x00};
2579 mock_memory.SetMemoryContents(data);
2580 mock_memory.InsertMemory(0x7FFF, {0x7F});
2582 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x7FFF));
2584 EXPECT_CALL(mock_memory, ReadByte(0x7FFF)).WillOnce(Return(0x7F));
2586 cpu.SetAccumulatorSize(
true);
2587 cpu.ExecuteInstruction(0x0F);
2588 EXPECT_EQ(cpu.A, 0x7F);
2589 EXPECT_FALSE(cpu.GetZeroFlag());
2593 cpu.SetAccumulatorSize(
true);
2596 std::vector<uint8_t> data = {0x11, 0x3C};
2597 mock_memory.SetMemoryContents(data);
2598 mock_memory.InsertMemory(0x00023C, {0x00, 0x10});
2599 mock_memory.InsertMemory(0x1002, {0x80});
2601 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2602 EXPECT_CALL(mock_memory, ReadWord(0x00023C)).WillOnce(Return(0x1000));
2604 EXPECT_CALL(mock_memory, ReadByte(0x1002)).WillOnce(Return(0x80));
2606 cpu.ExecuteInstruction(0x11);
2607 EXPECT_EQ(cpu.A, 0x80);
2608 EXPECT_TRUE(cpu.GetNegativeFlag());
2609 EXPECT_FALSE(cpu.GetZeroFlag());
2613 cpu.SetAccumulatorSize(
true);
2615 std::vector<uint8_t> data = {0x12, 0x3C};
2616 mock_memory.SetMemoryContents(data);
2617 mock_memory.InsertMemory(0x00023C, {0x00, 0x10});
2619 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2620 EXPECT_CALL(mock_memory, ReadWord(0x00023C)).WillOnce(Return(0x1000));
2622 EXPECT_CALL(mock_memory, ReadByte(0x1000)).WillOnce(Return(0x7F));
2624 cpu.ExecuteInstruction(0x12);
2625 EXPECT_EQ(cpu.A, 0x7F);
2626 EXPECT_FALSE(cpu.GetZeroFlag());
2630 cpu.SetAccumulatorSize(
true);
2633 std::vector<uint8_t> data = {0x13, 0x02};
2634 mock_memory.SetMemoryContents(data);
2635 mock_memory.InsertMemory(0x0201, {0x00, 0x10});
2637 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
2638 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x02));
2639 EXPECT_CALL(mock_memory, ReadWord(0x0201)).WillOnce(Return(0x1000));
2641 EXPECT_CALL(mock_memory, ReadByte(0x1002)).WillOnce(Return(0x80));
2643 cpu.ExecuteInstruction(0x13);
2644 EXPECT_EQ(cpu.A, 0x80);
2645 EXPECT_TRUE(cpu.GetNegativeFlag());
2646 EXPECT_FALSE(cpu.GetZeroFlag());
2650 cpu.SetAccumulatorSize(
true);
2653 std::vector<uint8_t> data = {0x15, 0x3C};
2654 mock_memory.SetMemoryContents(data);
2655 mock_memory.InsertMemory(0x00023E, {0x80});
2657 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2658 EXPECT_CALL(mock_memory, ReadByte(0x00023E)).WillOnce(Return(0x80));
2660 cpu.ExecuteInstruction(0x15);
2661 EXPECT_EQ(cpu.A, 0x80);
2662 EXPECT_TRUE(cpu.GetNegativeFlag());
2663 EXPECT_FALSE(cpu.GetZeroFlag());
2667 cpu.SetAccumulatorSize(
true);
2670 std::vector<uint8_t> data = {0x17, 0x3C};
2671 mock_memory.SetMemoryContents(data);
2672 mock_memory.InsertMemory(0x00023C, {0x00, 0x10, 0x00});
2674 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
2675 EXPECT_CALL(mock_memory, ReadWordLong(0x00023C)).WillOnce(Return(0x1000));
2677 EXPECT_CALL(mock_memory, ReadByte(0x1002)).WillOnce(Return(0x80));
2679 cpu.ExecuteInstruction(0x17);
2680 EXPECT_EQ(cpu.A, 0x80);
2681 EXPECT_TRUE(cpu.GetNegativeFlag());
2682 EXPECT_FALSE(cpu.GetZeroFlag());
2686 cpu.SetAccumulatorSize(
true);
2688 std::vector<uint8_t> data = {0x19, 0x7F, 0xFF};
2689 mock_memory.SetMemoryContents(data);
2690 mock_memory.InsertMemory(0x8001, {0x7F});
2692 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2694 EXPECT_CALL(mock_memory, ReadByte(0x8001)).WillOnce(Return(0x7F));
2696 cpu.ExecuteInstruction(0x19);
2697 EXPECT_EQ(cpu.A, 0x7F);
2698 EXPECT_FALSE(cpu.GetZeroFlag());
2702 cpu.SetAccumulatorSize(
true);
2704 std::vector<uint8_t> data = {0x1D, 0x7F, 0xFF};
2705 mock_memory.SetMemoryContents(data);
2706 mock_memory.InsertMemory(0x8001, {0x7F});
2708 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2710 EXPECT_CALL(mock_memory, ReadByte(0x8001)).WillOnce(Return(0x7F));
2712 cpu.ExecuteInstruction(0x1D);
2713 EXPECT_EQ(cpu.A, 0x7F);
2714 EXPECT_FALSE(cpu.GetZeroFlag());
2718 cpu.SetAccumulatorSize(
true);
2720 std::vector<uint8_t> data = {0x1F, 0x7F, 0xFF, 0x00};
2721 mock_memory.SetMemoryContents(data);
2722 mock_memory.InsertMemory(0x8001, {0x7F});
2724 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x7FFF));
2726 EXPECT_CALL(mock_memory, ReadByte(0x8001)).WillOnce(Return(0x7F));
2728 cpu.ExecuteInstruction(0x1F);
2729 EXPECT_EQ(cpu.A, 0x7F);
2730 EXPECT_FALSE(cpu.GetZeroFlag());
2736 cpu.SetAccumulatorSize(
true);
2737 std::vector<uint8_t> data = {0xF4, 0x7F, 0xFF};
2738 mock_memory.SetMemoryContents(data);
2740 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2741 EXPECT_CALL(mock_memory, PushWord(0x7FFF));
2743 cpu.ExecuteInstruction(0xF4);
2747 cpu.SetAccumulatorSize(
true);
2748 std::vector<uint8_t> data = {0xD4, 0x3C, 0x00};
2749 mock_memory.SetMemoryContents(data);
2750 mock_memory.InsertMemory(0x00003C, {0x00, 0x10});
2752 EXPECT_CALL(mock_memory, ReadWord(0x000001)).WillOnce(Return(0x3C));
2753 EXPECT_CALL(mock_memory, ReadWord(0x00003C)).WillOnce(Return(0x1000));
2755 EXPECT_CALL(mock_memory, PushWord(0x1000));
2757 cpu.ExecuteInstruction(0xD4);
2761 cpu.SetAccumulatorSize(
true);
2762 std::vector<uint8_t> data = {0x62, 0x7F, 0xFF};
2763 mock_memory.SetMemoryContents(data);
2765 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
2766 EXPECT_CALL(mock_memory, PushWord(0x7FFF));
2768 cpu.ExecuteInstruction(0x62);
2860 cpu.SetAccumulatorSize(
true);
2862 std::vector<uint8_t> data = {0x68};
2863 mock_memory.SetMemoryContents(data);
2864 mock_memory.InsertMemory(0x0001, {0x7F});
2866 EXPECT_CALL(mock_memory, PopByte()).WillOnce(Return(0x7F));
2868 cpu.ExecuteInstruction(0x68);
2869 EXPECT_EQ(cpu.A, 0x7F);
2873 cpu.SetAccumulatorSize(
false);
2875 std::vector<uint8_t> data = {0x68};
2876 mock_memory.SetMemoryContents(data);
2877 mock_memory.InsertMemory(0x0001, {0x7F, 0xFF});
2879 EXPECT_CALL(mock_memory, PopWord()).WillOnce(Return(0x7FFF));
2881 cpu.ExecuteInstruction(0x68);
2882 EXPECT_EQ(cpu.A, 0x7FFF);
2886 cpu.SetAccumulatorSize(
true);
2888 std::vector<uint8_t> data = {0xAB};
2889 mock_memory.SetMemoryContents(data);
2890 mock_memory.InsertMemory(0x0001, {0x7F});
2892 EXPECT_CALL(mock_memory, PopByte()).WillOnce(Return(0x7F));
2894 cpu.ExecuteInstruction(0xAB);
2895 EXPECT_EQ(cpu.DB, 0x7F);
2899 cpu.SetAccumulatorSize(
true);
2901 std::vector<uint8_t> data = {0x2B};
2902 mock_memory.SetMemoryContents(data);
2903 mock_memory.InsertMemory(0x0001, {0x7F, 0xFF});
2905 EXPECT_CALL(mock_memory, PopWord()).WillOnce(Return(0x7FFF));
2907 cpu.ExecuteInstruction(0x2B);
2908 EXPECT_EQ(cpu.D, 0x7FFF);
2912 cpu.SetAccumulatorSize(
true);
2914 std::vector<uint8_t> data = {0x28};
2915 mock_memory.SetMemoryContents(data);
2916 mock_memory.InsertMemory(0x0001, {0x7F});
2918 EXPECT_CALL(mock_memory, PopByte()).WillOnce(Return(0x7F));
2920 cpu.ExecuteInstruction(0x28);
2921 EXPECT_EQ(cpu.status, 0x7F);
2925 cpu.SetAccumulatorSize(
true);
2927 std::vector<uint8_t> data = {0xFA};
2928 mock_memory.SetMemoryContents(data);
2929 mock_memory.InsertMemory(0x0001, {0x7F});
2931 EXPECT_CALL(mock_memory, PopByte()).WillOnce(Return(0x7F));
2933 cpu.ExecuteInstruction(0xFA);
2934 EXPECT_EQ(cpu.X, 0x7F);
2938 cpu.SetIndexSize(
false);
2941 std::vector<uint8_t> data = {0xFA};
2942 mock_memory.SetMemoryContents(data);
2943 mock_memory.InsertMemory(0x01FF, {0x7F, 0xFF});
2945 EXPECT_CALL(mock_memory, PopWord()).WillOnce(Return(0x7FFF));
2947 cpu.ExecuteInstruction(0xFA);
2948 EXPECT_EQ(cpu.X, 0x7FFF);
2952 cpu.SetIndexSize(
true);
2954 std::vector<uint8_t> data = {0x7A};
2955 mock_memory.SetMemoryContents(data);
2956 mock_memory.InsertMemory(0x0001, {0x7F});
2958 EXPECT_CALL(mock_memory, PopByte()).WillOnce(Return(0x7F));
2960 cpu.ExecuteInstruction(0x7A);
2961 EXPECT_EQ(cpu.Y, 0x7F);
2965 cpu.SetIndexSize(
false);
2967 std::vector<uint8_t> data = {0x7A};
2968 mock_memory.SetMemoryContents(data);
2969 mock_memory.InsertMemory(0x0001, {0x7F, 0xFF});
2971 EXPECT_CALL(mock_memory, PopWord()).WillOnce(Return(0x7FFF));
2973 cpu.ExecuteInstruction(0x7A);
2974 EXPECT_EQ(cpu.Y, 0x7FFF);
3011 cpu.SetNegativeFlag(
true);
3012 cpu.SetZeroFlag(
false);
3013 EXPECT_TRUE(cpu.GetNegativeFlag());
3014 EXPECT_FALSE(cpu.GetZeroFlag());
3016 EXPECT_CALL(mock_memory, PushByte(0x80)).WillOnce(Return());
3020 cpu.SetNegativeFlag(
false);
3021 cpu.SetZeroFlag(
true);
3022 EXPECT_FALSE(cpu.GetNegativeFlag());
3023 EXPECT_TRUE(cpu.GetZeroFlag());
3025 EXPECT_CALL(mock_memory, PopByte()).WillOnce(Return(0x80));
3028 EXPECT_TRUE(cpu.GetNegativeFlag());
3029 EXPECT_FALSE(cpu.GetZeroFlag());
3089 EXPECT_CALL(mock_memory, PopByte()).WillOnce(Return(0x34));
3090 cpu.ExecuteInstruction(0x28);
3091 EXPECT_EQ(cpu.status, 0x34);
3123 std::vector<uint8_t> data = {0xE2, 0x30,
3125 mock_memory.SetMemoryContents(data);
3127 cpu.ExecuteInstruction(0xE2);
3128 EXPECT_EQ(cpu.status, 0x30);
3134 cpu.SetAccumulatorSize(
true);
3135 std::vector<uint8_t> data = {0x26, 0x80};
3136 mock_memory.SetMemoryContents(data);
3137 mock_memory.InsertMemory(0x0080, {0x42});
3139 cpu.ExecuteInstruction(0x26);
3140 EXPECT_EQ(mock_memory[0x0080], 0x84);
3141 EXPECT_TRUE(cpu.GetNegativeFlag());
3142 EXPECT_FALSE(cpu.GetZeroFlag());
3155 cpu.SetAccumulatorSize(
true);
3156 std::vector<uint8_t> data = {0x2E, 0x7F, 0xFF};
3157 mock_memory.SetMemoryContents(data);
3158 mock_memory.InsertMemory(0x7FFF, {0x42});
3160 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3162 cpu.ExecuteInstruction(0x2E);
3163 EXPECT_EQ(mock_memory[0x7FFF], 0x84);
3164 EXPECT_TRUE(cpu.GetNegativeFlag());
3165 EXPECT_FALSE(cpu.GetZeroFlag());
3169 cpu.SetAccumulatorSize(
true);
3171 std::vector<uint8_t> data = {0x36, 0x80};
3172 mock_memory.SetMemoryContents(data);
3173 mock_memory.InsertMemory(0x0082, {0x42});
3175 cpu.ExecuteInstruction(0x36);
3176 EXPECT_EQ(mock_memory[0x0082], 0x84);
3177 EXPECT_TRUE(cpu.GetNegativeFlag());
3178 EXPECT_FALSE(cpu.GetZeroFlag());
3182 cpu.SetAccumulatorSize(
true);
3184 std::vector<uint8_t> data = {0x3E, 0x7F, 0xFF};
3185 mock_memory.SetMemoryContents(data);
3186 mock_memory.InsertMemory(0x8001, {0x42});
3188 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3190 cpu.ExecuteInstruction(0x3E);
3191 EXPECT_EQ(mock_memory[0x8001], 0x84);
3192 EXPECT_TRUE(cpu.GetNegativeFlag());
3193 EXPECT_FALSE(cpu.GetZeroFlag());
3199 cpu.SetAccumulatorSize(
true);
3200 std::vector<uint8_t> data = {0x66, 0x80};
3201 mock_memory.SetMemoryContents(data);
3202 mock_memory.InsertMemory(0x0080, {0x42});
3204 cpu.ExecuteInstruction(0x66);
3205 EXPECT_EQ(mock_memory[0x0080], 0x21);
3206 EXPECT_FALSE(cpu.GetNegativeFlag());
3207 EXPECT_FALSE(cpu.GetZeroFlag());
3220 cpu.SetAccumulatorSize(
true);
3221 std::vector<uint8_t> data = {0x6E, 0x7F, 0xFF};
3222 mock_memory.SetMemoryContents(data);
3223 mock_memory.InsertMemory(0x7FFF, {0x42});
3225 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3227 cpu.ExecuteInstruction(0x6E);
3228 EXPECT_EQ(mock_memory[0x7FFF], 0x21);
3229 EXPECT_FALSE(cpu.GetNegativeFlag());
3230 EXPECT_FALSE(cpu.GetZeroFlag());
3234 cpu.SetAccumulatorSize(
true);
3236 std::vector<uint8_t> data = {0x76, 0x80};
3237 mock_memory.SetMemoryContents(data);
3238 mock_memory.InsertMemory(0x0082, {0x42});
3240 cpu.ExecuteInstruction(0x76);
3241 EXPECT_EQ(mock_memory[0x0082], 0x21);
3242 EXPECT_FALSE(cpu.GetNegativeFlag());
3243 EXPECT_FALSE(cpu.GetZeroFlag());
3247 cpu.SetAccumulatorSize(
true);
3249 std::vector<uint8_t> data = {0x7E, 0x7F, 0xFF};
3250 mock_memory.SetMemoryContents(data);
3251 mock_memory.InsertMemory(0x8001, {0x42});
3253 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3255 cpu.ExecuteInstruction(0x7E);
3256 EXPECT_EQ(mock_memory[0x8001], 0x21);
3257 EXPECT_FALSE(cpu.GetNegativeFlag());
3258 EXPECT_FALSE(cpu.GetZeroFlag());
3264 cpu.SetAccumulatorSize(
true);
3266 std::vector<uint8_t> data = {0x40};
3267 mock_memory.SetMemoryContents(data);
3268 mock_memory.InsertMemory(0x0001, {0x7F});
3270 EXPECT_CALL(mock_memory, PopByte()).WillOnce(Return(0x7F));
3272 cpu.ExecuteInstruction(0x40);
3273 EXPECT_EQ(cpu.status, 0x7F);
3279 cpu.SetAccumulatorSize(
true);
3281 std::vector<uint8_t> data = {0x6B};
3282 mock_memory.SetMemoryContents(data);
3283 mock_memory.InsertMemory(0x0001, {0x7F, 0xFF});
3285 EXPECT_CALL(mock_memory, PopWord()).WillOnce(Return(0x7FFF));
3287 cpu.ExecuteInstruction(0x6B);
3288 EXPECT_EQ(cpu.PC, 0x7FFF);
3294 cpu.SetAccumulatorSize(
true);
3296 std::vector<uint8_t> data = {0x60};
3297 mock_memory.SetMemoryContents(data);
3298 mock_memory.InsertMemory(0x0001, {0x7F, 0xFF});
3300 EXPECT_CALL(mock_memory, PopWord()).WillOnce(Return(0x7FFF));
3302 cpu.ExecuteInstruction(0x60);
3303 EXPECT_EQ(cpu.PC, 0x7FFF + 3);
3309 cpu.SetAccumulatorSize(
true);
3314 std::vector<uint8_t> data = {0xE1, 0x3C};
3315 mock_memory.SetMemoryContents(data);
3316 mock_memory.InsertMemory(0x00023E, {0x80});
3317 mock_memory.InsertMemory(0x0080, {0x80});
3319 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3320 EXPECT_CALL(mock_memory, ReadWord(0x00023E)).WillOnce(Return(0x80));
3321 EXPECT_CALL(mock_memory, ReadByte(0x0080)).WillOnce(Return(0x80));
3323 cpu.ExecuteInstruction(0xE1);
3324 EXPECT_EQ(cpu.A, 0x90);
3325 EXPECT_TRUE(cpu.GetNegativeFlag());
3326 EXPECT_FALSE(cpu.GetZeroFlag());
3330 std::vector<uint8_t> data = {0xE3, 0x3C};
3331 mock_memory.SetMemoryContents(data);
3332 cpu.SetAccumulatorSize(
true);
3334 mock_memory.SetSP(0x01FF);
3335 mock_memory.InsertMemory(0x00003E, {0x02});
3336 mock_memory.InsertMemory(0x2002, {0x80});
3338 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
3341 cpu.ExecuteInstruction(0xE3);
3342 EXPECT_EQ(cpu.A, 0x00);
3343 EXPECT_FALSE(cpu.GetNegativeFlag());
3344 EXPECT_TRUE(cpu.GetZeroFlag());
3348 std::vector<uint8_t> data = {0xE5, 0x80};
3349 mock_memory.SetMemoryContents(data);
3352 cpu.SetAccumulatorSize(
true);
3356 mock_memory.InsertMemory(0x0180, {0x01});
3358 cpu.ExecuteInstruction(0xE5);
3359 EXPECT_EQ(cpu.A, 0x41);
3360 EXPECT_FALSE(cpu.GetNegativeFlag());
3361 EXPECT_FALSE(cpu.GetZeroFlag());
3365 cpu.SetAccumulatorSize(
true);
3368 std::vector<uint8_t> data = {0xE7, 0x3C};
3369 mock_memory.SetMemoryContents(data);
3370 mock_memory.InsertMemory(0x00003C, {0x00, 0x10, 0x00});
3371 mock_memory.InsertMemory(0x1000, {0x8F});
3373 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3374 EXPECT_CALL(mock_memory, ReadWordLong(0x00003C)).WillOnce(Return(0x1000));
3376 EXPECT_CALL(mock_memory, ReadByte(0x1000)).WillOnce(Return(0x8F));
3378 cpu.ExecuteInstruction(0xE7);
3379 EXPECT_EQ(cpu.A, 0xF1);
3380 EXPECT_TRUE(cpu.GetNegativeFlag());
3381 EXPECT_FALSE(cpu.GetZeroFlag());
3385 cpu.SetAccumulatorSize(
true);
3388 std::vector<uint8_t> data = {0xE9, 0x80};
3389 mock_memory.SetMemoryContents(data);
3391 cpu.ExecuteInstruction(0xE9);
3392 EXPECT_EQ(cpu.A, 0x00);
3393 EXPECT_FALSE(cpu.GetNegativeFlag());
3394 EXPECT_TRUE(cpu.GetZeroFlag());
3398 cpu.SetAccumulatorSize(
true);
3401 std::vector<uint8_t> data = {0xED, 0x7F, 0xFF};
3402 mock_memory.SetMemoryContents(data);
3403 mock_memory.InsertMemory(0x7FFF, {0x80});
3405 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3407 cpu.ExecuteInstruction(0xED);
3408 EXPECT_EQ(cpu.A, 0x7F);
3409 EXPECT_FALSE(cpu.GetNegativeFlag());
3410 EXPECT_FALSE(cpu.GetZeroFlag());
3414 cpu.SetAccumulatorSize(
true);
3417 std::vector<uint8_t> data = {0xEF, 0x7F, 0xFF, 0xFF, 0xFF};
3418 mock_memory.SetMemoryContents(data);
3419 mock_memory.InsertMemory(0x7FFFFF, {0x80});
3421 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x7FFFFF));
3423 cpu.ExecuteInstruction(0xEF);
3424 EXPECT_EQ(cpu.A, 0x7F);
3425 EXPECT_FALSE(cpu.GetNegativeFlag());
3426 EXPECT_FALSE(cpu.GetZeroFlag());
3430 cpu.SetAccumulatorSize(
true);
3434 std::vector<uint8_t> data = {0xF1, 0x3C};
3435 mock_memory.SetMemoryContents(data);
3436 mock_memory.InsertMemory(0x00003E, {0x00, 0x10});
3438 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3439 EXPECT_CALL(mock_memory, ReadWord(0x00003C)).WillOnce(Return(0x1000));
3441 EXPECT_CALL(mock_memory, ReadByte(0x1002)).WillOnce(Return(0x80));
3443 cpu.ExecuteInstruction(0xF1);
3444 EXPECT_EQ(cpu.A, 0x7F);
3445 EXPECT_FALSE(cpu.GetNegativeFlag());
3446 EXPECT_FALSE(cpu.GetZeroFlag());
3450 cpu.SetAccumulatorSize(
true);
3454 std::vector<uint8_t> data = {0xF2, 0x3C};
3455 mock_memory.SetMemoryContents(data);
3456 mock_memory.InsertMemory(0x00023C, {0x00, 0x10});
3457 mock_memory.InsertMemory(0x1000, {0x80});
3459 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3461 EXPECT_CALL(mock_memory, ReadWord(0x00023C)).WillOnce(Return(0x1000));
3463 EXPECT_CALL(mock_memory, ReadByte(0x1000)).WillOnce(Return(0x80));
3465 cpu.ExecuteInstruction(0xF2);
3466 EXPECT_EQ(cpu.A, 0x90);
3467 EXPECT_TRUE(cpu.GetNegativeFlag());
3468 EXPECT_FALSE(cpu.GetZeroFlag());
3472 cpu.SetAccumulatorSize(
true);
3476 mock_memory.SetSP(0x01FF);
3477 std::vector<uint8_t> data = {0xF3, 0x02};
3478 mock_memory.SetMemoryContents(data);
3479 mock_memory.InsertMemory(0x0201, {0x00, 0x30});
3480 mock_memory.InsertMemory(0x3002, {0x80});
3482 EXPECT_CALL(mock_memory, SP()).WillRepeatedly(Return(0x01FF));
3483 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x02));
3484 EXPECT_CALL(mock_memory, ReadWord(0x0201)).WillOnce(Return(0x3000));
3485 EXPECT_CALL(mock_memory, ReadByte(0x3002)).WillOnce(Return(0x80));
3487 cpu.ExecuteInstruction(0xF3);
3488 EXPECT_EQ(cpu.A, 0x7F);
3489 EXPECT_FALSE(cpu.GetNegativeFlag());
3490 EXPECT_FALSE(cpu.GetZeroFlag());
3494 cpu.SetAccumulatorSize(
true);
3497 std::vector<uint8_t> data = {0xF5, 0x80};
3498 mock_memory.SetMemoryContents(data);
3499 mock_memory.InsertMemory(0x0082, {0x01});
3501 cpu.ExecuteInstruction(0xF5);
3502 EXPECT_EQ(cpu.A, 0xFF);
3503 EXPECT_TRUE(cpu.GetNegativeFlag());
3504 EXPECT_FALSE(cpu.GetZeroFlag());
3508 cpu.SetAccumulatorSize(
true);
3512 std::vector<uint8_t> data = {0xF7, 0x3C};
3513 mock_memory.SetMemoryContents(data);
3514 mock_memory.InsertMemory(0x00003C, {0x00, 0x10, 0x00});
3516 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3517 EXPECT_CALL(mock_memory, ReadWordLong(0x00003C)).WillOnce(Return(0x1000));
3519 EXPECT_CALL(mock_memory, ReadByte(0x1002)).WillOnce(Return(0x80));
3521 cpu.ExecuteInstruction(0xF7);
3522 EXPECT_EQ(cpu.A, 0x7F);
3523 EXPECT_FALSE(cpu.GetNegativeFlag());
3524 EXPECT_FALSE(cpu.GetZeroFlag());
3528 cpu.SetAccumulatorSize(
true);
3532 std::vector<uint8_t> data = {0xF9, 0x7F, 0xFF};
3533 mock_memory.SetMemoryContents(data);
3534 mock_memory.InsertMemory(0x8001, {0x80});
3536 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3538 cpu.ExecuteInstruction(0xF9);
3539 EXPECT_EQ(cpu.A, 0x7F);
3540 EXPECT_FALSE(cpu.GetNegativeFlag());
3541 EXPECT_FALSE(cpu.GetZeroFlag());
3545 cpu.SetAccumulatorSize(
true);
3549 std::vector<uint8_t> data = {0xFD, 0x7F, 0xFF};
3550 mock_memory.SetMemoryContents(data);
3551 mock_memory.InsertMemory(0x8001, {0x80});
3553 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3555 cpu.ExecuteInstruction(0xFD);
3556 EXPECT_EQ(cpu.A, 0x7F);
3557 EXPECT_FALSE(cpu.GetNegativeFlag());
3558 EXPECT_FALSE(cpu.GetZeroFlag());
3562 cpu.SetAccumulatorSize(
true);
3566 std::vector<uint8_t> data = {0xFF, 0x7F, 0xFF, 0xFF, 0xFF};
3567 mock_memory.SetMemoryContents(data);
3568 mock_memory.InsertMemory(0x800001, {0x80});
3570 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x7FFFFF));
3572 cpu.ExecuteInstruction(0xFF);
3573 EXPECT_EQ(cpu.A, 0x7F);
3574 EXPECT_FALSE(cpu.GetNegativeFlag());
3575 EXPECT_FALSE(cpu.GetZeroFlag());
3626 cpu.SetAccumulatorSize(
true);
3629 std::vector<uint8_t> data = {0x81, 0x3C};
3630 mock_memory.SetMemoryContents(data);
3631 mock_memory.InsertMemory(0x00003E, {0x00, 0x10});
3633 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3634 EXPECT_CALL(mock_memory, ReadWord(0x00003E)).WillOnce(Return(0x1000));
3636 EXPECT_CALL(mock_memory, WriteByte(0x1000, 0x42));
3638 cpu.ExecuteInstruction(0x81);
3639 EXPECT_EQ(cpu.A, 0x42);
3643 cpu.SetAccumulatorSize(
true);
3645 mock_memory.SetSP(0x01FF);
3646 std::vector<uint8_t> data = {0x83, 0x3C};
3647 mock_memory.SetMemoryContents(data);
3649 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3651 EXPECT_CALL(mock_memory, WriteByte(0x023B, 0x42));
3653 cpu.ExecuteInstruction(0x83);
3657 cpu.SetAccumulatorSize(
true);
3659 std::vector<uint8_t> data = {0x85, 0x80};
3660 mock_memory.SetMemoryContents(data);
3662 EXPECT_CALL(mock_memory, WriteByte(0x0080, 0x42));
3664 cpu.ExecuteInstruction(0x85);
3668 cpu.SetAccumulatorSize(
true);
3670 std::vector<uint8_t> data = {0x87, 0x3C};
3671 mock_memory.SetMemoryContents(data);
3672 mock_memory.InsertMemory(0x00003C, {0x00, 0x10, 0x00});
3674 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3675 EXPECT_CALL(mock_memory, ReadWordLong(0x00003C)).WillOnce(Return(0x1000));
3677 EXPECT_CALL(mock_memory, WriteByte(0x1000, 0x42));
3679 cpu.ExecuteInstruction(0x87);
3683 cpu.SetAccumulatorSize(
true);
3685 std::vector<uint8_t> data = {0x8D, 0xFF, 0x7F};
3686 mock_memory.SetMemoryContents(data);
3688 EXPECT_CALL(mock_memory, WriteByte(0x7FFF, 0x42));
3690 cpu.ExecuteInstruction(0x8D);
3694 cpu.SetAccumulatorSize(
true);
3696 std::vector<uint8_t> data = {0x8F, 0xFF, 0x7F};
3697 mock_memory.SetMemoryContents(data);
3699 EXPECT_CALL(mock_memory, WriteByte(0x7FFF, 0x42));
3701 cpu.ExecuteInstruction(0x8F);
3705 cpu.SetAccumulatorSize(
true);
3708 std::vector<uint8_t> data = {0x91, 0x3C};
3709 mock_memory.SetMemoryContents(data);
3710 mock_memory.InsertMemory(0x00003E, {0x00, 0x10});
3712 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3713 EXPECT_CALL(mock_memory, ReadWord(0x00003C)).WillOnce(Return(0x1000));
3715 EXPECT_CALL(mock_memory, WriteByte(0x1002, 0x42));
3717 cpu.ExecuteInstruction(0x91);
3721 cpu.SetAccumulatorSize(
true);
3724 std::vector<uint8_t> data = {0x92, 0x3C};
3725 mock_memory.SetMemoryContents(data);
3726 mock_memory.InsertMemory(0x00003C, {0x00, 0x10});
3728 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3729 EXPECT_CALL(mock_memory, ReadWord(0x00003C)).WillOnce(Return(0x1000));
3731 EXPECT_CALL(mock_memory, WriteByte(0x1000, 0x42));
3733 cpu.ExecuteInstruction(0x92);
3737 cpu.SetAccumulatorSize(
true);
3740 mock_memory.SetSP(0x01FF);
3741 std::vector<uint8_t> data = {0x93, 0x3C};
3742 mock_memory.SetMemoryContents(data);
3743 mock_memory.InsertMemory(0x00023B, {0x00, 0x10});
3745 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3746 EXPECT_CALL(mock_memory, ReadWord(0x00023B)).WillOnce(Return(0x1000));
3748 EXPECT_CALL(mock_memory, WriteByte(0x1002, 0x42));
3750 cpu.ExecuteInstruction(0x93);
3754 cpu.SetAccumulatorSize(
true);
3757 std::vector<uint8_t> data = {0x95, 0x80};
3758 mock_memory.SetMemoryContents(data);
3760 EXPECT_CALL(mock_memory, WriteByte(0x0082, 0x42));
3762 cpu.ExecuteInstruction(0x95);
3766 cpu.SetAccumulatorSize(
true);
3769 std::vector<uint8_t> data = {0x97, 0x3C};
3770 mock_memory.SetMemoryContents(data);
3771 mock_memory.InsertMemory(0x00003C, {0x00, 0x10, 0x00});
3773 EXPECT_CALL(mock_memory, ReadByte(0x000001)).WillOnce(Return(0x3C));
3774 EXPECT_CALL(mock_memory, ReadWordLong(0x00003C)).WillOnce(Return(0x1000));
3776 EXPECT_CALL(mock_memory, WriteByte(0x1002, 0x42));
3778 cpu.ExecuteInstruction(0x97);
3782 cpu.SetAccumulatorSize(
true);
3785 std::vector<uint8_t> data = {0x99, 0x7F, 0xFF};
3786 mock_memory.SetMemoryContents(data);
3788 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3789 EXPECT_CALL(mock_memory, WriteByte(0x8001, 0x42));
3791 cpu.ExecuteInstruction(0x99);
3795 cpu.SetAccumulatorSize(
true);
3798 std::vector<uint8_t> data = {0x9D, 0x7F, 0xFF};
3799 mock_memory.SetMemoryContents(data);
3801 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3802 EXPECT_CALL(mock_memory, WriteByte(0x8001, 0x42));
3804 cpu.ExecuteInstruction(0x9D);
3808 cpu.SetAccumulatorSize(
true);
3811 std::vector<uint8_t> data = {0x9F, 0xFF, 0xFF, 0x7F};
3812 mock_memory.SetMemoryContents(data);
3814 EXPECT_CALL(mock_memory, ReadWordLong(0x0001)).WillOnce(Return(0x7FFFFF));
3815 EXPECT_CALL(mock_memory, WriteByte(0x800001, 0x42));
3817 cpu.ExecuteInstruction(0x9F);
3830 cpu.SetAccumulatorSize(
true);
3832 std::vector<uint8_t> data = {0x86, 0x80};
3833 mock_memory.SetMemoryContents(data);
3835 EXPECT_CALL(mock_memory, WriteByte(0x0080, 0x42));
3837 cpu.ExecuteInstruction(0x86);
3841 cpu.SetAccumulatorSize(
true);
3843 std::vector<uint8_t> data = {0x8E, 0x7F, 0xFF};
3844 mock_memory.SetMemoryContents(data);
3846 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3847 EXPECT_CALL(mock_memory, WriteByte(0x7FFF, 0x42));
3849 cpu.ExecuteInstruction(0x8E);
3853 cpu.SetAccumulatorSize(
true);
3856 std::vector<uint8_t> data = {0x96, 0x80};
3857 mock_memory.SetMemoryContents(data);
3859 EXPECT_CALL(mock_memory, WriteByte(0x0082, 0x42));
3861 cpu.ExecuteInstruction(0x96);
3867 cpu.SetAccumulatorSize(
true);
3869 std::vector<uint8_t> data = {0x84, 0x80};
3870 mock_memory.SetMemoryContents(data);
3872 EXPECT_CALL(mock_memory, WriteByte(0x0080, 0x42));
3874 cpu.ExecuteInstruction(0x84);
3878 cpu.SetAccumulatorSize(
true);
3880 std::vector<uint8_t> data = {0x8C, 0x7F, 0xFF};
3881 mock_memory.SetMemoryContents(data);
3883 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3884 EXPECT_CALL(mock_memory, WriteByte(0x7FFF, 0x42));
3886 cpu.ExecuteInstruction(0x8C);
3890 cpu.SetAccumulatorSize(
true);
3893 std::vector<uint8_t> data = {0x94, 0x80};
3894 mock_memory.SetMemoryContents(data);
3896 EXPECT_CALL(mock_memory, WriteByte(0x0082, 0x42));
3898 cpu.ExecuteInstruction(0x94);
3904 cpu.SetAccumulatorSize(
true);
3905 std::vector<uint8_t> data = {0x64, 0x80};
3906 mock_memory.SetMemoryContents(data);
3908 EXPECT_CALL(mock_memory, WriteByte(0x0080, 0x00));
3910 cpu.ExecuteInstruction(0x64);
3914 cpu.SetAccumulatorSize(
true);
3916 std::vector<uint8_t> data = {0x74, 0x80};
3917 mock_memory.SetMemoryContents(data);
3919 EXPECT_CALL(mock_memory, WriteByte(0x0082, 0x00));
3921 cpu.ExecuteInstruction(0x74);
3925 cpu.SetAccumulatorSize(
true);
3926 std::vector<uint8_t> data = {0x9C, 0x7F, 0xFF};
3927 mock_memory.SetMemoryContents(data);
3929 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
3930 EXPECT_CALL(mock_memory, WriteByte(0x7FFF, 0x00));
3932 cpu.ExecuteInstruction(0x9C);
3974 cpu.SetAccumulatorSize(
true);
3976 std::vector<uint8_t> data = {0x1B};
3977 mock_memory.SetMemoryContents(data);
3979 EXPECT_CALL(mock_memory, SetSP(0x42));
3981 cpu.ExecuteInstruction(0x1B);
3982 EXPECT_EQ(mock_memory.SP(), 0x42);
4000 cpu.SetAccumulatorSize(
true);
4002 std::vector<uint8_t> data = {0x14, 0x80};
4003 mock_memory.SetMemoryContents(data);
4004 mock_memory.InsertMemory(0x0080, {0x00});
4006 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x0080));
4007 EXPECT_CALL(mock_memory, ReadByte(0x0080)).WillOnce(Return(0x00));
4008 EXPECT_CALL(mock_memory, WriteByte(0x0080, 0x00));
4010 cpu.ExecuteInstruction(0x14);
4014 cpu.SetAccumulatorSize(
true);
4016 std::vector<uint8_t> data = {0x1C, 0xFF, 0x7F};
4017 mock_memory.SetMemoryContents(data);
4018 mock_memory.InsertMemory(0x7FFF, {0x00});
4020 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
4021 EXPECT_CALL(mock_memory, ReadByte(0x7FFF)).WillOnce(Return(0x00));
4022 EXPECT_CALL(mock_memory, WriteByte(0x7FFF, 0x00));
4024 cpu.ExecuteInstruction(0x1C);
4030 cpu.SetAccumulatorSize(
true);
4032 std::vector<uint8_t> data = {0x04, 0x80};
4033 mock_memory.SetMemoryContents(data);
4034 mock_memory.InsertMemory(0x0080, {0x42});
4036 EXPECT_CALL(mock_memory, ReadByte(0x0001)).WillOnce(Return(0x0080));
4037 EXPECT_CALL(mock_memory, ReadByte(0x0080)).WillOnce(Return(0x42));
4038 EXPECT_CALL(mock_memory, WriteByte(0x0080, 0x42));
4040 cpu.ExecuteInstruction(0x04);
4044 cpu.SetAccumulatorSize(
true);
4046 std::vector<uint8_t> data = {0x0C, 0xFF, 0x7F};
4047 mock_memory.SetMemoryContents(data);
4048 mock_memory.InsertMemory(0x7FFF, {0x42});
4050 EXPECT_CALL(mock_memory, ReadWord(0x0001)).WillOnce(Return(0x7FFF));
4051 EXPECT_CALL(mock_memory, ReadByte(0x7FFF)).WillOnce(Return(0x42));
4052 EXPECT_CALL(mock_memory, WriteByte(0x7FFF, 0x42));
4054 cpu.ExecuteInstruction(0x0C);
4185 cpu.ExecuteInstruction(0x18);
4186 cpu.ExecuteInstruction(0xFB);
4187 EXPECT_FALSE(cpu.E);
4189 cpu.ExecuteInstruction(0x38);
4190 cpu.ExecuteInstruction(0xFB);
4193 cpu.ExecuteInstruction(0x18);
4194 cpu.ExecuteInstruction(0xFB);
4195 EXPECT_FALSE(cpu.E);