From e8bad8c3ca33d6dfa672f2e570eddc3ab4b3a7e6 Mon Sep 17 00:00:00 2001 From: Toad King Date: Thu, 14 Jun 2012 03:23:47 -0400 Subject: initial libretro changes --- src/dma.cpp | 2 +- src/memmap.h | 7 ++-- src/mode7.cpp | 89 +++++++++++++++++++++++++++++++++++++++++++-- src/mode7_t.h | 18 ++++++---- src/mode7new.cpp | 75 +++++++++++++++++++++++++++++++++++--- src/mode7prio.cpp | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- src/mode7prio_t.h | 19 ++++++---- src/port.h | 10 +++--- src/rops.h | 61 +++++++++++++++---------------- src/snes9x.h | 10 +++++- src/spc700.cpp | 2 +- src/srtc.h | 2 +- src/tile16_t.h | 23 ++++++------ src/tile16f_t.h | 17 ++++----- 14 files changed, 359 insertions(+), 82 deletions(-) (limited to 'src') diff --git a/src/dma.cpp b/src/dma.cpp index bf102ed..7a6af0f 100644 --- a/src/dma.cpp +++ b/src/dma.cpp @@ -127,7 +127,7 @@ void S9xDoDMA (uint8 Channel) } else { - #if defined (__GP2X__) || defined (__GIZ__) || defined (__WIZ__) + #if 1 void *ptr = bsearch (&address, Memory.SDD1Index, Memory.SDD1Entries, 12, S9xCompareSDD1IndexEntries); if (ptr) diff --git a/src/memmap.h b/src/memmap.h index ca234ea..d146522 100644 --- a/src/memmap.h +++ b/src/memmap.h @@ -46,8 +46,11 @@ #ifdef FAST_LSB_WORD_ACCESS #define READ_WORD(s) (*(uint16 *) (s)) #define READ_DWORD(s) (*(uint32 *) (s)) -#define WRITE_WORD(s, d) (*(uint16 *) (s) = (d) -#define WRITE_DWORD(s, d) (*(uint32 *) (s) = (d) +#define WRITE_WORD(s, d) *(uint16 *) (s) = (d) +#define WRITE_DWORD(s, d) *(uint32 *) (s) = (d) +#define READ_3WORD(s) ((*(uint32 *) (s)) & 0x00FFFFFF) +#define WRITE_3WORD(s, d) *(uint16 *) (s) = (uint16) (d), \ + *((uint8 *) (s) + 2) = (uint8) ((d) >> 16) #else #define READ_WORD(s) ( *(uint8 *) (s) |\ (*((uint8 *) (s) + 1) << 8)) diff --git a/src/mode7.cpp b/src/mode7.cpp index 88b4d89..db65ab9 100644 --- a/src/mode7.cpp +++ b/src/mode7.cpp @@ -132,6 +132,8 @@ void DrawBGMode7Background16R3 (uint8 *Screen, int bg, int depth) xx3 = (startx + HOffset); + if (dir == 1) + { asm volatile ( "1: \n" " ldrb r0, [%[d]] \n" @@ -158,7 +160,7 @@ void DrawBGMode7Background16R3 (uint8 *Screen, int bg, int depth) " add %[AA], %[AA], r1 \n" " movs r0, r0, lsl #2 \n" " ldrne r1, [%[colors], r0] \n" - " add %[xx3], %[xx3], %[dir] \n" + " add %[xx3], %[xx3], #1 \n" " strneb %[depth], [%[d]] \n" " ldr r0, %[dcc] \n" " strneh r1, [%[p]] \n" @@ -184,7 +186,7 @@ void DrawBGMode7Background16R3 (uint8 *Screen, int bg, int depth) "4: \n" " ldr r0, %[daa] \n" " ldr r1, %[dcc] \n" - " add %[xx3], %[xx3], %[dir] \n" + " add %[xx3], %[xx3], #1 \n" " add %[AA], %[AA], r0 \n" " add %[CC], %[CC], r1 \n" " add %[p], %[p], #2 \n" @@ -203,11 +205,91 @@ void DrawBGMode7Background16R3 (uint8 *Screen, int bg, int depth) [p] "r" (p), [d] "r" (d), [depth] "r" (depth), - [dir] "r" (dir), + //[dir] "r" (dir), [yy3] "r" (yy3), [xx3] "r" (xx3) : "r0", "r1", "r3", "cc" ); + } + else + { + asm volatile ( + "1: \n" + " ldrb r0, [%[d]] \n" + " mov r3, %[AA], asr #18 \n" + " cmp %[depth], r0 \n" + " bls 4f \n" + " orrs r3, r3, %[CC], asr #18 \n" + " bne 2f \n" + " \n" + " mov r3, %[CC], asr #11 \n" + " mov r1, %[AA], asr #11 \n" + " add r3, r1, r3, lsl #7 \n" + " mov r3, r3, lsl #1 \n" + " ldrb r3, [%[VRAM], r3] \n" + " \n" + " and r1, %[CC], #(7 << 8) \n" + " add r3, %[VRAM], r3, lsl #7 \n" + " and r0, %[AA], #(7 << 8) \n" + " add r3, r3, r1, asr #4 \n" + " add r3, r3, r0, asr #7 \n" + " \n" + " ldr r1, %[daa] \n" + " ldrb r0, [r3, #1] \n" + " add %[AA], %[AA], r1 \n" + " movs r0, r0, lsl #2 \n" + " ldrne r1, [%[colors], r0] \n" + " add %[xx3], %[xx3], #-1 \n" + " strneb %[depth], [%[d]] \n" + " ldr r0, %[dcc] \n" + " strneh r1, [%[p]] \n" + " \n" + " add %[CC], %[CC], r0 \n" + " add %[d], %[d], #1 \n" + " add %[p], %[p], #2 \n" + " subs %[x], %[x], #1 \n" + " bne 1b \n" + " b 3f \n" + "2: \n" + //" and r1, %[yy3], #7 \n" + " and r0, %[xx3], #7 \n" + //" mov r3, r1, lsl #4 \n" + " add r3, %[yy3], r0, lsl #1 \n" + " \n" + " add r3, %[VRAM], r3 \n" + " ldrb r0, [r3, #1] \n" + " movs r0, r0, lsl #2 \n" + " ldrne r1, [%[colors], r0] \n" + " strneb %[depth], [%[d]] \n" + " strneh r1, [%[p]] \n" + "4: \n" + " ldr r0, %[daa] \n" + " ldr r1, %[dcc] \n" + " add %[xx3], %[xx3], #-1 \n" + " add %[AA], %[AA], r0 \n" + " add %[CC], %[CC], r1 \n" + " add %[p], %[p], #2 \n" + " add %[d], %[d], #1 \n" + " subs %[x], %[x], #1 \n" + " bne 1b \n" + "3: \n" + : + : [x] "r" (Right - Left), + [AA] "r" (l->MatrixA * (startx + xx) + BB), + [CC] "r" (l->MatrixC * (startx + xx) + DD), + [daa] "m" (aa), + [dcc] "m" (cc), + [VRAM] "r" (Memory.VRAM), + [colors] "r" (GFX.ScreenColors), + [p] "r" (p), + [d] "r" (d), + [depth] "r" (depth), + //[dir] "r" (dir), + [yy3] "r" (yy3), + [xx3] "r" (xx3) + : "r0", "r1", "r3", "cc" + ); + } } } @@ -487,3 +569,4 @@ void DrawBGMode7Background16R0 (uint8 *Screen, int bg, int depth) } + diff --git a/src/mode7_t.h b/src/mode7_t.h index 0d066b5..5d67aa6 100644 --- a/src/mode7_t.h +++ b/src/mode7_t.h @@ -127,7 +127,8 @@ static void DrawBGMode7Background16R3 (uint8 *Screen, int bg, int depth) \ " cmp r3, #1 \n"\ " blo 11f \n"\ - " ldrneh r3, [%[p], %[delta]] \n"\ + " mov r3, #0x200000 \n"\ + " ldrneh r3, [%[p], r3] \n"\ " ldreq r3, %[fixedcolour] \n"\ \ ROP\ @@ -159,7 +160,8 @@ static void DrawBGMode7Background16R3 (uint8 *Screen, int bg, int depth) \ " cmp r3, #1 \n"\ " blo 12f \n"\ - " ldrneh r3, [%[p], %[delta]] \n"\ + " mov r3, #0x200000 \n"\ + " ldrneh r3, [%[p], r3] \n"\ " ldreq r3, %[fixedcolour] \n"\ \ ROP\ @@ -186,7 +188,6 @@ static void DrawBGMode7Background16R3 (uint8 *Screen, int bg, int depth) [colors] "r" (GFX.ScreenColors),\ [depth] "r" (depth),\ [yy3] "m" (yy3), \ - [delta] "r" (GFX.Delta << 1),\ [fixedcolour] "m" (fixedColour)\ : "r0", "r1", "r3", "cc"\ ); @@ -317,7 +318,8 @@ static void DrawBGMode7Background16R1R2 (uint8 *Screen, int bg, int depth) " cmp r3, #1 \n" " blo 11f \n" - " ldrneh r3, [%[p], %[delta]] \n" + " mov r3, #0x200000 \n" + " ldrneh r3, [%[p], r3] \n" " ldreq r3, %[fixedcolour] \n" ROP @@ -342,7 +344,7 @@ static void DrawBGMode7Background16R1R2 (uint8 *Screen, int bg, int depth) [colors] "r" (GFX.ScreenColors), [depth] "r" (depth), //[zdelta] "r" (GFX.DepthDelta), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "m" (fixedColour), [AndByX] "m" (AndByX), [AndByY] "m" (AndByY) @@ -463,7 +465,8 @@ static void DrawBGMode7Background16R0 (uint8 *Screen, int bg, int depth) " cmp r3, #1 \n" " blo 11f \n" - " ldrneh r3, [%[p], %[delta]] \n" + " mov r3, #0x200000 \n" + " ldrneh r3, [%[p], r3] \n" " ldreq r3, %[fixedcolour] \n" ROP @@ -487,7 +490,7 @@ static void DrawBGMode7Background16R0 (uint8 *Screen, int bg, int depth) [VRAM] "r" (Memory.VRAM), [colors] "r" (GFX.ScreenColors), //[zdelta] "r" (GFX.DepthDelta), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "m" (fixedColour), [depth] "r" (depth), [AndByY] "m" (AndByY) @@ -524,3 +527,4 @@ DEC_FMODE7(ROPNAME) return; } } + diff --git a/src/mode7new.cpp b/src/mode7new.cpp index 33ff453..b71e835 100644 --- a/src/mode7new.cpp +++ b/src/mode7new.cpp @@ -127,6 +127,8 @@ void DrawBGMode7Background16NewR3 (uint8 *Screen) //fprintf(f, "AA:%d, CC:%d, daa: %d, dcc: %d, MA: %d, MB: %d, MC: %d, MD: %d\n", AA, CC, aa, cc, l->MatrixA, l->MatrixB, l->MatrixC, l->MatrixD); + if (dir == 1) + { asm volatile ( "1: \n" " mov r3, %[AA], asr #18 \n" @@ -149,7 +151,7 @@ void DrawBGMode7Background16NewR3 (uint8 *Screen) " add %[AA], %[AA], %[daa] \n" " movs r0, r0, lsl #2 \n" " ldrne r1, [%[colors], r0] \n" - " add %[xx3], %[xx3], %[dir] \n" + " add %[xx3], %[xx3], #1 \n" " strneh r1, [%[p]] \n" " \n" " add %[CC], %[CC], %[dcc] \n" @@ -166,7 +168,7 @@ void DrawBGMode7Background16NewR3 (uint8 *Screen) " add %[AA], %[AA], %[daa] \n" " movs r0, r0, lsl #2 \n" " ldrne r1, [%[colors], r0] \n" - " add %[xx3], %[xx3], %[dir] \n" + " add %[xx3], %[xx3], #1 \n" " strneh r1, [%[p]] \n" " \n" " add %[CC], %[CC], %[dcc] \n" @@ -183,10 +185,74 @@ void DrawBGMode7Background16NewR3 (uint8 *Screen) [daa] "r" (aa), [dcc] "r" (cc), [VRAM] "r" (Memory.VRAM), - [colors] "r" (GFX.ScreenColors), - [dir] "r" (dir) + [colors] "r" (GFX.ScreenColors) + //[dir] "r" (dir) + : "r0", "r1", "r3", "cc" + ); + } + else + { + asm volatile ( + "1: \n" + " mov r3, %[AA], asr #18 \n" + " orrs r3, r3, %[CC], asr #18 \n" + " bne 2f \n" + " \n" + " mov r3, %[CC], asr #11 \n" + " mov r1, %[AA], asr #11 \n" + " add r3, r1, r3, lsl #7 \n" + " mov r3, r3, lsl #1 \n" + " ldrb r3, [%[VRAM], r3] \n" + " \n" + " and r1, %[CC], #(7 << 8) \n" + " add r3, %[VRAM], r3, lsl #7 \n" + " and r0, %[AA], #(7 << 8) \n" + " add r3, r3, r1, asr #4 \n" + " add r3, r3, r0, asr #7 \n" + " \n" + " ldrb r0, [r3, #1] \n" + " add %[AA], %[AA], %[daa] \n" + " movs r0, r0, lsl #2 \n" + " ldrne r1, [%[colors], r0] \n" + " add %[xx3], %[xx3], #-1 \n" + " strneh r1, [%[p]] \n" + " \n" + " add %[CC], %[CC], %[dcc] \n" + " add %[p], %[p], #2 \n" + " subs %[x], %[x], #1 \n" + " bne 1b \n" + " b 3f \n" + "2: \n" + " and r0, %[xx3], #7 \n" + " add r3, %[yy3], r0, lsl #1 \n" + " \n" + " add r3, %[VRAM], r3 \n" + " ldrb r0, [r3, #1] \n" + " add %[AA], %[AA], %[daa] \n" + " movs r0, r0, lsl #2 \n" + " ldrne r1, [%[colors], r0] \n" + " add %[xx3], %[xx3], #-1 \n" + " strneh r1, [%[p]] \n" + " \n" + " add %[CC], %[CC], %[dcc] \n" + " add %[p], %[p], #2 \n" + " subs %[x], %[x], #1 \n" + " bne 1b \n" + "3: \n" + : [xx3] "+r" (xx3), + [x] "+r" (width), + [p] "+r" (p), + [AA] "+r" (AA), + [CC] "+r" (CC) + : [yy3] "r" (yy3), + [daa] "r" (aa), + [dcc] "r" (cc), + [VRAM] "r" (Memory.VRAM), + [colors] "r" (GFX.ScreenColors) + //[dir] "r" (dir) : "r0", "r1", "r3", "cc" ); + } } } @@ -437,3 +503,4 @@ uint8 *z; } + diff --git a/src/mode7prio.cpp b/src/mode7prio.cpp index e4878fd..c149eb5 100644 --- a/src/mode7prio.cpp +++ b/src/mode7prio.cpp @@ -126,6 +126,9 @@ void DrawBGMode7Background16PrioR3 (uint8 *Screen, int bg) cc = l->MatrixC; dir = 1; } + + if (dir == 1) + { asm volatile ( "1: \n" " mov r3, %[AA], lsr #18 \n" @@ -160,7 +163,7 @@ void DrawBGMode7Background16PrioR3 (uint8 *Screen, int bg) " movs r0, r0, lsl #2 \n" " add %[AA], %[AA], r1 \n" " ldrne r1, [%[colors], r0] \n" - " add %[xx3], %[xx3], %[dir] \n" + " add %[xx3], %[xx3], #1 \n" " strneb %[depth], [%[d]] \n" " ldr r0, %[dcc] \n" " strneh r1, [%[p]] \n" @@ -194,7 +197,7 @@ void DrawBGMode7Background16PrioR3 (uint8 *Screen, int bg) "4: \n" " ldr r0, %[daa] \n" " ldr r1, %[dcc] \n" - " add %[xx3], %[xx3], %[dir] \n" + " add %[xx3], %[xx3], #1 \n" " add %[AA], %[AA], r0 \n" " add %[CC], %[CC], r1 \n" " add %[p], %[p], #2 \n" @@ -213,11 +216,107 @@ void DrawBGMode7Background16PrioR3 (uint8 *Screen, int bg) [p] "r" (p), [d] "r" (d), [depth] "r" (depth), - [dir] "r" (dir), + //[dir] "r" (dir), [yy3] "r" (yy + CentreY), [xx3] "r" (startx + HOffset) : "r0", "r1", "r3", "cc" ); + } + else + { + asm volatile ( + "1: \n" + " mov r3, %[AA], lsr #18 \n" + " orrs r3, r3, %[CC], lsr #18 \n" + " bne 2f \n" + " \n" + " mov r3, %[CC], lsr #11 \n" + " mov r1, %[AA], lsr #11 \n" + " add r3, r1, r3, lsl #7 \n" + " mov r3, r3, lsl #1 \n" + " ldrb r3, [%[VRAM], r3] \n" + " \n" + " mov r1, %[CC], lsr #8 \n" + " mov r0, %[AA], lsr #8 \n" + " \n" + " add r3, %[VRAM], r3, lsl #7 \n" + " \n" + " and r1, r1, #7 \n" + " and r0, r0, #7 \n" + " add r3, r3, r1, lsl #4 \n" + " add r3, r3, r0, lsl #1 \n" + " \n" + " ldrb r0, [r3, #1] \n" + " ldrb r3, [%[d]] \n" + " tst r0, #0x80 \n" + " andeq r1, %[depth], #0xff \n" + " mov r1, %[depth], lsr #8 \n" + " cmp r1, r3 \n" + " bls 4f \n" + + " ldr r1, %[daa] \n" + " movs r0, r0, lsl #2 \n" + " add %[AA], %[AA], r1 \n" + " ldrne r1, [%[colors], r0] \n" + " add %[xx3], %[xx3], #-1 \n" + " strneb %[depth], [%[d]] \n" + " ldr r0, %[dcc] \n" + " strneh r1, [%[p]] \n" + " \n" + " add %[CC], %[CC], r0 \n" + " add %[d], %[d], #1 \n" + " add %[p], %[p], #2 \n" + " subs %[x], %[x], #1 \n" + " bne 1b \n" + " b 3f \n" + "2: \n" + " and r1, %[yy3], #7 \n" + " and r0, %[xx3], #7 \n" + " mov r3, r1, lsl #4 \n" + " add r3, r3, r0, lsl #1 \n" + " \n" + " add r3, %[VRAM], r3 \n" + + " ldrb r0, [r3, #1] \n" + " ldrb r3, [%[d]] \n" + " tst r0, #0x80 \n" + " andeq r1, %[depth], #0xff \n" + " mov r1, %[depth], lsr #8 \n" + " cmp r1, r3 \n" + " bls 4f \n" + + " movs r0, r0, lsl #2 \n" + " ldrne r1, [%[colors], r0] \n" + " strneb %[depth], [%[d]] \n" + " strneh r1, [%[p]] \n" + "4: \n" + " ldr r0, %[daa] \n" + " ldr r1, %[dcc] \n" + " add %[xx3], %[xx3], #-1 \n" + " add %[AA], %[AA], r0 \n" + " add %[CC], %[CC], r1 \n" + " add %[p], %[p], #2 \n" + " add %[d], %[d], #1 \n" + " subs %[x], %[x], #1 \n" + " bne 1b \n" + "3: \n" + : + : [x] "r" (Right - Left), + [AA] "r" (l->MatrixA * (startx + xx) + BB), + [CC] "r" (l->MatrixC * (startx + xx) + DD), + [daa] "m" (aa), + [dcc] "m" (cc), + [VRAM] "r" (Memory.VRAM), + [colors] "r" (GFX.ScreenColors), + [p] "r" (p), + [d] "r" (d), + [depth] "r" (depth), + //[dir] "r" (dir), + [yy3] "r" (yy + CentreY), + [xx3] "r" (startx + HOffset) + : "r0", "r1", "r3", "cc" + ); + } } } @@ -501,3 +600,4 @@ void DrawBGMode7Background16PrioR0 (uint8 *Screen, int bg) } + diff --git a/src/mode7prio_t.h b/src/mode7prio_t.h index 24d0062..8f1e7e4 100644 --- a/src/mode7prio_t.h +++ b/src/mode7prio_t.h @@ -128,7 +128,8 @@ static void DrawBGMode7Background16R3 (uint8 *Screen, int bg) " cmp r3, #1 \n" " blo 11f \n" - " addne r0, %[delta], %[delta] \n" + " mov r3, #0x200000 \n" + " addne r0, r3, r3 \n" " ldreq r3, %[fixedcolour] \n" ROP @@ -170,7 +171,8 @@ static void DrawBGMode7Background16R3 (uint8 *Screen, int bg) " cmp r3, #1 \n" " blo 12f \n" - " ldrneh r3, [%[p], %[delta]] \n" + " mov r3, #0x200000 \n" + " ldrneh r3, [%[p], r3] \n" " ldreq r3, %[fixedcolour] \n" ROP @@ -201,7 +203,7 @@ static void DrawBGMode7Background16R3 (uint8 *Screen, int bg) [dir] "m" (dir), [yy3] "m" (yy3), //[zdelta] "r" (GFX.DepthDelta), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "m" (fixedColour), [xx3] "r" (xx3) : "r0", "r1", "r3", "cc" @@ -324,7 +326,8 @@ static void DrawBGMode7Background16R1R2 (uint8 *Screen, int bg) " cmp r3, #1 \n" " blo 11f \n" - " ldrneh r3, [%[p], %[delta]] \n" + " mov r3, #0x200000 \n" + " ldrneh r3, [%[p], r3] \n" " ldreq r3, %[fixedcolour] \n" ROP @@ -349,7 +352,7 @@ static void DrawBGMode7Background16R1R2 (uint8 *Screen, int bg) [d] "r" (d-1), [depth] "r" (depth), //[zdelta] "r" (GFX.DepthDelta), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "m" (fixedColour), [AndByX] "m" (AndByX), [AndByY] "m" (AndByY) @@ -469,7 +472,8 @@ static void DrawBGMode7Background16R0 (uint8 *Screen, int bg) " cmp r3, #1 \n" " blo 11f \n" - " ldrneh r3, [%[p], %[delta]] \n" + " mov r3, #0x200000 \n" + " ldrneh r3, [%[p], r3] \n" " ldreq r3, %[fixedcolour] \n" ROP @@ -495,7 +499,7 @@ static void DrawBGMode7Background16R0 (uint8 *Screen, int bg) [p] "r" (p), [d] "r" (d-1), //[zdelta] "r" (GFX.DepthDelta), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "m" (fixedColour), [depth] "r" (depth), [AndByY] "m" (AndByY) @@ -533,3 +537,4 @@ DEC_FMODE7(ROPNAME) } } + diff --git a/src/port.h b/src/port.h index 96a3ac1..de64f9e 100644 --- a/src/port.h +++ b/src/port.h @@ -57,7 +57,7 @@ I can't take it anymore, it's too convoluted. So I've commented out the entire ** _SNESPPC DEFINES */ -#ifdef __GIZ__ +#if 1 //Title #define TITLE "Snes9x" @@ -72,6 +72,7 @@ I can't take it anymore, it's too convoluted. So I've commented out the entire typedef unsigned char bool8; typedef unsigned char uint8; typedef unsigned short uint16; +typedef unsigned int bool32; typedef unsigned int uint32; typedef signed char int8; typedef short int16; @@ -105,8 +106,8 @@ typedef short int16_32; #define _MAX_DRIVE 1 #define _MAX_FNAME PATH_MAX #define _MAX_EXT PATH_MAX -#define PATH_MAX 1024 -#define _MAX_PATH (1024) +//#define PATH_MAX 1024 +#define _MAX_PATH PATH_MAX //True/False Defines #define TRUE 1 @@ -122,7 +123,7 @@ typedef short int16_32; #define LSB_FIRST #define STATIC static #define FASTCALL -#define PIXEL_FORMAT RGB565 +#define PIXEL_FORMAT RGB555 #define CHECK_SOUND() #define VOID void #define CPU_SHUTDOWN @@ -132,6 +133,7 @@ typedef short int16_32; #define ALIGN_BY_ONE __attribute__ ((aligned (1), packed)) #define LSB_FIRST #undef FAST_LSB_WORD_ACCESS +#define SUPER_FX #ifdef ASMCPU #define ASM_SPC700 #endif diff --git a/src/rops.h b/src/rops.h index e751a58..dc5409f 100644 --- a/src/rops.h +++ b/src/rops.h @@ -6,7 +6,7 @@ */ // ------------- -// RGB_565 +// RGB_555 // a.red = a.red - b.red // a.blue = a.blue - b.blue // a.green = a.green - b.green @@ -24,21 +24,21 @@ " biceq " #a ", " #a ", #0b01111100000000000 \n" */ #define ROP_SUB(a, b) \ - " bics " #b ", " #b ", #0b00000100000100000 \n"\ + " bics " #b ", " #b ", #0b00000010000100000 \n"\ " beq 999f \n"\ - " orr " #a ", " #a ", #0b00000100000100000 \n"\ + " orr " #a ", " #a ", #0b00000010000100000 \n"\ " orr " #a ", " #a ", #(1 << 31) \n"\ " subs " #a ", " #a ", " #b " \n"\ - " bicpl " #a ", " #a ", #0b01111100000000000 \n"\ + " bicpl " #a ", " #a ", #0b00111110000000000 \n"\ " tst " #a ", #0b00000000000100000 \n"\ " biceq " #a ", " #a ", #0b00000000000011111 \n"\ - " tst " #a ", #0b00000100000000000 \n"\ - " biceq " #a ", " #a ", #0b00000011111100000 \n"\ + " tst " #a ", #0b00000010000000000 \n"\ + " biceq " #a ", " #a ", #0b00000001111100000 \n"\ "999:\n" // ------------- -// RGB_565 +// RGB_555 // if ZF set do ROP_SUB, else: // a.red = (a.red - b.red) / 2 // a.blue = (a.blue - b.blue) / 2 @@ -64,60 +64,60 @@ #define ROP_SUB1_2(a, b) \ " movne " #a ", " #a ", lsr #1 \n"\ - " bicne " #a ", " #a ", #0b00000010000010000 \n"\ + " bicne " #a ", " #a ", #0b00000001000010000 \n"\ " movne " #b ", " #b ", lsr #1 \n"\ - " bicne " #b ", " #b ", #0b00000010000010000 \n"\ + " bicne " #b ", " #b ", #0b00000001000010000 \n"\ \ - " bics " #b ", " #b ", #0b00000100000100000 \n"\ + " bics " #b ", " #b ", #0b00000010000100000 \n"\ " beq 999f \n"\ - " orr " #a ", " #a ", #0b00000100000100000 \n"\ + " orr " #a ", " #a ", #0b00000010000100000 \n"\ " orr " #a ", " #a ", #(1 << 31) \n"\ " subs " #a ", " #a ", " #b " \n"\ - " bicpl " #a ", " #a ", #0b01111100000000000 \n"\ + " bicpl " #a ", " #a ", #0b00111110000000000 \n"\ " tst " #a ", #0b00000000000100000 \n"\ " biceq " #a ", " #a ", #0b00000000000011111 \n"\ - " tst " #a ", #0b00000100000000000 \n"\ - " biceq " #a ", " #a ", #0b00000011111100000 \n"\ + " tst " #a ", #0b00000010000000000 \n"\ + " biceq " #a ", " #a ", #0b00000001111100000 \n"\ "999:\n" // ------------- -// RGB_565 +// RGB_555 // a.red = a.red + b.red // a.blue = a.blue + b.blue // a.green = a.green + b.green #define ROP_ADD(a, b) \ - " bics " #b ", " #b ", #0b00000100000100000 \n"\ + " bics " #b ", " #b ", #0b00000010000100000 \n"\ " beq 999f \n"\ - " bic " #a ", " #a ", #0b00000100000100000 \n"\ + " bic " #a ", " #a ", #0b00000010000100000 \n"\ " add " #a ", " #a ", " #b " \n"\ " tst " #a ", #0b00000000000100000 \n"\ " orrne " #a ", " #a ", #0b00000000000011111 \n"\ - " tst " #a ", #0b00000100000000000 \n"\ - " orrne " #a ", " #a ", #0b00000011111100000 \n"\ - " tst " #a ", #0b10000000000000000 \n"\ - " orrne " #a ", " #a ", #0b01111100000000000 \n"\ + " tst " #a ", #0b00000010000000000 \n"\ + " orrne " #a ", " #a ", #0b00000001111100000 \n"\ + " tst " #a ", #0b01000000000000000 \n"\ + " orrne " #a ", " #a ", #0b00111110000000000 \n"\ "999:\n" // ------------- -// RGB_565 +// RGB_555 // if ZF set do ROP_ADD, else: // a.red = (a.red + b.red) / 2 // a.blue = (a.blue + b.blue) / 2 // a.green = (a.green + b.green) / 2 #define ROP_ADD1_2(a, b) \ - " bic " #a ", " #a ", #0b00000100000100000 \n"\ - " bicne " #a ", " #a ", #0b00001000001000000 \n"\ - " bic " #b ", " #b ", #0b00000100000100000 \n"\ - " bicne " #b ", " #b ", #0b00001000001000000 \n"\ + " bic " #a ", " #a ", #0b00000010000100000 \n"\ + " bicne " #a ", " #a ", #0b00000100001000000 \n"\ + " bic " #b ", " #b ", #0b00000010000100000 \n"\ + " bicne " #b ", " #b ", #0b00000100001000000 \n"\ " add " #a ", " #a ", " #b " \n"\ " movne " #a ", " #a ", lsr #1 \n"\ " tst " #a ", #0b00000000000100000 \n"\ " orrne " #a ", " #a ", #0b00000000000011111 \n"\ - " tst " #a ", #0b00000100000000000 \n"\ - " orrne " #a ", " #a ", #0b00000011111100000 \n"\ - " tst " #a ", #0b10000000000000000 \n"\ - " orrne " #a ", " #a ", #0b01111100000000000 \n" + " tst " #a ", #0b00000010000000000 \n"\ + " orrne " #a ", " #a ", #0b00000001111100000 \n"\ + " tst " #a ", #0b01000000000000000 \n"\ + " orrne " #a ", " #a ", #0b00111110000000000 \n" typedef struct { @@ -166,3 +166,4 @@ void doRaster(ROPSTRUCT *rop); bool wouldRasterAlterStatus(ROPSTRUCT *rop); #endif + diff --git a/src/snes9x.h b/src/snes9x.h index be7bfd0..0201ad9 100644 --- a/src/snes9x.h +++ b/src/snes9x.h @@ -61,7 +61,15 @@ #define ROM_NAME_LEN 23 -#ifdef ZLIB +#ifdef __LIBRETRO__ +#include "../libretro/memstream.h" +#define STREAM memstream_t * +#define READ_STREAM(p, l, s) memstream_read(s, p, l) +#define WRITE_STREAM(p, l, s) memstream_write(s, p, l) +#define OPEN_STREAM(f, m) memstream_open() +#define CLOSE_STREAM(s) memstream_close(s) +#define SEEK_STREAM(p,r,s) memstream_seek(p,r,s) +#elif defined(ZLIB) //#ifndef __WIN32__ #include "zlib.h" //#endif diff --git a/src/spc700.cpp b/src/spc700.cpp index 00dd4f8..637d2db 100644 --- a/src/spc700.cpp +++ b/src/spc700.cpp @@ -239,6 +239,7 @@ APUSetZN8 ((uint8) Int16); IAPU.Address = *(IAPU.DirectPage + OP1) + \ (*(IAPU.DirectPage + OP1 + 1) << 8) + \ IAPU.YA.B.Y; +#endif void Apu00 () { @@ -2505,5 +2506,4 @@ void (*S9xApuOpcodes[256]) (void) = ApuF8, ApuF9, ApuFA, ApuFB, ApuFC, ApuFD, ApuFE, ApuFF }; -#endif diff --git a/src/srtc.h b/src/srtc.h index a4e8abf..32437f5 100644 --- a/src/srtc.h +++ b/src/srtc.h @@ -42,7 +42,7 @@ #define _srtc_h_ #if !defined(_SNESPPC) && !defined(__GIZ__) && !defined(__GP2X__) && !defined(__WIZ__) -#include +//#include #endif #define MAX_RTC_INDEX 0xC diff --git a/src/tile16_t.h b/src/tile16_t.h index db1916e..f4a0a57 100644 --- a/src/tile16_t.h +++ b/src/tile16_t.h @@ -210,7 +210,8 @@ DEC_DRAWNOZ(ROPNAME) \ " cmp r8, #1 \n"\ " blo 4f \n"\ - " ldrneh r8, [%[screen], %[delta]] \n"\ + " mov r8, #0x200000 \n"\ + " ldrneh r8, [%[screen], r8] \n"\ " moveq r8, %[fixedcolour] \n"\ \ ROP \ @@ -243,7 +244,8 @@ DEC_DRAWNOZ(ROPNAME) \ " cmp r8, #1 \n"\ " blo 4f \n"\ - " ldrneh r8, [%[screen], %[delta]] \n"\ + " mov r8, #0x200000 \n"\ + " ldrneh r8, [%[screen], r8] \n"\ " moveq r8, %[fixedcolour] \n"\ \ ROP \ @@ -282,7 +284,7 @@ DEC_DRAW(ROPNAME) : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (GFX.FixedColour), [screen] "r" ((uint16 *) GFX.S + Offset), [depth] "r" (GFX.ZBuffer + Offset), @@ -306,7 +308,7 @@ DEC_DRAW(ROPNAME) : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (GFX.FixedColour), [screen] "r" ((uint16 *) GFX.S + Offset), [depth] "r" (GFX.ZBuffer + Offset), @@ -332,7 +334,7 @@ DEC_DRAW(ROPNAME) : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (GFX.FixedColour), [screen] "r" ((uint16 *) GFX.S + Offset), [depth] "r" (GFX.ZBuffer + Offset), @@ -358,7 +360,7 @@ DEC_DRAW(ROPNAME) : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (GFX.FixedColour), [screen] "r" ((uint16 *) GFX.S + Offset), [depth] "r" (GFX.ZBuffer + Offset), @@ -405,7 +407,7 @@ if (Tile & V_FLIP){ : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (GFX.FixedColour), [width] "r" (Width), [screen] "r" ((uint16 *) GFX.S + Offset), @@ -437,7 +439,7 @@ if (Tile & V_FLIP){ : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (GFX.FixedColour), [width] "r" (Width), [screen] "r" ((uint16 *) GFX.S + Offset), @@ -471,7 +473,7 @@ if (Tile & V_FLIP){ : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (GFX.FixedColour), [width] "r" (Width), [screen] "r" ((uint16 *) GFX.S + Offset), @@ -503,7 +505,7 @@ if (Tile & V_FLIP){ : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (GFX.FixedColour), [width] "r" (Width), [screen] "r" ((uint16 *) GFX.S + Offset), @@ -517,3 +519,4 @@ if (Tile & V_FLIP){ } } } + diff --git a/src/tile16f_t.h b/src/tile16f_t.h index 70b5cff..493f76f 100644 --- a/src/tile16f_t.h +++ b/src/tile16f_t.h @@ -103,7 +103,7 @@ DEC_DRAW(ROPNAME) : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (FIXEDCOLOUR), [screen] "r" ((uint16 *) GFX.S + Offset), [depth] "r" (GFX.ZBuffer + Offset), @@ -127,7 +127,7 @@ DEC_DRAW(ROPNAME) : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (FIXEDCOLOUR), [screen] "r" ((uint16 *) GFX.S + Offset), [depth] "r" (GFX.ZBuffer + Offset), @@ -153,7 +153,7 @@ DEC_DRAW(ROPNAME) : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (FIXEDCOLOUR), [screen] "r" ((uint16 *) GFX.S + Offset), [depth] "r" (GFX.ZBuffer + Offset), @@ -179,7 +179,7 @@ DEC_DRAW(ROPNAME) : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (FIXEDCOLOUR), [screen] "r" ((uint16 *) GFX.S + Offset), [depth] "r" (GFX.ZBuffer + Offset), @@ -226,7 +226,7 @@ if (Tile & V_FLIP){ : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (FIXEDCOLOUR), [width] "r" (Width), [screen] "r" ((uint16 *) GFX.S + Offset), @@ -258,7 +258,7 @@ if (Tile & V_FLIP){ : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (FIXEDCOLOUR), [width] "r" (Width), [screen] "r" ((uint16 *) GFX.S + Offset), @@ -292,7 +292,7 @@ if (Tile & V_FLIP){ : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (FIXEDCOLOUR), [width] "r" (Width), [screen] "r" ((uint16 *) GFX.S + Offset), @@ -324,7 +324,7 @@ if (Tile & V_FLIP){ : [gfx_z1] "r" (GFX.Z1), [gfx_z2] "r" (GFX.Z2), [colors] "r" (GFX.ScreenColors), - [delta] "r" (GFX.Delta << 1), + //[delta] "r" (GFX.Delta << 1), [fixedcolour] "r" (FIXEDCOLOUR), [width] "r" (Width), [screen] "r" ((uint16 *) GFX.S + Offset), @@ -338,3 +338,4 @@ if (Tile & V_FLIP){ } } } + -- cgit v1.2.3