Skip to content

Commit 378395c

Browse files
committed
WIP
1 parent 211b909 commit 378395c

File tree

21 files changed

+833
-474
lines changed

21 files changed

+833
-474
lines changed

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
[submodule "vitaGL"]
22
path = vitaGL
33
url = https://github.com/Rinnegatamante/vitaGL.git
4+
[submodule "kubridge"]
5+
path = kubridge
6+
url = https://github.com/bythos14/kubridge.git

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ chrono = "0.4.38"
1818
dsvita_macros = { path = "macros" }
1919
gl = { git = "https://github.com/bjz/gl-rs" }
2020
glyph_brush = "0.7.9"
21-
lazy_static = "1.5.0"
2221
rust-ini = "0.21.1"
2322
static_assertions = "1.1.0"
2423
paste = "1.0.15"
@@ -32,6 +31,7 @@ affinity = "0.1.2"
3231
[build-dependencies]
3332
bindgen = "0.70.0"
3433
cc = "1.0.100"
34+
cmake = "0.1"
3535

3636
[target.armv7-sony-vita-newlibeabihf.dependencies]
3737
vitasdk-sys = { version = "0.3.2", features = [

build.rs

Lines changed: 77 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -25,47 +25,82 @@ fn main() {
2525
let vitasdk_include_path = vitasdk_path.join("arm-vita-eabi").join("include");
2626
let vitasdk_lib_path = vitasdk_path.join("arm-vita-eabi").join("lib");
2727

28-
let bindings_file = out_path.join("imgui_bindings.rs");
29-
30-
const IMGUI_HEADERS: [&str; 3] = ["imgui.h", "imgui_internal.h", "imgui_impl_vitagl.h"];
31-
let mut bindings = bindgen::Builder::default()
32-
.clang_args(["-I", vitasdk_include_path.to_str().unwrap()])
33-
.clang_args(["-x", "c++"])
34-
.clang_args(["-std=c++17"])
35-
.clang_args(["-target", "armv7a-none-eabihf"])
36-
.formatter(Formatter::Prettyplease);
37-
for header in IMGUI_HEADERS {
38-
let header_path = vitasdk_include_path.join(header);
39-
println!("cargo:rerun-if-changed={header_path:?}");
40-
bindings = bindings.header(header_path.to_str().unwrap());
28+
let kubridge_path = PathBuf::from("kubridge");
29+
30+
{
31+
let bindings_file = out_path.join("imgui_bindings.rs");
32+
33+
const IMGUI_HEADERS: [&str; 3] = ["imgui.h", "imgui_internal.h", "imgui_impl_vitagl.h"];
34+
let mut bindings = bindgen::Builder::default()
35+
.clang_args(["-I", vitasdk_include_path.to_str().unwrap()])
36+
.clang_args(["-x", "c++"])
37+
.clang_args(["-std=c++17"])
38+
.clang_args(["-target", "armv7a-none-eabihf"])
39+
.formatter(Formatter::Prettyplease);
40+
for header in IMGUI_HEADERS {
41+
let header_path = vitasdk_include_path.join(header);
42+
println!("cargo:rerun-if-changed={header_path:?}");
43+
bindings = bindings.header(header_path.to_str().unwrap());
44+
}
45+
bindings.rust_target(bindgen::RustTarget::Nightly).generate().unwrap().write_to_file(bindings_file).unwrap();
46+
47+
println!("cargo:rustc-link-search=native={vitasdk_lib_path:?}");
48+
println!("cargo:rustc-link-lib=static=imgui");
49+
}
50+
51+
{
52+
let bindings_file = out_path.join("kubridge_bindings.rs");
53+
54+
const KUBRIDGE_HEADERS: [&str; 1] = ["kubridge.h"];
55+
let mut bindings = bindgen::Builder::default()
56+
.clang_args(["-I", vitasdk_include_path.to_str().unwrap()])
57+
.clang_args(["-I", kubridge_path.to_str().unwrap()])
58+
.clang_args(["-x", "c++"])
59+
.clang_args(["-std=c++17"])
60+
.clang_args(["-target", "armv7a-none-eabihf"])
61+
.formatter(Formatter::Prettyplease);
62+
for header in KUBRIDGE_HEADERS {
63+
let header_path = kubridge_path.join(header);
64+
println!("cargo:rerun-if-changed={header_path:?}");
65+
bindings = bindings.header(header_path.to_str().unwrap());
66+
}
67+
bindings.rust_target(bindgen::RustTarget::Nightly).generate().unwrap().write_to_file(bindings_file).unwrap();
68+
}
69+
70+
{
71+
let vita_gl_path = PathBuf::from("vitaGL");
72+
let vita_gl_lib_path = vita_gl_path.join("libvitaGL.a");
73+
let vita_gl_lib_new_path = vita_gl_path.join("libvitaGL_dsvita.a");
74+
75+
Command::new("make")
76+
.current_dir("vitaGL")
77+
.args(["-j", &num_jobs])
78+
.envs([
79+
("HAVE_UNFLIPPED_FBOS", "1"),
80+
("NO_TEX_COMBINER", "1"),
81+
("NO_DEBUG", "1"),
82+
("SHADER_COMPILER_SPEEDHACK", "1"),
83+
("MATH_SPEEDHACK", "1"),
84+
("HAVE_SHADER_CACHE", "1"),
85+
// ("HAVE_SHARK_LOG", "1"),
86+
// ("LOG_ERRORS", "1"),
87+
// ("HAVE_RAZOR", "1"),
88+
])
89+
.status()
90+
.unwrap();
91+
92+
fs::rename(vita_gl_lib_path, vita_gl_lib_new_path).unwrap();
93+
println!("cargo:rustc-link-search=native={}", fs::canonicalize(vita_gl_path).unwrap().to_str().unwrap());
94+
println!("cargo:rustc-link-lib=static=vitaGL_dsvita");
95+
}
96+
97+
{
98+
let kubridge_dst_path = cmake::Config::new(&kubridge_path).build_target("libkubridge_stub.a").build().join("build");
99+
let kubridge_lib_path = kubridge_dst_path.join("libkubridge_stub.a");
100+
let kubridge_lib_new_path = kubridge_dst_path.join("libkubridge_stub_dsvita.a");
101+
fs::rename(kubridge_lib_path, kubridge_lib_new_path).unwrap();
102+
103+
println!("cargo:rustc-link-search=native={}", fs::canonicalize(kubridge_dst_path).unwrap().to_str().unwrap());
104+
println!("cargo:rustc-link-lib=static=kubridge_stub_dsvita");
41105
}
42-
bindings.rust_target(bindgen::RustTarget::Nightly).generate().unwrap().write_to_file(bindings_file).unwrap();
43-
44-
println!("cargo:rustc-link-search=native={vitasdk_lib_path:?}");
45-
println!("cargo:rustc-link-lib=static=imgui");
46-
47-
let vita_gl_path = PathBuf::from("vitaGL");
48-
let vita_gl_lib_path = vita_gl_path.join("libvitaGL.a");
49-
let vita_gl_lib_new_path = vita_gl_path.join("libvitaGL_dsvita.a");
50-
51-
Command::new("make")
52-
.current_dir("vitaGL")
53-
.args(["-j", &num_jobs])
54-
.envs([
55-
("HAVE_UNFLIPPED_FBOS", "1"),
56-
("NO_TEX_COMBINER", "1"),
57-
("NO_DEBUG", "1"),
58-
("SHADER_COMPILER_SPEEDHACK", "1"),
59-
("MATH_SPEEDHACK", "1"),
60-
("HAVE_SHADER_CACHE", "1"),
61-
// ("HAVE_SHARK_LOG", "1"),
62-
// ("LOG_ERRORS", "1"),
63-
// ("HAVE_RAZOR", "1"),
64-
])
65-
.status()
66-
.unwrap();
67-
68-
fs::rename(vita_gl_lib_path, vita_gl_lib_new_path).unwrap();
69-
println!("cargo:rustc-link-search=native={}", fs::canonicalize(vita_gl_path).unwrap().to_str().unwrap());
70-
println!("cargo:rustc-link-lib=static=vitaGL_dsvita");
71106
}

kubridge

Submodule kubridge added at a4ef20f

src/cartridge_io.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use crate::cartridge_metadata::get_cartridge_metadata;
22
use crate::logging::debug_println;
3+
use crate::mmap::PAGE_SIZE;
34
use crate::utils;
45
use crate::utils::{rgb5_to_rgb8, NoHashMap};
56
use static_assertions::const_assert_eq;
@@ -73,8 +74,6 @@ pub struct CartridgeHeader {
7374
reserved5: [u8; 0x90],
7475
}
7576

76-
const PAGE_SIZE: u32 = 4096;
77-
7877
const HEADER_SIZE: usize = size_of::<CartridgeHeader>();
7978
pub const HEADER_IN_RAM_SIZE: usize = 0x170;
8079
const_assert_eq!(HEADER_SIZE, HEADER_IN_RAM_SIZE + 0x90);
@@ -86,7 +85,7 @@ pub struct CartridgeIo {
8685
pub file_name: String,
8786
pub file_size: u32,
8887
pub header: CartridgeHeader,
89-
content_pages: RefCell<NoHashMap<u32, Rc<[u8; PAGE_SIZE as usize]>>>,
88+
content_pages: RefCell<NoHashMap<u32, Rc<[u8; PAGE_SIZE]>>>,
9089
save_file_path: PathBuf,
9190
pub save_file_size: u32,
9291
save_buf: Mutex<(Vec<u8>, bool)>,
@@ -138,8 +137,8 @@ impl CartridgeIo {
138137
})
139138
}
140139

141-
fn get_page(&self, page_addr: u32) -> io::Result<Rc<[u8; PAGE_SIZE as usize]>> {
142-
debug_assert_eq!(page_addr & (PAGE_SIZE - 1), 0);
140+
fn get_page(&self, page_addr: u32) -> io::Result<Rc<[u8; PAGE_SIZE]>> {
141+
debug_assert_eq!(page_addr & (PAGE_SIZE as u32 - 1), 0);
143142
let mut pages = self.content_pages.borrow_mut();
144143
match pages.get(&page_addr) {
145144
None => {
@@ -149,7 +148,7 @@ impl CartridgeIo {
149148
pages.clear();
150149
}
151150

152-
let mut buf = [0u8; PAGE_SIZE as usize];
151+
let mut buf = [0u8; PAGE_SIZE];
153152
self.file.read_at(&mut buf, page_addr as u64)?;
154153
let buf = Rc::new(buf);
155154
pages.insert(page_addr, buf.clone());
@@ -164,7 +163,7 @@ impl CartridgeIo {
164163
while remaining > 0 {
165164
let slice_start = slice.len() - remaining;
166165

167-
let page_addr = (offset + slice_start as u32) & !(PAGE_SIZE - 1);
166+
let page_addr = (offset + slice_start as u32) & !(PAGE_SIZE as u32 - 1);
168167
let page_offset = offset + slice_start as u32 - page_addr;
169168
let page = match self.get_page(page_addr) {
170169
Ok(page) => page,

src/core/emu.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,8 +284,8 @@ impl Emu {
284284
unsafe { (*self.mem.get()).read_no_tcm::<CPU, T>(addr, self) }
285285
}
286286

287-
pub fn mem_read_with_options<const CPU: CpuType, const TCM: bool, const MMU: bool, T: Convert>(&mut self, addr: u32) -> T {
288-
unsafe { (*self.mem.get()).read_with_options::<CPU, TCM, MMU, T>(addr, self) }
287+
pub fn mem_read_with_options<const CPU: CpuType, const TCM: bool, T: Convert>(&mut self, addr: u32) -> T {
288+
unsafe { (*self.mem.get()).read_with_options::<CPU, TCM, T>(addr, self) }
289289
}
290290

291291
pub fn mem_write<const CPU: CpuType, T: Convert>(&mut self, addr: u32, value: T) {

src/core/memory/main.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use crate::utils::{Convert, HeapMemU8};
44
use std::ops::{Deref, DerefMut};
55

66
pub struct Main {
7-
main: HeapMemU8<{ regions::MAIN_MEMORY_SIZE as usize }>,
7+
main: HeapMemU8<{ regions::MAIN_SIZE as usize }>,
88
}
99

1010
impl Main {
@@ -13,18 +13,18 @@ impl Main {
1313
}
1414

1515
pub fn get_ptr(&self, addr: u32) -> *const u8 {
16-
unsafe { self.main.as_ptr().add((addr & (regions::MAIN_MEMORY_SIZE - 1)) as usize) }
16+
unsafe { self.main.as_ptr().add((addr & (regions::MAIN_SIZE - 1)) as usize) }
1717
}
1818

1919
pub fn read<T: Convert>(&self, addr_offset: u32) -> T {
20-
utils::read_from_mem(self.main.deref(), addr_offset & (regions::MAIN_MEMORY_SIZE - 1))
20+
utils::read_from_mem(self.main.deref(), addr_offset & (regions::MAIN_SIZE - 1))
2121
}
2222

2323
pub fn write<T: Convert>(&mut self, addr_offset: u32, value: T) {
24-
utils::write_to_mem(self.main.deref_mut(), addr_offset & (regions::MAIN_MEMORY_SIZE - 1), value);
24+
utils::write_to_mem(self.main.deref_mut(), addr_offset & (regions::MAIN_SIZE - 1), value);
2525
}
2626

2727
pub fn write_slice<T: Convert>(&mut self, addr_offset: u32, slice: &[T]) {
28-
utils::write_to_mem_slice(self.main.deref_mut(), (addr_offset & (regions::MAIN_MEMORY_SIZE - 1)) as usize, slice);
28+
utils::write_to_mem_slice(self.main.deref_mut(), (addr_offset & (regions::MAIN_SIZE - 1)) as usize, slice);
2929
}
3030
}

0 commit comments

Comments
 (0)