ppu main window drawing
This commit is contained in:
@@ -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();
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user