diff --git a/src/main/scala/com/htmlism/mos6502/dsl/DslDemo.scala b/src/main/scala/com/htmlism/mos6502/dsl/DslDemo.scala
index 993dfef..907ccfa 100644
--- a/src/main/scala/com/htmlism/mos6502/dsl/DslDemo.scala
+++ b/src/main/scala/com/htmlism/mos6502/dsl/DslDemo.scala
@@ -134,6 +134,8 @@ class AssemblyContext {
xs.append(InstructionWithOperand(instruction, x: A, s.some))
def printOut(): Unit = {
- xs.foreach(println)
+ xs
+ .map(_.toAsm)
+ .foreach(println)
}
}
diff --git a/src/main/scala/com/htmlism/mos6502/dsl/GlobalAddress.scala b/src/main/scala/com/htmlism/mos6502/dsl/GlobalAddress.scala
index 0ff3148..c8a1e3f 100644
--- a/src/main/scala/com/htmlism/mos6502/dsl/GlobalAddress.scala
+++ b/src/main/scala/com/htmlism/mos6502/dsl/GlobalAddress.scala
@@ -9,7 +9,7 @@ object GlobalAddress {
case class GlobalAddress(n: Int) {
def write[A](x: A)(implicit ctx: AssemblyContext, ev: Operand[A]): Unit = {
- ctx.push(LDA, x, s"2: write value ${ev.toString(x)} to address $n")
- ctx.push(STA, this)
+ ctx.push(LDA, x, s"write value ${ev.toString(x)} to address $n")
+ ctx.push(STA, this, "")
}
}
diff --git a/src/main/scala/com/htmlism/mos6502/dsl/Statement.scala b/src/main/scala/com/htmlism/mos6502/dsl/Statement.scala
index f9dadca..0749c83 100644
--- a/src/main/scala/com/htmlism/mos6502/dsl/Statement.scala
+++ b/src/main/scala/com/htmlism/mos6502/dsl/Statement.scala
@@ -2,8 +2,37 @@ package com.htmlism.mos6502.dsl
import com.htmlism._
-sealed trait Statement
+sealed trait Statement {
+ def toAsm: String
+}
-case class UnaryInstruction(instruction: Instruction, comment: Option[String]) extends Statement
+case class UnaryInstruction(instruction: Instruction, comment: Option[String]) extends Statement {
+ def toAsm: String = {
+ val left =
+ instruction.toString
-case class InstructionWithOperand[A : Operand](instruction: Instruction, operand: A, comment: Option[String]) extends Statement
+ comment match {
+ case Some(c) =>
+ f"$left%-16s ; " + c
+ case None =>
+ left
+ }
+ }
+}
+
+case class InstructionWithOperand[A](instruction: Instruction, operand: A, comment: Option[String])(implicit ev: Operand[A]) extends Statement {
+ def toAsm: String = {
+ val left =
+ instruction.toString
+
+ val operandStr =
+ ev.toString(operand)
+
+ comment match {
+ case Some(c) =>
+ f"$left%-5s $operandStr%-11s; " + c
+ case None =>
+ f"$left%-5s $operandStr"
+ }
+ }
+}