mode->width = data->width;
mode->height = data->height;
mode->mode = data->rgbtype;
+ mode->hlinedbl = 1;
+ mode->vlinedbl = 1;
if (fb_get_surface(data)) {
if (data->fb_modified || data->modechanged || mode->redraw_required) {
uae_u8 cirrus_pci[0x44];
uae_u8 p4i2c;
uae_u8 p4_pci[0x44];
- int vga_width, vga_height;
+ int vga_width, vga_height, vga_width_mult, vga_height_mult;
bool vga_refresh_active;
int device_settings;
gb->gfxmem_bank->reserved_size = vramsize;
gb->gfxmem_bank->start = gb->gfxboardmem_start;
if (gb->board->manufacturer) {
+ gb->gfxmem_bank->flags |= ABFLAG_ALLOCINDIRECT | ABFLAG_PPCIOSPACE;
gb->gfxmem_bank->label = _T("*");
mapped_malloc(gb->gfxmem_bank);
} else if (gb->board->pci) {
// PCI display card's BARs have been initialized
;
} else {
+ gb->gfxmem_bank->flags |= ABFLAG_ALLOCINDIRECT | ABFLAG_PPCIOSPACE;
gb->gfxmem_bank->label = _T("*");
gb->vram_back = xmalloc(uae_u8, vramsize);
if (&get_mem_bank(0x800000) == &dummy_bank)
state->Height = mode->height;
state->VirtualWidth = state->Width;
state->VirtualHeight = state->Height;
+ state->HLineDBL = mode->hlinedbl ? mode->hlinedbl : 1;
+ state->VLineDBL = mode->vlinedbl ? mode->vlinedbl : 1;
int bpp = GetBytesPerPixel(mode->mode);
state->BytesPerPixel = bpp;
state->BytesPerRow = mode->width * bpp;
struct gfxboard_mode mode;
mode.width = gb->vga_width;
mode.height = gb->vga_height;
+ mode.hlinedbl = gb->vga_width_mult ? gb->vga_width_mult : 1;
+ mode.vlinedbl = gb->vga_height_mult ? gb->vga_height_mult : 1;
mode.mode = RGBFB_NONE;
for (int i = 0; i < RGBFB_MaxFormats; i++) {
RGBFTYPE t = (RGBFTYPE)i;
return &gb->gfxsurface;
}
-void gfxboard_resize(int width, int height, void *p)
+void gfxboard_resize(int width, int height, int hmult, int vmult, void *p)
{
struct rtggfxboard *gb = (struct rtggfxboard *)p;
if (width != gb->vga_width || gb->vga_height != height) {
}
gb->vga_width = width;
gb->vga_height = height;
+ gb->vga_width_mult = hmult;
+ gb->vga_height_mult = vmult;
}
void qemu_console_resize(QemuConsole *con, int width, int height)
}
gb->vga_width = width;
gb->vga_height = height;
+ gb->vga_width_mult = 1;
+ gb->vga_height_mult = 1;
}
void linear_memory_region_set_dirty(MemoryRegion *mr, hwaddr addr, hwaddr size)
if (unsafe) {
dst->jit_read_flag |= S_READ | S_N_ADDR;
dst->jit_write_flag |= S_WRITE | S_N_ADDR;
- dst->flags |= ABFLAG_PPCIOSPACE;
+ dst->flags |= ABFLAG_ALLOCINDIRECT | ABFLAG_PPCIOSPACE;
}
}
}
}
init_board(gb);
- copyvrambank(&gb->gfxboard_bank_memory, gb->gfxmem_bank, false);
+ copyvrambank(&gb->gfxboard_bank_memory, gb->gfxmem_bank, true);
copyvrambank(&gb->gfxboard_bank_vram_pcem, gb->gfxmem_bank, true);
if (ISP4() && !gb->board->pcemdev) {
if (validate_banks_z3(&gb->gfxboard_bank_memory, gb->gfxmem_bank->start >> 16, expamem_board_size >> 16)) {
extern void gfxboard_rtg_disable(int monid, int);
extern bool gfxboard_init_board(struct autoconfig_info*);
extern bool gfxboard_set(int monid, bool rtg);
-extern void gfxboard_resize(int width, int height, void *p);
+extern void gfxboard_resize(int width, int height, int hmult, int vmult, void *p);
uae_u8 *gfxboard_getrtgbuffer(int monid, int *widthp, int *heightp, int *pitch, int *depth, uae_u8 *palette);
void gfxboard_freertgbuffer(int monid, uae_u8 *dst);
int height;
RGBFTYPE mode;
bool redraw_required;
+ int hlinedbl, vlinedbl;
};
typedef bool(*GFXBOARD_INIT)(struct autoconfig_info*);
if (data->a2410_visible) {
mode->width = data->a2410_width;
mode->height = data->a2410_height;
+ mode->hlinedbl = 1;
+ mode->vlinedbl = 1;
mode->mode = RGBFB_CLUT;
}
state->GC_Depth = 8;
state->GC_Flags = 0;
state->BytesPerPixel = 1;
+ state->HLineDBL = 1;
+ state->VLineDBL = 1;
state->HostAddress = NULL;
delayed_set_switch = true;
atomic_or(&vidinfo->picasso_state_change, PICASSO_STATE_SETGC);
state->GC_Depth = trap_get_byte(ctx, modeinfo + PSSO_ModeInfo_Depth);
state->GC_Flags = trap_get_byte(ctx, modeinfo + PSSO_ModeInfo_Flags);
+ state->HLineDBL = 1;
+ state->VLineDBL = 1;
+
P96TRACE_SETUP((_T("SetGC(%d,%d,%d,%d)\n"), state->Width, state->Height, state->GC_Depth, border));
state->HostAddress = NULL;
}
}
state->HostAddress = NULL;
+ state->HLineDBL = 1;
+ state->VLineDBL = 1;
picasso_SetPanningInit(state);
state->Extent = state->Address + state->BytesPerRow * state->VirtualHeight;
return src;
// must be in memory
long XYOffset;
bool dualclut;
+ int HLineDBL, VLineDBL;
};
extern void InitPicasso96(int monid);
}
OffsetRect (zr, picasso_offset_x, picasso_offset_y);
- picasso_offset_mx = (float)srcwidth * mx / (dr->right - dr->left);
- picasso_offset_my = (float)srcheight * my / (dr->bottom - dr->top);
+
+ picasso_offset_x /= state->HLineDBL;
+ picasso_offset_y /= state->VLineDBL;
+
+ picasso_offset_mx = (float)(srcwidth * mx * state->HLineDBL) / (dr->right - dr->left);
+ picasso_offset_my = (float)(srcheight * my * state->VLineDBL) / (dr->bottom - dr->top);
}
static uae_u8 *gfx_lock_picasso2(int monid, bool fullupdate)
void set_window_title(const char *s);
-void updatewindowsize(int x, int y);
+void updatewindowsize(int x, int mx, int y, int my);
void initpc(int argc, char *argv[]);
void runpc();
{
//write_log(_T("video_wait_for_buffer\n"));
}
-void updatewindowsize(int x, int y)
+void updatewindowsize(int x, int mx, int y, int my)
{
- gfxboard_resize(x, y, gfxboard_priv);
+ x *= mx;
+ gfxboard_resize(x, y, mx, my, gfxboard_priv);
}
static void (*pci_card_write)(int func, int addr, uint8_t val, void *priv);
if (xsize<128) xsize=0;
if (ysize<32) ysize=0;
- updatewindowsize(xsize * (svga->horizontal_linedbl ? 2 : 1), ysize * (svga->vertical_linedbl ? 2 : 1));
+ updatewindowsize(xsize, svga->horizontal_linedbl ? 2 : 1, ysize, svga->linedbl ? 2 : 1);
}
if (vid_resize)
{