diff --git a/app/build.gradle b/app/build.gradle
index a49ff61..c0b30e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -33,4 +33,11 @@ dependencies {
compile "org.jetbrains.kotlin:kotlin-reflect:0.12.213"
compile 'com.jakewharton:kotterknife:0.1.0-SNAPSHOT'
compile 'com.facebook.stetho:stetho:1.1.1'
+ compile 'com.google.guava:guava:18.0'
+
+ testCompile 'junit:junit:4.12'
+ testCompile 'org.mockito:mockito-core:1.10.19'
+ testCompile 'org.hamcrest:hamcrest-integration:1.3'
+ testCompile 'org.hamcrest:hamcrest-core:1.3'
+ testCompile 'org.hamcrest:hamcrest-library:1.3'
}
diff --git a/app/src/androidTest/java/felipecsl/com/emu6502/ApplicationTest.java b/app/src/androidTest/java/felipecsl/com/emu6502/ApplicationTest.java
deleted file mode 100644
index 336f7f7..0000000
--- a/app/src/androidTest/java/felipecsl/com/emu6502/ApplicationTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package felipecsl.com.emu6502;
-
-import android.app.Application;
-import android.test.ApplicationTestCase;
-
-/**
- * Testing Fundamentals
- */
-public class ApplicationTest extends ApplicationTestCase {
-
- public ApplicationTest() {
- super(Application.class);
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/android/emu6502/Emu6502Application.java b/app/src/main/java/android/emu6502/Emu6502Application.java
deleted file mode 100644
index 31d5dbb..0000000
--- a/app/src/main/java/android/emu6502/Emu6502Application.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package android.emu6502;
-
-import android.app.Application;
-
-import com.facebook.stetho.Stetho;
-
-public class Emu6502Application extends Application {
-
- @Override public void onCreate() {
- super.onCreate();
- Stetho.initialize(
- Stetho.newInitializerBuilder(this)
- .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
- .build());
- }
-}
diff --git a/app/src/main/kotlin/android/emu6502/Assembler.kt b/app/src/main/kotlin/android/emu6502/Assembler.kt
index 2a0dd80..8e4b9d6 100644
--- a/app/src/main/kotlin/android/emu6502/Assembler.kt
+++ b/app/src/main/kotlin/android/emu6502/Assembler.kt
@@ -15,8 +15,7 @@ class Assembler(private var labels: Labels, private var memory: Memory,
fun assembleCode(lines: List) {
lines.forEachIndexed { i, line ->
if (!assembleLine(line)) {
- val str = line.replace("<", "<").replace(">", ">")
- throw RuntimeException("**Syntax error line " + (i + 1) + ": " + str + "**")
+ throw RuntimeException("**Syntax error line " + (i + 1) + ": " + line + "**")
}
}
// set a null byte at the end of the code
@@ -121,6 +120,10 @@ class Assembler(private var labels: Labels, private var memory: Memory,
return false
}
+ fun hexdump(): String {
+ return memory.format(0x600, codeLen)
+ }
+
private fun DCB(param: String): Boolean {
throw UnsupportedOperationException(
"not implemented") //To change body of created functions use File | Settings | File Templates.
@@ -289,7 +292,7 @@ class Assembler(private var labels: Labels, private var memory: Memory,
// Try to parse the given parameter as a byte operand.
// Returns the (positive) value if successful, otherwise -1
private fun tryParseByteOperand(param: String): Int {
- var value: Int = 0
+ var value: Int = -1
var parameter = param
if (parameter.matches("^\\w+$".toRegex())) {
@@ -321,7 +324,7 @@ class Assembler(private var labels: Labels, private var memory: Memory,
}
private fun tryParseWordOperand(param: String): Int {
- var value: Int = 0
+ var value: Int = -1
var parameter = param
if (parameter.matches("^\\w+$".toRegex())) {
diff --git a/app/src/main/kotlin/android/emu6502/CPU.kt b/app/src/main/kotlin/android/emu6502/CPU.kt
index be5aa88..dd45650 100644
--- a/app/src/main/kotlin/android/emu6502/CPU.kt
+++ b/app/src/main/kotlin/android/emu6502/CPU.kt
@@ -139,8 +139,4 @@ class CPU(private val memory: Memory) {
fun popWord(): Int {
return popByte() + popByte().shl(8)
}
-
- fun Int.toHexString(): String {
- return Integer.toHexString(this)
- }
}
\ No newline at end of file
diff --git a/app/src/main/kotlin/android/emu6502/Emu6502Application.kt b/app/src/main/kotlin/android/emu6502/Emu6502Application.kt
new file mode 100644
index 0000000..771887a
--- /dev/null
+++ b/app/src/main/kotlin/android/emu6502/Emu6502Application.kt
@@ -0,0 +1,14 @@
+package android.emu6502
+
+import android.app.Application
+import com.facebook.stetho.Stetho
+
+public class Emu6502Application : Application() {
+ override fun onCreate() {
+ super.onCreate()
+ Stetho.initialize(Stetho.newInitializerBuilder(this)
+ .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
+ .build())
+ }
+}
+
diff --git a/app/src/main/kotlin/android/emu6502/Memory.kt b/app/src/main/kotlin/android/emu6502/Memory.kt
index 83d0c97..82e229e 100644
--- a/app/src/main/kotlin/android/emu6502/Memory.kt
+++ b/app/src/main/kotlin/android/emu6502/Memory.kt
@@ -1,5 +1,7 @@
package android.emu6502
+import java.util.*
+
class Memory(private val display: Display) {
private val mem = IntArray(65536)
@@ -17,4 +19,26 @@ class Memory(private val display: Display) {
display.updatePixel(addr)
}
}
+
+ fun format(start: Int, length: Int): String {
+ var i = 0
+ var n: Int
+ val dump = StringBuilder()
+
+ while (i < length) {
+ if (i.and(15) == 0) {
+ if (i > 0) {
+ dump.append("\n")
+ }
+ n = start + i
+ dump.append(n.shr(8).and(0xff).toHexString())
+ dump.append(n.and(0xff).toHexString())
+ dump.append(": ")
+ }
+ dump.append(get(start + i).toHexString())
+ dump.append(" ")
+ i++
+ }
+ return dump.toString().trim()
+ }
}
diff --git a/app/src/main/kotlin/android/emu6502/Utils.kt b/app/src/main/kotlin/android/emu6502/Utils.kt
new file mode 100644
index 0000000..0fdccb0
--- /dev/null
+++ b/app/src/main/kotlin/android/emu6502/Utils.kt
@@ -0,0 +1,5 @@
+package android.emu6502
+
+fun Int.toHexString(): String {
+ return java.lang.String.format("%02X", this);
+}
\ No newline at end of file
diff --git a/app/src/test/java/android/emu6502/AssemblerTest.java b/app/src/test/java/android/emu6502/AssemblerTest.java
new file mode 100644
index 0000000..5cd8358
--- /dev/null
+++ b/app/src/test/java/android/emu6502/AssemblerTest.java
@@ -0,0 +1,26 @@
+package android.emu6502;
+
+import com.google.common.collect.ImmutableList;
+
+import org.junit.Test;
+
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.junit.Assert.assertThat;
+
+public class AssemblerTest {
+
+ @Test public void testAssembler() {
+ List lines = ImmutableList.of(
+ "LDA #$01",
+ "STA $0200",
+ "LDA #$05",
+ "STA $0201",
+ "LDA #$08",
+ "STA $0202");
+ Assembler assembler = new Assembler(new Labels(), new Memory(new Display()), new Symbols());
+ assembler.assembleCode(lines);
+ assertThat(assembler.hexdump(), equalTo("0600: A9 01 8D 00 02 A9 05 8D 01 02 A9 08 8D 02 02"));
+ }
+}