refactor: split into gameboy-rust workspace with core, demos, and desktop crates
Move the emulator into crates/gba-core, the original demo programs into crates/gba-demos, and the minifb frontend into crates/desktop. The binary is now gameboy-rust. Imports change from gba_rust to gba_core/gba_demos; no behavior changes. gba-core has no dependencies. Its integration tests use gba-demos as a development dependency. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
a8944d1d5f
commit
f8a0676748
113 changed files with 304 additions and 282 deletions
42
crates/gba-core/src/input.rs
Normal file
42
crates/gba-core/src/input.rs
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
//! Platform-independent GBA button state. Bits are pressed-high here;
|
||||
//! the KEYINPUT register exposes their active-low hardware representation.
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[repr(u16)]
|
||||
pub enum Button {
|
||||
A = 1 << 0,
|
||||
B = 1 << 1,
|
||||
Select = 1 << 2,
|
||||
Start = 1 << 3,
|
||||
Right = 1 << 4,
|
||||
Left = 1 << 5,
|
||||
Up = 1 << 6,
|
||||
Down = 1 << 7,
|
||||
R = 1 << 8,
|
||||
L = 1 << 9,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
|
||||
pub struct Buttons(u16);
|
||||
|
||||
impl Buttons {
|
||||
pub fn from_bits(bits: u16) -> Self {
|
||||
Self(bits & 0x03ff)
|
||||
}
|
||||
|
||||
pub fn bits(self) -> u16 {
|
||||
self.0
|
||||
}
|
||||
|
||||
pub fn with(self, button: Button, pressed: bool) -> Self {
|
||||
Self(if pressed {
|
||||
self.0 | button as u16
|
||||
} else {
|
||||
self.0 & !(button as u16)
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) fn keyinput(self) -> u16 {
|
||||
!self.0 & 0x03ff
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue