Compare commits
2 Commits
c03ac42eec
...
034620591b
| Author | SHA1 | Date | |
|---|---|---|---|
| 034620591b | |||
| a68d72621c |
@@ -5,5 +5,5 @@ edition = "2024"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
pixels = "0.15.0"
|
pixels = "0.15.0"
|
||||||
winit = "0.30.13"
|
winit = { version = "0.30.13", features = ["x11", "x11-dl", "x11rb", "ahash", "bytemuck", "memmap2", "rwh_06", "sctk", "sctk-adwaita"] }
|
||||||
winit_input_helper = "0.17.0"
|
winit_input_helper = "0.17.0"
|
||||||
|
|||||||
BIN
sim_rs.tar.xz
BIN
sim_rs.tar.xz
Binary file not shown.
11
src/cpu.rs
11
src/cpu.rs
@@ -290,11 +290,16 @@ impl<'a, 'b> Computer<'a, 'b> {
|
|||||||
}
|
}
|
||||||
self.pc = (addr + self.pc as u32) as usize;
|
self.pc = (addr + self.pc as u32) as usize;
|
||||||
}
|
}
|
||||||
Instruction::Call(addr) => {
|
Instruction::Call(mut addr) => {
|
||||||
self.sp -= 1;
|
self.sp -= 1;
|
||||||
self.ram[self.sp] = ((self.pc << 2) + 4) as u32;
|
self.ram[self.sp] = ((self.pc << 2) + 4) as u32;
|
||||||
self.pc += addr as usize;
|
|
||||||
self.pc &= 0x3FFFFFFF; //wrapping on 30 bit pc
|
if addr & (1 << 28) != 0 {
|
||||||
|
addr += 7 << 29;
|
||||||
|
} else if unlikely(addr == 0) {
|
||||||
|
sleep(Duration::from_hours(1));
|
||||||
|
}
|
||||||
|
self.pc = (addr + self.pc as u32) as usize;
|
||||||
}
|
}
|
||||||
Instruction::Ret() => {
|
Instruction::Ret() => {
|
||||||
self.pc = (self.ram[self.sp] >> 2) as usize;
|
self.pc = (self.ram[self.sp] >> 2) as usize;
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ fn main() -> Result<(), Error> {
|
|||||||
match event.state {
|
match event.state {
|
||||||
winit::event::ElementState::Pressed => {
|
winit::event::ElementState::Pressed => {
|
||||||
if let Some(val) = event.physical_key.to_scancode() {
|
if let Some(val) = event.physical_key.to_scancode() {
|
||||||
kbref.store(val, std::sync::atomic::Ordering::Relaxed);
|
kbref.store(val + 8, std::sync::atomic::Ordering::Relaxed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
winit::event::ElementState::Released => {
|
winit::event::ElementState::Released => {
|
||||||
|
|||||||
Reference in New Issue
Block a user