diff --git a/src/vid_ati_mach64.c b/src/vid_ati_mach64.c index 371638e..f6c7720 100644 --- a/src/vid_ati_mach64.c +++ b/src/vid_ati_mach64.c @@ -468,12 +468,12 @@ void mach64_recalctimings(svga_t *svga) break; } - svga->vrammask = mach64->vram_mask; + svga->vram_display_mask = mach64->vram_mask; // pclog("mach64_recalctimings : frame %i,%i disp %i,%i vsync at %i rowoffset %i pixel clock %f MA %08X\n", svga->htotal, svga->vtotal, svga->hdisp, svga->dispend, svga->vsyncstart, svga->rowoffset, svga->clock, svga->ma); } else { - svga->vrammask = (mach64->regs[0x36] & 0x01) ? mach64->vram_mask : 0x3ffff; + svga->vram_display_mask = (mach64->regs[0x36] & 0x01) ? mach64->vram_mask : 0x3ffff; } } diff --git a/src/vid_cl5429.c b/src/vid_cl5429.c index 6616b59..15a805d 100644 --- a/src/vid_cl5429.c +++ b/src/vid_cl5429.c @@ -350,9 +350,10 @@ void gd5429_write_linear(uint32_t addr, uint8_t val, void *p) { addr <<= 2; } - addr &= 0x7fffff; - if (addr >= svga->vram_limit) + addr &= svga->decode_mask; + if (addr >= svga->vram_max) return; + addr &= svga->vram_mask; // if (svga_output) pclog("%08X\n", addr); svga->changedvram[addr >> 12] = changeframecount; @@ -595,16 +596,16 @@ void gd5429_start_blit(uint32_t cpu_dat, int count, void *p) switch (gd5429->blt.mode & 0xc0) { case 0x00: - src = svga->vram[gd5429->blt.src_addr & svga->vrammask]; + src = svga->vram[gd5429->blt.src_addr & svga->vram_mask]; gd5429->blt.src_addr += ((gd5429->blt.mode & 0x01) ? -1 : 1); mask = 1; break; case 0x40: - src = svga->vram[(gd5429->blt.src_addr & (svga->vrammask & ~7)) | (gd5429->blt.dst_addr & 7)]; + src = svga->vram[(gd5429->blt.src_addr & (svga->vram_mask & ~7)) | (gd5429->blt.dst_addr & 7)]; mask = 1; break; case 0x80: - mask = svga->vram[gd5429->blt.src_addr & svga->vrammask] & (0x80 >> gd5429->blt.x_count); + mask = svga->vram[gd5429->blt.src_addr & svga->vram_mask] & (0x80 >> gd5429->blt.x_count); src = mask ? gd5429->blt.fg_col : gd5429->blt.bg_col; gd5429->blt.x_count++; if (gd5429->blt.x_count == 8) @@ -614,16 +615,16 @@ void gd5429_start_blit(uint32_t cpu_dat, int count, void *p) } break; case 0xc0: - mask = svga->vram[gd5429->blt.src_addr & svga->vrammask] & (0x80 >> (gd5429->blt.dst_addr & 7)); + mask = svga->vram[gd5429->blt.src_addr & svga->vram_mask] & (0x80 >> (gd5429->blt.dst_addr & 7)); src = mask ? gd5429->blt.fg_col : gd5429->blt.bg_col; break; } count--; } - dst = svga->vram[gd5429->blt.dst_addr & svga->vrammask]; - svga->changedvram[(gd5429->blt.dst_addr & svga->vrammask) >> 12] = changeframecount; + dst = svga->vram[gd5429->blt.dst_addr & svga->vram_mask]; + svga->changedvram[(gd5429->blt.dst_addr & svga->vram_mask) >> 12] = changeframecount; - pclog("Blit %i,%i %06X %06X %06X %02X %02X %02X %02X ", gd5429->blt.width, gd5429->blt.height_internal, gd5429->blt.src_addr, gd5429->blt.dst_addr, gd5429->blt.src_addr & svga->vrammask, svga->vram[gd5429->blt.src_addr & svga->vrammask], 0x80 >> (gd5429->blt.dst_addr & 7), src, dst); + pclog("Blit %i,%i %06X %06X %06X %02X %02X %02X %02X ", gd5429->blt.width, gd5429->blt.height_internal, gd5429->blt.src_addr, gd5429->blt.dst_addr, gd5429->blt.src_addr & svga->vram_mask, svga->vram[gd5429->blt.src_addr & svga->vram_mask], 0x80 >> (gd5429->blt.dst_addr & 7), src, dst); switch (gd5429->blt.rop) { case 0x00: dst = 0; break; @@ -647,7 +648,7 @@ void gd5429_start_blit(uint32_t cpu_dat, int count, void *p) if ((gd5429->blt.width_backup - gd5429->blt.width) >= (gd5429->blt.mask & 7) && !((gd5429->blt.mode & 0x08) && !mask)) - svga->vram[gd5429->blt.dst_addr & svga->vrammask] = dst; + svga->vram[gd5429->blt.dst_addr & svga->vram_mask] = dst; gd5429->blt.dst_addr += ((gd5429->blt.mode & 0x01) ? -1 : 1); diff --git a/src/vid_et4000w32.c b/src/vid_et4000w32.c index 97fca5f..201701b 100644 --- a/src/vid_et4000w32.c +++ b/src/vid_et4000w32.c @@ -554,7 +554,7 @@ void et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *p) } else { - if ((addr&0x1fff) + et4000->mmu.base[bank] < svga->vram_limit) + if ((addr&0x1fff) + et4000->mmu.base[bank] < svga->vram_max) { svga->vram[(addr & 0x1fff) + et4000->mmu.base[bank]] = val; svga->changedvram[((addr & 0x1fff) + et4000->mmu.base[bank]) >> 12] = changeframecount; @@ -614,7 +614,7 @@ uint8_t et4000w32p_mmu_read(uint32_t addr, void *p) /*???*/ return temp; } - if ((addr&0x1fff) + et4000->mmu.base[bank] >= svga->vram_limit) + if ((addr&0x1fff) + et4000->mmu.base[bank] >= svga->vram_max) return 0xff; return svga->vram[(addr&0x1fff) + et4000->mmu.base[bank]]; diff --git a/src/vid_oti067.c b/src/vid_oti067.c index e528e01..4a2cbc8 100644 --- a/src/vid_oti067.c +++ b/src/vid_oti067.c @@ -65,13 +65,13 @@ void oti067_out(uint16_t addr, uint8_t val, void *p) switch (oti067->index) { case 0xD: - svga->vrammask = (val & 0xc) ? oti067->vram_mask : 0x3ffff; + svga->vram_display_mask = (val & 0xc) ? oti067->vram_mask : 0x3ffff; if ((val & 0x80) && oti067->vram_size == 256) mem_mapping_disable(&svga->mapping); else mem_mapping_enable(&svga->mapping); if (!(val & 0x80)) - svga->vrammask = 0x3ffff; + svga->vram_display_mask = 0x3ffff; break; case 0x11: svga->read_bank = (val & 0xf) * 65536; diff --git a/src/vid_s3.c b/src/vid_s3.c index d8f5fe9..653eb76 100644 --- a/src/vid_s3.c +++ b/src/vid_s3.c @@ -818,7 +818,7 @@ void s3_out(uint16_t addr, uint8_t val, void *p) s3->ma_ext = (s3->ma_ext & 0x1c) | ((val & 0x30) >> 4); break; case 0x32: - svga->vrammask = (val & 0x40) ? 0x3ffff : s3->vram_mask; + svga->vram_display_mask = (val & 0x40) ? 0x3ffff : s3->vram_mask; break; case 0x50: @@ -2222,6 +2222,29 @@ static void *s3_init(char *bios_fn, int chip) s3_hwcursor_draw, NULL); + svga->decode_mask = (4 << 20) - 1; + switch (vram) + { + case 0: /*512kb*/ + svga->vram_mask = (1 << 19) - 1; + svga->vram_max = 2 << 20; + break; + case 1: /*1MB*/ + /*VRAM in first MB, mirrored in 2nd MB, 3rd and 4th MBs are open bus*/ + svga->vram_mask = (1 << 20) - 1; + svga->vram_max = 2 << 20; + break; + case 2: default: /*2MB*/ + /*VRAM in first 2 MB, 3rd and 4th MBs are open bus*/ + svga->vram_mask = (2 << 20) - 1; + svga->vram_max = 2 << 20; + break; + case 4: /*4MB*/ + svga->vram_mask = (4 << 20) - 1; + svga->vram_max = 4 << 20; + break; + } + if (PCI) svga->crtc[0x36] = 2 | (3 << 2) | (1 << 4) | (vram_sizes[vram] << 5); else diff --git a/src/vid_s3_virge.c b/src/vid_s3_virge.c index 625901b..9451755 100644 --- a/src/vid_s3_virge.c +++ b/src/vid_s3_virge.c @@ -370,7 +370,7 @@ static void s3_virge_out(uint16_t addr, uint8_t val, void *p) break; case 0x32: if ((svga->crtc[0x67] & 0xc) != 0xc) - svga->vrammask = (val & 0x40) ? 0x3ffff : ((virge->memory_size << 20) - 1); + svga->vram_display_mask = (val & 0x40) ? 0x3ffff : ((virge->memory_size << 20) - 1); s3_virge_update_irqs(virge); break; @@ -583,7 +583,7 @@ static void s3_virge_recalctimings(svga_t *svga) { svga->rowoffset = (svga->rowoffset * 3) / 4; /*Hack*/ } - svga->vrammask = (svga->crtc[0x32] & 0x40) ? 0x3ffff : ((virge->memory_size << 20) - 1); + svga->vram_display_mask = (svga->crtc[0x32] & 0x40) ? 0x3ffff : ((virge->memory_size << 20) - 1); //pclog("VGA mode x_disp=%i dispend=%i vtotal=%i\n", svga->hdisp, svga->dispend, svga->vtotal); } else /*Streams mode*/ @@ -631,7 +631,7 @@ static void s3_virge_recalctimings(svga_t *svga) svga->render = svga_render_32bpp_highres; break; } - svga->vrammask = (virge->memory_size << 20) - 1; + svga->vram_display_mask = (virge->memory_size << 20) - 1; } if (((svga->miscout >> 2) & 3) == 3) diff --git a/src/vid_svga.c b/src/vid_svga.c index 7e9f7e7..6b45d84 100644 --- a/src/vid_svga.c +++ b/src/vid_svga.c @@ -483,7 +483,7 @@ void svga_poll(void *p) { svga->hdisp_on=1; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; if (svga->firstline == 2000) { svga->firstline = svga->displine; @@ -561,7 +561,7 @@ void svga_poll(void *p) svga->maback += (svga->rowoffset << 3); if (svga->interlace) svga->maback += (svga->rowoffset << 3); - svga->maback &= svga->vrammask; + svga->maback &= svga->vram_display_mask; svga->ma = svga->maback; } else @@ -594,7 +594,7 @@ void svga_poll(void *p) svga->fullchange = 2; svga->blink++; - for (x = 0; x < (svga->vram_limit >> 12); x++) + for (x = 0; x < ((svga->vram_mask+1) >> 12); x++) { if (svga->changedvram[x]) svga->changedvram[x]--; @@ -728,8 +728,10 @@ int svga_init(svga_t *svga, void *p, int memsize, svga->dispofftime = 1000 * (1 << TIMER_SHIFT); svga->bpp = 8; svga->vram = malloc(memsize); - svga->vram_limit = memsize; - svga->vrammask = memsize - 1; + svga->vram_max = memsize; + svga->vram_display_mask = memsize - 1; + svga->vram_mask = memsize - 1; + svga->decode_mask = 0x7fffff; svga->changedvram = malloc(/*(memsize >> 12) << 1*/0x800000 >> 12); svga->recalctimings_ex = recalctimings_ex; svga->video_in = video_in; @@ -790,10 +792,12 @@ void svga_write(uint32_t addr, uint8_t val, void *p) { addr<<=2; } - addr &= 0x7fffff; + addr &= svga->decode_mask; - if (addr >= svga->vram_limit) + if (addr >= svga->vram_max) return; + + addr &= svga->vram_mask; if (svga_output) pclog("%08X (%i, %i) %02X %i %i %i %02X\n", addr, addr & 1023, addr >> 10, val, writemask2, svga->writemode, svga->chain4, svga->gdcreg[8]); svga->changedvram[addr >> 12] = changeframecount; @@ -954,19 +958,20 @@ uint8_t svga_read(uint32_t addr, void *p) egareads++; // pclog("Readega %06X ",addr); + addr &= svga->banked_mask; addr += svga->read_bank; - - latch_addr = (addr << 2) & 0x7fffff; + + latch_addr = (addr << 2) & svga->decode_mask; // pclog("%05X %i %04X:%04X %02X %02X %i\n",addr,svga->chain4,CS,pc, vram[addr & 0x7fffff], vram[(addr << 2) & 0x7fffff], svga->readmode); // pclog("%i\n", svga->readmode); if (svga->chain4 || svga->fb_only) { - addr &= 0x7fffff; - if (addr >= svga->vram_limit) - return 0xff; - return svga->vram[addr]; + addr &= svga->decode_mask; + if (addr >= svga->vram_max) + return 0xff; + return svga->vram[addr & svga->vram_mask]; } else if (svga->chain2_read) { @@ -976,22 +981,27 @@ uint8_t svga_read(uint32_t addr, void *p) } else addr<<=2; + + addr &= svga->decode_mask; - addr &= 0x7fffff; - - if (addr >= svga->vram_limit) - return 0xff; - - if (latch_addr < svga->vram_limit) + if (latch_addr >= svga->vram_max) + { + svga->la = svga->lb = svga->lc = svga->ld = 0xff; + } + else { + latch_addr &= svga->vram_mask; svga->la = svga->vram[latch_addr]; svga->lb = svga->vram[latch_addr | 0x1]; svga->lc = svga->vram[latch_addr | 0x2]; svga->ld = svga->vram[latch_addr | 0x3]; } - else - svga->la = svga->lb = svga->lc = svga->ld = 0xff; + if (addr >= svga->vram_max) + return 0xff; + + addr &= svga->vram_mask; + if (svga->readmode) { temp = svga->la; @@ -1009,6 +1019,7 @@ uint8_t svga_read(uint32_t addr, void *p) return ~(temp | temp2 | temp3 | temp4); } //pclog("Read %02X %04X %04X\n",vram[addr|svga->readplane],addr,svga->readplane); + return svga->vram[addr | readplane]; } @@ -1043,9 +1054,10 @@ void svga_write_linear(uint32_t addr, uint8_t val, void *p) { addr<<=2; } - addr &= 0x7fffff; - if (addr >= svga->vram_limit) + addr &= svga->decode_mask; + if (addr >= svga->vram_max) return; + addr &= svga->vram_mask; if (svga_output) pclog("%08X\n", addr); svga->changedvram[addr >> 12]=changeframecount; @@ -1206,10 +1218,10 @@ uint8_t svga_read_linear(uint32_t addr, void *p) if (svga->chain4 || svga->fb_only) { - addr &= 0x7fffff; - if (addr >= svga->vram_limit) - return 0xff; - return svga->vram[addr & 0x7fffff]; + addr &= svga->decode_mask; + if (addr >= svga->vram_max) + return 0xff; + return svga->vram[addr & svga->vram_mask]; } else if (svga->chain2_read) { @@ -1220,10 +1232,12 @@ uint8_t svga_read_linear(uint32_t addr, void *p) else addr<<=2; - addr &= 0x7fffff; + addr &= svga->decode_mask; - if (addr >= svga->vram_limit) - return 0xff; + if (addr >= svga->vram_max) + return 0xff; + + addr &= svga->vram_mask; svga->la = svga->vram[addr]; svga->lb = svga->vram[addr | 0x1]; @@ -1296,9 +1310,10 @@ void svga_writew(uint32_t addr, uint16_t val, void *p) if (svga_output) pclog("svga_writew: %05X ", addr); addr = (addr & svga->banked_mask) + svga->write_bank; - addr &= 0x7FFFFF; - if (addr >= svga->vram_limit) + addr &= svga->decode_mask; + if (addr >= svga->vram_max) return; + addr &= svga->vram_mask; if (svga_output) pclog("%08X (%i, %i) %04X\n", addr, addr & 1023, addr >> 10, val); svga->changedvram[addr >> 12] = changeframecount; *(uint16_t *)&svga->vram[addr] = val; @@ -1324,9 +1339,10 @@ void svga_writel(uint32_t addr, uint32_t val, void *p) if (svga_output) pclog("svga_writel: %05X ", addr); addr = (addr & svga->banked_mask) + svga->write_bank; - addr &= 0x7FFFFF; - if (addr >= svga->vram_limit) + addr &= svga->decode_mask; + if (addr >= svga->vram_max) return; + addr &= svga->vram_mask; if (svga_output) pclog("%08X (%i, %i) %08X\n", addr, addr & 1023, addr >> 10, val); svga->changedvram[addr >> 12] = changeframecount; @@ -1347,11 +1363,12 @@ uint16_t svga_readw(uint32_t addr, void *p) // pclog("Readw %05X ", addr); addr = (addr & svga->banked_mask) + svga->read_bank; - addr &= 0x7FFFFF; + addr &= svga->decode_mask; // pclog("%08X %04X\n", addr, *(uint16_t *)&vram[addr]); - if (addr >= svga->vram_limit) return 0xffff; + if (addr >= svga->vram_max) + return 0xffff; - return *(uint16_t *)&svga->vram[addr]; + return *(uint16_t *)&svga->vram[addr & svga->vram_mask]; } uint32_t svga_readl(uint32_t addr, void *p) @@ -1368,11 +1385,12 @@ uint32_t svga_readl(uint32_t addr, void *p) // pclog("Readl %05X ", addr); addr = (addr & svga->banked_mask) + svga->read_bank; - addr &= 0x7FFFFF; + addr &= svga->decode_mask; // pclog("%08X %08X\n", addr, *(uint32_t *)&vram[addr]); - if (addr >= svga->vram_limit) return 0xffffffff; + if (addr >= svga->vram_max) + return 0xffffffff; - return *(uint32_t *)&svga->vram[addr]; + return *(uint32_t *)&svga->vram[addr & svga->vram_mask]; } void svga_writew_linear(uint32_t addr, uint16_t val, void *p) @@ -1392,9 +1410,10 @@ void svga_writew_linear(uint32_t addr, uint16_t val, void *p) cycles_lost += video_timing_w; if (svga_output) pclog("Write LFBw %08X %04X\n", addr, val); - addr &= 0x7FFFFF; - if (addr >= svga->vram_limit) + addr &= svga->decode_mask; + if (addr >= svga->vram_max) return; + addr &= svga->vram_mask; svga->changedvram[addr >> 12] = changeframecount; *(uint16_t *)&svga->vram[addr] = val; } @@ -1418,9 +1437,10 @@ void svga_writel_linear(uint32_t addr, uint32_t val, void *p) cycles_lost += video_timing_l; if (svga_output) pclog("Write LFBl %08X %08X\n", addr, val); - addr &= 0x7fffff; - if (addr >= svga->vram_limit) + addr &= svga->decode_mask; + if (addr >= svga->vram_max) return; + addr &= svga->vram_mask; svga->changedvram[addr >> 12] = changeframecount; *(uint32_t *)&svga->vram[addr] = val; } @@ -1437,10 +1457,11 @@ uint16_t svga_readw_linear(uint32_t addr, void *p) cycles -= video_timing_w; cycles_lost += video_timing_w; - addr &= 0x7FFFFF; - if (addr >= svga->vram_limit) return 0xffff; + addr &= svga->decode_mask; + if (addr >= svga->vram_max) + return 0xffff; - return *(uint16_t *)&svga->vram[addr]; + return *(uint16_t *)&svga->vram[addr & svga->vram_mask]; } uint32_t svga_readl_linear(uint32_t addr, void *p) @@ -1455,10 +1476,11 @@ uint32_t svga_readl_linear(uint32_t addr, void *p) cycles -= video_timing_l; cycles_lost += video_timing_l; - addr &= 0x7FFFFF; - if (addr >= svga->vram_limit) return 0xffffffff; + addr &= svga->decode_mask; + if (addr >= svga->vram_max) + return 0xffffffff; - return *(uint32_t *)&svga->vram[addr]; + return *(uint32_t *)&svga->vram[addr & svga->vram_mask]; } diff --git a/src/vid_svga.h b/src/vid_svga.h index 9dbacd7..f3455a3 100644 --- a/src/vid_svga.h +++ b/src/vid_svga.h @@ -15,7 +15,18 @@ typedef struct svga_t uint8_t miscout; int vidclock; - uint32_t vram_limit; + /*The three variables below allow us to implement memory maps like that seen on a 1MB Trio64 : + 0MB-1MB - VRAM + 1MB-2MB - VRAM mirror + 2MB-4MB - open bus + 4MB-xMB - mirror of above + + For the example memory map, decode_mask would be 4MB-1 (4MB address space), vram_max would be 2MB + (present video memory only responds to first 2MB), vram_mask would be 1MB-1 (video memory wraps at 1MB) + */ + uint32_t decode_mask; + uint32_t vram_max; + uint32_t vram_mask; uint8_t la, lb, lc, ld; @@ -71,7 +82,7 @@ typedef struct svga_t uint8_t *vram; uint8_t *changedvram; - int vrammask; + uint32_t vram_display_mask; uint32_t banked_mask; uint32_t write_bank, read_bank; diff --git a/src/vid_svga_render.c b/src/vid_svga_render.c index 173fe6c..4e7af2b 100644 --- a/src/vid_svga_render.c +++ b/src/vid_svga_render.c @@ -51,8 +51,8 @@ void svga_render_text_40(svga_t *svga) for (x = 0; x < svga->hdisp; x += xinc) { drawcursor = ((svga->ma == svga->ca) && svga->con && svga->cursoron); - chr = svga->vram[(svga->ma << 1) & svga->vrammask]; - attr = svga->vram[((svga->ma << 1) + 1) & svga->vrammask]; + chr = svga->vram[(svga->ma << 1) & svga->vram_display_mask]; + attr = svga->vram[((svga->ma << 1) + 1) & svga->vram_display_mask]; if (attr & 8) charaddr = svga->charsetb + (chr * 128); else charaddr = svga->charseta + (chr * 128); @@ -91,7 +91,7 @@ void svga_render_text_40(svga_t *svga) svga->ma += 4; p += xinc; } - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -114,8 +114,8 @@ void svga_render_text_80(svga_t *svga) for (x = 0; x < svga->hdisp; x += xinc) { drawcursor = ((svga->ma == svga->ca) && svga->con && svga->cursoron); - chr = svga->vram[(svga->ma << 1) & svga->vrammask]; - attr = svga->vram[((svga->ma << 1) + 1) & svga->vrammask]; + chr = svga->vram[(svga->ma << 1) & svga->vram_display_mask]; + attr = svga->vram[((svga->ma << 1) + 1) & svga->vram_display_mask]; if (attr & 8) charaddr = svga->charsetb + (chr * 128); else charaddr = svga->charseta + (chr * 128); @@ -154,7 +154,7 @@ void svga_render_text_80(svga_t *svga) svga->ma += 4; p += xinc; } - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -192,7 +192,7 @@ void svga_render_2bpp_lowres(svga_t *svga) dat[1] = svga->vram[(svga->ma << 1) + 1]; } svga->ma += 4; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; p[0] = p[1] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3]]; p[2] = p[3] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3]]; @@ -242,7 +242,7 @@ void svga_render_2bpp_highres(svga_t *svga) dat[1] = svga->vram[(svga->ma << 1) + 1]; } svga->ma += 4; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; p[0] = svga->pallook[svga->egapal[(dat[0] >> 6) & 3]]; p[1] = svga->pallook[svga->egapal[(dat[0] >> 4) & 3]]; @@ -277,7 +277,7 @@ void svga_render_4bpp_lowres(svga_t *svga) *(uint32_t *)(&edat[0]) = *(uint32_t *)(&svga->vram[svga->ma]); svga->ma += 4; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; dat = edatlookup[edat[0] >> 6][edat[1] >> 6] | (edatlookup[edat[2] >> 6][edat[3] >> 6] << 2); p[0] = p[1] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; @@ -326,7 +326,7 @@ void svga_render_4bpp_highres(svga_t *svga) else *(uint32_t *)(&edat[0]) = *(uint32_t *)(&svga->vram[svga->ma]); svga->ma += 4; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; dat = edatlookup[edat[0] >> 6][edat[1] >> 6] | (edatlookup[edat[2] >> 6][edat[3] >> 6] << 2); p[0] = svga->pallook[svga->egapal[(dat >> 4) & svga->plane_mask]]; @@ -360,7 +360,7 @@ void svga_render_8bpp_lowres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 8) { - uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vrammask]); + uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]); p[0] = p[1] = svga->pallook[dat & 0xff]; p[2] = p[3] = svga->pallook[(dat >> 8) & 0xff]; @@ -370,7 +370,7 @@ void svga_render_8bpp_lowres(svga_t *svga) svga->ma += 4; p += 8; } - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -389,13 +389,13 @@ void svga_render_8bpp_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 8) { uint32_t dat; - dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]); p[0] = svga->pallook[dat & 0xff]; p[1] = svga->pallook[(dat >> 8) & 0xff]; p[2] = svga->pallook[(dat >> 16) & 0xff]; p[3] = svga->pallook[(dat >> 24) & 0xff]; - dat = *(uint32_t *)(&svga->vram[(svga->ma + 4) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + 4) & svga->vram_display_mask]); p[4] = svga->pallook[dat & 0xff]; p[5] = svga->pallook[(dat >> 8) & 0xff]; p[6] = svga->pallook[(dat >> 16) & 0xff]; @@ -404,7 +404,7 @@ void svga_render_8bpp_highres(svga_t *svga) svga->ma += 8; p += 8; } - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -422,18 +422,18 @@ void svga_render_15bpp_lowres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 4) { - uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vrammask]); + uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]); p[x] = video_15to32[dat & 0xffff]; p[x + 1] = video_15to32[dat >> 16]; - dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vram_display_mask]); p[x] = video_15to32[dat & 0xffff]; p[x + 1] = video_15to32[dat >> 16]; } svga->ma += x << 1; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -451,24 +451,24 @@ void svga_render_15bpp_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 8) { - uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vrammask]); + uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]); p[x] = video_15to32[dat & 0xffff]; p[x + 1] = video_15to32[dat >> 16]; - dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vram_display_mask]); p[x + 2] = video_15to32[dat & 0xffff]; p[x + 3] = video_15to32[dat >> 16]; - dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 8) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 8) & svga->vram_display_mask]); p[x + 4] = video_15to32[dat & 0xffff]; p[x + 5] = video_15to32[dat >> 16]; - dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 12) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 12) & svga->vram_display_mask]); p[x + 6] = video_15to32[dat & 0xffff]; p[x + 7] = video_15to32[dat >> 16]; } svga->ma += x << 1; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -486,18 +486,18 @@ void svga_render_16bpp_lowres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 4) { - uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vrammask]); + uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]); p[x] = video_16to32[dat & 0xffff]; p[x + 1] = video_16to32[dat >> 16]; - dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vram_display_mask]); p[x] = video_16to32[dat & 0xffff]; p[x + 1] = video_16to32[dat >> 16]; } svga->ma += x << 1; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -515,24 +515,24 @@ void svga_render_16bpp_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 8) { - uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vrammask]); + uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1)) & svga->vram_display_mask]); p[x] = video_16to32[dat & 0xffff]; p[x + 1] = video_16to32[dat >> 16]; - dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 4) & svga->vram_display_mask]); p[x + 2] = video_16to32[dat & 0xffff]; p[x + 3] = video_16to32[dat >> 16]; - dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 8) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 8) & svga->vram_display_mask]); p[x + 4] = video_16to32[dat & 0xffff]; p[x + 5] = video_16to32[dat >> 16]; - dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 12) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 1) + 12) & svga->vram_display_mask]); p[x + 6] = video_16to32[dat & 0xffff]; p[x + 7] = video_16to32[dat >> 16]; } svga->ma += x << 1; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -553,7 +553,7 @@ void svga_render_24bpp_lowres(svga_t *svga) { fg = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16); svga->ma += 3; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; ((uint32_t *)buffer32->line[svga->displine])[(x << 1) + offset] = ((uint32_t *)buffer32->line[svga->displine])[(x << 1) + 1 + offset] = fg; } } @@ -573,21 +573,21 @@ void svga_render_24bpp_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x += 4) { - uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vrammask]); + uint32_t dat = *(uint32_t *)(&svga->vram[svga->ma & svga->vram_display_mask]); p[x] = dat & 0xffffff; - dat = *(uint32_t *)(&svga->vram[(svga->ma + 3) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + 3) & svga->vram_display_mask]); p[x + 1] = dat & 0xffffff; - dat = *(uint32_t *)(&svga->vram[(svga->ma + 6) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + 6) & svga->vram_display_mask]); p[x + 2] = dat & 0xffffff; - dat = *(uint32_t *)(&svga->vram[(svga->ma + 9) & svga->vrammask]); + dat = *(uint32_t *)(&svga->vram[(svga->ma + 9) & svga->vram_display_mask]); p[x + 3] = dat & 0xffffff; svga->ma += 12; } - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -608,7 +608,7 @@ void svga_render_32bpp_lowres(svga_t *svga) { fg = svga->vram[svga->ma] | (svga->vram[svga->ma + 1] << 8) | (svga->vram[svga->ma + 2] << 16); svga->ma += 4; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; ((uint32_t *)buffer32->line[svga->displine])[(x << 1) + offset] = ((uint32_t *)buffer32->line[svga->displine])[(x << 1) + 1 + offset] = fg; } } @@ -630,11 +630,11 @@ void svga_render_32bpp_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x++) { - uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vrammask]); + uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]); p[x] = dat & 0xffffff; } svga->ma += 4; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -652,11 +652,11 @@ void svga_render_ABGR8888_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x++) { - uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vrammask]); + uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]); p[x] = ((dat & 0xff0000) >> 16) | (dat & 0x00ff00) | ((dat & 0x0000ff) << 16); } svga->ma += 4; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } @@ -674,10 +674,10 @@ void svga_render_RGBA8888_highres(svga_t *svga) for (x = 0; x <= svga->hdisp; x++) { - uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vrammask]); + uint32_t dat = *(uint32_t *)(&svga->vram[(svga->ma + (x << 2)) & svga->vram_display_mask]); p[x] = dat >> 8; } svga->ma += 4; - svga->ma &= svga->vrammask; + svga->ma &= svga->vram_display_mask; } } diff --git a/src/vid_tvga.c b/src/vid_tvga.c index a5c6ae6..9d24c8b 100644 --- a/src/vid_tvga.c +++ b/src/vid_tvga.c @@ -128,7 +128,7 @@ void tvga_out(uint16_t addr, uint8_t val, void *p) switch (svga->crtcreg) { case 0x1e: - svga->vrammask = (val & 0x80) ? tvga->vram_mask : 0x3ffff; + svga->vram_display_mask = (val & 0x80) ? tvga->vram_mask : 0x3ffff; break; } return;