Merge remote-tracking branch 'origin/master' into skmp/linux86

This commit is contained in:
Stefanos Kornilios Mitsis Poiitidis 2015-05-08 17:29:14 +02:00
commit 5ef9d661a6
22 changed files with 305 additions and 123 deletions

View File

@ -1,7 +1,12 @@
notifications: notifications:
irc: chat.freenode.net#reicast irc: chat.freenode.net#reicast
language: cpp language: android
compiler: gcc android:
components:
- platform-tools
- tools
- build-tools-22.0.0
- android-21
before_install: before_install:
- openssl aes-256-cbc -K $encrypted_c726d225a9d9_key -iv $encrypted_c726d225a9d9_iv - openssl aes-256-cbc -K $encrypted_c726d225a9d9_key -iv $encrypted_c726d225a9d9_iv
-in debug.keystore.enc -out debug.keystore -d -in debug.keystore.enc -out debug.keystore -d
@ -13,15 +18,11 @@ before_install:
- GIT_HASH=`git log --pretty=format:'%h' -n 1` - GIT_HASH=`git log --pretty=format:'%h' -n 1`
- GIT_BUILD=`git describe --all`-$GIT_HASH - GIT_BUILD=`git describe --all`-$GIT_HASH
install: install:
- download_extract http://dl.google.com/android/ndk/android-ndk-r9c-linux-x86_64.tar.bz2 - wget http://dl.google.com/android/ndk/android-ndk-r10d-linux-x86_64.bin
android-ndk-r9c-linux-x86_64.tar.bz2 - chmod +x android-ndk-r10d-linux-x86_64.bin
- download_extract_zip http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20131030.zip - ./android-ndk-r10d-linux-x86_64.bin -y | grep -v Extracting
adt-bundle-linux-x86_64-20131030.zip - mv android-ndk-r10d android-ndk
- mv android-ndk-r9c android-ndk - rm android-ndk-r10d-linux-x86_64.bin
- mv adt-bundle-linux-x86_64-20131030/sdk/ android-sdk
- rm android-ndk-r9c-linux-x86_64.tar.bz2
- rm adt-bundle-linux-x86_64-20131030.zip
- export ANDROID_HOME=$(pwd)/android-sdk
- export NDK=$(pwd)/android-ndk - export NDK=$(pwd)/android-ndk
- export ANDROID_NDK=$(pwd)/android-ndk - export ANDROID_NDK=$(pwd)/android-ndk
- export PATH=${PATH}:$ANDROID_HOME/tools - export PATH=${PATH}:$ANDROID_HOME/tools
@ -32,7 +33,7 @@ install:
before_script: before_script:
script: script:
- cd shell/android - cd shell/android
- android update project -p . --target "android-19" - android update project -p . --target "android-21"
- export NUMBER_OF_PROCESSORS=2 - export NUMBER_OF_PROCESSORS=2
- ant debug - ant debug
before_deploy: before_deploy:

View File

