mirror of
https://github.com/transistorfet/moa.git
synced 2024-12-22 12:29:51 +00:00
Added proper AddressError handling to m68k
Also a few fixes, such as correcting a decode error in ADDX
This commit is contained in:
parent
34bdd86772
commit
03f4e11e3b
@ -43,6 +43,7 @@ pub struct M68kDecoder {
|
||||
pub cputype: M68kType,
|
||||
pub start: u32,
|
||||
pub end: u32,
|
||||
pub instruction_word: u16,
|
||||
pub instruction: Instruction,
|
||||
}
|
||||
|
||||
@ -52,6 +53,7 @@ impl M68kDecoder {
|
||||
cputype,
|
||||
start: start,
|
||||
end: start,
|
||||
instruction_word: 0,
|
||||
instruction: Instruction::NOP,
|
||||
}
|
||||
}
|
||||
@ -70,6 +72,7 @@ impl M68kDecoder {
|
||||
|
||||
pub fn decode_one(&mut self, memory: &mut dyn Addressable) -> Result<Instruction, Error> {
|
||||
let ins = self.read_instruction_word(memory)?;
|
||||
self.instruction_word = ins;
|
||||
|
||||
match ((ins & 0xF000) >> 12) as u8 {
|
||||
OPCG_BIT_OPS => {
|
||||
@ -517,7 +520,7 @@ impl M68kDecoder {
|
||||
let dest = get_high_reg(ins);
|
||||
match (ins & 0x08) == 0 {
|
||||
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 {
|
||||
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> {
|
||||
let word = device.read_beu16(self.end as Address)?;
|
||||
fn read_instruction_word(&mut self, memory: &mut dyn Addressable) -> Result<u16, Error> {
|
||||
let word = memory.read_beu16(self.end as Address)?;
|
||||
self.end += 2;
|
||||
Ok(word)
|
||||
}
|
||||
|
||||
fn read_instruction_long(&mut self, device: &mut dyn Addressable) -> Result<u32, Error> {
|
||||
let word = device.read_beu32(self.end as Address)?;
|
||||
fn read_instruction_long(&mut self, memory: &mut dyn Addressable) -> Result<u32, Error> {
|
||||
let word = memory.read_beu32(self.end as Address)?;
|
||||
self.end += 4;
|
||||
Ok(word)
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ use crate::system::System;
|
||||
use crate::error::{ErrorType, Error};
|
||||
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::{
|
||||
Register,
|
||||
Size,
|
||||
@ -94,7 +94,6 @@ impl M68k {
|
||||
self.decode_next()?;
|
||||
self.execute_current()?;
|
||||
self.timer.cycle.end();
|
||||
|
||||
//if (self.timer.cycle.events % 500) == 0 {
|
||||
// println!("{}", self.timer);
|
||||
//}
|
||||
@ -134,12 +133,26 @@ impl M68k {
|
||||
|
||||
pub fn exception(&mut self, number: u8, is_interrupt: bool) -> Result<(), Error> {
|
||||
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;
|
||||
if self.cputype >= M68kType::MC68010 {
|
||||
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
|
||||
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.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(())
|
||||
}
|
||||
@ -157,6 +180,7 @@ impl M68k {
|
||||
self.timing.reset();
|
||||
|
||||
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.timer.decode.end();
|
||||
|
||||
@ -248,16 +272,19 @@ impl M68k {
|
||||
let should_branch = self.get_current_condition(cond);
|
||||
if should_branch {
|
||||
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) => {
|
||||
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) => {
|
||||
self.push_long(self.state.pc)?;
|
||||
let sp = *self.get_stack_pointer_mut();
|
||||
self.debugger.stack_tracer.push_return(sp);
|
||||
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) => {
|
||||
let bitnum = self.get_target_value(bitnum, Size::Byte, Used::Once)?;
|
||||
@ -460,12 +487,17 @@ impl M68k {
|
||||
//},
|
||||
Instruction::JMP(target) => {
|
||||
self.state.pc = self.get_target_address(target)?;
|
||||
self.start_request(self.state.pc, Size::Word, MemAccess::Read, MemType::Program)?;
|
||||
},
|
||||
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();
|
||||
self.debugger.stack_tracer.push_return(sp);
|
||||
self.state.pc = self.get_target_address(target)?;
|
||||
},
|
||||
Instruction::LEA(target, reg) => {
|
||||
let value = self.get_target_address(target)?;
|
||||
@ -884,32 +916,6 @@ impl M68k {
|
||||
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> {
|
||||
match target {
|
||||
Target::Immediate(value) => Ok(value),
|
||||
@ -1050,7 +1056,24 @@ impl M68k {
|
||||
*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> {
|
||||
self.start_request(addr as u32, size, MemAccess::Read, MemType::Data)?;
|
||||
match size {
|
||||
Size::Byte => self.port.read_u8(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> {
|
||||
self.start_request(addr as u32, size, MemAccess::Write, MemType::Data)?;
|
||||
match size {
|
||||
Size::Byte => self.port.write_u8(addr, value as u8),
|
||||
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) {
|
||||
let offset = self.get_reg_or_immediate(offset);
|
||||
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) {
|
||||
match size {
|
||||
Size::Byte => {
|
||||
|
@ -3,6 +3,7 @@ use crate::devices::Address;
|
||||
use crate::timers::CpuTimer;
|
||||
use crate::memory::BusPort;
|
||||
|
||||
use super::instructions::Size;
|
||||
use super::decode::M68kDecoder;
|
||||
use super::debugger::M68kDebugger;
|
||||
use super::timing::M68kInstructionTiming;
|
||||
@ -49,6 +50,19 @@ pub enum Exceptions {
|
||||
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)]
|
||||
pub enum Status {
|
||||
@ -70,24 +84,30 @@ pub enum InterruptPriority {
|
||||
Level7 = 7,
|
||||
}
|
||||
|
||||
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,
|
||||
}
|
||||
}
|
||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||
pub enum MemType {
|
||||
Program,
|
||||
Data,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||
pub enum MemAccess {
|
||||
Read,
|
||||
Write,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, PartialEq)]
|
||||
pub struct MemoryRequest {
|
||||
pub access: MemAccess,
|
||||
pub code: FunctionCode,
|
||||
pub size: Size,
|
||||
pub address: u32,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct M68kState {
|
||||
pub status: Status,
|
||||
pub request: MemoryRequest,
|
||||
pub current_ipl: InterruptPriority,
|
||||
pub pending_ipl: InterruptPriority,
|
||||
|
||||
@ -101,10 +121,23 @@ pub struct M68kState {
|
||||
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 {
|
||||
pub fn new() -> M68kState {
|
||||
M68kState {
|
||||
status: Status::Init,
|
||||
request: MemoryRequest::new(),
|
||||
current_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 {
|
||||
pub fn new(cputype: M68kType, frequency: u32, port: BusPort) -> 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)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
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
|
||||
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
|
||||
ADDX.b.json completed: 8044 passed, 21 FAILED
|
||||
ADDX.l.json completed: 5472 passed, 2593 FAILED
|
||||
ADDX.w.json completed: 5465 passed, 2600 FAILED
|
||||
AND.b.json completed, all passed!
|
||||
AND.l.json completed: 4745 passed, 3320 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!
|
||||
BCLR.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
|
||||
Bcc.json completed: 5861 passed, 2204 FAILED
|
||||
Bcc.json completed, all passed!
|
||||
CHK.json completed: 0 passed, 8065 FAILED
|
||||
CLR.b.json completed, all passed!
|
||||
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
|
||||
CMPA.l.json completed: 5450 passed, 2615 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
|
||||
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
|
||||
EORItoSR.json completed, all passed!
|
||||
EXG.json completed, all passed!
|
||||
EXT.l.json completed, all passed!
|
||||
EXT.w.json completed, all passed!
|
||||
JMP.json completed: 623 passed, 7442 FAILED
|
||||
JSR.json completed: 200 passed, 7865 FAILED
|
||||
JMP.json completed, all passed!
|
||||
JSR.json completed, all passed!
|
||||
LEA.json completed, all passed!
|
||||
LINK.json completed: 7060 passed, 1005 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.w.json completed: 6768 passed, 1297 FAILED
|
||||
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.w.json completed: 3368 passed, 4697 FAILED
|
||||
MOVE.w.json completed: 4307 passed, 3758 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
|
||||
@ -68,8 +68,8 @@ MOVEP.l.json completed: 4036 passed, 4029 FAILED
|
||||
MOVEP.w.json completed: 4046 passed, 4019 FAILED
|
||||
MOVEfromSR.json completed: 5017 passed, 3048 FAILED
|
||||
MOVEfromUSP.json completed, all passed!
|
||||
MOVEtoCCR.json completed: 614 passed, 7451 FAILED
|
||||
MOVEtoSR.json completed: 96 passed, 7969 FAILED
|
||||
MOVEtoCCR.json completed: 4958 passed, 3107 FAILED
|
||||
MOVEtoSR.json completed: 4938 passed, 3127 FAILED
|
||||
MOVEtoUSP.json completed, all passed!
|
||||
MULS.json completed: 2548 passed, 5517 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.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
|
||||
ORItoCCR.json completed, all passed!
|
||||
ORItoSR.json completed, all passed!
|
||||
PEA.json completed, all passed!
|
||||
RESET.json completed: 0 passed, 8065 FAILED
|
||||
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.l.json completed: 8022 passed, 43 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
|
||||
RTS.json completed: 11 passed, 8054 FAILED
|
||||
RTS.json completed: 4008 passed, 4057 FAILED
|
||||
SBCD.json completed: 884 passed, 7181 FAILED
|
||||
SUB.b.json completed, all passed!
|
||||
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
|
||||
UNLINK.json completed, all passed!
|
||||
|
||||
passed: 653776, failed: 346284, total 65%
|
||||
completed in 18m 5s
|
||||
passed: 723080, failed: 276980, total 72%
|
||||
completed in 13m 44s
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user