From 405a6d5b5fad2d0de3af8c98768ea8b20d626ffc Mon Sep 17 00:00:00 2001 From: Mark Canlas Date: Mon, 19 Sep 2022 16:50:23 -0400 Subject: [PATCH] but both addresses --- .../htmlism/scratchpad/AbsoluteAddress.scala | 3 --- .../htmlism/scratchpad/ZeroPageAddress.scala | 3 --- .../com/htmlism/scratchpad/addresses.scala | 23 +++++++++++-------- .../htmlism/scratchpad/syntax/package.scala | 6 ++--- 4 files changed, 17 insertions(+), 18 deletions(-) delete mode 100644 scratchpad/src/main/scala/com/htmlism/scratchpad/AbsoluteAddress.scala delete mode 100644 scratchpad/src/main/scala/com/htmlism/scratchpad/ZeroPageAddress.scala diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/AbsoluteAddress.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/AbsoluteAddress.scala deleted file mode 100644 index dd1615b..0000000 --- a/scratchpad/src/main/scala/com/htmlism/scratchpad/AbsoluteAddress.scala +++ /dev/null @@ -1,3 +0,0 @@ -package com.htmlism.scratchpad - -case class AbsoluteAddress(n: Int) diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/ZeroPageAddress.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/ZeroPageAddress.scala deleted file mode 100644 index 142b49a..0000000 --- a/scratchpad/src/main/scala/com/htmlism/scratchpad/ZeroPageAddress.scala +++ /dev/null @@ -1,3 +0,0 @@ -package com.htmlism.scratchpad - -case class ZeroPageAddress(n: Int) diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/addresses.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/addresses.scala index 5c7a05c..45f5870 100644 --- a/scratchpad/src/main/scala/com/htmlism/scratchpad/addresses.scala +++ b/scratchpad/src/main/scala/com/htmlism/scratchpad/addresses.scala @@ -1,17 +1,22 @@ package com.htmlism.scratchpad -case class ZeroPageAddress(n: Int, alias: String) +sealed trait Address: + def n: Int -case class GlobalAddress(n: Int, alias: String) + def alias: String -sealed trait ReadAddress: - def addr: ZeroPageAddress +case class ZeroPageAddress(n: Int, alias: String) extends Address -sealed trait WriteAddress: - def addr: ZeroPageAddress +case class AbsoluteAddress(n: Int, alias: String) extends Address -case class Volatile(addr: ZeroPageAddress) extends ReadAddress +sealed trait ReadAddress[A <: Address]: + def addr: A -case class ReadWriteAddress(addr: ZeroPageAddress) extends ReadAddress with WriteAddress +sealed trait WriteAddress[A <: Address]: + def addr: A -case class WriteOnlyAddress(addr: ZeroPageAddress) extends WriteAddress +case class Volatile[A <: Address](addr: A) extends ReadAddress[A] + +case class ReadWriteAddress[A <: Address](addr: A) extends ReadAddress[A] with WriteAddress[A] + +case class WriteOnlyAddress[A <: Address](addr: A) extends WriteAddress[A] diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/syntax/package.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/syntax/package.scala index a571bfe..eb620c8 100644 --- a/scratchpad/src/main/scala/com/htmlism/scratchpad/syntax/package.scala +++ b/scratchpad/src/main/scala/com/htmlism/scratchpad/syntax/package.scala @@ -1,11 +1,11 @@ package com.htmlism.scratchpad package object syntax: - implicit class WriteRegisterOps(reg: WriteAddress): - def write[A: Loadable](x: A): PartiallyAppliedWrite[A] = + implicit class WriteRegisterOps[B <: Address](reg: WriteAddress[B]): + def write[A: Loadable](x: A): PartiallyAppliedWrite[A, B] = new PartiallyAppliedWrite(reg, x) - class PartiallyAppliedWrite[A: Loadable](reg: WriteAddress, x: A): + class PartiallyAppliedWrite[A: Loadable, B <: Address](reg: WriteAddress[B], x: A): def apply[B: Register]: String = val literal = summon[Loadable[A]].show(x)