@ -2,7 +2,7 @@
#MFLAGS := -marm -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp #MFLAGS := -marm -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp
#ASFLAGS := -march=armv7-a -mfpu=vfp-d16 -mfloat-abi=softfp #ASFLAGS := -march=armv7-a -mfpu=vfp-d16 -mfloat-abi=softfp
#LDFLAGS := -g -Wl,-Map,$(notdir $@).map,--gc-sections -Wl,-O3 -Wl,--sort-common #LDFLAGS := -Wl,-Map,$(notdir $@).map,--gc-sections -Wl,-O3 -Wl,--sort-common
RZDCY_SRC_DIR ?= $(call my-dir) RZDCY_SRC_DIR ?= $(call my-dir)
@ -57,7 +57,7 @@ RZDCY_FILES += $(foreach dir,$(addprefix $(RZDCY_SRC_DIR)/,$(RZDCY_MODULES)),$(w
ifdef FOR_PANDORA ifdef FOR_PANDORA
RZDCY_CFLAGS := \ RZDCY_CFLAGS := \
$(CFLAGS) -c -g -O3 -I$(RZDCY_SRC_DIR) -I$(RZDCY_SRC_DIR)/deps \ $(CFLAGS) -c -O3 -I$(RZDCY_SRC_DIR) -I$(RZDCY_SRC_DIR)/deps \
-DRELEASE -DPANDORA\ -DRELEASE -DPANDORA\
-march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp \ -march=armv7-a -mtune=cortex-a8 -mfpu=neon -mfloat-abi=softfp \
-frename-registers -fsingle-precision-constant -ffast-math \ -frename-registers -fsingle-precision-constant -ffast-math \
@ -66,7 +66,7 @@ RZDCY_CFLAGS := \
RZDCY_CFLAGS += -DTARGET_LINUX_ARMELv7 RZDCY_CFLAGS += -DTARGET_LINUX_ARMELv7
else else
RZDCY_CFLAGS := \ RZDCY_CFLAGS := \
$(CFLAGS) -c -g -O3 -I$(RZDCY_SRC_DIR) -I$(RZDCY_SRC_DIR)/deps \ $(CFLAGS) -c -O3 -I$(RZDCY_SRC_DIR) -I$(RZDCY_SRC_DIR)/deps \
-D_ANDROID -DRELEASE\ -D_ANDROID -DRELEASE\
-frename-registers -fsingle-precision-constant -ffast-math \ -frename-registers -fsingle-precision-constant -ffast-math \
-ftree-vectorize -fomit-frame-pointer -ftree-vectorize -fomit-frame-pointer
@ -91,4 +91,4 @@ ifndef DESKTOPGL
RZDCY_CFLAGS += -DGLES RZDCY_CFLAGS += -DGLES
endif endif
RZDCY_CXXFLAGS := $(RZDCY_CFLAGS) -fno-exceptions -fno-rtti -std=gnu++11 RZDCY_CXXFLAGS := $(RZDCY_CFLAGS) -fno-exceptions -fno-rtti -std=gnu++11

View File

@ -19,6 +19,7 @@ u32 tmu_prescaler_mask[3];
u32 tmu_shift[3]; u32 tmu_shift[3];
u32 tmu_mask[3]; u32 tmu_mask[3];
u64 tmu_mask64[3];
const u32 tmu_ch_bit[3]={1,2,4}; const u32 tmu_ch_bit[3]={1,2,4};
@ -75,18 +76,28 @@ void UpdateTMU_i(u32 Cycles)
#endif #endif
u32 tmu_ch_base[3]; u32 tmu_ch_base[3];
u64 tmu_ch_base64[3];
u32 read_TMU_TCNTch(u32 ch) u32 read_TMU_TCNTch(u32 ch)
{ {
return tmu_ch_base[ch] - ((sh4_sched_now64() >> tmu_shift[ch])&tmu_mask[ch]); return tmu_ch_base[ch] - ((sh4_sched_now64() >> tmu_shift[ch])&tmu_mask[ch]);
} }
s64 read_TMU_TCNTch64(u32 ch)
{
return tmu_ch_base64[ch] - ((sh4_sched_now64() >> tmu_shift[ch])&tmu_mask64[ch]);
}
void sched_chan_tick(int ch) void sched_chan_tick(int ch)
{ {
//schedule next interrupt //schedule next interrupt
//return TMU_TCOR(ch) << tmu_shift[ch]; //return TMU_TCOR(ch) << tmu_shift[ch];
u32 togo = read_TMU_TCNTch(ch); u32 togo = read_TMU_TCNTch(ch);
if (togo > SH4_MAIN_CLOCK)
togo = SH4_MAIN_CLOCK;
u32 cycles = togo << tmu_shift[ch]; u32 cycles = togo << tmu_shift[ch];
if (cycles > SH4_MAIN_CLOCK) if (cycles > SH4_MAIN_CLOCK)
@ -103,6 +114,7 @@ void write_TMU_TCNTch(u32 ch, u32 data)
{ {
//u32 TCNT=read_TMU_TCNTch(ch); //u32 TCNT=read_TMU_TCNTch(ch);
tmu_ch_base[ch]=data+((sh4_sched_now64()>>tmu_shift[ch])&tmu_mask[ch]); tmu_ch_base[ch]=data+((sh4_sched_now64()>>tmu_shift[ch])&tmu_mask[ch]);
tmu_ch_base64[ch] = data + ((sh4_sched_now64() >> tmu_shift[ch])&tmu_mask64[ch]);
sched_chan_tick(ch); sched_chan_tick(ch);
} }
@ -123,6 +135,7 @@ void turn_on_off_ch(u32 ch, bool on)
{ {
u32 TCNT=read_TMU_TCNTch(ch); u32 TCNT=read_TMU_TCNTch(ch);
tmu_mask[ch]=on?0xFFFFFFFF:0x00000000; tmu_mask[ch]=on?0xFFFFFFFF:0x00000000;
tmu_mask64[ch] = on ? 0xFFFFFFFFFFFFFFFF : 0x0000000000000000;
write_TMU_TCNTch(ch,TCNT); write_TMU_TCNTch(ch,TCNT);
sched_chan_tick(ch); sched_chan_tick(ch);
@ -213,13 +226,15 @@ int sched_tmu_cb(int ch, int sch_cycl, int jitter)
if (tmu_mask[ch]) { if (tmu_mask[ch]) {
u32 tcnt = read_TMU_TCNTch(ch); u32 tcnt = read_TMU_TCNTch(ch);
s64 tcnt64 = (s64)read_TMU_TCNTch64(ch);
u32 tcor = TMU_TCOR(ch); u32 tcor = TMU_TCOR(ch);
u32 cycles = tcor << tmu_shift[ch]; u32 cycles = tcor << tmu_shift[ch];
//this is not 100% correct //64 bit maths to differentiate big values from overflows
if (abs((s32)tcnt) <= jitter) { if (tcnt64 <= jitter) {
//raise interrupt, timer counted down //raise interrupt, timer counted down
TMU_TCR(ch) |= tmu_underflow; TMU_TCR(ch) |= tmu_underflow;
InterruptPend(tmu_intID[ch], 1); InterruptPend(tmu_intID[ch], 1);
@ -227,7 +242,7 @@ int sched_tmu_cb(int ch, int sch_cycl, int jitter)
//printf("Interrupt for %d, %d cycles\n", ch, sch_cycl); //printf("Interrupt for %d, %d cycles\n", ch, sch_cycl);
//schedule next trigger by writing the TCNT register //schedule next trigger by writing the TCNT register
write_TMU_TCNTch(ch, tcor - tcnt); write_TMU_TCNTch(ch, tcor + tcnt);
} }
else { else {

View File

@ -36,11 +36,11 @@ vector<sched_list> list;
int sh4_sched_next_id=-1; int sh4_sched_next_id=-1;
u32 sh4_sched_remaining(int id) u32 sh4_sched_remaining(int id, u32 reference)
{ {
if (list[id].end!=-1) if (list[id].end != -1)
{ {
return list[id].end-sh4_sched_now(); return list[id].end - reference;
} }
else else
{ {
@ -48,6 +48,11 @@ u32 sh4_sched_remaining(int id)
} }
} }
u32 sh4_sched_remaining(int id)
{
return sh4_sched_remaining(id, sh4_sched_now());
}
void sh4_sched_ffts() void sh4_sched_ffts()
{ {
u32 diff=-1; u32 diff=-1;
@ -103,10 +108,19 @@ u64 sh4_sched_now64()
} }
void sh4_sched_request(int id, int cycles) void sh4_sched_request(int id, int cycles)
{ {
verify(cycles <= SH4_MAIN_CLOCK); verify(cycles== -1 || (cycles >= 0 && cycles <= SH4_MAIN_CLOCK));
list[id].start=sh4_sched_now(); list[id].start=sh4_sched_now();
list[id].end=list[id].start+cycles;
if (cycles == -1) {
list[id].end = -1;
}
else
{
list[id].end = list[id].start + cycles;
if (list[id].end == -1)
list[id].end++;
}
sh4_sched_ffts(); sh4_sched_ffts();
} }
@ -150,8 +164,9 @@ void sh4_sched_tick(int cycles)
{ {
for (int i=0;i<list.size();i++) for (int i=0;i<list.size();i++)
{ {
if ((list[i].end-fztime)<=(u32)cycles) int remaining = sh4_sched_remaining(i, fztime);
{ verify(remaining >= 0 || remaining == -1);
if (remaining >= 0 && remaining <= (u32)cycles) {
handle_cb(i); handle_cb(i);
} }
} }

View File

@ -17,6 +17,7 @@
#if defined(_ANDROID) #if defined(_ANDROID)
#include <asm/sigcontext.h> #include <asm/sigcontext.h>
#if 0
typedef struct ucontext_t { typedef struct ucontext_t {
unsigned long uc_flags; unsigned long uc_flags;
struct ucontext_t *uc_link; struct ucontext_t *uc_link;
@ -31,17 +32,18 @@ struct sigcontext uc_mcontext;
*/ */
} ucontext_t; } ucontext_t;
#endif #endif
#endif
#if HOST_CPU == CPU_ARM #if HOST_CPU == CPU_ARM
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.arm_pc) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.arm_pc)
#elif HOST_CPU == CPU_MIPS #elif HOST_CPU == CPU_MIPS
#ifdef _ANDROID #if 0 && _ANDROID
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.sc_pc) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.sc_pc)
#else #else
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.pc) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.pc)
#endif #endif
#elif HOST_CPU == CPU_X86 #elif HOST_CPU == CPU_X86
#ifdef _ANDROID #if 0 && _ANDROID
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.eip) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.eip)
#else #else
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.gregs[REG_EIP]) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.gregs[REG_EIP])

View File

@ -35,7 +35,7 @@
#if defined(_ANDROID) #if defined(_ANDROID)
#include <asm/sigcontext.h> #include <asm/sigcontext.h>
#if 0
typedef struct ucontext_t typedef struct ucontext_t
{ {
unsigned long uc_flags; unsigned long uc_flags;
@ -52,20 +52,20 @@ typedef struct ucontext_t
* we don't use them for now... * we don't use them for now...
*/ */
} ucontext_t; } ucontext_t;
#endif
#include <android/log.h> #include <android/log.h>
#endif #endif
#if HOST_CPU == CPU_ARM #if HOST_CPU == CPU_ARM
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.arm_pc) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.arm_pc)
#elif HOST_CPU == CPU_MIPS #elif HOST_CPU == CPU_MIPS
#ifdef _ANDROID #if 0 && _ANDROID
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.sc_pc) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.sc_pc)
#else #else
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.pc) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.pc)
#endif #endif
#elif HOST_CPU == CPU_X86 #elif HOST_CPU == CPU_X86
#ifdef _ANDROID #if 0 && _ANDROID
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.eip) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.eip)
#else #else
#define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.gregs[REG_EIP]) #define GET_PC_FROM_CONTEXT(c) (((ucontext_t *)(c))->uc_mcontext.gregs[REG_EIP])

