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 }