seal off asm adt

This commit is contained in:
Mark Canlas 2022-11-20 15:02:34 -05:00
parent d800a89f98
commit 304dbbed19
3 changed files with 12 additions and 14 deletions

View File

@ -2,14 +2,13 @@ package com.htmlism.scratchpad
object Load:
def constA[B: Encoded.Byte](x: B): Asm1[Reg.A] =
Const(x)
const(x)
def constX[B: Encoded.Byte](x: B): Asm1[Reg.X] =
Const(x)
const(x)
def constY[B: Encoded.Byte](x: B): Asm1[Reg.Y] =
Const(x)
const(x)
case class Const[R, A](x: A)(using R: Register[R], A: Encoded.Byte[A]) extends Asm1[R]:
def xs: List[String] =
List(s"${R.load} ${A.int(x)}")
private def const[R, A](x: A)(using R: Register[R], A: Encoded.Byte[A]) =
Asm1Instructions[R](List(s"${R.load} ${A.int(x)}"))

View File

@ -2,14 +2,13 @@ package com.htmlism.scratchpad
object Store:
def fromA[A](dest: WriteLease.ByteAddress[A]): Asm2[Reg.A, A] =
Byte[Reg.A, A](dest)
from[Reg.A, A](dest)
def fromX[A](dest: WriteLease.ByteAddress[A]): Asm2[Reg.X, A] =
Byte[Reg.X, A](dest)
from[Reg.X, A](dest)
def fromY[A](dest: WriteLease.ByteAddress[A]): Asm2[Reg.Y, A] =
Byte[Reg.Y, A](dest)
from[Reg.Y, A](dest)
case class Byte[R, A](dest: WriteLease.ByteAddress[A])(using R: Register[R]) extends Asm2[R, A]:
def xs: List[String] =
List(R.store + " " + dest.address)
private def from[R, A](dest: WriteLease.ByteAddress[A])(using R: Register[R]) =
Asm2Instructions[R, A](List(R.store + " " + dest.address))

View File

@ -1,6 +1,6 @@
package com.htmlism.scratchpad
trait Asm1[A]:
sealed trait Asm1[A]:
def xs: List[String]
def widenWith[B]: Asm2[A, B] =
@ -8,7 +8,7 @@ trait Asm1[A]:
case class Asm1Instructions[A](xs: List[String]) extends Asm1[A]
trait Asm2[A, B]:
sealed trait Asm2[A, B]:
def xs: List[String]
def andThen(that: Asm2[A, B]): Asm2[A, B] =