blit320_640:
stmfd sp!, {r4-r8,lr}
mov r12, #40
+ bic r1, r1, #3
0:
ldmia r1!, {r2-r8,lr}
lhw_str r2, r3
blit320_512:
stmfd sp!, {r4-r8,lr}
mov r12, #32
+ bic r1, r1, #3
0:
ldmia r1!, {r2-r8,lr}
lsl r2, #16
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
* See the COPYING file in the top-level directory.
*/
+#include <stdint.h>
#include "cspace.h"
/*
|| (defined(__GNUC__) && __GNUC__ >= 5)) \
&& __BYTE_ORDER__ != __ORDER_BIG_ENDIAN__
-#include <stdint.h>
#include <assert.h>
#if defined(__ARM_NEON) || defined(__ARM_NEON__)
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;
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
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
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
bx lr
-@ vim:filetype=armasm
+@ vim:filetype=armasm:expandtab
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";
},
"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",
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;
#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);
#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__
//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:
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);
//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:
}
}
- 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;
}
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;
}
}
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()
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() {}
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) {}
/* 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 {
#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)
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);
}
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.
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);
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);
}
}
}
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];
// 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 */
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)
{
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) {
// 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);
}
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++) {
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
}
// 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;
-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);
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;
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:
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) {
// 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;
}
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));
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];
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;
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;
}
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;
- }
- }
}
}
}
int psxMemInit();
void psxMemReset();
+void psxMemOnIsolate(int enable);
void psxMemShutdown();
u8 psxMemRead8 (u32 mem);
enum {
R3000ACPU_NOTIFY_CACHE_ISOLATED = 0,
R3000ACPU_NOTIFY_CACHE_UNISOLATED = 1,
- R3000ACPU_NOTIFY_DMA3_EXE_LOAD = 2
};
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;
#define _IN_DMA\r
\r
#include "externals.h"\r
+#include "registers.h"\r
\r
////////////////////////////////////////////////////////////////////////\r
// READ DMA (one value)\r
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
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
{\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
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
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
\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
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
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
* *
***************************************************************************/
-#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"
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();
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
////////////////////////////////////////////////////////////////////////
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;
}
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);
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];
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;
s_chan->ADSRX.State = ADSR_RELEASE;
s_chan->ADSRX.EnvelopeVol = 0;
}
+ s_chan->bNewPitch = 0;
}
work->rvb_addr = 0;
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;
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);
}
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
do_irq();
}
}
+ check_irq_io(spu.spuAddr);
if (unlikely(spu.rvb->dirty))
REVERBPrep();
}
else {
queue_channel_work(ns_to, silentch);
+ //sync_worker_thread(1); // uncomment for debug
}
// advance "stopped" channels that can cause irqs
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
\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
#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
#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
\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
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
COLTAG\r
{\r
unsigned char col[4];\r
- unsigned long lcol;\r
+ unsigned int lcol;\r
} c;\r
\r
} OGLVertex;\r
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
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
\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
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
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
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
\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
\r
#ifndef _IN_KEY\r
\r
-//extern unsigned long ulKeybits;\r
+//extern unsigned int ulKeybits;\r
\r
#endif\r
\r
\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
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
////////////////////////////////////////////////////////////////////////\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
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
\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
\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
\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
// 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
\r
////////////////////////////////////////////////////////////////////////\r
\r
-void PrepareFullScreenUpload (long Position)\r
+void PrepareFullScreenUpload (int Position)\r
{\r
if (Position==-1) // rgb24\r
{\r
\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
\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
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
\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
\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
\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
\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
\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
\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
\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
\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
{\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
{\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
}\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
\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
\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
\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
\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
\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
\r
void DrawMultiFilterSprite(void)\r
{\r
- long lABR,lDST;\r
+ int lABR,lDST;\r
\r
if(bUseMultiPass || DrawSemiTrans || ubOpaqueDraw) \r
{\r
\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
\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
\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
\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
\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
\r
if(iFF9Fix==2)\r
{\r
- long labr=GlobalTextABR;\r
+ int labr=GlobalTextABR;\r
GlobalTextABR=1;\r
primPolyG4(pFF9G4Cache);\r
GlobalTextABR=labr;\r
\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
// 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
\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
\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
\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
\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
\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
\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
\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
\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
\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
\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
\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
\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
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
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
\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
// some globals\r
////////////////////////////////////////////////////////////////////////\r
\r
-long GlobalTexturePage;\r
+int GlobalTexturePage;\r
GLint XTexS;\r
GLint YTexS;\r
GLint DXTexS;\r
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
\r
typedef struct textureWndCacheEntryTag\r
{\r
- unsigned long ClutID;\r
+ unsigned int ClutID;\r
short pageid;\r
short textureMode;\r
short Opaque;\r
\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
\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
// 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
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
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
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
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
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
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
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
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
// 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
}\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
\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
\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
\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
\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
\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
{\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
\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
\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
// 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
\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
\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
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
\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
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
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
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
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
if(b_X)\r
{\r
\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
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
\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
\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
\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
\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
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
\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
/////////////////////////////////////////////////////////////////////////////\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
\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
\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
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
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
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
\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
\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
/////////////////////////////////////////////////////////////////////////////\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
\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
\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
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
* *
***************************************************************************/
+#include "gpuStdafx.h"
#include "gpuDraw.c"
#include "gpuTexture.c"
#include "gpuPrim.c"
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;
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;
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?
}
#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)
{
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 */
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;
}
// 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);