diff --git a/Android/jni/apple2ix.mk b/Android/jni/apple2ix.mk index 69260623..9ce8ee01 100644 --- a/Android/jni/apple2ix.mk +++ b/Android/jni/apple2ix.mk @@ -10,9 +10,9 @@ include $(COMMON_SOURCES_MK) # ----------------------------------------------------------------------------- # Android build config -LOCAL_MODULE := apple2ix +LOCAL_MODULE := libapple2ix LOCAL_SRC_FILES := jnihooks.c -LOCAL_CFLAGS := $(APPLE2_BASE_CFLAGS) -DHEADLESS=0 -DVIDEO_OPENGL=1 -DDEBUGGER=0 +LOCAL_CFLAGS := $(APPLE2_BASE_CFLAGS) -DHEADLESS=0 LOCAL_LDLIBS := -llog -landroid -lGLESv2 -lz # Add assembly files first ... mostly for the benefit of the ARM assembler ... diff --git a/Android/jni/build.sh b/Android/jni/build.sh index a9c83eec..4455ff09 100755 --- a/Android/jni/build.sh +++ b/Android/jni/build.sh @@ -1,9 +1,43 @@ #!/bin/sh +package_id="org.deadc0de.apple2" +apple2_src_path=../../src +glue_srcs="$apple2_src_path/disk.c $apple2_src_path/misc.c $apple2_src_path/display.c $apple2_src_path/vm.c $apple2_src_path/cpu-supp.c" +do_load=0 +do_debug=0 + +usage() { + echo "$0 [--load|--debug]" + exit 0 +} + +while test "x$1" != "x"; do + case "$1" in + "--debug") + do_load=1 + do_debug=1 + ;; + + "--load") + do_load=1 + do_debug=0 + ;; + + "-h") + usage + ;; + + "--help") + usage + ;; + + esac + shift +done + set -x -apple2_src_path=../../src -glue_srcs="$apple2_src_path/disk.c $apple2_src_path/misc.c $apple2_src_path/display.c $apple2_src_path/vm.c $apple2_src_path/cpu-supp.c" +/bin/rm Android.mk if test "$(basename $0)" = "clean" ; then /bin/rm $apple2_src_path/rom.c @@ -11,26 +45,17 @@ if test "$(basename $0)" = "clean" ; then /bin/rm $apple2_src_path/x86/glue.S /bin/rm $apple2_src_path/arm/glue.S - ln -s apple2ix.mk Android.mk - ndk-build -f apple2ix.mk clean - /bin/rm Android.mk + # considered dangerous + /bin/rm -rf ../bin + /bin/rm -rf ../libs + /bin/rm -rf ../gen + /bin/rm -rf ../obj - ln -s testcpu.mk Android.mk - ndk-build -f testcpu.mk clean - /bin/rm Android.mk - - ln -s testvm.mk Android.mk - ndk-build -f testvm.mk clean - /bin/rm Android.mk - - ln -s testdisplay.mk Android.mk - ndk-build -f testdisplay.mk clean - /bin/rm Android.mk - - ln -s testdisk.mk Android.mk - ndk-build -f testdisk.m clean - /bin/rm Android.mk + exit 0 +fi +if test "$(basename $0)" = "uninstall" ; then + adb uninstall $package_id exit 0 fi @@ -52,31 +77,28 @@ $apple2_src_path/arm/genglue $glue_srcs > $apple2_src_path/arm/glue.S if test "$(basename $0)" = "testcpu" ; then ln -s testcpu.mk Android.mk - ndk-build V=1 NDK_DEBUG=1 && ant -f ../build.xml debug elif test "$(basename $0)" = "testvm" ; then ln -s testvm.mk Android.mk - ndk-build V=1 NDK_DEBUG=1 && ant -f ../build.xml debug elif test "$(basename $0)" = "testdisplay" ; then ln -s testdisplay.mk Android.mk - ndk-build V=1 NDK_DEBUG=1 && ant -f ../build.xml debug elif test "$(basename $0)" = "testdisk" ; then ln -s testdisk.mk Android.mk - ndk-build V=1 NDK_DEBUG=1 && ant -f ../build.xml debug else ln -s apple2ix.mk Android.mk - ndk-build V=1 NDK_DEBUG=1 && ant -f ../build.xml debug fi -if test "$(basename $0)" = "run" ; then - ant -f ../build.xml install && \ - adb shell am start -a android.intent.action.MAIN -n org.deadc0de.apple2/.Apple2Activity +ndk-build V=1 NDK_DEBUG=1 && \ + ant -f ../build.xml debug + +if test "x$do_load" = "x1" ; then + ant -f ../build.xml debug install fi -if test "$(basename $0)" = "debug" ; then - echo "TODO FIXME ..." +if test "x$do_debug" = "x1" ; then + ( cd .. && ndk-gdb.py --force --start ) +elif test "x$do_load" = "x1" ; then + adb shell am start -a android.intent.action.MAIN -n $package_id/.Apple2Activity fi -/bin/rm Android.mk - set +x diff --git a/Android/jni/jnihooks.c b/Android/jni/jnihooks.c index d1dc2744..7e00c6ce 100644 --- a/Android/jni/jnihooks.c +++ b/Android/jni/jnihooks.c @@ -1,5 +1,5 @@ /* - * Apple // emulator for *nix + * Apple // emulator for *nix * * This software package is subject to the GNU General Public License * version 2 or later (your choice) as published by the Free Software @@ -27,6 +27,37 @@ int main(int argc, char **argv) { void Java_org_deadc0de_apple2_Apple2Activity_nativeOnCreate(JNIEnv *env, jobject obj) { LOG("%s", "native onCreate..."); + +#if !TESTING + // TODO ... +#else + char *local_argv[] = { + "-f", + NULL + }; + int local_argc = 0; + for (char **p = &local_argv[0]; *p != NULL; p++) { + ++local_argc; + } + +#if defined(TEST_CPU) + extern int test_cpu(int, char *[]); + test_cpu(local_argc, local_argv); +#elif defined(TEST_VM) + extern int test_vm(int, char *[]); + test_vm(local_argc, local_argv); +#elif defined(TEST_DISPLAY) + extern int test_display(int, char *[]); + test_display(local_argc, local_argv); +#elif defined(TEST_DISK) + extern int test_disk(int, char *[]); + test_disk(local_argc, local_argv); +#else +# error "OOPS, no tests specified" +#endif + + exit(0); +#endif } void Java_org_deadc0de_apple2_Apple2Activity_nativeOnResume(JNIEnv *env, jobject obj) { diff --git a/Android/jni/sources.mk b/Android/jni/sources.mk index cda251cf..c94be902 100644 --- a/Android/jni/sources.mk +++ b/Android/jni/sources.mk @@ -24,12 +24,12 @@ APPLE2_AUDIO_SRC = \ APPLE2_META_SRC = \ $(APPLE2_SRC_PATH)/meta/debug.c $(APPLE2_SRC_PATH)/meta/debugger.c $(APPLE2_SRC_PATH)/meta/opcodes.c \ - $(APPLE2_SRC_PATH)/test/sha.c + $(APPLE2_SRC_PATH)/test/sha1.c APPLE2_MAIN_SRC = \ $(APPLE2_SRC_PATH)/font.c $(APPLE2_SRC_PATH)/rom.c $(APPLE2_SRC_PATH)/misc.c $(APPLE2_SRC_PATH)/display.c $(APPLE2_SRC_PATH)/vm.c \ $(APPLE2_SRC_PATH)/timing.c $(APPLE2_SRC_PATH)/zlib-helpers.c $(APPLE2_SRC_PATH)/joystick.c $(APPLE2_SRC_PATH)/keys.c \ $(APPLE2_SRC_PATH)/disk.c $(APPLE2_SRC_PATH)/cpu-supp.c -APPLE2_BASE_CFLAGS := -DAPPLE2IX=1 -DPACKAGE_NAME="\"$(PACKAGE_NAME)\"" -DCONFIG_DATADIR="\"/data/data/$(PACKAGE_IDENTIFIER)\"" -std=gnu11 -I$(APPLE2_SRC_PATH) +APPLE2_BASE_CFLAGS := -DAPPLE2IX=1 -DVIDEO_OPENGL=1 -DDEBUGGER=1 -DPACKAGE_NAME="\"$(PACKAGE_NAME)\"" -DCONFIG_DATADIR="\"/data/data/$(PACKAGE_IDENTIFIER)\"" -std=gnu11 -I$(APPLE2_SRC_PATH) diff --git a/Android/jni/testcpu.mk b/Android/jni/testcpu.mk index 3e729f01..b700e291 100644 --- a/Android/jni/testcpu.mk +++ b/Android/jni/testcpu.mk @@ -4,15 +4,15 @@ include $(CLEAR_VARS) PACKAGE_IDENTIFIER := "org.deadc0de.apple2" PACKAGE_NAME := "apple2ix" -COMMON_SOURCES_MK := sources.mk +COMMON_SOURCES_MK := $(LOCAL_PATH)/sources.mk include $(COMMON_SOURCES_MK) # ----------------------------------------------------------------------------- # Android build config -LOCAL_MODULE := apple2ix -LOCAL_SRC_FILES := $(APPLE2_SRC_PATH)/test/testcommon.c $(APPLE2_SRC_PATH)/test/testcpu.c -LOCAL_CFLAGS := $(APPLE2_BASE_CFLAGS) -DHEADLESS=1 -DDEBUGGER=1 +LOCAL_MODULE := libapple2ix +LOCAL_SRC_FILES := jnihooks.c $(APPLE2_SRC_PATH)/test/testcommon.c $(APPLE2_SRC_PATH)/test/testcpu.c +LOCAL_CFLAGS := $(APPLE2_BASE_CFLAGS) -DTEST_CPU -DTESTING=1 -DHEADLESS=1 LOCAL_LDLIBS := -llog -landroid -lGLESv2 -lz # Add assembly files first ... mostly for the benefit of the ARM assembler ... @@ -22,11 +22,11 @@ else LOCAL_SRC_FILES += $(APPLE2_ARM_SRC) endif -LOCAL_SRC_FILES += $(APPLE2_MAIN_SRC) $(APPLE2_META_SRC) +LOCAL_SRC_FILES += $(APPLE2_MAIN_SRC) $(APPLE2_META_SRC) $(APPLE2_VIDEO_SRC) # Build a shared library and let Java/Dalvik drive -#include $(BUILD_SHARED_LIBRARY) +include $(BUILD_SHARED_LIBRARY) # --OR-- Build an executable so native can drive this show -include $(BUILD_EXECUTABLE) +#include $(BUILD_EXECUTABLE) diff --git a/Android/jni/run b/Android/jni/uninstall similarity index 100% rename from Android/jni/run rename to Android/jni/uninstall