mirror of
https://github.com/FranLMSP/rmg-001.git
synced 2024-11-23 10:12:11 +00:00
Fix crashing bug
This commit is contained in:
parent
0aa6e56fc1
commit
e2959abfaf
@ -156,9 +156,8 @@ impl Bus {
|
|||||||
let source = (data as u16) * 0x100;
|
let source = (data as u16) * 0x100;
|
||||||
let mut count: u16 = 0;
|
let mut count: u16 = 0;
|
||||||
let oam_addr = SPRITE_ATTRIBUTE_TABLE.min().unwrap();
|
let oam_addr = SPRITE_ATTRIBUTE_TABLE.min().unwrap();
|
||||||
let mut ppu = self.ppu.borrow_mut();
|
|
||||||
while count < 160 {
|
while count < 160 {
|
||||||
ppu.write_oam(oam_addr + count, self.data[(source + count) as usize]);
|
self.ppu.borrow_mut().write_oam(oam_addr + count, self.data[(source + count) as usize]);
|
||||||
count += 1;
|
count += 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -107,13 +107,11 @@ impl Emulator {
|
|||||||
|
|
||||||
pub fn run(&mut self, cpu_cycles: Cycles, frame_buffer: &mut [u8]) {
|
pub fn run(&mut self, cpu_cycles: Cycles, frame_buffer: &mut [u8]) {
|
||||||
self.cpu.reset_cycles();
|
self.cpu.reset_cycles();
|
||||||
let mut ppu = self.ppu.borrow_mut();
|
|
||||||
let mut timer = self.timer.borrow_mut();
|
|
||||||
while self.cpu.get_cycles().to_t().0 <= cpu_cycles.0 {
|
while self.cpu.get_cycles().to_t().0 <= cpu_cycles.0 {
|
||||||
self.cpu.run(&mut self.bus);
|
self.cpu.run(&mut self.bus);
|
||||||
let cycles = self.cpu.get_last_op_cycles().to_t();
|
let cycles = self.cpu.get_last_op_cycles().to_t();
|
||||||
ppu.do_cycles(&mut self.bus, cycles, frame_buffer);
|
self.ppu.borrow_mut().do_cycles(&mut self.bus, cycles, frame_buffer);
|
||||||
timer.do_cycles(&mut self.bus, cycles);
|
self.timer.borrow_mut().do_cycles(&mut self.bus, cycles);
|
||||||
|
|
||||||
// 1 CPU cycle = 238.42ns
|
// 1 CPU cycle = 238.42ns
|
||||||
// thread::sleep(time::Duration::from_nanos((self.cpu.get_last_op_cycles().0 * 238).try_into().unwrap()));
|
// thread::sleep(time::Duration::from_nanos((self.cpu.get_last_op_cycles().0 * 238).try_into().unwrap()));
|
||||||
|
@ -184,8 +184,9 @@ impl Sprite {
|
|||||||
let tile_line = y.rem_euclid(height) * 2;
|
let tile_line = y.rem_euclid(height) * 2;
|
||||||
let addr = 0x8000 + (tile_number as u16 * 16) + tile_line as u16;
|
let addr = 0x8000 + (tile_number as u16 * 16) + tile_line as u16;
|
||||||
|
|
||||||
let tile_byte_1 = vram[addr as usize - 0x2000];
|
let vram_start = VIDEO_RAM.min().unwrap();
|
||||||
let tile_byte_2 = vram[addr as usize - 0x2000 + 1];
|
let tile_byte_1 = vram[(addr - vram_start) as usize];
|
||||||
|
let tile_byte_2 = vram[(addr - vram_start + 1) as usize];
|
||||||
let bit_pixels_array = PPU::get_byte_pixels(tile_byte_1, tile_byte_2);
|
let bit_pixels_array = PPU::get_byte_pixels(tile_byte_1, tile_byte_2);
|
||||||
self.bit_pixels = Some(bit_pixels_array);
|
self.bit_pixels = Some(bit_pixels_array);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user