Fixed some issue with m68k

Some debug code was enabled that prevented illegal instructions
from being handled normally with a processor exception

The brief instruction word decoding could cause an illegal instruction
if it didn't match the docs, but the actual implementation would not
complain in those cases, so I modified it to not perform validation
for <=MC68010

Increment and Decrement addressing modes, when using the stack pointer,
will always inc/dec by at least 2 bytes, even if it's a byte operation,
to keep the stack aligned to the nearest word boundary
This commit is contained in:
transistor 2022-09-10 21:09:35 -07:00
parent 27f71b0f33
commit 0582625b5e
5 changed files with 263 additions and 100 deletions

View File

@ -645,22 +645,35 @@ impl M68kDecoder {
fn decode_extension_word(&mut self, memory: &mut dyn Addressable, areg: Option<u8>) -> Result<Target, Error> {
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))
}
}

View File

@ -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<u32, Error> {
match size {
Size::Byte => self.port.read_u8(addr).map(|value| value as u32),

View File

@ -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

View File

@ -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

View File

@ -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);
}