From f0cbf5f2cac41f03df031d136296e95fa1968e31 Mon Sep 17 00:00:00 2001 From: transistor Date: Sat, 13 May 2023 16:17:14 -0700 Subject: [PATCH] Fixed some IY instructions, and a few minor fixes --- emulator/cpus/z80/src/decode.rs | 38 +- tests/rad_tests/latest.txt | 34 +- ...23-05-13-5-withou-undoc-fixed-iy-instr.txt | 647 ++++++++++++++++++ tests/rad_tests/src/main.rs | 9 +- todo.txt | 1 + 5 files changed, 685 insertions(+), 44 deletions(-) create mode 100644 tests/rad_tests/progress/2023-05-13-5-withou-undoc-fixed-iy-instr.txt diff --git a/emulator/cpus/z80/src/decode.rs b/emulator/cpus/z80/src/decode.rs index 20f0f43..bee6974 100644 --- a/emulator/cpus/z80/src/decode.rs +++ b/emulator/cpus/z80/src/decode.rs @@ -517,7 +517,7 @@ impl Z80Decoder { match get_ins_x(ins) { 0 => { if (ins & 0x0F) == 9 { - return Ok(Instruction::ADD16(RegisterPair::IX, get_register_pair_index(get_ins_p(ins), index_reg))); + return Ok(Instruction::ADD16(index_reg.into(), get_register_pair_index(get_ins_p(ins), index_reg))); } match get_ins_p(ins) { @@ -525,11 +525,11 @@ impl Z80Decoder { match get_ins_z(ins) { 1 => { let data = self.read_instruction_word(memory)?; - Ok(Instruction::LD(LoadTarget::DirectRegWord(get_register_pair_from_index(index_reg)), LoadTarget::ImmediateWord(data))) + Ok(Instruction::LD(LoadTarget::DirectRegWord(index_reg.into()), LoadTarget::ImmediateWord(data))) }, 2 => { let addr = self.read_instruction_word(memory)?; - let regpair = get_register_pair_from_index(index_reg); + let regpair = index_reg.into(); match get_ins_q(ins) != 0 { false => Ok(Instruction::LD(LoadTarget::IndirectWord(addr), LoadTarget::DirectRegWord(regpair))), true => Ok(Instruction::LD(LoadTarget::DirectRegWord(regpair), LoadTarget::IndirectWord(addr))), @@ -537,8 +537,8 @@ impl Z80Decoder { }, 3 => { match get_ins_q(ins) != 0 { - false => Ok(Instruction::INC16(get_register_pair_from_index(index_reg))), - true => Ok(Instruction::DEC16(get_register_pair_from_index(index_reg))), + false => Ok(Instruction::INC16(index_reg.into())), + true => Ok(Instruction::DEC16(index_reg.into())), } }, 4 => { @@ -650,11 +650,11 @@ impl Z80Decoder { }, 3 => { match ins { - 0xE1 => Ok(Instruction::POP(get_register_pair_from_index(index_reg))), - 0xE3 => Ok(Instruction::EXsp(get_register_pair_from_index(index_reg))), - 0xE5 => Ok(Instruction::PUSH(get_register_pair_from_index(index_reg))), - 0xE9 => Ok(Instruction::JPIndirect(get_register_pair_from_index(index_reg))), - 0xF9 => Ok(Instruction::LD(LoadTarget::DirectRegWord(RegisterPair::SP), LoadTarget::DirectRegWord(get_register_pair_from_index(index_reg)))), + 0xE1 => Ok(Instruction::POP(index_reg.into())), + 0xE3 => Ok(Instruction::EXsp(index_reg.into())), + 0xE5 => Ok(Instruction::PUSH(index_reg.into())), + 0xE9 => Ok(Instruction::JPIndirect(index_reg.into())), + 0xF9 => Ok(Instruction::LD(LoadTarget::DirectRegWord(RegisterPair::SP), LoadTarget::DirectRegWord(index_reg.into()))), _ => Ok(Instruction::NOP), } }, @@ -721,6 +721,15 @@ impl Z80Decoder { } } +impl From for RegisterPair { + fn from(value: IndexRegister) -> Self { + match value { + IndexRegister::IX => RegisterPair::IX, + IndexRegister::IY => RegisterPair::IY, + } + } +} + fn get_alu_instruction(alu: u8, target: Target) -> Instruction { match alu { 0 => Instruction::ADDa(target), @@ -787,7 +796,7 @@ fn get_register_pair_index(reg: u8, index_reg: IndexRegister) -> RegisterPair { match reg { 0 => RegisterPair::BC, 1 => RegisterPair::DE, - 2 => get_register_pair_from_index(index_reg), + 2 => index_reg.into(), 3 => RegisterPair::SP, _ => panic!("InternalError: impossible value"), } @@ -803,13 +812,6 @@ fn get_register_pair_alt(reg: u8) -> RegisterPair { } } -fn get_register_pair_from_index(reg: IndexRegister) -> RegisterPair { - match reg { - IndexRegister::IX => RegisterPair::IX, - IndexRegister::IY => RegisterPair::IY, - } -} - fn get_index_register_half(reg: IndexRegister, q: u8) -> IndexRegisterHalf { match reg { IndexRegister::IX => if q == 0 { IndexRegisterHalf::IXH } else { IndexRegisterHalf::IXL }, diff --git a/tests/rad_tests/latest.txt b/tests/rad_tests/latest.txt index e34ea06..fda4946 100644 --- a/tests/rad_tests/latest.txt +++ b/tests/rad_tests/latest.txt @@ -1,4 +1,4 @@ -Last run on 2023-05-13 at commit c97b3b8aca39518b1a88a19ba236ac19c1717b25 +Last run on 2023-05-13 at commit e959b8df1c139f1565d6e6eb88597a35ffa780a2 00.json completed, all passed! 01.json completed, all passed! @@ -489,23 +489,19 @@ dd 74.json completed, all passed! dd 75.json completed, all passed! dd 77.json completed, all passed! dd 7e.json completed, all passed! +dd 86.json completed, all passed! dd 8e.json completed, all passed! +dd 96.json completed, all passed! dd 9e.json completed, all passed! +dd a6.json completed, all passed! dd ae.json completed, all passed! dd b6.json completed, all passed! dd be.json completed, all passed! -dd c6.json completed: 0 passed, 1000 FAILED -dd ce.json completed: 0 passed, 1000 FAILED -dd d6.json completed: 0 passed, 1000 FAILED -dd de.json completed: 0 passed, 1000 FAILED dd e1.json completed, all passed! dd e3.json completed, all passed! dd e5.json completed, all passed! -dd e6.json completed: 0 passed, 1000 FAILED dd e9.json completed, all passed! -dd ee.json completed: 0 passed, 1000 FAILED dd f9.json completed, all passed! -dd fe.json completed: 0 passed, 1000 FAILED de.json completed, all passed! df.json completed, all passed! e0.json completed, all passed! @@ -612,11 +608,11 @@ f9.json completed, all passed! fa.json completed, all passed! fb.json completed, all passed! fc.json completed, all passed! -fd 09.json completed: 0 passed, 1000 FAILED -fd 19.json completed: 0 passed, 1000 FAILED -fd 29.json completed: 0 passed, 1000 FAILED +fd 09.json completed, all passed! +fd 19.json completed, all passed! +fd 29.json completed, all passed! fd 36.json completed, all passed! -fd 39.json completed: 0 passed, 1000 FAILED +fd 39.json completed, all passed! fd 46.json completed, all passed! fd 4e.json completed, all passed! fd 56.json completed, all passed! @@ -631,25 +627,21 @@ fd 74.json completed, all passed! fd 75.json completed, all passed! fd 77.json completed, all passed! fd 7e.json completed, all passed! +fd 86.json completed, all passed! fd 8e.json completed, all passed! +fd 96.json completed, all passed! fd 9e.json completed, all passed! +fd a6.json completed, all passed! fd ae.json completed, all passed! fd b6.json completed, all passed! fd be.json completed, all passed! -fd c6.json completed: 0 passed, 1000 FAILED -fd ce.json completed: 0 passed, 1000 FAILED -fd d6.json completed: 0 passed, 1000 FAILED -fd de.json completed: 0 passed, 1000 FAILED fd e1.json completed, all passed! fd e3.json completed: 999 passed, 1 FAILED fd e5.json completed, all passed! -fd e6.json completed: 0 passed, 1000 FAILED fd e9.json completed, all passed! -fd ee.json completed: 0 passed, 1000 FAILED fd f9.json completed, all passed! -fd fe.json completed: 0 passed, 1000 FAILED fe.json completed, all passed! ff.json completed, all passed! -passed: 566963, failed: 83037, total 87% -completed in 0m 32s +passed: 576963, failed: 65037, total 90% +completed in 0m 30s diff --git a/tests/rad_tests/progress/2023-05-13-5-withou-undoc-fixed-iy-instr.txt b/tests/rad_tests/progress/2023-05-13-5-withou-undoc-fixed-iy-instr.txt new file mode 100644 index 0000000..fda4946 --- /dev/null +++ b/tests/rad_tests/progress/2023-05-13-5-withou-undoc-fixed-iy-instr.txt @@ -0,0 +1,647 @@ +Last run on 2023-05-13 at commit e959b8df1c139f1565d6e6eb88597a35ffa780a2 + +00.json completed, all passed! +01.json completed, all passed! +02.json completed, all passed! +03.json completed, all passed! +04.json completed, all passed! +05.json completed, all passed! +06.json completed, all passed! +07.json completed, all passed! +08.json completed, all passed! +09.json completed, all passed! +0a.json completed, all passed! +0b.json completed, all passed! +0c.json completed, all passed! +0d.json completed, all passed! +0e.json completed, all passed! +0f.json completed, all passed! +10.json completed, all passed! +100.json completed, all passed! +101.json completed, all passed! +11.json completed, all passed! +12.json completed, all passed! +13.json completed, all passed! +14.json completed, all passed! +15.json completed, all passed! +16.json completed, all passed! +17.json completed, all passed! +18.json completed, all passed! +19.json completed, all passed! +1a.json completed, all passed! +1b.json completed, all passed! +1c.json completed, all passed! +1d.json completed, all passed! +1e.json completed, all passed! +1f.json completed, all passed! +20.json completed, all passed! +21.json completed, all passed! +22.json completed: 999 passed, 1 FAILED +23.json completed, all passed! +24.json completed, all passed! +25.json completed, all passed! +26.json completed, all passed! +27.json completed: 0 passed, 1000 FAILED +28.json completed, all passed! +29.json completed, all passed! +2a.json completed, all passed! +2b.json completed, all passed! +2c.json completed, all passed! +2d.json completed, all passed! +2e.json completed, all passed! +2f.json completed, all passed! +30.json completed, all passed! +31.json completed, all passed! +32.json completed, all passed! +33.json completed, all passed! +34.json completed, all passed! +35.json completed, all passed! +36.json completed, all passed! +37.json completed, all passed! +38.json completed, all passed! +39.json completed, all passed! +3a.json completed, all passed! +3b.json completed, all passed! +3c.json completed, all passed! +3d.json completed, all passed! +3e.json completed, all passed! +3f.json completed, all passed! +40.json completed, all passed! +41.json completed, all passed! +42.json completed, all passed! +43.json completed, all passed! +44.json completed, all passed! +45.json completed, all passed! +46.json completed, all passed! +47.json completed, all passed! +48.json completed, all passed! +49.json completed, all passed! +4a.json completed, all passed! +4b.json completed, all passed! +4c.json completed, all passed! +4d.json completed, all passed! +4e.json completed, all passed! +4f.json completed, all passed! +50.json completed, all passed! +51.json completed, all passed! +52.json completed, all passed! +53.json completed, all passed! +54.json completed, all passed! +55.json completed, all passed! +56.json completed, all passed! +57.json completed, all passed! +58.json completed, all passed! +59.json completed, all passed! +5a.json completed, all passed! +5b.json completed, all passed! +5c.json completed, all passed! +5d.json completed, all passed! +5e.json completed, all passed! +5f.json completed, all passed! +60.json completed, all passed! +61.json completed, all passed! +62.json completed, all passed! +63.json completed, all passed! +64.json completed, all passed! +65.json completed, all passed! +66.json completed, all passed! +67.json completed, all passed! +68.json completed, all passed! +69.json completed, all passed! +6a.json completed, all passed! +6b.json completed, all passed! +6c.json completed, all passed! +6d.json completed, all passed! +6e.json completed, all passed! +6f.json completed, all passed! +70.json completed, all passed! +71.json completed, all passed! +72.json completed, all passed! +73.json completed, all passed! +74.json completed, all passed! +75.json completed, all passed! +76.json completed, all passed! +77.json completed, all passed! +78.json completed, all passed! +79.json completed, all passed! +7a.json completed, all passed! +7b.json completed, all passed! +7c.json completed, all passed! +7d.json completed, all passed! +7e.json completed, all passed! +7f.json completed, all passed! +80.json completed, all passed! +81.json completed, all passed! +82.json completed, all passed! +83.json completed, all passed! +84.json completed, all passed! +85.json completed, all passed! +86.json completed, all passed! +87.json completed, all passed! +88.json completed, all passed! +89.json completed, all passed! +8a.json completed, all passed! +8b.json completed, all passed! +8c.json completed, all passed! +8d.json completed, all passed! +8e.json completed, all passed! +8f.json completed, all passed! +90.json completed, all passed! +91.json completed, all passed! +92.json completed, all passed! +93.json completed, all passed! +94.json completed, all passed! +95.json completed, all passed! +96.json completed, all passed! +97.json completed, all passed! +98.json completed, all passed! +99.json completed, all passed! +9a.json completed, all passed! +9b.json completed, all passed! +9c.json completed, all passed! +9d.json completed, all passed! +9e.json completed, all passed! +9f.json completed, all passed! +a0.json completed, all passed! +a1.json completed, all passed! +a2.json completed, all passed! +a3.json completed, all passed! +a4.json completed, all passed! +a5.json completed, all passed! +a6.json completed, all passed! +a7.json completed, all passed! +a8.json completed, all passed! +a9.json completed, all passed! +aa.json completed, all passed! +ab.json completed, all passed! +ac.json completed, all passed! +ad.json completed, all passed! +ae.json completed, all passed! +af.json completed, all passed! +b0.json completed, all passed! +b1.json completed, all passed! +b2.json completed, all passed! +b3.json completed, all passed! +b4.json completed, all passed! +b5.json completed, all passed! +b6.json completed, all passed! +b7.json completed, all passed! +b8.json completed, all passed! +b9.json completed, all passed! +ba.json completed, all passed! +bb.json completed, all passed! +bc.json completed, all passed! +bd.json completed, all passed! +be.json completed, all passed! +bf.json completed, all passed! +c0.json completed, all passed! +c1.json completed, all passed! +c2.json completed, all passed! +c3.json completed, all passed! +c4.json completed, all passed! +c5.json completed, all passed! +c6.json completed, all passed! +c7.json completed, all passed! +c8.json completed, all passed! +c9.json completed, all passed! +ca.json completed, all passed! +cb 00.json completed, all passed! +cb 01.json completed, all passed! +cb 02.json completed, all passed! +cb 03.json completed, all passed! +cb 04.json completed, all passed! +cb 05.json completed, all passed! +cb 06.json completed, all passed! +cb 07.json completed, all passed! +cb 08.json completed, all passed! +cb 09.json completed, all passed! +cb 0a.json completed, all passed! +cb 0b.json completed, all passed! +cb 0c.json completed, all passed! +cb 0d.json completed, all passed! +cb 0e.json completed, all passed! +cb 0f.json completed, all passed! +cb 10.json completed, all passed! +cb 11.json completed, all passed! +cb 12.json completed, all passed! +cb 13.json completed, all passed! +cb 14.json completed, all passed! +cb 15.json completed, all passed! +cb 16.json completed, all passed! +cb 17.json completed, all passed! +cb 18.json completed, all passed! +cb 19.json completed, all passed! +cb 1a.json completed, all passed! +cb 1b.json completed, all passed! +cb 1c.json completed, all passed! +cb 1d.json completed, all passed! +cb 1e.json completed, all passed! +cb 1f.json completed, all passed! +cb 20.json completed, all passed! +cb 21.json completed, all passed! +cb 22.json completed, all passed! +cb 23.json completed, all passed! +cb 24.json completed, all passed! +cb 25.json completed, all passed! +cb 26.json completed, all passed! +cb 27.json completed, all passed! +cb 28.json completed, all passed! +cb 29.json completed, all passed! +cb 2a.json completed, all passed! +cb 2b.json completed, all passed! +cb 2c.json completed, all passed! +cb 2d.json completed, all passed! +cb 2e.json completed, all passed! +cb 2f.json completed, all passed! +cb 38.json completed, all passed! +cb 39.json completed, all passed! +cb 3a.json completed, all passed! +cb 3b.json completed, all passed! +cb 3c.json completed, all passed! +cb 3d.json completed, all passed! +cb 3e.json completed, all passed! +cb 3f.json completed, all passed! +cb 40.json completed: 244 passed, 756 FAILED +cb 41.json completed: 238 passed, 762 FAILED +cb 42.json completed: 262 passed, 738 FAILED +cb 43.json completed: 223 passed, 777 FAILED +cb 44.json completed: 244 passed, 756 FAILED +cb 45.json completed: 253 passed, 747 FAILED +cb 46.json completed: 239 passed, 761 FAILED +cb 47.json completed: 249 passed, 751 FAILED +cb 48.json completed: 256 passed, 744 FAILED +cb 49.json completed: 244 passed, 756 FAILED +cb 4a.json completed: 234 passed, 766 FAILED +cb 4b.json completed: 250 passed, 750 FAILED +cb 4c.json completed: 252 passed, 748 FAILED +cb 4d.json completed: 248 passed, 752 FAILED +cb 4e.json completed: 254 passed, 746 FAILED +cb 4f.json completed: 253 passed, 747 FAILED +cb 50.json completed: 256 passed, 744 FAILED +cb 51.json completed: 268 passed, 732 FAILED +cb 52.json completed: 261 passed, 739 FAILED +cb 53.json completed: 281 passed, 719 FAILED +cb 54.json completed: 238 passed, 762 FAILED +cb 55.json completed: 243 passed, 757 FAILED +cb 56.json completed: 254 passed, 746 FAILED +cb 57.json completed: 263 passed, 737 FAILED +cb 58.json completed: 252 passed, 748 FAILED +cb 59.json completed: 244 passed, 756 FAILED +cb 5a.json completed: 254 passed, 746 FAILED +cb 5b.json completed: 242 passed, 758 FAILED +cb 5c.json completed: 233 passed, 767 FAILED +cb 5d.json completed: 256 passed, 744 FAILED +cb 5e.json completed: 256 passed, 744 FAILED +cb 5f.json completed: 258 passed, 742 FAILED +cb 60.json completed: 265 passed, 735 FAILED +cb 61.json completed: 236 passed, 764 FAILED +cb 62.json completed: 258 passed, 742 FAILED +cb 63.json completed: 256 passed, 744 FAILED +cb 64.json completed: 231 passed, 769 FAILED +cb 65.json completed: 234 passed, 766 FAILED +cb 66.json completed: 252 passed, 748 FAILED +cb 67.json completed: 251 passed, 749 FAILED +cb 68.json completed: 237 passed, 763 FAILED +cb 69.json completed: 251 passed, 749 FAILED +cb 6a.json completed: 253 passed, 747 FAILED +cb 6b.json completed: 265 passed, 735 FAILED +cb 6c.json completed: 236 passed, 764 FAILED +cb 6d.json completed: 230 passed, 770 FAILED +cb 6e.json completed: 237 passed, 763 FAILED +cb 6f.json completed: 264 passed, 736 FAILED +cb 70.json completed: 245 passed, 755 FAILED +cb 71.json completed: 238 passed, 762 FAILED +cb 72.json completed: 248 passed, 752 FAILED +cb 73.json completed: 261 passed, 739 FAILED +cb 74.json completed: 260 passed, 740 FAILED +cb 75.json completed: 247 passed, 753 FAILED +cb 76.json completed: 252 passed, 748 FAILED +cb 77.json completed: 238 passed, 762 FAILED +cb 78.json completed: 243 passed, 757 FAILED +cb 79.json completed: 242 passed, 758 FAILED +cb 7a.json completed: 262 passed, 738 FAILED +cb 7b.json completed: 246 passed, 754 FAILED +cb 7c.json completed: 256 passed, 744 FAILED +cb 7d.json completed: 251 passed, 749 FAILED +cb 7e.json completed: 258 passed, 742 FAILED +cb 7f.json completed: 260 passed, 740 FAILED +cb 80.json completed, all passed! +cb 81.json completed, all passed! +cb 82.json completed, all passed! +cb 83.json completed, all passed! +cb 84.json completed, all passed! +cb 85.json completed, all passed! +cb 86.json completed, all passed! +cb 87.json completed, all passed! +cb 88.json completed, all passed! +cb 89.json completed, all passed! +cb 8a.json completed, all passed! +cb 8b.json completed, all passed! +cb 8c.json completed, all passed! +cb 8d.json completed, all passed! +cb 8e.json completed, all passed! +cb 8f.json completed, all passed! +cb 90.json completed, all passed! +cb 91.json completed, all passed! +cb 92.json completed, all passed! +cb 93.json completed, all passed! +cb 94.json completed, all passed! +cb 95.json completed, all passed! +cb 96.json completed, all passed! +cb 97.json completed, all passed! +cb 98.json completed, all passed! +cb 99.json completed, all passed! +cb 9a.json completed, all passed! +cb 9b.json completed, all passed! +cb 9c.json completed, all passed! +cb 9d.json completed, all passed! +cb 9e.json completed, all passed! +cb 9f.json completed, all passed! +cb a0.json completed, all passed! +cb a1.json completed, all passed! +cb a2.json completed, all passed! +cb a3.json completed, all passed! +cb a4.json completed, all passed! +cb a5.json completed, all passed! +cb a6.json completed, all passed! +cb a7.json completed, all passed! +cb a8.json completed, all passed! +cb a9.json completed, all passed! +cb aa.json completed, all passed! +cb ab.json completed, all passed! +cb ac.json completed, all passed! +cb ad.json completed, all passed! +cb ae.json completed, all passed! +cb af.json completed, all passed! +cb b0.json completed, all passed! +cb b1.json completed, all passed! +cb b2.json completed, all passed! +cb b3.json completed, all passed! +cb b4.json completed, all passed! +cb b5.json completed, all passed! +cb b6.json completed, all passed! +cb b7.json completed, all passed! +cb b8.json completed, all passed! +cb b9.json completed, all passed! +cb ba.json completed, all passed! +cb bb.json completed, all passed! +cb bc.json completed, all passed! +cb bd.json completed, all passed! +cb be.json completed, all passed! +cb bf.json completed, all passed! +cb c0.json completed, all passed! +cb c1.json completed, all passed! +cb c2.json completed, all passed! +cb c3.json completed, all passed! +cb c4.json completed, all passed! +cb c5.json completed, all passed! +cb c6.json completed, all passed! +cb c7.json completed, all passed! +cb c8.json completed, all passed! +cb c9.json completed, all passed! +cb ca.json completed, all passed! +cb cb.json completed, all passed! +cb cc.json completed, all passed! +cb cd.json completed, all passed! +cb ce.json completed, all passed! +cb cf.json completed, all passed! +cb d0.json completed, all passed! +cb d1.json completed, all passed! +cb d2.json completed, all passed! +cb d3.json completed, all passed! +cb d4.json completed, all passed! +cb d5.json completed, all passed! +cb d6.json completed, all passed! +cb d7.json completed, all passed! +cb d8.json completed, all passed! +cb d9.json completed, all passed! +cb da.json completed, all passed! +cb db.json completed, all passed! +cb dc.json completed, all passed! +cb dd.json completed, all passed! +cb de.json completed, all passed! +cb df.json completed, all passed! +cb e0.json completed, all passed! +cb e1.json completed, all passed! +cb e2.json completed, all passed! +cb e3.json completed, all passed! +cb e4.json completed, all passed! +cb e5.json completed, all passed! +cb e6.json completed, all passed! +cb e7.json completed, all passed! +cb e8.json completed, all passed! +cb e9.json completed, all passed! +cb ea.json completed, all passed! +cb eb.json completed, all passed! +cb ec.json completed, all passed! +cb ed.json completed, all passed! +cb ee.json completed, all passed! +cb ef.json completed, all passed! +cb f0.json completed, all passed! +cb f1.json completed, all passed! +cb f2.json completed, all passed! +cb f3.json completed, all passed! +cb f4.json completed, all passed! +cb f5.json completed, all passed! +cb f6.json completed, all passed! +cb f7.json completed, all passed! +cb f8.json completed, all passed! +cb f9.json completed, all passed! +cb fa.json completed, all passed! +cb fb.json completed, all passed! +cb fc.json completed, all passed! +cb fd.json completed, all passed! +cb fe.json completed, all passed! +cb ff.json completed, all passed! +cc.json completed, all passed! +cd.json completed, all passed! +ce.json completed, all passed! +cf.json completed, all passed! +d0.json completed, all passed! +d1.json completed, all passed! +d2.json completed, all passed! +d3.json completed, all passed! +d4.json completed, all passed! +d5.json completed, all passed! +d6.json completed, all passed! +d7.json completed, all passed! +d8.json completed, all passed! +d9.json completed, all passed! +da.json completed, all passed! +db.json completed, all passed! +dc.json completed, all passed! +dd 09.json completed, all passed! +dd 19.json completed, all passed! +dd 29.json completed, all passed! +dd 36.json completed, all passed! +dd 39.json completed, all passed! +dd 46.json completed, all passed! +dd 4e.json completed, all passed! +dd 56.json completed, all passed! +dd 5e.json completed, all passed! +dd 66.json completed, all passed! +dd 6e.json completed, all passed! +dd 70.json completed, all passed! +dd 71.json completed, all passed! +dd 72.json completed, all passed! +dd 73.json completed, all passed! +dd 74.json completed, all passed! +dd 75.json completed, all passed! +dd 77.json completed, all passed! +dd 7e.json completed, all passed! +dd 86.json completed, all passed! +dd 8e.json completed, all passed! +dd 96.json completed, all passed! +dd 9e.json completed, all passed! +dd a6.json completed, all passed! +dd ae.json completed, all passed! +dd b6.json completed, all passed! +dd be.json completed, all passed! +dd e1.json completed, all passed! +dd e3.json completed, all passed! +dd e5.json completed, all passed! +dd e9.json completed, all passed! +dd f9.json completed, all passed! +de.json completed, all passed! +df.json completed, all passed! +e0.json completed, all passed! +e1.json completed, all passed! +e2.json completed, all passed! +e3.json completed, all passed! +e4.json completed, all passed! +e5.json completed, all passed! +e6.json completed, all passed! +e7.json completed, all passed! +e8.json completed, all passed! +e9.json completed, all passed! +ea.json completed, all passed! +eb.json completed, all passed! +ec.json completed, all passed! +ed 40.json completed, all passed! +ed 41.json completed, all passed! +ed 42.json completed, all passed! +ed 43.json completed, all passed! +ed 44.json completed, all passed! +ed 45.json completed, all passed! +ed 46.json completed, all passed! +ed 47.json completed, all passed! +ed 48.json completed, all passed! +ed 49.json completed, all passed! +ed 4a.json completed, all passed! +ed 4b.json completed, all passed! +ed 4c.json completed, all passed! +ed 4d.json completed, all passed! +ed 4e.json completed, all passed! +ed 4f.json completed, all passed! +ed 50.json completed, all passed! +ed 51.json completed, all passed! +ed 52.json completed, all passed! +ed 53.json completed, all passed! +ed 54.json completed, all passed! +ed 55.json completed, all passed! +ed 56.json completed, all passed! +ed 57.json completed: 0 passed, 1000 FAILED +ed 58.json completed, all passed! +ed 59.json completed, all passed! +ed 5a.json completed, all passed! +ed 5b.json completed, all passed! +ed 5c.json completed, all passed! +ed 5d.json completed, all passed! +ed 5e.json completed, all passed! +ed 5f.json completed: 0 passed, 1000 FAILED +ed 60.json completed, all passed! +ed 61.json completed, all passed! +ed 62.json completed, all passed! +ed 64.json completed, all passed! +ed 65.json completed, all passed! +ed 66.json completed, all passed! +ed 67.json completed: 0 passed, 1000 FAILED +ed 68.json completed, all passed! +ed 69.json completed, all passed! +ed 6a.json completed, all passed! +ed 6c.json completed, all passed! +ed 6d.json completed, all passed! +ed 6e.json completed, all passed! +ed 6f.json completed: 0 passed, 1000 FAILED +ed 72.json completed, all passed! +ed 73.json completed, all passed! +ed 74.json completed, all passed! +ed 75.json completed, all passed! +ed 76.json completed, all passed! +ed 77.json completed, all passed! +ed 78.json completed, all passed! +ed 79.json completed, all passed! +ed 7a.json completed, all passed! +ed 7b.json completed, all passed! +ed 7c.json completed, all passed! +ed 7d.json completed, all passed! +ed 7e.json completed, all passed! +ed 7f.json completed, all passed! +ed a0.json completed, all passed! +ed a1.json completed: 0 passed, 1000 FAILED +ed a2.json completed: 0 passed, 1000 FAILED +ed a3.json completed: 0 passed, 1000 FAILED +ed a8.json completed, all passed! +ed a9.json completed: 0 passed, 1000 FAILED +ed aa.json completed: 0 passed, 1000 FAILED +ed ab.json completed: 0 passed, 1000 FAILED +ed b0.json completed, all passed! +ed b1.json completed: 0 passed, 1000 FAILED +ed b2.json completed: 0 passed, 1000 FAILED +ed b3.json completed: 0 passed, 1000 FAILED +ed b8.json completed, all passed! +ed b9.json completed: 0 passed, 1000 FAILED +ed ba.json completed: 0 passed, 1000 FAILED +ed bb.json completed: 0 passed, 1000 FAILED +ee.json completed, all passed! +ef.json completed, all passed! +f0.json completed, all passed! +f1.json completed, all passed! +f2.json completed, all passed! +f3.json completed, all passed! +f4.json completed, all passed! +f5.json completed, all passed! +f6.json completed, all passed! +f7.json completed, all passed! +f8.json completed, all passed! +f9.json completed, all passed! +fa.json completed, all passed! +fb.json completed, all passed! +fc.json completed, all passed! +fd 09.json completed, all passed! +fd 19.json completed, all passed! +fd 29.json completed, all passed! +fd 36.json completed, all passed! +fd 39.json completed, all passed! +fd 46.json completed, all passed! +fd 4e.json completed, all passed! +fd 56.json completed, all passed! +fd 5e.json completed, all passed! +fd 66.json completed, all passed! +fd 6e.json completed, all passed! +fd 70.json completed, all passed! +fd 71.json completed, all passed! +fd 72.json completed, all passed! +fd 73.json completed, all passed! +fd 74.json completed, all passed! +fd 75.json completed, all passed! +fd 77.json completed, all passed! +fd 7e.json completed, all passed! +fd 86.json completed, all passed! +fd 8e.json completed, all passed! +fd 96.json completed, all passed! +fd 9e.json completed, all passed! +fd a6.json completed, all passed! +fd ae.json completed, all passed! +fd b6.json completed, all passed! +fd be.json completed, all passed! +fd e1.json completed, all passed! +fd e3.json completed: 999 passed, 1 FAILED +fd e5.json completed, all passed! +fd e9.json completed, all passed! +fd f9.json completed, all passed! +fe.json completed, all passed! +ff.json completed, all passed! + +passed: 576963, failed: 65037, total 90% +completed in 0m 30s diff --git a/tests/rad_tests/src/main.rs b/tests/rad_tests/src/main.rs index a36fb0a..abd35f4 100644 --- a/tests/rad_tests/src/main.rs +++ b/tests/rad_tests/src/main.rs @@ -423,14 +423,13 @@ fn is_undocumented_instruction(name: &str) -> bool { }, (0xDD, op) | (0xFD, op) => { - let upper3 = op & 0x70; - let upper4 = op & 0xF0; + let upper = op & 0xF0; let lower = op & 0x0F; - !(lower == 0x06 && upper3 >= 0x30 && upper3 <= 0x60) && - !(lower == 0x0E && upper4 >= 0x40 && upper3 <= 0xB0) && + !(lower == 0x06 && upper >= 0x30 && upper <= 0xB0 && upper != 0x70) && + !(lower == 0x0E && upper >= 0x40 && upper <= 0xB0) && !(op >= 0x70 && op <= 0x77 && op != 0x76) && !(op >= 0x21 && op <= 0x23 && op >= 0x34 && op <= 0x36 && op >= 0x29 && op <= 0x2B) && - !(lower == 0x09 && upper4 <= 0x30) && + !(lower == 0x09 && upper <= 0x30) && !(op == 0xE1 || op == 0xE3 || op == 0xE5 || op == 0xE9 || op == 0xF9) }, (0xED, op) => { diff --git a/todo.txt b/todo.txt index 33c94f2..502c0c3 100644 --- a/todo.txt +++ b/todo.txt @@ -3,6 +3,7 @@ * you could have busport take a closure or something which translates the address, and returns an error that will be passed up if it occurs in order to implement the correct behaviour for address exceptions in 68k, transparently +* should you make Address a newtype and add From impls for each type of numeric, and add utils to wrap address at certain boundaries and such * should you make a means of storing different kinds of buses? * should you make buses hide their RcRefCell?