Skip to content

Commit ae3b7d2

Browse files
committed
attempt to refactor into separate packages, but hitting a rustc panic?
1 parent 0502b32 commit ae3b7d2

File tree

15 files changed

+108
-61
lines changed

15 files changed

+108
-61
lines changed

Cargo.lock

Lines changed: 35 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ version = "0.1.0"
77
authors = ["Jeremy Banks <[email protected]>"]
88

99
[dependencies]
10-
futures = "*"
11-
hyper = "*"
12-
tokio = "*"
13-
rand = "*"
14-
image = "*"
10+
zerodmg-emulator = { version = "0.1.0", path = "zerodmg-emulator" }
11+
zerodmg-utils = { version = "0.1.0", path = "zerodmg-utils" }
12+
futures = "0.1.*"
13+
hyper = "0.11.*"
14+
tokio = "0.1.7"
15+
rand = "0.5.2"
16+
image = "0.19.0"

src/main.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ use std::thread;
99

1010
use hyper::server::Http;
1111

12-
mod emulator;
12+
use zerodmg_emulator as emulator;
13+
1314
mod server;
1415

1516
pub fn main() {

zerodmg-emulator/Cargo.toml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
cargo-features = ["edition"]
2+
3+
[package]
4+
edition = "2018"
5+
name = "zerodmg-emulator"
6+
version = "0.1.0"
7+
authors = ["Jeremy Banks <[email protected]>"]
8+
9+
[dependencies]
10+
zerodmg-utils = { version = "0.1.0", path = "../zerodmg-utils" }
11+
image = "0.19.0"
File renamed without changes.

src/emulator/cpu/mod.rs renamed to zerodmg-emulator/src/cpu/mod.rs

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use zerodmg_utils::binary::{u8_get_bit, u8_set_bit, u8s_to_u16, u16_to_u8s};
2+
13
use std::fmt;
24

35
#[macro_use]
@@ -357,32 +359,3 @@ impl fmt::Display for OneByteRegister {
357359
)
358360
}
359361
}
360-
361-
pub fn u8s_to_u16(a: u8, b: u8) -> u16 {
362-
return a as u16 + ((b as u16) << 8);
363-
}
364-
365-
pub fn u16_to_u8s(x: u16) -> (u8, u8) {
366-
(x as u8, (x >> 8) as u8)
367-
}
368-
369-
pub fn u8_get_bit(x: u8, offset: u8) -> bool {
370-
if offset > 7 {
371-
panic!();
372-
}
373-
374-
(x >> offset) & 1 == 1
375-
}
376-
377-
pub fn u8_set_bit(x: &mut u8, offset: u8, value: bool) {
378-
if offset > 7 {
379-
panic!();
380-
}
381-
382-
let mask = 1 << offset;
383-
if value {
384-
*x |= mask;
385-
} else {
386-
*x &= !mask;
387-
}
388-
}

src/emulator/cpu/opcodes_cb.rs renamed to zerodmg-emulator/src/cpu/opcodes_cb.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
use zerodmg_utils::binary::{u8_get_bit, u8_set_bit};
2+
13
use super::operation;
24
use super::operation::Execution;
3-
use super::{u8_get_bit, u8_set_bit};
45

56
use super::CPUController;
67

src/emulator/cpu/opcodes_main.rs renamed to zerodmg-emulator/src/cpu/opcodes_main.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
use zerodmg_utils::binary::{u8_get_bit, u8_set_bit};
2+
13
use super::operation;
24
use super::operation::Execution;
3-
use super::{u8_get_bit, u8_set_bit};
45

56
use super::super::memory::MemoryController;
67
use super::CPUController;

src/emulator/cpu/operation.rs renamed to zerodmg-emulator/src/cpu/operation.rs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use zerodmg_utils::binary::{u8_get_bit, u8_set_bit, u8s_to_u16, u16_to_u8s};
2+
13
use super::{CPUController, OneByteRegister};
24

