From f247516187738f9bfcabee3d90357db287b1ec9d Mon Sep 17 00:00:00 2001 From: Karol Stasiak Date: Sat, 18 Jan 2020 22:06:50 +0100 Subject: [PATCH] 6502: Fix fatal failure when considering undocumented optimizations (fixes #38) --- .../mos/opt/UndocumentedOptimizations.scala | 2 +- .../scala/millfork/test/IllegalSuite.scala | 23 +++++++++++++++++++ .../test/emu/EmuUndocumentedRun.scala | 4 ++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/main/scala/millfork/assembly/mos/opt/UndocumentedOptimizations.scala b/src/main/scala/millfork/assembly/mos/opt/UndocumentedOptimizations.scala index 291a2576..ed66f42e 100644 --- a/src/main/scala/millfork/assembly/mos/opt/UndocumentedOptimizations.scala +++ b/src/main/scala/millfork/assembly/mos/opt/UndocumentedOptimizations.scala @@ -134,7 +134,7 @@ object UndocumentedOptimizations { (Elidable & HasOpcode(INX) & DoesntMatterWhatItDoesWith(State.A)).+.captureLength(0) ~ Where(_.get[Int](0) > 2) ~~> ((_, ctx) => List( AssemblyLine.implied(TXA), - AssemblyLine.immediate(SBX, Constant.Zero - ctx.get[Constant](0)), + AssemblyLine.immediate(SBX, Constant.Zero - ctx.get[Int](0)), )), HasOpcode(TXA) ~ (Elidable & HasOpcode(CLC)).? ~ diff --git a/src/test/scala/millfork/test/IllegalSuite.scala b/src/test/scala/millfork/test/IllegalSuite.scala index d39ea709..30c2e17c 100644 --- a/src/test/scala/millfork/test/IllegalSuite.scala +++ b/src/test/scala/millfork/test/IllegalSuite.scala @@ -261,4 +261,27 @@ class IllegalSuite extends FunSuite with Matchers { """.stripMargin) m.readLong(0xc000) should equal(1) } + + test("Test issue #38") { + val m = EmuUndocumentedRun( + """ + |array(byte) input [16] @ $c300 + |const byte COUNT = 16 + |byte output @$c000 + |void main() { + | inner() + |} + | + |void inner() { + | byte j + | for j,0,until,COUNT { + | if input[j] == 0 { + | continue + | } + | //output += 1 + | } + |} + | + |""".stripMargin) + } } diff --git a/src/test/scala/millfork/test/emu/EmuUndocumentedRun.scala b/src/test/scala/millfork/test/emu/EmuUndocumentedRun.scala index 4559c7f8..5f8ba7da 100644 --- a/src/test/scala/millfork/test/emu/EmuUndocumentedRun.scala +++ b/src/test/scala/millfork/test/emu/EmuUndocumentedRun.scala @@ -13,6 +13,10 @@ object EmuUndocumentedRun extends EmuRun( UndocumentedOptimizations.All ++ OptimizationPresets.Good ++ LaterOptimizations.Nmos ++ UndocumentedOptimizations.All ++ + OptimizationPresets.AssOpt ++ LaterOptimizations.Nmos ++ + UndocumentedOptimizations.All ++ + OptimizationPresets.AssOpt ++ LaterOptimizations.Nmos ++ + UndocumentedOptimizations.All ++ OptimizationPresets.Good) { override def emitIllegals = true