diff --git a/src/core/gpu/mod.rs b/src/core/gpu/mod.rs index 58f6a0b..e391172 100644 --- a/src/core/gpu/mod.rs +++ b/src/core/gpu/mod.rs @@ -166,7 +166,7 @@ pub struct Gpu { pub dispcnt: DisplayControl, pub dispstat: DisplayStatus, - pub bg: [Background; 4], + pub backgrounds: [Background; 4], pub bg_aff: [BgAffine; 2], pub win0: Window, @@ -195,7 +195,7 @@ impl Gpu { Gpu { dispcnt: DisplayControl(0x80), dispstat: DisplayStatus(0), - bg: [ + backgrounds: [ Background::default(), Background::default(), Background::default(), diff --git a/src/core/gpu/mosaic.rs b/src/core/gpu/mosaic.rs index b2a18a5..ef61978 100644 --- a/src/core/gpu/mosaic.rs +++ b/src/core/gpu/mosaic.rs @@ -13,14 +13,14 @@ impl Gpu { let vsize = (self.mosaic.bg_vsize() + 1) as usize; for bg in 0..4 { - if self.dispcnt.enable_bg(bg) && self.bg[bg].bgcnt.mosaic() { + if self.dispcnt.enable_bg(bg) && self.backgrounds[bg].bgcnt.mosaic() { let y = self.vcount as usize; if y % vsize == 0 { - self.bg[bg].mosaic_first_row = self.bg[bg].line.clone(); + self.backgrounds[bg].mosaic_first_row = self.backgrounds[bg].line.clone(); } for x in 0..DISPLAY_WIDTH { - let color = self.bg[bg].mosaic_first_row[(x / hsize) * hsize]; - self.bg[bg].line[x] = color; + let color = self.backgrounds[bg].mosaic_first_row[(x / hsize) * hsize]; + self.backgrounds[bg].line[x] = color; } } } diff --git a/src/core/gpu/render/bitmap.rs b/src/core/gpu/render/bitmap.rs index 606cc40..479d7e7 100644 --- a/src/core/gpu/render/bitmap.rs +++ b/src/core/gpu/render/bitmap.rs @@ -19,14 +19,14 @@ impl Gpu { for x in 0..DISPLAY_WIDTH { let t = utils::transform_bg_point(ref_point, x as i32, pa, pc); if !SCREEN_VIEWPORT.contains_point(t) { - self.bg[bg].line[x] = Rgb15::TRANSPARENT; + self.backgrounds[bg].line[x] = Rgb15::TRANSPARENT; continue; } let pixel_index = index2d!(u32, t.0, t.1, DISPLAY_WIDTH); let pixel_ofs = 2 * pixel_index; let color = Rgb15(self.vram.read_16(pixel_ofs)); - self.bg[bg].line[x] = color; + self.backgrounds[bg].line[x] = color; } } @@ -46,14 +46,14 @@ impl Gpu { for x in 0..DISPLAY_WIDTH { let t = utils::transform_bg_point(ref_point, x as i32, pa, pc); if !SCREEN_VIEWPORT.contains_point(t) { - self.bg[bg].line[x] = Rgb15::TRANSPARENT; + self.backgrounds[bg].line[x] = Rgb15::TRANSPARENT; continue; } let bitmap_index = index2d!(u32, t.0, t.1, DISPLAY_WIDTH); let bitmap_ofs = page_ofs + (bitmap_index as u32); let index = self.vram.read_8(bitmap_ofs) as u32; let color = self.get_palette_color(index, 0, 0); - self.bg[bg].line[x] = color; + self.backgrounds[bg].line[x] = color; } } } diff --git a/src/core/gpu/render/text.rs b/src/core/gpu/render/text.rs index 6cbd794..7f2e3fe 100644 --- a/src/core/gpu/render/text.rs +++ b/src/core/gpu/render/text.rs @@ -9,12 +9,12 @@ use crate::core::Bus; impl Gpu { pub(in super::super) fn render_reg_bg(&mut self, bg: usize) { - let (h_ofs, v_ofs) = (self.bg[bg].bghofs as u32, self.bg[bg].bgvofs as u32); - let tileset_base = self.bg[bg].bgcnt.char_block(); - let tilemap_base = self.bg[bg].bgcnt.screen_block(); - let (tile_size, pixel_format) = self.bg[bg].bgcnt.tile_format(); + let (h_ofs, v_ofs) = (self.backgrounds[bg].bghofs as u32, self.backgrounds[bg].bgvofs as u32); + let tileset_base = self.backgrounds[bg].bgcnt.char_block(); + let tilemap_base = self.backgrounds[bg].bgcnt.screen_block(); + let (tile_size, pixel_format) = self.backgrounds[bg].bgcnt.tile_format(); - let (bg_width, bg_height) = self.bg[bg].bgcnt.size_regular(); + let (bg_width, bg_height) = self.backgrounds[bg].bgcnt.size_regular(); let screen_y = self.vcount as u32; let mut screen_x = 0; @@ -64,7 +64,7 @@ impl Gpu { PixelFormat::BPP8 => 0u32, }; let color = self.get_palette_color(index as u32, palette_bank, 0); - self.bg[bg].line[screen_x as usize] = color; + self.backgrounds[bg].line[screen_x as usize] = color; screen_x += 1; if (DISPLAY_WIDTH as u32) == screen_x { return; @@ -83,17 +83,17 @@ impl Gpu { pub(in super::super) fn render_aff_bg(&mut self, bg: usize) { assert!(bg == 2 || bg == 3); - let texture_size = 128 << self.bg[bg].bgcnt.bg_size(); + let texture_size = 128 << self.backgrounds[bg].bgcnt.bg_size(); let viewport = ViewPort::new(texture_size, texture_size); let ref_point = self.get_ref_point(bg); let pa = self.bg_aff[bg - 2].pa as i16 as i32; let pc = self.bg_aff[bg - 2].pc as i16 as i32; - let screen_block = self.bg[bg].bgcnt.screen_block(); - let char_block = self.bg[bg].bgcnt.char_block(); + let screen_block = self.backgrounds[bg].bgcnt.screen_block(); + let char_block = self.backgrounds[bg].bgcnt.char_block(); - let wraparound = self.bg[bg].bgcnt.affine_wraparound(); + let wraparound = self.backgrounds[bg].bgcnt.affine_wraparound(); for screen_x in 0..(DISPLAY_WIDTH as i32) { let mut t = utils::transform_bg_point(ref_point, screen_x, pa, pc); @@ -103,7 +103,7 @@ impl Gpu { t.0 = t.0.rem_euclid(texture_size); t.1 = t.1.rem_euclid(texture_size); } else { - self.bg[bg].line[screen_x as usize] = Rgb15::TRANSPARENT; + self.backgrounds[bg].line[screen_x as usize] = Rgb15::TRANSPARENT; continue; } } @@ -121,7 +121,7 @@ impl Gpu { 0, 0, ); - self.bg[bg].line[screen_x as usize] = color; + self.backgrounds[bg].line[screen_x as usize] = color; } } } diff --git a/src/core/gpu/sfx.rs b/src/core/gpu/sfx.rs index 91adc41..f05b902 100644 --- a/src/core/gpu/sfx.rs +++ b/src/core/gpu/sfx.rs @@ -54,7 +54,7 @@ impl Gpu { } } } - backgrounds.sort_by_key(|bg| (self.bg[*bg].bgcnt.priority(), *bg)); + backgrounds.sort_by_key(|bg| (self.backgrounds[*bg].bgcnt.priority(), *bg)); backgrounds } @@ -62,10 +62,10 @@ impl Gpu { #[allow(unused)] fn layer_to_pixel(&self, x: usize, y: usize, layer: &RenderLayer) -> Rgb15 { match layer.kind { - RenderLayerKind::Background0 => self.bg[0].line[x], - RenderLayerKind::Background1 => self.bg[1].line[x], - RenderLayerKind::Background2 => self.bg[2].line[x], - RenderLayerKind::Background3 => self.bg[3].line[x], + RenderLayerKind::Background0 => self.backgrounds[0].line[x], + RenderLayerKind::Background1 => self.backgrounds[1].line[x], + RenderLayerKind::Background2 => self.backgrounds[2].line[x], + RenderLayerKind::Background3 => self.backgrounds[3].line[x], RenderLayerKind::Objects => self.obj_buffer_get(x, y).color, RenderLayerKind::Backdrop => Rgb15(self.palette_ram.read_16(0)), } @@ -164,14 +164,14 @@ impl Gpu { layers.push_unchecked(RenderLayer::backdrop(backdrop_color)); } - for bg in backgrounds.into_iter() { - let bg_pixel = self.bg[*bg].line[x]; + for bg in backgrounds.iter() { + let bg_pixel = self.backgrounds[*bg].line[x]; if !bg_pixel.is_transparent() { unsafe { layers.push_unchecked(RenderLayer::background( *bg, bg_pixel, - self.bg[*bg].bgcnt.priority(), + self.backgrounds[*bg].bgcnt.priority(), )); } } diff --git a/src/core/iodev.rs b/src/core/iodev.rs index 2dcd157..613cea7 100644 --- a/src/core/iodev.rs +++ b/src/core/iodev.rs @@ -58,10 +58,10 @@ impl Bus for IoDevices { REG_DISPCNT => io.gpu.dispcnt.0, REG_DISPSTAT => io.gpu.dispstat.0, REG_VCOUNT => io.gpu.vcount as u16, - REG_BG0CNT => io.gpu.bg[0].bgcnt.0, - REG_BG1CNT => io.gpu.bg[1].bgcnt.0, - REG_BG2CNT => io.gpu.bg[2].bgcnt.0, - REG_BG3CNT => io.gpu.bg[3].bgcnt.0, + REG_BG0CNT => io.gpu.backgrounds[0].bgcnt.0, + REG_BG1CNT => io.gpu.backgrounds[1].bgcnt.0, + REG_BG2CNT => io.gpu.backgrounds[2].bgcnt.0, + REG_BG3CNT => io.gpu.backgrounds[3].bgcnt.0, REG_WIN0H => ((io.gpu.win0.left as u16) << 8 | (io.gpu.win0.right as u16)), REG_WIN1H => ((io.gpu.win1.left as u16) << 8 | (io.gpu.win1.right as u16)), REG_WIN0V => ((io.gpu.win0.top as u16) << 8 | (io.gpu.win0.bottom as u16)), @@ -122,18 +122,18 @@ impl Bus for IoDevices { match io_addr { REG_DISPCNT => io.gpu.dispcnt.0 = value, REG_DISPSTAT => io.gpu.dispstat.0 |= value & !3, - REG_BG0CNT => io.gpu.bg[0].bgcnt.0 = value, - REG_BG1CNT => io.gpu.bg[1].bgcnt.0 = value, - REG_BG2CNT => io.gpu.bg[2].bgcnt.0 = value, - REG_BG3CNT => io.gpu.bg[3].bgcnt.0 = value, - REG_BG0HOFS => io.gpu.bg[0].bghofs = value & 0x1ff, - REG_BG0VOFS => io.gpu.bg[0].bgvofs = value & 0x1ff, - REG_BG1HOFS => io.gpu.bg[1].bghofs = value & 0x1ff, - REG_BG1VOFS => io.gpu.bg[1].bgvofs = value & 0x1ff, - REG_BG2HOFS => io.gpu.bg[2].bghofs = value & 0x1ff, - REG_BG2VOFS => io.gpu.bg[2].bgvofs = value & 0x1ff, - REG_BG3HOFS => io.gpu.bg[3].bghofs = value & 0x1ff, - REG_BG3VOFS => io.gpu.bg[3].bgvofs = value & 0x1ff, + REG_BG0CNT => io.gpu.backgrounds[0].bgcnt.0 = value, + REG_BG1CNT => io.gpu.backgrounds[1].bgcnt.0 = value, + REG_BG2CNT => io.gpu.backgrounds[2].bgcnt.0 = value, + REG_BG3CNT => io.gpu.backgrounds[3].bgcnt.0 = value, + REG_BG0HOFS => io.gpu.backgrounds[0].bghofs = value & 0x1ff, + REG_BG0VOFS => io.gpu.backgrounds[0].bgvofs = value & 0x1ff, + REG_BG1HOFS => io.gpu.backgrounds[1].bghofs = value & 0x1ff, + REG_BG1VOFS => io.gpu.backgrounds[1].bgvofs = value & 0x1ff, + REG_BG2HOFS => io.gpu.backgrounds[2].bghofs = value & 0x1ff, + REG_BG2VOFS => io.gpu.backgrounds[2].bgvofs = value & 0x1ff, + REG_BG3HOFS => io.gpu.backgrounds[3].bghofs = value & 0x1ff, + REG_BG3VOFS => io.gpu.backgrounds[3].bgvofs = value & 0x1ff, REG_BG2X_L | REG_BG3X_L => { let index = (io_addr - REG_BG2X_L) / 0x10; let t = io.gpu.bg_aff[index as usize].x as u32;