View File

@ -253,6 +253,8 @@ void LoadSettings()
settings.debug.SerialConsole = cfgLoadInt("config", "Debug.SerialConsoleEnabled", 0) != 0; settings.debug.SerialConsole = cfgLoadInt("config", "Debug.SerialConsoleEnabled", 0) != 0;
settings.reios.ElfFile = cfgLoadStr("reios", "ElfFile",""); settings.reios.ElfFile = cfgLoadStr("reios", "ElfFile","");
settings.validate.OpenGlChecks = cfgLoadInt("validate", "OpenGlChecks", 0) != 0;
#endif #endif
settings.bios.UseReios = cfgLoadInt("config", "bios.UseReios", 0); settings.bios.UseReios = cfgLoadInt("config", "bios.UseReios", 0);

View File

@ -183,10 +183,10 @@ typedef ConditionCode eCC;
#define rfp_r9 r9 #define rfp_r9 r9
typedef void FPBinOP (eFSReg Sd, eFSReg Sn, eFSReg Sm, ConditionCode CC=CC_AL); typedef void FPBinOP (eFSReg Sd, eFSReg Sn, eFSReg Sm, ConditionCode CC);
typedef void FPUnOP (eFSReg Sd, eFSReg Sm, ConditionCode CC=CC_AL); typedef void FPUnOP (eFSReg Sd, eFSReg Sm, ConditionCode CC);
typedef void BinaryOP (eReg Rd, eReg Rn, eReg Rm, ConditionCode CC=AL); typedef void BinaryOP (eReg Rd, eReg Rn, eReg Rm, ConditionCode CC);
typedef void BinaryOPImm (eReg Rd, eReg Rn, s32 sImm8, ConditionCode CC=AL); typedef void BinaryOPImm (eReg Rd, eReg Rn, s32 sImm8, ConditionCode CC);
typedef void UnaryOP (eReg Rd, eReg Rs); typedef void UnaryOP (eReg Rd, eReg Rs);

View File

@ -11,6 +11,7 @@
@@@@@@@@@@ some helpers @@@@@@@@@@ @@@@@@@@@@ some helpers @@@@@@@@@@
.global do_sqw_nommu_area_3 .global do_sqw_nommu_area_3
.hidden do_sqw_nommu_area_3
@r0: addr @r0: addr
@r1: sq_both @r1: sq_both
do_sqw_nommu_area_3: do_sqw_nommu_area_3:
@ -25,6 +26,7 @@ vstm r3,{d0-d3}
bx lr bx lr
.global TAWriteSQ .global TAWriteSQ
.hidden TAWriteSQ
@r0: addr @r0: addr
@r1: sq_both @r1: sq_both
TAWriteSQ: TAWriteSQ:
@ -57,6 +59,7 @@ bx lr
@@@@@@@@@@ ngen_LinkBlock_*****_stub @@@@@@@@@@ @@@@@@@@@@ ngen_LinkBlock_*****_stub @@@@@@@@@@
.global ngen_LinkBlock_Generic_stub .global ngen_LinkBlock_Generic_stub
.hidden ngen_LinkBlock_Generic_stub
ngen_LinkBlock_Generic_stub: ngen_LinkBlock_Generic_stub:
mov r1,r4 @ djump/pc -> in case we need it .. mov r1,r4 @ djump/pc -> in case we need it ..
@ -64,12 +67,14 @@ ngen_LinkBlock_Generic_stub:
.global ngen_LinkBlock_cond_Branch_stub .global ngen_LinkBlock_cond_Branch_stub
.hidden ngen_LinkBlock_cond_Branch_stub
ngen_LinkBlock_cond_Branch_stub: ngen_LinkBlock_cond_Branch_stub:
mov r1,#1 mov r1,#1
b ngen_LinkBlock_Shared_stub b ngen_LinkBlock_Shared_stub
.global ngen_LinkBlock_cond_Next_stub .global ngen_LinkBlock_cond_Next_stub
.hidden ngen_LinkBlock_cond_Next_stub
ngen_LinkBlock_cond_Next_stub: ngen_LinkBlock_cond_Next_stub:
mov r1,#0 mov r1,#0
@ -77,6 +82,7 @@ ngen_LinkBlock_cond_Next_stub:
.global ngen_LinkBlock_Shared_stub .global ngen_LinkBlock_Shared_stub
.hidden ngen_LinkBlock_Shared_stub
ngen_LinkBlock_Shared_stub: ngen_LinkBlock_Shared_stub:
mov r0,lr mov r0,lr
@ -88,6 +94,7 @@ ngen_LinkBlock_Shared_stub:
.global ngen_FailedToFindBlock_ .global ngen_FailedToFindBlock_
.hidden ngen_FailedToFindBlock_
ngen_FailedToFindBlock_: ngen_FailedToFindBlock_:
mov r0,r4 mov r0,r4
bl rdv_FailedToFindBlock bl rdv_FailedToFindBlock
@ -96,6 +103,7 @@ ngen_FailedToFindBlock_:
@@@@@@@@@@ ngen_blockcheckfail @@@@@@@@@@ @@@@@@@@@@ ngen_blockcheckfail @@@@@@@@@@
.global ngen_blockcheckfail .global ngen_blockcheckfail
.hidden ngen_blockcheckfail
ngen_blockcheckfail: ngen_blockcheckfail:
bl rdv_BlockCheckFail bl rdv_BlockCheckFail
bx r0 bx r0
@ -111,6 +119,7 @@ ngen_blockcheckfail:
.global ngen_mainloop .global ngen_mainloop
.hidden ngen_mainloop
ngen_mainloop: ngen_mainloop:
push { r4-r12,lr } push { r4-r12,lr }
@ -125,7 +134,8 @@ push { r4-r12,lr }
@this code is here for fall-through behavior of do_iter @this code is here for fall-through behavior of do_iter
.global intc_sched .global intc_sched
.hidden intc_sched
intc_sched: @ next_pc _MUST_ be on ram intc_sched: @ next_pc _MUST_ be on ram
add r9,r9,#SH4_TIMESLICE add r9,r9,#SH4_TIMESLICE
mov r4,lr mov r4,lr
@ -140,6 +150,7 @@ do_iter:
mov r4,r0 mov r4,r0
.global no_update .global no_update
.hidden no_update
no_update: @ next_pc _MUST_ be on r4 *R4 NOT R0 anymore* no_update: @ next_pc _MUST_ be on r4 *R4 NOT R0 anymore*
sub r2,r8,#33816576 sub r2,r8,#33816576
@ -157,6 +168,7 @@ end_ngen_mainloop:
@@@@@@@@@@ ngen_mainloop @@@@@@@@@@ @@@@@@@@@@ ngen_mainloop @@@@@@@@@@
.global arm_compilecode .global arm_compilecode
.hidden arm_compilecode
arm_compilecode: arm_compilecode:
bl CompileCode bl CompileCode
b arm_dispatch b arm_dispatch
@ -166,7 +178,8 @@ Xarm_Reg: .word arm_Reg
XEntryPoints: .word EntryPoints XEntryPoints: .word EntryPoints
#endif #endif
.global arm_mainloop .global arm_mainloop
.hidden arm_mainloop
arm_mainloop: @(cntx,lookup_base,cycles) arm_mainloop: @(cntx,lookup_base,cycles)
push {r4,r5,r8,r9,lr} push {r4,r5,r8,r9,lr}
@ -185,6 +198,7 @@ push {r4,r5,r8,r9,lr}
b arm_dispatch b arm_dispatch
.global arm_dispatch .global arm_dispatch
.hidden arm_dispatch
arm_dispatch: arm_dispatch:
#ifdef TARGET_IPHONE #ifdef TARGET_IPHONE
ldrd r0,r1,[r8,#184] @load: Next PC, interrupt ldrd r0,r1,[r8,#184] @load: Next PC, interrupt
@ -203,6 +217,7 @@ arm_dofiq:
b arm_dispatch b arm_dispatch
.global arm_exit .global arm_exit
.hidden arm_exit
arm_exit: arm_exit:
str r5,[r8,#192] @if timeslice is over, save remaining cycles str r5,[r8,#192] @if timeslice is over, save remaining cycles
pop {r4,r5,r8,r9,pc} pop {r4,r5,r8,r9,pc}
@ -211,6 +226,7 @@ arm_exit:
@matrix mul @matrix mul
#ifndef _ANDROID #ifndef _ANDROID
.global ftrv_asm .global ftrv_asm
.hidden ftrv_asm
ftrv_asm: ftrv_asm:
@r0=dst,r1=vec,r2=mtx @r0=dst,r1=vec,r2=mtx
@ -229,6 +245,7 @@ vstm r0,{d4,d5}
bx lr bx lr
.global fipr_asm .global fipr_asm
.hidden fipr_asm
fipr_asm: fipr_asm:
@ vdot @ vdot

View File

@ -26,7 +26,7 @@
#endif #endif
#define glCheck() verify(glGetError()==GL_NO_ERROR) #define glCheck() do { if (unlikely(settings.validate.OpenGlChecks)) { verify(glGetError()==GL_NO_ERROR); } } while(0)
#define eglCheck() false #define eglCheck() false
#define VERTEX_POS_ARRAY 0 #define VERTEX_POS_ARRAY 0

View File

@ -686,6 +686,10 @@ struct settings_t
struct { struct {
bool SerialConsole; bool SerialConsole;
} debug; } debug;
struct {
bool OpenGlChecks;
} validate;
}; };
extern settings_t settings; extern settings_t settings;

