mirror of
https://github.com/transistorfet/moa.git
synced 2024-12-23 03:29:24 +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 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)
|
||||||
}
|
}
|
||||||
|
@ -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 => {
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user