diff --git a/Cargo.lock b/Cargo.lock index 54ce5de..36ab6a8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -412,7 +412,8 @@ version = "0.1.0" dependencies = [ "clap 3.2.20", "flate2", - "moa", + "moa_core", + "moa_m68k", "serde", "serde_derive", "serde_json", @@ -620,34 +621,131 @@ dependencies = [ ] [[package]] -name = "moa" -version = "0.1.0" - -[[package]] -name = "moa-common" +name = "moa_common" version = "0.1.0" dependencies = [ "cpal", - "moa", + "moa_core", "nix 0.23.0", ] [[package]] -name = "moa-console" +name = "moa_computie" version = "0.1.0" dependencies = [ - "moa", - "moa-common", + "moa_core", + "moa_m68k", + "moa_peripherals_generic", + "moa_peripherals_motorola", ] [[package]] -name = "moa-minifb" +name = "moa_console" +version = "0.1.0" +dependencies = [ + "moa_common", + "moa_computie", + "moa_core", + "moa_genesis", + "moa_m68k", + "moa_peripherals_generic", + "moa_peripherals_motorola", +] + +[[package]] +name = "moa_core" +version = "0.1.0" + +[[package]] +name = "moa_genesis" +version = "0.1.0" +dependencies = [ + "moa_core", + "moa_m68k", + "moa_peripherals_yamaha", + "moa_z80", +] + +[[package]] +name = "moa_m68k" +version = "0.1.0" +dependencies = [ + "moa_core", +] + +[[package]] +name = "moa_macintosh" +version = "0.1.0" +dependencies = [ + "moa_core", + "moa_m68k", + "moa_peripherals_mos", + "moa_peripherals_zilog", +] + +[[package]] +name = "moa_minifb" version = "0.1.0" dependencies = [ "clap 3.2.20", "minifb", - "moa", - "moa-common", + "moa_common", + "moa_computie", + "moa_core", + "moa_genesis", + "moa_macintosh", + "moa_peripherals_yamaha", + "moa_trs80", +] + +[[package]] +name = "moa_peripherals_generic" +version = "0.1.0" +dependencies = [ + "moa_core", +] + +[[package]] +name = "moa_peripherals_mos" +version = "0.1.0" +dependencies = [ + "moa_core", +] + +[[package]] +name = "moa_peripherals_motorola" +version = "0.1.0" +dependencies = [ + "moa_core", +] + +[[package]] +name = "moa_peripherals_yamaha" +version = "0.1.0" +dependencies = [ + "moa_core", +] + +[[package]] +name = "moa_peripherals_zilog" +version = "0.1.0" +dependencies = [ + "moa_core", +] + +[[package]] +name = "moa_trs80" +version = "0.1.0" +dependencies = [ + "moa_core", + "moa_z80", +] + +[[package]] +name = "moa_z80" +version = "0.1.0" +dependencies = [ + "moa_core", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 1e3a8b8..0a71cdc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,10 +1,9 @@ -[package] -name = "moa" -version = "0.1.0" -edition = "2018" - [workspace] -members = [".", "frontends/moa-common", "frontends/moa-console", "frontends/moa-minifb", "tests/harte_tests"] -default-members = ["frontends/moa-console"] - -[dependencies] +members = [ + "emulator/core", + "emulator/frontends/common", + "emulator/frontends/console", + "emulator/frontends/minifb", + "tests/harte_tests" +] +default-members = ["emulator/frontends/minifb"] diff --git a/emulator/core/Cargo.toml b/emulator/core/Cargo.toml new file mode 100644 index 0000000..c3188eb --- /dev/null +++ b/emulator/core/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "moa_core" +version = "0.1.0" +edition = "2021" + +[dependencies] + diff --git a/src/debugger.rs b/emulator/core/src/debugger.rs similarity index 100% rename from src/debugger.rs rename to emulator/core/src/debugger.rs diff --git a/src/devices.rs b/emulator/core/src/devices.rs similarity index 100% rename from src/devices.rs rename to emulator/core/src/devices.rs diff --git a/src/error.rs b/emulator/core/src/error.rs similarity index 80% rename from src/error.rs rename to emulator/core/src/error.rs index 453e9f0..28e25ed 100644 --- a/src/error.rs +++ b/emulator/core/src/error.rs @@ -63,35 +63,40 @@ pub fn log_level() -> LogLevel { unsafe { LOG_LEVEL } } +#[macro_export] macro_rules! printlog { ($level:expr, $($arg:tt)*) => ({ - if $level <= crate::error::log_level() { + if $level <= $crate::log_level() { println!($($arg)*); } }) } +#[macro_export] macro_rules! error { ($($arg:tt)*) => ({ - printlog!(crate::error::LogLevel::Error, $($arg)*); + $crate::printlog!($crate::LogLevel::Error, $($arg)*); }) } +#[macro_export] macro_rules! warning { ($($arg:tt)*) => ({ - printlog!(crate::error::LogLevel::Warning, $($arg)*); + $crate::printlog!($crate::LogLevel::Warning, $($arg)*); }) } +#[macro_export] macro_rules! info { ($($arg:tt)*) => ({ - printlog!(crate::error::LogLevel::Info, $($arg)*); + $crate::printlog!($crate::LogLevel::Info, $($arg)*); }) } +#[macro_export] macro_rules! debug { ($($arg:tt)*) => ({ - printlog!(crate::error::LogLevel::Debug, $($arg)*); + $crate::printlog!($crate::LogLevel::Debug, $($arg)*); }) } diff --git a/src/host/audio.rs b/emulator/core/src/host/audio.rs similarity index 100% rename from src/host/audio.rs rename to emulator/core/src/host/audio.rs diff --git a/src/host/controllers.rs b/emulator/core/src/host/controllers.rs similarity index 100% rename from src/host/controllers.rs rename to emulator/core/src/host/controllers.rs diff --git a/src/host/gfx.rs b/emulator/core/src/host/gfx.rs similarity index 100% rename from src/host/gfx.rs rename to emulator/core/src/host/gfx.rs diff --git a/src/host/keys.rs b/emulator/core/src/host/keys.rs similarity index 100% rename from src/host/keys.rs rename to emulator/core/src/host/keys.rs diff --git a/emulator/core/src/host/mod.rs b/emulator/core/src/host/mod.rs new file mode 100644 index 0000000..9acd9e7 --- /dev/null +++ b/emulator/core/src/host/mod.rs @@ -0,0 +1,12 @@ + +mod traits; +mod keys; +mod controllers; + +pub mod gfx; +pub mod audio; + +pub use self::keys::Key; +pub use self::controllers::{ControllerDevice, ControllerEvent}; +pub use self::traits::{Host, Tty, WindowUpdater, ControllerUpdater, KeyboardUpdater, Audio, BlitableSurface, HostData}; + diff --git a/src/host/traits.rs b/emulator/core/src/host/traits.rs similarity index 100% rename from src/host/traits.rs rename to emulator/core/src/host/traits.rs diff --git a/src/interrupts.rs b/emulator/core/src/interrupts.rs similarity index 100% rename from src/interrupts.rs rename to emulator/core/src/interrupts.rs diff --git a/emulator/core/src/lib.rs b/emulator/core/src/lib.rs new file mode 100644 index 0000000..0de49b8 --- /dev/null +++ b/emulator/core/src/lib.rs @@ -0,0 +1,24 @@ + +#[macro_use] +mod error; + +mod debugger; +mod devices; +mod interrupts; +mod memory; +mod signals; +mod system; + +pub mod host; +pub mod parser; +pub mod timers; + +pub use crate::debugger::Debugger; +pub use crate::devices::{Clock, ClockElapsed, Address, Addressable, Steppable, Interruptable, Debuggable, Inspectable, Transmutable, TransmutableBox}; +pub use crate::devices::{read_beu16, read_beu32, read_leu16, read_leu32, write_beu16, write_beu32, write_leu16, write_leu32, wrap_transmutable}; +pub use crate::error::{Error, ErrorType, LogLevel, log_level}; +pub use crate::interrupts::InterruptController; +pub use crate::memory::{MemoryBlock, AddressAdapter, Bus, BusPort, dump_slice}; +pub use crate::signals::{Observable, Signal, EdgeSignal, ObservableSignal, ObservableEdgeSignal}; +pub use crate::system::System; + diff --git a/src/memory.rs b/emulator/core/src/memory.rs similarity index 100% rename from src/memory.rs rename to emulator/core/src/memory.rs diff --git a/src/parser.rs b/emulator/core/src/parser.rs similarity index 100% rename from src/parser.rs rename to emulator/core/src/parser.rs diff --git a/src/signals.rs b/emulator/core/src/signals.rs similarity index 100% rename from src/signals.rs rename to emulator/core/src/signals.rs diff --git a/src/system.rs b/emulator/core/src/system.rs similarity index 100% rename from src/system.rs rename to emulator/core/src/system.rs diff --git a/src/timers.rs b/emulator/core/src/timers.rs similarity index 100% rename from src/timers.rs rename to emulator/core/src/timers.rs diff --git a/emulator/cpus/m68k/Cargo.toml b/emulator/cpus/m68k/Cargo.toml new file mode 100644 index 0000000..86e7a68 --- /dev/null +++ b/emulator/cpus/m68k/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "moa_m68k" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } diff --git a/src/cpus/m68k/assembler.rs b/emulator/cpus/m68k/src/assembler.rs similarity index 96% rename from src/cpus/m68k/assembler.rs rename to emulator/cpus/m68k/src/assembler.rs index 11f9384..5cc0a44 100644 --- a/src/cpus/m68k/assembler.rs +++ b/emulator/cpus/m68k/src/assembler.rs @@ -1,9 +1,8 @@ use std::collections::HashMap; -use crate::error::Error; -use crate::parser::{AssemblyLine, AssemblyOperand, AssemblyParser}; -use crate::parser::{expect_args, expect_label, expect_immediate}; +use moa_core::Error; +use moa_core::parser::{self, AssemblyLine, AssemblyOperand, AssemblyParser}; use super::state::M68kType; use super::instructions::Size; @@ -151,12 +150,12 @@ impl M68kAssembler { fn convert_instruction(&mut self, lineno: usize, mneumonic: &str, args: &[AssemblyOperand]) -> Result<(), Error> { match mneumonic { "bra" => { - let label = expect_label(lineno, args)?; + let label = parser::expect_label(lineno, args)?; self.output.push(0x6000); self.relocations.push(Relocation::new(RelocationType::Displacement, label, self.output.len() - 1, self.current_origin)); }, "bsr" => { - let label = expect_label(lineno, args)?; + let label = parser::expect_label(lineno, args)?; self.output.push(0x6100); self.relocations.push(Relocation::new(RelocationType::Displacement, label, self.output.len() - 1, self.current_origin)); }, @@ -165,7 +164,7 @@ impl M68kAssembler { }, "lea" => { - expect_args(lineno, args, 2)?; + parser::expect_args(lineno, args, 2)?; let reg = expect_address_register(lineno, &args[0])?; let (effective_address, additional_words) = convert_target(lineno, &args[1], Size::Long, Disallow::NoRegsPrePostOrImmediate)?; self.output.push(0x41C0 | (reg << 9) | effective_address); @@ -184,7 +183,7 @@ impl M68kAssembler { self.output.push(0x4E77); }, "stop" => { - let immediate = expect_immediate(lineno, &args[0])?; + let immediate = parser::expect_immediate(lineno, &args[0])?; self.output.push(0x4E72); self.output.extend(convert_immediate(lineno, immediate, Size::Word)?); }, @@ -252,7 +251,7 @@ impl M68kAssembler { "move" | "movea" => { let operation_size = operation_size?; - expect_args(lineno, args, 2)?; + parser::expect_args(lineno, args, 2)?; let (effective_address_left, additional_words_left) = convert_target(lineno, &args[0], operation_size, Disallow::None)?; let (effective_address_right, additional_words_right) = convert_target(lineno, &args[1], operation_size, Disallow::None)?; let effective_address_left = (effective_address_left >> 3) | (effective_address_left << 3); @@ -308,8 +307,8 @@ impl M68kAssembler { } fn convert_common_immediate_instruction(&mut self, lineno: usize, opcode: u16, args: &[AssemblyOperand], operation_size: Size, disallow: Disallow) -> Result<(), Error> { - expect_args(lineno, args, 2)?; - let immediate = expect_immediate(lineno, &args[0])?; + parser::expect_args(lineno, args, 2)?; + let immediate = parser::expect_immediate(lineno, &args[0])?; let (effective_address, additional_words) = convert_target(lineno, &args[1], operation_size, disallow)?; self.output.push(opcode | encode_size(operation_size) | effective_address); self.output.extend(convert_immediate(lineno, immediate, operation_size)?); @@ -326,7 +325,7 @@ impl M68kAssembler { } fn convert_common_reg_instruction(&mut self, lineno: usize, opcode: u16, args: &[AssemblyOperand], operation_size: Size, disallow: Disallow, disallow_reg: Disallow) -> Result<(), Error> { - expect_args(lineno, args, 2)?; + parser::expect_args(lineno, args, 2)?; let (direction, reg, operand) = convert_reg_and_other(lineno, args, disallow_reg)?; let (effective_address, additional_words) = convert_target(lineno, operand, operation_size, disallow)?; self.output.push(opcode | encode_size(operation_size) | direction | (reg << 9) | effective_address); @@ -335,7 +334,7 @@ impl M68kAssembler { } fn convert_common_single_operand_instruction(&mut self, lineno: usize, opcode: u16, args: &[AssemblyOperand], operation_size: Size, disallow: Disallow) -> Result<(), Error> { - expect_args(lineno, args, 1)?; + parser::expect_args(lineno, args, 1)?; let (effective_address, additional_words) = convert_target(lineno, &args[0], operation_size, disallow)?; self.output.push(opcode | encode_size(operation_size) | effective_address); self.output.extend(additional_words); @@ -351,8 +350,8 @@ impl M68kAssembler { }; if let Some(opcode) = opcode { - expect_args(lineno, args, 2)?; - let immediate = expect_immediate(lineno, &args[0])?; + parser::expect_args(lineno, args, 2)?; + let immediate = parser::expect_immediate(lineno, &args[0])?; self.output.push(opcode); self.output.extend(convert_immediate(lineno, immediate, Size::Word)?); return Ok(true); @@ -373,7 +372,7 @@ impl M68kAssembler { match &args { &[AssemblyOperand::Immediate(_), AssemblyOperand::Register(_)] => { - let mut immediate = expect_immediate(lineno, &args[0])?; + let mut immediate = parser::expect_immediate(lineno, &args[0])?; if immediate < 1 || immediate > 8 { return Err(Error::new(&format!("error at line {}: immediate value must be between 1 and 8, found {:?}", lineno, args))); } else if immediate == 8 { diff --git a/src/bin/m68kas.rs b/emulator/cpus/m68k/src/bin/m68kas.rs similarity index 86% rename from src/bin/m68kas.rs rename to emulator/cpus/m68k/src/bin/m68kas.rs index b6c3431..c77b3de 100644 --- a/src/bin/m68kas.rs +++ b/emulator/cpus/m68k/src/bin/m68kas.rs @@ -2,8 +2,8 @@ use std::fs; use std::env; -use moa::cpus::m68k::M68kType; -use moa::cpus::m68k::assembler::M68kAssembler; +use moa_m68k::M68kType; +use moa_m68k::assembler::M68kAssembler; fn main() { let mut assembler = M68kAssembler::new(M68kType::MC68000); diff --git a/src/cpus/m68k/debugger.rs b/emulator/cpus/m68k/src/debugger.rs similarity index 96% rename from src/cpus/m68k/debugger.rs rename to emulator/cpus/m68k/src/debugger.rs index 81749a6..db9c5d3 100644 --- a/src/cpus/m68k/debugger.rs +++ b/emulator/cpus/m68k/src/debugger.rs @@ -1,7 +1,5 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::{Address, Addressable, Debuggable}; +use moa_core::{System, Error, Address, Addressable, Debuggable}; use super::state::M68k; use super::decode::M68kDecoder; diff --git a/src/cpus/m68k/decode.rs b/emulator/cpus/m68k/src/decode.rs similarity index 99% rename from src/cpus/m68k/decode.rs rename to emulator/cpus/m68k/src/decode.rs index 27f46d5..1da4db9 100644 --- a/src/cpus/m68k/decode.rs +++ b/emulator/cpus/m68k/src/decode.rs @@ -1,6 +1,5 @@ -use crate::error::Error; -use crate::devices::{Address, Addressable}; +use moa_core::{Error, Address, Addressable}; use super::state::{M68kType, Exceptions}; use super::instructions::{ diff --git a/src/cpus/m68k/execute.rs b/emulator/cpus/m68k/src/execute.rs similarity index 99% rename from src/cpus/m68k/execute.rs rename to emulator/cpus/m68k/src/execute.rs index 7e83b45..4693af5 100644 --- a/src/cpus/m68k/execute.rs +++ b/emulator/cpus/m68k/src/execute.rs @@ -1,10 +1,9 @@ -use crate::system::System; -use crate::error::{ErrorType, Error}; -use crate::devices::{ClockElapsed, Address, Steppable, Interruptable, Addressable, Debuggable, Transmutable}; +use moa_core::debug; +use moa_core::{System, Error, ErrorType, ClockElapsed, Address, Steppable, Interruptable, Addressable, Debuggable, Transmutable}; -use super::state::{M68k, M68kType, Status, Flags, Exceptions, InterruptPriority, FunctionCode, MemType, MemAccess}; -use super::instructions::{ +use crate::state::{M68k, M68kType, Status, Flags, Exceptions, InterruptPriority, FunctionCode, MemType, MemAccess}; +use crate::instructions::{ Register, Size, Sign, diff --git a/src/cpus/m68k/instructions.rs b/emulator/cpus/m68k/src/instructions.rs similarity index 100% rename from src/cpus/m68k/instructions.rs rename to emulator/cpus/m68k/src/instructions.rs diff --git a/src/cpus/m68k/mod.rs b/emulator/cpus/m68k/src/lib.rs similarity index 100% rename from src/cpus/m68k/mod.rs rename to emulator/cpus/m68k/src/lib.rs diff --git a/src/cpus/m68k/state.rs b/emulator/cpus/m68k/src/state.rs similarity index 96% rename from src/cpus/m68k/state.rs rename to emulator/cpus/m68k/src/state.rs index bfded15..9dfd4c2 100644 --- a/src/cpus/m68k/state.rs +++ b/emulator/cpus/m68k/src/state.rs @@ -1,12 +1,12 @@ -use crate::devices::Address; -use crate::timers::CpuTimer; -use crate::memory::BusPort; +use moa_core::{Address, BusPort}; +use moa_core::timers::CpuTimer; + +use crate::instructions::Size; +use crate::decode::M68kDecoder; +use crate::debugger::M68kDebugger; +use crate::timing::M68kInstructionTiming; -use super::instructions::Size; -use super::decode::M68kDecoder; -use super::debugger::M68kDebugger; -use super::timing::M68kInstructionTiming; #[allow(dead_code)] #[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord)] diff --git a/src/cpus/m68k/tests.rs b/emulator/cpus/m68k/src/tests.rs similarity index 98% rename from src/cpus/m68k/tests.rs rename to emulator/cpus/m68k/src/tests.rs index 0068f1a..dd49afe 100644 --- a/src/cpus/m68k/tests.rs +++ b/emulator/cpus/m68k/src/tests.rs @@ -1,16 +1,13 @@ #[cfg(test)] mod decode_tests { - use crate::error::{Error, ErrorType}; - use crate::system::System; - use crate::memory::{MemoryBlock, BusPort}; - use crate::devices::{Address, Addressable, wrap_transmutable}; + use moa_core::{System, Error, ErrorType, MemoryBlock, BusPort, Address, Addressable, wrap_transmutable}; - use crate::cpus::m68k::{M68k, M68kType}; - use crate::cpus::m68k::state::Exceptions; - use crate::cpus::m68k::instructions::{Instruction, Target, Size, Sign, XRegister, BaseRegister, IndexRegister, Direction, ShiftDirection}; - use crate::cpus::m68k::timing::M68kInstructionTiming; - use crate::cpus::m68k::assembler::M68kAssembler; + use crate::{M68k, M68kType}; + use crate::state::Exceptions; + use crate::instructions::{Instruction, Target, Size, Sign, XRegister, BaseRegister, IndexRegister, Direction, ShiftDirection}; + use crate::timing::M68kInstructionTiming; + use crate::assembler::M68kAssembler; const INIT_STACK: Address = 0x00002000; const INIT_ADDR: Address = 0x00000010; @@ -113,7 +110,6 @@ mod decode_tests { assert_eq!(cpu.decoder.instruction, ins.clone()); }, None => { -println!("{:?}", cpu.decoder.instruction); assert!(cpu.decode_next().is_err()); }, } @@ -497,14 +493,12 @@ println!("{:?}", cpu.decoder.instruction); #[cfg(test)] mod execute_tests { - use crate::system::System; - use crate::memory::{MemoryBlock, BusPort}; - use crate::devices::{Address, Addressable, Steppable, wrap_transmutable}; + use moa_core::{System, MemoryBlock, BusPort, Address, Addressable, Steppable, wrap_transmutable}; - use crate::cpus::m68k::{M68k, M68kType}; - use crate::cpus::m68k::state::M68kState; - use crate::cpus::m68k::execute::Used; - use crate::cpus::m68k::instructions::{Instruction, Target, Size, Sign, ShiftDirection, Direction, Condition}; + use crate::{M68k, M68kType}; + use crate::state::M68kState; + use crate::execute::Used; + use crate::instructions::{Instruction, Target, Size, Sign, ShiftDirection, Direction, Condition}; const INIT_STACK: Address = 0x00002000; const INIT_ADDR: Address = 0x00000010; diff --git a/src/cpus/m68k/timing.rs b/emulator/cpus/m68k/src/timing.rs similarity index 99% rename from src/cpus/m68k/timing.rs rename to emulator/cpus/m68k/src/timing.rs index 2d2d487..6bdd896 100644 --- a/src/cpus/m68k/timing.rs +++ b/emulator/cpus/m68k/src/timing.rs @@ -1,7 +1,6 @@ -use super::state::M68kType; - -use super::instructions::{Size, Sign, Direction, Target, Instruction}; +use crate::M68kType; +use crate::instructions::{Size, Sign, Direction, Target, Instruction}; #[derive(Clone, Debug, PartialEq)] diff --git a/emulator/cpus/z80/Cargo.toml b/emulator/cpus/z80/Cargo.toml new file mode 100644 index 0000000..3e2ae2f --- /dev/null +++ b/emulator/cpus/z80/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "moa_z80" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } diff --git a/src/cpus/z80/debugger.rs b/emulator/cpus/z80/src/debugger.rs similarity index 93% rename from src/cpus/z80/debugger.rs rename to emulator/cpus/z80/src/debugger.rs index 48c2fa5..6457401 100644 --- a/src/cpus/z80/debugger.rs +++ b/emulator/cpus/z80/src/debugger.rs @@ -1,10 +1,8 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::{Address, Debuggable}; +use moa_core::{System, Error, Address, Debuggable}; -use super::state::Z80; -use super::decode::Z80Decoder; +use crate::state::Z80; +use crate::decode::Z80Decoder; pub struct Z80Debugger { diff --git a/src/cpus/z80/decode.rs b/emulator/cpus/z80/src/decode.rs similarity index 99% rename from src/cpus/z80/decode.rs rename to emulator/cpus/z80/src/decode.rs index 5960f84..c605864 100644 --- a/src/cpus/z80/decode.rs +++ b/emulator/cpus/z80/src/decode.rs @@ -1,8 +1,7 @@ -use crate::error::Error; -use crate::devices::{Address, Addressable}; +use moa_core::{Error, Address, Addressable}; -use super::state::{Register, InterruptMode}; +use crate::state::{Register, InterruptMode}; #[derive(Copy, Clone, Debug, PartialEq)] diff --git a/src/cpus/z80/execute.rs b/emulator/cpus/z80/src/execute.rs similarity index 99% rename from src/cpus/z80/execute.rs rename to emulator/cpus/z80/src/execute.rs index ec4f3e2..ecf3df1 100644 --- a/src/cpus/z80/execute.rs +++ b/emulator/cpus/z80/src/execute.rs @@ -1,10 +1,8 @@ -use crate::system::System; -use crate::error::{ErrorType, Error}; -use crate::devices::{ClockElapsed, Address, Steppable, Addressable, Interruptable, Debuggable, Transmutable, read_beu16, write_beu16}; +use moa_core::{System, Error, ErrorType, ClockElapsed, Address, Steppable, Addressable, Interruptable, Debuggable, Transmutable, read_beu16, write_beu16}; -use super::decode::{Condition, Instruction, LoadTarget, Target, RegisterPair, IndexRegister, SpecialRegister, IndexRegisterHalf, Size, Direction}; -use super::state::{Z80, Status, Flags, Register}; +use crate::decode::{Condition, Instruction, LoadTarget, Target, RegisterPair, IndexRegister, SpecialRegister, IndexRegisterHalf, Size, Direction}; +use crate::state::{Z80, Status, Flags, Register}; const DEV_NAME: &'static str = "z80-cpu"; diff --git a/src/cpus/z80/mod.rs b/emulator/cpus/z80/src/lib.rs similarity index 100% rename from src/cpus/z80/mod.rs rename to emulator/cpus/z80/src/lib.rs diff --git a/src/cpus/z80/state.rs b/emulator/cpus/z80/src/state.rs similarity index 96% rename from src/cpus/z80/state.rs rename to emulator/cpus/z80/src/state.rs index 902c04d..aea970b 100644 --- a/src/cpus/z80/state.rs +++ b/emulator/cpus/z80/src/state.rs @@ -1,10 +1,8 @@ -use crate::devices::Address; -use crate::memory::BusPort; -use crate::signals::Signal; +use moa_core::{Address, BusPort, Signal}; -use super::decode::Z80Decoder; -use super::debugger::Z80Debugger; +use crate::decode::Z80Decoder; +use crate::debugger::Z80Debugger; #[allow(dead_code)] diff --git a/src/cpus/z80/tests.rs b/emulator/cpus/z80/src/tests.rs similarity index 99% rename from src/cpus/z80/tests.rs rename to emulator/cpus/z80/src/tests.rs index e66227d..943772a 100644 --- a/src/cpus/z80/tests.rs +++ b/emulator/cpus/z80/src/tests.rs @@ -1,9 +1,7 @@ #[cfg(test)] mod decode_tests { - use crate::system::System; - use crate::memory::{MemoryBlock, BusPort}; - use crate::devices::{Address, Addressable, wrap_transmutable}; + use moa_core::{System, MemoryBlock, BusPort, Address, Addressable, wrap_transmutable}; use super::super::{Z80, Z80Type}; use super::super::state::Register; @@ -78,9 +76,7 @@ mod decode_tests { #[cfg(test)] mod execute_tests { - use crate::system::System; - use crate::memory::{MemoryBlock, BusPort}; - use crate::devices::{Address, Addressable, wrap_transmutable}; + use moa_core::{System, MemoryBlock, BusPort, Address, Addressable, wrap_transmutable}; use super::super::{Z80, Z80Type}; use super::super::state::{Z80State, Register}; diff --git a/frontends/moa-common/Cargo.toml b/emulator/frontends/common/Cargo.toml similarity index 77% rename from frontends/moa-common/Cargo.toml rename to emulator/frontends/common/Cargo.toml index 2471792..62a96d7 100644 --- a/frontends/moa-common/Cargo.toml +++ b/emulator/frontends/common/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "moa-common" +name = "moa_common" version = "0.1.0" edition = "2018" @@ -8,7 +8,7 @@ tty = ["nix"] audio = ["cpal"] [dependencies] -moa = { path = "../../" } +moa_core = { path = "../../core" } nix = { version = "0.23", optional = true } cpal = { version = "0.13", optional = true } diff --git a/frontends/moa-common/src/audio.rs b/emulator/frontends/common/src/audio.rs similarity index 99% rename from frontends/moa-common/src/audio.rs rename to emulator/frontends/common/src/audio.rs index 7c60782..cbdfc6f 100644 --- a/frontends/moa-common/src/audio.rs +++ b/emulator/frontends/common/src/audio.rs @@ -1,7 +1,7 @@ use cpal::{Sample, Stream, SampleRate, SampleFormat, StreamConfig, traits::{DeviceTrait, HostTrait, StreamTrait}}; -use moa::host::traits::{HostData, Audio}; +use moa_core::host::{HostData, Audio}; use crate::circularbuf::CircularBuffer; const SAMPLE_RATE: usize = 48000; diff --git a/frontends/moa-common/src/circularbuf.rs b/emulator/frontends/common/src/circularbuf.rs similarity index 100% rename from frontends/moa-common/src/circularbuf.rs rename to emulator/frontends/common/src/circularbuf.rs diff --git a/frontends/moa-common/src/lib.rs b/emulator/frontends/common/src/lib.rs similarity index 100% rename from frontends/moa-common/src/lib.rs rename to emulator/frontends/common/src/lib.rs diff --git a/frontends/moa-common/src/tty.rs b/emulator/frontends/common/src/tty.rs similarity index 97% rename from frontends/moa-common/src/tty.rs rename to emulator/frontends/common/src/tty.rs index 87c0dfe..574df95 100644 --- a/frontends/moa-common/src/tty.rs +++ b/emulator/frontends/common/src/tty.rs @@ -9,8 +9,8 @@ use nix::fcntl::OFlag; use nix::pty::{self, PtyMaster}; use nix::fcntl::{fcntl, FcntlArg}; -use moa::error::Error; -use moa::host::traits::Tty; +use moa_core::Error; +use moa_core::host::Tty; pub struct SimplePty { diff --git a/emulator/frontends/console/Cargo.toml b/emulator/frontends/console/Cargo.toml new file mode 100644 index 0000000..3111a6d --- /dev/null +++ b/emulator/frontends/console/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "moa_console" +version = "0.1.0" +edition = "2018" +default-run = "moa-computie" + +[dependencies] +moa_core = { path = "../../core" } +moa_common = { path = "../common", features = ["tty"] } + +moa_genesis = { path = "../../systems/genesis" } +moa_computie = { path = "../../systems/computie" } +moa_m68k = { path = "../../cpus/m68k" } +moa_peripherals_generic = { path = "../../peripherals/generic" } +moa_peripherals_motorola = { path = "../../peripherals/motorola" } diff --git a/frontends/moa-console/src/bin/moa-bench.rs b/emulator/frontends/console/src/bin/moa-bench.rs similarity index 72% rename from frontends/moa-console/src/bin/moa-bench.rs rename to emulator/frontends/console/src/bin/moa-bench.rs index 0320404..c0fc52b 100644 --- a/frontends/moa-console/src/bin/moa-bench.rs +++ b/emulator/frontends/console/src/bin/moa-bench.rs @@ -2,30 +2,27 @@ use std::thread; use std::time::Duration; -use moa::error::Error; -use moa::system::System; -use moa::devices::wrap_transmutable; -use moa::memory::{MemoryBlock, BusPort}; +use moa_core::{System, Error, MemoryBlock, BusPort, wrap_transmutable}; -use moa::cpus::m68k::{M68k, M68kType}; -use moa::peripherals::ata::AtaDevice; -use moa::peripherals::mc68681::MC68681; +use moa_m68k::{M68k, M68kType}; +use moa_peripherals_generic::AtaDevice; +use moa_peripherals_motorola::MC68681; -use moa::machines::computie::build_computie; +use moa_computie::build_computie; fn main() { thread::spawn(|| { let mut system = System::new(); - let monitor = MemoryBlock::load("binaries/monitor.bin").unwrap(); + let monitor = MemoryBlock::load("binaries/computie/monitor.bin").unwrap(); system.add_addressable_device(0x00000000, wrap_transmutable(monitor)).unwrap(); let mut ram = MemoryBlock::new(vec![0; 0x00100000]); - ram.load_at(0, "binaries/kernel.bin").unwrap(); + ram.load_at(0, "binaries/computie/kernel.bin").unwrap(); system.add_addressable_device(0x00100000, wrap_transmutable(ram)).unwrap(); let mut ata = AtaDevice::new(); - ata.load("binaries/disk-with-partition-table.img").unwrap(); + ata.load("binaries/computie/disk-with-partition-table.img").unwrap(); system.add_addressable_device(0x00600000, wrap_transmutable(ata)).unwrap(); let mut serial = MC68681::new(); diff --git a/frontends/moa-console/src/bin/moa-computie.rs b/emulator/frontends/console/src/bin/moa-computie.rs similarity index 79% rename from frontends/moa-console/src/bin/moa-computie.rs rename to emulator/frontends/console/src/bin/moa-computie.rs index 7547f11..34f4fad 100644 --- a/frontends/moa-console/src/bin/moa-computie.rs +++ b/emulator/frontends/console/src/bin/moa-computie.rs @@ -1,6 +1,6 @@ use moa_console::ConsoleFrontend; -use moa::machines::computie::build_computie; +use moa_computie::build_computie; fn main() { let mut frontend = ConsoleFrontend; diff --git a/frontends/moa-console/src/lib.rs b/emulator/frontends/console/src/lib.rs similarity index 84% rename from frontends/moa-console/src/lib.rs rename to emulator/frontends/console/src/lib.rs index 0f85975..f9f95fc 100644 --- a/frontends/moa-console/src/lib.rs +++ b/emulator/frontends/console/src/lib.rs @@ -1,6 +1,6 @@ -use moa::error::Error; -use moa::host::traits::{Host, Tty, WindowUpdater}; +use moa_core::Error; +use moa_core::host::{Host, Tty, WindowUpdater}; pub struct ConsoleFrontend; diff --git a/emulator/frontends/minifb/Cargo.toml b/emulator/frontends/minifb/Cargo.toml new file mode 100644 index 0000000..4468ec9 --- /dev/null +++ b/emulator/frontends/minifb/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "moa_minifb" +version = "0.1.0" +edition = "2018" +default-run = "moa-genesis" + +[dependencies] +moa_core = { path = "../../core" } +moa_common = { path = "../common", features = ["audio"] } +minifb = "0.19" +clap = "3.2.20" + +moa_genesis = { path = "../../systems/genesis" } +moa_computie = { path = "../../systems/computie" } +moa_trs80 = { path = "../../systems/trs80" } +moa_macintosh = { path = "../../systems/macintosh" } +moa_peripherals_yamaha = { path = "../../peripherals/yamaha" } + diff --git a/frontends/moa-minifb/src/bin/moa-genesis.rs b/emulator/frontends/minifb/src/bin/moa-genesis.rs similarity index 88% rename from frontends/moa-minifb/src/bin/moa-genesis.rs rename to emulator/frontends/minifb/src/bin/moa-genesis.rs index b5b2e94..418c2f0 100644 --- a/frontends/moa-minifb/src/bin/moa-genesis.rs +++ b/emulator/frontends/minifb/src/bin/moa-genesis.rs @@ -2,7 +2,7 @@ use clap::Arg; use moa_minifb; -use moa::machines::genesis::{build_genesis, SegaGenesisOptions}; +use moa_genesis::{build_genesis, SegaGenesisOptions}; fn main() { let matches = moa_minifb::new("Sega Genesis/Mega Drive Emulator") diff --git a/frontends/moa-minifb/src/bin/moa-macintosh.rs b/emulator/frontends/minifb/src/bin/moa-macintosh.rs similarity index 80% rename from frontends/moa-minifb/src/bin/moa-macintosh.rs rename to emulator/frontends/minifb/src/bin/moa-macintosh.rs index b2c12e2..da83514 100644 --- a/frontends/moa-minifb/src/bin/moa-macintosh.rs +++ b/emulator/frontends/minifb/src/bin/moa-macintosh.rs @@ -1,6 +1,6 @@ use moa_minifb; -use moa::machines::macintosh::build_macintosh_512k; +use moa_macintosh::build_macintosh_512k; fn main() { let matches = moa_minifb::new("Macintosh 512k Emulator") diff --git a/frontends/moa-minifb/src/bin/moa-synth.rs b/emulator/frontends/minifb/src/bin/moa-synth.rs similarity index 89% rename from frontends/moa-minifb/src/bin/moa-synth.rs rename to emulator/frontends/minifb/src/bin/moa-synth.rs index ce9efd8..918c761 100644 --- a/frontends/moa-minifb/src/bin/moa-synth.rs +++ b/emulator/frontends/minifb/src/bin/moa-synth.rs @@ -2,15 +2,11 @@ use std::sync::mpsc; use moa_minifb; -use moa::peripherals::ym2612::{Ym2612}; -use moa::peripherals::sn76489::{Sn76489}; +use moa_peripherals_yamaha::{Ym2612, Sn76489}; -use moa::error::Error; -use moa::system::System; -use moa::host::gfx::Frame; -use moa::devices::{ClockElapsed, Address, Addressable, Steppable, Transmutable, TransmutableBox, wrap_transmutable}; -use moa::host::keys::{Key}; -use moa::host::traits::{Host, KeyboardUpdater}; +use moa_core::host::gfx::Frame; +use moa_core::host::{Host, KeyboardUpdater, Key}; +use moa_core::{System, Error, ClockElapsed, Address, Addressable, Steppable, Transmutable, TransmutableBox, wrap_transmutable}; pub struct SynthControlsUpdater(mpsc::Sender<(Key, bool)>); diff --git a/frontends/moa-minifb/src/bin/moa-trs80.rs b/emulator/frontends/minifb/src/bin/moa-trs80.rs similarity index 91% rename from frontends/moa-minifb/src/bin/moa-trs80.rs rename to emulator/frontends/minifb/src/bin/moa-trs80.rs index 40e4539..558aa64 100644 --- a/frontends/moa-minifb/src/bin/moa-trs80.rs +++ b/emulator/frontends/minifb/src/bin/moa-trs80.rs @@ -2,7 +2,7 @@ use clap::Arg; use moa_minifb; -use moa::machines::trs80::{build_trs80, Trs80Options}; +use moa_trs80::{build_trs80, Trs80Options}; fn main() { let matches = moa_minifb::new("TRS-80 Emulator") diff --git a/frontends/moa-minifb/src/controllers.rs b/emulator/frontends/minifb/src/controllers.rs similarity index 94% rename from frontends/moa-minifb/src/controllers.rs rename to emulator/frontends/minifb/src/controllers.rs index 9d90958..5983946 100644 --- a/frontends/moa-minifb/src/controllers.rs +++ b/emulator/frontends/minifb/src/controllers.rs @@ -1,6 +1,6 @@ use minifb::Key as MiniKey; -use moa::host::controllers::ControllerEvent; +use moa_core::host::ControllerEvent; pub fn map_controller_a(key: MiniKey, state: bool) -> Option { match key { diff --git a/frontends/moa-minifb/src/keys.rs b/emulator/frontends/minifb/src/keys.rs similarity index 99% rename from frontends/moa-minifb/src/keys.rs rename to emulator/frontends/minifb/src/keys.rs index e4eed00..84bdafd 100644 --- a/frontends/moa-minifb/src/keys.rs +++ b/emulator/frontends/minifb/src/keys.rs @@ -1,6 +1,6 @@ use minifb::Key as MiniKey; -use moa::host::keys::Key; +use moa_core::host::Key; pub fn map_key(key: MiniKey) -> Key { match key { diff --git a/frontends/moa-minifb/src/lib.rs b/emulator/frontends/minifb/src/lib.rs similarity index 97% rename from frontends/moa-minifb/src/lib.rs rename to emulator/frontends/minifb/src/lib.rs index 0589cef..a4e4eee 100644 --- a/frontends/moa-minifb/src/lib.rs +++ b/emulator/frontends/minifb/src/lib.rs @@ -7,11 +7,8 @@ use std::sync::{Arc, Mutex}; use minifb::{self, Key}; use clap::{App, Arg, ArgMatches}; -use moa::error::Error; -use moa::system::System; -use moa::devices::Clock; -use moa::host::traits::{Host, HostData, ControllerUpdater, KeyboardUpdater, WindowUpdater, Audio}; -use moa::host::controllers::ControllerDevice; +use moa_core::{System, Error, Clock}; +use moa_core::host::{Host, HostData, ControllerUpdater, KeyboardUpdater, WindowUpdater, Audio, ControllerDevice}; use moa_common::audio::{AudioOutput, AudioMixer, AudioSource}; diff --git a/emulator/peripherals/generic/Cargo.toml b/emulator/peripherals/generic/Cargo.toml new file mode 100644 index 0000000..53c2cea --- /dev/null +++ b/emulator/peripherals/generic/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "moa_peripherals_generic" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } diff --git a/src/peripherals/ata.rs b/emulator/peripherals/generic/src/ata.rs similarity index 98% rename from src/peripherals/ata.rs rename to emulator/peripherals/generic/src/ata.rs index 6065789..02a0c83 100644 --- a/src/peripherals/ata.rs +++ b/emulator/peripherals/generic/src/ata.rs @@ -1,8 +1,7 @@ use std::fs; -use crate::error::Error; -use crate::devices::{Address, Addressable, Transmutable}; +use moa_core::{Error, Address, Addressable, Transmutable, debug}; const ATA_REG_DATA_WORD: Address = 0x20; diff --git a/emulator/peripherals/generic/src/lib.rs b/emulator/peripherals/generic/src/lib.rs new file mode 100644 index 0000000..faaac5a --- /dev/null +++ b/emulator/peripherals/generic/src/lib.rs @@ -0,0 +1,4 @@ + +mod ata; +pub use crate::ata::AtaDevice; + diff --git a/emulator/peripherals/mos/Cargo.toml b/emulator/peripherals/mos/Cargo.toml new file mode 100644 index 0000000..61e00be --- /dev/null +++ b/emulator/peripherals/mos/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "moa_peripherals_mos" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } diff --git a/emulator/peripherals/mos/src/lib.rs b/emulator/peripherals/mos/src/lib.rs new file mode 100644 index 0000000..96fa480 --- /dev/null +++ b/emulator/peripherals/mos/src/lib.rs @@ -0,0 +1,4 @@ + +mod mos6522; +pub use crate::mos6522::Mos6522; + diff --git a/src/peripherals/mos6522.rs b/emulator/peripherals/mos/src/mos6522.rs similarity index 94% rename from src/peripherals/mos6522.rs rename to emulator/peripherals/mos/src/mos6522.rs index 35e0cd2..99afe44 100644 --- a/src/peripherals/mos6522.rs +++ b/emulator/peripherals/mos/src/mos6522.rs @@ -1,8 +1,5 @@ -use crate::error::Error; -use crate::system::System; -use crate::signals::{Signal, ObservableSignal, Observable}; -use crate::devices::{ClockElapsed, Address, Addressable, Steppable, Transmutable}; +use moa_core::{Error, System, ClockElapsed, Address, Addressable, Steppable, Transmutable, Signal, ObservableSignal, Observable, debug, warning}; const REG_OUTPUT_B: Address = 0x00; diff --git a/emulator/peripherals/motorola/Cargo.toml b/emulator/peripherals/motorola/Cargo.toml new file mode 100644 index 0000000..83df2c8 --- /dev/null +++ b/emulator/peripherals/motorola/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "moa_peripherals_motorola" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } diff --git a/emulator/peripherals/motorola/src/lib.rs b/emulator/peripherals/motorola/src/lib.rs new file mode 100644 index 0000000..6a03816 --- /dev/null +++ b/emulator/peripherals/motorola/src/lib.rs @@ -0,0 +1,4 @@ + +mod mc68681; +pub use crate::mc68681::MC68681; + diff --git a/src/peripherals/mc68681.rs b/emulator/peripherals/motorola/src/mc68681.rs similarity index 98% rename from src/peripherals/mc68681.rs rename to emulator/peripherals/motorola/src/mc68681.rs index d3e34ad..7636fd7 100644 --- a/src/peripherals/mc68681.rs +++ b/emulator/peripherals/motorola/src/mc68681.rs @@ -1,9 +1,6 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::{ClockElapsed, Address, Steppable, Addressable, Transmutable}; - -use crate::host::traits::Tty; +use moa_core::{System, Error, ClockElapsed, Address, Steppable, Addressable, Transmutable, debug}; +use moa_core::host::Tty; const REG_MR1A_MR2A: Address = 0x01; diff --git a/emulator/peripherals/yamaha/Cargo.toml b/emulator/peripherals/yamaha/Cargo.toml new file mode 100644 index 0000000..01b3fb5 --- /dev/null +++ b/emulator/peripherals/yamaha/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "moa_peripherals_yamaha" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } diff --git a/emulator/peripherals/yamaha/src/lib.rs b/emulator/peripherals/yamaha/src/lib.rs new file mode 100644 index 0000000..7ab3051 --- /dev/null +++ b/emulator/peripherals/yamaha/src/lib.rs @@ -0,0 +1,7 @@ + +mod sn76489; +pub use crate::sn76489::Sn76489; + +mod ym2612; +pub use crate::ym2612::Ym2612; + diff --git a/src/peripherals/sn76489.rs b/emulator/peripherals/yamaha/src/sn76489.rs similarity index 96% rename from src/peripherals/sn76489.rs rename to emulator/peripherals/yamaha/src/sn76489.rs index 9957942..8c6117d 100644 --- a/src/peripherals/sn76489.rs +++ b/emulator/peripherals/yamaha/src/sn76489.rs @@ -1,9 +1,8 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::{ClockElapsed, Address, Addressable, Steppable, Transmutable}; -use crate::host::audio::{SquareWave}; -use crate::host::traits::{Host, Audio}; +use moa_core::{info, warning, debug}; +use moa_core::{System, Error, ClockElapsed, Address, Addressable, Steppable, Transmutable}; +use moa_core::host::{Host, Audio}; +use moa_core::host::audio::{SquareWave}; const DEV_NAME: &'static str = "sn76489"; diff --git a/src/peripherals/ym2612.rs b/emulator/peripherals/yamaha/src/ym2612.rs similarity index 98% rename from src/peripherals/ym2612.rs rename to emulator/peripherals/yamaha/src/ym2612.rs index 8e63a4c..14cfb93 100644 --- a/src/peripherals/ym2612.rs +++ b/emulator/peripherals/yamaha/src/ym2612.rs @@ -1,11 +1,10 @@ use std::num::NonZeroU8; -use crate::error::Error; -use crate::system::System; -use crate::devices::{ClockElapsed, Address, Addressable, Steppable, Transmutable}; -use crate::host::audio::{SineWave}; -use crate::host::traits::{Host, Audio}; +use moa_core::{debug, warning}; +use moa_core::{System, Error, ClockElapsed, Address, Addressable, Steppable, Transmutable}; +use moa_core::host::{Host, Audio}; +use moa_core::host::audio::{SineWave}; const DEV_NAME: &'static str = "ym2612"; diff --git a/emulator/peripherals/zilog/Cargo.toml b/emulator/peripherals/zilog/Cargo.toml new file mode 100644 index 0000000..70a518d --- /dev/null +++ b/emulator/peripherals/zilog/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "moa_peripherals_zilog" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } diff --git a/emulator/peripherals/zilog/src/lib.rs b/emulator/peripherals/zilog/src/lib.rs new file mode 100644 index 0000000..18ea3fa --- /dev/null +++ b/emulator/peripherals/zilog/src/lib.rs @@ -0,0 +1,4 @@ + +mod z8530; +pub use crate::z8530::Z8530; + diff --git a/src/peripherals/z8530.rs b/emulator/peripherals/zilog/src/z8530.rs similarity index 90% rename from src/peripherals/z8530.rs rename to emulator/peripherals/zilog/src/z8530.rs index 673b80c..7e94722 100644 --- a/src/peripherals/z8530.rs +++ b/emulator/peripherals/zilog/src/z8530.rs @@ -1,7 +1,5 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::{ClockElapsed, Address, Addressable, Steppable, Transmutable}; +use moa_core::{System, Error, ClockElapsed, Address, Addressable, Steppable, Transmutable, warning, debug}; const DEV_NAME: &'static str = "z8530"; diff --git a/emulator/systems/computie/Cargo.toml b/emulator/systems/computie/Cargo.toml new file mode 100644 index 0000000..fe6f4b5 --- /dev/null +++ b/emulator/systems/computie/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "moa_computie" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } +moa_m68k = { path = "../../cpus/m68k" } +moa_peripherals_generic = { path = "../../peripherals/generic" } +moa_peripherals_motorola = { path = "../../peripherals/motorola" } diff --git a/emulator/systems/computie/src/lib.rs b/emulator/systems/computie/src/lib.rs new file mode 100644 index 0000000..79d0906 --- /dev/null +++ b/emulator/systems/computie/src/lib.rs @@ -0,0 +1,4 @@ + +mod system; +pub use crate::system::{build_computie, build_computie_k30, launch_terminal_emulator, launch_slip_connection}; + diff --git a/src/machines/computie.rs b/emulator/systems/computie/src/system.rs similarity index 92% rename from src/machines/computie.rs rename to emulator/systems/computie/src/system.rs index 8d128d2..ba3bd47 100644 --- a/src/machines/computie.rs +++ b/emulator/systems/computie/src/system.rs @@ -1,14 +1,10 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::{Debuggable, wrap_transmutable}; -use crate::memory::{MemoryBlock, BusPort}; +use moa_core::{System, Error, Debuggable, MemoryBlock, BusPort, wrap_transmutable}; +use moa_core::host::Host; -use crate::cpus::m68k::{M68k, M68kType}; -use crate::peripherals::ata::AtaDevice; -use crate::peripherals::mc68681::MC68681; - -use crate::host::traits::Host; +use moa_m68k::{M68k, M68kType}; +use moa_peripherals_generic::AtaDevice; +use moa_peripherals_motorola::MC68681; pub fn build_computie(host: &H) -> Result { diff --git a/emulator/systems/genesis/Cargo.toml b/emulator/systems/genesis/Cargo.toml new file mode 100644 index 0000000..d7b0bc8 --- /dev/null +++ b/emulator/systems/genesis/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "moa_genesis" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } +moa_peripherals_yamaha = { path = "../../peripherals/yamaha" } +moa_m68k = { path = "../../cpus/m68k" } +moa_z80 = { path = "../../cpus/z80" } + diff --git a/emulator/systems/genesis/src/lib.rs b/emulator/systems/genesis/src/lib.rs new file mode 100644 index 0000000..2de56d8 --- /dev/null +++ b/emulator/systems/genesis/src/lib.rs @@ -0,0 +1,6 @@ + +pub mod peripherals; + +mod system; +pub use crate::system::{SegaGenesisOptions, build_genesis}; + diff --git a/src/peripherals/genesis/controllers.rs b/emulator/systems/genesis/src/peripherals/controllers.rs similarity index 96% rename from src/peripherals/genesis/controllers.rs rename to emulator/systems/genesis/src/peripherals/controllers.rs index a079cd7..a06e2ae 100644 --- a/src/peripherals/genesis/controllers.rs +++ b/emulator/systems/genesis/src/peripherals/controllers.rs @@ -1,9 +1,7 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::{Clock, ClockElapsed, Address, Addressable, Steppable, Transmutable}; -use crate::host::controllers::{ControllerDevice, ControllerEvent}; -use crate::host::traits::{Host, ControllerUpdater, HostData}; +use moa_core::{warning, info}; +use moa_core::{System, Error, Clock, ClockElapsed, Address, Addressable, Steppable, Transmutable}; +use moa_core::host::{Host, ControllerUpdater, HostData, ControllerDevice, ControllerEvent}; const REG_VERSION: Address = 0x01; diff --git a/src/peripherals/genesis/coprocessor.rs b/emulator/systems/genesis/src/peripherals/coprocessor.rs similarity index 96% rename from src/peripherals/genesis/coprocessor.rs rename to emulator/systems/genesis/src/peripherals/coprocessor.rs index 211b48d..545af2a 100644 --- a/src/peripherals/genesis/coprocessor.rs +++ b/emulator/systems/genesis/src/peripherals/coprocessor.rs @@ -2,10 +2,8 @@ use std::rc::Rc; use std::cell::RefCell; -use crate::memory::Bus; -use crate::error::Error; -use crate::signals::Signal; -use crate::devices::{Address, Addressable, Transmutable}; +use moa_core::{warning, info}; +use moa_core::{Bus, Signal, Error, Address, Addressable, Transmutable}; const DEV_NAME: &'static str = "coprocessor"; diff --git a/src/peripherals/genesis/mod.rs b/emulator/systems/genesis/src/peripherals/mod.rs similarity index 100% rename from src/peripherals/genesis/mod.rs rename to emulator/systems/genesis/src/peripherals/mod.rs diff --git a/src/peripherals/genesis/ym7101.rs b/emulator/systems/genesis/src/peripherals/ym7101.rs similarity index 98% rename from src/peripherals/genesis/ym7101.rs rename to emulator/systems/genesis/src/peripherals/ym7101.rs index ade6f6c..f2c768c 100644 --- a/src/peripherals/genesis/ym7101.rs +++ b/emulator/systems/genesis/src/peripherals/ym7101.rs @@ -1,11 +1,8 @@ -use crate::error::Error; -use crate::system::System; -use crate::memory::dump_slice; -use crate::signals::{EdgeSignal}; -use crate::devices::{Clock, ClockElapsed, Address, Addressable, Steppable, Inspectable, Transmutable, TransmutableBox, read_beu16}; -use crate::host::traits::{Host, BlitableSurface, HostData}; -use crate::host::gfx::{Frame, FrameSwapper}; +use moa_core::{debug, warning, error}; +use moa_core::{System, Error, EdgeSignal, Clock, ClockElapsed, Address, Addressable, Steppable, Inspectable, Transmutable, TransmutableBox, read_beu16, dump_slice}; +use moa_core::host::{Host, BlitableSurface, HostData}; +use moa_core::host::gfx::{Frame, FrameSwapper}; const REG_MODE_SET_1: usize = 0x00; diff --git a/src/machines/genesis.rs b/emulator/systems/genesis/src/system.rs similarity index 85% rename from src/machines/genesis.rs rename to emulator/systems/genesis/src/system.rs index c467c11..9cd8b7c 100644 --- a/src/machines/genesis.rs +++ b/emulator/systems/genesis/src/system.rs @@ -2,20 +2,17 @@ use std::rc::Rc; use std::cell::RefCell; -use crate::error::Error; -use crate::system::System; -use crate::signals::{Signal}; -use crate::memory::{MemoryBlock, Bus, BusPort}; -use crate::devices::{wrap_transmutable, Address, Addressable, Debuggable}; +use moa_core::{System, Error, Signal, MemoryBlock, Bus, BusPort, Address, Addressable, Debuggable, wrap_transmutable}; +use moa_core::host::Host; -use crate::cpus::m68k::{M68k, M68kType}; -use crate::cpus::z80::{Z80, Z80Type}; -use crate::peripherals::ym2612::Ym2612; -use crate::peripherals::sn76489::Sn76489; -use crate::peripherals::genesis; -use crate::peripherals::genesis::coprocessor::{CoprocessorBankRegister, CoprocessorBankArea}; +use moa_m68k::{M68k, M68kType}; +use moa_z80::{Z80, Z80Type}; +use moa_peripherals_yamaha::Ym2612; +use moa_peripherals_yamaha::Sn76489; -use crate::host::traits::{Host}; +use crate::peripherals::ym7101::Ym7101; +use crate::peripherals::controllers::GenesisControllers; +use crate::peripherals::coprocessor::{CoprocessorCoordinator, CoprocessorBankRegister, CoprocessorBankArea}; pub struct SegaGenesisOptions { @@ -91,14 +88,14 @@ pub fn build_genesis(host: &mut H, options: SegaGenesisOptions) -> Resu system.add_device("coproc", wrap_transmutable(coproc))?; - let controllers = genesis::controllers::GenesisControllers::create(host)?; + let controllers = GenesisControllers::create(host)?; let interrupt = controllers.get_interrupt_signal(); system.add_addressable_device(0x00a10000, wrap_transmutable(controllers)).unwrap(); - let coproc = genesis::coprocessor::CoprocessorCoordinator::new(reset, bus_request); + let coproc = CoprocessorCoordinator::new(reset, bus_request); system.add_addressable_device(0x00a11000, wrap_transmutable(coproc)).unwrap(); - let vdp = genesis::ym7101::Ym7101::new(host, interrupt, coproc_sn_sound); + let vdp = Ym7101::new(host, interrupt, coproc_sn_sound); system.break_signal = Some(vdp.frame_complete.clone()); system.add_peripheral("vdp", 0x00c00000, wrap_transmutable(vdp)).unwrap(); diff --git a/emulator/systems/macintosh/Cargo.toml b/emulator/systems/macintosh/Cargo.toml new file mode 100644 index 0000000..6b4f8ca --- /dev/null +++ b/emulator/systems/macintosh/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "moa_macintosh" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } +moa_m68k = { path = "../../cpus/m68k" } +moa_peripherals_mos = { path = "../../peripherals/mos" } +moa_peripherals_zilog = { path = "../../peripherals/zilog" } diff --git a/emulator/systems/macintosh/src/lib.rs b/emulator/systems/macintosh/src/lib.rs new file mode 100644 index 0000000..c195df6 --- /dev/null +++ b/emulator/systems/macintosh/src/lib.rs @@ -0,0 +1,6 @@ + +pub mod peripherals; + +mod system; +pub use crate::system::{build_macintosh_512k}; + diff --git a/src/peripherals/macintosh/iwm.rs b/emulator/systems/macintosh/src/peripherals/iwm.rs similarity index 95% rename from src/peripherals/macintosh/iwm.rs rename to emulator/systems/macintosh/src/peripherals/iwm.rs index ee8c59e..794d7ea 100644 --- a/src/peripherals/macintosh/iwm.rs +++ b/emulator/systems/macintosh/src/peripherals/iwm.rs @@ -1,7 +1,5 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::{ClockElapsed, Address, Addressable, Steppable, Transmutable}; +use moa_core::{System, Error, ClockElapsed, Address, Addressable, Steppable, Transmutable, info, warning}; //const CA0: u8 = 0x01; diff --git a/src/peripherals/macintosh/mainboard.rs b/emulator/systems/macintosh/src/peripherals/mainboard.rs similarity index 94% rename from src/peripherals/macintosh/mainboard.rs rename to emulator/systems/macintosh/src/peripherals/mainboard.rs index bc77f35..f4e1e93 100644 --- a/src/peripherals/macintosh/mainboard.rs +++ b/emulator/systems/macintosh/src/peripherals/mainboard.rs @@ -2,15 +2,11 @@ use std::rc::Rc; use std::cell::RefCell; -use crate::memory::Bus; -use crate::error::Error; -use crate::system::System; -use crate::signals::Observable; -use crate::devices::{Clock, ClockElapsed, Address, Addressable, Steppable, Transmutable, TransmutableBox, wrap_transmutable}; +use moa_core::{System, Bus, Error, Observable, Clock, ClockElapsed, Address, Addressable, Steppable, Transmutable, TransmutableBox, wrap_transmutable}; -use crate::peripherals::z8530::Z8530; -use crate::peripherals::mos6522::Mos6522; -use crate::peripherals::macintosh::iwm::IWM; +use moa_peripherals_mos::Mos6522; +use moa_peripherals_zilog::Z8530; +use crate::peripherals::iwm::IWM; const DEV_NAME: &'static str = "mac"; diff --git a/src/peripherals/macintosh/mod.rs b/emulator/systems/macintosh/src/peripherals/mod.rs similarity index 100% rename from src/peripherals/macintosh/mod.rs rename to emulator/systems/macintosh/src/peripherals/mod.rs diff --git a/src/peripherals/macintosh/video.rs b/emulator/systems/macintosh/src/peripherals/video.rs similarity index 87% rename from src/peripherals/macintosh/video.rs rename to emulator/systems/macintosh/src/peripherals/video.rs index 606b3fd..50e6664 100644 --- a/src/peripherals/macintosh/video.rs +++ b/emulator/systems/macintosh/src/peripherals/video.rs @@ -1,12 +1,9 @@ use std::sync::{Arc, Mutex}; -use crate::error::Error; -use crate::system::System; -use crate::devices::{ClockElapsed, Address, Addressable, Steppable, Transmutable}; - -use crate::host::gfx::Frame; -use crate::host::traits::{Host, BlitableSurface}; +use moa_core::{System, Error, ClockElapsed, Address, Addressable, Steppable, Transmutable}; +use moa_core::host::gfx::Frame; +use moa_core::host::{Host, BlitableSurface}; const SCRN_BASE: u32 = 0x07A700; diff --git a/src/machines/macintosh.rs b/emulator/systems/macintosh/src/system.rs similarity index 93% rename from src/machines/macintosh.rs rename to emulator/systems/macintosh/src/system.rs index b8cb737..aeda5be 100644 --- a/src/machines/macintosh.rs +++ b/emulator/systems/macintosh/src/system.rs @@ -1,14 +1,11 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::{wrap_transmutable, Debuggable}; -use crate::memory::{MemoryBlock, BusPort}; +use moa_core::{System, Error, MemoryBlock, BusPort, Debuggable, wrap_transmutable}; +use moa_core::host::Host; -use crate::cpus::m68k::{M68k, M68kType}; -use crate::peripherals::macintosh::video::MacVideo; -use crate::peripherals::macintosh::mainboard::Mainboard; +use moa_m68k::{M68k, M68kType}; -use crate::host::traits::Host; +use crate::peripherals::video::MacVideo; +use crate::peripherals::mainboard::Mainboard; pub fn build_macintosh_512k(host: &mut H) -> Result { diff --git a/emulator/systems/trs80/Cargo.toml b/emulator/systems/trs80/Cargo.toml new file mode 100644 index 0000000..f484d36 --- /dev/null +++ b/emulator/systems/trs80/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "moa_trs80" +version = "0.1.0" +edition = "2021" + +[dependencies] +moa_core = { path = "../../core" } +moa_z80 = { path = "../../cpus/z80" } + diff --git a/emulator/systems/trs80/src/lib.rs b/emulator/systems/trs80/src/lib.rs new file mode 100644 index 0000000..09ba313 --- /dev/null +++ b/emulator/systems/trs80/src/lib.rs @@ -0,0 +1,6 @@ + +pub mod peripherals; + +mod system; +pub use crate::system::{Trs80Options, build_trs80}; + diff --git a/src/peripherals/trs80/charset.rs b/emulator/systems/trs80/src/peripherals/charset.rs similarity index 100% rename from src/peripherals/trs80/charset.rs rename to emulator/systems/trs80/src/peripherals/charset.rs diff --git a/src/peripherals/trs80/keymap.rs b/emulator/systems/trs80/src/peripherals/keymap.rs similarity index 99% rename from src/peripherals/trs80/keymap.rs rename to emulator/systems/trs80/src/peripherals/keymap.rs index 076b95b..13ba79d 100644 --- a/src/peripherals/trs80/keymap.rs +++ b/emulator/systems/trs80/src/peripherals/keymap.rs @@ -1,5 +1,5 @@ -use crate::host::keys::Key; +use moa_core::host::Key; #[inline(always)] pub fn set_bit(data: &mut [u8; 8], index: usize, bit: u8, state: bool) { diff --git a/src/peripherals/trs80/mod.rs b/emulator/systems/trs80/src/peripherals/mod.rs similarity index 100% rename from src/peripherals/trs80/mod.rs rename to emulator/systems/trs80/src/peripherals/mod.rs diff --git a/src/peripherals/trs80/model1.rs b/emulator/systems/trs80/src/peripherals/model1.rs similarity index 93% rename from src/peripherals/trs80/model1.rs rename to emulator/systems/trs80/src/peripherals/model1.rs index f7aece4..739cca0 100644 --- a/src/peripherals/trs80/model1.rs +++ b/emulator/systems/trs80/src/peripherals/model1.rs @@ -1,13 +1,9 @@ use std::sync::{Arc, Mutex}; -use crate::error::Error; -use crate::system::System; -use crate::devices::{ClockElapsed, Address, Addressable, Steppable, Transmutable}; - -use crate::host::keys::Key; -use crate::host::gfx::{Frame}; -use crate::host::traits::{Host, BlitableSurface, KeyboardUpdater}; +use moa_core::{System, Error, ClockElapsed, Address, Addressable, Steppable, Transmutable, debug, warning}; +use moa_core::host::gfx::Frame; +use moa_core::host::{Host, BlitableSurface, KeyboardUpdater, Key}; use super::keymap; use super::charset::CharacterGenerator; diff --git a/src/machines/trs80.rs b/emulator/systems/trs80/src/system.rs similarity index 88% rename from src/machines/trs80.rs rename to emulator/systems/trs80/src/system.rs index a2473ad..4504f9f 100644 --- a/src/machines/trs80.rs +++ b/emulator/systems/trs80/src/system.rs @@ -1,13 +1,11 @@ -use crate::error::Error; -use crate::system::System; -use crate::devices::wrap_transmutable; -use crate::memory::{MemoryBlock, BusPort}; +use moa_core::{System, Error, MemoryBlock, BusPort, wrap_transmutable}; +use moa_core::host::Host; -use crate::cpus::z80::{Z80, Z80Type}; -use crate::peripherals::trs80; +use moa_z80::{Z80, Z80Type}; + +use crate::peripherals::model1::Model1Peripherals; -use crate::host::traits::Host; pub struct Trs80Options { pub rom: String, @@ -39,7 +37,7 @@ pub fn build_trs80(host: &mut H, options: Trs80Options) -> Result