View File

@ -652,18 +652,30 @@ cResetEvent::~cResetEvent()
} }
void cResetEvent::Set()//Signal void cResetEvent::Set()//Signal
{ {
#if defined(DEBUG_THREADS)
Sleep(rand() % 10);
#endif
SetEvent(hEvent); SetEvent(hEvent);
} }
void cResetEvent::Reset()//reset void cResetEvent::Reset()//reset
{ {
#if defined(DEBUG_THREADS)
Sleep(rand() % 10);
#endif
ResetEvent(hEvent); ResetEvent(hEvent);
} }
void cResetEvent::Wait(u32 msec)//Wait for signal , then reset void cResetEvent::Wait(u32 msec)//Wait for signal , then reset
{ {
#if defined(DEBUG_THREADS)
Sleep(rand() % 10);
#endif
WaitForSingleObject(hEvent,msec); WaitForSingleObject(hEvent,msec);
} }
void cResetEvent::Wait()//Wait for signal , then reset void cResetEvent::Wait()//Wait for signal , then reset
{ {
#if defined(DEBUG_THREADS)
Sleep(rand() % 10);
#endif
WaitForSingleObject(hEvent,(u32)-1); WaitForSingleObject(hEvent,(u32)-1);
} }
//End AutoResetEvent //End AutoResetEvent

View File

@ -35,18 +35,17 @@
<uses-feature <uses-feature
android:name="android.hardware.gamepad" android:name="android.hardware.gamepad"
android:required="false"/> android:required="false"/>
<!--uses-feature <uses-feature
android:name="android.software.leanback" android:name="android.software.leanback"
android:required="false" /--> android:required="false" />
<application <application
android:icon="@drawable/ic_launcher" android:icon="@drawable/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:theme="@style/AppTheme" > android:theme="@style/AppTheme"
<!-- android:banner="@drawable/ic_banner"
android:banner="@drawable/ic_banner" android:logo="@drawable/ic_banner"
android:logo="@drawable/ic_banner" android:isGame="true">
android:isGame="true"-->
<meta-data <meta-data
android:name="xperiaplayoptimized_content" android:name="xperiaplayoptimized_content"
@ -61,7 +60,7 @@
<category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.LAUNCHER" />
<category android:name="tv.ouya.intent.category.GAME" /> <category android:name="tv.ouya.intent.category.GAME" />
<!--category android:name="android.intent.category.LEANBACK_LAUNCHER" /--> <category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter> </intent-filter>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
@ -142,4 +141,4 @@
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /> android:theme="@android:style/Theme.NoTitleBar.Fullscreen" />
</application> </application>
</manifest> </manifest>

View File

@ -36,19 +36,28 @@ include $(LOCAL_PATH)/../../core/core.mk
LOCAL_SRC_FILES := $(RZDCY_FILES) LOCAL_SRC_FILES := $(RZDCY_FILES)
LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/jni/src/Android.cpp) LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/jni/src/Android.cpp)
LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/jni/src/utils.cpp) LOCAL_SRC_FILES += $(wildcard $(LOCAL_PATH)/jni/src/utils.cpp)
LOCAL_CFLAGS := $(RZDCY_CFLAGS) LOCAL_CFLAGS := $(RZDCY_CFLAGS) -fvisibility=hidden -fvisibility-inlines-hidden -ffunction-sections -fdata-sections
LOCAL_CXXFLAGS := $(RZDCY_CXXFLAGS) LOCAL_CXXFLAGS := $(RZDCY_CXXFLAGS) -fvisibility=hidden -fvisibility-inlines-hidden -ffunction-sections -fdata-sections
LOCAL_CPPFLAGS := $(RZDCY_CXXFLAGS) -fvisibility=hidden -fvisibility-inlines-hidden -ffunction-sections -fdata-sections
LOCAL_CPP_FEATURES :=
LOCAL_SHARED_LIBRARIES:= libcutils libutils LOCAL_SHARED_LIBRARIES:= libcutils libutils
LOCAL_PRELINK_MODULE := false LOCAL_PRELINK_MODULE := false
LOCAL_MODULE := dc LOCAL_MODULE := dc
LOCAL_DISABLE_FORMAT_STRING_CHECKS=true LOCAL_DISABLE_FORMAT_STRING_CHECKS=true
LOCAL_ASFLAGS := -fvisibility=hidden LOCAL_ASFLAGS := -fvisibility=hidden
LOCAL_LDLIBS := -llog -lGLESv2 -lEGL -lz LOCAL_LDLIBS := -llog -lGLESv2 -lEGL -lz
#-Wl,-Map,./res/raw/syms.mp3 #-Wl,-Map,./res/raw/syms.mp3
LOCAL_ARM_MODE := arm LOCAL_ARM_MODE := arm
ifeq ($(TARGET_ARCH),mips)
LOCAL_LDFLAGS += -Wl,--gc-sections
else
LOCAL_LDFLAGS += -Wl,--gc-sections,--icf=safe
endif
# #
# android has poor support for hardfp calling. # android has poor support for hardfp calling.
# r9b+ is required, and it only works for internal calls # r9b+ is required, and it only works for internal calls

