diff --git a/src/architecture.rs b/src/architecture.rs index 43be465..069b6e5 100644 --- a/src/architecture.rs +++ b/src/architecture.rs @@ -56,6 +56,9 @@ pub struct Architecture<'a> { /// Timer configuration #[serde(default)] pub timer: Option, + /// Device configuration + #[serde(default)] + pub devices: Vec>, /// Definitions of possible enumerated instruction fields #[serde(default)] pub enums: HashMap<&'a str, EnumDefinition<'a>>, @@ -526,6 +529,28 @@ pub struct Timer { pub disable: String, } +#[derive(Deserialize, JsonSchema, Debug, PartialEq, Eq, Clone, Copy)] +pub enum DeviceClasses { + ConsoleDevice, + OSDriver, +} + +#[derive(Deserialize, JsonSchema, Debug, PartialEq, Eq, Clone)] +pub struct Device<'a> { + /// Device ID + pub id: &'a str, + /// Device class + pub cls: DeviceClasses, + /// Device's control register's address + pub ctrl_addr: usize, + /// Device's status register's address + pub status_addr: usize, + /// Device's data segment + pub data: NonEmptyRangeInclusive, + /// Device's default status (default: enabled) + pub enabled: Option, +} + impl Architecture<'_> { /// Generate a `JSON` schema #[must_use]