cfgfile_writeramboard(p, f, _T("cpuboardmem2"), 0, &p->cpuboardmem2);
cfgfile_write_bool(f, _T("gfxcard_hardware_vblank"), p->rtg_hardwareinterrupt);
cfgfile_write_bool(f, _T("gfxcard_hardware_sprite"), p->rtg_hardwaresprite);
+ cfgfile_dwrite_bool(f, _T("gfxcard_overlay"), p->rtg_overlay);
+ cfgfile_dwrite_bool(f, _T("gfxcard_screensplit"), p->rtg_vgascreensplit);
+ cfgfile_dwrite_bool(f, _T("gfxcard_paletteswitch"), p->rtg_paletteswitch);
+ cfgfile_dwrite_bool(f, _T("gfxcard_dacswitch"), p->rtg_dacswitch);
cfgfile_write_bool(f, _T("gfxcard_multithread"), p->rtg_multithread);
for (int i = 0; i < MAX_RTG_BOARDS; i++) {
TCHAR tmp2[100];
|| cfgfile_yesno(option, value, _T("bkpt_halt"), &p->cs_bkpthang)
|| cfgfile_yesno(option, value, _T("gfxcard_hardware_vblank"), &p->rtg_hardwareinterrupt)
|| cfgfile_yesno(option, value, _T("gfxcard_hardware_sprite"), &p->rtg_hardwaresprite)
+ || cfgfile_yesno(option, value, _T("gfxcard_overlay"), &p->rtg_overlay)
+ || cfgfile_yesno(option, value, _T("gfxcard_screensplit"), &p->rtg_vgascreensplit)
+ || cfgfile_yesno(option, value, _T("gfxcard_paletteswitch"), &p->rtg_paletteswitch)
+ || cfgfile_yesno(option, value, _T("gfxcard_dacswitch"), &p->rtg_dacswitch)
|| cfgfile_yesno(option, value, _T("gfxcard_multithread"), &p->rtg_multithread)
|| cfgfile_yesno(option, value, _T("synchronize_clock"), &p->tod_hack)
|| cfgfile_yesno(option, value, _T("keyboard_connected"), &p->keyboard_connected)
#define MULTIDISPLAY 0
#define WINCURSOR 1
#define NEWTRAP 1
-#define OVERLAY 1
+#define USE_OVERLAY 1
#define USE_HARDWARESPRITE 1
+#define USE_PALETTESWITCH 1
+#define USE_VGASCREENSPLIT 1
+#define USE_DACSWITCH 1
+
#define P96TRACING_ENABLED 0
#define P96TRACING_LEVEL 0
#define P96TRACING_SETUP_ENABLED 0
extern addrbank gfxmem_bank;
extern addrbank *gfxmem_banks[MAX_RTG_BOARDS];
extern int rtg_index;
-int picasso96_test;
void lockrtg(void)
{
#endif
}
- getvsyncrate(monid, currprefs.chipset_refreshrate, &mult);
+ getvsyncrate(monid, (float)currprefs.chipset_refreshrate, &mult);
if (vsync && mult < 0) {
vsynccnt++;
if (vsynccnt < 2)
#define BLT_FUNC(s,d) *d = (*s) | (*d)
#include "../p96_blit.cpp"
#define BLT_NAME BLIT_TRUE_24
-#define BLT_FUNC(s,d) *d = 0xffffffff
+#define BLT_FUNC(s,d) *d = 0xff
#include "../p96_blit.cpp"
#define BLT_NAME BLIT_SWAP_24
-#define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp;
+#define BLT_FUNC(s,d) tmp = *d; *d = *s; *s = tmp;
#define BLT_TEMP
#include "../p96_blit.cpp"
#undef BLT_SIZE
#define BLT_FUNC(s,d) *d = (*s) | (*d)
#include "../p96_blit.cpp"
#define BLT_NAME BLIT_TRUE_16
-#define BLT_FUNC(s,d) *d = 0xffffffff
+#define BLT_FUNC(s,d) *d = 0xffff
#include "../p96_blit.cpp"
#define BLT_NAME BLIT_SWAP_16
-#define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp;
+#define BLT_FUNC(s,d) tmp = *d; *d = *s; *s = tmp;
#define BLT_TEMP
#include "../p96_blit.cpp"
#undef BLT_SIZE
#define BLT_FUNC(s,d) *d = (*s) | (*d)
#include "../p96_blit.cpp"
#define BLT_NAME BLIT_TRUE_8
-#define BLT_FUNC(s,d) *d = 0xffffffff
+#define BLT_FUNC(s,d) *d = 0xff
#include "../p96_blit.cpp"
#define BLT_NAME BLIT_SWAP_8
-#define BLT_FUNC(s,d) tmp = *d ; *d = *s; *s = tmp;
+#define BLT_FUNC(s,d) tmp = *d; *d = *s; *s = tmp;
#define BLT_TEMP
#include "../p96_blit.cpp"
#undef BLT_SIZE
flags |= BIF_INDISPLAYCHAIN;
}
}
-#if OVERLAY
- flags |= BIF_VIDEOWINDOW;
-#endif
- flags |= BIF_VGASCREENSPLIT;
- flags |= BIF_PALETTESWITCH;
- flags |= (1 << 28);
+
+ if (USE_OVERLAY && currprefs.rtg_overlay) {
+ flags |= BIF_VIDEOWINDOW;
+ }
+ if (USE_VGASCREENSPLIT && currprefs.rtg_vgascreensplit) {
+ flags |= BIF_VGASCREENSPLIT;
+ }
+ if (USE_PALETTESWITCH && currprefs.rtg_paletteswitch) {
+ flags |= BIF_PALETTESWITCH;
+ }
+ if (USE_DACSWITCH && currprefs.rtg_dacswitch) {
+ flags |= BIF_DACSWITCH;
+ }
+
trap_put_long(ctx, ABI + PSSO_BoardInfo_Flags, flags);
if (debug_rtg_blitter != 3)
write_log (_T("P96: Blitter mode = %x!\n"), debug_rtg_blitter);
state->CLUT[coffset].Green = g;
state->CLUT[coffset].Blue = b;
}
- if (offset) {
+ if (offset && currprefs.rtg_paletteswitch) {
state->dualclut = true;
}
changed |= picasso_palette(state->CLUT, vidinfo->clut);
state->Address = start_of_screen; /* Amiga-side address */
state->XOffset = (uae_s16)(trap_get_dreg(ctx, 1) & 0xFFFF);
state->YOffset = (uae_s16)(trap_get_dreg(ctx, 2) & 0xFFFF);
- trap_put_word(ctx, bi + PSSO_BoardInfo_XOffset, state->XOffset);
- trap_put_word(ctx, bi + PSSO_BoardInfo_YOffset, state->YOffset);
+ trap_put_word(ctx, bi + PSSO_BoardInfo_XOffset, (uae_u16)state->XOffset);
+ trap_put_word(ctx, bi + PSSO_BoardInfo_YOffset, (uae_u16)state->YOffset);
state->VirtualWidth = bme_width;
state->VirtualHeight = bme_height;
state->RGBFormat = (RGBFTYPE)trap_get_dreg(ctx, 7);
} else if (currprefs.win32_rtgvblankrate == 0) {
p96vblank = vblank_hz;
} else {
- p96vblank = currprefs.win32_rtgvblankrate;
+ p96vblank = (float)currprefs.win32_rtgvblankrate;
}
if (p96vblank <= 0)
p96vblank = 60;
if (p96vblank >= 300)
p96vblank = 300;
- p96syncrate = maxvpos_nom * vblank_hz / p96vblank;
+ p96syncrate = (int)(maxvpos_nom * vblank_hz / p96vblank);
write_log (_T("RTGFREQ: %d*%.4f = %.4f / %.1f = %d\n"), maxvpos_nom, vblank_hz, maxvpos_nom * vblank_hz, p96vblank, p96syncrate);
}
return 0;
}
-#if OVERLAY
+#if USE_OVERLAY
#define OVERLAY_COOKIE 0x12345678
*/
PUTABI (PSSO_BoardInfo_GetCompatibleFormats);
dw (0x203c);
- dl (RGBMASK_8BIT | RGBMASK_15BIT | RGBMASK_16BIT | RGBMASK_24BIT | RGBMASK_32BIT | (OVERLAY ? (RGBFF_Y4U2V2 | RGBFF_Y4U1V1) : 0));
+ dl (RGBMASK_8BIT | RGBMASK_15BIT | RGBMASK_16BIT | RGBMASK_24BIT | RGBMASK_32BIT | (USE_OVERLAY ? (RGBFF_Y4U2V2 | RGBFF_Y4U1V1) : 0));
dw (RTS);
/* CalculateBytesPerRow (optimized) */
RTGCALL2(PSSO_BoardInfo_SetPanning, picasso_SetPanning);
RTGCALL2(PSSO_BoardInfo_SetDisplay, picasso_SetDisplay);
- RTGCALL2(PSSO_BoardInfo_SetSprite, picasso_SetSprite);
- RTGCALL2(PSSO_BoardInfo_SetSpritePosition, picasso_SetSpritePosition);
- RTGCALL2(PSSO_BoardInfo_SetSpriteImage, picasso_SetSpriteImage);
- RTGCALL2(PSSO_BoardInfo_SetSpriteColor, picasso_SetSpriteColor);
+ if (USE_HARDWARESPRITE && currprefs.rtg_hardwaresprite) {
+ RTGCALL2(PSSO_BoardInfo_SetSprite, picasso_SetSprite);
+ RTGCALL2(PSSO_BoardInfo_SetSpritePosition, picasso_SetSpritePosition);
+ RTGCALL2(PSSO_BoardInfo_SetSpriteImage, picasso_SetSpriteImage);
+ RTGCALL2(PSSO_BoardInfo_SetSpriteColor, picasso_SetSpriteColor);
+ }
RTGCALLDEFAULT(PSSO_BoardInfo_ScrollPlanar, PSSO_BoardInfo_ScrollPlanarDefault);
RTGCALLDEFAULT(PSSO_BoardInfo_UpdatePlanar, PSSO_BoardInfo_UpdatePlanarDefault);
RTGCALLDEFAULT(PSSO_BoardInfo_DrawLine, PSSO_BoardInfo_DrawLineDefault);
-#if OVERLAY
- RTGCALL2(PSSO_BoardInfo_GetFeatureAttrs, picasso_GetFeatureAttrs);
- RTGCALL2(PSSO_BoardInfo_SetFeatureAttrs, picasso_SetFeatureAttrs);
- RTGCALL2X(PSSO_BoardInfo_CreateFeature, picasso_CreateFeature);
- RTGCALL2X(PSSO_BoardInfo_DeleteFeature, picasso_DeleteFeature);
-#endif
+ if (USE_OVERLAY && currprefs.rtg_overlay) {
+ RTGCALL2(PSSO_BoardInfo_GetFeatureAttrs, picasso_GetFeatureAttrs);
+ RTGCALL2(PSSO_BoardInfo_SetFeatureAttrs, picasso_SetFeatureAttrs);
+ RTGCALL2X(PSSO_BoardInfo_CreateFeature, picasso_CreateFeature);
+ RTGCALL2X(PSSO_BoardInfo_DeleteFeature, picasso_DeleteFeature);
+ }
+
+ if (USE_VGASCREENSPLIT && currprefs.rtg_vgascreensplit) {
+ RTGCALL2(PSSO_SetSplitPosition, picasso_SetSplitPosition);
+ }
- RTGCALL2(PSSO_SetSplitPosition, picasso_SetSplitPosition);
- if (picasso96_test) {
+ if (USE_DACSWITCH && currprefs.rtg_dacswitch) {
RTGCALL2(PSSO_BoardInfo_GetCompatibleDACFormats, picasso_GetCompatibleDACFormats);
RTGCALL2(PSSO_BoardInfo_CoerceMode, picasso_CoerceMode);
}
save_u16 (state->Height);
save_u16 (state->VirtualWidth);
save_u16 (state->VirtualHeight);
- save_u16 (state->XOffset);
- save_u16 (state->YOffset);
+ save_u16 ((uae_u16)state->XOffset);
+ save_u16 ((uae_u16)state->YOffset);
save_u8 (state->GC_Depth);
save_u8 (state->GC_Flags);
save_u16 (state->BytesPerRow);