File screendragging.patch of Package uae-test
--- e-uae-0.8.29-20080820/src/picasso96.c.bak 2008-08-20 06:17:41.000000000 +0200
+++ e-uae-0.8.29-20080820/src/picasso96.c 2025-03-05 10:01:11.668025181 +0100
@@ -58,7 +58,7 @@
int p96hack_vpos, p96hack_vpos2, p96refresh_active;
-#define P96TRACING_ENABLED 0
+#define P96TRACING_ENABLED 1
#if P96TRACING_ENABLED
#define P96TRACE(x) do { write_log x; } while(0)
#else
@@ -552,7 +552,7 @@
int xoff = picasso96_state.XOffset;
int yoff = picasso96_state.YOffset;
uae_u8 *srcp, *dstp;
-
+// if(picasso_vidinfo.splitypos>0 && height > picasso_vidinfo.splitypos) height=picasso_vidinfo.splitypos;
/* Clipping. */
dstx -= xoff;
dsty -= yoff;
@@ -725,6 +725,7 @@
STATIC_INLINE void write_currline (uae_u8 *srcp, int line_no, int first_byte, int byte_count)
{
uae_u8 *dstp;
+// if(picasso_vidinfo.splitypos>0 && line_no > picasso_vidinfo.splitypos) return;
if ((dstp = gfx_lock_picasso ()) != 0) {
int Bpp = GetBytesPerPixel (picasso_vidinfo.rgbformat);
@@ -762,6 +763,7 @@
static void flush_currline (void)
{
int line_no = currline_y - picasso96_state.YOffset;
+// if(picasso_vidinfo.splitypos>0 && line_no > picasso_vidinfo.splitypos) return;
/* We only need to flush this line to the screen if the line
* is acutally visible on screen */
@@ -858,6 +860,13 @@
height = picasso96_state.Height;
}
+ write_log ("P96: picasso_refresh() called\n");if(picasso_vidinfo.splitypos >= 0) {
+ do_blit (&ri, picasso96_state.BytesPerPixel, 0, 0, 0, 0, width,
+ picasso_vidinfo.splitypos+1, BLIT_SRC, 0);
+// ri.Memory = (picasso96_state.Address - gfxmem_start);
+ do_blit (&ri, picasso96_state.BytesPerPixel, 0, 0, 0, picasso_vidinfo.splitypos, width,
+ height-picasso_vidinfo.splitypos-1, BLIT_SRC, 0);
+ } else
do_blit (&ri, picasso96_state.BytesPerPixel, 0, 0, 0, 0, width,
height, BLIT_SRC, 0);
} else
@@ -880,7 +882,7 @@
unsigned long linewidth = (total_width + 15) & ~15;
unsigned long lines;
/* int can_do_visible_blit = 0; */
-
+ //if(picasso_vidinfo.splitypos>0 && height > picasso_vidinfo.splitypos) height=picasso_vidinfo.splitypos;
src = ri->Memory + srcx*Bpp + srcy*ri->BytesPerRow;
dst = dstri->Memory + dstx*Bpp + dsty*dstri->BytesPerRow;
@@ -2837,6 +2839,20 @@
return result;
}
+uae_u32 REGPARAM2 picasso_SetSplitPosition(struct regstruct *regs)
+{
+ uaecptr bi = m68k_areg(regs, 0);
+ uae_s16 pos = m68k_dreg (regs, 0);
+ put_word(bi + PSSO_BoardInfo_YSplit, pos);
+ pos--;
+ write_log ("P96: SetSplitPosition() old:%d new:%d\n", picasso_vidinfo.splitypos, pos);
+ if (pos != picasso_vidinfo.splitypos) {
+ picasso_vidinfo.splitypos = pos;
+// full_refresh = 1;
+ }
+ return 1;
+}
+
/* @@@ - Work to be done here!
@@ -2882,6 +2884,7 @@
*/
STATIC_INLINE void flush_write (uaecptr addr, uae_u8 size)
{
+write_log ("P96: flush_write() called\n");
if (picasso_on) {
/* Is this data on the same framebuffer line as previous
* successive writes? */
--- e-uae-0.8.29-20080820/src/include/picasso96.h.bak 2007-02-16 22:44:19.000000000 +0100
+++ e-uae-0.8.29-20080820/src/include/picasso96.h 2025-03-05 11:42:28.087015441 +0100
@@ -409,6 +409,26 @@
#define PSSO_BoardInfo_MouseChunky PSSO_BoardInfo_MouseRect + 8 /* MouseRect is 8-bytes */
#define PSSO_BoardInfo_MouseRendered PSSO_BoardInfo_MouseChunky + 4
#define PSSO_BoardInfo_MouseSaveBuffer PSSO_BoardInfo_MouseRendered + 4
+#define PSSO_BoardInfo_ChipData PSSO_BoardInfo_MouseSaveBuffer + 4
+#define PSSO_BoardInfo_CardData PSSO_BoardInfo_ChipData + 16 * 4
+#define PSSO_BoardInfo_MemorySpaceBase PSSO_BoardInfo_CardData + 16 * 4
+#define PSSO_BoardInfo_MemorySpaceSize PSSO_BoardInfo_MemorySpaceBase + 4
+#define PSSO_BoardInfo_DoubleBufferList PSSO_BoardInfo_MemorySpaceSize + 4
+#define PSSO_BoardInfo_SyncTime PSSO_BoardInfo_DoubleBufferList + 4
+#define PSSO_BoardInfo_SyncPeriod PSSO_BoardInfo_SyncTime + 4
+#define PSSO_BoardInfo_SoftVBlankPort PSSO_BoardInfo_SyncPeriod + 8
+#define PSSO_BoardInfo_WaitQ PSSO_BoardInfo_SoftVBlankPort + 34
+#define PSSO_BoardInfo_EssentialFormats PSSO_BoardInfo_WaitQ + 3 * 4
+#define PSSO_BoardInfo_MouseImageBuffer PSSO_BoardInfo_EssentialFormats + 4
+#define PSSO_BoardInfo_BackViewPort PSSO_BoardInfo_MouseImageBuffer + 4
+#define PSSO_BoardInfo_BackBitMap PSSO_BoardInfo_BackViewPort + 4
+#define PSSO_BoardInfo_BackBitMapExtra PSSO_BoardInfo_BackBitMap + 4
+#define PSSO_BoardInfo_YSplit PSSO_BoardInfo_BackBitMapExtra + 4
+#define PSSO_BoardInfo_MaxPlanarMemory PSSO_BoardInfo_YSplit + 2
+#define PSSO_BoardInfo_MaxBMWidth PSSO_BoardInfo_MaxPlanarMemory + 4
+#define PSSO_BoardInfo_MaxBMHeight PSSO_BoardInfo_MaxBMWidth + 4
+#define PSSO_BoardInfo_SecondaryCLUT PSSO_BoardInfo_MaxBMHeight + 4
+#define PSSO_BoardInfo_SizeOf PSSO_BoardInfo_SecondaryCLUT + 3 * 256
struct BoardInfo {
uae_u8 *RegisterBase, *MemoryBase, *MemoryIOBase;
@@ -524,6 +544,7 @@
extern uae_u32 picasso_BlitTemplate (struct regstruct *regs) REGPARAM;
extern uae_u32 picasso_BlitPattern (struct regstruct *regs) REGPARAM;
extern uae_u32 picasso_BlitRectNoMaskComplete (struct regstruct *regs) REGPARAM;
+extern uae_u32 picasso_SetSplitPosition (struct regstruct *regs) REGPARAM;
extern uae_u32 gfxmem_mask;
extern uae_u8 *gfxmemory;
@@ -562,6 +583,7 @@
uae_u32 rgbformat;
uae_u32 selected_rgbformat;
uae_u32 clut[256];
+ uae_s16 splitypos;
};
extern struct picasso_vidbuf_description picasso_vidinfo;
--- e-uae-0.8.29-20080820/src/uaelib.c.bak 2008-06-04 03:38:56.000000000 +0200
+++ e-uae-0.8.29-20080820/src/uaelib.c 2025-03-05 09:51:36.906766504 +0100
@@ -415,6 +415,7 @@
case 39: return picasso_SetSpriteColor (&context->regs);
#endif
// case 40: return picasso_DrawLine ();
+ case 41: return picasso_SetSplitPosition (&context->regs);
#endif
case 68: return emulib_Minimize ();
case 69: return emulib_ExecuteNativeCode (&context->regs);