View File

@ -2,4 +2,4 @@ APP_STL := stlport_static
APP_ABI := armeabi-v7a x86 mips APP_ABI := armeabi-v7a x86 mips
#APP_ABI := armeabi-v7a #APP_ABI := armeabi-v7a
APP_PLATFORM := android-19 APP_PLATFORM := android-19
NDK_TOOLCHAIN_VERSION := 4.8 #NDK_TOOLCHAIN_VERSION := 4.8

View File

@ -11,4 +11,4 @@
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target. # Project target.
target=android-19 target=android-21

View File

@ -1,63 +1,101 @@
<resources> <resources>
<string name="menu_settings">Einstellungen</string> <string name="menu_settings">Einstellungen</string>
<string name="system_path">System Pfad (Speicherort des data Ordners welcher dc_boot.bin und dc_flash.bin enthält)</string>
<string name="browser_path">Standard System Pfad</string> <string name="system_path">System-Pfad (Speicherort des data Ordners welcher dc_boot.bin und dc_flash.bin enthält)</string>
<string name="games_path">Spiele Pfad (Speicherort von .gdi, .chd oder .cdi Abbildern)</string> <string name="browser_path">Standard-System-Pfad</string>
<string name="game_path">Standard Spiele Pfad</string> <string name="games_path">Spiele-Pfad (Speicherort von .gdi, .chd oder .cdi Abbildern)</string>
<string name="button_theme">Onscreen-Button-Theme</string>
<string name="game_path">Standard-Spiele-Pfad</string>
<string name="config_home">Bitte konfigurieren Sie ihr Home-Verzeichnis.</string>
<string name="config_data">Bitte kopieren Sie den BIOS in %1$s/data/</string>
<string name="config_game">Bitte konfigurieren Sie ein Spiele-Verzeichnis.</string>
<string name="unsupported">Kernel-Version wird nicht unterstützt!</string>
<string name="locate">Finden</string>
<string name="browse">Durchsuchen</string>
<string name="boot_bios">Dreamcast Bios Starten</string> <string name="boot_bios">Dreamcast-BIOS starten</string>
<string name="missing_bios">Fehlendes BIOS. Für einen funktionsfähigen Emulator ist das Dreamcast BIOS erforderlich. Legen Sie die BIOS Datei unter %1$s/data/dc_boot.bin ab.</string> <string name="missing_bios_title">Fehlendes Dreamcast-BIOS.</string>
<string name="missing_flash">Fehlender Flash. Für einen funktionsfähigen Emulator ist der Dreamcast Flash erforderlich. Legen Sie die Flash Datei unter %1$s/data/dc_flash.bin ab.</string> <string name="missing_bios">Für einen funktionsfähigen Emulator ist das Dreamcast-BIOS erforderlich. Legen Sie die BIOS-Datei unter %1$s/data/dc_boot.bin ab.</string>
<string name="require_bios">Es muss ein BIOS bereitgestellt werden</string> <string name="missing_flash_title">Fehlender Dreamcast-Flash-ROM.</string>
<string name="missing_flash">Für einen funktionsfähigen Emulator ist der Dreamcast-Flash erforderlich. Legen Sie die Flash-Datei unter %1$s/data/dc_flash.bin ab.</string>
<string name="require_bios">Es muss ein BIOS bereitgestellt werden.</string>
<string name="data_folder">Das aktuelle Datenverzeichnis wird überprüft.</string>
<string name="emu_crash">Emulator-Fehler!</string>
<string name="emu_toast">Emulator-Fehler:\n %1$s</string>
<string name="folder_bios">BIOS STARTEN</string> <string name="folder_bios">BIOS STARTEN</string>
<string name="folder_select">AKTUELLES VERZEICHNIS WÄHLEN</string> <string name="folder_select">AKTUELLES VERZEICHNIS WÄHLEN</string>
<string name="select_dynarec">Dynarec Optionen</string> <string name="optimization_opts">Optimierungen und Debugging-Optionen</string>
<string name="select_unstable">Nicht stabile Optimierungen</string> <string name="experimental_opts">Experimentell (Kann Fehler verursachen)</string>
<string name="select_region">DC Region</string> <string name="select_reios">Verwende reios-BIOS</string>
<string name="select_limitfps">Limitiere FPS</string> <string name="select_bios">BIOS-Region (dc_flash[X].bin)</string>
<string name="select_details">Aktiviere Spiele-Details</string>
<string name="select_native">Nativer Modus [Kein OSD]</string>
<string name="select_dynarec">Dynarec-Optionen</string>
<string name="select_unstable">Instabile Optimierungen</string>
<string name="select_cable">Kabeltyp</string>
<string name="select_broadcast">Broadcast</string>
<string name="select_region">DC-Region</string>
<string name="select_limitfps">FPS begrenzen</string>
<string name="select_mipmaps">Verwende Mipmaps (Fehlerbehebung für den SGX540)</string> <string name="select_mipmaps">Verwende Mipmaps (Fehlerbehebung für den SGX540)</string>
<string name="select_stretch">Breitbild Modus</string> <string name="select_stretch">Breitbildmodus</string>
<string name="set_frameskip">Frameskip Wert</string> <string name="set_frameskip">Frameskip-Wert</string>
<string name="select_render">PVR Rendering (Hat momentan keine Funktion)</string> <string name="select_render">PVR-Rendering (Hat momentan keine Funktion)</string>
<string name="default_disk">Wähle Standard Datenträger</string> <string name="select_fps">On-Screen-FPS anzeigen</string>
<string name="select_software">Softwarerendering erzwingen</string>
<string name="select_sound">Emulator-Sound deaktivieren</string>
<string name="select_depth">Rendering-Tiefe</string>
<string name="select_force_gpu">v6-GPU-Konfiguration erzwingen</string>
<string name="default_disk">Wähle Standard-Datenträger</string>
<string name="games_listing">Verfügbare Dreamcast Spiele</string> <string name="games_listing">Verfügbare Dreamcast-Spiele</string>
<string name="customize_touch_controls">Touch Steuerung anpassen</string> <string name="game_details">Spielinfoformationen - %1$s</string>
<string name="launch_editor">Editor Starten</string> <string name="info_unavailable">Spielinformationen nicht verfügbar</string>
<string name="touch_vibration">Touch Vibration</string> <string name="disk_loading">Lade Datenträgerinformationen</string>
<string name="report_issue">Vorhergehender Absturz erkannt</string>
<string name="bios_config">Konfiguration fehlgeschlagen!</string>
<string name="customize_touch_controls">Touchsteuerung anpassen</string>
<string name="launch_editor">Editor starten</string>
<string name="touch_vibration">Touchvibration</string>
<string name="vibration_duration">Dauer des haptischen Feedbacks</string>
<string name="controller_a">Controller A</string> <string name="controller_a">Controller A</string>
<string name="controller_b">Controller B</string> <string name="controller_b">Controller B</string>
<string name="controller_c">Controller C</string> <string name="controller_c">Controller C</string>
<string name="controller_d">Controller D</string> <string name="controller_d">Controller D</string>
<string name="controller_not_connected">Controller Nicht Verbunden</string> <string name="controller_not_connected">Controller nicht verbunden</string>
<string name="controller_none_selected">Kein Controller Ausgewählt</string> <string name="controller_none_selected">Kein Controller ausgewählt</string>
<string name="select">Auswählen</string> <string name="select">Auswählen</string>
<string name="remove">Entfernen</string> <string name="remove">Entfernen</string>
<string name="select_controller_title">Controller Auswählen</string> <string name="select_controller_title">Controller auswählen</string>
<string name="select_controller_message">Drücken Sie eine beliebe Taste auf Controller %1$s für ein Hinzufügen zum Port</string> <string name="select_controller_message">Drücken Sie eine beliebige Taste auf Controller %1$s für ein Hinzufügen zum Port</string>
<string name="controller_already_in_use">Dieser Controller ist bereits in Verwendung!</string> <string name="controller_already_in_use">Dieser Controller ist bereits in Verwendung!</string>
<string name="rstick_mode">Rechter Stick: an - L/R, aus - A/B</string>
<string name="modified_layout">Benutzerdefiniertes Layout</string> <string name="modified_layout">Benutzerdefiniertes Layout</string>
<string name="controller_compat">Kompatibilitätsmodus</string> <string name="controller_compat">Kompatibilitätsmodus aktivieren</string>
<string name="controller_unavailable">Gamepad-IME erkannt!\nBitte deaktivieren Sie das native Interface.</string>
<string name="mic_in_port_2">Mikrophon in Port 2 eingesteckt</string>
<string name="customize_physical_controls">Physische Controller anpassen</string> <string name="customize_physical_controls">Physische Controller anpassen</string>
<string name="map_keycode_title">Controller Ändern</string> <string name="map_keycode_title">Controller ändern</string>
<string name="map_keycode_message">Drücken Sie die neue Controller-Taste für %1$s</string> <string name="map_keycode_message">Drücken Sie die neue Controller-Taste für %1$s</string>
<string name="moga_pro_connect">MOGA Pro verbunden!</string> <string name="moga_pro_connect">MOGA Pro verbunden!</string>
<string name="moga_connect">MOGA verbunden!</string> <string name="moga_connect">MOGA verbunden!</string>
<string name="about_text">reicast ist ein Dreamcast Emulator</string> <string name="about_text">reicast ist ein Dreamcast-Emulator</string>
<string name="revision_text">Version: %1$s</string> <string name="revision_text">Version: %1$s</string>
<string-array name="controllers"> <string-array name="controllers">
<item>Controller A</item> <item>Controller A</item>
<item>Controller B</item> <item>Controller B</item>
<item>Controller C</item> <item>Controller C</item>
<item>Controller D</item> <item>Controller D</item>
</string-array> </string-array>
<string name="browser">Browser</string> <string name="browser">Browser</string>
@ -66,8 +104,44 @@
<string name="input">Eingabe</string> <string name="input">Eingabe</string>
<string name="about">Über</string> <string name="about">Über</string>
<string name="rateme">Bewerten</string> <string name="rateme">Bewerten</string>
<string name="messages">Logdateien senden</string>
<string name="cloud">Cloud-VMU</string>
<string name="textOn">Ein</string> <string name="textOn">Ein</string>
<string name="textOff">Aus</string> <string name="textOff">Aus</string>
<string name="cancel">Abbrechen</string>
<string name="dismiss">Verwerfen</string>
<string name="manual">Manuell</string>
<string name="options">Optionen</string>
<string name="cloudInfos">Mit diesem Tool können Sie ihre VMUs mit Dropbox synchronisieren.</string>
<string name="uploadWarning">ACHTUNG: Sie sind im Begriff Ihre VMUs in Ihre Dropbox hochzuladen. Beachten Sie bitte, dass dies ihren letzten Upload ÜBERSCHREIBEN wird!</string>
<string name="downloadWarning">ACHTUNG: Sie sind im Begriff Ihre VMUs von Ihrer Dropbox herunterzuladen. Beachten Sie bitte, dass dies ihren letzten Download ÜBERSCHREIBEN wird! Eine Sicherungkopie wird im VmuBackups angelegt.</string>
<string name="uploadVMU">VMU hochladen</string>
<string name="downloadVMU">VMU herunterladen</string>
<string name="platform">Kopiere Logcat-Inhalte in die Zwischenablage\nBitte in den Fehlerbericht einfügen.</string>
<string name="log_saved">Logdatei ins \"Datenverzeichnis\" gespeichert.</string>
<!-- Onscreen Menu -->
<string name="popup_button_back">Zurück</string>
<string name="popup_button_disk">Disk wechseln</string>
<string name="popup_button_vmu_swap">VMU wechseln</string>
<string name="popup_button_options">Konfigurationsmenü</string>
<string name="popup_button_debugging">Debug-Menü</string>
<string name="popup_button_screenshot">Screenshot</string>
<string name="popup_button_exit">Emulator verlassen</string>
<string name="popup_button_clear_cache">Cache leeren</string>
<string name="popup_button_profiler_one">Profiler 1</string>
<string name="popup_button_profiler_two">Profiler 2</string>
<string name="popup_button_print_stats">Statistiken anzeigen</string>
<string name="popup_button_widescreen">Breitbild</string>
<string name="popup_button_frames_down">Frameskip -</string>
<string name="popup_button_frames_up">Frameskip +</string>
<string name="popup_button_frame_limit">Frameratebegrenzug</string>
<string name="popup_button_audio">Emulator-Sound</string>
<string name="popup_button_turbo">Turbo</string>
<string name="git_broken">GitHub Native is nicht verfügbar!</string>
</resources> </resources>

