Merge pull request #292 from pcercuei/dfsound-big-endian
authornotaz <notasas@gmail.com>
Sun, 9 Jul 2023 15:57:54 +0000 (18:57 +0300)
committerGitHub <noreply@github.com>
Sun, 9 Jul 2023 15:57:54 +0000 (18:57 +0300)
dfsound: Fix issues on big-endian systems

36 files changed:
frontend/blit320.s
frontend/cspace.c
frontend/cspace_arm.S
frontend/cspace_neon.S
frontend/libretro.c
frontend/libretro_core_options.h
frontend/main.c
frontend/plugin_lib.c
include/arm_features.h
libpcsxcore/new_dynarec/assem_arm.c
libpcsxcore/new_dynarec/assem_arm64.c
libpcsxcore/new_dynarec/emu_if.c
libpcsxcore/new_dynarec/emu_if.h
libpcsxcore/new_dynarec/linkage_offsets.h
libpcsxcore/new_dynarec/new_dynarec.c
libpcsxcore/new_dynarec/pcsxmem.c
libpcsxcore/new_dynarec/pcsxmem.h
libpcsxcore/ppf.c
libpcsxcore/psxinterpreter.c
libpcsxcore/psxmem.c
libpcsxcore/psxmem.h
libpcsxcore/r3000a.h
plugins/dfsound/dma.c
plugins/dfsound/externals.h
plugins/dfsound/registers.c
plugins/dfsound/spu.c
plugins/gpu-gles/gpuDraw.c
plugins/gpu-gles/gpuDraw.h
plugins/gpu-gles/gpuExternals.h
plugins/gpu-gles/gpuPrim.c
plugins/gpu-gles/gpuPrim.h
plugins/gpu-gles/gpuTexture.c
plugins/gpu-gles/gpuTexture.h
plugins/gpu-gles/gpulib_if.c
plugins/gpulib/gpu.h
plugins/gpulib/vout_pl.c

index 201fdea..2d50dfd 100644 (file)
@@ -25,6 +25,7 @@
 blit320_640:
     stmfd   sp!, {r4-r8,lr}
     mov     r12, #40
+    bic     r1, r1, #3
 0:
     ldmia   r1!, {r2-r8,lr}
     lhw_str r2, r3
@@ -40,6 +41,7 @@ blit320_640:
 blit320_512:
     stmfd   sp!, {r4-r8,lr}
     mov     r12, #32
+    bic     r1, r1, #3
 0:
     ldmia   r1!, {r2-r8,lr}
     lsl     r2, #16
@@ -73,6 +75,7 @@ blit320_512:
 blit320_368:
     stmfd   sp!, {r4-r8,lr}
     mov     r12, #23
+    bic     r1, r1, #3
 0:
     ldmia   r1!, {r2-r8,lr}
     unaligned_str r2, r3         @ 1,2
index 2b528a5..785b3d1 100644 (file)
@@ -8,6 +8,7 @@
  * See the COPYING file in the top-level directory.
  */
 
+#include <stdint.h>
 #include "cspace.h"
 
 /*
@@ -30,7 +31,6 @@
         || (defined(__GNUC__) && __GNUC__ >= 5)) \
        && __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__
 
-#include <stdint.h>
 #include <assert.h>
 
 #if defined(__ARM_NEON) || defined(__ARM_NEON__)
@@ -93,7 +93,8 @@ void bgr555_to_rgb565(void * __restrict__ dst_, const void *  __restrict__ src_,
 
 void bgr555_to_rgb565(void *dst_, const void *src_, int bytes)
 {
-       const unsigned int *src = src_;
+       // source can be misaligned, but it's very rare, so just force
+       const unsigned int *src = (const void *)((intptr_t)src_ & ~3);
        unsigned int *dst = dst_;
        unsigned int x, p, r, g, b;
 
index 67778da..177b085 100644 (file)
@@ -34,6 +34,12 @@ FUNCTION(bgr555_to_rgb565): @ void *dst, const void *src, int bytes
     orr      lr, lr, lsl #16
     blt      1f
 
+    @ src can be unaligned, but that's very rare, so just force it.
+    @ The manual says unaligned ldm should fault, and it does on
+    @ cortex-a78's 32bit mode, but curiously on cortex-a8 it just
+    @ works and loads the data correctly.
+    bic      r1, r1, #3
+
 0:
     ldmia    r1!, {r3-r10}
     subs     r2, #4*8
index 4928b44..3a89fdb 100644 (file)
@@ -40,7 +40,8 @@ FUNCTION(bgr555_to_rgb565): @ dst, src, bytes
     pld         [r1, #64*2]
     @ Pulls 15-bit BGR color values (which are actually 16 bits) into q0-q3.
     @ example:  q0 = 0111 1110 0101 0011
-    vldmia      r1!, {q0-q3}
+    vld1.16     {d0-d3}, [r1]!
+    vld1.16     {d4-d7}, [r1]!
     @ Shift BGR color 1 bit to the left, discarding MSB and preparing for vbit.
     @ MSB is used for transparency (not needed here, and can mess with green).
     @ example:  q0 = 1111 1100 1010 0110
@@ -113,7 +114,8 @@ FUNCTION(bgr555_to_rgb565_b): @ dst, src, bytes, int brightness2k // 0-0x0800
     vdup.16     q14, r3
 0:
     pld         [r1, #64*2]
-    vldmia      r1!, {q0-q3}
+    vld1.16     {d0-d3}, [r1]!
+    vld1.16     {d4-d7}, [r1]!
     vand.u16    q8,  q0, q14
     vand.u16    q9,  q1, q14
     vand.u16    q10, q2, q14
@@ -270,4 +272,4 @@ FUNCTION(rgb888_to_rgb565): @ dst, src, bytes
     bx          lr
 
 
-@ vim:filetype=armasm
+@ vim:filetype=armasm:expandtab
index 3e74b23..f4b23cd 100644 (file)
@@ -2074,6 +2074,16 @@ static void update_variables(bool in_flight)
          spu_config.iUseInterpolation = 0;
    }
 
+   var.value = NULL;
+   var.key = "pcsx_rearmed_spu_thread";
+   if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value)
+   {
+      if (strcmp(var.value, "enabled") == 0)
+         spu_config.iUseThread = 1;
+      else
+         spu_config.iUseThread = 0;
+   }
+
 #ifndef _WIN32
    var.value = NULL;
    var.key = "pcsx_rearmed_async_cd";
index 935c6f9..7d070f9 100644 (file)
@@ -752,6 +752,22 @@ struct retro_core_option_v2_definition option_defs_us[] = {
       },
       "enabled",
    },
+#if !defined(THREAD_ENABLED) && !defined(_WIN32) && !defined(NO_OS)
+   {
+      "pcsx_rearmed_spu_thread",
+      "Threaded SPU",
+      NULL,
+      "Emulates the PSX SPU on another CPU thread. May cause audio glitches in some games.",
+      NULL,
+      "audio",
+      {
+         { "disabled", NULL },
+         { "enabled",  NULL },
+         { NULL, NULL },
+      },
+      "disabled",
+   },
+#endif // THREAD_ENABLED
    {
       "pcsx_rearmed_show_input_settings",
       "Show Input Settings",
index 2773f7a..e0635ef 100644 (file)
@@ -158,7 +158,8 @@ void emu_set_default_config(void)
        spu_config.iXAPitch = 0;
        spu_config.iVolume = 768;
        spu_config.iTempo = 0;
-       spu_config.iUseThread = 1; // no effect if only 1 core is detected
+       // may cause issues, no effect if only 1 core is detected
+       spu_config.iUseThread = 0;
 #if defined(HAVE_PRE_ARMV7) && !defined(_3DS) /* XXX GPH hack */
        spu_config.iUseReverb = 0;
        spu_config.iUseInterpolation = 0;
index 171296d..d5cec76 100644 (file)
@@ -402,8 +402,6 @@ static void pl_vout_flip(const void *vram, int stride, int bgr24, int w, int h)
 #endif
        else
        {
-               src = (void *)((uintptr_t)src & ~3); // align for the blitter
-
                for (; h1-- > 0; dest += dstride * 2, src += stride)
                {
                        bgr555_to_rgb565(dest, src, w * 2);
index 7c82ff3..4f216a3 100644 (file)
 
 #endif
 
-/* no need for HAVE_NEON - GCC defines __ARM_NEON__ consistently */
+/* gcc defines __ARM_NEON__ consistently for 32bit, but apple clang defines it for 64bit also... */
+#if defined(HAVE_ARMV7) && defined(__ARM_NEON__)
+#define HAVE_NEON32
+#endif
 
 /* global function/external symbol */
 #ifndef __MACH__
index 95007df..6af93e2 100644 (file)
@@ -430,7 +430,7 @@ static void emit_loadreg(int r, int hr)
     //case HIREG: addr = &hi; break;
     //case LOREG: addr = &lo; break;
     case CCREG: addr = &cycle_count; break;
-    case CSREG: addr = &Status; break;
+    case CSREG: addr = &psxRegs.CP0.n.Status; break;
     case INVCP: addr = &invc_ptr; break;
     case ROREG: addr = &ram_offset; break;
     default:
@@ -1752,7 +1752,7 @@ static void inline_readstub(enum stub_type type, int i, u_int addr,
     emit_readword(&last_count,3);
     emit_addimm(cc<0?2:cc,adj,2);
     emit_add(2,3,2);
-    emit_writeword(2,&Count);
+    emit_writeword(2,&psxRegs.cycle);
   }
 
   emit_far_call(handler);
index 271bee5..67ce02a 100644 (file)
@@ -463,7 +463,7 @@ static void emit_loadreg(u_int r, u_int hr)
     //case HIREG: addr = &hi; break;
     //case LOREG: addr = &lo; break;
     case CCREG: addr = &cycle_count; break;
-    case CSREG: addr = &Status; break;
+    case CSREG: addr = &psxRegs.CP0.n.Status; break;
     case INVCP: addr = &invc_ptr; is64 = 1; break;
     case ROREG: addr = &ram_offset; is64 = 1; break;
     default:
index dc17f2d..aac9f78 100644 (file)
@@ -84,7 +84,7 @@ static void irq_test(void)
                }
        }
 
-       if ((psxHu32(0x1070) & psxHu32(0x1074)) && (Status & 0x401) == 0x401) {
+       if ((psxHu32(0x1070) & psxHu32(0x1074)) && (psxRegs.CP0.n.Status & 0x401) == 0x401) {
                psxException(0x400, 0);
                pending_exception = 1;
        }
@@ -110,7 +110,7 @@ void pcsx_mtc0(u32 reg, u32 val)
        evprintf("MTC0 %d #%x @%08x %u\n", reg, val, psxRegs.pc, psxRegs.cycle);
        MTC0(&psxRegs, reg, val);
        gen_interupt();
-       if (Cause & Status & 0x0300) // possible sw irq
+       if (psxRegs.CP0.n.Cause & psxRegs.CP0.n.Status & 0x0300) // possible sw irq
                pending_exception = 1;
 }
 
@@ -370,19 +370,15 @@ static void ari64_clear(u32 addr, u32 size)
 }
 
 static void ari64_notify(int note, void *data) {
-       /*
-       Should be fixed when ARM dynarec has proper icache emulation.
        switch (note)
        {
-               case R3000ACPU_NOTIFY_CACHE_UNISOLATED:
-                       break;
-               case R3000ACPU_NOTIFY_CACHE_ISOLATED:
-               Sent from psxDma3().
-               case R3000ACPU_NOTIFY_DMA3_EXE_LOAD:
-               default:
-                       break;
+       case R3000ACPU_NOTIFY_CACHE_UNISOLATED:
+       case R3000ACPU_NOTIFY_CACHE_ISOLATED:
+               new_dyna_pcsx_mem_isolate(note == R3000ACPU_NOTIFY_CACHE_ISOLATED);
+               break;
+       default:
+               break;
        }
-       */
 }
 
 static void ari64_apply_config()
@@ -430,7 +426,7 @@ int new_dynarec_hacks_old;
 int new_dynarec_hacks;
 void *psxH_ptr;
 void *zeromem_ptr;
-u8 zero_mem[0x1000];
+u32 zero_mem[0x1000/4];
 void *mem_rtab;
 void *scratch_buf_ptr;
 void new_dynarec_init() {}
@@ -442,6 +438,7 @@ void new_dynarec_invalidate_range(unsigned int start, unsigned int end) {}
 void new_dyna_pcsx_mem_init(void) {}
 void new_dyna_pcsx_mem_reset(void) {}
 void new_dyna_pcsx_mem_load_state(void) {}
+void new_dyna_pcsx_mem_isolate(int enable) {}
 void new_dyna_pcsx_mem_shutdown(void) {}
 int  new_dynarec_save_blocks(void *save, int size) { return 0; }
 void new_dynarec_load_blocks(const void *save, int size) {}
index 7fa0a17..b49b84b 100644 (file)
@@ -14,11 +14,6 @@ extern int hi, lo;
 
 /* same as psxRegs.CP0.n.* */
 extern int reg_cop0[];
-#define Status   psxRegs.CP0.n.Status
-#define Cause    psxRegs.CP0.n.Cause
-#define EPC      psxRegs.CP0.n.EPC
-#define BadVAddr psxRegs.CP0.n.BadVAddr
-#define Count    psxRegs.cycle // psxRegs.CP0.n.Count
 
 /* COP2/GTE */
 enum gte_opcodes {
index 0c189d7..23935b8 100644 (file)
 #define LO_intCycle            (LO_interrupt + 4)
 #define LO_gteBusyCycle                (LO_intCycle + 256)
 #define LO_muldivBusyCycle     (LO_gteBusyCycle + 4)
-#define LO_psxRegs_reserved    (LO_muldivBusyCycle + 4)
-#define LO_psxRegs_end         (LO_psxRegs_reserved + 4*2)
+#define LO_psxRegs_subCycle    (LO_muldivBusyCycle + 4)
+#define LO_psxRegs_biuReg      (LO_psxRegs_subCycle + 4*2)
+#define LO_psxRegs_reserved    (LO_psxRegs_biuReg + 4)
+#define LO_psxRegs_end         (LO_psxRegs_reserved + 4*3)
 #define LO_rcnts               (LO_psxRegs_end)
 #define LO_rcnts_end           (LO_rcnts + 7*4*4)
 #define LO_inv_code_start      (LO_rcnts_end)
index 276ef8a..2673a6e 100644 (file)
@@ -783,10 +783,10 @@ static void noinline *get_addr(u_int vaddr, int can_compile)
     return ndrc_get_addr_ht(vaddr);
 
   // generate an address error
-  Status|=2;
-  Cause=(vaddr<<31)|(4<<2);
-  EPC=(vaddr&1)?vaddr-5:vaddr;
-  BadVAddr=(vaddr&~1);
+  psxRegs.CP0.n.Status |= 2;
+  psxRegs.CP0.n.Cause = (vaddr<<31) | (4<<2);
+  psxRegs.CP0.n.EPC = (vaddr&1) ? vaddr-5 : vaddr;
+  psxRegs.CP0.n.BadVAddr = vaddr & ~1;
   return ndrc_get_addr_ht(0x80000080);
 }
 
@@ -3500,7 +3500,7 @@ static void cop0_assemble(int i, const struct regstat *i_regs, int ccadj_)
       emit_loadreg(CCREG,HOST_CCREG); // TODO: do proper reg alloc
       emit_add(HOST_CCREG,HOST_TEMPREG,HOST_CCREG);
       emit_addimm(HOST_CCREG,ccadj_,HOST_CCREG);
