ppu main window drawing
This commit is contained in:
@@ -44,7 +44,7 @@ fn main() -> Result<(), Error> {
|
||||
let cartridge = Cartridge::new(cartridge)?;
|
||||
nes.insert_cartrige(cartridge);
|
||||
nes.cpu.find_pc_addr(&nes.bus);
|
||||
nes.cpu.regs.pc = 0xC000;
|
||||
// nes.cpu.regs.pc = 0xC000;
|
||||
|
||||
// disassemble instructions
|
||||
let disasm = Disasm::disassemble(&nes.bus, 0xC000, 0xFFFF).unwrap();
|
||||
|
||||
@@ -106,10 +106,10 @@ impl Memory for Bus {
|
||||
// Ram is 3x mirrored after 0x07ff
|
||||
return self.ram[(addr & RAM_PHYS_RANGE[1]) as usize]
|
||||
}
|
||||
if PPU_ADDR_RANGE[0] <= addr && addr <= PPU_ADDR_RANGE[1] {
|
||||
// PPU memory is mirrored after 0x2007 to 0x3fff
|
||||
return self.ram[(addr & PPU_PHYS_RANGE[1]) as usize]
|
||||
}
|
||||
// if PPU_ADDR_RANGE[0] <= addr && addr <= PPU_ADDR_RANGE[1] {
|
||||
// // PPU memory is mirrored after 0x2007 to 0x3fff
|
||||
// return self.ram[(addr & PPU_PHYS_RANGE[1]) as usize]
|
||||
// }
|
||||
0x0000 // generic response
|
||||
}
|
||||
|
||||
@@ -123,10 +123,10 @@ impl Memory for Bus {
|
||||
// Ram is 3x mirrored after 07ff
|
||||
self.ram[(addr & RAM_PHYS_RANGE[1]) as usize] = data
|
||||
}
|
||||
if PPU_ADDR_RANGE[0] <= addr && addr <= PPU_ADDR_RANGE[1] {
|
||||
// PPU memory is mirrored after 0x2007 to 0x3fff
|
||||
self.ram[(addr & PPU_PHYS_RANGE[1]) as usize] = data
|
||||
}
|
||||
// if PPU_ADDR_RANGE[0] <= addr && addr <= PPU_ADDR_RANGE[1] {
|
||||
// // PPU memory is mirrored after 0x2007 to 0x3fff
|
||||
// self.ram[(addr & PPU_PHYS_RANGE[1]) as usize] = data
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,25 +4,37 @@ use image::{ImageBuffer, Rgba};
|
||||
use rand::Rng;
|
||||
|
||||
pub struct PPU {
|
||||
pub cycle: i16,
|
||||
pub scanline: i16,
|
||||
pub canvas_main: ImageBuffer<Rgba<u8>, Vec<u8>>
|
||||
|
||||
}
|
||||
|
||||
impl PPU {
|
||||
pub fn new() -> Self {
|
||||
PPU {
|
||||
cycle: 0,
|
||||
scanline: 0,
|
||||
canvas_main: ImageBuffer::new(256, 240),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Clockable for PPU {
|
||||
fn clock<T: Memory>(&mut self, bus: &mut T) {
|
||||
// update random pixel
|
||||
fn clock<T: Memory>(&mut self, _bus: &mut T) {
|
||||
// random noise
|
||||
let mut rng = rand::thread_rng();
|
||||
let x = rng.gen_range(0, self.canvas_main.width());
|
||||
let y = rng.gen_range(0, self.canvas_main.height());
|
||||
let rgba = Rgba([rng.gen_range(0,255), rng.gen_range(0,255), rng.gen_range(0,255), 255]);
|
||||
self.canvas_main.put_pixel(x, y, rgba);
|
||||
let x = rng.gen_range(0, 256);
|
||||
let y = rng.gen_range(0, 240);
|
||||
|
||||
let color = rng.gen::<bool>();
|
||||
let px = if color {
|
||||
Rgba([255, 255, 255, 255])
|
||||
} else {
|
||||
Rgba([0, 0, 0, 255])
|
||||
};
|
||||
|
||||
self.canvas_main.put_pixel(x as u32, y as u32, px);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user