diff --git a/src/main/scala/com/htmlism/mos6502/dsl/ReadWriteDevice.scala b/src/main/scala/com/htmlism/mos6502/dsl/ReadWriteLocation.scala
similarity index 56%
rename from src/main/scala/com/htmlism/mos6502/dsl/ReadWriteDevice.scala
rename to src/main/scala/com/htmlism/mos6502/dsl/ReadWriteLocation.scala
index bce97cf..9661c48 100644
--- a/src/main/scala/com/htmlism/mos6502/dsl/ReadWriteDevice.scala
+++ b/src/main/scala/com/htmlism/mos6502/dsl/ReadWriteLocation.scala
@@ -2,14 +2,17 @@ package com.htmlism.mos6502.dsl
//import com.htmlism.mos6502.model._
-case class ReadWriteDevice[A](address: Address) {
+/**
+ * @tparam A The input type of the write and the output type of the read
+ */
+case class ReadWriteLocation[A](address: Address) {
def read(implicit ctx: AssemblyContext): Unit = {
val _ = ctx
// ctx.push(LDA, ev, s"write ${ev.toShow(x)} to $name ($n)")
}
- def write(implicit ctx: AssemblyContext): Unit = {
- val _ = ctx
+ def write(x: A)(implicit ctx: AssemblyContext): Unit = {
+ val _ = (x, ctx)
// ctx.push(STA, ev, s"write ${ev.toShow(x)} to $name ($n)")
}
}
diff --git a/src/main/scala/com/htmlism/mos6502/dsl/VolatileDevice.scala b/src/main/scala/com/htmlism/mos6502/dsl/VolatileDevice.scala
index 547cf65..b861c6a 100644
--- a/src/main/scala/com/htmlism/mos6502/dsl/VolatileDevice.scala
+++ b/src/main/scala/com/htmlism/mos6502/dsl/VolatileDevice.scala
@@ -2,6 +2,9 @@ package com.htmlism.mos6502.dsl
//import com.htmlism.mos6502.model._
+/**
+ * @tparam A The return type of the read
+ */
case class VolatileDevice[A](address: Address) {
def read(implicit ctx: AssemblyContext): Unit = {
val _ = ctx
diff --git a/src/test/scala/com/htmlism/mos6502/dsl/snake/Easy6502Spec.scala b/src/test/scala/com/htmlism/mos6502/dsl/snake/Easy6502Spec.scala
index 2f89966..05bccfc 100644
--- a/src/test/scala/com/htmlism/mos6502/dsl/snake/Easy6502Spec.scala
+++ b/src/test/scala/com/htmlism/mos6502/dsl/snake/Easy6502Spec.scala
@@ -68,8 +68,10 @@ class Easy6502Spec extends AnyFlatSpec with should.Matchers {
}
"snake" should "compile" in {
- val sysRandom = VolatileDevice[Int](0xfe.addr)
- val sysLastKey = VolatileDevice[AsciiValue](0xff.addr)
+ val sysRandom = VolatileDevice[Int](0xfe.z)
+ val sysLastKey = VolatileDevice[AsciiValue](0xff.z)
+ val snakeDirection = ReadWriteLocation[Direction](0x02.z)
+ val appleLocation = ReadWriteLocation[Int](0x00.z)
val initSnake =
sub("initSnake") { implicit a =>
@@ -135,6 +137,8 @@ class Easy6502Spec extends AnyFlatSpec with should.Matchers {
asm { implicit a =>
sysRandom.read
sysLastKey.read
+ snakeDirection.read
+ appleLocation.read
jump(init)
jump(loop)