diff --git a/src/main/scala/com/htmlism/mos6502/dsl/DslDemo.scala b/src/main/scala/com/htmlism/mos6502/dsl/DslDemo.scala index 8ea9c30..8094c5b 100644 --- a/src/main/scala/com/htmlism/mos6502/dsl/DslDemo.scala +++ b/src/main/scala/com/htmlism/mos6502/dsl/DslDemo.scala @@ -64,16 +64,19 @@ object registers { case object A extends Register { def add(n: Int)(implicit ctx: AssemblyContext): Unit = { ctx.describe(s"add $n to a") + ctx.pushAsm(f"ADC #$$$n%h") } def add(n: ZeroAddress)(implicit ctx: AssemblyContext): Unit = { ctx.describe(s"add to A value from zero page $n") + ctx.pushAsm(f"ADC $$$n%h") } } case object X extends Register with DestinationA { def incr(implicit ctx: AssemblyContext): Unit = { ctx.describe("incr x") + ctx.pushAsm("INX") } } @@ -86,6 +89,7 @@ class CPU { def A_=(n: Int)(implicit ctx: AssemblyContext): Unit = { ctx.describe(s"set a to value $n") + ctx.pushAsm(f"LDA #$$$n%h") } def A_=(reg: registers.DestinationA)(implicit ctx: AssemblyContext): Unit = @@ -94,8 +98,10 @@ class CPU { def X: registers.X.type = registers.X - def X_=(reg: registers.A.type)(implicit ctx: AssemblyContext): Unit = + def X_=(reg: registers.A.type)(implicit ctx: AssemblyContext): Unit = { ctx.describe(s"set x to register $reg") + ctx.pushAsm("TAX") + } def Y: registers.Y.type = registers.Y @@ -108,9 +114,17 @@ class AssemblyContext { val xs: ListBuffer[String] = ListBuffer() + val asm: ListBuffer[String] = + ListBuffer() + + def pushAsm(s: String): Unit = + asm.append(s) + def describe(s: String): Unit = xs.append(s) - def printOut(): Unit = + def printOut(): Unit = { + asm.foreach(println) xs.foreach(println) + } } \ No newline at end of file