diff --git a/src/main/fragment/pwuc1_derefidx_vbuaa=_word_vbuxx.asm b/src/main/fragment/pwuc1_derefidx_vbuaa=vbuxx.asm similarity index 100% rename from src/main/fragment/pwuc1_derefidx_vbuaa=_word_vbuxx.asm rename to src/main/fragment/pwuc1_derefidx_vbuaa=vbuxx.asm diff --git a/src/main/fragment/pwuc1_derefidx_vbuxx=_word_vbuaa.asm b/src/main/fragment/pwuc1_derefidx_vbuxx=vbuaa.asm similarity index 100% rename from src/main/fragment/pwuc1_derefidx_vbuxx=_word_vbuaa.asm rename to src/main/fragment/pwuc1_derefidx_vbuxx=vbuaa.asm diff --git a/src/main/fragment/pwuc1_derefidx_vbuyy=vbuaa.asm b/src/main/fragment/pwuc1_derefidx_vbuyy=vbuaa.asm new file mode 100644 index 000000000..355a5914f --- /dev/null +++ b/src/main/fragment/pwuc1_derefidx_vbuyy=vbuaa.asm @@ -0,0 +1,3 @@ +sta {c1},y +lda #0 +sta {c1}+1,y diff --git a/src/main/fragment/vduz1=vwuz2.asm b/src/main/fragment/vduz1=vwuz2.asm new file mode 100644 index 000000000..7d25095ee --- /dev/null +++ b/src/main/fragment/vduz1=vwuz2.asm @@ -0,0 +1,7 @@ +lda {z2} +sta {z1} +lda {z2}+1 +sta {z1}+1 +lda #0 +sta {z1}+2 +sta {z1}+3 \ No newline at end of file diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index b5dd695b3..4dc3c79f5 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -252,16 +252,13 @@ public class Compiler { optimizations.add(new Pass2ConstantValues(program)); optimizations.add(new PassNStatementIndices(program)); optimizations.add(new PassNVariableReferenceInfos(program)); - //optimizations.add(new Pass2ConstantAdditionElimination(program)); optimizations.add(new Pass2ConstantIfs(program)); optimizations.add(new Pass2ConstantStringConsolidation(program)); - //optimizations.add(new Pass2FixInlineConstructors(program)); optimizations.add(new Pass2FixInlineConstructorsNew(program)); optimizations.add(new PassNAddTypeConversionAssignment(program)); optimizations.add(new Pass2TypeInference(program)); optimizations.add(new PassNEliminateUnusedVars(program, true)); optimizations.add(new Pass2EliminateRedundantCasts(program)); - //optimizations.add(new Pass2NopCastElimination(program)); optimizations.add(new Pass2EliminateUnusedBlocks(program)); optimizations.add(new Pass2RangeResolving(program)); optimizations.add(new Pass2ComparisonOptimization(program)); @@ -386,7 +383,6 @@ public class Compiler { new Pass3AssertConstants(program).check(); new Pass3AssertArrayLengths(program).check(); new Pass3AssertNoMulDivMod(program).check(); - new Pass3AddAssignmentCasts(program).execute(); new PassNCastSimplification(program).execute(); new PassNBlockSequencePlanner(program).step(); // Phi lifting ensures that all variables in phi-blocks are in different live range equivalence classes diff --git a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeConversion.java b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeConversion.java index df8ec8b90..02b96b28c 100644 --- a/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeConversion.java +++ b/src/main/java/dk/camelot64/kickc/model/types/SymbolTypeConversion.java @@ -202,7 +202,8 @@ public class SymbolTypeConversion { return false; else return true; - } + + } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2FixInlineConstructors.java b/src/main/java/dk/camelot64/kickc/passes/Pass2FixInlineConstructors.java deleted file mode 100644 index e13b30941..000000000 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2FixInlineConstructors.java +++ /dev/null @@ -1,132 +0,0 @@ -package dk.camelot64.kickc.passes; - -import dk.camelot64.kickc.model.Comment; -import dk.camelot64.kickc.model.ControlFlowBlock; -import dk.camelot64.kickc.model.Program; -import dk.camelot64.kickc.model.iterator.ProgramValue; -import dk.camelot64.kickc.model.iterator.ProgramValueHandler; -import dk.camelot64.kickc.model.iterator.ProgramValueIterator; -import dk.camelot64.kickc.model.operators.Operator; -import dk.camelot64.kickc.model.operators.Operators; -import dk.camelot64.kickc.model.statements.Statement; -import dk.camelot64.kickc.model.statements.StatementAssignment; -import dk.camelot64.kickc.model.symbols.Scope; -import dk.camelot64.kickc.model.symbols.VariableIntermediate; -import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.types.SymbolTypeArray; -import dk.camelot64.kickc.model.types.SymbolTypeInference; -import dk.camelot64.kickc.model.types.SymbolTypeIntegerFixed; -import dk.camelot64.kickc.model.values.Value; -import dk.camelot64.kickc.model.values.ValueList; - -import java.util.ListIterator; - -/** - * Identifies word constructors { b1, b2 } and replaces - * them with a binary operator word w = b1 w= b2 ; - */ -public class Pass2FixInlineConstructors extends Pass2SsaOptimization { - - public Pass2FixInlineConstructors(Program program) { - super(program); - } - - @Override - public boolean step() { - WordConstructor wordConstructor = new WordConstructor(); - ProgramValueIterator.execute(getGraph(), wordConstructor); - DWordConstructor dwordConstructor = new DWordConstructor(); - ProgramValueIterator.execute(getGraph(), dwordConstructor); - return wordConstructor.isOptimized() || dwordConstructor.isOptimized(); - } - - /** Replaces { b1, b2 } with a w= operator */ - private class WordConstructor extends InlineConstructor { - - public WordConstructor() { - super(SymbolType.WORD, Operators.WORD); - } - - @Override - protected boolean isSubType(SymbolType elmType) { - return SymbolType.BYTE.equals(elmType); - } - } - - /** Replaces { w1, w2 } with a dw= operator */ - private class DWordConstructor extends InlineConstructor { - - public DWordConstructor() { - super(SymbolType.DWORD, Operators.DWORD); - } - - @Override - protected boolean isSubType(SymbolType elmType) { - return SymbolType.WORD.equals(elmType); - } - } - - - private abstract class InlineConstructor implements ProgramValueHandler { - private SymbolTypeIntegerFixed constructType; - private Operator constructOperator; - private boolean optimized; - - public InlineConstructor(SymbolTypeIntegerFixed constructType, Operator constructOperator) { - this.constructType = constructType; - this.constructOperator = constructOperator; - } - - protected abstract boolean isSubType(SymbolType elmType); - - public boolean isOptimized() { - return optimized; - } - - @Override - public void execute(ProgramValue programValue, Statement currentStmt, ListIterator stmtIt, ControlFlowBlock currentBlock) { - Value rValue = programValue.get(); - if(rValue instanceof ValueList) { - ValueList list = (ValueList) rValue; - if(list.getList().size() == 2) { - // We have a simple assignment of a length 2 value list to a variable - SymbolType elmType1 = SymbolTypeInference.inferType(Pass2FixInlineConstructors.this.getScope(), list.getList().get(0)); - SymbolType elmType2 = SymbolTypeInference.inferType(Pass2FixInlineConstructors.this.getScope(), list.getList().get(1)); - if(isSubType(elmType1) && isSubType(elmType2)) { - // We have a 2-element list { byte, byte } - - // Check if we are assigning into a declared byte array - if(currentStmt instanceof StatementAssignment) { - StatementAssignment assignment = (StatementAssignment) currentStmt; - if(assignment.getrValue1() == null && assignment.getOperator() == null && assignment.getrValue2().equals(rValue)) { - SymbolType lType = SymbolTypeInference.inferType(Pass2FixInlineConstructors.this.getScope(), assignment.getlValue()); - if(lType instanceof SymbolTypeArray && isSubType(((SymbolTypeArray) lType).getElementType())) { - // We are assigning into a declared byte array - do not convert! - return; - } - } - } - - // Convert list to a word constructor in a new tmp variable - Scope currentScope = Pass2FixInlineConstructors.this.getScope().getScope(currentBlock.getScope()); - VariableIntermediate tmpVar = currentScope.addVariableIntermediate(); - tmpVar.setTypeInferred(constructType); - // Move backward - to insert before the current statement - stmtIt.previous(); - // Add assignment of the new tmpVar - StatementAssignment assignment = new StatementAssignment(tmpVar.getRef(), list.getList().get(0), constructOperator, list.getList().get(1), currentStmt.getSource(), Comment.NO_COMMENTS); - stmtIt.add(assignment); - // Move back before the current statement - stmtIt.next(); - // Replace current value with the reference - programValue.set(tmpVar.getRef()); - Pass2FixInlineConstructors.this.getLog().append("Fixing inline constructor with " + assignment.toString()); - optimized = true; - } - } - } - } - } - - -} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java b/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java deleted file mode 100644 index b66de4df4..000000000 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2NopCastElimination.java +++ /dev/null @@ -1,87 +0,0 @@ -package dk.camelot64.kickc.passes; - -import dk.camelot64.kickc.model.*; -import dk.camelot64.kickc.model.operators.OperatorCastPtr; -import dk.camelot64.kickc.model.operators.Operators; -import dk.camelot64.kickc.model.values.*; -import dk.camelot64.kickc.model.statements.Statement; -import dk.camelot64.kickc.model.statements.StatementAssignment; -import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.types.SymbolTypeInference; -import dk.camelot64.kickc.model.types.SymbolTypePointer; - -import java.util.LinkedHashMap; -import java.util.ListIterator; - -/** - * Compiler Pass eliminating cast assignments that has no effect (byte to/from signed byte, word to/from signed word) - */ -public class Pass2NopCastElimination extends Pass2SsaOptimization { - - public Pass2NopCastElimination(Program program) { - super(program); - } - - /** - * Eliminate cast assignments that has no effect (byte to/from signed byte, word to/from signed word) - */ - @Override - public boolean step() { - LinkedHashMap castAliasses = new LinkedHashMap<>(); - - for(ControlFlowBlock block : getGraph().getAllBlocks()) { - ListIterator stmtIt = block.getStatements().listIterator(); - while(stmtIt.hasNext()) { - Statement stmt = stmtIt.next(); - if(stmt instanceof StatementAssignment) { - StatementAssignment assignment = (StatementAssignment) stmt; - if(assignment.getlValue() instanceof VariableRef && assignment.getrValue1()==null && assignment.getOperator()!=null ) { - // It is a simple cast assignment - check if it is no-op - SymbolType rValType = SymbolTypeInference.inferType(getScope(), assignment.getrValue2()); - boolean isNopCast = false; - SymbolType toType = null; - if(SymbolType.BYTE.equals(rValType) && Operators.CAST_SBYTE.equals(assignment.getOperator())) { - isNopCast = true; - toType = SymbolType.SBYTE; - } else if(SymbolType.SBYTE.equals(rValType) && Operators.CAST_BYTE.equals(assignment.getOperator())) { - isNopCast = true; - toType = SymbolType.BYTE; - } else if(SymbolType.WORD.equals(rValType) && Operators.CAST_SWORD.equals(assignment.getOperator())) { - isNopCast = true; - toType = SymbolType.SWORD; - } else if(SymbolType.SWORD.equals(rValType) && Operators.CAST_WORD.equals(assignment.getOperator())) { - isNopCast = true; - toType = SymbolType.WORD; - } else if(SymbolType.WORD.equals(rValType) && assignment.getOperator() instanceof OperatorCastPtr) { - isNopCast = true; - OperatorCastPtr castOperator = (OperatorCastPtr) (assignment.getOperator()); - toType = new SymbolTypePointer(castOperator.getElementType()); - } else if(rValType instanceof SymbolTypePointer && Operators.CAST_WORD.equals(assignment.getOperator())) { - isNopCast = true; - toType = SymbolType.WORD; - } else if(rValType instanceof SymbolTypePointer && assignment.getOperator() instanceof OperatorCastPtr) { - isNopCast = true; - toType = new SymbolTypePointer(((OperatorCastPtr) assignment.getOperator()).getElementType()); - } - if(isNopCast) { - getLog().append("Eliminating Noop Cast "+assignment.toString(getProgram(), false)); - // Add the alias for replacement - if(assignment.getrValue2() instanceof ConstantValue) { - castAliasses.put((VariableRef) assignment.getlValue(), new ConstantCastValue(toType, (ConstantValue) assignment.getrValue2())); - } else { - castAliasses.put((VariableRef) assignment.getlValue(), new CastValue(toType, assignment.getrValue2())); - } - // Remove the assignment - stmtIt.remove(); - } - } - } - } - } - replaceVariables(castAliasses); - deleteSymbols(getScope(), castAliasses.keySet()); - return (castAliasses.size() > 0); - } - - -} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass3AddAssignmentCasts.java b/src/main/java/dk/camelot64/kickc/passes/Pass3AddAssignmentCasts.java deleted file mode 100644 index aee315662..000000000 --- a/src/main/java/dk/camelot64/kickc/passes/Pass3AddAssignmentCasts.java +++ /dev/null @@ -1,41 +0,0 @@ -package dk.camelot64.kickc.passes; - -import dk.camelot64.kickc.model.Program; -import dk.camelot64.kickc.model.iterator.ProgramExpressionBinary; -import dk.camelot64.kickc.model.iterator.ProgramExpressionIterator; -import dk.camelot64.kickc.model.operators.Operators; -import dk.camelot64.kickc.model.types.SymbolType; -import dk.camelot64.kickc.model.types.SymbolTypeConversion; -import dk.camelot64.kickc.model.types.SymbolTypeInference; - -import java.util.concurrent.atomic.AtomicBoolean; - -/** - * Add casts to assignments where the lvalue and rvalue have different matching types. - */ -public class Pass3AddAssignmentCasts extends Pass2SsaOptimization { - - public Pass3AddAssignmentCasts(Program program) { - super(program); - } - - @Override - public boolean step() { - AtomicBoolean modified = new AtomicBoolean(false); - ProgramExpressionIterator.execute(getProgram(), (programExpression, currentStmt, stmtIt, currentBlock) -> { - if(programExpression instanceof ProgramExpressionBinary) { - if(Operators.ASSIGNMENT.equals(programExpression.getOperator())) { - ProgramExpressionBinary binary = (ProgramExpressionBinary) programExpression; - SymbolType leftType = SymbolTypeInference.inferType(getScope(), binary.getLeft()); - SymbolType rightType = SymbolTypeInference.inferType(getScope(), binary.getRight()); - if(SymbolTypeConversion.assignmentTypeMatch(leftType, rightType) && SymbolTypeConversion.assignmentCastNeeded(leftType, rightType)) { - binary.addRightCast(leftType, stmtIt, currentBlock.getScope(), getScope()); - getLog().append("Adding assignment cast to " + currentStmt.toString(getProgram(), false)); - modified.set(true); - } - } - } - }); - return modified.get(); - } -} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass3PhiMemCoalesce.java b/src/main/java/dk/camelot64/kickc/passes/Pass3PhiMemCoalesce.java index 65b5fae89..7a4876a5e 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass3PhiMemCoalesce.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass3PhiMemCoalesce.java @@ -1,6 +1,8 @@ package dk.camelot64.kickc.passes; import dk.camelot64.kickc.model.*; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeConversion; import dk.camelot64.kickc.model.values.ConstantValue; import dk.camelot64.kickc.model.values.VariableRef; import dk.camelot64.kickc.model.statements.StatementAssignment; @@ -49,9 +51,12 @@ public class Pass3PhiMemCoalesce extends Pass2SsaOptimization { */ public static class EquivalenceClassPhiInitializer extends ControlFlowGraphBaseVisitor { + private Program program; + private LiveRangeEquivalenceClassSet phiEquivalenceClasses; public EquivalenceClassPhiInitializer(Program program) { + this.program = program; this.phiEquivalenceClasses = new LiveRangeEquivalenceClassSet(program); } @@ -65,7 +70,13 @@ public class Pass3PhiMemCoalesce extends Pass2SsaOptimization { VariableRef phiRVar = (VariableRef) phiRValue.getrValue(); LiveRangeEquivalenceClass rValEquivalenceClass = phiEquivalenceClasses.getOrCreateEquivalenceClass(phiRVar); if(!rValEquivalenceClass.equals(equivalenceClass)) { - phiEquivalenceClasses.consolidate(equivalenceClass, rValEquivalenceClass); + SymbolType varType = program.getScope().getVariable(variable).getType(); + SymbolType rVarType = program.getScope().getVariable(phiRVar).getType(); + if(varType.getSizeBytes()==rVarType.getSizeBytes()) { + phiEquivalenceClasses.consolidate(equivalenceClass, rValEquivalenceClass); + } else { + program.getLog().append("Not consolidating phi with different size "+variable.toString()+" "+phiRVar.toString()); + } } } } diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 112535fab..e0d216b07 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -63,6 +63,11 @@ public class TestPrograms { */ + @Test + public void testMul8uMin() throws IOException, URISyntaxException { + compileAndCompare("mul8u-min"); + } + @Test public void testNumberInferenceSum() throws IOException, URISyntaxException { compileAndCompare("number-inference-sum"); diff --git a/src/test/kc/mul8u-min.kc b/src/test/kc/mul8u-min.kc new file mode 100644 index 000000000..83f0668cb --- /dev/null +++ b/src/test/kc/mul8u-min.kc @@ -0,0 +1,14 @@ +// Minimal test of mul8u + +import "multiply" + +void main() { + + const word* screen = 0x0400; + byte i = 0; + + for(byte a: 0..5) + for (byte b: 0..5) + screen[i++] = mul8u(a,b); + +} \ No newline at end of file diff --git a/src/test/ref/bresenhamarr.asm b/src/test/ref/bresenhamarr.asm index 6f5b47054..27134b6fd 100644 --- a/src/test/ref/bresenhamarr.asm +++ b/src/test/ref/bresenhamarr.asm @@ -19,7 +19,7 @@ main: { ldx #yd/2 lda #x0 sta x - lda #<0 + lda #0 sta idx sta idx+1 b1: diff --git a/src/test/ref/c64dtv-8bppchunkystretch.asm b/src/test/ref/c64dtv-8bppchunkystretch.asm index 350dbd2a5..5d6615f06 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.asm +++ b/src/test/ref/c64dtv-8bppchunkystretch.asm @@ -205,7 +205,7 @@ gfx_init_chunky: { lda #>$4000 sta gfxb+1 b1: - lda #<0 + lda #0 sta x sta x+1 b2: diff --git a/src/test/ref/c64dtv-blittermin.asm b/src/test/ref/c64dtv-blittermin.asm index b7e126dea..0628deace 100644 --- a/src/test/ref/c64dtv-blittermin.asm +++ b/src/test/ref/c64dtv-blittermin.asm @@ -85,9 +85,8 @@ main: { sta DTV_BLITTER_SRCA_HI sta DTV_BLITTER_SRCA_MOD_LO sta DTV_BLITTER_SRCA_MOD_HI - lda #<$80 sta DTV_BLITTER_SRCA_LIN_LO - lda #0 + lda #>$100 sta DTV_BLITTER_SRCA_LIN_HI lda #$10 sta DTV_BLITTER_SRCA_STEP diff --git a/src/test/ref/complex/tetris/tetris.asm b/src/test/ref/complex/tetris/tetris.asm index 5787e8dbe..2ffbfb4d9 100644 --- a/src/test/ref/complex/tetris/tetris.asm +++ b/src/test/ref/complex/tetris/tetris.asm @@ -214,11 +214,8 @@ main: { sta level sta score_bcd sta score_bcd+1 - lda #<0>>$10 sta score_bcd+2 - lda #>0>>$10 sta score_bcd+3 - lda #<0 sta lines_bcd sta lines_bcd+1 sta current_movedown_counter diff --git a/src/test/ref/derefidx-word-0.asm b/src/test/ref/derefidx-word-0.asm index a893d8fe3..95ea7045b 100644 --- a/src/test/ref/derefidx-word-0.asm +++ b/src/test/ref/derefidx-word-0.asm @@ -6,7 +6,7 @@ main: { .label screen = $400 .label i = 2 .label _1 = 4 - lda #<0 + lda #0 sta i sta i+1 b1: diff --git a/src/test/ref/examples/3d/perspective.asm b/src/test/ref/examples/3d/perspective.asm index db564e9c2..313e08cfb 100644 --- a/src/test/ref/examples/3d/perspective.asm +++ b/src/test/ref/examples/3d/perspective.asm @@ -240,9 +240,9 @@ mulf_init: { .label val = 6 .label sqr = 2 .label add = 4 - lda #<1 + lda #1 sta add - lda #>1 + lda #0 sta add+1 tax sta sqr diff --git a/src/test/ref/examples/chargen/chargen-analysis.asm b/src/test/ref/examples/chargen/chargen-analysis.asm index 9a4f94c32..3acea7f3d 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.asm +++ b/src/test/ref/examples/chargen/chargen-analysis.asm @@ -312,11 +312,10 @@ mul8u: { .label mb = $b .label res = 9 .label return = 9 - lda #b + lda #0 sta mb+1 - lda #<0 sta res sta res+1 b1: diff --git a/src/test/ref/examples/fire/fire.asm b/src/test/ref/examples/fire/fire.asm index e6481db83..d14cf06e3 100644 --- a/src/test/ref/examples/fire/fire.asm +++ b/src/test/ref/examples/fire/fire.asm @@ -307,7 +307,7 @@ sid_rnd_init: { fillscreen: { .label screen = 2 .label i = 4 - lda #<0 + lda #0 sta i sta i+1 b1: diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.asm b/src/test/ref/examples/multiplexer/simple-multiplexer.asm index 0b59051e7..c581edf00 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.asm +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.asm @@ -219,11 +219,11 @@ init: { lda #VIC_DEN|VIC_RSEL|3 sta D011 jsr plexInit - lda #<$20 + lda #$20 sta xp - lda #>$20 + lda #0 sta xp+1 - ldx #0 + tax b1: lda #SPRITE/$40 sta PLEX_PTR,x diff --git a/src/test/ref/examples/plasma/plasma-unroll.asm b/src/test/ref/examples/plasma/plasma-unroll.asm index 761f2a967..6ac675a5a 100644 --- a/src/test/ref/examples/plasma/plasma-unroll.asm +++ b/src/test/ref/examples/plasma/plasma-unroll.asm @@ -254,7 +254,7 @@ makecharset: { sta print_char_cursor lda #>print_line_cursor sta print_char_cursor+1 - lda #<0 + lda #0 sta c sta c+1 b1: diff --git a/src/test/ref/examples/plasma/plasma.asm b/src/test/ref/examples/plasma/plasma.asm index f0b03b983..5bdbc6470 100644 --- a/src/test/ref/examples/plasma/plasma.asm +++ b/src/test/ref/examples/plasma/plasma.asm @@ -190,7 +190,7 @@ makecharset: { sta print_char_cursor lda #>print_line_cursor sta print_char_cursor+1 - lda #<0 + lda #0 sta c sta c+1 b1: diff --git a/src/test/ref/examples/rotate/rotate.asm b/src/test/ref/examples/rotate/rotate.asm index 89dbfc313..21947b062 100644 --- a/src/test/ref/examples/rotate/rotate.asm +++ b/src/test/ref/examples/rotate/rotate.asm @@ -258,7 +258,7 @@ mulf_init: { sta sqr1_lo lda #>mulf_sqr1_lo+1 sta sqr1_lo+1 - lda #<0 + lda #0 sta sqr sta sqr+1 tax diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.asm b/src/test/ref/examples/scrolllogo/scrolllogo.asm index bd40df77b..46983d01e 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.asm +++ b/src/test/ref/examples/scrolllogo/scrolllogo.asm @@ -68,7 +68,7 @@ loop: { .label _1 = 9 .label _5 = 9 .label xpos = 9 - lda #<0 + lda #0 sta xsin_idx sta xsin_idx+1 b1: @@ -109,7 +109,7 @@ loop: { lda xsin_idx cmp #xsin sta sintab+1 - lda #<0 + lda #0 sta x sta x+1 - lda #<0>>$10 sta x+2 - lda #>0>>$10 sta x+3 // u[4.28] b1: @@ -332,13 +330,13 @@ sin16s_gen2: { } // Multiply of two signed words to a signed double word // Fixes offsets introduced by using unsigned multiplication -// mul16s(signed word zeropage($15) a) +// mul16s(signed word zeropage($f) a) mul16s: { .label _9 = $f .label _16 = $f .label m = $b .label return = $b - .label a = $15 + .label a = $f lda a sta mul16u.a lda a+1 @@ -373,19 +371,17 @@ mul16s: { rts } // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zeropage($f) a, word zeropage($17) b) +// mul16u(word zeropage($11) a, word zeropage($f) b) mul16u: { - .label mb = $11 - .label a = $f + .label mb = $13 + .label a = $11 .label res = $b .label return = $b - .label b = $17 - lda #<0 + .label b = $f + lda #0 sta res sta res+1 - lda #<0>>$10 sta res+2 - lda #>0>>$10 sta res+3 b1: lda a @@ -427,18 +423,18 @@ mul16u: { // sin16s(dword zeropage($b) x) sin16s: { .label _4 = $b - .label _20 = $15 + .label _20 = $f .label x = $b - .label return = $15 + .label return = $f .label x1 = $1d - .label x2 = $15 - .label x3 = $15 + .label x2 = $17 + .label x3 = $17 .label x3_6 = $f .label usinx = $1f - .label x4 = $15 + .label x4 = $17 .label x5 = $f .label x5_128 = $f - .label sinx = $15 + .label sinx = $f .label isUpper = 4 lda x+3 cmp #>PI_u4f28>>$10 @@ -609,15 +605,15 @@ sin16s: { } // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zeropage($15) v1, word zeropage($17) v2, byte register(X) select) +// mulu16_sel(word zeropage($17) v1, word zeropage($f) v2, byte register(X) select) mulu16_sel: { .label _0 = $b .label _1 = $b - .label v1 = $15 - .label v2 = $17 + .label v1 = $17 + .label v2 = $f .label return = $f - .label return_1 = $15 - .label return_10 = $15 + .label return_1 = $17 + .label return_10 = $17 lda v1 sta mul16u.a lda v1+1 @@ -649,14 +645,14 @@ mulu16_sel: { // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $15 + .label quotient_hi = $11 .label quotient_lo = $f .label return = $19 lda #>$10 sta divr16u.dividend lda #>PI2_u4f28>>$10 sta divr16u.dividend+1 - lda #<0 + lda #0 sta divr16u.rem sta divr16u.rem+1 jsr divr16u diff --git a/src/test/ref/examples/sinplotter/sine-plotter.asm b/src/test/ref/examples/sinplotter/sine-plotter.asm index 951d02189..341d95d20 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.asm +++ b/src/test/ref/examples/sinplotter/sine-plotter.asm @@ -73,7 +73,7 @@ render_sine: { .label sin2_val = 6 .label xpos = 4 .label sin_idx = 2 - lda #<0 + lda #0 sta xpos sta xpos+1 sta sin_idx @@ -149,7 +149,7 @@ render_sine: { lda xpos cmp #<$140 bne b2 - lda #<0 + lda #0 sta xpos sta xpos+1 b2: @@ -174,9 +174,9 @@ render_sine: { // Plot a single dot in the bitmap // bitmap_plot(word zeropage(4) x, byte register(X) y) bitmap_plot: { - .label _1 = $15 + .label _1 = $10 .label plotter = 6 - .label plotter_1 = $15 + .label plotter_1 = $10 .label x = 4 .label _4 = 6 lda bitmap_plot_yhi,x @@ -256,19 +256,17 @@ sin16s_gen2: { .label x = 8 .label i = 4 jsr div32u16u - lda #<0 + lda #0 sta i sta i+1 lda #sin sta sintab+1 - lda #<0 + lda #0 sta x sta x+1 - lda #<0>>$10 sta x+2 - lda #>0>>$10 sta x+3 // u[4.28] b1: @@ -328,13 +326,13 @@ sin16s_gen2: { } // Multiply of two signed words to a signed double word // Fixes offsets introduced by using unsigned multiplication -// mul16s(signed word zeropage($15) a) +// mul16s(signed word zeropage(6) a) mul16s: { .label _9 = 6 .label _16 = 6 .label m = $c .label return = $c - .label a = $15 + .label a = 6 lda a sta mul16u.a lda a+1 @@ -369,19 +367,17 @@ mul16s: { rts } // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zeropage(6) a, word zeropage($17) b) +// mul16u(word zeropage($10) a, word zeropage(6) b) mul16u: { - .label mb = $10 - .label a = 6 + .label mb = $12 + .label a = $10 .label res = $c .label return = $c - .label b = $17 - lda #<0 + .label b = 6 + lda #0 sta res sta res+1 - lda #<0>>$10 sta res+2 - lda #>0>>$10 sta res+3 b1: lda a @@ -423,19 +419,19 @@ mul16u: { // sin16s(dword zeropage($c) x) sin16s: { .label _4 = $c - .label _20 = $15 + .label _20 = 6 .label x = $c - .label return = $15 + .label return = 6 .label x1 = $1d - .label x2 = $15 - .label x3 = $15 + .label x2 = $17 + .label x3 = $17 .label x3_6 = 6 .label usinx = $1f - .label x4 = $15 + .label x4 = $17 .label x5 = 6 .label x5_128 = 6 - .label sinx = $15 - .label isUpper = $14 + .label sinx = 6 + .label isUpper = $16 lda x+3 cmp #>PI_u4f28>>$10 bcc b4 @@ -605,15 +601,15 @@ sin16s: { } // Calculate val*val for two unsigned word values - the result is 16 selected bits of the 32-bit result. // The select parameter indicates how many of the highest bits of the 32-bit result to skip -// mulu16_sel(word zeropage($15) v1, word zeropage($17) v2, byte register(X) select) +// mulu16_sel(word zeropage($17) v1, word zeropage(6) v2, byte register(X) select) mulu16_sel: { .label _0 = $c .label _1 = $c - .label v1 = $15 - .label v2 = $17 + .label v1 = $17 + .label v2 = 6 .label return = 6 - .label return_1 = $15 - .label return_10 = $15 + .label return_1 = $17 + .label return_10 = $17 lda v1 sta mul16u.a lda v1+1 @@ -645,14 +641,14 @@ mulu16_sel: { // Divide unsigned 32-bit dword dividend with a 16-bit word divisor // The 16-bit word remainder can be found in rem16u after the division div32u16u: { - .label quotient_hi = $15 + .label quotient_hi = $10 .label quotient_lo = 6 .label return = $19 lda #>$10 sta divr16u.dividend lda #>PI2_u4f28>>$10 sta divr16u.dividend+1 - lda #<0 + lda #0 sta divr16u.rem sta divr16u.rem+1 jsr divr16u @@ -732,7 +728,7 @@ divr16u: { // Clear all graphics on the bitmap bitmap_clear: { .label bitmap = 2 - .label y = $14 + .label y = $16 .label _4 = 2 lda bitmap_plot_ylo sta _4 @@ -761,7 +757,7 @@ bitmap_clear: { } // Initialize bitmap plotting tables bitmap_init: { - .label _3 = $14 + .label _3 = $16 .label yoffs = 2 ldx #0 lda #$80 diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.asm b/src/test/ref/examples/sinsprites/sinus-sprites.asm index 81a9c2d21..eddb6422e 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.asm +++ b/src/test/ref/examples/sinsprites/sinus-sprites.asm @@ -228,9 +228,9 @@ gen_sintab: { lda #>f_amp sta setMEMtoFAC.mem+1 jsr setMEMtoFAC - lda #<2 + lda #2 sta setFAC.w - lda #>2 + lda #0 sta setFAC.w+1 jsr setFAC lda #$a + lda #0 sta mul16u.a+1 - lda #<$a + lda #$a sta mul16u.mb - lda #>$a + lda #0 sta mul16u.mb+1 - lda #<$a>>$10 sta mul16u.mb+2 - lda #>$a>>$10 sta mul16u.mb+3 jsr mul16u lda _0 diff --git a/src/test/ref/linegen.asm b/src/test/ref/linegen.asm index 825a7fc29..4cbd79681 100644 --- a/src/test/ref/linegen.asm +++ b/src/test/ref/linegen.asm @@ -38,7 +38,7 @@ main: { sta lin16u_gen.lintab lda #>lintab3 sta lin16u_gen.lintab+1 - lda #<0 + lda #0 sta lin16u_gen.min sta lin16u_gen.min+1 lda #<$6488 @@ -76,7 +76,7 @@ main: { lda #>str1 sta print_str.str+1 jsr print_str - lda #<0 + lda #0 sta print_word.w sta print_word.w+1 jsr print_word @@ -309,11 +309,10 @@ lin16u_gen: { lda ampl+1 sbc min+1 sta ampl+1 - lda #<$14-1 + lda #$14-1 sta divr16u.divisor - lda #>$14-1 + lda #0 sta divr16u.divisor+1 - lda #<0 sta divr16u.rem sta divr16u.rem+1 jsr divr16u @@ -321,11 +320,10 @@ lin16u_gen: { sta stepi lda divr16u.return+1 sta stepi+1 - lda #<$14-1 + lda #$14-1 sta divr16u.divisor - lda #>$14-1 + lda #0 sta divr16u.divisor+1 - lda #<0 sta divr16u.dividend sta divr16u.dividend+1 jsr divr16u @@ -344,7 +342,7 @@ lin16u_gen: { sta val+2 lda min+1 sta val+3 - lda #<0 + lda #0 sta i sta i+1 b1: diff --git a/src/test/ref/liverange-call-problem.asm b/src/test/ref/liverange-call-problem.asm index 933c49ae1..ff5e1ea3d 100644 --- a/src/test/ref/liverange-call-problem.asm +++ b/src/test/ref/liverange-call-problem.asm @@ -8,11 +8,11 @@ .label w2 = 2 main: { .label SCREEN = $400 - lda #<0 + lda #0 sta w1 sta w1+1 jsr incw1 - lda #<0 + lda #0 sta w2 sta w2+1 jsr incw2 diff --git a/src/test/ref/min-fmul-16.asm b/src/test/ref/min-fmul-16.asm index ef4553748..dc431ade4 100644 --- a/src/test/ref/min-fmul-16.asm +++ b/src/test/ref/min-fmul-16.asm @@ -226,7 +226,7 @@ mulf_init: { sta sqr1_lo lda #>mulf_sqr1_lo+1 sta sqr1_lo+1 - lda #<0 + lda #0 sta sqr sta sqr+1 tax diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm index f9d6d5695..8b97b383b 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.asm @@ -167,11 +167,11 @@ init: { lda #VIC_DEN|VIC_RSEL|3 sta D011 jsr plexInit - lda #<$20 + lda #$20 sta xp - lda #>$20 + lda #0 sta xp+1 - ldx #0 + tax b1: lda #SPRITE/$40 sta PLEX_PTR,x diff --git a/src/test/ref/roll-sprite-msb.asm b/src/test/ref/roll-sprite-msb.asm index 18ab37b56..80b22ddde 100644 --- a/src/test/ref/roll-sprite-msb.asm +++ b/src/test/ref/roll-sprite-msb.asm @@ -7,11 +7,11 @@ .label SPRITES_XMSB = $d010 main: { .label xpos = 2 - lda #<$c8 + lda #$c8 sta xpos - lda #>$c8 + lda #0 sta xpos+1 - ldx #0 + tax b1: stx position_sprite.spriteno jsr position_sprite diff --git a/src/test/ref/scan-desire-problem.asm b/src/test/ref/scan-desire-problem.asm index 377b83bf5..2cd3d41b5 100644 --- a/src/test/ref/scan-desire-problem.asm +++ b/src/test/ref/scan-desire-problem.asm @@ -76,6 +76,7 @@ draw_block: { asl sta x1 lda #0 + rol sta x1+1 txa asl @@ -172,11 +173,10 @@ mul8u: { .label mb = 6 .label res = 4 .label return = 4 - lda #b + lda #0 sta mb+1 - lda #<0 sta res sta res+1 b1: diff --git a/src/test/ref/semi-struct-2.asm b/src/test/ref/semi-struct-2.asm index d54d7ac9c..0429bcc2f 100644 --- a/src/test/ref/semi-struct-2.asm +++ b/src/test/ref/semi-struct-2.asm @@ -730,11 +730,10 @@ mul8u: { .label mb = 2 .label res = 8 .label return = 8 - lda #SIZEOF_ENTRY + lda #0 sta mb+1 - lda #<0 sta res sta res+1 b1: diff --git a/src/test/ref/signed-words.asm b/src/test/ref/signed-words.asm index 9a92c64eb..1f3826b81 100644 --- a/src/test/ref/signed-words.asm +++ b/src/test/ref/signed-words.asm @@ -25,22 +25,22 @@ .label yvel_22 = 6 main: { jsr init - lda #<$64 + lda #$64 sta yvel_init - lda #>$64 + lda #0 sta yvel_init+1 lda #<$c8 sta xvel lda #>$c8 sta xvel+1 - lda #<0 + lda #0 sta ypos sta ypos+1 sta xpos sta xpos+1 - lda #<$64 + lda #$64 sta yvel_12 - lda #>$64 + lda #0 sta yvel_12+1 b1: lda #$ff @@ -96,7 +96,7 @@ anim: { sta yvel_22 lda yvel+1 sta yvel_22+1 - lda #<0 + lda #0 sta ypos sta ypos+1 sta xpos diff --git a/src/test/ref/sinus-basic.asm b/src/test/ref/sinus-basic.asm index 9e8385227..bf19ef5b9 100644 --- a/src/test/ref/sinus-basic.asm +++ b/src/test/ref/sinus-basic.asm @@ -46,9 +46,9 @@ main: { lda #>f_i sta setMEMtoFAC.mem+1 jsr setMEMtoFAC - lda #<$19 + lda #$19 sta setFAC.w - lda #>$19 + lda #0 sta setFAC.w+1 jsr setFAC jsr divMEMbyFAC diff --git a/src/test/ref/sinusgen16.asm b/src/test/ref/sinusgen16.asm index 380d92e7c..bdca50e5c 100644 --- a/src/test/ref/sinusgen16.asm +++ b/src/test/ref/sinusgen16.asm @@ -185,19 +185,17 @@ sin16s_gen: { .label x = $a .label i = 4 jsr div32u16u - lda #<0 + lda #0 sta i sta i+1 lda #main.sintab1 sta sintab+1 - lda #<0 + lda #0 sta x sta x+1 - lda #<0>>$10 sta x+2 - lda #>0>>$10 sta x+3 // u[4.28] b1: @@ -485,9 +483,7 @@ mul16u: { sta mb+3 sta res sta res+1 - lda #<0>>$10 sta res+2 - lda #>0>>$10 sta res+3 b1: lda a @@ -533,7 +529,7 @@ div32u16u: { sta divr16u.dividend lda #>PI2_u4f28>>$10 sta divr16u.dividend+1 - lda #<0 + lda #0 sta divr16u.rem sta divr16u.rem+1 jsr divr16u diff --git a/src/test/ref/sinusgen16b.asm b/src/test/ref/sinusgen16b.asm index b5f324cfa..299b22494 100644 --- a/src/test/ref/sinusgen16b.asm +++ b/src/test/ref/sinusgen16b.asm @@ -204,19 +204,17 @@ sin16s_genb: { .label x = $d .label i = 4 jsr div32u16u - lda #<0 + lda #0 sta i sta i+1 lda #main.sintab2 sta sintab+1 - lda #<0 + lda #0 sta x sta x+1 - lda #<0>>$10 sta x+2 - lda #>0>>$10 sta x+3 // u[4.28] b1: @@ -469,9 +467,7 @@ mul16u: { sta mb+3 sta res sta res+1 - lda #<0>>$10 sta res+2 - lda #>0>>$10 sta res+3 b1: lda a @@ -517,7 +513,7 @@ div32u16u: { sta divr16u.dividend lda #>PI2_u4f28>>$10 sta divr16u.dividend+1 - lda #<0 + lda #0 sta divr16u.rem sta divr16u.rem+1 jsr divr16u @@ -605,19 +601,17 @@ sin16s_gen: { .label x = $d .label i = 4 jsr div32u16u - lda #<0 + lda #0 sta i sta i+1 lda #main.sintab1 sta sintab+1 - lda #<0 + lda #0 sta x sta x+1 - lda #<0>>$10 sta x+2 - lda #>0>>$10 sta x+3 // u[4.28] b1: diff --git a/src/test/ref/sinusgen8.asm b/src/test/ref/sinusgen8.asm index 0c037f3c0..5e117690a 100644 --- a/src/test/ref/sinusgen8.asm +++ b/src/test/ref/sinusgen8.asm @@ -158,14 +158,14 @@ sin8s_gen: { .label x = 2 .label i = 7 jsr div16u - lda #<0 + lda #0 sta i sta i+1 lda #main.sintab2 sta sintab+1 - lda #<0 + lda #0 sta x sta x+1 // u[4.12] diff --git a/src/test/ref/sinusgen8b.asm b/src/test/ref/sinusgen8b.asm index e9cafe49a..67172c57e 100644 --- a/src/test/ref/sinusgen8b.asm +++ b/src/test/ref/sinusgen8b.asm @@ -181,19 +181,17 @@ sin16s_gen: { .label x = 7 .label i = 5 jsr div32u16u - lda #<0 + lda #0 sta i sta i+1 lda #main.sintabw sta sintab+1 - lda #<0 + lda #0 sta x sta x+1 - lda #<0>>$10 sta x+2 - lda #>0>>$10 sta x+3 // u[4.28] b1: @@ -481,9 +479,7 @@ mul16u: { sta mb+3 sta res sta res+1 - lda #<0>>$10 sta res+2 - lda #>0>>$10 sta res+3 b1: lda a @@ -529,7 +525,7 @@ div32u16u: { sta divr16u.dividend lda #>PI2_u4f28>>$10 sta divr16u.dividend+1 - lda #<0 + lda #0 sta divr16u.rem sta divr16u.rem+1 jsr divr16u @@ -616,14 +612,14 @@ sin8s_gen: { .label x = 2 .label i = $11 jsr div16u - lda #<0 + lda #0 sta i sta i+1 lda #main.sintabb sta sintab+1 - lda #<0 + lda #0 sta x sta x+1 // u[4.12] @@ -839,7 +835,7 @@ div16u: { sta divr16u.dividend lda #>PI2_u4f12 sta divr16u.dividend+1 - lda #<0 + lda #0 sta divr16u.rem sta divr16u.rem+1 jsr divr16u diff --git a/src/test/ref/sinusgenscale8.asm b/src/test/ref/sinusgenscale8.asm index 792e19135..ba40b7df7 100644 --- a/src/test/ref/sinusgenscale8.asm +++ b/src/test/ref/sinusgenscale8.asm @@ -86,14 +86,14 @@ sin8u_table: { lda #>$400 sta print_line_cursor+1 jsr print_ln - lda #<0 + lda #0 sta i sta i+1 lda #main.sintab sta sintab+1 - lda #<0 + lda #0 sta x sta x+1 // u[4.12] @@ -326,9 +326,9 @@ mul8su: { .label return = $f tya tax - lda #b + lda #0 sta mul8u.mb+1 jsr mul8u cpy #0 @@ -346,7 +346,7 @@ mul8u: { .label mb = $b .label res = $f .label return = $f - lda #<0 + lda #0 sta res sta res+1 b1: diff --git a/src/test/ref/test-multiply-16bit.asm b/src/test/ref/test-multiply-16bit.asm index e9858cdce..4b1b9e166 100644 --- a/src/test/ref/test-multiply-16bit.asm +++ b/src/test/ref/test-multiply-16bit.asm @@ -601,20 +601,18 @@ mul16s: { rts } // Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word -// mul16u(word zeropage(9) a, word zeropage($15) b) +// mul16u(word zeropage($1d) a, word zeropage(9) b) mul16u: { .label mb = $11 - .label a = 9 + .label a = $1d .label res = $19 - .label b = $15 + .label b = 9 .label return = $19 .label b_1 = $17 - lda #<0 + lda #0 sta res sta res+1 - lda #<0>>$10 sta res+2 - lda #>0>>$10 sta res+3 b1: lda a @@ -667,14 +665,12 @@ muls16s: { lda a beq b5 !: - lda #<0 + lda #0 sta j sta j+1 sta m sta m+1 - lda #<0>>$10 sta m+2 - lda #>0>>$10 sta m+3 b3: lda b+1 @@ -708,23 +704,19 @@ muls16s: { bne b3 rts b5: - lda #<0 + lda #0 sta return sta return+1 - lda #<0>>$10 sta return+2 - lda #>0>>$10 sta return+3 rts b6: - lda #<0 + lda #0 sta i sta i+1 sta m sta m+1 - lda #<0>>$10 sta m+2 - lda #>0>>$10 sta m+3 b4: lda b+1 @@ -965,14 +957,12 @@ muls16u: { lda a+1 beq b3 !: - lda #<0 + lda #0 sta i sta i+1 sta m sta m+1 - lda #<0>>$10 sta m+2 - lda #>0>>$10 sta m+3 b2: lda m @@ -1000,12 +990,10 @@ muls16u: { bne b2 rts b3: - lda #<0 + lda #0 sta return sta return+1 - lda #<0>>$10 sta return+2 - lda #>0>>$10 sta return+3 rts } @@ -1028,7 +1016,7 @@ mulf_init: { sta sqr1_lo lda #>mulf_sqr1_lo+1 sta sqr1_lo+1 - lda #<0 + lda #0 sta sqr sta sqr+1 tax diff --git a/src/test/ref/test-multiply-8bit.asm b/src/test/ref/test-multiply-8bit.asm index 5cf013274..195dda466 100644 --- a/src/test/ref/test-multiply-8bit.asm +++ b/src/test/ref/test-multiply-8bit.asm @@ -307,7 +307,7 @@ mul8u: { .label mb = 6 .label res = $c .label return = $c - lda #<0 + lda #0 sta res sta res+1 b1: @@ -451,7 +451,7 @@ muls8s: { bne b3 rts b5: - lda #<0 + lda #0 sta return sta return+1 rts @@ -634,7 +634,7 @@ muls8u: { bne b2 rts b3: - lda #<0 + lda #0 sta return sta return+1 rts @@ -796,7 +796,7 @@ mulf_init: { sta sqr1_lo lda #>mulf_sqr1_lo+1 sta sqr1_lo+1 - lda #<0 + lda #0 sta sqr sta sqr+1 tax diff --git a/src/test/ref/test-scroll-up.asm b/src/test/ref/test-scroll-up.asm index 3f11d2fd0..15c85f776 100644 --- a/src/test/ref/test-scroll-up.asm +++ b/src/test/ref/test-scroll-up.asm @@ -17,7 +17,7 @@ scrollup3: { .label _4 = 7 .label _5 = 9 .label l2_4 = 4 - lda #<0 + lda #0 sta l2 sta l2+1 b1: @@ -111,7 +111,7 @@ scrollup1: { .label line = 2 .label _6 = 7 .label _7 = 4 - lda #<0 + lda #0 sta line sta line+1 b1: diff --git a/src/test/ref/test-word-size-arrays.asm b/src/test/ref/test-word-size-arrays.asm index 7a768dfdd..34f29fa59 100644 --- a/src/test/ref/test-word-size-arrays.asm +++ b/src/test/ref/test-word-size-arrays.asm @@ -10,7 +10,7 @@ main: { .label _8 = 6 .label _9 = 4 .label _10 = 4 - lda #<0 + lda #0 sta line sta line+1 b1: