diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/ByteLike.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/ByteLike.scala
new file mode 100644
index 0000000..7c2a3c9
--- /dev/null
+++ b/scratchpad/src/main/scala/com/htmlism/scratchpad/ByteLike.scala
@@ -0,0 +1,4 @@
+package com.htmlism.scratchpad
+
+// anything can be encoded as a byte
+trait ByteLike[A] {}
diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/Load.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/Load.scala
index a61a3aa..7c1d21a 100644
--- a/scratchpad/src/main/scala/com/htmlism/scratchpad/Load.scala
+++ b/scratchpad/src/main/scala/com/htmlism/scratchpad/Load.scala
@@ -43,6 +43,11 @@ case class AndThen2[A, B](x: Asm2[A, B], y: Asm2[A, B]) extends Asm2[A, B]:
def xs: List[String] =
x.xs ++ y.xs
+trait Asm3[A, B, C]:
+ def xs: List[String]
+
+case class Asm3Instructions[A, B, C](xs: List[String]) extends Asm3[A, B, C]
+
case class R[A]()
// TODO needs evidence that it is a storable target of one thing
diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/Move.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/Move.scala
new file mode 100644
index 0000000..b3e59ad
--- /dev/null
+++ b/scratchpad/src/main/scala/com/htmlism/scratchpad/Move.scala
@@ -0,0 +1,14 @@
+package com.htmlism.scratchpad
+
+// https://mads.atari8.info/mads_eng.html#_mv
+object Move:
+ def const[R: Register, A: WriteLease, X: ByteLike](x: X): Asm2[R, A] =
+ // TODO freeze this into a data structure or a composition of data structures of load and store
+ Asm2Instructions(List(""))
+
+ def from[R: Register, A: ReadLease, B: WriteLease]: Asm3[R, A, B] =
+ Asm3Instructions(List(""))
+
+ object Word:
+ def const[R: Register, A: WriteLease, X: WordLike](x: X): Asm2[R, A] =
+ Asm2Instructions(List(""))
diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/ReadLease.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/ReadLease.scala
new file mode 100644
index 0000000..cb0a0ab
--- /dev/null
+++ b/scratchpad/src/main/scala/com/htmlism/scratchpad/ReadLease.scala
@@ -0,0 +1,3 @@
+package com.htmlism.scratchpad
+
+trait ReadLease[A] {}
diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/WordLike.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/WordLike.scala
new file mode 100644
index 0000000..6ddbd4e
--- /dev/null
+++ b/scratchpad/src/main/scala/com/htmlism/scratchpad/WordLike.scala
@@ -0,0 +1,4 @@
+package com.htmlism.scratchpad
+
+// anything can be encoded as a word (two bytes)
+trait WordLike[A] {}
diff --git a/scratchpad/src/main/scala/com/htmlism/scratchpad/WriteLease.scala b/scratchpad/src/main/scala/com/htmlism/scratchpad/WriteLease.scala
new file mode 100644
index 0000000..bae7f38
--- /dev/null
+++ b/scratchpad/src/main/scala/com/htmlism/scratchpad/WriteLease.scala
@@ -0,0 +1,3 @@
+package com.htmlism.scratchpad
+
+trait WriteLease[A] {}
diff --git a/scratchpad/src/test/scala/com/htmlism/scratchpad/MoveSuite.scala b/scratchpad/src/test/scala/com/htmlism/scratchpad/MoveSuite.scala
index a660c46..bba26e2 100644
--- a/scratchpad/src/test/scala/com/htmlism/scratchpad/MoveSuite.scala
+++ b/scratchpad/src/test/scala/com/htmlism/scratchpad/MoveSuite.scala
@@ -3,14 +3,18 @@ package com.htmlism.scratchpad
import weaver._
object MoveSuite extends FunSuite:
- test("move constant") {
+ test("TODO move constant") {
success
}
- test("move register") {
+ test("TODO move register") {
success
}
- test("move register, indexed") {
+ test("TODO move register, indexed") {
+ success
+ }
+
+ test("TODO move wide") {
success
}