View File

@ -1,14 +1,15 @@
<resources> <resources>
<string name="menu_settings">설정</string> <string name="menu_settings">설정</string>
<string name="system_path">시스템 경로 (dc_boot.bin / dc_flash.bin 내부와 데이터 폴더의 ​​위치)</string> <string name="system_path">시스템 경로 (dc_boot.bin / dc_flash.bin 데이터 폴더의 ​​위치)</string>
<string name="browser_path">기본 시스템 경로</string> <string name="browser_path">기본 시스템 경로</string>
<string name="games_path">저장 경로 (. GDI의 위치입니다. CHD 나. CDI 이미지)</string> <string name="games_path">저장 경로 (.GDI의 위치입니다. CHD 나. CDI 이미지)</string>
<string name="game_path">기본 게임 저장</string> <string name="button_theme">버튼 테마</string>
<string name="game_path">기본 게임 저장</string>
<string name="boot_bios">부팅 드림 캐스트 바이오스</string> <string name="boot_bios">부팅 드림 캐스트 바이오스</string>
<string name="missing_bios">BIOS가 없음.드림캐스트가 작동하려면 BIOS가 필요합니다.BIOS 파일에 배치 %1$s/데이터/dc_boot.bin</string> <string name="missing_bios">실행하려면 BIOS파일이 필요합니다.BIOS 파일을 %1$s/data/dc_boot.bin 에 넣으십시오</string>
<string name="missing_flash">플래시파일 없음.드림 캐스트가 에뮬레이터가 작동하려면 플레시파일이필요합니다.%1$s/데이터/dc_flash.bin에 넣으십시오</string> <string name="missing_flash">실행하려면 플레시파일이필요합니다.%1$s/data/dc_flash.bin 에 넣으십시오</string>
<string name="require_bios">BIOS가 필요합니다</string> <string name="require_bios">BIOS가 필요합니다</string>
<string name="folder_bios">BOOT의 BIOS</string> <string name="folder_bios">BOOT의 BIOS</string>
@ -25,7 +26,7 @@
<string name="select_render">PVR 렌더링 (지금은 아무것도하지 않습니다)</string> <string name="select_render">PVR 렌더링 (지금은 아무것도하지 않습니다)</string>
<string name="default_disk">설정 기본 디스크</string> <string name="default_disk">설정 기본 디스크</string>
<string name="games_listing">가능 드림 캐스트 게임</string> <string name="games_listing">드림 캐스트 게임 목록</string>
<string name="customize_touch_controls">터치 컨트롤 사용자 지정</string> <string name="customize_touch_controls">터치 컨트롤 사용자 지정</string>
<string name="launch_editor">편집자에게 시작</string> <string name="launch_editor">편집자에게 시작</string>
@ -37,8 +38,8 @@
<string name="controller_not_connected">컨트롤러가 연결되지 않음</string> <string name="controller_not_connected">컨트롤러가 연결되지 않음</string>
<string name="controller_none_selected">선정 된 제어기가 없습니다</string> <string name="controller_none_selected">선정 된 제어기가 없습니다</string>
<string name="select">선택</string> <string name="select">선택</string>
<string name="remove"></string> <string name="remove"></string>
<string name="select_controller_title">선택 컨트롤러</string> <string name="select_controller_title">컨트롤러 선택</string>
<string name="select_controller_message">컨트롤러의 버튼을 누르면 %1$s 포트에 할당</string> <string name="select_controller_message">컨트롤러의 버튼을 누르면 %1$s 포트에 할당</string>
<string name="controller_already_in_use">이 컨트롤러는 이미 사용 중입니다!</string> <string name="controller_already_in_use">이 컨트롤러는 이미 사용 중입니다!</string>
<string name="modified_layout">사용자 정의 키 레이아웃보기 사용</string> <string name="modified_layout">사용자 정의 키 레이아웃보기 사용</string>
@ -48,10 +49,10 @@
<string name="map_keycode_title">컨트롤러를 수정</string> <string name="map_keycode_title">컨트롤러를 수정</string>
<string name="map_keycode_message">의 새로운 컨트롤러의 버튼을 눌러 %1$s</string> <string name="map_keycode_message">의 새로운 컨트롤러의 버튼을 눌러 %1$s</string>
<string name="moga_pro_connect">MOGA 프로 연결!</string> <string name="moga_pro_connect">MOGA 프로 연결!</string>
<string name="moga_connect">MOGA 연결!</string> <string name="moga_connect">MOGA 연결!</string>
<string name="about_text">reicast는 드림 캐스트 에뮬레이터</string> <string name="about_text">reicast는 드림 캐스트 에뮬레이터입니다.</string>
<string name="revision_text">버전: %1$s [%2$s]</string> <string name="revision_text">버전: %1$s [%2$s]</string>
<string-array name="controllers"> <string-array name="controllers">
@ -65,10 +66,45 @@
<string name="settings">설정</string> <string name="settings">설정</string>
<string name="paths">경로</string> <string name="paths">경로</string>
<string name="input">입력</string> <string name="input">입력</string>
<string name="about"></string> <string name="about">정보</string>
<string name="rateme">저를 평가 해</string> <string name="rateme">별점 평가</string>
<string name="textOn">ON</string> <string name="textOn">ON</string>
<string name="textOff">OFF</string> <string name="textOff">OFF</string>
<string name="cancel">취소</string>
<string name="dismiss">Dismiss</string>
<string name="manual">Manual</string>
<string name="options">옵션</string>
<string name="cloudInfos">With this tool you can upload/download your VMUs to/from Dropbox, in order to sync them with all your devices!</string>
<string name="uploadWarning">주의: 업로드하면 드롭박스에있는 VMUs파일을 덮어쓰게 됩니다. 실행전에 VMUs파일을 다른곳에 백업하세요! </string>
<string name="downloadWarning">주의:VMUs파일을 드롭박스에서 다운받아서 덮어쓰게 됩니다. 실행전에 VMUs파일을 다른곳에 백업하세요! </string>
<string name="uploadVMU">VMU 올리기</string>
<string name="downloadVMU">VMU 내려받기</string>
<string name="platform">Copying logcat content to clipboard\nPlease paste in the issue report</string>
<string name="log_saved">Log saved to \"Files Dir\" path</string>
<!-- Onscreen Menu -->
<string name="popup_button_back">뒤로</string>
<string name="popup_button_disk">Disk Swap</string>
<string name="popup_button_vmu_swap">VMU Swap</string>
<string name="popup_button_options">설정 메뉴</string>
<string name="popup_button_debugging">디버그 메뉴</string>
<string name="popup_button_screenshot">스크린샷</string>
<string name="popup_button_exit">종료</string>
<string name="popup_button_clear_cache">캐시 삭제</string>
<string name="popup_button_profiler_one">Profiler 1</string>
<string name="popup_button_profiler_two">Profiler 2</string>
<string name="popup_button_print_stats">Print Stats</string>
<string name="popup_button_widescreen">넓은화면</string>
<string name="popup_button_frames_down">프레임스킵 -</string>
<string name="popup_button_frames_up">프레임스킵 +</string>
<string name="popup_button_frame_limit">프레임 제한</string>
<string name="popup_button_audio">소리</string>
<string name="popup_button_turbo">가속</string>
<string name="git_broken">GitHub Native is unavailable!</string>
</resources> </resources>

