mirror of
https://github.com/felipecsl/6502Android.git
synced 2024-06-08 06:29:32 +00:00
Implements display view
This commit is contained in:
parent
4839b4b52f
commit
3c25abc55b
|
@ -1,6 +1,58 @@
|
|||
package android.emu6502
|
||||
|
||||
final class Display {
|
||||
fun updatePixel(addr: Int) {
|
||||
import android.content.Context
|
||||
import android.graphics.Canvas
|
||||
import android.graphics.Color
|
||||
import android.graphics.Paint
|
||||
import android.graphics.Point
|
||||
import android.util.AttributeSet
|
||||
import android.util.Log
|
||||
import android.view.View
|
||||
import java.util.ArrayList
|
||||
|
||||
open class Display : View {
|
||||
private val numX = 32
|
||||
private val numY = 32
|
||||
|
||||
private val palette = arrayOf(
|
||||
"#000000", "#ffffff", "#880000", "#aaffee",
|
||||
"#cc44cc", "#00cc55", "#0000aa", "#eeee77",
|
||||
"#dd8855", "#664400", "#ff7777", "#333333",
|
||||
"#777777", "#aaff66", "#0088ff", "#bbbbbb")
|
||||
|
||||
private val drawingCache = ArrayList<Pixel>()
|
||||
private val paint: Paint
|
||||
private val bgPaint: Paint
|
||||
|
||||
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {
|
||||
paint = Paint()
|
||||
bgPaint = Paint()
|
||||
bgPaint.setColor(Color.BLACK);
|
||||
}
|
||||
|
||||
open fun updatePixel(addr: Int, value: Int) {
|
||||
val color = palette[value]
|
||||
val x = (addr - 0x200) % 32
|
||||
val y = Math.floor(((addr - 0x200) / 32).toDouble())
|
||||
drawingCache.add(Pixel(Point(x.toInt(), y.toInt()), Color.parseColor(color)))
|
||||
invalidate()
|
||||
}
|
||||
|
||||
override fun onDraw(canvas: Canvas) {
|
||||
val pixelSize = getWidth() / numX
|
||||
|
||||
canvas.drawRect(0f, 0f, getWidth().toFloat(), getHeight().toFloat(), bgPaint)
|
||||
|
||||
for (pixel in drawingCache) {
|
||||
val right = (pixel.point.x * pixelSize).toFloat()
|
||||
val top = (pixel.point.y * pixelSize).toFloat()
|
||||
paint.setColor(pixel.color)
|
||||
canvas.drawRect(right, top, right + pixelSize, top + pixelSize, paint)
|
||||
}
|
||||
|
||||
drawingCache.clear()
|
||||
}
|
||||
|
||||
class Pixel(val point: Point, val color: Int) {
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,7 @@ package android.emu6502
|
|||
|
||||
import android.emu6502.instructions.Symbols
|
||||
|
||||
final class Emulator {
|
||||
val display = Display()
|
||||
final class Emulator(display: Display) {
|
||||
val memory = Memory(display)
|
||||
val cpu = CPU(memory)
|
||||
val assembler = Assembler(memory, Symbols())
|
||||
|
|
|
@ -15,8 +15,8 @@ class Memory(private val display: Display) {
|
|||
|
||||
fun storeByte(addr: Int, value: Int) {
|
||||
set(addr, value.and(0xff))
|
||||
if ((addr >= 0x200) && (addr <= 0x5ff)) {
|
||||
display.updatePixel(addr)
|
||||
if (addr >= 0x200 && addr <= 0x5ff) {
|
||||
display.updatePixel(addr, mem[addr].and(0x0f))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
package android.emu6502.app
|
||||
|
||||
import android.emu6502.Display
|
||||
import android.emu6502.Emulator
|
||||
import android.emu6502.R
|
||||
import android.os.Bundle
|
||||
|
@ -9,6 +10,7 @@ import android.support.v7.app.AppCompatActivity
|
|||
import android.support.v7.widget.Toolbar
|
||||
import android.view.Menu
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.TextView
|
||||
import android.widget.Toast
|
||||
import butterknife.bindView
|
||||
|
@ -22,9 +24,9 @@ public class MainActivity : AppCompatActivity() {
|
|||
val txtSP: TextView by bindView(R.id.SP)
|
||||
val txtPC: TextView by bindView(R.id.PC)
|
||||
val txtFlags: TextView by bindView(R.id.PC)
|
||||
val display: Display by bindView(R.id.display)
|
||||
val txtInstructions: TextView by bindView(R.id.txtInstructions)
|
||||
val fabRun: FloatingActionButton by bindView(R.id.fabRun)
|
||||
val emulator = Emulator()
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
@ -36,6 +38,8 @@ public class MainActivity : AppCompatActivity() {
|
|||
ab.setDisplayHomeAsUpEnabled(true)
|
||||
|
||||
fabRun.setOnClickListener {
|
||||
display.setVisibility(View.VISIBLE)
|
||||
val emulator = Emulator(display)
|
||||
emulator.assembler.assembleCode(txtInstructions.getText().toString().splitBy("\n"))
|
||||
Toast.makeText(fabRun.getContext(),
|
||||
"Code assembled successfully, " + emulator.assembler.codeLen + " bytes.",
|
||||
|
|
|
@ -44,6 +44,12 @@
|
|||
android:textSize="14sp"
|
||||
android:gravity="top" />
|
||||
|
||||
<android.emu6502.Display
|
||||
android:id="@+id/display"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone"/>
|
||||
|
||||
</android.support.v7.widget.CardView>
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
@ -11,13 +11,14 @@ import java.util.List;
|
|||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
public class AssemblerTest {
|
||||
|
||||
private Assembler assembler;
|
||||
|
||||
@Before public void setUp() {
|
||||
assembler = new Assembler(new Memory(new Display()), new Symbols());
|
||||
assembler = new Assembler(new Memory(mock(Display.class)), new Symbols());
|
||||
}
|
||||
|
||||
@Test public void testSimple() {
|
||||
|
|
|
@ -11,6 +11,7 @@ import java.util.List;
|
|||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
public class CPUTest {
|
||||
|
||||
|
@ -18,7 +19,8 @@ public class CPUTest {
|
|||
private Assembler assembler;
|
||||
|
||||
@Before public void setUp() {
|
||||
Memory memory = new Memory(new Display());
|
||||
|
||||
Memory memory = new Memory(mock(Display.class));
|
||||
assembler = new Assembler(memory, new Symbols());
|
||||
cpu = new CPU(memory);
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import java.util.Collections;
|
|||
|
||||
import static org.hamcrest.CoreMatchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
public class LabelsTest {
|
||||
|
||||
|
@ -17,7 +18,7 @@ public class LabelsTest {
|
|||
|
||||
@Before public void setUp() {
|
||||
Symbols symbols = new Symbols();
|
||||
assembler = new Assembler(new Memory(new Display()), symbols);
|
||||
assembler = new Assembler(new Memory(mock(Display.class)), symbols);
|
||||
labels = new Labels(assembler, symbols);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user