From 2b8281157eb7f62eec6082bdc53f22a09ac3b3b0 Mon Sep 17 00:00:00 2001 From: zxq5 Date: Sun, 15 Jun 2025 21:40:43 +0100 Subject: [PATCH] refactor 2 electric boogaloo --- Cargo.lock | 34 +++++++++++-------- Cargo.toml | 18 ++++------ assembler/Cargo.toml | 7 ++++ assembler/src/lib.rs | 14 ++++++++ common/Cargo.toml | 7 ++++ {src/common => common/src}/instructions.rs | 2 +- .../src}/instructions/args.rs | 6 ++-- .../src}/instructions/encode.rs | 2 +- .../src}/instructions/encode/tests.rs | 2 +- .../src}/instructions/errors.rs | 2 +- .../src}/instructions/tests.rs | 2 +- common/src/lib.rs | 22 ++++++++++++ emulator/Cargo.toml | 14 ++++++++ {src => emulator/src}/emulator/mod.rs | 0 .../src}/emulator/system/emulator.rs | 11 +++--- .../src}/emulator/system/memory.rs | 0 {src => emulator/src}/emulator/system/mod.rs | 0 .../src}/emulator/system/model.rs | 2 +- .../src}/emulator/system/processor/mod.rs | 13 +++---- .../src}/emulator/system/processor/tests.rs | 11 +++--- .../src}/emulator/ui/control_unit.rs | 11 +++--- {src => emulator/src}/emulator/ui/editor.rs | 0 .../src}/emulator/ui/interface.rs | 0 .../src}/emulator/ui/memory_inspector.rs | 0 {src => emulator/src}/emulator/ui/menu.rs | 0 {src => emulator/src}/emulator/ui/mod.rs | 0 .../src}/emulator/ui/stack_inspector.rs | 7 ++-- {src => emulator/src}/lib.rs | 1 - {src => emulator/src}/main.rs | 0 src/common/mod.rs | 8 ----- 30 files changed, 125 insertions(+), 71 deletions(-) create mode 100644 assembler/Cargo.toml create mode 100644 assembler/src/lib.rs create mode 100644 common/Cargo.toml rename {src/common => common/src}/instructions.rs (99%) rename {src/common => common/src}/instructions/args.rs (97%) rename {src/common => common/src}/instructions/encode.rs (98%) rename {src/common => common/src}/instructions/encode/tests.rs (98%) rename {src/common => common/src}/instructions/errors.rs (98%) rename {src/common => common/src}/instructions/tests.rs (99%) create mode 100644 common/src/lib.rs create mode 100644 emulator/Cargo.toml rename {src => emulator/src}/emulator/mod.rs (100%) rename {src => emulator/src}/emulator/system/emulator.rs (96%) rename {src => emulator/src}/emulator/system/memory.rs (100%) rename {src => emulator/src}/emulator/system/mod.rs (100%) rename {src => emulator/src}/emulator/system/model.rs (99%) rename {src => emulator/src}/emulator/system/processor/mod.rs (98%) rename {src => emulator/src}/emulator/system/processor/tests.rs (98%) rename {src => emulator/src}/emulator/ui/control_unit.rs (96%) rename {src => emulator/src}/emulator/ui/editor.rs (100%) rename {src => emulator/src}/emulator/ui/interface.rs (100%) rename {src => emulator/src}/emulator/ui/memory_inspector.rs (100%) rename {src => emulator/src}/emulator/ui/menu.rs (100%) rename {src => emulator/src}/emulator/ui/mod.rs (100%) rename {src => emulator/src}/emulator/ui/stack_inspector.rs (94%) rename {src => emulator/src}/lib.rs (94%) rename {src => emulator/src}/main.rs (100%) delete mode 100644 src/common/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 18a039f..a4fdd04 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -231,6 +231,10 @@ dependencies = [ "zbus 5.7.1", ] +[[package]] +name = "assembler" +version = "0.2.0" + [[package]] name = "async-broadcast" version = "0.7.2" @@ -656,6 +660,10 @@ dependencies = [ "memchr", ] +[[package]] +name = "common" +version = "0.2.0" + [[package]] name = "concurrent-queue" version = "2.5.0" @@ -755,15 +763,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f" -[[package]] -name = "damn_simple_architecture" -version = "0.1.0" -dependencies = [ - "eframe", - "egui", - "rfd", -] - [[package]] name = "digest" version = "0.10.7" @@ -972,6 +971,16 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "emulator" +version = "0.1.0" +dependencies = [ + "common", + "eframe", + "egui", + "rfd", +] + [[package]] name = "endi" version = "1.1.0" @@ -2643,12 +2652,9 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" [[package]] name = "slab" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" -dependencies = [ - "autocfg", -] +checksum = "04dc19736151f35336d325007ac991178d504a119863a2fcb3758cdb5e52c50d" [[package]] name = "slotmap" diff --git a/Cargo.toml b/Cargo.toml index 3967a9d..a7fb44b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,13 +1,7 @@ -[package] -name = "damn_simple_architecture" -version = "0.1.0" +[workspace] +members = ["emulator", "common", "assembler"] + +[workspace.package] +version = "0.2.0" edition = "2024" - -[lib] -name = "dsa_rs" -path = "src/lib.rs" - -[dependencies] -eframe = "0.31.1" -egui = "0.31.1" -rfd = "0.15.3" +authors = ["zxq5", "nullndvoid"] \ No newline at end of file diff --git a/assembler/Cargo.toml b/assembler/Cargo.toml new file mode 100644 index 0000000..6e1cb35 --- /dev/null +++ b/assembler/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "assembler" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[dependencies] diff --git a/assembler/src/lib.rs b/assembler/src/lib.rs new file mode 100644 index 0000000..b93cf3f --- /dev/null +++ b/assembler/src/lib.rs @@ -0,0 +1,14 @@ +pub fn add(left: u64, right: u64) -> u64 { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +} diff --git a/common/Cargo.toml b/common/Cargo.toml new file mode 100644 index 0000000..6d649a5 --- /dev/null +++ b/common/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "common" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[dependencies] diff --git a/src/common/instructions.rs b/common/src/instructions.rs similarity index 99% rename from src/common/instructions.rs rename to common/src/instructions.rs index 598599a..609bea8 100644 --- a/src/common/instructions.rs +++ b/common/src/instructions.rs @@ -1,4 +1,4 @@ -use crate::common::{instructions::encode::Encode, prelude::*}; +use crate::{instructions::encode::Encode, prelude::*}; #[derive(Copy, Clone, Debug, PartialEq, Eq)] pub enum Interrupt { diff --git a/src/common/instructions/args.rs b/common/src/instructions/args.rs similarity index 97% rename from src/common/instructions/args.rs rename to common/src/instructions/args.rs index c796958..471ee3c 100644 --- a/src/common/instructions/args.rs +++ b/common/src/instructions/args.rs @@ -1,7 +1,9 @@ //! Various types of arguments that instructions can take, alongside encoding and decoding logic. -use crate::common::instructions::Encode; -use crate::common::prelude::*; +use crate::{ + instructions::{RegisterParseError, encode::Encode}, + prelude::Register, +}; /// A list of errors that can be returned when decoding instruction arguments. #[derive(Debug)] diff --git a/src/common/instructions/encode.rs b/common/src/instructions/encode.rs similarity index 98% rename from src/common/instructions/encode.rs rename to common/src/instructions/encode.rs index 0d9a7cb..d7b6b32 100644 --- a/src/common/instructions/encode.rs +++ b/common/src/instructions/encode.rs @@ -1,4 +1,4 @@ -use crate::common::prelude::*; +use crate::prelude::*; /// Not to be used directly, just call [`Instruction::encode`]. pub trait Encode { diff --git a/src/common/instructions/encode/tests.rs b/common/src/instructions/encode/tests.rs similarity index 98% rename from src/common/instructions/encode/tests.rs rename to common/src/instructions/encode/tests.rs index afd7eeb..c39be2a 100644 --- a/src/common/instructions/encode/tests.rs +++ b/common/src/instructions/encode/tests.rs @@ -1,4 +1,4 @@ -use crate::common::prelude::*; +use crate::prelude::*; #[test] fn test_encode_nop() { diff --git a/src/common/instructions/errors.rs b/common/src/instructions/errors.rs similarity index 98% rename from src/common/instructions/errors.rs rename to common/src/instructions/errors.rs index fe99bdb..ae70904 100644 --- a/src/common/instructions/errors.rs +++ b/common/src/instructions/errors.rs @@ -1,6 +1,6 @@ //! All the errors that may be returned from [`instructions`]. -use crate::common::prelude::*; +use crate::prelude::*; #[derive(Debug)] /// Error type for parsing register numbers. diff --git a/src/common/instructions/tests.rs b/common/src/instructions/tests.rs similarity index 99% rename from src/common/instructions/tests.rs rename to common/src/instructions/tests.rs index fe2f22f..dcda497 100644 --- a/src/common/instructions/tests.rs +++ b/common/src/instructions/tests.rs @@ -1,5 +1,5 @@ #![allow(clippy::unwrap_used)] -use crate::common::prelude::*; +use crate::prelude::*; #[test] fn test_opcode_nop() { diff --git a/common/src/lib.rs b/common/src/lib.rs new file mode 100644 index 0000000..f1bc305 --- /dev/null +++ b/common/src/lib.rs @@ -0,0 +1,22 @@ +#![deny( + clippy::unwrap_used, + clippy::nursery, + clippy::perf, + clippy::pedantic, + clippy::complexity +)] +#![allow( + clippy::cast_possible_truncation, + clippy::missing_panics_doc, + clippy::missing_errors_doc, + clippy::match_wildcard_for_single_variants +)] + +pub mod instructions; + +pub mod prelude { + //! A collection of types you should definitely import when working with this crate. + pub use super::instructions::{ + Address, Instruction, InstructionType, Interrupt, Register, args::*, errors::*, + }; +} diff --git a/emulator/Cargo.toml b/emulator/Cargo.toml new file mode 100644 index 0000000..edd81b5 --- /dev/null +++ b/emulator/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "emulator" +version = "0.1.0" +edition = "2024" + +[lib] +name = "dsa_rs" +path = "src/lib.rs" + +[dependencies] +common = { path = "../common" } +eframe = "0.31.1" +egui = "0.31.1" +rfd = "0.15.3" \ No newline at end of file diff --git a/src/emulator/mod.rs b/emulator/src/emulator/mod.rs similarity index 100% rename from src/emulator/mod.rs rename to emulator/src/emulator/mod.rs diff --git a/src/emulator/system/emulator.rs b/emulator/src/emulator/system/emulator.rs similarity index 96% rename from src/emulator/system/emulator.rs rename to emulator/src/emulator/system/emulator.rs index 7fa283e..d5925ac 100644 --- a/src/emulator/system/emulator.rs +++ b/emulator/src/emulator/system/emulator.rs @@ -7,14 +7,13 @@ use std::{ time::Duration, }; -use crate::{ - common::instructions::{Instruction, Register}, - emulator::system::{ - model::{Command, Running, State}, - processor::Processor, - }, +use crate::emulator::system::{ + model::{Command, Running, State}, + processor::Processor, }; +use common::instructions::{Instruction, Register}; + pub fn run_emulator( cmd_rx: &Receiver, state_tx: &Sender, diff --git a/src/emulator/system/memory.rs b/emulator/src/emulator/system/memory.rs similarity index 100% rename from src/emulator/system/memory.rs rename to emulator/src/emulator/system/memory.rs diff --git a/src/emulator/system/mod.rs b/emulator/src/emulator/system/mod.rs similarity index 100% rename from src/emulator/system/mod.rs rename to emulator/src/emulator/system/mod.rs diff --git a/src/emulator/system/model.rs b/emulator/src/emulator/system/model.rs similarity index 99% rename from src/emulator/system/model.rs rename to emulator/src/emulator/system/model.rs index 91e8d65..305d123 100644 --- a/src/emulator/system/model.rs +++ b/emulator/src/emulator/system/model.rs @@ -1,4 +1,4 @@ -use crate::common::prelude::*; +use common::prelude::*; #[derive(PartialEq, Eq, Debug, Clone, Copy)] pub enum Running { diff --git a/src/emulator/system/processor/mod.rs b/emulator/src/emulator/system/processor/mod.rs similarity index 98% rename from src/emulator/system/processor/mod.rs rename to emulator/src/emulator/system/processor/mod.rs index 6cdc983..8d31427 100644 --- a/src/emulator/system/processor/mod.rs +++ b/emulator/src/emulator/system/processor/mod.rs @@ -3,14 +3,13 @@ use std::{ sync::Arc, }; -use crate::{ - common::instructions::{Instruction, Interrupt, Register, errors::InstructionDecodeError}, - emulator::system::{ - memory::MemoryUnit, - model::{IODevice, RegFile}, - }, +use crate::emulator::system::{ + memory::MemoryUnit, + model::{IODevice, RegFile}, }; +use common::instructions::{Instruction, Interrupt, Register, errors::InstructionDecodeError}; + pub struct Processor { pub memory: Box, pub registers: RegFile, @@ -356,6 +355,8 @@ impl Executable for Instruction { Self::Halt => { cpu.halted = true; } + + _ => todo!(), } } } diff --git a/src/emulator/system/processor/tests.rs b/emulator/src/emulator/system/processor/tests.rs similarity index 98% rename from src/emulator/system/processor/tests.rs rename to emulator/src/emulator/system/processor/tests.rs index fd8d8fa..99a09ca 100644 --- a/src/emulator/system/processor/tests.rs +++ b/emulator/src/emulator/system/processor/tests.rs @@ -1,10 +1,9 @@ use super::*; -use crate::{ - common::instructions::{ - args::{ITypeArgs, RTypeArgs}, - *, - }, - emulator::system::memory::*, +use crate::emulator::system::memory::*; + +use common::instructions::{ + args::{ITypeArgs, RTypeArgs}, + *, }; fn create_test_processor() -> Processor { diff --git a/src/emulator/ui/control_unit.rs b/emulator/src/emulator/ui/control_unit.rs similarity index 96% rename from src/emulator/ui/control_unit.rs rename to emulator/src/emulator/ui/control_unit.rs index d235a6b..10cf86d 100644 --- a/src/emulator/ui/control_unit.rs +++ b/emulator/src/emulator/ui/control_unit.rs @@ -1,13 +1,12 @@ use std::sync::mpsc::Sender; -use crate::{ - common::instructions::Register, - emulator::{ - system::model::{Command, Running, State}, - ui::interface::Component, - }, +use crate::emulator::{ + system::model::{Command, Running, State}, + ui::interface::Component, }; +use common::instructions::Register; + pub struct ControlPanel { visible: bool, sender: Sender, diff --git a/src/emulator/ui/editor.rs b/emulator/src/emulator/ui/editor.rs similarity index 100% rename from src/emulator/ui/editor.rs rename to emulator/src/emulator/ui/editor.rs diff --git a/src/emulator/ui/interface.rs b/emulator/src/emulator/ui/interface.rs similarity index 100% rename from src/emulator/ui/interface.rs rename to emulator/src/emulator/ui/interface.rs diff --git a/src/emulator/ui/memory_inspector.rs b/emulator/src/emulator/ui/memory_inspector.rs similarity index 100% rename from src/emulator/ui/memory_inspector.rs rename to emulator/src/emulator/ui/memory_inspector.rs diff --git a/src/emulator/ui/menu.rs b/emulator/src/emulator/ui/menu.rs similarity index 100% rename from src/emulator/ui/menu.rs rename to emulator/src/emulator/ui/menu.rs diff --git a/src/emulator/ui/mod.rs b/emulator/src/emulator/ui/mod.rs similarity index 100% rename from src/emulator/ui/mod.rs rename to emulator/src/emulator/ui/mod.rs diff --git a/src/emulator/ui/stack_inspector.rs b/emulator/src/emulator/ui/stack_inspector.rs similarity index 94% rename from src/emulator/ui/stack_inspector.rs rename to emulator/src/emulator/ui/stack_inspector.rs index 5401321..452eaf2 100644 --- a/src/emulator/ui/stack_inspector.rs +++ b/emulator/src/emulator/ui/stack_inspector.rs @@ -1,7 +1,6 @@ -use crate::{ - common::instructions::Register, - emulator::{system::model::State, ui::interface::Component}, -}; +use crate::emulator::{system::model::State, ui::interface::Component}; + +use common::instructions::Register; pub struct StackInspector { visible: bool, diff --git a/src/lib.rs b/emulator/src/lib.rs similarity index 94% rename from src/lib.rs rename to emulator/src/lib.rs index 9e75fa0..5374434 100644 --- a/src/lib.rs +++ b/emulator/src/lib.rs @@ -12,5 +12,4 @@ clippy::match_wildcard_for_single_variants )] -pub mod common; pub mod emulator; diff --git a/src/main.rs b/emulator/src/main.rs similarity index 100% rename from src/main.rs rename to emulator/src/main.rs diff --git a/src/common/mod.rs b/src/common/mod.rs deleted file mode 100644 index 3d6cec3..0000000 --- a/src/common/mod.rs +++ /dev/null @@ -1,8 +0,0 @@ -pub mod instructions; - -pub mod prelude { - //! A collection of types you should definitely import when working with this crate. - pub use super::instructions::{ - Address, Instruction, InstructionType, Interrupt, Register, args::*, errors::*, - }; -}