From 58f15e85e800637f30f337aa38f1c43d9d9f75be Mon Sep 17 00:00:00 2001 From: Mark Canlas Date: Wed, 26 Aug 2020 00:56:55 -0400 Subject: [PATCH] add more devices --- .../{ReadWriteDevice.scala => ReadWriteLocation.scala} | 9 ++++++--- .../scala/com/htmlism/mos6502/dsl/VolatileDevice.scala | 3 +++ .../com/htmlism/mos6502/dsl/snake/Easy6502Spec.scala | 8 ++++++-- 3 files changed, 15 insertions(+), 5 deletions(-) rename src/main/scala/com/htmlism/mos6502/dsl/{ReadWriteDevice.scala => ReadWriteLocation.scala} (56%) 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)