diff --git a/src/VIDEO/vid_s3_virge.c b/src/VIDEO/vid_s3_virge.c index c903fe0a6..c61a672ca 100644 --- a/src/VIDEO/vid_s3_virge.c +++ b/src/VIDEO/vid_s3_virge.c @@ -1892,7 +1892,7 @@ static void s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat) uint32_t *pattern_data; uint32_t src_addr; uint32_t dest_addr; - uint32_t source = 0, dest, pattern; + uint32_t source = 0, dest = 0, pattern; uint32_t out = 0; int update; @@ -2110,7 +2110,7 @@ static void s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat) while (count && virge->s3d.h) { uint32_t dest_addr = virge->s3d.dest_base + (virge->s3d.dest_x * x_mul) + (virge->s3d.dest_y * virge->s3d.dest_str); - uint32_t source = 0, dest, pattern = virge->s3d.pat_fg_clr; + uint32_t source = 0, dest = 0, pattern = virge->s3d.pat_fg_clr; uint32_t out = 0; int update = 1; @@ -2183,7 +2183,7 @@ static void s3_virge_bitblt(virge_t *virge, int count, uint32_t cpu_dat) do { uint32_t dest_addr = virge->s3d.dest_base + (x * x_mul) + (virge->s3d.dest_y * virge->s3d.dest_str); - uint32_t source = 0, dest, pattern; + uint32_t source = 0, dest = 0, pattern; uint32_t out = 0; int update = 1; @@ -2240,7 +2240,7 @@ skip_line: do { uint32_t dest_addr = virge->s3d.dest_base + (x * x_mul) + (y * virge->s3d.dest_str); - uint32_t source = 0, dest, pattern; + uint32_t source = 0, dest = 0, pattern; uint32_t out = 0; int update = 1; diff --git a/src/disc_img.c b/src/disc_img.c index 64eb40fe7..9d90946a6 100644 --- a/src/disc_img.c +++ b/src/disc_img.c @@ -35,7 +35,6 @@ static struct uint8_t sector_size; int xdf_type; /* 0 = not XDF, 1-5 = one of the five XDF types */ int dmf; - int hole; int track; int track_width; uint32_t base; @@ -341,6 +340,7 @@ void img_load(int drive, wchar_t *fn) uint8_t *bpos; uint16_t track_bytes = 0; uint8_t *literal; + int guess = 0; ext = get_extension_w(fn); @@ -706,11 +706,17 @@ jump_if_fdf: img[drive].sides = 2; img[drive].sector_size = 2; - img[drive].hole = 0; - pclog("BPB reports %i sides and %i bytes per sector (%i sectors total)\n", bpb_sides, bpb_bps, bpb_total); - if ((((bpb_sides < 1) || (bpb_sides > 2) || !bps_is_valid(bpb_bps) || !first_byte_is_valid(first_byte)) && !fdi && !cqm) || !fdd_get_check_bpb(drive)) + guess = (bpb_sides < 1); + guess = guess || (bpb_sides > 2); + guess = guess || !bps_is_valid(bpb_bps); + guess = guess || !first_byte_is_valid(first_byte); + guess = guess || !fdd_get_check_bpb(drive); + guess = guess && !fdi; + guess = guess && !cqm; + + if (guess) { /* The BPB is giving us a wacky number of sides and/or bytes per sector, therefore it is most probably not a BPB at all, so we have to guess the parameters from file size. */ @@ -756,6 +762,10 @@ jump_if_fdf: memset(discfns[drive], 0, sizeof(discfns[drive])); return; } + + bpb_sides = img[drive].sides; + bpb_sectors = img[drive].sectors; + bpb_total = size >> (img[drive].sector_size + 7); } else {