Added proper AddressError handling to m68k

Also a few fixes, such as correcting a decode error in ADDX
This commit is contained in:
transistor 2022-09-11 17:42:54 -07:00
parent 34bdd86772
commit 03f4e11e3b
5 changed files with 294 additions and 158 deletions

View File

@ -43,6 +43,7 @@ pub struct M68kDecoder {
pub cputype: M68kType, pub cputype: M68kType,
pub start: u32, pub start: u32,
pub end: u32, pub end: u32,
pub instruction_word: u16,
pub instruction: Instruction, pub instruction: Instruction,
} }
@ -52,6 +53,7 @@ impl M68kDecoder {
cputype, cputype,
start: start, start: start,
end: start, end: start,
instruction_word: 0,
instruction: Instruction::NOP, instruction: Instruction::NOP,
} }
} }
@ -70,6 +72,7 @@ impl M68kDecoder {
pub fn decode_one(&mut self, memory: &mut dyn Addressable) -> Result<Instruction, Error> { pub fn decode_one(&mut self, memory: &mut dyn Addressable) -> Result<Instruction, Error> {
let ins = self.read_instruction_word(memory)?; let ins = self.read_instruction_word(memory)?;
self.instruction_word = ins;
match ((ins & 0xF000) >> 12) as u8 { match ((ins & 0xF000) >> 12) as u8 {
OPCG_BIT_OPS => { OPCG_BIT_OPS => {
@ -517,7 +520,7 @@ impl M68kDecoder {
let dest = get_high_reg(ins); let dest = get_high_reg(ins);
match (ins & 0x08) == 0 { match (ins & 0x08) == 0 {
true => Ok(Instruction::ADDX(Target::DirectDReg(src), Target::DirectDReg(dest), size)), true => Ok(Instruction::ADDX(Target::DirectDReg(src), Target::DirectDReg(dest), size)),
false => Ok(Instruction::ADDX(Target::IndirectARegDec(src), Target::DirectDReg(dest), size)), false => Ok(Instruction::ADDX(Target::IndirectARegDec(src), Target::IndirectARegDec(dest), size)),
} }
} else { } else {
let target = self.decode_lower_effective_address(memory, ins, Some(size))?; let target = self.decode_lower_effective_address(memory, ins, Some(size))?;
@ -609,14 +612,14 @@ impl M68kDecoder {
} }
} }
fn read_instruction_word(&mut self, device: &mut dyn Addressable) -> Result<u16, Error> { fn read_instruction_word(&mut self, memory: &mut dyn Addressable) -> Result<u16, Error> {
let word = device.read_beu16(self.end as Address)?; let word = memory.read_beu16(self.end as Address)?;
self.end += 2; self.end += 2;
Ok(word) Ok(word)
} }
fn read_instruction_long(&mut self, device: &mut dyn Addressable) -> Result<u32, Error> { fn read_instruction_long(&mut self, memory: &mut dyn Addressable) -> Result<u32, Error> {
let word = device.read_beu32(self.end as Address)?; let word = memory.read_beu32(self.end as Address)?;
self.end += 4; self.end += 4;
Ok(word) Ok(word)
} }

View File

@ -3,7 +3,7 @@ use crate::system::System;
use crate::error::{ErrorType, Error}; use crate::error::{ErrorType, Error};
use crate::devices::{ClockElapsed, Address, Steppable, Interruptable, Addressable, Debuggable, Transmutable}; use crate::devices::{ClockElapsed, Address, Steppable, Interruptable, Addressable, Debuggable, Transmutable};
use super::state::{M68k, M68kType, Status, Flags, Exceptions, InterruptPriority}; use super::state::{M68k, M68kType, Status, Flags, Exceptions, InterruptPriority, FunctionCode, MemType, MemAccess};
use super::instructions::{ use super::instructions::{
Register, Register,
Size, Size,
@ -94,7 +94,6 @@ impl M68k {
self.decode_next()?; self.decode_next()?;
self.execute_current()?; self.execute_current()?;
self.timer.cycle.end(); self.timer.cycle.end();
//if (self.timer.cycle.events % 500) == 0 { //if (self.timer.cycle.events % 500) == 0 {
// println!("{}", self.timer); // println!("{}", self.timer);
//} //}
@ -134,12 +133,26 @@ impl M68k {
pub fn exception(&mut self, number: u8, is_interrupt: bool) -> Result<(), Error> { pub fn exception(&mut self, number: u8, is_interrupt: bool) -> Result<(), Error> {
debug!("{}: raising exception {}", DEV_NAME, number); debug!("{}: raising exception {}", DEV_NAME, number);
let ins_word = self.decoder.instruction_word;
let extra_code = self.state.request.get_type_code();
let fault_address = self.state.request.address;
let offset = (number as u16) << 2; let offset = (number as u16) << 2;
if self.cputype >= M68kType::MC68010 { if self.cputype >= M68kType::MC68010 {
self.push_word(offset)?; self.push_word(offset)?;
} }
self.push_long(self.state.pc)?;
self.push_word(self.state.sr)?; // If BusError or AddressError
if number == 2 || number == 3 {
self.push_long(self.state.pc - 4)?;
self.push_word(self.state.sr)?;
self.push_word(ins_word)?;
self.push_long(fault_address)?;
self.push_word((ins_word & 0xFFF0) | extra_code)?;
} else {
self.push_long(self.state.pc)?;
self.push_word(self.state.sr)?;
}
// Changes to the flags must happen after the previous value has been pushed to the stack // Changes to the flags must happen after the previous value has been pushed to the stack
self.set_flag(Flags::Supervisor, true); self.set_flag(Flags::Supervisor, true);
@ -148,7 +161,17 @@ impl M68k {
self.state.sr = (self.state.sr & !(Flags::IntMask as u16)) | ((self.state.current_ipl as u16) << 8); self.state.sr = (self.state.sr & !(Flags::IntMask as u16)) | ((self.state.current_ipl as u16) << 8);
} }
self.state.pc = self.port.read_beu32((self.state.vbr + offset as u32) as Address)?; let vector = self.state.vbr + offset as u32;
self.state.pc = self.port.read_beu32(vector as Address)?;
let result = self.start_request(vector, Size::Word, MemAccess::Read, MemType::Program);
// If BusError or AddressError, and another AddressError occurs, then halt
if number == 2 || number == 3 {
if let Err(err) = result {
self.state.status = Status::Stopped;
return Err(err);
}
}
Ok(()) Ok(())
} }
@ -157,6 +180,7 @@ impl M68k {
self.timing.reset(); self.timing.reset();
self.timer.decode.start(); self.timer.decode.start();
self.start_request(self.state.pc, Size::Word, MemAccess::Read, MemType::Program)?;
self.decoder.decode_at(&mut self.port, self.state.pc)?; self.decoder.decode_at(&mut self.port, self.state.pc)?;
self.timer.decode.end(); self.timer.decode.end();
@ -248,16 +272,19 @@ impl M68k {
let should_branch = self.get_current_condition(cond); let should_branch = self.get_current_condition(cond);
if should_branch { if should_branch {
self.state.pc = (self.decoder.start + 2).wrapping_add(offset as u32); self.state.pc = (self.decoder.start + 2).wrapping_add(offset as u32);
self.start_request(self.state.pc, Size::Word, MemAccess::Read, MemType::Program)?;
} }
}, },
Instruction::BRA(offset) => { Instruction::BRA(offset) => {
self.state.pc = (self.decoder.start + 2).wrapping_add(offset as u32); self.state.pc = (self.decoder.start + 2).wrapping_add(offset as u32);
self.start_request(self.state.pc, Size::Word, MemAccess::Read, MemType::Program)?;
}, },
Instruction::BSR(offset) => { Instruction::BSR(offset) => {
self.push_long(self.state.pc)?; self.push_long(self.state.pc)?;
let sp = *self.get_stack_pointer_mut(); let sp = *self.get_stack_pointer_mut();
self.debugger.stack_tracer.push_return(sp); self.debugger.stack_tracer.push_return(sp);
self.state.pc = (self.decoder.start + 2).wrapping_add(offset as u32); self.state.pc = (self.decoder.start + 2).wrapping_add(offset as u32);
self.start_request(self.state.pc, Size::Word, MemAccess::Read, MemType::Program)?;
}, },
Instruction::BCHG(bitnum, target, size) => { Instruction::BCHG(bitnum, target, size) => {
let bitnum = self.get_target_value(bitnum, Size::Byte, Used::Once)?; let bitnum = self.get_target_value(bitnum, Size::Byte, Used::Once)?;
@ -460,12 +487,17 @@ impl M68k {
//}, //},
Instruction::JMP(target) => { Instruction::JMP(target) => {
self.state.pc = self.get_target_address(target)?; self.state.pc = self.get_target_address(target)?;
self.start_request(self.state.pc, Size::Word, MemAccess::Read, MemType::Program)?;
}, },
Instruction::JSR(target) => { Instruction::JSR(target) => {
self.push_long(self.state.pc)?; let previous_pc = self.state.pc;
self.state.pc = self.get_target_address(target)?;
self.start_request(self.state.pc, Size::Word, MemAccess::Read, MemType::Program)?;
// If the address is good, then push the old PC onto the stack
self.push_long(previous_pc)?;
let sp = *self.get_stack_pointer_mut(); let sp = *self.get_stack_pointer_mut();
self.debugger.stack_tracer.push_return(sp); self.debugger.stack_tracer.push_return(sp);
self.state.pc = self.get_target_address(target)?;
}, },
Instruction::LEA(target, reg) => { Instruction::LEA(target, reg) => {
let value = self.get_target_address(target)?; let value = self.get_target_address(target)?;
@ -884,32 +916,6 @@ impl M68k {
Ok(addr) Ok(addr)
} }
fn push_word(&mut self, value: u16) -> Result<(), Error> {
*self.get_stack_pointer_mut() -= 2;
let addr = *self.get_stack_pointer_mut();
self.port.write_beu16(addr as Address, value)
}
fn pop_word(&mut self) -> Result<u16, Error> {
let addr = *self.get_stack_pointer_mut();
let value = self.port.read_beu16(addr as Address)?;
*self.get_stack_pointer_mut() += 2;
Ok(value)
}
fn push_long(&mut self, value: u32) -> Result<(), Error> {
*self.get_stack_pointer_mut() -= 4;
let addr = *self.get_stack_pointer_mut();
self.port.write_beu32(addr as Address, value)
}
fn pop_long(&mut self) -> Result<u32, Error> {
let addr = *self.get_stack_pointer_mut();
let value = self.port.read_beu32(addr as Address)?;
*self.get_stack_pointer_mut() += 4;
Ok(value)
}
pub fn get_target_value(&mut self, target: Target, size: Size, used: Used) -> Result<u32, Error> { pub fn get_target_value(&mut self, target: Target, size: Size, used: Used) -> Result<u32, Error> {
match target { match target {
Target::Immediate(value) => Ok(value), Target::Immediate(value) => Ok(value),
@ -1050,7 +1056,24 @@ impl M68k {
*reg_addr *reg_addr
} }
pub fn start_request(&mut self, addr: u32, size: Size, access: MemAccess, mtype: MemType) -> Result<u32, Error> {
self.state.request.code = match mtype {
MemType::Program => FunctionCode::program(self.state.sr),
MemType::Data => FunctionCode::data(self.state.sr),
};
self.state.request.access = access;
self.state.request.address = addr;
if size == Size::Byte || addr & 0x1 == 0 {
Ok(addr)
} else {
Err(Error::processor(Exceptions::AddressError as u32))
}
}
pub fn get_address_sized(&mut self, addr: Address, size: Size) -> Result<u32, Error> { pub fn get_address_sized(&mut self, addr: Address, size: Size) -> Result<u32, Error> {
self.start_request(addr as u32, size, MemAccess::Read, MemType::Data)?;
match size { match size {
Size::Byte => self.port.read_u8(addr).map(|value| value as u32), Size::Byte => self.port.read_u8(addr).map(|value| value as u32),
Size::Word => self.port.read_beu16(addr).map(|value| value as u32), Size::Word => self.port.read_beu16(addr).map(|value| value as u32),
@ -1059,6 +1082,7 @@ impl M68k {
} }
pub fn set_address_sized(&mut self, addr: Address, value: u32, size: Size) -> Result<(), Error> { pub fn set_address_sized(&mut self, addr: Address, value: u32, size: Size) -> Result<(), Error> {
self.start_request(addr as u32, size, MemAccess::Write, MemType::Data)?;
match size { match size {
Size::Byte => self.port.write_u8(addr, value as u8), Size::Byte => self.port.write_u8(addr, value as u8),
Size::Word => self.port.write_beu16(addr, value as u16), Size::Word => self.port.write_beu16(addr, value as u16),
@ -1066,6 +1090,36 @@ impl M68k {
} }
} }
fn push_word(&mut self, value: u16) -> Result<(), Error> {
*self.get_stack_pointer_mut() -= 2;
let addr = *self.get_stack_pointer_mut();
self.start_request(addr, Size::Word, MemAccess::Write, MemType::Data)?;
self.port.write_beu16(addr as Address, value)
}
fn pop_word(&mut self) -> Result<u16, Error> {
let addr = *self.get_stack_pointer_mut();
let value = self.port.read_beu16(addr as Address)?;
self.start_request(addr, Size::Word, MemAccess::Read, MemType::Data)?;
*self.get_stack_pointer_mut() += 2;
Ok(value)
}
fn push_long(&mut self, value: u32) -> Result<(), Error> {
*self.get_stack_pointer_mut() -= 4;
let addr = *self.get_stack_pointer_mut();
self.start_request(addr, Size::Long, MemAccess::Write, MemType::Data)?;
self.port.write_beu32(addr as Address, value)
}
fn pop_long(&mut self) -> Result<u32, Error> {
let addr = *self.get_stack_pointer_mut();
let value = self.port.read_beu32(addr as Address)?;
self.start_request(addr, Size::Long, MemAccess::Read, MemType::Data)?;
*self.get_stack_pointer_mut() += 4;
Ok(value)
}
pub fn get_bit_field_args(&self, offset: RegOrImmediate, width: RegOrImmediate) -> (u32, u32) { pub fn get_bit_field_args(&self, offset: RegOrImmediate, width: RegOrImmediate) -> (u32, u32) {
let offset = self.get_reg_or_immediate(offset); let offset = self.get_reg_or_immediate(offset);
let mut width = self.get_reg_or_immediate(width) % 32; let mut width = self.get_reg_or_immediate(width) % 32;
@ -1239,7 +1293,6 @@ impl M68k {
} }
} }
fn overflowing_add_sized(operand1: u32, operand2: u32, size: Size) -> (u32, bool) { fn overflowing_add_sized(operand1: u32, operand2: u32, size: Size) -> (u32, bool) {
match size { match size {
Size::Byte => { Size::Byte => {

View File

@ -3,6 +3,7 @@ use crate::devices::Address;
use crate::timers::CpuTimer; use crate::timers::CpuTimer;
use crate::memory::BusPort; use crate::memory::BusPort;
use super::instructions::Size;
use super::decode::M68kDecoder; use super::decode::M68kDecoder;
use super::debugger::M68kDebugger; use super::debugger::M68kDebugger;
use super::timing::M68kInstructionTiming; use super::timing::M68kInstructionTiming;
@ -49,6 +50,19 @@ pub enum Exceptions {
LineFEmulator = 11, LineFEmulator = 11,
} }
#[repr(u8)]
#[allow(dead_code)]
#[derive(Copy, Clone, Debug, PartialEq)]
pub enum FunctionCode {
Reserved0 = 0,
UserData = 1,
UserProgram = 2,
Reserved3 = 3,
Reserved4 = 4,
SupervisorData = 5,
SupervisorProgram = 6,
CpuSpace = 7,
}
#[derive(Copy, Clone, Debug, PartialEq)] #[derive(Copy, Clone, Debug, PartialEq)]
pub enum Status { pub enum Status {
@ -70,24 +84,30 @@ pub enum InterruptPriority {
Level7 = 7, Level7 = 7,
} }
impl InterruptPriority { #[derive(Copy, Clone, Debug, PartialEq)]
pub fn from_u8(priority: u8) -> InterruptPriority { pub enum MemType {
match priority { Program,
0 => InterruptPriority::NoInterrupt, Data,
1 => InterruptPriority::Level1, }
2 => InterruptPriority::Level2,
3 => InterruptPriority::Level3, #[derive(Copy, Clone, Debug, PartialEq)]
4 => InterruptPriority::Level4, pub enum MemAccess {
5 => InterruptPriority::Level5, Read,
6 => InterruptPriority::Level6, Write,
_ => InterruptPriority::Level7, }
}
} #[derive(Copy, Clone, Debug, PartialEq)]
pub struct MemoryRequest {
pub access: MemAccess,
pub code: FunctionCode,
pub size: Size,
pub address: u32,
} }
#[derive(Clone, Debug, PartialEq)] #[derive(Clone, Debug, PartialEq)]
pub struct M68kState { pub struct M68kState {
pub status: Status, pub status: Status,
pub request: MemoryRequest,
pub current_ipl: InterruptPriority, pub current_ipl: InterruptPriority,
pub pending_ipl: InterruptPriority, pub pending_ipl: InterruptPriority,
@ -101,10 +121,23 @@ pub struct M68kState {
pub vbr: u32, pub vbr: u32,
} }
#[derive(Clone)]
pub struct M68k {
pub cputype: M68kType,
pub frequency: u32,
pub state: M68kState,
pub decoder: M68kDecoder,
pub timing: M68kInstructionTiming,
pub debugger: M68kDebugger,
pub port: BusPort,
pub timer: CpuTimer,
}
impl M68kState { impl M68kState {
pub fn new() -> M68kState { pub fn new() -> M68kState {
M68kState { M68kState {
status: Status::Init, status: Status::Init,
request: MemoryRequest::new(),
current_ipl: InterruptPriority::NoInterrupt, current_ipl: InterruptPriority::NoInterrupt,
pending_ipl: InterruptPriority::NoInterrupt, pending_ipl: InterruptPriority::NoInterrupt,
@ -120,18 +153,6 @@ impl M68kState {
} }
} }
#[derive(Clone)]
pub struct M68k {
pub cputype: M68kType,
pub frequency: u32,
pub state: M68kState,
pub decoder: M68kDecoder,
pub timing: M68kInstructionTiming,
pub debugger: M68kDebugger,
pub port: BusPort,
pub timer: CpuTimer,
}
impl M68k { impl M68k {
pub fn new(cputype: M68kType, frequency: u32, port: BusPort) -> M68k { pub fn new(cputype: M68kType, frequency: u32, port: BusPort) -> M68k {
M68k { M68k {
@ -172,3 +193,62 @@ impl M68k {
} }
} }
impl InterruptPriority {
pub fn from_u8(priority: u8) -> InterruptPriority {
match priority {
0 => InterruptPriority::NoInterrupt,
1 => InterruptPriority::Level1,
2 => InterruptPriority::Level2,
3 => InterruptPriority::Level3,
4 => InterruptPriority::Level4,
5 => InterruptPriority::Level5,
6 => InterruptPriority::Level6,
_ => InterruptPriority::Level7,
}
}
}
impl FunctionCode {
pub fn program(sr: u16) -> Self {
if sr & Flags::Supervisor as u16 != 0 {
FunctionCode::SupervisorProgram
} else {
FunctionCode::UserProgram
}
}
pub fn data(sr: u16) -> Self {
if sr & Flags::Supervisor as u16 != 0 {
FunctionCode::SupervisorData
} else {
FunctionCode::UserData
}
}
}
impl MemoryRequest {
pub fn new() -> Self {
Self {
access: MemAccess::Read,
code: FunctionCode::Reserved0,
size: Size::Word,
address: 0,
}
}
pub fn get_type_code(&self) -> u16 {
let ins = match self.code {
// TODO this is wrong (should be opposite results), but is a temporary hack
FunctionCode::SupervisorProgram | FunctionCode::UserProgram => 0x0008,
_ => 0x0000,
};
let rw = match self.access {
MemAccess::Write => 0x0000,
MemAccess::Read => 0x0010,
};
ins | rw | (self.code as u16)
}
}

View File

@ -1,4 +1,4 @@
Last run on 2022-09-10 at commit 27f71b0f3317b8d804e2750e8e37eeb57ee06274 Last run on 2022-09-11 at commit 34bdd86772c55df6167a085b39554fe28cbe1cb5
ABCD.json completed: 301 passed, 7764 FAILED ABCD.json completed: 301 passed, 7764 FAILED
ADD.b.json completed, all passed! ADD.b.json completed, all passed!
@ -6,9 +6,9 @@ ADD.l.json completed: 5143 passed, 2922 FAILED
ADD.w.json completed: 5117 passed, 2948 FAILED ADD.w.json completed: 5117 passed, 2948 FAILED
ADDA.l.json completed: 5372 passed, 2693 FAILED ADDA.l.json completed: 5372 passed, 2693 FAILED
ADDA.w.json completed: 5431 passed, 2634 FAILED ADDA.w.json completed: 5431 passed, 2634 FAILED
ADDX.b.json completed: 4051 passed, 4014 FAILED ADDX.b.json completed: 8044 passed, 21 FAILED
ADDX.l.json completed: 4065 passed, 4000 FAILED ADDX.l.json completed: 5472 passed, 2593 FAILED
ADDX.w.json completed: 4012 passed, 4053 FAILED ADDX.w.json completed: 5465 passed, 2600 FAILED
AND.b.json completed, all passed! AND.b.json completed, all passed!
AND.l.json completed: 4745 passed, 3320 FAILED AND.l.json completed: 4745 passed, 3320 FAILED
AND.w.json completed: 4668 passed, 3397 FAILED AND.w.json completed: 4668 passed, 3397 FAILED
@ -23,9 +23,9 @@ ASR.w.json completed: 5988 passed, 2077 FAILED
BCHG.json completed, all passed! BCHG.json completed, all passed!
BCLR.json completed, all passed! BCLR.json completed, all passed!
BSET.json completed, all passed! BSET.json completed, all passed!
BSR.json completed: 4078 passed, 3987 FAILED BSR.json completed, all passed!
BTST.json completed: 8052 passed, 13 FAILED BTST.json completed: 8052 passed, 13 FAILED
Bcc.json completed: 5861 passed, 2204 FAILED Bcc.json completed, all passed!
CHK.json completed: 0 passed, 8065 FAILED CHK.json completed: 0 passed, 8065 FAILED
CLR.b.json completed, all passed! CLR.b.json completed, all passed!
CLR.l.json completed: 4903 passed, 3162 FAILED CLR.l.json completed: 4903 passed, 3162 FAILED
@ -35,19 +35,19 @@ CMP.l.json completed: 5034 passed, 3031 FAILED
CMP.w.json completed: 5024 passed, 3041 FAILED CMP.w.json completed: 5024 passed, 3041 FAILED
CMPA.l.json completed: 5450 passed, 2615 FAILED CMPA.l.json completed: 5450 passed, 2615 FAILED
CMPA.w.json completed: 4200 passed, 3865 FAILED CMPA.w.json completed: 4200 passed, 3865 FAILED
DBcc.json completed: 5194 passed, 2871 FAILED DBcc.json completed: 6101 passed, 1964 FAILED
DIVS.json completed: 612 passed, 7453 FAILED DIVS.json completed: 612 passed, 7453 FAILED
DIVU.json completed: 1267 passed, 6798 FAILED DIVU.json completed: 1267 passed, 6798 FAILED
EOR.b.json completed, all passed! EOR.b.json completed, all passed!
EOR.l.json completed: 4904 passed, 3161 FAILED EOR.l.json completed: 4904 passed, 3161 FAILED
EOR.w.json completed: 4930 passed, 3135 FAILED EOR.w.json completed: 4930 passed, 3135 FAILED
EORItoCCR.json completed: 1067 passed, 6998 FAILED EORItoCCR.json completed: 1067 passed, 6998 FAILED
EORItoSR.json completed: 141 passed, 7924 FAILED EORItoSR.json completed, all passed!
EXG.json completed, all passed! EXG.json completed, all passed!
EXT.l.json completed, all passed! EXT.l.json completed, all passed!
EXT.w.json completed, all passed! EXT.w.json completed, all passed!
JMP.json completed: 623 passed, 7442 FAILED JMP.json completed, all passed!
JSR.json completed: 200 passed, 7865 FAILED JSR.json completed, all passed!
LEA.json completed, all passed! LEA.json completed, all passed!
LINK.json completed: 7060 passed, 1005 FAILED LINK.json completed: 7060 passed, 1005 FAILED
LSL.b.json completed: 7774 passed, 291 FAILED LSL.b.json completed: 7774 passed, 291 FAILED
@ -57,9 +57,9 @@ LSR.b.json completed: 7797 passed, 268 FAILED
LSR.l.json completed: 7044 passed, 1021 FAILED LSR.l.json completed: 7044 passed, 1021 FAILED
LSR.w.json completed: 6768 passed, 1297 FAILED LSR.w.json completed: 6768 passed, 1297 FAILED
MOVE.b.json completed, all passed! MOVE.b.json completed, all passed!
MOVE.l.json completed: 3270 passed, 4795 FAILED MOVE.l.json completed: 4198 passed, 3867 FAILED
MOVE.q.json completed, all passed! MOVE.q.json completed, all passed!
MOVE.w.json completed: 3368 passed, 4697 FAILED MOVE.w.json completed: 4307 passed, 3758 FAILED
MOVEA.l.json completed: 5379 passed, 2686 FAILED MOVEA.l.json completed: 5379 passed, 2686 FAILED
MOVEA.w.json completed: 5322 passed, 2743 FAILED MOVEA.w.json completed: 5322 passed, 2743 FAILED
MOVEM.l.json completed: 4099 passed, 3966 FAILED MOVEM.l.json completed: 4099 passed, 3966 FAILED
@ -68,8 +68,8 @@ MOVEP.l.json completed: 4036 passed, 4029 FAILED
MOVEP.w.json completed: 4046 passed, 4019 FAILED MOVEP.w.json completed: 4046 passed, 4019 FAILED
MOVEfromSR.json completed: 5017 passed, 3048 FAILED MOVEfromSR.json completed: 5017 passed, 3048 FAILED
MOVEfromUSP.json completed, all passed! MOVEfromUSP.json completed, all passed!
MOVEtoCCR.json completed: 614 passed, 7451 FAILED MOVEtoCCR.json completed: 4958 passed, 3107 FAILED
MOVEtoSR.json completed: 96 passed, 7969 FAILED MOVEtoSR.json completed: 4938 passed, 3127 FAILED
MOVEtoUSP.json completed, all passed! MOVEtoUSP.json completed, all passed!
MULS.json completed: 2548 passed, 5517 FAILED MULS.json completed: 2548 passed, 5517 FAILED
MULU.json completed: 4992 passed, 3073 FAILED MULU.json completed: 4992 passed, 3073 FAILED
@ -87,8 +87,8 @@ NOT.w.json completed: 4957 passed, 3108 FAILED
OR.b.json completed, all passed! OR.b.json completed, all passed!
OR.l.json completed: 4730 passed, 3335 FAILED OR.l.json completed: 4730 passed, 3335 FAILED
OR.w.json completed: 4650 passed, 3415 FAILED OR.w.json completed: 4650 passed, 3415 FAILED
ORItoCCR.json completed: 987 passed, 7078 FAILED ORItoCCR.json completed, all passed!
ORItoSR.json completed: 118 passed, 7947 FAILED ORItoSR.json completed, all passed!
PEA.json completed, all passed! PEA.json completed, all passed!
RESET.json completed: 0 passed, 8065 FAILED RESET.json completed: 0 passed, 8065 FAILED
ROL.b.json completed, all passed! ROL.b.json completed, all passed!
@ -103,9 +103,9 @@ ROXL.w.json completed: 7114 passed, 951 FAILED
ROXR.b.json completed: 8037 passed, 28 FAILED ROXR.b.json completed: 8037 passed, 28 FAILED
ROXR.l.json completed: 8022 passed, 43 FAILED ROXR.l.json completed: 8022 passed, 43 FAILED
ROXR.w.json completed: 7141 passed, 924 FAILED ROXR.w.json completed: 7141 passed, 924 FAILED
RTE.json completed: 0 passed, 8065 FAILED RTE.json completed: 2047 passed, 6018 FAILED
RTR.json completed: 0 passed, 8065 FAILED RTR.json completed: 0 passed, 8065 FAILED
RTS.json completed: 11 passed, 8054 FAILED RTS.json completed: 4008 passed, 4057 FAILED
SBCD.json completed: 884 passed, 7181 FAILED SBCD.json completed: 884 passed, 7181 FAILED
SUB.b.json completed, all passed! SUB.b.json completed, all passed!
SUB.l.json completed: 5093 passed, 2972 FAILED SUB.l.json completed: 5093 passed, 2972 FAILED
@ -125,5 +125,5 @@ TST.l.json completed: 4963 passed, 3102 FAILED
TST.w.json completed: 4928 passed, 3137 FAILED TST.w.json completed: 4928 passed, 3137 FAILED
UNLINK.json completed, all passed! UNLINK.json completed, all passed!
passed: 653776, failed: 346284, total 65% passed: 723080, failed: 276980, total 72%
completed in 18m 5s completed in 13m 44s

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 ABCD.json completed: 301 passed, 7764 FAILED
ADD.b.json completed: 6520 passed, 1545 FAILED ADD.b.json completed, all passed!
ADD.l.json completed: 4583 passed, 3482 FAILED ADD.l.json completed: 5143 passed, 2922 FAILED
ADD.w.json completed: 4579 passed, 3486 FAILED ADD.w.json completed: 5117 passed, 2948 FAILED
ADDA.l.json completed: 4843 passed, 3222 FAILED ADDA.l.json completed: 5372 passed, 2693 FAILED
ADDA.w.json completed: 4916 passed, 3149 FAILED ADDA.w.json completed: 5431 passed, 2634 FAILED
ADDX.b.json completed: 4051 passed, 4014 FAILED ADDX.b.json completed: 4051 passed, 4014 FAILED
ADDX.l.json completed: 4065 passed, 4000 FAILED ADDX.l.json completed: 4065 passed, 4000 FAILED
ADDX.w.json completed: 4012 passed, 4053 FAILED ADDX.w.json completed: 4012 passed, 4053 FAILED
AND.b.json completed: 6532 passed, 1533 FAILED AND.b.json completed, all passed!
AND.l.json completed: 4111 passed, 3954 FAILED AND.l.json completed: 4745 passed, 3320 FAILED
AND.w.json completed: 4080 passed, 3985 FAILED AND.w.json completed: 4668 passed, 3397 FAILED
ANDItoCCR.json completed, all passed! ANDItoCCR.json completed, all passed!
ANDItoSR.json completed, all passed! ANDItoSR.json completed, all passed!
ASL.b.json completed: 3941 passed, 4124 FAILED ASL.b.json completed: 3941 passed, 4124 FAILED
ASL.l.json completed: 3578 passed, 4487 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.b.json completed: 6316 passed, 1749 FAILED
ASR.l.json completed: 7007 passed, 1058 FAILED ASR.l.json completed: 7007 passed, 1058 FAILED
ASR.w.json completed: 5816 passed, 2249 FAILED ASR.w.json completed: 5988 passed, 2077 FAILED
BCHG.json completed: 6570 passed, 1495 FAILED BCHG.json completed, all passed!
BCLR.json completed: 6885 passed, 1180 FAILED BCLR.json completed, all passed!
BSET.json completed: 6616 passed, 1449 FAILED BSET.json completed, all passed!
BSR.json completed: 4078 passed, 3987 FAILED 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 Bcc.json completed: 5861 passed, 2204 FAILED
CHK.json completed: 0 passed, 8065 FAILED CHK.json completed: 0 passed, 8065 FAILED
CLR.b.json completed: 6594 passed, 1471 FAILED CLR.b.json completed, all passed!
CLR.l.json completed: 4301 passed, 3764 FAILED CLR.l.json completed: 4903 passed, 3162 FAILED
CLR.w.json completed: 4327 passed, 3738 FAILED CLR.w.json completed: 4896 passed, 3169 FAILED
CMP.b.json completed: 6627 passed, 1438 FAILED CMP.b.json completed, all passed!
CMP.l.json completed: 4634 passed, 3431 FAILED CMP.l.json completed: 5034 passed, 3031 FAILED
CMP.w.json completed: 4597 passed, 3468 FAILED CMP.w.json completed: 5024 passed, 3041 FAILED
CMPA.l.json completed: 4998 passed, 3067 FAILED CMPA.l.json completed: 5450 passed, 2615 FAILED
CMPA.w.json completed: 3895 passed, 4170 FAILED CMPA.w.json completed: 4200 passed, 3865 FAILED
DBcc.json completed: 5194 passed, 2871 FAILED DBcc.json completed: 5194 passed, 2871 FAILED
DIVS.json completed: 539 passed, 7526 FAILED DIVS.json completed: 612 passed, 7453 FAILED
DIVU.json completed: 1093 passed, 6972 FAILED DIVU.json completed: 1267 passed, 6798 FAILED
EOR.b.json completed: 6699 passed, 1366 FAILED EOR.b.json completed, all passed!
EOR.l.json completed: 4340 passed, 3725 FAILED EOR.l.json completed: 4904 passed, 3161 FAILED
EOR.w.json completed: 4399 passed, 3666 FAILED EOR.w.json completed: 4930 passed, 3135 FAILED
EORItoCCR.json completed: 1067 passed, 6998 FAILED EORItoCCR.json completed: 1067 passed, 6998 FAILED
EORItoSR.json completed: 141 passed, 7924 FAILED EORItoSR.json completed: 141 passed, 7924 FAILED
EXG.json completed, all passed! EXG.json completed, all passed!
EXT.l.json completed, all passed! EXT.l.json completed, all passed!
EXT.w.json completed, all passed! EXT.w.json completed, all passed!
JMP.json completed: 533 passed, 7532 FAILED JMP.json completed: 623 passed, 7442 FAILED
JSR.json completed: 152 passed, 7913 FAILED JSR.json completed: 200 passed, 7865 FAILED
LEA.json completed: 5726 passed, 2339 FAILED LEA.json completed, all passed!
LINK.json completed: 7060 passed, 1005 FAILED LINK.json completed: 7060 passed, 1005 FAILED
LSL.b.json completed: 7774 passed, 291 FAILED LSL.b.json completed: 7774 passed, 291 FAILED
LSL.l.json completed: 7017 passed, 1048 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.b.json completed: 7797 passed, 268 FAILED
LSR.l.json completed: 7044 passed, 1021 FAILED LSR.l.json completed: 7044 passed, 1021 FAILED
LSR.w.json completed: 6609 passed, 1456 FAILED LSR.w.json completed: 6768 passed, 1297 FAILED
MOVE.b.json completed: 5383 passed, 2682 FAILED MOVE.b.json completed, all passed!
MOVE.l.json completed: 2626 passed, 5439 FAILED MOVE.l.json completed: 3270 passed, 4795 FAILED
MOVE.q.json completed, all passed! MOVE.q.json completed, all passed!
MOVE.w.json completed: 2709 passed, 5356 FAILED MOVE.w.json completed: 3368 passed, 4697 FAILED
MOVEA.l.json completed: 4827 passed, 3238 FAILED MOVEA.l.json completed: 5379 passed, 2686 FAILED
MOVEA.w.json completed: 4813 passed, 3252 FAILED MOVEA.w.json completed: 5322 passed, 2743 FAILED
MOVEM.l.json completed: 3286 passed, 4779 FAILED MOVEM.l.json completed: 4099 passed, 3966 FAILED
MOVEM.w.json completed: 3324 passed, 4741 FAILED MOVEM.w.json completed: 4169 passed, 3896 FAILED
MOVEP.l.json completed: 4036 passed, 4029 FAILED MOVEP.l.json completed: 4036 passed, 4029 FAILED
MOVEP.w.json completed: 4046 passed, 4019 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! MOVEfromUSP.json completed, all passed!
MOVEtoCCR.json completed: 541 passed, 7524 FAILED MOVEtoCCR.json completed: 614 passed, 7451 FAILED
MOVEtoSR.json completed: 90 passed, 7975 FAILED MOVEtoSR.json completed: 96 passed, 7969 FAILED
MOVEtoUSP.json completed, all passed! MOVEtoUSP.json completed, all passed!
MULS.json completed: 2241 passed, 5824 FAILED MULS.json completed: 2548 passed, 5517 FAILED
MULU.json completed: 4388 passed, 3677 FAILED MULU.json completed: 4992 passed, 3073 FAILED
NBCD.json completed: 0 passed, 8065 FAILED NBCD.json completed: 0 passed, 8065 FAILED
NEG.b.json completed: 6611 passed, 1454 FAILED NEG.b.json completed, all passed!
NEG.l.json completed: 4461 passed, 3604 FAILED NEG.l.json completed: 5031 passed, 3034 FAILED
NEG.w.json completed: 4352 passed, 3713 FAILED NEG.w.json completed: 4911 passed, 3154 FAILED
NEGX.b.json completed: 0 passed, 8065 FAILED NEGX.b.json completed: 0 passed, 8065 FAILED
NEGX.l.json completed: 0 passed, 8065 FAILED NEGX.l.json completed: 0 passed, 8065 FAILED
NEGX.w.json completed: 0 passed, 8065 FAILED NEGX.w.json completed: 0 passed, 8065 FAILED
NOP.json completed, all passed! NOP.json completed, all passed!
NOT.b.json completed: 6636 passed, 1429 FAILED NOT.b.json completed, all passed!
NOT.l.json completed: 4372 passed, 3693 FAILED NOT.l.json completed: 4924 passed, 3141 FAILED
NOT.w.json completed: 4378 passed, 3687 FAILED NOT.w.json completed: 4957 passed, 3108 FAILED
OR.b.json completed: 6501 passed, 1564 FAILED OR.b.json completed, all passed!
OR.l.json completed: 4085 passed, 3980 FAILED OR.l.json completed: 4730 passed, 3335 FAILED
OR.w.json completed: 4039 passed, 4026 FAILED OR.w.json completed: 4650 passed, 3415 FAILED
ORItoCCR.json completed: 987 passed, 7078 FAILED ORItoCCR.json completed: 987 passed, 7078 FAILED
ORItoSR.json completed: 118 passed, 7947 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 RESET.json completed: 0 passed, 8065 FAILED
ROL.b.json completed, all passed! ROL.b.json completed, all passed!
ROL.l.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.b.json completed, all passed!
ROR.l.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.b.json completed: 8039 passed, 26 FAILED
ROXL.l.json completed: 8029 passed, 36 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.b.json completed: 8037 passed, 28 FAILED
ROXR.l.json completed: 8022 passed, 43 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 RTE.json completed: 0 passed, 8065 FAILED
RTR.json completed: 0 passed, 8065 FAILED RTR.json completed: 0 passed, 8065 FAILED
RTS.json completed: 11 passed, 8054 FAILED RTS.json completed: 11 passed, 8054 FAILED
SBCD.json completed: 776 passed, 7289 FAILED SBCD.json completed: 884 passed, 7181 FAILED
SUB.b.json completed: 6567 passed, 1498 FAILED SUB.b.json completed, all passed!
SUB.l.json completed: 4537 passed, 3528 FAILED SUB.l.json completed: 5093 passed, 2972 FAILED
SUB.w.json completed: 4567 passed, 3498 FAILED SUB.w.json completed: 5121 passed, 2944 FAILED
SUBA.l.json completed: 4787 passed, 3278 FAILED SUBA.l.json completed: 5329 passed, 2736 FAILED
SUBA.w.json completed: 4842 passed, 3223 FAILED SUBA.w.json completed: 5386 passed, 2679 FAILED
SUBX.b.json completed: 3861 passed, 4204 FAILED SUBX.b.json completed: 3861 passed, 4204 FAILED
SUBX.l.json completed: 3955 passed, 4110 FAILED SUBX.l.json completed: 3955 passed, 4110 FAILED
SUBX.w.json completed: 3876 passed, 4189 FAILED SUBX.w.json completed: 3876 passed, 4189 FAILED
SWAP.json completed: 509 passed, 7556 FAILED SWAP.json completed, all passed!
Scc.json completed: 6637 passed, 1428 FAILED Scc.json completed, all passed!
TAS.json completed: 6655 passed, 1410 FAILED TAS.json completed, all passed!
TRAP.json completed, all passed! TRAP.json completed, all passed!
TRAPV.json completed, all passed! TRAPV.json completed, all passed!
TST.b.json completed: 6566 passed, 1499 FAILED TST.b.json completed, all passed!
TST.l.json completed: 4381 passed, 3684 FAILED TST.l.json completed: 4963 passed, 3102 FAILED
TST.w.json completed: 4362 passed, 3703 FAILED TST.w.json completed: 4928 passed, 3137 FAILED
UNLINK.json completed, all passed! UNLINK.json completed, all passed!
passed: 594436, failed: 405624, total 59% passed: 653776, failed: 346284, total 65%
completed in 16m 7s completed in 18m 5s