-      emit_writeword(HOST_CCREG,&Count);
+      emit_writeword(HOST_CCREG,&psxRegs.cycle);
     }
     // What a mess.  The status register (12) can enable interrupts,
     // so needs a special case to handle a pending interrupt.
@@ -3532,7 +3532,7 @@ static void cop0_assemble(int i, const struct regstat *i_regs, int ccadj_)
     emit_movimm(copr,0);
     emit_far_call(pcsx_mtc0);
     if(copr==9||copr==11||copr==12||copr==13) {
-      emit_readword(&Count,HOST_CCREG);
+      emit_readword(&psxRegs.cycle,HOST_CCREG);
       emit_readword(&next_interupt,HOST_TEMPREG);
       emit_addimm(HOST_CCREG,-ccadj_,HOST_CCREG);
       emit_sub(HOST_CCREG,HOST_TEMPREG,HOST_CCREG);
@@ -3558,11 +3558,11 @@ static void cop0_assemble(int i, const struct regstat *i_regs, int ccadj_)
     assert(dops[i].opcode2==0x10);
     //if((source[i]&0x3f)==0x10) // RFE
     {
-      emit_readword(&Status,0);
+      emit_readword(&psxRegs.CP0.n.Status,0);
       emit_andimm(0,0x3c,1);
       emit_andimm(0,~0xf,0);
       emit_orrshr_imm(1,2,0);
-      emit_writeword(0,&Status);
+      emit_writeword(0,&psxRegs.CP0.n.Status);
     }
   }
 }
index 69a4c99..8057b7e 100644 (file)
@@ -26,6 +26,7 @@ static uintptr_t *mem_readtab;
 static uintptr_t *mem_writetab;
 static uintptr_t mem_iortab[(1+2+4) * 0x1000 / 4];
 static uintptr_t mem_iowtab[(1+2+4) * 0x1000 / 4];
+static uintptr_t mem_ffrtab[(1+2+4) * 0x1000 / 4];
 static uintptr_t mem_ffwtab[(1+2+4) * 0x1000 / 4];
 //static uintptr_t mem_unmrtab[(1+2+4) * 0x1000 / 4];
 static uintptr_t mem_unmwtab[(1+2+4) * 0x1000 / 4];
@@ -47,22 +48,28 @@ void map_item(uintptr_t *out, const void *h, uintptr_t flag)
 
 // size must be power of 2, at least 4k
 #define map_l1_mem(tab, i, addr, size, base) \
-       map_item(&tab[((addr)>>12) + i], (u8 *)(base) - (u32)(addr) - ((i << 12) & ~(size - 1)), 0)
+       map_item(&tab[((u32)(addr) >> 12) + i], \
+                (u8 *)(base) - (u32)((addr) + ((i << 12) & ~(size - 1))), 0)
 
 #define IOMEM32(a) (((a) & 0xfff) / 4)
 #define IOMEM16(a) (0x1000/4 + (((a) & 0xfff) / 2))
 #define IOMEM8(a)  (0x1000/4 + 0x1000/2 + ((a) & 0xfff))
 
-u8 zero_mem[0x1000];
+u32 zero_mem[0x1000/4];
+static u32 ffff_mem[0x1000/4];
 
-u32 read_mem_dummy()
+static u32 read_mem_dummy(u32 addr)
 {
-       return 0;
+       // use 'addr' and not 'address', yes the api is weird...
+       memprintf("unmapped r %08x @%08x %u\n", addr, psxRegs.pc, psxRegs.cycle);
+       return 0xffffffff;
 }
 
 static void write_mem_dummy(u32 data)
 {
-       memprintf("unmapped w %08x, %08x @%08x %u\n", address, data, psxRegs.pc, psxRegs.cycle);
+       if (!(psxRegs.CP0.n.Status & (1 << 16)))
+               memprintf("unmapped w %08x, %08x @%08x %u\n",
+                         address, data, psxRegs.pc, psxRegs.cycle);
 }
 
 /* IO handlers */
@@ -239,46 +246,51 @@ static void io_gpu_write_status(u32 value)
        gpuSyncPluginSR();
 }
 