35
pub type Operation = fn(opcode: u8, gb: &mut super::GameBoy) -> Execution;
@@ -114,7 +116,7 @@ pub const ADD: Operation = |opcode, gb| {
114116
gb.cpu.a = a1;
115117
gb.set_z_flag(a1 == 0);
116118
gb.set_n_flag(false);
117-
gb.set_h_flag(super::u8_get_bit(a1, 4));
119+
gb.set_h_flag(u8_get_bit(a1, 4));
118120
gb.set_c_flag(a1 < a0);
119121
op_execution!{
120122
cycles: 1 + extra_read_cycles;
@@ -131,7 +133,7 @@ pub const SUB: Operation = |opcode, gb| {
131133
gb.cpu.a = a1;
132134
gb.set_z_flag(a1 == 0);
133135
gb.set_n_flag(false);
134-
gb.set_h_flag(super::u8_get_bit(a1, 4));
136+
gb.set_h_flag(u8_get_bit(a1, 4));
135137
gb.set_c_flag(a1 > a0);
136138
op_execution!{
137139
cycles: 1 + extra_read_cycles;
@@ -147,7 +149,7 @@ pub const CP: Operation = |opcode, gb| {
147149
let delta = a.wrapping_sub(source_value);
148150
gb.set_z_flag(delta == 0);
149151
gb.set_n_flag(false);
150-
gb.set_h_flag(super::u8_get_bit(delta, 4));
152+
gb.set_h_flag(u8_get_bit(delta, 4));
151153
gb.set_c_flag(delta > a);
152154
op_execution!{
153155
cycles: 1 + extra_read_cycles;
@@ -180,7 +182,7 @@ pub const INC: Operation = |opcode, gb| {
180182
let extra_write_cycles = gb.set_register(target, new_value);
181183
gb.set_z_flag(new_value == 0);
182184
gb.set_n_flag(false);
183-
gb.set_h_flag(super::u8_get_bit(new_value, 4));
185+
gb.set_h_flag(u8_get_bit(new_value, 4));
184186
op_execution!{
185187
cycles: 1 + extra_read_cycles + extra_write_cycles;
186188
asm: "INC {}", target;
@@ -195,7 +197,7 @@ pub const DEC: Operation = |opcode, gb| {
195197
let extra_write_cycles = gb.set_register(target, new_value);
196198
gb.set_z_flag(new_value == 0);
197199
gb.set_n_flag(true);
198-
gb.set_h_flag(super::u8_get_bit(new_value, 4));
200+
gb.set_h_flag(u8_get_bit(new_value, 4));
199201
op_execution!{
200202
cycles: 1 + extra_read_cycles + extra_write_cycles;
201203
asm: "DEC {}", target;
@@ -207,7 +209,7 @@ pub const RST: Operation = |opcode, gb| {
207209
let high_byte = opcode & 0b00_111_000;
208210
let h = gb.cpu.h;
209211
let pc0 = gb.cpu.pc;
210-
let pc1 = super::u8s_to_u16(high_byte, h);
212+
let pc1 = u8s_to_u16(high_byte, h);
211213
gb.stack_push(pc0);
212214
gb.cpu.pc = pc1;
213215
op_execution!{
File renamed without changes.
File renamed without changes.
File renamed without changes.

zerodmg-utils/Cargo.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
cargo-features = ["edition"]
2+
3+
[package]
4+
edition = "2018"
5+
name = "zerodmg-utils"
6+
version = "0.1.0"
7+
authors = ["Jeremy Banks <[email protected]>"]
8+
9+
[dependencies]
10+
image = "0.19.0"

zerodmg-utils/src/binary.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
pub fn u8s_to_u16(a: u8, b: u8) -> u16 {
2+
return a as u16 + ((b as u16) << 8);
3+
}
4+
5+
pub fn u16_to_u8s(x: u16) -> (u8, u8) {
6+
(x as u8, (x >> 8) as u8)
7+
}
8+
9+
pub fn u8_get_bit(x: u8, offset: u8) -> bool {
10+
if offset > 7 {
11+
panic!();
12+
}
13+
14+
(x >> offset) & 1 == 1
15+
}
16+
17+
pub fn u8_set_bit(x: &mut u8, offset: u8, value: bool) {
18+
if offset > 7 {
19+
panic!();
20+
}
21+
22+
let mask = 1 << offset;
23+
if value {
24+
*x |= mask;
25+
} else {
26+
*x &= !mask;
27+
}
28+
}

zerodmg-utils/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
pub mod binary;

0 commit comments

Comments
 (0)