aboutsummaryrefslogtreecommitdiff
path: root/src/cpu.rs
diff options
context:
space:
mode:
authorkrolxon <krolyxon@tutanota.com>2026-01-04 19:06:42 +0530
committerkrolxon <krolyxon@tutanota.com>2026-01-04 19:06:42 +0530
commit244172960fff86e147a8e20cf19773026cbed96f (patch)
treed2f03b4d35ef2df87ab4affbb1090d9ee2258263 /src/cpu.rs
parent798ac8ce75e2784e9e412f9ea7778b80b077c1dd (diff)
add jmp, jz
Diffstat (limited to 'src/cpu.rs')
-rw-r--r--src/cpu.rs27
1 files changed, 24 insertions, 3 deletions
diff --git a/src/cpu.rs b/src/cpu.rs
index ceef8a3..96ede96 100644
--- a/src/cpu.rs
+++ b/src/cpu.rs
@@ -18,7 +18,7 @@ pub struct CPU{
}
impl CPU {
- pub fn inc_cp(&mut self) {
+ pub fn inc_pc(&mut self) {
self.pc += 1;
}
@@ -27,8 +27,8 @@ impl CPU {
}
pub fn mov(&mut self, mem: &mut Memory) {
- let reg = mem.read(self.pc); self.inc_cp();
- let val = mem.read(self.pc); self.inc_cp();
+ let reg = mem.read(self.pc); self.inc_pc();
+ let val = mem.read(self.pc); self.inc_pc();
match reg {
0 => self.a = val,
@@ -132,4 +132,25 @@ impl CPU {
self.carry = borrow;
}
+ pub fn jmp(&mut self, mem: &mut Memory) {
+ let low = mem.read(self.pc) as u16; self.inc_pc();
+ let high = mem.read(self.pc) as u16; self.inc_pc();
+
+ let addrs = (high << 8) | low;
+
+ self.pc = addrs;
+ }
+
+ pub fn jz(&mut self, mem: &mut Memory) {
+ let low = mem.read(self.pc) as u16; self.inc_pc();
+ let high = mem.read(self.pc) as u16; self.inc_pc();
+
+ let addrs = (high << 8) | low;
+
+ if self.zero {
+ self.pc = addrs;
+ }
+
+ }
+
}