Skip to content

Instantly share code, notes, and snippets.

@floooh
Last active July 10, 2021 12:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save floooh/0320fd2f35e58242178bab925367ddaa to your computer and use it in GitHub Desktop.
Save floooh/0320fd2f35e58242178bab925367ddaa to your computer and use it in GitHub Desktop.
// PSEUDOCODE!
fn imm8(pins: u64, ticks: u64, pc: u16, tick_func: TickFunc) pins: u64, ticks: usize, pc: u16, data: u8 {
pins, ticks, data = memRead(pins, ticks, pc, tick_func);
return pins, ticks, pc +% 1, data;
}
fn memRead(pins: u64, ticks: u64, addr: u16, tick_func: TickFunc) pins: u64, ticks: usize, data: u8 {
pins, ticks = tick(setAddr(pins, addr), ticks, 3, MREQ|RD, tick_func);
return pins, ticks, getData(pins);
}
fn tick(pins: u64, ticks: usize, num_ticks: usize, ctrl_pins: u64, tick_func:) pins: u64, ticks: usize {
pins = tick_func(num_ticks, (pins & ~CtrlPinMask) | ctrl_pins);
return pins, ticks + num_ticks;
}
fn imm8(state: *State) u8 {
const data = memRead(state, state.pc);
state.pc +%= 1;
return data;
}
fn memRead(state: *State, addr: u16) u8 {
state.pins = setAddr(state.pins, addr);
tick(state, 3, MREQ|RD);
return getData(pins);
}
fn tick(state: *State, num_ticks: usize, ctrl_pins) void {
state.pins = state.tick_func(num_ticks, (state.pins & ~CtrlPinMask) | ctrl_pins);
state.ticks += num_ticks;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment