diff --git a/data/print-three-upper-math.asm b/data/print-three-upper-math.asm index 2e4374a..ebd26cf 100644 --- a/data/print-three-upper-math.asm +++ b/data/print-three-upper-math.asm @@ -21,12 +21,12 @@ define SCREEN $200 ; Screen(0) = White LDA #COLOR_White - STA $200 + STA SCREEN+0 ; Screen(1) = Green LDA #COLOR_Green - STA $201 + STA SCREEN+1 ; Screen(2) = Orange LDA #COLOR_Orange - STA $202 + STA SCREEN+2 diff --git a/data/print-three-upper.asm b/data/print-three-upper.asm index 2e4374a..5d53640 100644 --- a/data/print-three-upper.asm +++ b/data/print-three-upper.asm @@ -21,12 +21,12 @@ define SCREEN $200 ; Screen(0) = White LDA #COLOR_White - STA $200 + STA SCREEN ; Screen(1) = Green LDA #COLOR_Green - STA $201 + STA TODO ; Screen(2) = Orange LDA #COLOR_Orange - STA $202 + STA TODO diff --git a/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Definable.scala b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Definable.scala index 93b9376..3800dc9 100644 --- a/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Definable.scala +++ b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Definable.scala @@ -11,6 +11,8 @@ trait Definable[A]: extension (x: A) def toDefine: String + extension (x: A) def toDefineWithMath: String + object Definable: def apply[A](using ev: Definable[A]): Definable[A] = ev diff --git a/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Easy6502.scala b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Easy6502.scala index 5763832..2bec7ba 100644 --- a/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Easy6502.scala +++ b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/Easy6502.scala @@ -31,6 +31,10 @@ object Easy6502: def toDefine: String = "COLOR_" + x.toString + extension (x: Color) + def toDefineWithMath: String = + "COLOR_" + x.toString + class Screen(baseAddr: Int): def apply(offset: Int): Screen.Pixel = Screen.Pixel(baseAddr, offset) @@ -53,4 +57,11 @@ object Easy6502: extension (x: Pixel) def toDefine: String = - "TODO" + if (x.offset == 0) + "SCREEN" + else + "TODO" + + extension (x: Pixel) + def toDefineWithMath: String = + "SCREEN+" + x.offset diff --git a/firepower-demo/src/main/scala/com/htmlism/firepower/demo/PrintThree.scala b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/PrintThree.scala index cc0a243..c254fe9 100644 --- a/firepower-demo/src/main/scala/com/htmlism/firepower/demo/PrintThree.scala +++ b/firepower-demo/src/main/scala/com/htmlism/firepower/demo/PrintThree.scala @@ -61,13 +61,24 @@ object PrintThree: AssemblerOptions.DefinitionsMode.UseDefinitionsWithMath => "#" + mv.src.toDefine + val argumentTwo = + opts.definitionsMode match + case AssemblerOptions.DefinitionsMode.UseLiterals => + AsmBlock.toHex(mv.dest.toValue) + + case AssemblerOptions.DefinitionsMode.UseDefinitions => + mv.dest.toDefine + + case AssemblerOptions.DefinitionsMode.UseDefinitionsWithMath => + mv.dest.toDefineWithMath + AsmBlock.Intent( s"${mv.dest.toComment} = ${mv.src.toComment}".some, List( AsmBlock.Intent.Instruction(instruction("LDA", opts.instructionCase) + " " + argument, None), AsmBlock .Intent - .Instruction(instruction("STA", opts.instructionCase) + " " + AsmBlock.toHex(mv.dest.toValue), None) + .Instruction(instruction("STA", opts.instructionCase) + " " + argumentTwo, None) ) ) }