diff --git a/main.c b/main.c
index 1c1fee7..9a6e455 100644
--- a/main.c
+++ b/main.c
@@ -161,8 +161,8 @@ static enum {UNKNOWN, DMNEW, WETEK, AZBOX863x, AZBOX865x, ST, PALLAS, VULCAN, XI
static int chr_luma_stride = 0x40;
static int chr_luma_register_offset = 0;
-static unsigned int registeroffset = 0;
-static unsigned int mem2memdma_register = 0;
+static off_t registeroffset = 0;
+static off_t mem2memdma_register = 0;
static int quiet = 0;
static int video_dev = 0;
@@ -1148,7 +1148,8 @@ void getvideo(unsigned char *video, int *xres, int *yres)
return;
}
- int adr, adr2, ofs, ofs2, offset, pageoffset;
+ off_t adr;
+ int adr2, ofs, ofs2, offset, pageoffset;
int xtmp,xsub,ytmp,t2,dat1;
if (stb_type == BRCM73565 || stb_type == BRCM73625 || stb_type == BRCM7439DAGS || stb_type == BRCM7439 || stb_type == BRCM75845 || stb_type == BRCM72604) {
@@ -1158,13 +1159,13 @@ void getvideo(unsigned char *video, int *xres, int *yres)
ofs2 = data[chr_luma_register_offset + 28] << 4; /* chroma lines */
adr2 = data[chr_luma_register_offset + 3] << 24 | data[chr_luma_register_offset + 2] << 16 | data[chr_luma_register_offset + 1] << 8;
stride = data[0x19] << 8 | data[0x18];
- adr = data[0x37] << 24 | data[0x36] << 16 | data[0x35] << 8; /* start of videomem */
+ adr = (data[0x37] << 24 | data[0x36] << 16 | data[0x35] << 8) & 0xffff0000; /* start of videomem */
} else {
ofs = data[chr_luma_register_offset + 8] << 4; /* luma lines */
ofs2 = data[chr_luma_register_offset + 12] << 4; /* chroma lines */
adr2 = data[chr_luma_register_offset + 3] << 24 | data[chr_luma_register_offset + 2] << 16 | data[chr_luma_register_offset + 1] << 8;
stride = data[0x15] << 8 | data[0x14];
- adr = data[0x1f] << 24 | data[0x1e] << 16 | data[0x1d] << 8; /* start of videomem */
+ adr = (data[0x1f] << 24 | data[0x1e] << 16 | data[0x1d] << 8) & 0xffff0000; /* start of videomem */
}
offset = adr2 - adr;
pageoffset = adr & 0xfff;