diff --git a/src/cpus/m68k/decode.rs b/src/cpus/m68k/decode.rs index c98a6c9..37b2ae8 100644 --- a/src/cpus/m68k/decode.rs +++ b/src/cpus/m68k/decode.rs @@ -645,22 +645,35 @@ impl M68kDecoder { fn decode_extension_word(&mut self, memory: &mut dyn Addressable, areg: Option) -> Result { let brief_extension = self.read_instruction_word(memory)?; - let use_full = (brief_extension & 0x0100) != 0; + + let use_brief = (brief_extension & 0x0100) == 0; // Decode Index Register let xreg_num = ((brief_extension & 0x7000) >> 12) as u8; let xreg = if (brief_extension & 0x8000) == 0 { XRegister::DReg(xreg_num) } else { XRegister::AReg(xreg_num) }; let size = if (brief_extension & 0x0800) == 0 { Size::Word } else { Size::Long }; - let scale = ((brief_extension & 0x0600) >> 9) as u8; - let index_reg = IndexRegister { xreg, scale, size }; - if !use_full { + if self.cputype <= M68kType::MC68010 { + let index_reg = IndexRegister { xreg, scale: 0, size }; let displacement = sign_extend_to_long((brief_extension & 0x00FF) as u32, Size::Byte); + match areg { Some(areg) => Ok(Target::IndirectRegOffset(BaseRegister::AReg(areg), Some(index_reg), displacement)), None => Ok(Target::IndirectRegOffset(BaseRegister::PC, Some(index_reg), displacement)), } - } else if self.cputype >= M68kType::MC68020 { + } else if use_brief { + let scale = ((brief_extension & 0x0600) >> 9) as u8; + let index_reg = IndexRegister { xreg, scale, size }; + let displacement = sign_extend_to_long((brief_extension & 0x00FF) as u32, Size::Byte); + + match areg { + Some(areg) => Ok(Target::IndirectRegOffset(BaseRegister::AReg(areg), Some(index_reg), displacement)), + None => Ok(Target::IndirectRegOffset(BaseRegister::PC, Some(index_reg), displacement)), + } + } else { + let scale = ((brief_extension & 0x0600) >> 9) as u8; + let index_reg = IndexRegister { xreg, scale, size }; + let use_base_reg = (brief_extension & 0x0080) == 0; let use_index = (brief_extension & 0x0040) == 0; let use_sub_indirect = (brief_extension & 0x0007) != 0; @@ -680,8 +693,6 @@ impl M68kDecoder { (true, true) => Ok(Target::IndirectMemoryPreindexed(opt_base_reg, opt_index_reg, base_disp, outer_disp)), (true, false) => Ok(Target::IndirectMemoryPostindexed(opt_base_reg, opt_index_reg, base_disp, outer_disp)), } - } else { - Err(Error::processor(Exceptions::IllegalInstruction as u32)) } } diff --git a/src/cpus/m68k/execute.rs b/src/cpus/m68k/execute.rs index c139f3f..203bf53 100644 --- a/src/cpus/m68k/execute.rs +++ b/src/cpus/m68k/execute.rs @@ -70,9 +70,9 @@ impl M68k { Status::Running => { match self.cycle_one(system) { Ok(diff) => Ok(diff), - //Err(Error { err: ErrorType::Processor, native, .. }) => { + Err(Error { err: ErrorType::Processor, native, .. }) => { // TODO match arm conditional is temporary: illegal instructions generate a top level error in order to debug and fix issues with decode - Err(Error { err: ErrorType::Processor, native, .. }) if native != Exceptions::IllegalInstruction as u32 => { + //Err(Error { err: ErrorType::Processor, native, .. }) if native != Exceptions::IllegalInstruction as u32 => { self.exception(native as u8, false)?; Ok(4) }, @@ -735,6 +735,7 @@ impl M68k { Instruction::SWAP(reg) => { let value = self.state.d_reg[reg as usize]; self.state.d_reg[reg as usize] = ((value & 0x0000FFFF) << 16) | ((value & 0xFFFF0000) >> 16); + self.set_logic_flags(self.state.d_reg[reg as usize], Size::Long); }, Instruction::TAS(target) => { let value = self.get_target_value(target, Size::Byte, Used::Twice)?; @@ -917,16 +918,11 @@ impl M68k { self.get_address_sized(addr as Address, size) }, Target::IndirectARegInc(reg) => { - let addr = *self.get_a_reg_mut(reg); - let result = self.get_address_sized(addr as Address, size); - if used != Used::Twice { - *self.get_a_reg_mut(reg) += size.in_bytes(); - } - result + let addr = self.post_increment_areg_target(reg, size, used); + self.get_address_sized(addr as Address, size) }, Target::IndirectARegDec(reg) => { - *self.get_a_reg_mut(reg) -= size.in_bytes(); - let addr = *self.get_a_reg_mut(reg); + let addr = self.pre_decrement_areg_target(reg, size, Used::Once); self.get_address_sized(addr as Address, size) }, Target::IndirectRegOffset(base_reg, index_reg, displacement) => { @@ -965,17 +961,11 @@ impl M68k { self.set_address_sized(addr as Address, value, size)?; }, Target::IndirectARegInc(reg) => { - let addr = *self.get_a_reg_mut(reg); + let addr = self.post_increment_areg_target(reg, size, Used::Once); self.set_address_sized(addr as Address, value, size)?; - let addr = self.get_a_reg_mut(reg); - *addr = (*addr).wrapping_add(size.in_bytes()); }, Target::IndirectARegDec(reg) => { - if used != Used::Twice { - let addr = self.get_a_reg_mut(reg); - *addr = (*addr).wrapping_sub(size.in_bytes()); - } - let addr = *self.get_a_reg_mut(reg); + let addr = self.pre_decrement_areg_target(reg, size, used); self.set_address_sized(addr as Address, value, size)?; }, Target::IndirectRegOffset(base_reg, index_reg, displacement) => { @@ -1031,6 +1021,33 @@ impl M68k { Ok(addr) } + pub fn post_increment_areg_target(&mut self, reg: Register, mut size: Size, used: Used) -> u32 { + // If using A7 (the stack pointer) then increment by a minimum of 2 bytes to keep it word aligned + if reg == 7 && size == Size::Byte { + size = Size::Word; + } + + let reg_addr = self.get_a_reg_mut(reg); + let addr = *reg_addr; + if used != Used::Twice { + *reg_addr = addr.wrapping_add(size.in_bytes()); + } + addr + } + + pub fn pre_decrement_areg_target(&mut self, reg: Register, mut size: Size, used: Used) -> u32 { + // If using A7 (the stack pointer) then decrement by a minimum of 2 bytes to keep it word aligned + if reg == 7 && size == Size::Byte { + size = Size::Word; + } + + let reg_addr = self.get_a_reg_mut(reg); + if used != Used::Twice { + *reg_addr = (*reg_addr).wrapping_sub(size.in_bytes()); + } + *reg_addr + } + pub fn get_address_sized(&mut self, addr: Address, size: Size) -> Result { match size { Size::Byte => self.port.read_u8(addr).map(|value| value as u32), diff --git a/tests/harte_tests/latest.txt b/tests/harte_tests/latest.txt index 1d726fd..0d551be 100644 --- a/tests/harte_tests/latest.txt +++ b/tests/harte_tests/latest.txt @@ -1,129 +1,129 @@ -Last run on 2022-09-10 at commit 1a3d8cc0c575ff4f5fa7e9fe9d9cb381ff7fd04d +Last run on 2022-09-10 at commit 27f71b0f3317b8d804e2750e8e37eeb57ee06274 -ABCD.json completed: 261 passed, 7804 FAILED -ADD.b.json completed: 6520 passed, 1545 FAILED -ADD.l.json completed: 4583 passed, 3482 FAILED -ADD.w.json completed: 4579 passed, 3486 FAILED -ADDA.l.json completed: 4843 passed, 3222 FAILED -ADDA.w.json completed: 4916 passed, 3149 FAILED +ABCD.json completed: 301 passed, 7764 FAILED +ADD.b.json completed, all passed! +ADD.l.json completed: 5143 passed, 2922 FAILED +ADD.w.json completed: 5117 passed, 2948 FAILED +ADDA.l.json completed: 5372 passed, 2693 FAILED +ADDA.w.json completed: 5431 passed, 2634 FAILED ADDX.b.json completed: 4051 passed, 4014 FAILED ADDX.l.json completed: 4065 passed, 4000 FAILED ADDX.w.json completed: 4012 passed, 4053 FAILED -AND.b.json completed: 6532 passed, 1533 FAILED -AND.l.json completed: 4111 passed, 3954 FAILED -AND.w.json completed: 4080 passed, 3985 FAILED +AND.b.json completed, all passed! +AND.l.json completed: 4745 passed, 3320 FAILED +AND.w.json completed: 4668 passed, 3397 FAILED ANDItoCCR.json completed, all passed! ANDItoSR.json completed, all passed! ASL.b.json completed: 3941 passed, 4124 FAILED ASL.l.json completed: 3578 passed, 4487 FAILED -ASL.w.json completed: 3645 passed, 4420 FAILED +ASL.w.json completed: 3814 passed, 4251 FAILED ASR.b.json completed: 6316 passed, 1749 FAILED ASR.l.json completed: 7007 passed, 1058 FAILED -ASR.w.json completed: 5816 passed, 2249 FAILED -BCHG.json completed: 6570 passed, 1495 FAILED -BCLR.json completed: 6885 passed, 1180 FAILED -BSET.json completed: 6616 passed, 1449 FAILED +ASR.w.json completed: 5988 passed, 2077 FAILED +BCHG.json completed, all passed! +BCLR.json completed, all passed! +BSET.json completed, all passed! BSR.json completed: 4078 passed, 3987 FAILED -BTST.json completed: 6851 passed, 1214 FAILED +BTST.json completed: 8052 passed, 13 FAILED Bcc.json completed: 5861 passed, 2204 FAILED CHK.json completed: 0 passed, 8065 FAILED -CLR.b.json completed: 6594 passed, 1471 FAILED -CLR.l.json completed: 4301 passed, 3764 FAILED -CLR.w.json completed: 4327 passed, 3738 FAILED -CMP.b.json completed: 6627 passed, 1438 FAILED -CMP.l.json completed: 4634 passed, 3431 FAILED -CMP.w.json completed: 4597 passed, 3468 FAILED -CMPA.l.json completed: 4998 passed, 3067 FAILED -CMPA.w.json completed: 3895 passed, 4170 FAILED +CLR.b.json completed, all passed! +CLR.l.json completed: 4903 passed, 3162 FAILED +CLR.w.json completed: 4896 passed, 3169 FAILED +CMP.b.json completed, all passed! +CMP.l.json completed: 5034 passed, 3031 FAILED +CMP.w.json completed: 5024 passed, 3041 FAILED +CMPA.l.json completed: 5450 passed, 2615 FAILED +CMPA.w.json completed: 4200 passed, 3865 FAILED DBcc.json completed: 5194 passed, 2871 FAILED -DIVS.json completed: 539 passed, 7526 FAILED -DIVU.json completed: 1093 passed, 6972 FAILED -EOR.b.json completed: 6699 passed, 1366 FAILED -EOR.l.json completed: 4340 passed, 3725 FAILED -EOR.w.json completed: 4399 passed, 3666 FAILED +DIVS.json completed: 612 passed, 7453 FAILED +DIVU.json completed: 1267 passed, 6798 FAILED +EOR.b.json completed, all passed! +EOR.l.json completed: 4904 passed, 3161 FAILED +EOR.w.json completed: 4930 passed, 3135 FAILED EORItoCCR.json completed: 1067 passed, 6998 FAILED EORItoSR.json completed: 141 passed, 7924 FAILED EXG.json completed, all passed! EXT.l.json completed, all passed! EXT.w.json completed, all passed! -JMP.json completed: 533 passed, 7532 FAILED -JSR.json completed: 152 passed, 7913 FAILED -LEA.json completed: 5726 passed, 2339 FAILED +JMP.json completed: 623 passed, 7442 FAILED +JSR.json completed: 200 passed, 7865 FAILED +LEA.json completed, all passed! LINK.json completed: 7060 passed, 1005 FAILED LSL.b.json completed: 7774 passed, 291 FAILED LSL.l.json completed: 7017 passed, 1048 FAILED -LSL.w.json completed: 6545 passed, 1520 FAILED +LSL.w.json completed: 6727 passed, 1338 FAILED LSR.b.json completed: 7797 passed, 268 FAILED LSR.l.json completed: 7044 passed, 1021 FAILED -LSR.w.json completed: 6609 passed, 1456 FAILED -MOVE.b.json completed: 5383 passed, 2682 FAILED -MOVE.l.json completed: 2626 passed, 5439 FAILED +LSR.w.json completed: 6768 passed, 1297 FAILED +MOVE.b.json completed, all passed! +MOVE.l.json completed: 3270 passed, 4795 FAILED MOVE.q.json completed, all passed! -MOVE.w.json completed: 2709 passed, 5356 FAILED -MOVEA.l.json completed: 4827 passed, 3238 FAILED -MOVEA.w.json completed: 4813 passed, 3252 FAILED -MOVEM.l.json completed: 3286 passed, 4779 FAILED -MOVEM.w.json completed: 3324 passed, 4741 FAILED +MOVE.w.json completed: 3368 passed, 4697 FAILED +MOVEA.l.json completed: 5379 passed, 2686 FAILED +MOVEA.w.json completed: 5322 passed, 2743 FAILED +MOVEM.l.json completed: 4099 passed, 3966 FAILED +MOVEM.w.json completed: 4169 passed, 3896 FAILED MOVEP.l.json completed: 4036 passed, 4029 FAILED MOVEP.w.json completed: 4046 passed, 4019 FAILED -MOVEfromSR.json completed: 4456 passed, 3609 FAILED +MOVEfromSR.json completed: 5017 passed, 3048 FAILED MOVEfromUSP.json completed, all passed! -MOVEtoCCR.json completed: 541 passed, 7524 FAILED -MOVEtoSR.json completed: 90 passed, 7975 FAILED +MOVEtoCCR.json completed: 614 passed, 7451 FAILED +MOVEtoSR.json completed: 96 passed, 7969 FAILED MOVEtoUSP.json completed, all passed! -MULS.json completed: 2241 passed, 5824 FAILED -MULU.json completed: 4388 passed, 3677 FAILED +MULS.json completed: 2548 passed, 5517 FAILED +MULU.json completed: 4992 passed, 3073 FAILED NBCD.json completed: 0 passed, 8065 FAILED -NEG.b.json completed: 6611 passed, 1454 FAILED -NEG.l.json completed: 4461 passed, 3604 FAILED -NEG.w.json completed: 4352 passed, 3713 FAILED +NEG.b.json completed, all passed! +NEG.l.json completed: 5031 passed, 3034 FAILED +NEG.w.json completed: 4911 passed, 3154 FAILED NEGX.b.json completed: 0 passed, 8065 FAILED NEGX.l.json completed: 0 passed, 8065 FAILED NEGX.w.json completed: 0 passed, 8065 FAILED NOP.json completed, all passed! -NOT.b.json completed: 6636 passed, 1429 FAILED -NOT.l.json completed: 4372 passed, 3693 FAILED -NOT.w.json completed: 4378 passed, 3687 FAILED -OR.b.json completed: 6501 passed, 1564 FAILED -OR.l.json completed: 4085 passed, 3980 FAILED -OR.w.json completed: 4039 passed, 4026 FAILED +NOT.b.json completed, all passed! +NOT.l.json completed: 4924 passed, 3141 FAILED +NOT.w.json completed: 4957 passed, 3108 FAILED +OR.b.json completed, all passed! +OR.l.json completed: 4730 passed, 3335 FAILED +OR.w.json completed: 4650 passed, 3415 FAILED ORItoCCR.json completed: 987 passed, 7078 FAILED ORItoSR.json completed: 118 passed, 7947 FAILED -PEA.json completed: 5798 passed, 2267 FAILED +PEA.json completed, all passed! RESET.json completed: 0 passed, 8065 FAILED ROL.b.json completed, all passed! ROL.l.json completed, all passed! -ROL.w.json completed: 6961 passed, 1104 FAILED +ROL.w.json completed: 7135 passed, 930 FAILED ROR.b.json completed, all passed! ROR.l.json completed, all passed! -ROR.w.json completed: 6970 passed, 1095 FAILED +ROR.w.json completed: 7141 passed, 924 FAILED ROXL.b.json completed: 8039 passed, 26 FAILED ROXL.l.json completed: 8029 passed, 36 FAILED -ROXL.w.json completed: 6941 passed, 1124 FAILED +ROXL.w.json completed: 7114 passed, 951 FAILED ROXR.b.json completed: 8037 passed, 28 FAILED ROXR.l.json completed: 8022 passed, 43 FAILED -ROXR.w.json completed: 6985 passed, 1080 FAILED +ROXR.w.json completed: 7141 passed, 924 FAILED RTE.json completed: 0 passed, 8065 FAILED RTR.json completed: 0 passed, 8065 FAILED RTS.json completed: 11 passed, 8054 FAILED -SBCD.json completed: 776 passed, 7289 FAILED -SUB.b.json completed: 6567 passed, 1498 FAILED -SUB.l.json completed: 4537 passed, 3528 FAILED -SUB.w.json completed: 4567 passed, 3498 FAILED -SUBA.l.json completed: 4787 passed, 3278 FAILED -SUBA.w.json completed: 4842 passed, 3223 FAILED +SBCD.json completed: 884 passed, 7181 FAILED +SUB.b.json completed, all passed! +SUB.l.json completed: 5093 passed, 2972 FAILED +SUB.w.json completed: 5121 passed, 2944 FAILED +SUBA.l.json completed: 5329 passed, 2736 FAILED +SUBA.w.json completed: 5386 passed, 2679 FAILED SUBX.b.json completed: 3861 passed, 4204 FAILED SUBX.l.json completed: 3955 passed, 4110 FAILED SUBX.w.json completed: 3876 passed, 4189 FAILED -SWAP.json completed: 509 passed, 7556 FAILED -Scc.json completed: 6637 passed, 1428 FAILED -TAS.json completed: 6655 passed, 1410 FAILED +SWAP.json completed, all passed! +Scc.json completed, all passed! +TAS.json completed, all passed! TRAP.json completed, all passed! TRAPV.json completed, all passed! -TST.b.json completed: 6566 passed, 1499 FAILED -TST.l.json completed: 4381 passed, 3684 FAILED -TST.w.json completed: 4362 passed, 3703 FAILED +TST.b.json completed, all passed! +TST.l.json completed: 4963 passed, 3102 FAILED +TST.w.json completed: 4928 passed, 3137 FAILED UNLINK.json completed, all passed! -passed: 594436, failed: 405624, total 59% -completed in 16m 7s +passed: 653776, failed: 346284, total 65% +completed in 18m 5s diff --git a/tests/harte_tests/previous.txt b/tests/harte_tests/previous.txt new file mode 100644 index 0000000..1d726fd --- /dev/null +++ b/tests/harte_tests/previous.txt @@ -0,0 +1,129 @@ +Last run on 2022-09-10 at commit 1a3d8cc0c575ff4f5fa7e9fe9d9cb381ff7fd04d + +ABCD.json completed: 261 passed, 7804 FAILED +ADD.b.json completed: 6520 passed, 1545 FAILED +ADD.l.json completed: 4583 passed, 3482 FAILED +ADD.w.json completed: 4579 passed, 3486 FAILED +ADDA.l.json completed: 4843 passed, 3222 FAILED +ADDA.w.json completed: 4916 passed, 3149 FAILED +ADDX.b.json completed: 4051 passed, 4014 FAILED +ADDX.l.json completed: 4065 passed, 4000 FAILED +ADDX.w.json completed: 4012 passed, 4053 FAILED +AND.b.json completed: 6532 passed, 1533 FAILED +AND.l.json completed: 4111 passed, 3954 FAILED +AND.w.json completed: 4080 passed, 3985 FAILED +ANDItoCCR.json completed, all passed! +ANDItoSR.json completed, all passed! +ASL.b.json completed: 3941 passed, 4124 FAILED +ASL.l.json completed: 3578 passed, 4487 FAILED +ASL.w.json completed: 3645 passed, 4420 FAILED +ASR.b.json completed: 6316 passed, 1749 FAILED +ASR.l.json completed: 7007 passed, 1058 FAILED +ASR.w.json completed: 5816 passed, 2249 FAILED +BCHG.json completed: 6570 passed, 1495 FAILED +BCLR.json completed: 6885 passed, 1180 FAILED +BSET.json completed: 6616 passed, 1449 FAILED +BSR.json completed: 4078 passed, 3987 FAILED +BTST.json completed: 6851 passed, 1214 FAILED +Bcc.json completed: 5861 passed, 2204 FAILED +CHK.json completed: 0 passed, 8065 FAILED +CLR.b.json completed: 6594 passed, 1471 FAILED +CLR.l.json completed: 4301 passed, 3764 FAILED +CLR.w.json completed: 4327 passed, 3738 FAILED +CMP.b.json completed: 6627 passed, 1438 FAILED +CMP.l.json completed: 4634 passed, 3431 FAILED +CMP.w.json completed: 4597 passed, 3468 FAILED +CMPA.l.json completed: 4998 passed, 3067 FAILED +CMPA.w.json completed: 3895 passed, 4170 FAILED +DBcc.json completed: 5194 passed, 2871 FAILED +DIVS.json completed: 539 passed, 7526 FAILED +DIVU.json completed: 1093 passed, 6972 FAILED +EOR.b.json completed: 6699 passed, 1366 FAILED +EOR.l.json completed: 4340 passed, 3725 FAILED +EOR.w.json completed: 4399 passed, 3666 FAILED +EORItoCCR.json completed: 1067 passed, 6998 FAILED +EORItoSR.json completed: 141 passed, 7924 FAILED +EXG.json completed, all passed! +EXT.l.json completed, all passed! +EXT.w.json completed, all passed! +JMP.json completed: 533 passed, 7532 FAILED +JSR.json completed: 152 passed, 7913 FAILED +LEA.json completed: 5726 passed, 2339 FAILED +LINK.json completed: 7060 passed, 1005 FAILED +LSL.b.json completed: 7774 passed, 291 FAILED +LSL.l.json completed: 7017 passed, 1048 FAILED +LSL.w.json completed: 6545 passed, 1520 FAILED +LSR.b.json completed: 7797 passed, 268 FAILED +LSR.l.json completed: 7044 passed, 1021 FAILED +LSR.w.json completed: 6609 passed, 1456 FAILED +MOVE.b.json completed: 5383 passed, 2682 FAILED +MOVE.l.json completed: 2626 passed, 5439 FAILED +MOVE.q.json completed, all passed! +MOVE.w.json completed: 2709 passed, 5356 FAILED +MOVEA.l.json completed: 4827 passed, 3238 FAILED +MOVEA.w.json completed: 4813 passed, 3252 FAILED +MOVEM.l.json completed: 3286 passed, 4779 FAILED +MOVEM.w.json completed: 3324 passed, 4741 FAILED +MOVEP.l.json completed: 4036 passed, 4029 FAILED +MOVEP.w.json completed: 4046 passed, 4019 FAILED +MOVEfromSR.json completed: 4456 passed, 3609 FAILED +MOVEfromUSP.json completed, all passed! +MOVEtoCCR.json completed: 541 passed, 7524 FAILED +MOVEtoSR.json completed: 90 passed, 7975 FAILED +MOVEtoUSP.json completed, all passed! +MULS.json completed: 2241 passed, 5824 FAILED +MULU.json completed: 4388 passed, 3677 FAILED +NBCD.json completed: 0 passed, 8065 FAILED +NEG.b.json completed: 6611 passed, 1454 FAILED +NEG.l.json completed: 4461 passed, 3604 FAILED +NEG.w.json completed: 4352 passed, 3713 FAILED +NEGX.b.json completed: 0 passed, 8065 FAILED +NEGX.l.json completed: 0 passed, 8065 FAILED +NEGX.w.json completed: 0 passed, 8065 FAILED +NOP.json completed, all passed! +NOT.b.json completed: 6636 passed, 1429 FAILED +NOT.l.json completed: 4372 passed, 3693 FAILED +NOT.w.json completed: 4378 passed, 3687 FAILED +OR.b.json completed: 6501 passed, 1564 FAILED +OR.l.json completed: 4085 passed, 3980 FAILED +OR.w.json completed: 4039 passed, 4026 FAILED +ORItoCCR.json completed: 987 passed, 7078 FAILED +ORItoSR.json completed: 118 passed, 7947 FAILED +PEA.json completed: 5798 passed, 2267 FAILED +RESET.json completed: 0 passed, 8065 FAILED +ROL.b.json completed, all passed! +ROL.l.json completed, all passed! +ROL.w.json completed: 6961 passed, 1104 FAILED +ROR.b.json completed, all passed! +ROR.l.json completed, all passed! +ROR.w.json completed: 6970 passed, 1095 FAILED +ROXL.b.json completed: 8039 passed, 26 FAILED +ROXL.l.json completed: 8029 passed, 36 FAILED +ROXL.w.json completed: 6941 passed, 1124 FAILED +ROXR.b.json completed: 8037 passed, 28 FAILED +ROXR.l.json completed: 8022 passed, 43 FAILED +ROXR.w.json completed: 6985 passed, 1080 FAILED +RTE.json completed: 0 passed, 8065 FAILED +RTR.json completed: 0 passed, 8065 FAILED +RTS.json completed: 11 passed, 8054 FAILED +SBCD.json completed: 776 passed, 7289 FAILED +SUB.b.json completed: 6567 passed, 1498 FAILED +SUB.l.json completed: 4537 passed, 3528 FAILED +SUB.w.json completed: 4567 passed, 3498 FAILED +SUBA.l.json completed: 4787 passed, 3278 FAILED +SUBA.w.json completed: 4842 passed, 3223 FAILED +SUBX.b.json completed: 3861 passed, 4204 FAILED +SUBX.l.json completed: 3955 passed, 4110 FAILED +SUBX.w.json completed: 3876 passed, 4189 FAILED +SWAP.json completed: 509 passed, 7556 FAILED +Scc.json completed: 6637 passed, 1428 FAILED +TAS.json completed: 6655 passed, 1410 FAILED +TRAP.json completed, all passed! +TRAPV.json completed, all passed! +TST.b.json completed: 6566 passed, 1499 FAILED +TST.l.json completed: 4381 passed, 3684 FAILED +TST.w.json completed: 4362 passed, 3703 FAILED +UNLINK.json completed, all passed! + +passed: 594436, failed: 405624, total 59% +completed in 16m 7s diff --git a/tests/harte_tests/src/main.rs b/tests/harte_tests/src/main.rs index a9e5fb8..8c1daac 100644 --- a/tests/harte_tests/src/main.rs +++ b/tests/harte_tests/src/main.rs @@ -272,13 +272,19 @@ fn test_json_file(path: PathBuf, args: &Args) -> (usize, usize, String) { let mut passed = 0; let mut failed = 0; - for case in cases { + for mut case in cases { if let Some(only) = args.only.as_ref() { if !case.name.ends_with(only) { continue; } } + // Sort the ram memory for debugging help + if args.debug { + case.initial_state.ram.sort_by_key(|(addr, _)| *addr); + case.final_state.ram.sort_by_key(|(addr, _)| *addr); + } + if !args.quiet { println!("Running test {}", case.name); }