ppu main window drawing

This commit is contained in:
Daniel Bauer
2020-01-04 15:43:22 +01:00
parent ae080895a5
commit 01de48883c
3 changed files with 27 additions and 15 deletions

View File

@@ -44,7 +44,7 @@ fn main() -> Result<(), Error> {
let cartridge = Cartridge::new(cartridge)?; let cartridge = Cartridge::new(cartridge)?;
nes.insert_cartrige(cartridge); nes.insert_cartrige(cartridge);
nes.cpu.find_pc_addr(&nes.bus); nes.cpu.find_pc_addr(&nes.bus);
nes.cpu.regs.pc = 0xC000; // nes.cpu.regs.pc = 0xC000;
// disassemble instructions // disassemble instructions
let disasm = Disasm::disassemble(&nes.bus, 0xC000, 0xFFFF).unwrap(); let disasm = Disasm::disassemble(&nes.bus, 0xC000, 0xFFFF).unwrap();

View File

@@ -106,10 +106,10 @@ impl Memory for Bus {
// Ram is 3x mirrored after 0x07ff // Ram is 3x mirrored after 0x07ff
return self.ram[(addr & RAM_PHYS_RANGE[1]) as usize] return self.ram[(addr & RAM_PHYS_RANGE[1]) as usize]
} }
if PPU_ADDR_RANGE[0] <= addr && addr <= PPU_ADDR_RANGE[1] { // if PPU_ADDR_RANGE[0] <= addr && addr <= PPU_ADDR_RANGE[1] {
// PPU memory is mirrored after 0x2007 to 0x3fff // // PPU memory is mirrored after 0x2007 to 0x3fff
return self.ram[(addr & PPU_PHYS_RANGE[1]) as usize] // return self.ram[(addr & PPU_PHYS_RANGE[1]) as usize]
} // }
0x0000 // generic response 0x0000 // generic response
} }
@@ -123,10 +123,10 @@ impl Memory for Bus {
// Ram is 3x mirrored after 07ff // Ram is 3x mirrored after 07ff
self.ram[(addr & RAM_PHYS_RANGE[1]) as usize] = data self.ram[(addr & RAM_PHYS_RANGE[1]) as usize] = data
} }
if PPU_ADDR_RANGE[0] <= addr && addr <= PPU_ADDR_RANGE[1] { // if PPU_ADDR_RANGE[0] <= addr && addr <= PPU_ADDR_RANGE[1] {
// PPU memory is mirrored after 0x2007 to 0x3fff // // PPU memory is mirrored after 0x2007 to 0x3fff
self.ram[(addr & PPU_PHYS_RANGE[1]) as usize] = data // self.ram[(addr & PPU_PHYS_RANGE[1]) as usize] = data
} // }
} }
} }

View File

@@ -4,25 +4,37 @@ use image::{ImageBuffer, Rgba};
use rand::Rng; use rand::Rng;
pub struct PPU { pub struct PPU {
pub cycle: i16,
pub scanline: i16,
pub canvas_main: ImageBuffer<Rgba<u8>, Vec<u8>> pub canvas_main: ImageBuffer<Rgba<u8>, Vec<u8>>
} }
impl PPU { impl PPU {
pub fn new() -> Self { pub fn new() -> Self {
PPU { PPU {
cycle: 0,
scanline: 0,
canvas_main: ImageBuffer::new(256, 240), canvas_main: ImageBuffer::new(256, 240),
} }
} }
} }
impl Clockable for PPU { impl Clockable for PPU {
fn clock<T: Memory>(&mut self, bus: &mut T) { fn clock<T: Memory>(&mut self, _bus: &mut T) {
// update random pixel // random noise
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
let x = rng.gen_range(0, self.canvas_main.width()); let x = rng.gen_range(0, 256);
let y = rng.gen_range(0, self.canvas_main.height()); let y = rng.gen_range(0, 240);
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 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);
} }
} }