written up instruction set
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
/target
|
||||||
Generated
+7
@@ -0,0 +1,7 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "damn_simple_architecture"
|
||||||
|
version = "0.1.0"
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
[package]
|
||||||
|
name = "damn_simple_architecture"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
name = "dsa_rs"
|
||||||
|
path = "src/lib.rs"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
@@ -0,0 +1,115 @@
|
|||||||
|
pub enum Instruction {
|
||||||
|
// No-op
|
||||||
|
Nop,
|
||||||
|
|
||||||
|
// Data transfer instructions
|
||||||
|
Mov(Register, Register),
|
||||||
|
MovSigned(Register, Register),
|
||||||
|
|
||||||
|
LoadByte(Register, Offset, Register),
|
||||||
|
LoadByteSigned(Register, Offset, Register),
|
||||||
|
LoadHalfword(Register, Offset, Register),
|
||||||
|
LoadHalfwordSigned(Register, Offset, Register),
|
||||||
|
LoadWord(Register, Offset, Register),
|
||||||
|
LoadWordSigned(Register, Offset, Register),
|
||||||
|
|
||||||
|
StoreByte(Register, Offset, Register),
|
||||||
|
StoreHalfword(Register, Offset, Register),
|
||||||
|
StoreWord(Register, Offset, Register),
|
||||||
|
|
||||||
|
LoadLowerImmediate(Register, Immediate),
|
||||||
|
LoadUpperImmediate(Register, Immediate),
|
||||||
|
|
||||||
|
// Jump Instructions
|
||||||
|
Jump(Register, Offset),
|
||||||
|
JumpEq(Register, Offset),
|
||||||
|
JumpNeq(Register, Offset),
|
||||||
|
JumpGt(Register, Offset),
|
||||||
|
JumpGe(Register, Offset),
|
||||||
|
JumpLt(Register, Offset),
|
||||||
|
JumpLe(Register, Offset),
|
||||||
|
|
||||||
|
// Comparison
|
||||||
|
Compare(Register, Register),
|
||||||
|
|
||||||
|
// Arithmetic
|
||||||
|
Add(Register, Register, Register),
|
||||||
|
Sub(Register, Register, Register),
|
||||||
|
Increment(Register),
|
||||||
|
Decrement(Register),
|
||||||
|
ShiftLeft(Register, Register, Register),
|
||||||
|
ShiftRight(Register, Register, Register),
|
||||||
|
|
||||||
|
// Logical
|
||||||
|
And(Register, Register, Register),
|
||||||
|
Or(Register, Register, Register),
|
||||||
|
Not(Register, Register),
|
||||||
|
Xor(Register, Register, Register),
|
||||||
|
Nand(Register, Register, Register),
|
||||||
|
Nor(Register, Register, Register),
|
||||||
|
Xnor(Register, Register, Register),
|
||||||
|
|
||||||
|
// Misc
|
||||||
|
Interrupt(Interrupt),
|
||||||
|
IntReturn,
|
||||||
|
Halt,
|
||||||
|
}
|
||||||
|
|
||||||
|
type Offset = u16;
|
||||||
|
type Immediate = u16;
|
||||||
|
|
||||||
|
pub enum Interrupt {
|
||||||
|
Software(u8)
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Into<u8> for Interrupt {
|
||||||
|
fn into(self) -> u8 {
|
||||||
|
match self {
|
||||||
|
Interrupt::Software(code) => code,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<u8> for Interrupt {
|
||||||
|
fn from(code: u8) -> Self {
|
||||||
|
todo!("implement this once a hardware interrupt convention is established");
|
||||||
|
Interrupt::Software(code)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum Register {
|
||||||
|
// general purpose registers
|
||||||
|
Rg0,
|
||||||
|
Rg1,
|
||||||
|
Rg2,
|
||||||
|
Rg3,
|
||||||
|
Rg4,
|
||||||
|
Rg5,
|
||||||
|
Rg6,
|
||||||
|
Rg7,
|
||||||
|
Rg8,
|
||||||
|
Rg9,
|
||||||
|
Rg10,
|
||||||
|
Rg11,
|
||||||
|
Rg12,
|
||||||
|
Rg13,
|
||||||
|
Rg14,
|
||||||
|
Rg15,
|
||||||
|
|
||||||
|
// special purpose registers
|
||||||
|
Acc,
|
||||||
|
Spr,
|
||||||
|
Bpr,
|
||||||
|
Ret,
|
||||||
|
Idr,
|
||||||
|
Mmr,
|
||||||
|
Zero,
|
||||||
|
None,
|
||||||
|
|
||||||
|
// system registers - can't be written to by instructions.
|
||||||
|
Mar,
|
||||||
|
Mdr,
|
||||||
|
Sts,
|
||||||
|
Cir,
|
||||||
|
Pcx,
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
pub mod instructions;
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
pub mod common;
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user