-static void map_ram_write(void)
+void new_dyna_pcsx_mem_isolate(int enable)
 {
        int i;
 
-       for (i = 0; i < (0x800000 >> 12); i++) {
-               map_l1_mem(mem_writetab, i, 0x80000000, 0x200000, psxM);
-               map_l1_mem(mem_writetab, i, 0x00000000, 0x200000, psxM);
-               map_l1_mem(mem_writetab, i, 0xa0000000, 0x200000, psxM);
+       // note: apparently 0xa0000000 uncached access still works,
+       // at least read does for sure, so assume write does too
+       memprintf("mem isolate %d\n", enable);
+       if (enable) {
+               for (i = 0; i < (0x800000 >> 12); i++) {
+                       map_item(&mem_writetab[0x80000|i], mem_unmwtab, 1);
+                       map_item(&mem_writetab[0x00000|i], mem_unmwtab, 1);
+                       //map_item(&mem_writetab[0xa0000|i], mem_unmwtab, 1);
+               }
+       }
+       else {
+               for (i = 0; i < (0x800000 >> 12); i++) {
+                       map_l1_mem(mem_writetab, i, 0x80000000, 0x200000, psxM);
+                       map_l1_mem(mem_writetab, i, 0x00000000, 0x200000, psxM);
+                       map_l1_mem(mem_writetab, i, 0xa0000000, 0x200000, psxM);
+               }
        }
 }
 
-static void unmap_ram_write(void)
+static u32 read_biu(u32 addr)
 {
-       int i;
-
-       for (i = 0; i < (0x800000 >> 12); i++) {
-               map_item(&mem_writetab[0x80000|i], mem_unmwtab, 1);
-               map_item(&mem_writetab[0x00000|i], mem_unmwtab, 1);
-               map_item(&mem_writetab[0xa0000|i], mem_unmwtab, 1);
-       }
+       if (addr != 0xfffe0130)
+               return read_mem_dummy(addr);
+
+ FILE *f = fopen("/tmp/psxbiu.bin", "wb");
+ fwrite(psxM, 1, 0x200000, f);
+ fclose(f);
+       memprintf("read_biu  %08x @%08x %u\n",
+               psxRegs.biuReg, psxRegs.pc, psxRegs.cycle);
+       return psxRegs.biuReg;
 }
 
 static void write_biu(u32 value)
 {
-       memprintf("write_biu %08x, %08x @%08x %u\n", address, value, psxRegs.pc, psxRegs.cycle);
-
-       if (address != 0xfffe0130)
+       if (address != 0xfffe0130) {
+               write_mem_dummy(value);
                return;
-
-       switch (value) {
-       case 0x800: case 0x804:
-               unmap_ram_write();
-               break;
-       case 0: case 0x1e988:
-               map_ram_write();
-               break;
-       default:
-               printf("write_biu: unexpected val: %08x\n", value);
-               break;
        }
+
+       memprintf("write_biu %08x @%08x %u\n", value, psxRegs.pc, psxRegs.cycle);
+       psxRegs.biuReg = value;
 }
 
 void new_dyna_pcsx_mem_load_state(void)
@@ -301,6 +313,8 @@ void new_dyna_pcsx_mem_init(void)
 {
        int i;
 
+       memset(ffff_mem, 0xff, sizeof(ffff_mem));
+
        // have to map these further to keep tcache close to .text
        mem_readtab = psxMap(0x08000000, 0x200000 * sizeof(mem_readtab[0]), 0, MAP_TAG_LUTS);
        if (mem_readtab == NULL) {
@@ -319,7 +333,7 @@ void new_dyna_pcsx_mem_init(void)
        // default/unmapped memhandlers
        for (i = 0; i < 0x100000; i++) {
                //map_item(&mem_readtab[i], mem_unmrtab, 1);
-               map_l1_mem(mem_readtab, i, 0, 0x1000, zero_mem);
+               map_l1_mem(mem_readtab, i, 0, 0x1000, ffff_mem);
                map_item(&mem_writetab[i], mem_unmwtab, 1);
        }
 
@@ -329,7 +343,7 @@ void new_dyna_pcsx_mem_init(void)
                map_l1_mem(mem_readtab,  i, 0x00000000, 0x200000, psxM);
                map_l1_mem(mem_readtab,  i, 0xa0000000, 0x200000, psxM);
        }
-       map_ram_write();
+       new_dyna_pcsx_mem_isolate(0);
 
        // BIOS and it's mirrors
        for (i = 0; i < (0x80000 >> 12); i++) {
@@ -344,12 +358,12 @@ void new_dyna_pcsx_mem_init(void)
        map_l1_mem(mem_writetab, 0, 0x9f800000, 0x1000, psxH);
 
        // I/O
-       map_item(&mem_readtab[0x1f801000 >> 12], mem_iortab, 1);
-       map_item(&mem_readtab[0x9f801000 >> 12], mem_iortab, 1);
-       map_item(&mem_readtab[0xbf801000 >> 12], mem_iortab, 1);
-       map_item(&mem_writetab[0x1f801000 >> 12], mem_iowtab, 1);
-       map_item(&mem_writetab[0x9f801000 >> 12], mem_iowtab, 1);
-       map_item(&mem_writetab[0xbf801000 >> 12], mem_iowtab, 1);
+       map_item(&mem_readtab[0x1f801000u >> 12], mem_iortab, 1);
+       map_item(&mem_readtab[0x9f801000u >> 12], mem_iortab, 1);
+       map_item(&mem_readtab[0xbf801000u >> 12], mem_iortab, 1);
+       map_item(&mem_writetab[0x1f801000u >> 12], mem_iowtab, 1);
+       map_item(&mem_writetab[0x9f801000u >> 12], mem_iowtab, 1);
+       map_item(&mem_writetab[0xbf801000u >> 12], mem_iowtab, 1);
 
        // L2
        // unmapped tables
@@ -460,9 +474,12 @@ void new_dyna_pcsx_mem_init(void)
        }
 
        // misc
-       map_item(&mem_writetab[0xfffe0130 >> 12], mem_ffwtab, 1);
-       for (i = 0; i < 0x1000/4 + 0x1000/2 + 0x1000; i++)
+       map_item(&mem_readtab[0xfffe0130u >> 12], mem_ffrtab, 1);
+       map_item(&mem_writetab[0xfffe0130u >> 12], mem_ffwtab, 1);
+       for (i = 0; i < 0x1000/4 + 0x1000/2 + 0x1000; i++) {
+               map_item(&mem_ffrtab[i], read_biu, 1);
                map_item(&mem_ffwtab[i], write_biu, 1);
+       }
 
        mem_rtab = mem_readtab;
        mem_wtab = mem_writetab;
index 72892a8..7f8283d 100644 (file)
@@ -1,9 +1,10 @@
 
-extern u8 zero_mem[0x1000];
+extern u32 zero_mem[0x1000/4];
 
 void new_dyna_pcsx_mem_init(void);
 void new_dyna_pcsx_mem_reset(void);
 void new_dyna_pcsx_mem_load_state(void);
+void new_dyna_pcsx_mem_isolate(int enable);
 void new_dyna_pcsx_mem_shutdown(void);
 
 int pcsxmem_is_handler_dynamic(unsigned int addr);
index 18c5413..454290d 100644 (file)
@@ -355,6 +355,8 @@ fail_io:
 unsigned char *sbi_sectors;
 
 int LoadSBI(const char *fname, int sector_count) {
+       int good_sectors = 0;
+       int clean_eof = 0;
        char buffer[16];
        FILE *sbihandle;
        u8 sbitime[3], t;
@@ -365,21 +367,33 @@ int LoadSBI(const char *fname, int sector_count) {
                return -1;
 
        sbi_sectors = calloc(1, sector_count / 8);
-       if (sbi_sectors == NULL) {
-               fclose(sbihandle);
-               return -1;
-       }
+       if (sbi_sectors == NULL)
+               goto end;
 
        // 4-byte SBI header
        if (fread(buffer, 1, 4, sbihandle) != 4)
-               goto fail_io;
+               goto end;
 
        while (1) {
                s = fread(sbitime, 1, 3, sbihandle);
                if (s != 3)
-                       goto fail_io;
+               {
+                       if (s == 0)
+                               clean_eof = 1;
+                       break;
+               }
+               s = MSF2SECT(btoi(sbitime[0]), btoi(sbitime[1]), btoi(sbitime[2]));
+               if (s < sector_count) {
+                       sbi_sectors[s >> 3] |= 1 << (s&7);
+                       good_sectors++;
+               }
+               else
+                       SysPrintf(_("SBI sector %d >= %d?\n"), s, sector_count);
+
+               // skip to the next record
                if (fread(&t, 1, sizeof(t), sbihandle) != sizeof(t))
-                       goto fail_io;
+                       break;
+               s = -1;
                switch (t) {
                default:
                case 1:
@@ -390,24 +404,24 @@ int LoadSBI(const char *fname, int sector_count) {
                        s = 3;
                        break;
                }
-               fseek(sbihandle, s, SEEK_CUR);
-
-               s = MSF2SECT(btoi(sbitime[0]), btoi(sbitime[1]), btoi(sbitime[2]));
-               if (s < sector_count)
-                       sbi_sectors[s >> 3] |= 1 << (s&7);
-               else
-                       SysPrintf(_("SBI sector %d >= %d?\n"), s, sector_count);
+               if (s < 0)
+                       break;
+               if (fseek(sbihandle, s, SEEK_CUR))
+                       break;
        }
 
        fclose(sbihandle);
        return 0;
 
-fail_io:
-#ifndef NDEBUG
-       SysPrintf(_("File IO error in <%s:%s>.\n"), __FILE__, __func__);
-#endif
+end:
+       if (!clean_eof)
+               SysPrintf(_("SBI: parse failure at 0x%lx\n"), ftell(sbihandle));
+       if (!good_sectors) {
+               free(sbi_sectors);
+               sbi_sectors = NULL;
+       }
        fclose(sbihandle);
-       return -1;
+       return sbi_sectors ? 0 : -1;
 }
 
 void UnloadSBI(void) {
index 3d08364..9ece259 100644 (file)
@@ -911,7 +911,9 @@ void MTC0(psxRegisters *regs_, int reg, u32 val) {
 //     SysPrintf("MTC0 %d: %x\n", reg, val);
        switch (reg) {
                case 12: // Status
-                       regs_->CP0.r[12] = val;
+                       if ((regs_->CP0.n.Status ^ val) & (1 << 16))
+                               psxMemOnIsolate((val >> 16) & 1);
+                       regs_->CP0.n.Status = val;
                        psxTestSWInts(regs_);
                        break;
 
@@ -1114,7 +1116,7 @@ static void intClear(u32 Addr, u32 Size) {
 }
 
 void intNotify (int note, void *data) {
-       /* Gameblabla - Only clear the icache if it's isolated */
+       /* Armored Core won't boot without this */
        if (note == R3000ACPU_NOTIFY_CACHE_ISOLATED)
        {
                memset(&ICache, 0xff, sizeof(ICache));
index 37a0efd..fb48f77 100644 (file)
@@ -195,8 +195,8 @@ int psxMemInit(void)
                return -1;
        }
 
-       memset(psxMemRLUT, (uintptr_t)INVALID_PTR, 0x10000 * sizeof(void *));
-       memset(psxMemWLUT, (uintptr_t)INVALID_PTR, 0x10000 * sizeof(void *));
+       memset(psxMemRLUT, (int)(uintptr_t)INVALID_PTR, 0x10000 * sizeof(void *));
+       memset(psxMemWLUT, (int)(uintptr_t)INVALID_PTR, 0x10000 * sizeof(void *));
 
 // MemR
        for (i = 0; i < 0x80; i++) psxMemRLUT[i + 0x0000] = (u8 *)&psxM[(i & 0x1f) << 16];
@@ -265,7 +265,22 @@ void psxMemShutdown() {
        free(psxMemWLUT); psxMemWLUT = NULL;
 }
 
-static int writeok = 1;
+void psxMemOnIsolate(int enable)
+{
+       if (enable) {
+               memset(psxMemWLUT + 0x0000, (int)(uintptr_t)INVALID_PTR, 0x80 * sizeof(void *));
+               memset(psxMemWLUT + 0x8000, (int)(uintptr_t)INVALID_PTR, 0x80 * sizeof(void *));
+               //memset(psxMemWLUT + 0xa000, (int)(uintptr_t)INVALID_PTR, 0x80 * sizeof(void *));
+       } else {
+               int i;
+               for (i = 0; i < 0x80; i++)
+                       psxMemWLUT[i + 0x0000] = (void *)&psxM[(i & 0x1f) << 16];
+               memcpy(psxMemWLUT + 0x8000, psxMemWLUT, 0x80 * sizeof(void *));
+               memcpy(psxMemWLUT + 0xa000, psxMemWLUT, 0x80 * sizeof(void *));
+       }
+       psxCpu->Notify(enable ? R3000ACPU_NOTIFY_CACHE_ISOLATED
+                       : R3000ACPU_NOTIFY_CACHE_UNISOLATED, NULL);
+}
 
 u8 psxMemRead8(u32 mem) {
        char *p;
@@ -334,8 +349,10 @@ u32 psxMemRead32(u32 mem) {
                                DebugCheckBP((mem & 0xffffff) | 0x80000000, R4);
                        return SWAPu32(*(u32 *)(p + (mem & 0xffff)));
                } else {
+                       if (mem == 0xfffe0130)
+                               return psxRegs.biuReg;
 #ifdef PSXMEM_LOG
-                       if (writeok) { PSXMEM_LOG("err lw %8.8lx\n", mem); }
+                       PSXMEM_LOG("err lw %8.8lx\n", mem);
 #endif
                        return 0xFFFFFFFF;
                }
@@ -417,44 +434,13 @@ void psxMemWrite32(u32 mem, u32 value) {
                        psxCpu->Clear(mem, 1);
 #endif
                } else {
-                       if (mem != 0xfffe0130) {
-#ifndef DRC_DISABLE
-                               if (!writeok)
-                                       psxCpu->Clear(mem, 1);
-#endif
-
-#ifdef PSXMEM_LOG
-                               if (writeok) { PSXMEM_LOG("err sw %8.8lx\n", mem); }
-#endif
-                       } else {
-                               int i;
-
-                               switch (value) {
-                                       case 0x800: case 0x804:
-                                               if (writeok == 0) break;
-                                               writeok = 0;
-                                               memset(psxMemWLUT + 0x0000, (uintptr_t)INVALID_PTR, 0x80 * sizeof(void *));
-                                               memset(psxMemWLUT + 0x8000, (uintptr_t)INVALID_PTR, 0x80 * sizeof(void *));
-                                               memset(psxMemWLUT + 0xa000, (uintptr_t)INVALID_PTR, 0x80 * sizeof(void *));
-                                               /* Required for icache interpreter otherwise Armored Core won't boot on icache interpreter */
-                                               psxCpu->Notify(R3000ACPU_NOTIFY_CACHE_ISOLATED, NULL);
-                                               break;
-                                       case 0x00: case 0x1e988:
-                                               if (writeok == 1) break;
-                                               writeok = 1;
-                                               for (i = 0; i < 0x80; i++) psxMemWLUT[i + 0x0000] = (void *)&psxM[(i & 0x1f) << 16];
-                                               memcpy(psxMemWLUT + 0x8000, psxMemWLUT, 0x80 * sizeof(void *));
-                                               memcpy(psxMemWLUT + 0xa000, psxMemWLUT, 0x80 * sizeof(void *));
-                                               /* Dynarecs might take this opportunity to flush their code cache */
-                                               psxCpu->Notify(R3000ACPU_NOTIFY_CACHE_UNISOLATED, NULL);
-                                               break;
-                                       default:
+                       if (mem == 0xfffe0130) {
+                               psxRegs.biuReg = value;
+                               return;
+                       }
 #ifdef PSXMEM_LOG
-                                               PSXMEM_LOG("unk %8.8lx = %x\n", mem, value);
+                       PSXMEM_LOG("err sw %8.8lx\n", mem);
 #endif
-                                               break;
-                               }
-                       }
                }
        }
 }
index 14ff003..129973c 100644 (file)
@@ -127,6 +127,7 @@ extern u8 **psxMemRLUT;
 
 int psxMemInit();
 void psxMemReset();
+void psxMemOnIsolate(int enable);
 void psxMemShutdown();
 
 u8 psxMemRead8 (u32 mem);
index 2339d59..6973afe 100644 (file)
@@ -32,7 +32,6 @@ extern "C" {
 enum {
        R3000ACPU_NOTIFY_CACHE_ISOLATED = 0,
        R3000ACPU_NOTIFY_CACHE_UNISOLATED = 1,
-       R3000ACPU_NOTIFY_DMA3_EXE_LOAD = 2
 };
 
 typedef struct {
@@ -193,6 +192,8 @@ typedef struct {
        u32 muldivBusyCycle;
        u32 subCycle;           /* interpreter cycle counting */
        u32 subCycleStep;
+       u32 biuReg;
+       u32 reserved[3];
        // warning: changing anything in psxRegisters requires update of all
        // asm in libpcsxcore/new_dynarec/
 } psxRegisters;
index 43019f1..eb85a73 100644 (file)
@@ -20,6 +20,7 @@
 #define _IN_DMA\r
 \r
 #include "externals.h"\r
+#include "registers.h"\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
 // READ DMA (one value)\r
@@ -28,6 +29,7 @@
 unsigned short CALLBACK SPUreadDMA(void)\r
 {\r
  unsigned short s = *(unsigned short *)(spu.spuMemC + spu.spuAddr);\r
+ check_irq_io(spu.spuAddr);\r
  spu.spuAddr += 2;\r
  spu.spuAddr &= 0x7fffe;\r
 \r
@@ -41,26 +43,27 @@ unsigned short CALLBACK SPUreadDMA(void)
 void CALLBACK SPUreadDMAMem(unsigned short *pusPSXMem, int iSize,\r
  unsigned int cycles)\r
 {\r
- int i;\r
+ unsigned int addr = spu.spuAddr, irq_addr = regAreaGet(H_SPUirqAddr) << 3;\r
+ int i, irq;\r
 \r
  do_samples_if_needed(cycles, 1);\r
-\r
- for(i=0;i<iSize;i++)\r
-  {\r
-   *pusPSXMem++ = *(unsigned short *)(spu.spuMemC + spu.spuAddr);\r
-   spu.spuAddr += 2;\r
-   spu.spuAddr &= 0x7fffe;\r
-  }\r
+ irq = addr <= irq_addr && irq_addr < addr + iSize*2;\r
+\r
+ for(i = 0; i < iSize; i++)\r
+ {\r
+  *pusPSXMem++ = *(unsigned short *)(spu.spuMemC + addr);\r
+  addr += 2;\r
+  addr &= 0x7fffe;\r
+ }\r
+ if (irq && (spu.spuCtrl & CTRL_IRQ))\r
+  log_unhandled("rdma spu irq: %x/%x+%x\n", irq_addr, spu.spuAddr, iSize * 2);\r
+ spu.spuAddr = addr;\r
 }\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
 ////////////////////////////////////////////////////////////////////////\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-// to investigate: do sound data updates by writedma affect spu\r
-// irqs? Will an irq be triggered, if new data is written to\r
-// the memory irq address?\r
-\r
 ////////////////////////////////////////////////////////////////////////\r
 // WRITE DMA (one value)\r
 ////////////////////////////////////////////////////////////////////////\r
@@ -69,6 +72,7 @@ void CALLBACK SPUwriteDMA(unsigned short val)
 {\r
  *(unsigned short *)(spu.spuMemC + spu.spuAddr) = val;\r
 \r
+ check_irq_io(spu.spuAddr);\r
  spu.spuAddr += 2;\r
  spu.spuAddr &= 0x7fffe;\r
  spu.bMemDirty = 1;\r
@@ -81,24 +85,31 @@ void CALLBACK SPUwriteDMA(unsigned short val)
 void CALLBACK SPUwriteDMAMem(unsigned short *pusPSXMem, int iSize,\r
  unsigned int cycles)\r
 {\r
- int i;\r
+ unsigned int addr = spu.spuAddr, irq_addr = regAreaGet(H_SPUirqAddr) << 3;\r
+ int i, irq;\r
  \r
  do_samples_if_needed(cycles, 1);\r
  spu.bMemDirty = 1;\r
-\r
- if(spu.spuAddr + iSize*2 < 0x80000)\r
-  {\r
-   memcpy(spu.spuMemC + spu.spuAddr, pusPSXMem, iSize*2);\r
-   spu.spuAddr += iSize*2;\r
-   return;\r
-  }\r
-\r
- for(i=0;i<iSize;i++)\r
+ irq = addr <= irq_addr && irq_addr < addr + iSize*2;\r
+\r
+ if (addr + iSize*2 < 0x80000)\r
+ {\r
+  memcpy(spu.spuMemC + addr, pusPSXMem, iSize*2);\r
+  addr += iSize*2;\r
+ }\r
+ else\r
+ {\r
+  irq |= irq_addr < ((addr + iSize*2) & 0x7ffff);\r
+  for (i = 0; i < iSize; i++)\r
   {\r
-   *(unsigned short *)(spu.spuMemC + spu.spuAddr) = *pusPSXMem++;\r
-   spu.spuAddr += 2;\r
-   spu.spuAddr &= 0x7fffe;\r
+   *(unsigned short *)(spu.spuMemC + addr) = *pusPSXMem++;\r
+   addr += 2;\r
+   addr &= 0x7fffe;\r
   }\r
+ }\r
+ if (irq && (spu.spuCtrl & CTRL_IRQ)) // unhandled because need to implement delay\r
+  log_unhandled("wdma spu irq: %x/%x+%x\n", irq_addr, spu.spuAddr, iSize * 2);\r
+ spu.spuAddr = addr;\r
 }\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
index 5157412..b63ac3c 100644 (file)
@@ -117,6 +117,7 @@ typedef struct
  unsigned int      bFMod:2;                            // freq mod (0=off, 1=sound channel, 2=freq channel)\r
  unsigned int      prevflags:3;                        // flags from previous block\r
  unsigned int      bIgnoreLoop:1;                      // Ignore loop\r
+ unsigned int      bNewPitch:1;                        // pitch changed\r
  int               iLeftVolume;                        // left volume\r
  int               iRightVolume;                       // right volume\r
  ADSRInfoEx        ADSRX;\r
@@ -253,6 +254,7 @@ extern SPUInfo spu;
 \r
 void do_samples(unsigned int cycles_to, int do_sync);\r
 void schedule_next_irq(void);\r
+void check_irq_io(unsigned int addr);\r
 \r
 #define do_samples_if_needed(c, sync) \\r
  do { \\r
index badd0af..adc9c3a 100644 (file)
@@ -150,6 +150,8 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val,
       goto rvbd;\r
     //-------------------------------------------------//\r
     case H_SPUirqAddr:\r
+      //if (val & 1)\r
+      //  log_unhandled("w irq with lsb: %08lx %04x\n", reg, val);\r
       spu.pSpuIrq=spu.spuMemC+(((unsigned long) val<<3)&~0xf);\r
       goto upd_irq;\r
     //-------------------------------------------------//\r
@@ -505,7 +507,7 @@ static void SetPitch(int ch,unsigned short val)               // SET PITCH
  spu.s_chan[ch].iRawPitch = NP;\r
  spu.s_chan[ch].sinc = NP << 4;\r
  spu.s_chan[ch].sinc_inv = 0;\r
- spu.SB[ch * SB_SIZE + 32] = 1; // -> freq change in simple interpolation mode: set flag\r
+ spu.s_chan[ch].bNewPitch = 1;\r
 \r
  // don't mess spu.dwChannelsAudible as adsr runs independently\r
 }\r
index 1127cd7..ebebd2a 100644 (file)
@@ -18,8 +18,7 @@
  *                                                                         *
  ***************************************************************************/
 
-#if !defined(_WIN32) && !defined(NO_OS)
-#include <sys/time.h> // gettimeofday in xa.c
+#if !defined(THREAD_ENABLED) && !defined(_WIN32) && !defined(NO_OS)
 #define THREAD_ENABLED 1
 #endif
 #include "stdafx.h"
@@ -212,7 +211,7 @@ static void do_irq(void)
 
 static int check_irq(int ch, unsigned char *pos)
 {
- if((spu.spuCtrl & CTRL_IRQ) && pos == spu.pSpuIrq)
+ if((spu.spuCtrl & (CTRL_ON|CTRL_IRQ)) == (CTRL_ON|CTRL_IRQ) && pos == spu.pSpuIrq)
  {
   //printf("ch%d irq %04x\n", ch, pos - spu.spuMemC);
   do_irq();
@@ -221,6 +220,17 @@ static int check_irq(int ch, unsigned char *pos)
  return 0;
 }
 
+void check_irq_io(unsigned int addr)
+{
+ unsigned int irq_addr = regAreaGet(H_SPUirqAddr) << 3;
+ //addr &= ~7; // ?
+ if((spu.spuCtrl & (CTRL_ON|CTRL_IRQ)) == (CTRL_ON|CTRL_IRQ) && addr == irq_addr)
+ {
+  //printf("io   irq %04x\n", irq_addr);
+  do_irq();
+ }
+}
+
 ////////////////////////////////////////////////////////////////////////
 // START SOUND... called by main thread to setup a new sound on a channel
 ////////////////////////////////////////////////////////////////////////
@@ -275,9 +285,8 @@ INLINE int FModChangeFrequency(int *SB, int pitch, int ns)
  if(NP<0x1)    NP=0x1;
 
  sinc=NP<<4;                                           // calc frequency
- if(spu_config.iUseInterpolation==1)                   // freq change in simple interpolation mode
-  SB[32]=1;
  iFMod[ns]=0;
+ SB[32]=1;                                             // reset interpolation
 
  return sinc;
 }                    
@@ -769,6 +778,9 @@ static void do_channels(int ns_to)
    s_chan = &spu.s_chan[ch];
    SB = spu.SB + ch * SB_SIZE;
    sinc = s_chan->sinc;
+   if (spu.s_chan[ch].bNewPitch)
+    SB[32] = 1;                                    // reset interpolation
+   spu.s_chan[ch].bNewPitch = 0;
 
    if (s_chan->bNoise)
     d = do_samples_noise(ch, ns_to);
@@ -857,11 +869,14 @@ static struct spu_worker {
    int sinc;
    int start;
    int loop;
-   int ns_to;
    short vol_l;
    short vol_r;
+   unsigned short ns_to;
+   unsigned short bNoise:1;
+   unsigned short bFMod:2;
+   unsigned short bRVBActive:1;
+   unsigned short bNewPitch:1;
    ADSRInfoEx adsr;
-   // might also want to add fmod flags..
   } ch[24];
   int SSumLR[NSSIZE * 2];
  } i[4];
@@ -939,6 +954,10 @@ static void queue_channel_work(int ns_to, unsigned int silentch)
    work->ch[ch].vol_r = s_chan->iRightVolume;
    work->ch[ch].start = s_chan->pCurr - spu.spuMemC;
    work->ch[ch].loop = s_chan->pLoop - spu.spuMemC;
+   work->ch[ch].bNoise = s_chan->bNoise;
+   work->ch[ch].bFMod = s_chan->bFMod;
+   work->ch[ch].bRVBActive = s_chan->bRVBActive;
+   work->ch[ch].bNewPitch = s_chan->bNewPitch;
    if (s_chan->prevflags & 1)
     work->ch[ch].start = work->ch[ch].loop;
 
@@ -952,6 +971,7 @@ static void queue_channel_work(int ns_to, unsigned int silentch)
     s_chan->ADSRX.State = ADSR_RELEASE;
     s_chan->ADSRX.EnvelopeVol = 0;
    }
+   s_chan->bNewPitch = 0;
   }
 
  work->rvb_addr = 0;
@@ -971,8 +991,6 @@ static void queue_channel_work(int ns_to, unsigned int silentch)
 static void do_channel_work(struct work_item *work)
 {
  unsigned int mask;
- unsigned int decode_dirty_ch = 0;
- const SPUCHAN *s_chan;
  int *SB, sinc, spos, sbpos;
  int d, ch, ns_to;
 
@@ -997,15 +1015,16 @@ static void do_channel_work(struct work_item *work)
    sbpos = work->ch[ch].sbpos;
    sinc = work->ch[ch].sinc;
 
-   s_chan = &spu.s_chan[ch];
    SB = spu.SB + ch * SB_SIZE;
+   if (work->ch[ch].bNewPitch)
+    SB[32] = 1; // reset interpolation
 
-   if (s_chan->bNoise)
+   if (work->ch[ch].bNoise)
     do_lsfr_samples(d, work->ctrl, &spu.dwNoiseCount, &spu.dwNoiseVal);
-   else if (s_chan->bFMod == 2
-         || (s_chan->bFMod == 0 && spu_config.iUseInterpolation == 0))
+   else if (work->ch[ch].bFMod == 2
+         || (work->ch[ch].bFMod == 0 && spu_config.iUseInterpolation == 0))
     do_samples_noint(decode_block_work, work, ch, d, SB, sinc, &spos, &sbpos);
-   else if (s_chan->bFMod == 0 && spu_config.iUseInterpolation == 1)
+   else if (work->ch[ch].bFMod == 0 && spu_config.iUseInterpolation == 1)
     do_samples_simple(decode_block_work, work, ch, d, SB, sinc, &spos, &sbpos);
    else
     do_samples_default(decode_block_work, work, ch, d, SB, sinc, &spos, &sbpos);
@@ -1017,14 +1036,11 @@ static void do_channel_work(struct work_item *work)
    }
 
    if (ch == 1 || ch == 3)
-    {
-     do_decode_bufs(spu.spuMem, ch/2, ns_to, work->decode_pos);
-     decode_dirty_ch |= 1 << ch;
-    }
+    do_decode_bufs(spu.spuMem, ch/2, ns_to, work->decode_pos);
 
-   if (s_chan->bFMod == 2)                         // fmod freq channel
+   if (work->ch[ch].bFMod == 2)                         // fmod freq channel
     memcpy(iFMod, &ChanBuf, ns_to * sizeof(iFMod[0]));
-   if (s_chan->bRVBActive && work->rvb_addr)
+   if (work->ch[ch].bRVBActive && work->rvb_addr)
     mix_chan_rvb(work->SSumLR, ns_to,
       work->ch[ch].vol_l, work->ch[ch].vol_r, RVB);
    else
@@ -1136,6 +1152,7 @@ void do_samples(unsigned int cycles_to, int do_direct)
       do_irq();
      }
    }
+  check_irq_io(spu.spuAddr);
 
   if (unlikely(spu.rvb->dirty))
    REVERBPrep();
@@ -1146,6 +1163,7 @@ void do_samples(unsigned int cycles_to, int do_direct)
   }
   else {
    queue_channel_work(ns_to, silentch);
+   //sync_worker_thread(1); // uncomment for debug
   }
 
   // advance "stopped" channels that can cause irqs
index c49eac5..d6670ee 100644 (file)
@@ -111,7 +111,7 @@ BOOL           bCheckMask=FALSE;
 int            iUseMask=0;\r
 int            iSetMask=0;\r
 unsigned short sSetMask=0;\r
-unsigned long  lSetMask=0;\r
+unsigned int   lSetMask=0;\r
 \r
 // drawing/coord vars\r
 \r
@@ -921,14 +921,14 @@ void offsetST(void)
 \r
 ///////////////////////////////////////////////////////// \r
 \r
-void offsetScreenUpload(long Position)\r
+void offsetScreenUpload(int Position)\r
 {\r
  if(bDisplayNotSet)\r
   SetOGLDisplaySettings(1);\r
 \r
  if(Position==-1)\r
   {\r
-   long lmdx,lmdy;\r
+   int lmdx,lmdy;\r
 \r
    lmdx=xrUploadArea.x0;\r
    lmdy=xrUploadArea.y0;\r
index a45bf46..153e1e5 100644 (file)
@@ -64,7 +64,7 @@ unsigned short offsetline(void);
 #endif\r
 void offsetST(void);\r
 void offsetBlk(void);\r
-void offsetScreenUpload(long Position);\r
+void offsetScreenUpload(int Position);\r
 void assignTexture3(void);\r
 void assignTexture4(void);\r
 void assignTextureSprite(void);\r
index 0a8acf5..a6dbceb 100644 (file)
@@ -143,10 +143,10 @@ extern  void ( APIENTRY * glPixelStorei )(GLenum pname, GLint param);
 #define bool unsigned short\r
 #endif\r
 #define LOWORD(l)           ((unsigned short)(l))\r
-#define HIWORD(l)           ((unsigned short)(((unsigned long)(l) >> 16) & 0xFFFF))\r
+#define HIWORD(l)           ((unsigned short)(((unsigned int)(l) >> 16) & 0xFFFF))\r
 #define max(a,b)            (((a) > (b)) ? (a) : (b))\r
 #define min(a,b)            (((a) < (b)) ? (a) : (b))\r
-#define DWORD unsigned long\r
+#define DWORD unsigned int\r
 \r
 typedef struct RECTTAG\r
 {\r
@@ -173,8 +173,8 @@ typedef struct VRAMLOADTAG
 \r
 typedef struct PSXPOINTTAG\r
 {\r
long x;\r
long y;\r
int x;\r
int y;\r
 } PSXPoint_t;\r
 \r
 typedef struct PSXSPOINTTAG\r
@@ -211,19 +211,19 @@ typedef struct PSXDISPLAYTAG
  PSXPoint_t  DisplayPosition;\r
  PSXPoint_t  DisplayEnd;\r
  \r
long        Double;\r
long        Height;\r
long        PAL;\r
long        InterlacedNew;\r
long        Interlaced;\r
long        InterlacedTest;\r
long        RGB24New;\r
long        RGB24;\r
int         Double;\r
int         Height;\r
int         PAL;\r
int         InterlacedNew;\r
int         Interlaced;\r
int         InterlacedTest;\r
int         RGB24New;\r
int         RGB24;\r
  PSXSPoint_t DrawOffset;\r
  PSXRect_t   DrawArea;\r
  PSXPoint_t  GDrawOffset;\r
  PSXPoint_t  CumulOffset;\r
long        Disabled;\r
int         Disabled;\r
  PSXRect_t   Range;\r
 } PSXDisplay_t;\r
 \r
@@ -242,7 +242,7 @@ typedef struct OGLVertexTag
 COLTAG\r
   {\r
    unsigned char col[4];\r
-   unsigned long lcol;\r
+   unsigned int  lcol;\r
   } c;\r
 \r
 } OGLVertex;\r
@@ -256,7 +256,7 @@ typedef union EXShortTag
 typedef union EXLongTag\r
 {\r
  unsigned char c[4];\r
- unsigned long l;\r
+ unsigned int  l;\r
  EXShort       s[2];\r
 } EXLong;\r
 \r
@@ -299,7 +299,7 @@ extern int            iSetMask;
 extern int            iDepthFunc;\r
 extern BOOL           bCheckMask;\r
 extern unsigned short sSetMask;\r
-extern unsigned long  lSetMask;\r
+extern unsigned int   lSetMask;\r
 extern BOOL           bSetClip;\r
 extern GLuint         gTexScanName;\r
 \r
@@ -309,8 +309,8 @@ extern GLuint         gTexScanName;
 \r
 #ifndef _IN_SOFT\r
 \r
-extern long           GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;\r
-extern long           GlobalTextREST,GlobalTextABR,GlobalTextPAGE;\r
+extern int            GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;\r
+extern int            GlobalTextREST,GlobalTextABR,GlobalTextPAGE;\r
 extern short          ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;\r
 extern short          g_m1;\r
 extern short          g_m2;\r
@@ -347,22 +347,22 @@ extern GLubyte       ubGloAlpha;
 extern short         sSprite_ux2;\r
 extern short         sSprite_vy2;\r
 extern BOOL          bRenderFrontBuffer;\r
-extern unsigned long ulOLDCOL;\r
-extern unsigned long ulClutID;\r
+extern unsigned int  ulOLDCOL;\r
+extern unsigned int  ulClutID;\r
 extern void (*primTableJ[256])(unsigned char *);\r
 extern void (*primTableSkip[256])(unsigned char *);\r
 extern unsigned short  usMirror;\r
-extern unsigned long dwCfgFixes;\r
-extern unsigned long dwActFixes;\r
-extern unsigned long dwEmuFixes;\r
+extern unsigned int  dwCfgFixes;\r
+extern unsigned int  dwActFixes;\r
+extern unsigned int  dwEmuFixes;\r
 extern BOOL          bUseFixes;\r
 extern int           iSpriteTex;\r
 extern int           iDrawnSomething;\r
 \r
-extern long drawX;\r
-extern long drawY;\r
-extern long drawW;\r
-extern long drawH;\r
+extern int  drawX;\r
+extern int  drawY;\r
+extern int  drawW;\r
+extern int  drawH;\r
 extern short sxmin;\r
 extern short sxmax;\r
 extern short symin;\r
@@ -383,10 +383,10 @@ extern GLint          giWantedRGBA;
 extern GLint          giWantedFMT;\r
 extern GLint          giWantedTYPE;\r
 extern void           (*LoadSubTexFn) (int,int,short,short);\r
-extern long           GlobalTexturePage;\r
-extern unsigned long  (*TCF[]) (unsigned long);\r
+extern int            GlobalTexturePage;\r
+extern unsigned int   (*TCF[]) (unsigned int );\r
 extern unsigned short (*PTCF[]) (unsigned short);\r
-extern unsigned long  (*PalTexturedColourFn) (unsigned long);\r
+extern unsigned int   (*PalTexturedColourFn) (unsigned int);\r
 extern BOOL           bUseFastMdec;\r
 extern BOOL           bUse15bitMdec;\r
 extern int            iFrameTexType;\r
@@ -420,32 +420,32 @@ extern char           szDispBuf[];
 extern char           szGPUKeys[];\r
 extern PSXDisplay_t   PSXDisplay;\r
 extern PSXDisplay_t   PreviousPSXDisplay;\r
-//extern unsigned long  ulKeybits;\r
+//extern unsigned int   ulKeybits;\r
 extern TWin_t         TWin;\r
 extern BOOL           bDisplayNotSet;\r
-extern long           lGPUstatusRet;\r
+extern int            lGPUstatusRet;\r
 extern short          imageX0,imageX1;\r
 extern short          imageY0,imageY1;\r
-extern long           lClearOnSwap,lClearOnSwapColor;\r
+extern int            lClearOnSwap,lClearOnSwapColor;\r
 extern unsigned char  * psxVub;\r
 extern char    * psxVsb;\r
 extern unsigned short * psxVuw;\r
 extern signed short   * psxVsw;\r
-extern unsigned long  * psxVul;\r
-extern signed long    * psxVsl;\r
+extern unsigned int   * psxVul;\r
+extern signed int     * psxVsl;\r
 extern GLfloat        gl_z;\r
 extern BOOL           bNeedRGB24Update;\r
 extern BOOL           bChangeWinMode;\r
 extern GLuint         uiScanLine;\r
 extern int            iUseScanLines;\r
-extern long           lSelectedSlot;\r
+extern int            lSelectedSlot;\r
 extern int            iScanBlend;\r
 extern BOOL           bInitCap;\r
 extern int            iBlurBuffer;\r
 extern int            iLastRGB24;\r
 extern int            iRenderFVR;\r
 extern int            iNoScreenSaver;\r
-extern unsigned long  ulGPUInfoVals[];\r
+extern unsigned int   ulGPUInfoVals[];\r
 extern BOOL           bNeedInterlaceUpdate;\r
 extern BOOL           bNeedWriteUpload;\r
 extern BOOL           bSkipNextFrame;\r
@@ -461,7 +461,7 @@ extern int bFullScreen;
 \r
 #ifndef _IN_MENU\r
 \r
-//extern unsigned long  dwCoreFlags;\r
+//extern unsigned int   dwCoreFlags;\r
 extern GLuint         gTexPicName;\r
 //extern PSXPoint_t     ptCursorPoint[];\r
 //extern unsigned short usCursorActive;\r
@@ -539,7 +539,7 @@ typedef struct {
 \r
 #ifndef _IN_KEY\r
 \r
-//extern unsigned long  ulKeybits;\r
+//extern unsigned int   ulKeybits;\r
 \r
 #endif\r
 \r
@@ -547,7 +547,7 @@ typedef struct {
 \r
 #ifndef _IN_ZN\r
 \r
-extern unsigned long dwGPUVersion;\r
+extern unsigned int  dwGPUVersion;\r
 extern int           iGPUHeight;\r
 extern int           iGPUHeightMask;\r
 extern int           GlobalTextIL;\r
index 218ff66..ed16e4a 100644 (file)
@@ -77,15 +77,15 @@ BOOL           bUsingMovie=FALSE;                      // movie active flag
 PSXRect_t      xrMovieArea;                            // rect for movie upload\r
 short          sSprite_ux2;                            // needed for sprire adjust\r
 short          sSprite_vy2;                            // \r
-unsigned long  ulOLDCOL=0;                             // active color\r
-unsigned long  ulClutID;                               // clut\r
+unsigned int   ulOLDCOL=0;                             // active color\r
+unsigned int   ulClutID;                               // clut\r
 \r
-unsigned long dwCfgFixes;                              // game fixes\r
-unsigned long dwActFixes=0;\r
-unsigned long dwEmuFixes=0;\r
+unsigned int  dwCfgFixes;                              // game fixes\r
+unsigned int  dwActFixes=0;\r
+unsigned int  dwEmuFixes=0;\r
 BOOL          bUseFixes;\r
 \r
-long          drawX,drawY,drawW,drawH;                 // offscreen drawing checkers\r
+int           drawX,drawY,drawW,drawH;                 // offscreen drawing checkers\r
 short         sxmin,sxmax,symin,symax;\r
 unsigned int CSVERTEX=0,CSCOLOR=0,CSTEXTURE=0;\r
 \r
@@ -147,9 +147,9 @@ void UpdateGlobalTP(unsigned short gdata)
 ////////////////////////////////////////////////////////////////////////\r
 \r
 \r
-unsigned long DoubleBGR2RGB (unsigned long BGR)\r
+unsigned int DoubleBGR2RGB (unsigned int BGR)\r
 {\r
- unsigned long ebx,eax,edx;\r
+ unsigned int ebx,eax,edx;\r
 \r
  ebx=(BGR&0x000000ff)<<1;\r
  if(ebx&0x00000100) ebx=0x000000ff;\r
@@ -163,7 +163,7 @@ unsigned long DoubleBGR2RGB (unsigned long BGR)
  return (ebx|eax|edx);\r
 }\r
 \r
-unsigned short BGR24to16 (unsigned long BGR)\r
+unsigned short BGR24to16 (unsigned int BGR)\r
 {\r
  return ((BGR>>3)&0x1f)|((BGR&0xf80000)>>9)|((BGR&0xf800)>>6);\r
 }\r
@@ -947,7 +947,7 @@ void SetZMask3NT(void)
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
- void SetRenderState(unsigned long DrawAttributes)\r
+ void SetRenderState(unsigned int DrawAttributes)\r
 {\r
  bDrawNonShaded = (SHADETEXBIT(DrawAttributes)) ? TRUE : FALSE;\r
  DrawSemiTrans = (SEMITRANSBIT(DrawAttributes)) ? TRUE : FALSE;\r
@@ -955,7 +955,7 @@ void SetZMask3NT(void)
 \r
 ////////////////////////////////////////////////////////////////////////                                          \r
 \r
- void SetRenderColor(unsigned long DrawAttributes)\r
+ void SetRenderColor(unsigned int DrawAttributes)\r
 {\r
  if(bDrawNonShaded) {g_m1=g_m2=g_m3=128;}\r
  else\r
@@ -968,7 +968,7 @@ void SetZMask3NT(void)
 \r
 ////////////////////////////////////////////////////////////////////////                                          \r
                                \r
-void SetRenderMode(unsigned long DrawAttributes,BOOL bSCol)\r
+void SetRenderMode(unsigned int DrawAttributes,BOOL bSCol)\r
 {\r
  if((bUseMultiPass) && (bDrawTextured) && !(bDrawNonShaded))\r
       {bDrawMultiPass = TRUE; SetSemiTransMulti(0);}\r
@@ -1024,7 +1024,7 @@ void SetRenderMode(unsigned long DrawAttributes,BOOL bSCol)
 // Set Opaque multipass color\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-void SetOpaqueColor(unsigned long DrawAttributes)\r
+void SetOpaqueColor(unsigned int DrawAttributes)\r
 {\r
  if(bDrawNonShaded) return;                            // no shading? bye\r
   \r
@@ -1399,7 +1399,7 @@ BOOL CheckAgainstFrontScreen(short imageX0,short imageY0,short imageX1,short ima
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-void PrepareFullScreenUpload (long Position)\r
+void PrepareFullScreenUpload (int Position)\r
 {\r
  if (Position==-1)                                     // rgb24\r
   {\r
@@ -1481,7 +1481,7 @@ void PrepareFullScreenUpload (long Position)
 \r
 unsigned char * LoadDirectMovieFast(void);\r
 \r
-void UploadScreenEx(long Position)\r
+void UploadScreenEx(int Position)\r
 {\r
  short ya,yb,xa,xb,x, y, YStep, XStep, U, UStep,ux[4],vy[4];\r
 \r
@@ -1565,7 +1565,7 @@ void UploadScreenEx(long Position)
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-void UploadScreen(long Position)\r
+void UploadScreen(int Position)\r
 {\r
  short x, y, YStep, XStep, U, s, UStep,ux[4],vy[4];\r
  short xa,xb,ya,yb;\r
@@ -1646,8 +1646,8 @@ void UploadScreen(long Position)
      gl_vy[2] = gl_vy[3] = s;\r
      gl_ux[0] = gl_ux[3] = gl_vy[0] = gl_vy[1] = 0;\r
 \r
-     SetRenderState((unsigned long)0x01000000);\r
-     SetRenderMode((unsigned long)0x01000000, FALSE);  // upload texture data\r
+     SetRenderState((unsigned int)0x01000000);\r
+     SetRenderMode((unsigned int)0x01000000, FALSE);  // upload texture data\r
      offsetScreenUpload(Position);\r
      assignTextureVRAMWrite();\r
 \r
@@ -1712,7 +1712,7 @@ BOOL IsInsideNextScreen(short x, short y, short xoff, short yoff)
 \r
 void cmdSTP(unsigned char * baseAddr)\r
 {\r
- unsigned long gdata = ((unsigned long*)baseAddr)[0];\r
+ unsigned int gdata = ((unsigned int*)baseAddr)[0];\r
 \r
  STATUSREG&=~0x1800;                                   // clear the necessary bits\r
  STATUSREG|=((gdata & 0x03) << 11);                    // set the current bits\r
@@ -1745,7 +1745,7 @@ void cmdSTP(unsigned char * baseAddr)
 \r
 void cmdTexturePage(unsigned char * baseAddr)\r
 {\r
- unsigned long gdata = ((unsigned long*)baseAddr)[0];\r
+ unsigned int gdata = ((unsigned int*)baseAddr)[0];\r
  UpdateGlobalTP((unsigned short)gdata);\r
  GlobalTextREST = (gdata&0x00ffffff)>>9;\r
 }\r
@@ -1756,9 +1756,9 @@ void cmdTexturePage(unsigned char * baseAddr)
 \r
 void cmdTextureWindow(unsigned char *baseAddr)\r
 {\r
- unsigned long gdata = ((unsigned long*)baseAddr)[0];\r
+ unsigned int gdata = ((unsigned int*)baseAddr)[0];\r
 \r
- unsigned long YAlign,XAlign;\r
+ unsigned int YAlign,XAlign;\r
 \r
  ulGPUInfoVals[INFO_TW]=gdata&0xFFFFF;\r
 \r
@@ -1792,8 +1792,8 @@ void cmdTextureWindow(unsigned char *baseAddr)
 \r
  // Re-calculate the bit field, because we can't trust what is passed in the data\r
 \r
- YAlign = (unsigned long)(32 - (TWin.Position.y1 >> 3));\r
- XAlign = (unsigned long)(32 - (TWin.Position.x1 >> 3));\r
+ YAlign = (unsigned int)(32 - (TWin.Position.y1 >> 3));\r
+ XAlign = (unsigned int)(32 - (TWin.Position.x1 >> 3));\r
 \r
  // Absolute position of the start of the texture window\r
 \r
@@ -1965,7 +1965,7 @@ void ClampToPSXScreenOffset(short *x0, short *y0, short *x1, short *y1)
 \r
 void cmdDrawAreaStart(unsigned char * baseAddr)\r
 {\r
- unsigned long gdata = ((unsigned long*)baseAddr)[0];\r
+ unsigned int gdata = ((unsigned int*)baseAddr)[0];\r
 \r
  drawX = gdata & 0x3ff;                                // for soft drawing\r
  if(drawX>=1024) drawX=1023;\r
@@ -1996,7 +1996,7 @@ void cmdDrawAreaStart(unsigned char * baseAddr)
 \r
 void cmdDrawAreaEnd(unsigned char * baseAddr)\r
 {\r
- unsigned long gdata = ((unsigned long*)baseAddr)[0];\r
+ unsigned int gdata = ((unsigned int*)baseAddr)[0];\r
 \r
  drawW = gdata & 0x3ff;                                // for soft drawing\r
  if(drawW>=1024) drawW=1023;\r
@@ -2031,7 +2031,7 @@ void cmdDrawAreaEnd(unsigned char * baseAddr)
 \r
 void cmdDrawOffset(unsigned char * baseAddr)\r
 {\r
- unsigned long gdata = ((unsigned long*)baseAddr)[0];\r
+ unsigned int gdata = ((unsigned int*)baseAddr)[0];\r
 \r
  PreviousPSXDisplay.DrawOffset.x = \r
   PSXDisplay.DrawOffset.x = (short)(gdata & 0x7ff);\r
@@ -2241,7 +2241,7 @@ void primStoreImage(unsigned char * baseAddr)
 \r
 void primBlkFill(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  iDrawnSomething=1;\r
@@ -2292,8 +2292,8 @@ void primBlkFill(unsigned char * baseAddr)
       {\r
        bDrawTextured     = FALSE;\r
        bDrawSmoothShaded = FALSE;\r
-       SetRenderState((unsigned long)0x01000000);\r
-       SetRenderMode((unsigned long)0x01000000, FALSE);\r
+       SetRenderState((unsigned int)0x01000000);\r
+       SetRenderMode((unsigned int)0x01000000, FALSE);\r
        vertex[0].c.lcol=0xff000000;\r
        SETCOL(vertex[0]); \r
        if(ly0>pd->DisplayPosition.y)\r
@@ -2320,8 +2320,8 @@ void primBlkFill(unsigned char * baseAddr)
     {\r
      bDrawTextured     = FALSE;\r
      bDrawSmoothShaded = FALSE;\r
-     SetRenderState((unsigned long)0x01000000);\r
-     SetRenderMode((unsigned long)0x01000000, FALSE);\r
+     SetRenderState((unsigned int)0x01000000);\r
+     SetRenderMode((unsigned int)0x01000000, FALSE);\r
      vertex[0].c.lcol=gpuData[0]|0xff000000;\r
      SETCOL(vertex[0]); \r
      //glDisable(GL_SCISSOR_TEST); glError();\r
@@ -2491,12 +2491,12 @@ void primMoveImage(unsigned char * baseAddr)
   }\r
  else\r
   {\r
-   unsigned long *SRCPtr, *DSTPtr;\r
+   unsigned int *SRCPtr, *DSTPtr;\r
    unsigned short LineOffset;\r
    int dx=imageSX>>1;\r
 \r
-   SRCPtr = (unsigned long *)(psxVuw + (1024*imageY0) + imageX0);\r
-   DSTPtr = (unsigned long *)(psxVuw + (1024*imageY1) + imageX1);\r
+   SRCPtr = (unsigned int *)(psxVuw + (1024*imageY0) + imageX0);\r
+   DSTPtr = (unsigned int *)(psxVuw + (1024*imageY1) + imageX1);\r
 \r
    LineOffset = 512 - dx;\r
 \r
@@ -2597,7 +2597,7 @@ void primMoveImage(unsigned char * baseAddr)
 \r
 void primTileS(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long*)baseAddr);\r
+ unsigned int *gpuData = ((unsigned int*)baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  sprtX = sgpuData[2];\r
@@ -2662,7 +2662,7 @@ void primTileS(unsigned char * baseAddr)
 \r
 void primTile1(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long*)baseAddr);\r
+ unsigned int *gpuData = ((unsigned int*)baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  sprtX = sgpuData[2];\r
@@ -2709,7 +2709,7 @@ void primTile1(unsigned char * baseAddr)
 \r
 void primTile8(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long*)baseAddr);\r
+ unsigned int *gpuData = ((unsigned int*)baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  sprtX = sgpuData[2];\r
@@ -2756,7 +2756,7 @@ void primTile8(unsigned char * baseAddr)
 \r
 void primTile16(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long*)baseAddr);\r
+ unsigned int *gpuData = ((unsigned int*)baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  sprtX = sgpuData[2];\r
@@ -2803,7 +2803,7 @@ void primTile16(unsigned char * baseAddr)
 \r
 /*void DrawMultiBlur(void)\r
 {\r
long lABR,lDST;float fx,fy;\r
int lABR,lDST;float fx,fy;\r
 \r
  lABR=GlobalTextABR;\r
  lDST=DrawSemiTrans;\r
@@ -2836,7 +2836,7 @@ void primTile16(unsigned char * baseAddr)
 \r
 void DrawMultiFilterSprite(void)\r
 {\r
long lABR,lDST;\r
int lABR,lDST;\r
 \r
  if(bUseMultiPass || DrawSemiTrans || ubOpaqueDraw) \r
   {\r
@@ -2867,7 +2867,7 @@ void DrawMultiFilterSprite(void)
 \r
 void primSprt8(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
  short s;\r
 \r
@@ -2988,7 +2988,7 @@ void primSprt8(unsigned char * baseAddr)
 \r
 void primSprt16(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
  short s;\r
 \r
@@ -3108,7 +3108,7 @@ void primSprt16(unsigned char * baseAddr)
  \r
 void primSprtSRest(unsigned char * baseAddr,unsigned short type)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
  short s;unsigned short sTypeRest=0;\r
 \r
@@ -3279,7 +3279,7 @@ void primSprtSRest(unsigned char * baseAddr,unsigned short type)
 \r
 void primSprtS(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  short s;unsigned short sTypeRest=0;\r
@@ -3418,7 +3418,7 @@ void primSprtS(unsigned char * baseAddr)
 \r
 void primPolyF4(unsigned char *baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
@@ -3513,7 +3513,7 @@ BOOL bCheckFF9G4(unsigned char * baseAddr)
 \r
  if(iFF9Fix==2)\r
   {\r
-   long labr=GlobalTextABR;\r
+   int labr=GlobalTextABR;\r
    GlobalTextABR=1;\r
    primPolyG4(pFF9G4Cache);\r
    GlobalTextABR=labr;\r
@@ -3527,7 +3527,7 @@ BOOL bCheckFF9G4(unsigned char * baseAddr)
 \r
 void primPolyG4(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = (unsigned long *)baseAddr;\r
+ unsigned int *gpuData = (unsigned int *)baseAddr;\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
@@ -3578,7 +3578,7 @@ void primPolyG4(unsigned char * baseAddr)
 // cmd: flat shaded Texture3\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-BOOL DoLineCheck(unsigned long * gpuData)\r
+BOOL DoLineCheck(unsigned int * gpuData)\r
 {\r
  BOOL bQuad=FALSE;short dx,dy;\r
 \r
@@ -3745,7 +3745,7 @@ BOOL DoLineCheck(unsigned long * gpuData)
 \r
 void primPolyFT3(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
@@ -4181,7 +4181,7 @@ void RectTexAlign(void)
 \r
 void primPolyFT4(unsigned char * baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
@@ -4269,7 +4269,7 @@ void primPolyFT4(unsigned char * baseAddr)
 \r
 void primPolyGT3(unsigned char *baseAddr)\r
 {    \r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
@@ -4378,7 +4378,7 @@ void primPolyGT3(unsigned char *baseAddr)
 \r
 void primPolyG3(unsigned char *baseAddr)\r
 {    \r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
@@ -4423,7 +4423,7 @@ void primPolyG3(unsigned char *baseAddr)
 \r
 void primPolyGT4(unsigned char *baseAddr)\r
 { \r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
@@ -4543,7 +4543,7 @@ void primPolyGT4(unsigned char *baseAddr)
 \r
 void primPolyF3(unsigned char *baseAddr)\r
 {    \r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
@@ -4587,7 +4587,7 @@ void primPolyF3(unsigned char *baseAddr)
 \r
 void primLineGSkip(unsigned char *baseAddr)\r
 {    \r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
  int iMax=255;\r
  int i=2;\r
@@ -4612,7 +4612,7 @@ void primLineGSkip(unsigned char *baseAddr)
 \r
 void primLineGEx(unsigned char *baseAddr)\r
 {    \r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  int iMax=255;\r
  short cx0,cx1,cy0,cy1;int i;BOOL bDraw=TRUE;\r
 \r
@@ -4676,7 +4676,7 @@ void primLineGEx(unsigned char *baseAddr)
 \r
 void primLineG2(unsigned char *baseAddr)\r
 {    \r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
@@ -4721,7 +4721,7 @@ void primLineG2(unsigned char *baseAddr)
 \r
 void primLineFSkip(unsigned char *baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  int i=2,iMax=255;\r
 \r
  ly1 = (short)((gpuData[1]>>16) & 0xffff);\r
@@ -4741,7 +4741,7 @@ void primLineFSkip(unsigned char *baseAddr)
 \r
 void primLineFEx(unsigned char *baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  int iMax;\r
  short cx0,cx1,cy0,cy1;int i;\r
 \r
@@ -4799,7 +4799,7 @@ void primLineFEx(unsigned char *baseAddr)
 \r
 void primLineF2(unsigned char *baseAddr)\r
 {\r
- unsigned long *gpuData = ((unsigned long *) baseAddr);\r
+ unsigned int *gpuData = ((unsigned int *) baseAddr);\r
  short *sgpuData = ((short *) baseAddr);\r
 \r
  lx0 = sgpuData[2];\r
index dc49767..c533ace 100644 (file)
@@ -39,8 +39,8 @@ extern EGLSurface surface;
 extern EGLDisplay display;\r
 #endif\r
 \r
-void UploadScreen (long Position);\r
-void PrepareFullScreenUpload (long Position);\r
+void UploadScreen (int Position);\r
+void PrepareFullScreenUpload (int Position);\r
 BOOL CheckAgainstScreen(short imageX0,short imageY0,short imageX1,short imageY1);\r
 BOOL CheckAgainstFrontScreen(short imageX0,short imageY0,short imageX1,short imageY1);\r
 BOOL FastCheckAgainstScreen(short imageX0,short imageY0,short imageX1,short imageY1);\r
index 2f96482..5136682 100644 (file)
@@ -88,12 +88,12 @@ GLuint        gTexMovieName=0;
 GLuint        gTexBlurName=0;\r
 GLuint        gTexFrameName=0;\r
 int           iTexGarbageCollection=1;\r
-unsigned long dwTexPageComp=0;\r
+unsigned int  dwTexPageComp=0;\r
 int           iVRamSize=0;\r
 int           iClampType=GL_CLAMP_TO_EDGE;\r
 int iFilter = GL_LINEAR;\r
 void               (*LoadSubTexFn) (int,int,short,short);\r
-unsigned long      (*PalTexturedColourFn)  (unsigned long);\r
+unsigned int       (*PalTexturedColourFn)  (unsigned int);\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
 // defines\r
@@ -127,7 +127,7 @@ unsigned long      (*PalTexturedColourFn)  (unsigned long);
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-unsigned char * CheckTextureInSubSCache(long TextureMode,unsigned long GivenClutId,unsigned short * pCache);\r
+unsigned char * CheckTextureInSubSCache(int TextureMode,unsigned int GivenClutId,unsigned short * pCache);\r
 void            LoadSubTexturePageSort(int pageid, int mode, short cx, short cy);\r
 void            LoadPackedSubTexturePageSort(int pageid, int mode, short cx, short cy);\r
 void            DefineSubTextureSort(void);\r
@@ -136,7 +136,7 @@ void            DefineSubTextureSort(void);
 // some globals\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-long  GlobalTexturePage;\r
+int  GlobalTexturePage;\r
 GLint XTexS;\r
 GLint YTexS;\r
 GLint DXTexS;\r
@@ -147,7 +147,7 @@ BOOL  bUse15bitMdec=FALSE;
 int   iFrameTexType=0;\r
 int   iFrameReadType=0;\r
 \r
-unsigned long  (*TCF[2]) (unsigned long);\r
+unsigned int  (*TCF[2]) (unsigned int);\r
 unsigned short (*PTCF[2]) (unsigned short);\r
 \r
 ////////////////////////////////////////////////////////////////////////\r
@@ -158,7 +158,7 @@ unsigned short (*PTCF[2]) (unsigned short);
 \r
 typedef struct textureWndCacheEntryTag\r
 {\r
- unsigned long  ClutID;\r
+ unsigned int  ClutID;\r
  short          pageid;\r
  short          textureMode;\r
  short          Opaque;\r
@@ -171,7 +171,7 @@ typedef struct textureWndCacheEntryTag
 \r
 typedef struct textureSubCacheEntryTagS \r
 {\r
- unsigned long   ClutID;\r
+ unsigned int    ClutID;\r
  EXLong          pos;\r
  unsigned char   posTX;\r
  unsigned char   posTY;\r
@@ -200,7 +200,7 @@ int                      iTexWndLimit=MAXWNDTEXCACHE/2;
 \r
 GLubyte *                texturepart=NULL;\r
 GLubyte *                texturebuffer=NULL;\r
-unsigned long            g_x1,g_y1,g_x2,g_y2;\r
+unsigned int             g_x1,g_y1,g_x2,g_y2;\r
 unsigned char            ubOpaqueDraw=0;\r
 \r
 unsigned short MAXTPAGES     = 32;\r
@@ -213,7 +213,7 @@ unsigned short MAXSORTTEX    = 196;
 // porting... and honestly: nowadays the speed gain would be pointless \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-unsigned long XP8RGBA(unsigned long BGR)\r
+unsigned int XP8RGBA(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x50000000;\r
  if(DrawSemiTrans && !(BGR&0x8000)) \r
@@ -221,7 +221,7 @@ unsigned long XP8RGBA(unsigned long BGR)
  return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long XP8RGBAEx(unsigned long BGR)\r
+unsigned int XP8RGBAEx(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x03000000;\r
  if(DrawSemiTrans && !(BGR&0x8000)) \r
@@ -229,9 +229,9 @@ unsigned long XP8RGBAEx(unsigned long BGR)
  return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long CP8RGBA(unsigned long BGR)\r
+unsigned int CP8RGBA(unsigned int BGR)\r
 {\r
- unsigned long l;\r
+ unsigned int l;\r
  if(!(BGR&0xffff)) return 0x50000000;\r
  if(DrawSemiTrans && !(BGR&0x8000)) \r
   {ubOpaqueDraw=1;return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff);}\r
@@ -240,9 +240,9 @@ unsigned long CP8RGBA(unsigned long BGR)
  return l;\r
 }\r
 \r
-unsigned long CP8RGBAEx(unsigned long BGR)\r
+unsigned int CP8RGBAEx(unsigned int BGR)\r
 {\r
- unsigned long l;\r
+ unsigned int l;\r
  if(!(BGR&0xffff)) return 0x03000000;\r
  if(DrawSemiTrans && !(BGR&0x8000)) \r
   {ubOpaqueDraw=1;return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff);}\r
@@ -251,33 +251,33 @@ unsigned long CP8RGBAEx(unsigned long BGR)
  return l;\r
 }\r
 \r
-unsigned long XP8RGBA_0(unsigned long BGR)\r
+unsigned int XP8RGBA_0(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x50000000;\r
  return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long XP8RGBAEx_0(unsigned long BGR)\r
+unsigned int XP8RGBAEx_0(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x03000000;\r
  return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long XP8BGRA_0(unsigned long BGR)\r
+unsigned int XP8BGRA_0(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x50000000;\r
  return ((((BGR>>7)&0xf8)|((BGR<<6)&0xf800)|((BGR<<19)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long XP8BGRAEx_0(unsigned long BGR)\r
+unsigned int XP8BGRAEx_0(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x03000000;\r
  return ((((BGR>>7)&0xf8)|((BGR<<6)&0xf800)|((BGR<<19)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long CP8RGBA_0(unsigned long BGR)\r
+unsigned int CP8RGBA_0(unsigned int BGR)\r
 {\r
- unsigned long l;\r
+ unsigned int l;\r
 \r
  if(!(BGR&0xffff)) return 0x50000000;\r
  l=((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff)|0xff000000;\r
@@ -285,9 +285,9 @@ unsigned long CP8RGBA_0(unsigned long BGR)
  return l;\r
 }\r
 \r
-unsigned long CP8RGBAEx_0(unsigned long BGR)\r
+unsigned int CP8RGBAEx_0(unsigned int BGR)\r
 {\r
- unsigned long l;\r
+ unsigned int l;\r
 \r
  if(!(BGR&0xffff)) return 0x03000000;\r
  l=((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff)|0xff000000;\r
@@ -295,9 +295,9 @@ unsigned long CP8RGBAEx_0(unsigned long BGR)
  return l;\r
 }\r
 \r
-unsigned long CP8BGRA_0(unsigned long BGR)\r
+unsigned int CP8BGRA_0(unsigned int BGR)\r
 {\r
- unsigned long l;\r
+ unsigned int l;\r
 \r
  if(!(BGR&0xffff)) return 0x50000000;\r
  l=((((BGR>>7)&0xf8)|((BGR<<6)&0xf800)|((BGR<<19)&0xf80000))&0xffffff)|0xff000000;\r
@@ -305,9 +305,9 @@ unsigned long CP8BGRA_0(unsigned long BGR)
  return l;\r
 }\r
 \r
-unsigned long CP8BGRAEx_0(unsigned long BGR)\r
+unsigned int CP8BGRAEx_0(unsigned int BGR)\r
 {\r
- unsigned long l;\r
+ unsigned int l;\r
 \r
  if(!(BGR&0xffff)) return 0x03000000;\r
  l=((((BGR>>7)&0xf8)|((BGR<<6)&0xf800)|((BGR<<19)&0xf80000))&0xffffff)|0xff000000;\r
@@ -315,41 +315,41 @@ unsigned long CP8BGRAEx_0(unsigned long BGR)
  return l;\r
 }\r
 \r
-unsigned long XP8RGBA_1(unsigned long BGR)\r
+unsigned int XP8RGBA_1(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x50000000;\r
  if(!(BGR&0x8000)) {ubOpaqueDraw=1;return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff);}\r
  return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long XP8RGBAEx_1(unsigned long BGR)\r
+unsigned int XP8RGBAEx_1(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x03000000;\r
  if(!(BGR&0x8000)) {ubOpaqueDraw=1;return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff);}\r
  return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long XP8BGRA_1(unsigned long BGR)\r
+unsigned int XP8BGRA_1(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x50000000;\r
  if(!(BGR&0x8000)) {ubOpaqueDraw=1;return ((((BGR>>7)&0xf8)|((BGR<<6)&0xf800)|((BGR<<19)&0xf80000))&0xffffff);}\r
  return ((((BGR>>7)&0xf8)|((BGR<<6)&0xf800)|((BGR<<19)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long XP8BGRAEx_1(unsigned long BGR)\r
+unsigned int XP8BGRAEx_1(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0x03000000;\r
  if(!(BGR&0x8000)) {ubOpaqueDraw=1;return ((((BGR>>7)&0xf8)|((BGR<<6)&0xf800)|((BGR<<19)&0xf80000))&0xffffff);}\r
  return ((((BGR>>7)&0xf8)|((BGR<<6)&0xf800)|((BGR<<19)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long P8RGBA(unsigned long BGR)\r
+unsigned int P8RGBA(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0;\r
  return ((((BGR<<3)&0xf8)|((BGR<<6)&0xf800)|((BGR<<9)&0xf80000))&0xffffff)|0xff000000;\r
 }\r
 \r
-unsigned long P8BGRA(unsigned long BGR)\r
+unsigned int P8BGRA(unsigned int BGR)\r
 {\r
  if(!(BGR&0xffff)) return 0;\r
  return ((((BGR>>7)&0xf8)|((BGR<<6)&0xf800)|((BGR<<19)&0xf80000))&0xffffff)|0xff000000;\r
@@ -680,7 +680,7 @@ void ResetTextureArea(BOOL bDelTex)
 // Invalidate tex windows\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-void InvalidateWndTextureArea(long X,long Y,long W, long H)\r
+void InvalidateWndTextureArea(int X,int Y,int W, int H)\r
 {\r
  int i,px1,px2,py1,py2,iYM=1;\r
  textureWndCacheEntry * tsw=wcWndtexStore;\r
@@ -771,11 +771,11 @@ void MarkFree(textureSubCacheEntryS * tsx)
   }\r
 }\r
 \r
-void InvalidateSubSTextureArea(long X,long Y,long W, long H)\r
+void InvalidateSubSTextureArea(int X,int Y,int W, int H)\r
 {\r
  int i,j,k,iMax,px,py,px1,px2,py1,py2,iYM=1;\r
  EXLong npos;textureSubCacheEntryS * tsb;\r
long x1,x2,y1,y2,xa,sw;\r
int x1,x2,y1,y2,xa,sw;\r
 \r
  W+=X-1;      \r
  H+=Y-1;\r
@@ -875,7 +875,7 @@ void InvalidateTextureAreaEx(void)
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-void InvalidateTextureArea(long X,long Y,long W, long H)\r
+void InvalidateTextureArea(int X,int Y,int W, int H)\r
 {\r
  if(W==0 && H==0) return;\r
 \r
@@ -920,12 +920,12 @@ void DefineTextureWnd(void)
 \r
 void LoadStretchPackedWndTexturePage(int pageid, int mode, short cx, short cy)\r
 {\r
- unsigned long start,row,column,j,sxh,sxm,ldx,ldy,ldxo;\r
+ unsigned int start,row,column,j,sxh,sxm,ldx,ldy,ldxo;\r
  unsigned int   palstart;\r
  unsigned short *px,*pa,*ta;\r
  unsigned char  *cSRCPtr,*cOSRCPtr;\r
  unsigned short *wSRCPtr,*wOSRCPtr;\r
- unsigned long  LineOffset;unsigned short s;\r
+ unsigned int  LineOffset;unsigned short s;\r
  int pmult=pageid/16;\r
  unsigned short (*LPTCOL)(unsigned short);\r
 \r
@@ -1112,22 +1112,22 @@ void LoadStretchPackedWndTexturePage(int pageid, int mode, short cx, short cy)
 \r
 void LoadStretchWndTexturePage(int pageid, int mode, short cx, short cy)\r
 {\r
- unsigned long start,row,column,j,sxh,sxm,ldx,ldy,ldxo,s;\r
+ unsigned int start,row,column,j,sxh,sxm,ldx,ldy,ldxo,s;\r
  unsigned int   palstart;\r
- unsigned long  *px,*pa,*ta;\r
+ unsigned int  *px,*pa,*ta;\r
  unsigned char  *cSRCPtr,*cOSRCPtr;\r
  unsigned short *wSRCPtr,*wOSRCPtr;\r
- unsigned long  LineOffset;\r
+ unsigned int  LineOffset;\r
  int pmult=pageid/16;\r
- unsigned long (*LTCOL)(unsigned long);\r
+ unsigned int (*LTCOL)(unsigned int);\r
  \r
  LTCOL=TCF[DrawSemiTrans];\r
 \r
  ldxo=TWin.Position.x1-TWin.OPosition.x1;\r
  ldy =TWin.Position.y1-TWin.OPosition.y1;\r
 \r
- pa=px=(unsigned long *)ubPaletteBuffer;\r
- ta=(unsigned long *)texturepart;\r
+ pa=px=(unsigned int *)ubPaletteBuffer;\r
+ ta=(unsigned int *)texturepart;\r
  palstart=cx+(cy*1024);\r
 \r
  ubOpaqueDraw=0;\r
@@ -1323,12 +1323,12 @@ void LoadStretchWndTexturePage(int pageid, int mode, short cx, short cy)
 \r
 void LoadPackedWndTexturePage(int pageid, int mode, short cx, short cy)\r
 {\r
- unsigned long start,row,column,j,sxh,sxm;\r
+ unsigned int start,row,column,j,sxh,sxm;\r
  unsigned int   palstart;\r
  unsigned short *px,*pa,*ta;\r
  unsigned char  *cSRCPtr;\r
  unsigned short *wSRCPtr;\r
- unsigned long  LineOffset;\r
+ unsigned int  LineOffset;\r
  int pmult=pageid/16;\r
  unsigned short (*LPTCOL)(unsigned short);\r
 \r
@@ -1465,19 +1465,19 @@ void LoadPackedWndTexturePage(int pageid, int mode, short cx, short cy)
 \r
 void LoadWndTexturePage(int pageid, int mode, short cx, short cy)\r
 {\r
- unsigned long start,row,column,j,sxh,sxm;\r
+ unsigned int start,row,column,j,sxh,sxm;\r
  unsigned int   palstart;\r
- unsigned long  *px,*pa,*ta;\r
+ unsigned int  *px,*pa,*ta;\r
  unsigned char  *cSRCPtr;\r
  unsigned short *wSRCPtr;\r
- unsigned long  LineOffset;\r
+ unsigned int  LineOffset;\r
  int pmult=pageid/16;\r
- unsigned long (*LTCOL)(unsigned long);\r
+ unsigned int (*LTCOL)(unsigned int);\r
  \r
  LTCOL=TCF[DrawSemiTrans];\r
 \r
- pa=px=(unsigned long *)ubPaletteBuffer;\r
- ta=(unsigned long *)texturepart;\r
+ pa=px=(unsigned int *)ubPaletteBuffer;\r
+ ta=(unsigned int *)texturepart;\r
  palstart=cx+(cy*1024);\r
 \r
  ubOpaqueDraw=0;\r
@@ -1627,7 +1627,7 @@ void UploadTexWndPal(int mode,short cx,short cy)
 {\r
  unsigned int i,iSize;\r
  unsigned short * wSrcPtr;\r
- unsigned long * ta=(unsigned long *)texturepart;\r
+ unsigned int * ta=(unsigned int *)texturepart;\r
 \r
  wSrcPtr=psxVuw+cx+(cy*1024);\r
  if(mode==0) i=4; else i=64;\r
@@ -1677,10 +1677,10 @@ void DefinePalTextureWnd(void)
 \r
 void LoadPalWndTexturePage(int pageid, int mode, short cx, short cy)\r
 {\r
- unsigned long start,row,column,j,sxh,sxm;\r
+ unsigned int start,row,column,j,sxh,sxm;\r
  unsigned char  *ta;\r
  unsigned char  *cSRCPtr;\r
- unsigned long  LineOffset;\r
+ unsigned int  LineOffset;\r
  int pmult=pageid/16;\r
 \r
  ta=(unsigned char *)texturepart;\r
@@ -1737,10 +1737,10 @@ void LoadPalWndTexturePage(int pageid, int mode, short cx, short cy)
 \r
 void LoadStretchPalWndTexturePage(int pageid, int mode, short cx, short cy)\r
 {\r
- unsigned long start,row,column,j,sxh,sxm,ldx,ldy,ldxo;\r
+ unsigned int start,row,column,j,sxh,sxm,ldx,ldy,ldxo;\r
  unsigned char  *ta,s;\r
  unsigned char  *cSRCPtr,*cOSRCPtr;\r
- unsigned long  LineOffset;\r
+ unsigned int  LineOffset;\r
  int pmult=pageid/16;\r
 \r
  ldxo=TWin.Position.x1-TWin.OPosition.x1;\r
@@ -1815,7 +1815,7 @@ void LoadStretchPalWndTexturePage(int pageid, int mode, short cx, short cy)
 // tex window: main selecting, cache handler included\r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-GLuint LoadTextureWnd(long pageid,long TextureMode,unsigned long GivenClutId)\r
+GLuint LoadTextureWnd(int pageid,int TextureMode,unsigned int GivenClutId)\r
 {\r
  textureWndCacheEntry * ts, * tsx=NULL;\r
  int i;short cx,cy;\r
@@ -1837,8 +1837,8 @@ GLuint LoadTextureWnd(long pageid,long TextureMode,unsigned long GivenClutId)
 \r
    // palette check sum\r
     {\r
-     unsigned long l=0,row;\r
-     unsigned long * lSRCPtr=(unsigned long *)(psxVuw+cx+(cy*1024));\r
+     unsigned int l=0,row;\r
+     unsigned int * lSRCPtr=(unsigned int *)(psxVuw+cx+(cy*1024));\r
      if(TextureMode==1) for(row=1;row<129;row++) l+=((*lSRCPtr++)-1)*row;\r
      else               for(row=1;row<9;row++)   l+=((*lSRCPtr++)-1)<<row;\r
      l=(l+HIWORD(l))&0x3fffL;\r
@@ -2011,10 +2011,10 @@ void DefineTextureMovie(void)
 \r
 unsigned char * LoadDirectMovieFast(void)\r
 {\r
long row,column;\r
int row,column;\r
  unsigned int startxy;\r
 \r
- unsigned long * ta=(unsigned long *)texturepart;\r
+ unsigned int * ta=(unsigned int *)texturepart;\r
 \r
  if(PSXDisplay.RGB24)\r
   {\r
@@ -2027,14 +2027,14 @@ unsigned char * LoadDirectMovieFast(void)
      pD=(unsigned char *)&psxVuw[startxy];\r
      for(row=xrMovieArea.x0;row<xrMovieArea.x1;row++)\r
       {\r
-       *ta++=*((unsigned long *)pD)|0xff000000;\r
+       *ta++=*((unsigned int *)pD)|0xff000000;\r
        pD+=3;\r
       }\r
     }\r
   }\r
  else\r
   {\r
-   unsigned long (*LTCOL)(unsigned long);\r
+   unsigned int (*LTCOL)(unsigned int);\r
 \r
    LTCOL=XP8RGBA_0;//TCF[0];\r
 \r
@@ -2055,14 +2055,14 @@ unsigned char * LoadDirectMovieFast(void)
 \r
 GLuint LoadTextureMovieFast(void)\r
 {\r
long row,column;\r
int row,column;\r
  unsigned int start,startxy;\r
 \r
 {\r
    if(PSXDisplay.RGB24)\r
     {\r
      unsigned char * pD;\r
-     unsigned long * ta=(unsigned long *)texturepart;\r
+     unsigned int * ta=(unsigned int *)texturepart;\r
 \r
      startxy=((1024)*xrMovieArea.y0)+xrMovieArea.x0;\r
 \r
@@ -2072,20 +2072,20 @@ GLuint LoadTextureMovieFast(void)
        pD=(unsigned char *)&psxVuw[startxy];\r
        for(row=xrMovieArea.x0;row<xrMovieArea.x1;row++)\r
         {\r
-         *ta++=*((unsigned long *)pD)|0xff000000;\r
+         *ta++=*((unsigned int *)pD)|0xff000000;\r
          pD+=3;\r
         }\r
       }\r
     }\r
    else\r
     {\r
-     unsigned long (*LTCOL)(unsigned long);\r
-     unsigned long *ta;\r
+     unsigned int (*LTCOL)(unsigned int);\r
+     unsigned int *ta;\r
 \r
      LTCOL=XP8RGBA_0;//TCF[0];\r
 \r
      ubOpaqueDraw=0;\r
-     ta=(unsigned long *)texturepart;\r
+     ta=(unsigned int *)texturepart;\r
 \r
      for(column=xrMovieArea.y0;column<xrMovieArea.y1;column++)\r
       {\r
@@ -2118,7 +2118,7 @@ GLuint LoadTextureMovie(void)
    if(PSXDisplay.RGB24)\r
     {\r
      unsigned char * pD;\r
-     unsigned long * ta=(unsigned long *)texturepart;\r
+     unsigned int * ta=(unsigned int *)texturepart;\r
 \r
      if(b_X)\r
       {\r
@@ -2128,7 +2128,7 @@ GLuint LoadTextureMovie(void)
          pD=(unsigned char *)&psxVuw[startxy];\r
          for(row=xrMovieArea.x0;row<xrMovieArea.x1;row++)\r
           {\r
-           *ta++=*((unsigned long *)pD)|0xff000000;\r
+           *ta++=*((unsigned int *)pD)|0xff000000;\r
            pD+=3;\r
           }\r
          *ta++=*(ta-1);\r
@@ -2149,7 +2149,7 @@ GLuint LoadTextureMovie(void)
          pD=(unsigned char *)&psxVuw[startxy];\r
          for(row=xrMovieArea.x0;row<xrMovieArea.x1;row++)\r
           {\r
-           *ta++=*((unsigned long *)pD)|0xff000000;\r
+           *ta++=*((unsigned int *)pD)|0xff000000;\r
            pD+=3;\r
           }\r
         }\r
@@ -2163,13 +2163,13 @@ GLuint LoadTextureMovie(void)
     }\r
    else\r
     {\r
-     unsigned long (*LTCOL)(unsigned long);\r
-     unsigned long *ta;\r
+     unsigned int (*LTCOL)(unsigned int);\r
+     unsigned int *ta;\r
 \r
      LTCOL=XP8RGBA_0;//TCF[0];\r
 \r
      ubOpaqueDraw=0;\r
-     ta=(unsigned long *)texturepart;\r
+     ta=(unsigned int *)texturepart;\r
 \r
      if(b_X)\r
       {\r
@@ -2220,7 +2220,7 @@ GLuint LoadTextureMovie(void)
 \r
 GLuint BlackFake15BitTexture(void)\r
 {\r
long pmult;short x1,x2,y1,y2;\r
int pmult;short x1,x2,y1,y2;\r
 \r
  if(PSXDisplay.InterlacedTest) return 0;\r
  \r
@@ -2254,7 +2254,7 @@ GLuint BlackFake15BitTexture(void)
      glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, iFilter); glError();\r
  \r
      {\r
-       unsigned long * ta=(unsigned long *)texturepart;\r
+       unsigned int * ta=(unsigned int *)texturepart;\r
        for(y1=0;y1<=4;y1++)\r
         for(x1=0;x1<=4;x1++)\r
          *ta++=0xff000000;\r
@@ -2284,7 +2284,7 @@ int iFTex=512;
 \r
 GLuint Fake15BitTexture(void)\r
 {\r
long pmult;short x1,x2,y1,y2;int iYAdjust;\r
int pmult;short x1,x2,y1,y2;int iYAdjust;\r
  float ScaleX,ScaleY;RECT rSrc;\r
 \r
  if(iFrameTexType==1) return BlackFake15BitTexture();\r
@@ -2466,28 +2466,28 @@ GLuint Fake15BitTexture(void)
 \r
 void LoadSubTexturePageSort(int pageid, int mode, short cx, short cy)\r
 {\r
- unsigned long  start,row,column,j,sxh,sxm;\r
+ unsigned int  start,row,column,j,sxh,sxm;\r
  unsigned int   palstart;\r
- unsigned long  *px,*pa,*ta;\r
+ unsigned int  *px,*pa,*ta;\r
  unsigned char  *cSRCPtr;\r
  unsigned short *wSRCPtr;\r
- unsigned long  LineOffset;\r
- unsigned long  x2a,xalign=0;\r
- unsigned long  x1=gl_ux[7];\r
- unsigned long  x2=gl_ux[6];\r
- unsigned long  y1=gl_ux[5];\r
- unsigned long  y2=gl_ux[4];\r
- unsigned long  dx=x2-x1+1;\r
- unsigned long  dy=y2-y1+1;\r
+ unsigned int  LineOffset;\r
+ unsigned int  x2a,xalign=0;\r
+ unsigned int  x1=gl_ux[7];\r
+ unsigned int  x2=gl_ux[6];\r
+ unsigned int  y1=gl_ux[5];\r
+ unsigned int  y2=gl_ux[4];\r
+ unsigned int  dx=x2-x1+1;\r
+ unsigned int  dy=y2-y1+1;\r
  int pmult=pageid/16;\r
- unsigned long (*LTCOL)(unsigned long);\r
+ unsigned int (*LTCOL)(unsigned int);\r
  unsigned int a,r,g,b,cnt,h;\r
- unsigned long scol[8];\r
+ unsigned int scol[8];\r
  \r
  LTCOL=TCF[DrawSemiTrans];\r
 \r
- pa=px=(unsigned long *)ubPaletteBuffer;\r
- ta=(unsigned long *)texturepart;\r
+ pa=px=(unsigned int *)ubPaletteBuffer;\r
+ ta=(unsigned int *)texturepart;\r
  palstart=cx+(cy<<10);\r
 \r
  ubOpaqueDraw=0;\r
@@ -2674,10 +2674,10 @@ void LoadSubTexturePageSort(int pageid, int mode, short cx, short cy)
 \r
  if(YTexS)\r
   {\r
-   ta=(unsigned long *)texturepart;\r
-   pa=(unsigned long *)texturepart+x2a;\r
+   ta=(unsigned int *)texturepart;\r
+   pa=(unsigned int *)texturepart+x2a;\r
    row=x2a;do {*ta++=*pa++;row--;} while(row);        \r
-   pa=(unsigned long *)texturepart+dy*x2a;\r
+   pa=(unsigned int *)texturepart+dy*x2a;\r
    ta=pa+x2a;\r
    row=x2a;do {*ta++=*pa++;row--;} while(row);\r
    YTexS--;\r
@@ -2686,10 +2686,10 @@ void LoadSubTexturePageSort(int pageid, int mode, short cx, short cy)
 \r
  if(XTexS)\r
   {\r
-   ta=(unsigned long *)texturepart;\r
+   ta=(unsigned int *)texturepart;\r
    pa=ta+1;\r
    row=dy;do {*ta=*pa;ta+=x2a;pa+=x2a;row--;} while(row);\r
-   pa=(unsigned long *)texturepart+dx;\r
+   pa=(unsigned int *)texturepart+dx;\r
    ta=pa+1;\r
    row=dy;do {*ta=*pa;ta+=x2a;pa+=x2a;row--;} while(row);\r
    XTexS--;\r
@@ -2703,7 +2703,7 @@ void LoadSubTexturePageSort(int pageid, int mode, short cx, short cy)
  if((iFilterType==4 || iFilterType==6) && ly0==ly1 && ly2==ly3 && lx0==lx3 && lx1==lx2)\r
   {DefineSubTextureSort();return;}\r
 \r
- ta=(unsigned long *)texturepart;\r
+ ta=(unsigned int *)texturepart;\r
  x1=dx-1;\r
  y1=dy-1;\r
 \r
@@ -2794,19 +2794,19 @@ void LoadSubTexturePageSort(int pageid, int mode, short cx, short cy)
 \r
 void LoadPackedSubTexturePageSort(int pageid, int mode, short cx, short cy)\r
 {\r
- unsigned long  start,row,column,j,sxh,sxm;\r
+ unsigned int  start,row,column,j,sxh,sxm;\r
  unsigned int   palstart;\r
  unsigned short *px,*pa,*ta;\r
  unsigned char  *cSRCPtr;\r
  unsigned short *wSRCPtr;\r
- unsigned long  LineOffset;\r
- unsigned long  x2a,xalign=0;\r
- unsigned long  x1=gl_ux[7];\r
- unsigned long  x2=gl_ux[6];\r
- unsigned long  y1=gl_ux[5];\r
- unsigned long  y2=gl_ux[4];\r
- unsigned long  dx=x2-x1+1;\r
- unsigned long  dy=y2-y1+1;\r
+ unsigned int  LineOffset;\r
+ unsigned int  x2a,xalign=0;\r
+ unsigned int  x1=gl_ux[7];\r
+ unsigned int  x2=gl_ux[6];\r
+ unsigned int  y1=gl_ux[5];\r
+ unsigned int  y2=gl_ux[4];\r
+ unsigned int  dx=x2-x1+1;\r
+ unsigned int  dy=y2-y1+1;\r
  int pmult=pageid/16;\r
  unsigned short (*LPTCOL)(unsigned short);\r
  unsigned int a,r,g,b,cnt,h;\r
@@ -3554,17 +3554,17 @@ void DoTexGarbageCollection(void)
 /////////////////////////////////////////////////////////////////////////////\r
 /////////////////////////////////////////////////////////////////////////////\r
 \r
-unsigned char * CheckTextureInSubSCache(long TextureMode,unsigned long GivenClutId,unsigned short * pCache)\r
+unsigned char * CheckTextureInSubSCache(int TextureMode,unsigned int GivenClutId,unsigned short * pCache)\r
 {\r
  textureSubCacheEntryS * tsx, * tsb, *tsg;//, *tse=NULL;\r
  int i,iMax;EXLong npos;\r
  unsigned char cx,cy;\r
- int iC,j,k;unsigned long rx,ry,mx,my;\r
+ int iC,j,k;unsigned int rx,ry,mx,my;\r
  EXLong * ul=0, * uls;\r
  EXLong rfree;\r
  unsigned char cXAdj,cYAdj;\r
 \r
- npos.l=*((unsigned long *)&gl_ux[4]);\r
+ npos.l=*((unsigned int *)&gl_ux[4]);\r
 \r
  //--------------------------------------------------------------//\r
  // find matching texturepart first... speed up...\r
@@ -3650,7 +3650,7 @@ unsigned char * CheckTextureInSubSCache(long TextureMode,unsigned long GivenClut
 \r
        if(tsx)                                         // 3. if one or more found, create a new rect with bigger size\r
         {\r
-         *((unsigned long *)&gl_ux[4])=npos.l=rfree.l;\r
+         *((unsigned int *)&gl_ux[4])=npos.l=rfree.l;\r
          rx=(int)rfree.c[2]-(int)rfree.c[3];\r
          ry=(int)rfree.c[0]-(int)rfree.c[1];\r
          DoTexGarbageCollection();\r
@@ -3864,7 +3864,7 @@ ENDLOOP:
 \r
 BOOL GetCompressTexturePlace(textureSubCacheEntryS * tsx)\r
 {\r
- int i,j,k,iMax,iC;unsigned long rx,ry,mx,my;\r
+ int i,j,k,iMax,iC;unsigned int rx,ry,mx,my;\r
  EXLong * ul=0, * uls, rfree;\r
  unsigned char cXAdj=1,cYAdj=1;\r
 \r
@@ -4002,11 +4002,11 @@ void CompressTextureSpace(void)
  textureSubCacheEntryS * tsx, * tsg, * tsb;\r
  int i,j,k,m,n,iMax;EXLong * ul, r,opos;\r
  short sOldDST=DrawSemiTrans,cx,cy;\r
long  lOGTP=GlobalTexturePage;\r
- unsigned long l,row;\r
- unsigned long * lSRCPtr;\r
int  lOGTP=GlobalTexturePage;\r
+ unsigned int l,row;\r
+ unsigned int * lSRCPtr;\r
 \r
- opos.l=*((unsigned long *)&gl_ux[4]);\r
+ opos.l=*((unsigned int *)&gl_ux[4]);\r
 \r
  // 1. mark all textures as free\r
  for(i=0;i<iSortTexCnt;i++)\r
@@ -4059,7 +4059,7 @@ void CompressTextureSpace(void)
              if(j!=2)\r
               {\r
                // palette check sum\r
-               l=0;lSRCPtr=(unsigned long *)(psxVuw+cx+(cy*1024));\r
+               l=0;lSRCPtr=(unsigned int *)(psxVuw+cx+(cy*1024));\r
                if(j==1) for(row=1;row<129;row++) l+=((*lSRCPtr++)-1)*row;\r
                else     for(row=1;row<9;row++)   l+=((*lSRCPtr++)-1)<<row;\r
                l=((l+HIWORD(l))&0x3fffL)<<16;\r
@@ -4086,7 +4086,7 @@ void CompressTextureSpace(void)
                usLRUTexPage=0;\r
                DrawSemiTrans=sOldDST;\r
                GlobalTexturePage=lOGTP;\r
-               *((unsigned long *)&gl_ux[4])=opos.l;\r
+               *((unsigned int *)&gl_ux[4])=opos.l;\r
                dwTexPageComp=0;\r
 \r
                return;\r
@@ -4094,7 +4094,7 @@ void CompressTextureSpace(void)
 \r
              if(tsx->ClutID&(1<<30)) DrawSemiTrans=1;\r
              else                    DrawSemiTrans=0;\r
-             *((unsigned long *)&gl_ux[4])=r.l;\r
+             *((unsigned int *)&gl_ux[4])=r.l;\r
    \r
              gTexName=uiStexturePage[tsx->cTexID];\r
              LoadSubTexFn(k,j,cx,cy);\r
@@ -4117,7 +4117,7 @@ void CompressTextureSpace(void)
 \r
  if(dwTexPageComp==0xffffffff) dwTexPageComp=0;\r
 \r
- *((unsigned long *)&gl_ux[4])=opos.l;\r
+ *((unsigned int *)&gl_ux[4])=opos.l;\r
  GlobalTexturePage=lOGTP;\r
  DrawSemiTrans=sOldDST;\r
 }\r
@@ -4132,7 +4132,7 @@ void CompressTextureSpace(void)
 /////////////////////////////////////////////////////////////////////////////\r
 /////////////////////////////////////////////////////////////////////////////\r
 \r
-GLuint SelectSubTextureS(long TextureMode, unsigned long GivenClutId) \r
+GLuint SelectSubTextureS(int TextureMode, unsigned int GivenClutId) \r
 {\r
  unsigned char * OPtr;unsigned short iCache;short cx,cy;\r
 \r
@@ -4174,9 +4174,9 @@ GLuint SelectSubTextureS(long TextureMode, unsigned long GivenClutId)
 \r
    // palette check sum.. removed MMX asm, this easy func works as well\r
     {\r
-     unsigned long l=0,row;\r
+     unsigned int l=0,row;\r
 \r
-     unsigned long * lSRCPtr=(unsigned long *)(psxVuw+cx+(cy*1024));\r
+     unsigned int * lSRCPtr=(unsigned int *)(psxVuw+cx+(cy*1024));\r
      if(TextureMode==1) for(row=1;row<129;row++) l+=((*lSRCPtr++)-1)*row;\r
      else               for(row=1;row<9;row++)   l+=((*lSRCPtr++)-1)<<row;\r
      l=(l+HIWORD(l))&0x3fffL;\r
index 680208c..6406849 100644 (file)
@@ -36,13 +36,13 @@ extern "C" {
 \r
 void           InitializeTextureStore();\r
 void           CleanupTextureStore();\r
-GLuint         LoadTextureWnd(long pageid,long TextureMode,unsigned long GivenClutId);\r
+GLuint         LoadTextureWnd(int pageid,int TextureMode,unsigned int GivenClutId);\r
 GLuint         LoadTextureMovie(void);\r
-void           InvalidateTextureArea(long imageX0,long imageY0,long imageX1,long imageY1);\r
+void           InvalidateTextureArea(int imageX0,int imageY0,int imageX1,int imageY1);\r
 void           InvalidateTextureAreaEx(void);\r
 void           LoadTexturePage(int pageid, int mode, short cx, short cy);\r
 void           ResetTextureArea(BOOL bDelTex);\r
-GLuint         SelectSubTextureS(long TextureMode, unsigned long GivenClutId);\r
+GLuint         SelectSubTextureS(int TextureMode, unsigned int GivenClutId);\r
 void           CheckTextureMemory(void);\r
 \r
 \r
@@ -50,24 +50,24 @@ void           LoadSubTexturePage(int pageid, int mode, short cx, short cy);
 void           LoadSubTexturePageSort(int pageid, int mode, short cx, short cy);\r
 void           LoadPackedSubTexturePage(int pageid, int mode, short cx, short cy);\r
 void           LoadPackedSubTexturePageSort(int pageid, int mode, short cx, short cy);\r
-unsigned long  XP8RGBA(unsigned long BGR);\r
-unsigned long  XP8RGBAEx(unsigned long BGR);\r
-unsigned long  XP8RGBA_0(unsigned long BGR);\r
-unsigned long  XP8RGBAEx_0(unsigned long BGR);\r
-unsigned long  XP8BGRA_0(unsigned long BGR);\r
-unsigned long  XP8BGRAEx_0(unsigned long BGR);\r
-unsigned long  XP8RGBA_1(unsigned long BGR);\r
-unsigned long  XP8RGBAEx_1(unsigned long BGR);\r
-unsigned long  XP8BGRA_1(unsigned long BGR);\r
-unsigned long  XP8BGRAEx_1(unsigned long BGR);\r
-unsigned long  P8RGBA(unsigned long BGR);\r
-unsigned long  P8BGRA(unsigned long BGR);\r
-unsigned long  CP8RGBA_0(unsigned long BGR);\r
-unsigned long  CP8RGBAEx_0(unsigned long BGR);\r
-unsigned long  CP8BGRA_0(unsigned long BGR);\r
-unsigned long  CP8BGRAEx_0(unsigned long BGR);\r
-unsigned long  CP8RGBA(unsigned long BGR);\r
-unsigned long  CP8RGBAEx(unsigned long BGR);\r
+unsigned int   XP8RGBA(unsigned int BGR);\r
+unsigned int   XP8RGBAEx(unsigned int BGR);\r
+unsigned int   XP8RGBA_0(unsigned int BGR);\r
+unsigned int   XP8RGBAEx_0(unsigned int BGR);\r
+unsigned int   XP8BGRA_0(unsigned int BGR);\r
+unsigned int   XP8BGRAEx_0(unsigned int BGR);\r
+unsigned int   XP8RGBA_1(unsigned int BGR);\r
+unsigned int   XP8RGBAEx_1(unsigned int BGR);\r
+unsigned int   XP8BGRA_1(unsigned int BGR);\r
+unsigned int   XP8BGRAEx_1(unsigned int BGR);\r
+unsigned int   P8RGBA(unsigned int BGR);\r
+unsigned int   P8BGRA(unsigned int BGR);\r
+unsigned int   CP8RGBA_0(unsigned int BGR);\r
+unsigned int   CP8RGBAEx_0(unsigned int BGR);\r
+unsigned int   CP8BGRA_0(unsigned int BGR);\r
+unsigned int   CP8BGRAEx_0(unsigned int BGR);\r
+unsigned int   CP8RGBA(unsigned int BGR);\r
+unsigned int   CP8RGBAEx(unsigned int BGR);\r
 unsigned short XP5RGBA (unsigned short BGR);\r
 unsigned short XP5RGBA_0 (unsigned short BGR);\r
 unsigned short XP5RGBA_1 (unsigned short BGR);\r
index 1f4a23d..69285da 100644 (file)
@@ -16,6 +16,7 @@
  *                                                                         *
  ***************************************************************************/
 
+#include "gpuStdafx.h"
 #include "gpuDraw.c"
 #include "gpuTexture.c"
 #include "gpuPrim.c"
@@ -26,10 +27,10 @@ short g_m1,g_m2,g_m3;
 short DrawSemiTrans;
 
 short          ly0,lx0,ly1,lx1,ly2,lx2,ly3,lx3;        // global psx vertex coords
-long           GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
-long           GlobalTextREST,GlobalTextABR,GlobalTextPAGE;
+int            GlobalTextAddrX,GlobalTextAddrY,GlobalTextTP;
+int            GlobalTextREST,GlobalTextABR,GlobalTextPAGE;
 
-unsigned long dwGPUVersion;
+unsigned int  dwGPUVersion;
 int           iGPUHeight=512;
 int           iGPUHeightMask=511;
 int           GlobalTextIL;
@@ -41,15 +42,15 @@ GLfloat         gl_z=0.0f;
 BOOL            bNeedInterlaceUpdate;
 BOOL            bNeedRGB24Update;
 BOOL            bChangeWinMode;
-long            lGPUstatusRet;
-unsigned long   ulGPUInfoVals[16];
+int             lGPUstatusRet;
+unsigned int    ulGPUInfoVals[16];
 VRAMLoad_t      VRAMWrite;
 VRAMLoad_t      VRAMRead;
 int             iDataWriteMode;
 int             iDataReadMode;
 
-long            lClearOnSwap;
-long            lClearOnSwapColor;
+int             lClearOnSwap;
+int             lClearOnSwapColor;
 BOOL            bSkipNextFrame;
 
 PSXDisplay_t    PSXDisplay;
@@ -195,13 +196,13 @@ void updateFrontDisplay(void)
 
 static void ChangeDispOffsetsX(void)                  // CENTER X
 {
-long lx,l;short sO;
+int lx,l;short sO;
 
 if(!PSXDisplay.Range.x1) return;                      // some range given?
 
 l=PSXDisplay.DisplayMode.x;
 
-l*=(long)PSXDisplay.Range.x1;                         // some funky calculation
+l*=(int)PSXDisplay.Range.x1;                         // some funky calculation
 l/=2560;lx=l;l&=0xfffffff8;
 
 if(l==PreviousPSXDisplay.Range.x1) return;            // some change?
@@ -312,7 +313,7 @@ if(bUp) updateDisplay();                              // yeah, real update (swap
 }
 
 #define GPUwriteStatus_ext GPUwriteStatus_ext // for gpulib to see this
-void GPUwriteStatus_ext(unsigned long gdata)
+void GPUwriteStatus_ext(unsigned int gdata)
 {
 switch((gdata>>24)&0xff)
  {
index 717d2fe..4637a71 100644 (file)
@@ -76,6 +76,7 @@ struct psx_gpu {
       uint32_t hcnt;
     } last_list;
     uint32_t last_vram_read_frame;
+    uint32_t w_out_old, h_out_old, status_vo_old;
   } state;
   struct {
     int32_t set:3; /* -1 auto, 0 off, 1-3 fixed */
index 1c98b55..a6a3f63 100644 (file)
@@ -27,8 +27,6 @@ int vout_finish(void)
 
 static void check_mode_change(int force)
 {
-  static uint32_t old_status;
-  static int old_h;
   int w = gpu.screen.hres;
   int h = gpu.screen.h;
   int w_out = w;
@@ -44,10 +42,12 @@ static void check_mode_change(int force)
   }
 
   // width|rgb24 change?
-  if (force || (gpu.status ^ old_status) & ((7<<16)|(1<<21)) || h != old_h)
+  if (force || (gpu.status ^ gpu.state.status_vo_old) & ((7<<16)|(1<<21))
+      || w_out != gpu.state.w_out_old || h_out != gpu.state.h_out_old)
   {
-    old_status = gpu.status;
-    old_h = h;
+    gpu.state.status_vo_old = gpu.status;
+    gpu.state.w_out_old = w_out;
+    gpu.state.h_out_old = h_out;
 
     cbs->pl_vout_set_mode(w_out, h_out, w, h,
           (gpu.status & PSX_GPU_STATUS_RGB24) ? 24 : 16);