View File

@ -2,10 +2,12 @@
<string name="menu_settings">Configurações</string> <string name="menu_settings">Configurações</string>
<string name="system_path">Diretório do sistema (localização do diretório de dados com os arquivos dc_boot.bin / dc_flash.bin)</string> <string name="system_path">Diretório da BIOS (local dos arquivos dc_boot.bin/dc_flash.bin)</string>
<string name="browser_path">Diretório padrão de jogos</string> <string name="browser_path">Diretório padrão de jogos</string>
<string name="games_path">Caminho do armazenamento (local das imagens .gdi, .chd ou .cdi)</string> <string name="games_path">Diretório dos jogos (local das imagens .gdi, .chd ou .cdi)</string>
<string name="game_path">Diretório padrão de jogos</string> <string name="button_theme">Tema dos botões na tela</string>
<string name="game_path">Diretório padrão de jogos</string>
<string name="config_home">Por favor configure um diretório principal.</string> <string name="config_home">Por favor configure um diretório principal.</string>
<string name="config_data">Por favor mova a BIOS para %1$s/data/</string> <string name="config_data">Por favor mova a BIOS para %1$s/data/</string>
<string name="config_game">Por favor configure o diretório dos jogos.</string> <string name="config_game">Por favor configure o diretório dos jogos.</string>
@ -27,6 +29,7 @@
<string name="optimization_opts">Opções de Otimização e Depuração</string> <string name="optimization_opts">Opções de Otimização e Depuração</string>
<string name="experimental_opts">Experimental (Pode causar problemas)</string> <string name="experimental_opts">Experimental (Pode causar problemas)</string>
<string name="select_reios">Usar reios BIOS</string>
<string name="select_bios">Região da BIOS (dc_flash[X].bin)</string> <string name="select_bios">Região da BIOS (dc_flash[X].bin)</string>
<string name="select_details">Habilitar detalhes do jogo</string> <string name="select_details">Habilitar detalhes do jogo</string>
<string name="select_native">Modo nativo [Sem OSD]</string> <string name="select_native">Modo nativo [Sem OSD]</string>
@ -45,7 +48,7 @@
<string name="select_sound">Desabilitar Som do Emulador</string> <string name="select_sound">Desabilitar Som do Emulador</string>
<string name="select_depth">Profundidade da Renderização</string> <string name="select_depth">Profundidade da Renderização</string>
<string name="select_force_gpu">Forçar Configurações GPU v6</string> <string name="select_force_gpu">Forçar Configurações GPU v6</string>
<string name="default_disk">Definir disco padrão</string> <string name="default_disk">Disco padrão</string>
<string name="games_listing">Lista de jogos</string> <string name="games_listing">Lista de jogos</string>
@ -54,7 +57,7 @@
<string name="disk_loading">Carregando Informações do Disco</string> <string name="disk_loading">Carregando Informações do Disco</string>
<string name="report_issue">Falha Anterior Detectada</string> <string name="report_issue">Falha Anterior Detectada</string>
<string name="bios_config">Falha ao Configurar!</string> <string name="bios_config">Falha ao configurar!</string>
<string name="customize_touch_controls">Costumizar controles de toque</string> <string name="customize_touch_controls">Costumizar controles de toque</string>
<string name="launch_editor">Iniciar editor</string> <string name="launch_editor">Iniciar editor</string>

