half implemented vdp stuff

This commit is contained in:
kirjavascript 2022-06-20 00:11:44 +01:00
parent aa0e8b9f2f
commit 6c14e644e4
3 changed files with 54 additions and 100 deletions

80
Cargo.lock generated
View file

@ -291,15 +291,6 @@ dependencies = [
"winapi",
]
[[package]]
name = "cmake"
version = "0.1.45"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eb6210b637171dfba4cda12e579ac6dc73f5165ad56133e5d72ef3131f320855"
dependencies = [
"cc",
]
[[package]]
name = "cocoa"
version = "0.24.0"
@ -517,14 +508,6 @@ dependencies = [
"syn",
]
[[package]]
name = "desktop"
version = "0.1.0"
dependencies = [
"emu",
"fltk",
]
[[package]]
name = "detect-desktop-environment"
version = "0.2.0"
@ -723,40 +706,6 @@ dependencies = [
"instant",
]
[[package]]
name = "fltk"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6592e1dc57ff737c486ef4bd43721a22ba2d08211305f5ef2d1ab1021755197"
dependencies = [
"bitflags",
"fltk-derive",
"fltk-sys",
"lazy_static 1.4.0",
"objc",
"raw-window-handle 0.3.3",
]
[[package]]
name = "fltk-derive"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "01fdc87a8c3af8cb94ba7a558ed415bda3d185906e6734b2104fc0c861a610dd"
dependencies = [
"quote",
"syn",
]
[[package]]
name = "fltk-sys"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bd114ac679ce2717fd78c8ed15b42b88c6693aeb7ffaf89e35c268a458fb0698"
dependencies = [
"cmake",
"libc",
]
[[package]]
name = "fnv"
version = "1.0.7"
@ -1049,15 +998,6 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2db585e1d738fc771bf08a151420d3ed193d9d895a36df7f6f8a9456b911ddc"
[[package]]
name = "lazy_mut"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "767a23ea51ed54e6a9cd2a6d0fe156feb4934a4d95e585b55f4585577e195a5b"
dependencies = [
"libc",
]
[[package]]
name = "lazy_static"
version = "0.1.16"
@ -1572,15 +1512,6 @@ dependencies = [
"getrandom",
]
[[package]]
name = "raw-window-handle"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a441a7a6c80ad6473bd4b74ec1c9a4c951794285bf941c2126f607c72e48211"
dependencies = [
"libc",
]
[[package]]
name = "raw-window-handle"
version = "0.4.3"
@ -2196,15 +2127,6 @@ dependencies = [
"pkg-config",
]
[[package]]
name = "web"
version = "0.1.0"
dependencies = [
"emu",
"lazy_mut",
"wasm-bindgen",
]
[[package]]
name = "web-sys"
version = "0.3.57"
@ -2350,7 +2272,7 @@ dependencies = [
"objc",
"parking_lot 0.11.2",
"percent-encoding",
"raw-window-handle 0.4.3",
"raw-window-handle",
"smithay-client-toolkit",
"wasm-bindgen",
"wayland-client",

View file

@ -236,8 +236,9 @@ impl VDP {
fn write_data(&mut self, target: VDPType, value: u32) {
match target {
VDPType::VRAM => {
self.VRAM[self.control_address as usize] = ((value >> 8) & 0xff) as _;
self.VRAM[self.control_address as usize + 1] = (value & 0xff) as _;
let addr = self.control_address as usize;
self.VRAM[addr] = ((value >> 8) & 0xff) as _;
self.VRAM[addr + 1] = (value & 0xff) as _;
},
VDPType::CRAM => {
let address = ((self.control_address & 0x7f) >> 1) as usize;

View file

@ -178,26 +178,57 @@ impl eframe::App for Frontend {
egui::Window::new("vram")
.show(ctx, |ui| {
// let mut pixels = vec![];
// for duxel in &self.emu.core.mem.vdp.VRAM[0..64] {
// let pixel = (*duxel & 0xF0) >> 4;
// let color = self.emu.core.mem.vdp.color(0, pixel as _);
// pixels.push(egui::Color32::from_rgb(color.0, color.1, color.2));
// let pixel = *duxel & 0xF;
// let color = self.emu.core.mem.vdp.color(0, pixel as _);
// pixels.push(egui::Color32::from_rgb(color.0, color.1, color.2));
// }
// let texture: &egui::TextureHandle = &ui.ctx().load_texture(
// "palette",
// egui::ColorImage {
// size: [8, 8* 2],
// pixels,
// },
// egui::TextureFilter::Nearest
// );
// let img = egui::Image::new(texture, texture.size_vec2() * 20.);
// TODO gui palette toggle
const width: usize = 4;
const height: usize = 4;
const pixel_qty: usize = (width * 8) * (height * 8);
// TODO use retained buffer
let mut pixels: [egui::Color32; pixel_qty] = [ egui::Color32::from_rgb(0, 0, 0); pixel_qty];
// ui.add(img);
for x_tile in 0..width {
for y_tile in 0..height {
let offset = x_tile + (y_tile * width);
let vram_offset = offset * 32;
let mut view_offset = (x_tile * 8) + (y_tile * (width * 8));
let mut pixels_drawn = 0;
for duxel in &self.emu.core.mem.vdp.VRAM[vram_offset..vram_offset+32] {
let pixel = (*duxel & 0xF0) >> 4;
let (r, g, b) = self.emu.core.mem.vdp.cram_rgb[pixel as usize];
pixels[view_offset] = egui::Color32::from_rgb(r, g, b);
pixels_drawn += 1;
if pixels_drawn % 8 == 0 {
view_offset += width * 8;
} else {
view_offset += 1;
}
let pixel = *duxel & 0xF;
let (r, g, b) = self.emu.core.mem.vdp.cram_rgb[pixel as usize];
pixels[view_offset] = egui::Color32::from_rgb(r, g, b);
pixels_drawn += 1;
view_offset += 1;
if pixels_drawn % 8 == 0 {
view_offset += width * 8;
} else {
view_offset += 1;
}
}
}
}
let texture: &egui::TextureHandle = &ui.ctx().load_texture(
"vram",
egui::ColorImage {
size: [width*8, height*8],
pixels: pixels.to_vec(),
},
egui::TextureFilter::Nearest
);
let img = egui::Image::new(texture, texture.size_vec2() * 20.);
ui.add(img);
});
egui::CentralPanel::default().show(ctx, |ui| {