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)