diff --git a/MAME.Unity/Assets/Plugins/UMAME/emu/Motion.cs b/MAME.Unity/Assets/Plugins/UMAME/emu/Motion.cs
index a4e7236..61b9feb 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/emu/Motion.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/emu/Motion.cs
@@ -7,7 +7,7 @@ namespace MAME.Core
///
/// 原依赖Form的内容
///
- public class Motion
+ public unsafe class Motion
{
private static uint UI_FILLCOLOR = Palette.make_argb(0xe0, 0x10, 0x10, 0x30);
public delegate void motion_delegate();
@@ -29,9 +29,9 @@ namespace MAME.Core
// // byte bright = 0xa7;
// // for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// // {
- // // red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- // // green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- // // blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ // // red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ // // green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ // // blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
// // Video.bitmapcolor[i] = (int)Palette.make_argb(0xff, red, green, blue);
// // }
// // }
@@ -39,7 +39,7 @@ namespace MAME.Core
// // {
// // for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// // {
- // // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ // // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
// // }
// // }
// //}
@@ -65,10 +65,10 @@ namespace MAME.Core
// {
// //i = y * Video.fullwidth + x;
// i = stepIndex + x;
- // red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- // green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- // blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
- // Video.bitmapcolorRect[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
+ // red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ // green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ // blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ // Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
// }
// }
// }
@@ -82,7 +82,7 @@ namespace MAME.Core
// {
// //i = y * Video.fullwidth + x;
// i = stepIndex + x;
- // Video.bitmapcolorRect[target_i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ // Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
// }
// }
// }
@@ -90,9 +90,9 @@ namespace MAME.Core
//}
public unsafe static void ui_updateC()
{
- //fixed (ushort* curbitmapPtr = &Video.bitmapbase[Video.curbitmap][0])
+ //fixed (ushort* curbitmapPtr = &Video.bitmapbase_Ptrs[Video.curbitmap][0])
//fixed (uint* entry_colorPtr = &Palette.entry_color[0])
- //fixed (int* bitmapcolorRectPtr = &Video.bitmapcolorRect[0])
+ //fixed (int* bitmapcolorRectPtr = &Video.bitmapcolorRect_Ptrunsafe[0])
{
//ushort* curbitmap = curbitmapPtr;
ushort* curbitmap = (ushort*)Video.bitmapbase_Ptrs[Video.curbitmap];
@@ -111,9 +111,9 @@ namespace MAME.Core
// byte bright = 0xa7;
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- // green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- // blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ // red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ // green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ // blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
// Video.bitmapcolor[i] = (int)Palette.make_argb(0xff, red, green, blue);
// }
// }
@@ -121,7 +121,7 @@ namespace MAME.Core
// {
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
// }
// }
//}
@@ -180,11 +180,11 @@ namespace MAME.Core
// byte bright = 0xa7;
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // if (Video.bitmapbase[Video.curbitmap][i] < 0x100)
+ // if (Video.bitmapbase_Ptrs[Video.curbitmap][i] < 0x100)
// {
- // red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- // green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- // blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ // red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ // green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ // blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
// Video.bitmapcolor[i] = (int)Palette.make_argb(0xff, red, green, blue);
// }
// else
@@ -197,9 +197,9 @@ namespace MAME.Core
// {
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // if (Video.bitmapbase[Video.curbitmap][i] < 0x100)
+ // if (Video.bitmapbase_Ptrs[Video.curbitmap][i] < 0x100)
// {
- // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
// }
// else
// {
@@ -230,12 +230,12 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- if (Video.bitmapbase[Video.curbitmap][i] < 0x100)
+ if (Video.bitmapbase_Ptrs[Video.curbitmap][i] < 0x100)
{
- red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
- Video.bitmapcolorRect[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
+ red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
}
else
{
@@ -253,20 +253,20 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- if (Video.bitmapbase[Video.curbitmap][i] < 0x100)
+ if (Video.bitmapbase_Ptrs[Video.curbitmap][i] < 0x100)
{
- Video.bitmapcolorRect[target_i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
}
else
{
- Video.bitmapcolorRect[target_i] = (int)Palette.entry_color[0];
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.entry_color[0];
}
}
}
}
}
}
- public static void ui_updateN()
+ public unsafe static void ui_updateN()
{
//不再填充完整画布
//{
@@ -277,9 +277,9 @@ namespace MAME.Core
// byte bright = 0xa7;
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // red = ((Video.bitmapbaseN[Video.curbitmap][i] & 0xff0000) >> 16) * bright / 0xff;
- // green = ((Video.bitmapbaseN[Video.curbitmap][i] & 0xff00) >> 8) * bright / 0xff;
- // blue = (Video.bitmapbaseN[Video.curbitmap][i] & 0xff) * bright / 0xff;
+ // red = ((Video.bitmapbaseN_Ptrs[Video.curbitmap][i] & 0xff0000) >> 16) * bright / 0xff;
+ // green = ((Video.bitmapbaseN_Ptrs[Video.curbitmap][i] & 0xff00) >> 8) * bright / 0xff;
+ // blue = (Video.bitmapbaseN_Ptrs[Video.curbitmap][i] & 0xff) * bright / 0xff;
// Video.bitmapcolor[i] = (int)Palette.make_argb(0xff, red, green, blue);
// }
// }
@@ -287,7 +287,7 @@ namespace MAME.Core
// {
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // Video.bitmapcolor[i] = (int)(0xff000000 | (uint)Video.bitmapbaseN[Video.curbitmap][i]);
+ // Video.bitmapcolor[i] = (int)(0xff000000 | (uint)Video.bitmapbaseN_Ptrs[Video.curbitmap][i]);
// }
// }
//}
@@ -312,10 +312,10 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- red = ((Video.bitmapbaseN[Video.curbitmap][i] & 0xff0000) >> 16) * bright / 0xff;
- green = ((Video.bitmapbaseN[Video.curbitmap][i] & 0xff00) >> 8) * bright / 0xff;
- blue = (Video.bitmapbaseN[Video.curbitmap][i] & 0xff) * bright / 0xff;
- Video.bitmapcolorRect[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
+ red = ((Video.bitmapbaseN_Ptrs[Video.curbitmap][i] & 0xff0000) >> 16) * bright / 0xff;
+ green = ((Video.bitmapbaseN_Ptrs[Video.curbitmap][i] & 0xff00) >> 8) * bright / 0xff;
+ blue = (Video.bitmapbaseN_Ptrs[Video.curbitmap][i] & 0xff) * bright / 0xff;
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
}
}
}
@@ -328,7 +328,7 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- Video.bitmapcolorRect[target_i] = (int)(0xff000000 | (uint)Video.bitmapbaseN[Video.curbitmap][i]);
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)(0xff000000 | (uint)Video.bitmapbaseN_Ptrs[Video.curbitmap][i]);
}
}
}
@@ -345,9 +345,9 @@ namespace MAME.Core
// byte bright = 0xa7;
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- // green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- // blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ // red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ // green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ // blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
// Video.bitmapcolor[i] = (int)Palette.make_argb(0xff, red, green, blue);
// }
// }
@@ -355,7 +355,7 @@ namespace MAME.Core
// {
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
// }
// }
//}
@@ -380,10 +380,10 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
- Video.bitmapcolorRect[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
+ red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
}
}
}
@@ -396,7 +396,7 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- Video.bitmapcolorRect[target_i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
}
}
}
@@ -413,9 +413,9 @@ namespace MAME.Core
// byte bright = 0xa7;
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- // green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- // blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ // red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ // green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ // blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
// Video.bitmapcolor[i] = (int)Palette.make_argb(0xff, red, green, blue);
// }
// }
@@ -423,7 +423,7 @@ namespace MAME.Core
// {
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
// }
// }
//}
@@ -449,10 +449,10 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
- Video.bitmapcolorRect[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
+ red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
}
}
}
@@ -465,7 +465,7 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- Video.bitmapcolorRect[target_i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
}
}
}
@@ -482,9 +482,9 @@ namespace MAME.Core
// byte bright = 0xa7;
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- // green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- // blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ // red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ // green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ // blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
// Video.bitmapcolor[i] = (int)Palette.make_argb(0xff, red, green, blue);
// }
// }
@@ -492,7 +492,7 @@ namespace MAME.Core
// {
// for (i = 0; i < Video.fullwidth * Video.fullheight; i++)
// {
- // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ // Video.bitmapcolor[i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
// }
// }
//}
@@ -518,10 +518,10 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- red = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
- green = (int)(((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
- blue = (int)((Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]] & 0xff) * bright / 0xff);
- Video.bitmapcolorRect[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
+ red = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff0000) >> 16) * bright / 0xff);
+ green = (int)(((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff00) >> 8) * bright / 0xff);
+ blue = (int)((Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]] & 0xff) * bright / 0xff);
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.make_argb(0xff, red, green, blue);
}
}
}
@@ -534,7 +534,7 @@ namespace MAME.Core
{
//i = y * Video.fullwidth + x;
i = stepIndex + x;
- Video.bitmapcolorRect[target_i] = (int)Palette.entry_color[Video.bitmapbase[Video.curbitmap][i]];
+ Video.bitmapcolorRect_Ptrunsafe[target_i] = (int)Palette.entry_color[Video.bitmapbase_Ptrs[Video.curbitmap][i]];
}
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/emu/Video.cs b/MAME.Unity/Assets/Plugins/UMAME/emu/Video.cs
index 906897d..b003ef2 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/emu/Video.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/emu/Video.cs
@@ -19,7 +19,7 @@ namespace MAME.Core
public Atime vblank_end_time;
public long frame_number;
};
- partial class Video
+ unsafe partial class Video
{
public static bool flip_screen_x, flip_screen_y;
public static long frame_number_obj;
@@ -37,13 +37,19 @@ namespace MAME.Core
private static uint throttle_history, overall_valid_counter, overall_real_seconds;
private static int[] popcount;
//public static ushort[][] bitmapbase;
- public static int[][] bitmapbaseN;
+ //public static int[][] bitmapbaseN;
//public static int[] bitmapcolor;
/** bitmapcolor的指针管理 **/
- public static ushort[][] bitmapbase;
+ public static ushort[][] bitmapbase; //还有 部分 Array.Copy 在引用
static GCHandle[] bitmapbase_handles;
- public static IntPtr[] bitmapbase_Ptrs;
+ public static ushort*[] bitmapbase_Ptrs;
+ /** end **/
+
+ /** bitmapbaseN的指针管理 **/
+ public static int[][] bitmapbaseN; //还有 部分 Array.Copy 在引用
+ static GCHandle[] bitmapbaseN_handles;
+ public static int*[] bitmapbaseN_Ptrs;
/** end **/
/** bitmapcolor的指针管理 **/
@@ -52,10 +58,10 @@ namespace MAME.Core
//static GCHandle bitmapcolor_handle;
//public static IntPtr bitmapcolor_Ptr;
-
public static int[] bitmapcolorRect;
static GCHandle bitmapcolorRect_handle;
public static IntPtr bitmapcolorRect_Ptr;
+ public static int* bitmapcolorRect_Ptrunsafe;
/** end **/
public static int fullwidth, fullheight;
@@ -634,14 +640,36 @@ namespace MAME.Core
if (bitmapbase != null)
{
bitmapbase_handles = new GCHandle[bitmapbase.Length];
- bitmapbase_Ptrs = new IntPtr[bitmapbase.Length];
+ bitmapbase_Ptrs = new ushort*[bitmapbase.Length];
for (int i = 0; i < bitmapbase.Length; i++)
{
bitmapbase_handles[i] = GCHandle.Alloc(bitmapbase[i], GCHandleType.Pinned);
- bitmapbase_Ptrs[i] = bitmapbase_handles[i].AddrOfPinnedObject();
+ bitmapbase_Ptrs[i] = (ushort*)bitmapbase_handles[i].AddrOfPinnedObject();
+ }
+ }
+
+
+ if (bitmapbaseN_handles != null)
+ {
+ for (int i = 0; i < bitmapbaseN_handles.Length; i++)
+ {
+ if (bitmapbaseN_handles[i].IsAllocated)
+ bitmapbaseN_handles[i].Free();
+ }
+ bitmapbaseN_handles = null;
+ bitmapbaseN_Ptrs = null;
+ }
+
+ if (bitmapbaseN != null)
+ {
+ bitmapbaseN_handles = new GCHandle[bitmapbaseN.Length];
+ bitmapbaseN_Ptrs = new int*[bitmapbaseN.Length];
+ for (int i = 0; i < bitmapbaseN.Length; i++)
+ {
+ bitmapbaseN_handles[i] = GCHandle.Alloc(bitmapbaseN[i], GCHandleType.Pinned);
+ bitmapbaseN_Ptrs[i] = (int*)bitmapbaseN_handles[i].AddrOfPinnedObject();
}
}
-
/** end **/
@@ -674,6 +702,8 @@ namespace MAME.Core
bitmapcolorRect_handle = GCHandle.Alloc(bitmapcolorRect, GCHandleType.Pinned);
// 获取数组的指针
bitmapcolorRect_Ptr = bitmapcolorRect_handle.AddrOfPinnedObject();
+
+ bitmapcolorRect_Ptrunsafe = (int*)bitmapcolorRect_Ptr;
/** end **/
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Drawgfx.cs
index f090f15..b27fff7 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Drawgfx.cs
@@ -1,6 +1,6 @@
namespace MAME.Core
{
- public partial class Drawgfx
+ public unsafe partial class Drawgfx
{
public static void common_drawgfx_gng(byte[] bb1, int code, int color, int flipx, int flipy, int sx, int sy, RECT clip)
{
@@ -94,7 +94,7 @@
col = bb1[srcdata_offset + srcmodulo * i + j];
if (col != 0x0f)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
}
}
@@ -191,7 +191,7 @@
col = bb1[srcdata_offset + srcmodulo * i + j];
if (col != 0x0f)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Tilemap.cs
index 6ec6620..c07957b 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Tilemap.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
namespace MAME.Core
{
- public partial class Capcom
+ public unsafe partial class Capcom
{
public static void tilemap_init()
{
@@ -193,7 +193,7 @@ namespace MAME.Core
Tilemap.lsTmap.Add(tx_tilemap);
}
}
- public partial class Tmap
+ public unsafe partial class Tmap
{
public void tilemap_draw_instanceCapcom_gng(RECT cliprect, int xpos, int ypos)
{
@@ -274,7 +274,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x100 + i] = pixmap[offsety2 * width + i - xpos];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x100 + i] = pixmap[offsety2 * width + i - xpos];
}
}
offsety2++;
@@ -373,7 +373,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
}
}
offsety2++;
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Video.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Video.cs
index ff7042f..d41acad 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Video.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/capcom/Video.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class Capcom
+ public unsafe partial class Capcom
{
public static Tmap bg_tilemap, fg_tilemap, tx_tilemap;
public static int bg_scrollx, fg_scrollx;
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Drawgfx.cs
index 279d1a0..7591942 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Drawgfx.cs
@@ -62,7 +62,7 @@
int colorbase = 0x10 * color;
blockmove_4toN_transpen_pri16(bb1, code, sw, sh, 0x10, ls, ts, flipx, flipy, dw, dh, colorbase, sy, sx, primask);
}
- private static void blockmove_4toN_transpen_pri16(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int offsety, int offsetx, uint primask)
+ private unsafe static void blockmove_4toN_transpen_pri16(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int offsety, int offsetx, uint primask)
{
int ydir, xdir, col, i, j;
int srcdata_offset = code * 0x100;
@@ -97,7 +97,7 @@
{
if (((1 << (Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] & 0x1f)) & primask) == 0)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] = (byte)((Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] & 0x7f) | 0x1f);
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Tilemap.cs
index 3996990..3703c07 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Tilemap.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class CPS
+ public unsafe partial class CPS
{
public static Tmap[] ttmap;
public static void tilemap_init()
@@ -63,7 +63,7 @@ namespace MAME.Core
ttmap[2].total_elements = CPS.gfxrom.Length / 0x200;
}
}
- public partial class Tmap
+ public unsafe partial class Tmap
{
public void tile_updateC0(int col, int row)
{
@@ -376,7 +376,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
Tilemap.priority_bitmap[offsety2 + ypos, i] = (byte)(Tilemap.priority_bitmap[offsety2 + ypos, i] | priority);
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Video.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Video.cs
index c14f01e..7fbbaa0 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Video.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/cps/Video.cs
@@ -3,7 +3,7 @@ using System.Collections.Generic;
namespace MAME.Core
{
- public partial class CPS
+ public unsafe partial class CPS
{
private static int iXAll, iYAll, nBitmap;
//private static Bitmap bmAll=new Bitmap(512,512);
@@ -646,7 +646,7 @@ namespace MAME.Core
sy = ((sy - stars2y) & 0xff) + 0x100;
col = (int)(((col & 0xe0) >> 1) + (Video.screenstate.frame_number / 16 & 0x0f));
if (sx >= Video.screenstate.visarea.min_x && sx <= Video.screenstate.visarea.max_x && sy >= Video.screenstate.visarea.min_y && sy <= Video.screenstate.visarea.max_y)
- Video.bitmapbase[Video.curbitmap][sy * 0x200 + sx] = (ushort)(0xa00 + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][sy * 0x200 + sx] = (ushort)(0xa00 + col);
}
}
}
@@ -663,7 +663,7 @@ namespace MAME.Core
sy = ((sy - stars1y) & 0xff) + 0x100;
col = (int)(((col & 0xe0) >> 1) + (Video.screenstate.frame_number / 16 & 0x0f));
if (sx >= Video.screenstate.visarea.min_x && sx <= Video.screenstate.visarea.max_x && sy >= Video.screenstate.visarea.min_y && sy <= Video.screenstate.visarea.max_y)
- Video.bitmapbase[Video.curbitmap][sy * 0x200 + sx] = (ushort)(0x800 + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][sy * 0x200 + sx] = (ushort)(0x800 + col);
}
}
}
@@ -703,7 +703,7 @@ namespace MAME.Core
break;
}
}
- public static void video_update_cps1()
+ public unsafe static void video_update_cps1()
{
int i;
int l0, l1, l2, l3;
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/dataeast/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/dataeast/Drawgfx.cs
index 843e6a9..209253d 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/dataeast/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/dataeast/Drawgfx.cs
@@ -1,6 +1,6 @@
namespace MAME.Core
{
- public partial class Drawgfx
+ public unsafe partial class Drawgfx
{
public static void common_drawgfx_pcktgal(byte[] bb1, int gfxwidth, int gfxheight, int gfxsrcmodulo, int gfxtotal_elements, int code, int color, int flipx, int flipy, int sx, int sy, RECT clip)
{
@@ -96,7 +96,7 @@
col = bb1[srcdata_offset + srcmodulo * i + j];
if (col != 0)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/dataeast/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/dataeast/Tilemap.cs
index b38def3..e556e56 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/dataeast/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/dataeast/Tilemap.cs
@@ -35,7 +35,7 @@ namespace MAME.Core
bg_tilemap.tile_update3 = bg_tilemap.tile_updatePcktgalbg;
}
}
- public partial class Tmap
+ public unsafe partial class Tmap
{
public void tile_updatePcktgalbg(int col, int row)
{
@@ -172,7 +172,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x100 + i] = pixmap[offsety2 * width + i - xpos];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x100 + i] = pixmap[offsety2 * width + i - xpos];
}
}
offsety2++;
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/igs011/Video.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/igs011/Video.cs
index bcce9ac..bf49558 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/igs011/Video.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/igs011/Video.cs
@@ -34,7 +34,7 @@
}
lhb2_pen_hi = 0;
}
- public static void video_update_igs011()
+ public unsafe static void video_update_igs011()
{
int x, y, l, scr_addr, pri_addr;
int pri_ram_offset;
@@ -53,7 +53,7 @@
}
}
l = priority_ram[pri_ram_offset + pri_addr] & 7;
- Video.bitmapbase[Video.curbitmap][y * 0x200 + x] = (ushort)(layer[l][scr_addr] | (l << 8));
+ Video.bitmapbase_Ptrs[Video.curbitmap][y * 0x200 + x] = (ushort)(layer[l][scr_addr] | (l << 8));
}
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Drawgfx.cs
index 82bec1c..31973ec 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Drawgfx.cs
@@ -1,6 +1,6 @@
namespace MAME.Core
{
- public partial class Konami68000
+ public unsafe partial class Konami68000
{
public static void common_drawgfxzoom_konami68000(byte[] bb1, int code, int color, int flipx, int flipy, int sx, int sy, RECT clip, int transparent_color, int scalex, int scaley)
{
@@ -93,7 +93,7 @@
c = bb1[source_baseoffset + srcoffset];
if (c != transparent_color)
{
- Video.bitmapbase[Video.curbitmap][(sy + i) * 0x200 + sx + j] = (ushort)(colorbase + c);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(sy + i) * 0x200 + sx + j] = (ushort)(colorbase + c);
}
}
}
@@ -193,7 +193,7 @@
{
if (((1 << Tilemap.priority_bitmap[sy + i, sx + j]) & pri_mask) == 0)
{
- Video.bitmapbase[Video.curbitmap][(sy + i) * 0x200 + sx + j] = (ushort)(colorbase + c);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(sy + i) * 0x200 + sx + j] = (ushort)(colorbase + c);
}
Tilemap.priority_bitmap[sy + i, sx + j] = 0x1f;
}
@@ -306,11 +306,11 @@
{
if ((Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] & 0x80) != 0)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);//palette_shadow_table[paldata[col]];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);//palette_shadow_table[paldata[col]];
}
else
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
}
Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] = (byte)((Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] & 0x7f) | 0x1f);
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Tilemap.cs
index 3ab49bb..b5d84d9 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Tilemap.cs
@@ -10,7 +10,7 @@ namespace MAME.Core
}
}
- public partial class Tmap
+ public unsafe partial class Tmap
{
public void tilemap_draw_instanceKonami68000(RECT cliprect, int xpos, int ypos)
{
@@ -98,7 +98,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
Tilemap.priority_bitmap[offsety2 + ypos, i] = (byte)(Tilemap.priority_bitmap[offsety2 + ypos, i] | priority);
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Video.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Video.cs
index 8660257..5ce57e0 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Video.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/konami68000/Video.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class Konami68000
+ public unsafe partial class Konami68000
{
private static int[] layer_colorbase;
private static int sprite_colorbase, bg_colorbase;
@@ -589,7 +589,7 @@ namespace MAME.Core
Array.Clear(Tilemap.priority_bitmap, 0, 0x40000);
for (i = 0; i < 0x20000; i++)
{
- Video.bitmapbase[Video.curbitmap][i] = (ushort)(16 * bg_colorbase);
+ Video.bitmapbase_Ptrs[Video.curbitmap][i] = (ushort)(16 * bg_colorbase);
}
K052109_tilemap[sorted_layer[0]].tilemap_draw_primask(Video.screenstate.visarea, 0x10, 1);
K052109_tilemap[sorted_layer[1]].tilemap_draw_primask(Video.screenstate.visarea, 0x10, 2);
@@ -627,7 +627,7 @@ namespace MAME.Core
Array.Clear(Tilemap.priority_bitmap, 0, 0x40000);
for (i = 0; i < 0x20000; i++)
{
- Video.bitmapbase[Video.curbitmap][i] = (ushort)(16 * bg_colorbase);
+ Video.bitmapbase_Ptrs[Video.curbitmap][i] = (ushort)(16 * bg_colorbase);
}
K052109_tilemap[sorted_layer[0]].tilemap_draw_primask(Video.screenstate.visarea, 0x10, 1);
if (layerpri[0] >= 0x30 && layerpri[1] < 0x30)
@@ -709,7 +709,7 @@ namespace MAME.Core
Array.Clear(Tilemap.priority_bitmap, 0, 0x40000);
for (i = 0; i < 0x20000; i++)
{
- Video.bitmapbase[Video.curbitmap][i] = (ushort)(16 * bg_colorbase);
+ Video.bitmapbase_Ptrs[Video.curbitmap][i] = (ushort)(16 * bg_colorbase);
}
K052109_tilemap[sorted_layer[0]].tilemap_draw_primask(Video.screenstate.visarea, 0x10, 1);
K052109_tilemap[sorted_layer[1]].tilemap_draw_primask(Video.screenstate.visarea, 0x10, 2);
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/m72/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/m72/Drawgfx.cs
index 3d39b51..00f4dd2 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/m72/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/m72/Drawgfx.cs
@@ -1,6 +1,6 @@
namespace MAME.Core
{
- public partial class Drawgfx
+ public unsafe partial class Drawgfx
{
public static void common_drawgfx_m72(byte[] bb1, int code, int color, int flipx, int flipy, int sx, int sy, RECT clip)
{
@@ -94,7 +94,7 @@
col = bb1[srcdata_offset + srcmodulo * i + j];
if (col != 0)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/m72/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/m72/Tilemap.cs
index 60dedae..512fb65 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/m72/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/m72/Tilemap.cs
@@ -220,7 +220,7 @@ namespace MAME.Core
bg_tilemap_large.tile_update3 = bg_tilemap.tile_updateM72_bg_m72;
}
}
- public partial class Tmap
+ public unsafe partial class Tmap
{
public void tilemap_draw_instanceM72(RECT cliprect, int xpos, int ypos)
{
@@ -289,7 +289,7 @@ namespace MAME.Core
{
for (i = xpos + x_start; i < xpos + x_end; i++)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * width + i - xpos] + palette_offset);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * width + i - xpos] + palette_offset);
}
offsety2++;
}
@@ -302,7 +302,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * width + i - xpos] + palette_offset);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * width + i - xpos] + palette_offset);
}
}
offsety2++;
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/m92/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/m92/Drawgfx.cs
index f36ac48..4944d81 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/m92/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/m92/Drawgfx.cs
@@ -61,7 +61,7 @@
int colorbase = 0x10 * color;
blockmove_8toN_transpen_pri16_m92(bb1, code, sw, sh, 0x10, ls, ts, flipx, flipy, dw, dh, colorbase, sy, sx, primask);
}
- public static void blockmove_8toN_transpen_pri16_m92(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int sy, int sx, uint primask)
+ public unsafe static void blockmove_8toN_transpen_pri16_m92(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int sy, int sx, uint primask)
{
int ydir, xdir, col, i, j;
int offsetx = sx, offsety = sy;
@@ -99,11 +99,11 @@
{
if ((Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] & 0x80) != 0)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = 0x800;
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = 0x800;
}
else
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x200 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
}
Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] = (byte)((Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] & 0x7f) | 0x1f);
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/m92/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/m92/Tilemap.cs
index c358e35..5cadbab 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/m92/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/m92/Tilemap.cs
@@ -107,7 +107,7 @@ namespace MAME.Core
}
}
}
- public partial class Tmap
+ public unsafe partial class Tmap
{
public void tilemap_draw_instanceM92(RECT cliprect, int xpos, int ypos)
{
@@ -193,7 +193,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
Tilemap.priority_bitmap[offsety2 + ypos, i] = (byte)(Tilemap.priority_bitmap[offsety2 + ypos, i] | priority);
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/namcos1/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/namcos1/Drawgfx.cs
index 3d42a68..e0cd5b0 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/namcos1/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/namcos1/Drawgfx.cs
@@ -61,11 +61,11 @@
int colorbase = 0x10 * color;
blockmove_8toN_transpen_pri16(tx, ty, code, sw, sh, ls, ts, flipx, flipy, dw, dh, colorbase, sy, sx);
}
- private static void setpixelcolorNa(int offsety, int offsetx, int n)
+ private unsafe static void setpixelcolorNa(int offsety, int offsetx, int n)
{
if (Tilemap.priority_bitmap[offsety, offsetx] != 0x1f && Tilemap.priority_bitmap[offsety, offsetx] <= Namcos1.namcos1_pri)
{
- Video.bitmapbase[Video.curbitmap][offsety * 0x200 + offsetx] = (ushort)n;
+ Video.bitmapbase_Ptrs[Video.curbitmap][offsety * 0x200 + offsetx] = (ushort)n;
}
Tilemap.priority_bitmap[offsety, offsetx] = 0x1f;
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/namcos1/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/namcos1/Tilemap.cs
index 20c5c18..14be74c 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/namcos1/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/namcos1/Tilemap.cs
@@ -167,7 +167,7 @@ namespace MAME.Core
}
return (byte)(andmask ^ ormask);
}
- public void tilemap_draw_instanceNa(RECT cliprect, int xpos, int ypos)
+ public unsafe void tilemap_draw_instanceNa(RECT cliprect, int xpos, int ypos)
{
int mincol, maxcol;
int x1, y1, x2, y2;
@@ -232,7 +232,7 @@ namespace MAME.Core
{
for (i = xpos + x_start; i < xpos + x_end; i++)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * 0x200 + i - xpos] + palette_offset);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * 0x200 + i - xpos] + palette_offset);
Tilemap.priority_bitmap[offsety2 + ypos, i] = priority;
}
offsety2++;
@@ -246,7 +246,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * 0x200 + i - xpos] + palette_offset);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * 0x200 + i - xpos] + palette_offset);
Tilemap.priority_bitmap[offsety2 + ypos, i] = priority;
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/neogeo/Video.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/neogeo/Video.cs
index d1941a9..1648f21 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/neogeo/Video.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/neogeo/Video.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class Neogeo
+ public unsafe partial class Neogeo
{
public static byte[] sprite_gfx;
public static uint sprite_gfx_address_mask;
@@ -170,7 +170,7 @@ namespace MAME.Core
// sprite_list_offset = 0x8600;
// }
// Span span_neogeo_videoram = neogeo_videoram.AsSpan();
- // Span span_bitmapbaseN_iBitmap = Video.bitmapbaseN[iBitmap].AsSpan();
+ // Span span_bitmapbaseN_iBitmap = Video.bitmapbaseN_Ptrs[iBitmap].AsSpan();
// Span span_sprite_gfx = sprite_gfx.AsSpan();
// Span span_pens = pens.AsSpan();
// for (max_sprite_index = 95; max_sprite_index >= 0; max_sprite_index--)
@@ -277,7 +277,7 @@ namespace MAME.Core
// //if (sprite_gfx[gfx_offset] != 0)
// if (span_sprite_gfx[gfx_offset] != 0)
// {
- // //Video.bitmapbaseN[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
+ // //Video.bitmapbaseN_Ptrs[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
// span_bitmapbaseN_iBitmap[pixel_addr_offsety * 384 + pixel_addr_offsetx] = span_pens[line_pens_offset + span_sprite_gfx[gfx_offset]];
// }
// pixel_addr_offsetx++;
@@ -301,7 +301,7 @@ namespace MAME.Core
// //if (sprite_gfx[gfx_offset] != 0)
// if (span_sprite_gfx[gfx_offset] != 0)
// {
- // //Video.bitmapbaseN[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
+ // //Video.bitmapbaseN_Ptrs[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
// span_bitmapbaseN_iBitmap[pixel_addr_offsety * 384 + pixel_addr_offsetx] = span_pens[line_pens_offset + span_sprite_gfx[gfx_offset]];
// }
// pixel_addr_offsetx++;
@@ -326,13 +326,14 @@ namespace MAME.Core
{
fixed (ushort* videoramPtr = &neogeo_videoram[0])
- fixed (int* bitmapbasePtr = &Video.bitmapbaseN[iBitmap][0])
+ //fixed (int* bitmapbasePtr = &Video.bitmapbaseN_Ptrs[iBitmap][0])
fixed (byte* spriteGfxPtr = &sprite_gfx[0])
fixed (int* pensPtr = &pens[0])
fixed (byte* zoomyromPtr = &zoomyrom[0])
{
ushort* neogeo_videoram = videoramPtr;
- int* bitmapbase = bitmapbasePtr;
+ //int* bitmapbase = bitmapbasePtr;
+ int* bitmapbase = &Video.bitmapbaseN_Ptrs[iBitmap][0];
byte* spriteGfx = spriteGfxPtr;
int* pens = pensPtr;
byte* zoomyrom = zoomyromPtr;
@@ -473,7 +474,7 @@ namespace MAME.Core
//if (sprite_gfx[gfx_offset] != 0)
if (spriteGfx[gfx_offset] != 0)
{
- //Video.bitmapbaseN[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
+ //Video.bitmapbaseN_Ptrs[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
bitmapbase[pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + spriteGfx[gfx_offset]];
}
pixel_addr_offsetx++;
@@ -498,7 +499,7 @@ namespace MAME.Core
//if (sprite_gfx[gfx_offset] != 0)
if (spriteGfx[gfx_offset] != 0)
{
- //Video.bitmapbaseN[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
+ //Video.bitmapbaseN_Ptrs[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
bitmapbase[pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + spriteGfx[gfx_offset]];
}
pixel_addr_offsetx++;
@@ -639,7 +640,7 @@ namespace MAME.Core
// {
// if (sprite_gfx[gfx_offset] != 0)
// {
- // Video.bitmapbaseN[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
+ // Video.bitmapbaseN_Ptrs[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
// }
// pixel_addr_offsetx++;
// }
@@ -661,7 +662,7 @@ namespace MAME.Core
// {
// if (sprite_gfx[gfx_offset] != 0)
// {
- // Video.bitmapbaseN[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
+ // Video.bitmapbaseN_Ptrs[iBitmap][pixel_addr_offsety * 384 + pixel_addr_offsetx] = pens[line_pens_offset + sprite_gfx[gfx_offset]];
// }
// pixel_addr_offsetx++;
// }
@@ -814,7 +815,7 @@ namespace MAME.Core
}
if ((data & 0x0f) != 0)
{
- Video.bitmapbaseN[iBitmap][384 * scanline + 30 + x * 8 + i] = pens[char_pens_offset + (data & 0x0f)];
+ Video.bitmapbaseN_Ptrs[iBitmap][384 * scanline + 30 + x * 8 + i] = pens[char_pens_offset + (data & 0x0f)];
}
}
video_data_offset += 0x20;
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/pgm/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/pgm/Tilemap.cs
index cbcb114..fa36f0c 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/pgm/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/pgm/Tilemap.cs
@@ -128,7 +128,7 @@ namespace MAME.Core
}
return (byte)(andmask ^ ormask);
}
- public void tilemap_draw_instancePgm(RECT cliprect, int xpos, int ypos)
+ public unsafe void tilemap_draw_instancePgm(RECT cliprect, int xpos, int ypos)
{
int mincol, maxcol;
int x1, y1, x2, y2;
@@ -207,7 +207,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * width + i - xpos] + palette_offset);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = (ushort)(pixmap[offsety2 * width + i - xpos] + palette_offset);
Tilemap.priority_bitmap[offsety2 + ypos, i] = priority;
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/pgm/Video.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/pgm/Video.cs
index 3d02985..853eb09 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/pgm/Video.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/pgm/Video.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class PGM
+ public unsafe partial class PGM
{
public static ushort[] pgm_spritebufferram; // buffered spriteram
public static ushort[] sprite_temp_render;
@@ -48,13 +48,13 @@ namespace MAME.Core
{
if (pri == 0)
{
- Video.bitmapbase[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
+ Video.bitmapbase_Ptrs[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
}
else
{
if ((Tilemap.priority_bitmap[ydrawpos, xdrawpos] & 2) == 0)
{
- Video.bitmapbase[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
+ Video.bitmapbase_Ptrs[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
}
}
}
@@ -67,7 +67,7 @@ namespace MAME.Core
{
if ((Tilemap.priority_bitmap[ydrawpos, xdrawpos] & 1) == 0)
{
- Video.bitmapbase[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
+ Video.bitmapbase_Ptrs[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
}
Tilemap.priority_bitmap[ydrawpos, xdrawpos] |= 1;
}
@@ -80,7 +80,7 @@ namespace MAME.Core
{
if ((Tilemap.priority_bitmap[ydrawpos, xdrawpos] & 2) == 0)
{
- Video.bitmapbase[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
+ Video.bitmapbase_Ptrs[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
}
}
Tilemap.priority_bitmap[ydrawpos, xdrawpos] |= 1;
@@ -109,14 +109,14 @@ namespace MAME.Core
if ((srcdat & 0x8000) == 0)
{
if ((xdrawpos >= 0) && (xdrawpos < 448))
- Video.bitmapbase[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
+ Video.bitmapbase_Ptrs[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
}
xcntdraw++;
xdrawpos = xpos + xcntdraw;
if ((srcdat & 0x8000) == 0)
{
if ((xdrawpos >= 0) && (xdrawpos < 448))
- Video.bitmapbase[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
+ Video.bitmapbase_Ptrs[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
}
xcntdraw++;
}
@@ -130,7 +130,7 @@ namespace MAME.Core
if ((srcdat & 0x8000) == 0)
{
if ((xdrawpos >= 0) && (xdrawpos < 448))
- Video.bitmapbase[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
+ Video.bitmapbase_Ptrs[Video.curbitmap][ydrawpos * 0x200 + xdrawpos] = srcdat;
}
xcntdraw++;
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/suna8/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/suna8/Drawgfx.cs
index 2d85c70..57be215 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/suna8/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/suna8/Drawgfx.cs
@@ -61,7 +61,7 @@
int colorbase = 0x10 * color;
blockmove_8toN_transpen16_starfigh(bb1, code, sw, sh, 8, ls, ts, flipx, flipy, dw, dh, colorbase, sx, sy);
}
- public static void blockmove_8toN_transpen16_starfigh(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int offsetx, int offsety)
+ public unsafe static void blockmove_8toN_transpen16_starfigh(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int offsetx, int offsety)
{
int ydir, xdir, col, i, j;
int srcdata_offset = code * 0x40;
@@ -94,7 +94,7 @@
col = bb1[srcdata_offset + srcmodulo * i + j];
if (col != 0x0f)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Drawgfx.cs
index 61ca93d..0c501c1 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Drawgfx.cs
@@ -61,7 +61,7 @@
int colorbase = 0x10 * color;
blockmove_8toN_transpen16_bublbobl(bb1, code, sw, sh, 8, ls, ts, flipx, flipy, dw, dh, colorbase, sx, sy);
}
- public static void blockmove_8toN_transpen16_bublbobl(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int offsetx, int offsety)
+ public unsafe static void blockmove_8toN_transpen16_bublbobl(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int offsetx, int offsety)
{
int ydir, xdir, col, i, j;
int srcdata_offset = code * 0x40;
@@ -94,7 +94,7 @@
col = bb1[srcdata_offset + srcmodulo * i + j];
if (col != 0x0f)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
}
}
@@ -162,7 +162,7 @@
int colorbase = color * 0x10;
blockmove_8toN_transpen_pri16_opwolf(bb1, code, sw, sh, 0x10, ls, ts, flipx, flipy, dw, dh, colorbase, pri_mask, sx, sy);
}
- public static void blockmove_8toN_transpen_pri16_opwolf(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo,
+ public unsafe static void blockmove_8toN_transpen_pri16_opwolf(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo,
int leftskip, int topskip, int flipx, int flipy,
int dstwidth, int dstheight, int colorbase, uint pmask, int sx, int sy)
{
@@ -201,7 +201,7 @@
{
if (((1 << (Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] & 0x1f)) & pmask) == 0)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x140 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x140 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] = (byte)((Tilemap.priority_bitmap[offsety + ydir * i, offsetx + xdir * j] & 0x7f) | 0x1f);
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Tilemap.cs
index cbe45f8..4da5b1d 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Tilemap.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class Tmap
+ public unsafe partial class Tmap
{
public void tilemap_draw_instanceTaito_opwolf(RECT cliprect, int xpos, int ypos)
{
@@ -88,7 +88,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x140 + i] = pixmap[offsety2 * width + i - xpos];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x140 + i] = pixmap[offsety2 * width + i - xpos];
Tilemap.priority_bitmap[offsety2 + ypos, i] = (byte)(Tilemap.priority_bitmap[offsety2 + ypos, i] | priority);
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Video.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Video.cs
index 2c8b521..7800120 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Video.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/taito/Video.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class Taito
+ public unsafe partial class Taito
{
public static byte[] gfx1rom, gfx2rom, gfx12rom, gfx22rom, prom;
public static int bublbobl_objectram_size = 0x300;
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/taitob/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/taitob/Tilemap.cs
index 6ab8820..f6ee487 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/taitob/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/taitob/Tilemap.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class Taitob
+ public unsafe partial class Taitob
{
public static Tmap bg_tilemap, fg_tilemap, tx_tilemap;
public static void tilemap_init()
@@ -95,7 +95,7 @@ namespace MAME.Core
tx_tilemap.tile_update3 = tx_tilemap.tile_updateTaitobtx;
}
}
- public partial class Tmap
+ public unsafe partial class Tmap
{
public void tilemap_draw_instanceTaitob(RECT cliprect, int xpos, int ypos)
{
@@ -181,7 +181,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x200 + i] = pixmap[offsety2 * width + i - xpos];
Tilemap.priority_bitmap[offsety2 + ypos, i] = (byte)(Tilemap.priority_bitmap[offsety2 + ypos, i] | priority);
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/taitob/Video.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/taitob/Video.cs
index 7049932..5daf418 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/taitob/Video.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/taitob/Video.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class Taitob
+ public unsafe partial class Taitob
{
public static ushort[][] framebuffer;
public static ushort[] taitob_scroll, TC0180VCU_ram, taitob_spriteram, taitob_pixelram;
@@ -507,7 +507,7 @@ namespace MAME.Core
ushort c = framebuffer[framebuffer_page][y * 512 + x];
if (c != 0)
{
- Video.bitmapbase[Video.curbitmap][(255 - y) * 512 + 319 - x] = (ushort)(b_sp_color_base + c);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(255 - y) * 512 + 319 - x] = (ushort)(b_sp_color_base + c);
}
}
}
@@ -521,7 +521,7 @@ namespace MAME.Core
ushort c = framebuffer[framebuffer_page][y * 512 + x];
if (c != 0)
{
- Video.bitmapbase[Video.curbitmap][y * 512 + x] = (ushort)(b_sp_color_base + c);
+ Video.bitmapbase_Ptrs[Video.curbitmap][y * 512 + x] = (ushort)(b_sp_color_base + c);
}
}
}
@@ -538,7 +538,7 @@ namespace MAME.Core
ushort c = framebuffer[framebuffer_page][y * 512 + x];
if ((c != 0) && ((c & 0x10) == priority))
{
- Video.bitmapbase[Video.curbitmap][(255 - y) * 512 + 319 - x] = (ushort)(b_sp_color_base + c);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(255 - y) * 512 + 319 - x] = (ushort)(b_sp_color_base + c);
}
}
}
@@ -552,7 +552,7 @@ namespace MAME.Core
ushort c = framebuffer[framebuffer_page][y * 512 + x];
if ((c != 0) && ((c & 0x10) == priority))
{
- Video.bitmapbase[Video.curbitmap][y * 512 + x] = (ushort)(b_sp_color_base + c);
+ Video.bitmapbase_Ptrs[Video.curbitmap][y * 512 + x] = (ushort)(b_sp_color_base + c);
}
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/tehkan/Drawgfx.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/tehkan/Drawgfx.cs
index ad3e677..94f5bdb 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/tehkan/Drawgfx.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/tehkan/Drawgfx.cs
@@ -63,7 +63,7 @@
int colorbase = 8 * color;
blockmove_8toN_transpen16_pbaction(bb1, code, sw, sh, sm, ls, ts, flipx, flipy, dw, dh, colorbase, sy, sx);
}
- public static void blockmove_8toN_transpen16_pbaction(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int offsety, int offsetx)
+ public unsafe static void blockmove_8toN_transpen16_pbaction(byte[] bb1, int code, int srcwidth, int srcheight, int srcmodulo, int leftskip, int topskip, int flipx, int flipy, int dstwidth, int dstheight, int colorbase, int offsety, int offsetx)
{
int ydir, xdir, col, i, j;
int srcdata_offset = code * srcwidth * srcheight;
@@ -96,7 +96,7 @@
col = bb1[srcdata_offset + srcmodulo * i + j];
if (col != 0)
{
- Video.bitmapbase[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety + ydir * i) * 0x100 + offsetx + xdir * j] = (ushort)(colorbase + col);
}
}
}
diff --git a/MAME.Unity/Assets/Plugins/UMAME/mame/tehkan/Tilemap.cs b/MAME.Unity/Assets/Plugins/UMAME/mame/tehkan/Tilemap.cs
index 7308777..e890b79 100644
--- a/MAME.Unity/Assets/Plugins/UMAME/mame/tehkan/Tilemap.cs
+++ b/MAME.Unity/Assets/Plugins/UMAME/mame/tehkan/Tilemap.cs
@@ -2,7 +2,7 @@
namespace MAME.Core
{
- public partial class Tehkan
+ public unsafe partial class Tehkan
{
public static Tmap bg_tilemap, fg_tilemap;
public static void tilemap_init()
@@ -62,7 +62,7 @@ namespace MAME.Core
fg_tilemap.tile_update3 = fg_tilemap.tile_updatePbactionfg;
}
}
- public partial class Tmap
+ public unsafe partial class Tmap
{
public void tile_updatePbactionbg(int col, int row)
{
@@ -261,7 +261,7 @@ namespace MAME.Core
{
if ((flagsmap[offsety2, i - xpos] & mask) == value)
{
- Video.bitmapbase[Video.curbitmap][(offsety2 + ypos) * 0x100 + i] = pixmap[offsety2 * width + i - xpos];
+ Video.bitmapbase_Ptrs[Video.curbitmap][(offsety2 + ypos) * 0x100 + i] = pixmap[offsety2 * width + i - xpos];
}
}
offsety2++;