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