View File

@ -22,8 +22,7 @@
<string name="missing_flash">The Dreamcast Flash is missing. A dump of the Dreamcast Flash is required for this emulator to work. Make sure the Flash file is named "dc_flash.bin" and is in %1$s/data/dc_flash.bin</string> <string name="missing_flash">The Dreamcast Flash is missing. A dump of the Dreamcast Flash is required for this emulator to work. Make sure the Flash file is named "dc_flash.bin" and is in %1$s/data/dc_flash.bin</string>
<string name="require_bios">You have to provide a Dreamcast BIOS.</string> <string name="require_bios">You have to provide a Dreamcast BIOS.</string>
<string name="data_folder">The current data folder is assumed.</string> <string name="data_folder">The current data folder is assumed.</string>
<string name="emu_crash">Emulator Error!</string> <string name="emu_crash">Emulator Error:\n %1$s</string>
<string name="emu_toast">Emulator Error:\n %1$s</string>
<string name="folder_bios">Boot BIOS</string> <string name="folder_bios">Boot BIOS</string>
<string name="folder_select">Select current folder</string> <string name="folder_select">Select current folder</string>

View File

@ -31,6 +31,9 @@ public class GenerateLogs extends AsyncTask<String, Integer, String> {
public static final String IC = "Ice Cream Sandwich"; public static final String IC = "Ice Cream Sandwich";
public static final String JB = "JellyBean"; public static final String JB = "JellyBean";
public static final String KK = "KitKat"; public static final String KK = "KitKat";
public static final String LP = "L Preview";
public static final String LL = "Lollipop";
public static final String NL = "New / No Label";
public static final String NF = "Not Found"; public static final String NF = "Not Found";
private String unHandledIOE; private String unHandledIOE;
@ -56,7 +59,9 @@ public class GenerateLogs extends AsyncTask<String, Integer, String> {
s += "\r\n"; s += "\r\n";
if (String.valueOf(build_sdk) != null) { if (String.valueOf(build_sdk) != null) {
String build_version = NF; String build_version = NF;
if (build_sdk >= 4 && build_sdk < 7) { if (String.valueOf(build_sdk).equals("L")) {
build_version = "LP";
} else if (build_sdk >= 4 && build_sdk < 7) {
build_version = DN; build_version = DN;
} else if (build_sdk == 7) { } else if (build_sdk == 7) {
build_version = EC; build_version = EC;
@ -70,8 +75,12 @@ public class GenerateLogs extends AsyncTask<String, Integer, String> {
build_version = IC; build_version = IC;
} else if (build_sdk >= 16 && build_sdk < 19) { } else if (build_sdk >= 16 && build_sdk < 19) {
build_version = JB; build_version = JB;
} else if (build_sdk >= 19) { } else if (build_sdk >= 19 && build_sdk < 21) {
build_version = KK; build_version = KK;
} else if (build_sdk >= 21 && build_sdk < 22) {
build_version = LL;
} else if (build_sdk >= 22) {
build_version = NL;
} }
s += build_version + " (" + build_sdk + ")"; s += build_version + " (" + build_sdk + ")";
} else { } else {

View File

@ -10,9 +10,7 @@ import javax.microedition.khronos.opengles.GL10;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.graphics.Paint; import android.graphics.Paint;
@ -694,22 +692,9 @@ public class GL2JNIView extends GLSurfaceView
handler.post(new Runnable() { handler.post(new Runnable() {
public void run() { public void run() {
Log.d(context.getApplicationContext().getPackageName(), msg); Log.d(context.getApplicationContext().getPackageName(), msg);
// MainActivity.showToastMessage(context, MainActivity.showToastMessage(context,
// context.getString(R.string.emu_toast, msg), context.getString(R.string.emu_crash, msg),
// Toast.LENGTH_LONG); Toast.LENGTH_LONG);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(context);
alertDialogBuilder.setTitle(context.getString(R.string.emu_crash));
alertDialogBuilder
.setMessage(msg)
.setCancelable(false)
.setPositiveButton("Okay...",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int id) {
// if this button is clicked, close current activity
// MainActivity.this.finish();
}
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
} }
}); });
} }