+#ifdef PCSX
+
+#define ENH_BUF_TABLE_STEP (1024 / sizeof(psx_gpu->enhancement_buf_by_x16))
+
+static int is_new_scanout(psx_gpu_struct *psx_gpu, int x)
+{
+ int i, scanout_x;
+ for (i = 0; i < ARRAY_SIZE(psx_gpu->enhancement_scanout_x); i++)
+ {
+ scanout_x = psx_gpu->enhancement_scanout_x[i];
+ if (x <= scanout_x && scanout_x < x + ENH_BUF_TABLE_STEP)
+ {
+ if (x != scanout_x)
+ log_anomaly("unaligned scanout x: %d,%d\n", scanout_x, x);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static void update_enhancement_buf_table_from_hres(psx_gpu_struct *psx_gpu)
+{
+ u32 b, x;
+
+ b = 0;
+ psx_gpu->enhancement_buf_by_x16[0] = b;
+ psx_gpu->enhancement_buf_start[0] = 0;
+ for (x = 1; x < sizeof(psx_gpu->enhancement_buf_by_x16); x++)
+ {
+ if (b < 3 && is_new_scanout(psx_gpu, x * ENH_BUF_TABLE_STEP)) {
+ b++;
+ psx_gpu->enhancement_buf_start[b] = x * ENH_BUF_TABLE_STEP;
+ }
+
+ psx_gpu->enhancement_buf_by_x16[x] = b;
+ }
+#if 0
+ printf("buf_by_x16:\n");
+ for (b = 0; b < 3; b++) {
+ int first = -1, count = 0;
+ for (x = 0; x < sizeof(psx_gpu->enhancement_buf_by_x16); x++) {
+ if (psx_gpu->enhancement_buf_by_x16[x] == b) {
+ if (first < 0) first = x;
+ count++;
+ }
+ }
+ if (count) {
+ assert(first * ENH_BUF_TABLE_STEP == psx_gpu->enhancement_buf_start[b]);
+ printf("%d: %3zd-%zd\n", b, first * ENH_BUF_TABLE_STEP,
+ (first + count) * ENH_BUF_TABLE_STEP);
+ }
+ }
+#endif
+}
+
+static void update_enhancement_buf_table_from_x(psx_gpu_struct *psx_gpu,
+ u32 x0, u32 len)
+{
+#if 0
+ u32 x, b;
+
+ for (x = x0, b = 0; x >= len; b++)
+ x -= len;
+ if (b > 3)
+ b = 3;
+
+ memset(psx_gpu->enhancement_buf_by_x16 + x0 / ENH_BUF_TABLE_STEP,
+ b, (len + ENH_BUF_TABLE_STEP - 1) / ENH_BUF_TABLE_STEP);
+#endif
+}
+
+#define select_enhancement_buf(psx_gpu) \
+ psx_gpu->enhancement_current_buf_ptr = \
+ select_enhancement_buf_ptr(psx_gpu, psx_gpu->saved_viewport_start_x)
+