mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-02-19 08:31:01 +00:00
Removed all calls to ConstantIdentification.isAddressOfUsed(VarRef) since inferedVolatile now handles these situations. Structs are now working. Closes #57
This commit is contained in:
parent
40df42067b
commit
4dfc4432c7
@ -32,17 +32,15 @@ public class Pass1EarlyConstantIdentification extends Pass1Base {
|
||||
if(!isParameter(variableRef)) {
|
||||
Collection<StatementLValue> assignments = getAssignments(variable);
|
||||
if(assignments.size() == 1) {
|
||||
if(!Pass2ConstantIdentification.isAddressOfUsed(variableRef, getProgram())) {
|
||||
StatementLValue assignment = assignments.iterator().next();
|
||||
if(assignment instanceof StatementAssignment) {
|
||||
StatementAssignment assign = (StatementAssignment) assignment;
|
||||
if(assign.getrValue1() == null && assign.getOperator() == null && assign.getrValue2() instanceof ConstantValue) {
|
||||
getLog().append("Identified constant variable " + variable.toString(getProgram()));
|
||||
earlyConstants.add(variableRef);
|
||||
} else if(assign.getrValue1() == null && assign.getOperator() instanceof OperatorCastPtr && assign.getrValue2() instanceof ConstantValue) {
|
||||
getLog().append("Identified constant variable " + variable.toString(getProgram()));
|
||||
earlyConstants.add(variableRef);
|
||||
}
|
||||
StatementLValue assignment = assignments.iterator().next();
|
||||
if(assignment instanceof StatementAssignment) {
|
||||
StatementAssignment assign = (StatementAssignment) assignment;
|
||||
if(assign.getrValue1() == null && assign.getOperator() == null && assign.getrValue2() instanceof ConstantValue) {
|
||||
getLog().append("Identified constant variable " + variable.toString(getProgram()));
|
||||
earlyConstants.add(variableRef);
|
||||
} else if(assign.getrValue1() == null && assign.getOperator() instanceof OperatorCastPtr && assign.getrValue2() instanceof ConstantValue) {
|
||||
getLog().append("Identified constant variable " + variable.toString(getProgram()));
|
||||
earlyConstants.add(variableRef);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -55,6 +53,7 @@ public class Pass1EarlyConstantIdentification extends Pass1Base {
|
||||
|
||||
/**
|
||||
* Examines whether a variable is a procedure parameter
|
||||
*
|
||||
* @param variableRef The variable
|
||||
* @return true if the variable is a procedure parameter
|
||||
*/
|
||||
|
@ -44,29 +44,8 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
Set<VariableRef> constVars = new LinkedHashSet<>(constants.keySet());
|
||||
for(VariableRef constRef : constVars) {
|
||||
Variable variable = getProgram().getScope().getVariable(constRef);
|
||||
|
||||
ConstantVariableValue constVarVal = constants.get(constRef);
|
||||
|
||||
// Weed out all variables that are affected by the address-of operator
|
||||
if(isAddressOfUsed(constRef, getProgram())) {
|
||||
|
||||
// If the assignment has an operator then replace it with the single constant value
|
||||
if(constVarVal.getAssignment() instanceof StatementAssignment) {
|
||||
StatementAssignment assignment = (StatementAssignment) constVarVal.getAssignment();
|
||||
if(assignment.getOperator() != null) {
|
||||
getLog().append("Constant right-side identified " + assignment.toString(getProgram(), false));
|
||||
assignment.setOperator(null);
|
||||
assignment.setrValue1(null);
|
||||
assignment.setrValue2(constVarVal.getConstantValue());
|
||||
}
|
||||
}
|
||||
|
||||
// But do not remove the variable
|
||||
constants.remove(constRef);
|
||||
continue;
|
||||
}
|
||||
Scope constScope = variable.getScope();
|
||||
|
||||
ConstantValue constVal = constVarVal.getConstantValue();
|
||||
SymbolType valueType = SymbolTypeInference.inferType(getScope(), constVal);
|
||||
SymbolType variableType = variable.getType();
|
||||
@ -295,17 +274,17 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
/**
|
||||
* Determines if the variable is ever operated on by the address-of operator
|
||||
*
|
||||
* @param symbolRef tHe variable to examine
|
||||
* @param procedureRef tHe variable to examine
|
||||
* @return true if the address-of operator is used on the variable
|
||||
*/
|
||||
public static boolean isAddressOfUsed(SymbolRef symbolRef, Program program) {
|
||||
public static boolean isAddressOfUsed(ProcedureRef procedureRef, Program program) {
|
||||
final boolean[] found = {false};
|
||||
// Examine all program values in expressions
|
||||
ProgramValueIterator.execute(program, (programValue, currentStmt, stmtIt, currentBlock) -> {
|
||||
Value value = programValue.get();
|
||||
if(value instanceof ConstantSymbolPointer) {
|
||||
ConstantSymbolPointer constantSymbolPointer = (ConstantSymbolPointer) value;
|
||||
if(constantSymbolPointer.getToSymbol().equals(symbolRef)) {
|
||||
if(constantSymbolPointer.getToSymbol().equals(procedureRef)) {
|
||||
found[0] = true;
|
||||
}
|
||||
}
|
||||
@ -319,20 +298,13 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
for(Statement statement : block.getStatements()) {
|
||||
if(statement instanceof StatementAssignment) {
|
||||
StatementAssignment assignment = (StatementAssignment) statement;
|
||||
if(Operators.ADDRESS_OF.equals(assignment.getOperator()) && symbolRef.equals(assignment.getrValue2())) {
|
||||
if(Operators.ADDRESS_OF.equals(assignment.getOperator()) && procedureRef.equals(assignment.getrValue2())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If the symbol is part of an unwound struct - look at the struct itself
|
||||
StructUnwinding structUnwinding = program.getStructUnwinding();
|
||||
VariableRef structVarRef = structUnwinding.getContainingStructVariable(symbolRef);
|
||||
if(structVarRef != null) {
|
||||
return isAddressOfUsed(structVarRef, program);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -46,12 +46,12 @@ public class Pass4RegisterUpliftPotentialInitialize extends Pass2Base {
|
||||
Registers.RegisterType registerType = defaultRegister.getType();
|
||||
List<Registers.Register> potentials = new ArrayList<>();
|
||||
potentials.add(defaultRegister);
|
||||
if(registerType.equals(Registers.RegisterType.ZP_BYTE) && !isAddressOfUsed(equivalenceClass) &&!varVolatile(equivalenceClass)) {
|
||||
if(registerType.equals(Registers.RegisterType.ZP_BYTE) &&!varVolatile(equivalenceClass)) {
|
||||
potentials.add(Registers.getRegisterA());
|
||||
potentials.add(Registers.getRegisterX());
|
||||
potentials.add(Registers.getRegisterY());
|
||||
}
|
||||
if(registerType.equals(Registers.RegisterType.ZP_BOOL) && !isAddressOfUsed(equivalenceClass) &&!varVolatile(equivalenceClass)) {
|
||||
if(registerType.equals(Registers.RegisterType.ZP_BOOL) &&!varVolatile(equivalenceClass)) {
|
||||
potentials.add(Registers.getRegisterA());
|
||||
}
|
||||
registerPotentials.setPotentialRegisters(equivalenceClass, potentials);
|
||||
@ -75,18 +75,5 @@ public class Pass4RegisterUpliftPotentialInitialize extends Pass2Base {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if a variable reference is ever created for the variable using the address-of "&" operator
|
||||
* @param equivalenceClass The equivalence class
|
||||
* @return true if a variable reference is extracted
|
||||
*/
|
||||
private boolean isAddressOfUsed(LiveRangeEquivalenceClass equivalenceClass) {
|
||||
for(VariableRef variableRef : equivalenceClass.getVariables()) {
|
||||
if(Pass2ConstantIdentification.isAddressOfUsed(variableRef, getProgram())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ public class PassNEliminateUnusedVars extends Pass2SsaOptimization {
|
||||
if(statement instanceof StatementAssignment) {
|
||||
StatementAssignment assignment = (StatementAssignment) statement;
|
||||
LValue lValue = assignment.getlValue();
|
||||
if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue) && !Pass2ConstantIdentification.isAddressOfUsed((VariableRef) lValue, getProgram())) {
|
||||
if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue)) {
|
||||
Variable variable = getScope().getVariable((VariableRef) lValue);
|
||||
boolean eliminate = false;
|
||||
if(variable == null) {
|
||||
@ -74,30 +74,34 @@ public class PassNEliminateUnusedVars extends Pass2SsaOptimization {
|
||||
} else if(statement instanceof StatementCall) {
|
||||
StatementCall call = (StatementCall) statement;
|
||||
LValue lValue = call.getlValue();
|
||||
if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue) && !Pass2ConstantIdentification.isAddressOfUsed((VariableRef) lValue, getProgram())) {
|
||||
if(pass2 || getLog().isVerbosePass1CreateSsa()) {
|
||||
getLog().append("Eliminating unused variable - keeping the call " + lValue.toString(getProgram()));
|
||||
}
|
||||
if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue)) {
|
||||
Variable variable = getScope().getVariable((VariableRef) lValue);
|
||||
if(variable != null) {
|
||||
variable.getScope().remove(variable);
|
||||
if(!variable.isVolatile()) {
|
||||
if(pass2 || getLog().isVerbosePass1CreateSsa()) {
|
||||
getLog().append("Eliminating unused variable - keeping the call " + lValue.toString(getProgram()));
|
||||
}
|
||||
if(variable != null) {
|
||||
variable.getScope().remove(variable);
|
||||
}
|
||||
call.setlValue(null);
|
||||
modified = true;
|
||||
}
|
||||
call.setlValue(null);
|
||||
modified = true;
|
||||
}
|
||||
} else if(statement instanceof StatementCallPointer) {
|
||||
StatementCallPointer call = (StatementCallPointer) statement;
|
||||
LValue lValue = call.getlValue();
|
||||
if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue) && !Pass2ConstantIdentification.isAddressOfUsed((VariableRef) lValue, getProgram())) {
|
||||
if(pass2 || getLog().isVerbosePass1CreateSsa()) {
|
||||
getLog().append("Eliminating unused variable - keeping the call " + lValue.toString(getProgram()));
|
||||
}
|
||||
if(lValue instanceof VariableRef && referenceInfos.isUnused((VariableRef) lValue)) {
|
||||
Variable variable = getScope().getVariable((VariableRef) lValue);
|
||||
if(variable != null) {
|
||||
variable.getScope().remove(variable);
|
||||
if(!variable.isVolatile()) {
|
||||
if(pass2 || getLog().isVerbosePass1CreateSsa()) {
|
||||
getLog().append("Eliminating unused variable - keeping the call " + lValue.toString(getProgram()));
|
||||
}
|
||||
if(variable != null) {
|
||||
variable.getScope().remove(variable);
|
||||
}
|
||||
call.setlValue(null);
|
||||
modified = true;
|
||||
}
|
||||
call.setlValue(null);
|
||||
modified = true;
|
||||
}
|
||||
} else if(statement instanceof StatementPhiBlock) {
|
||||
StatementPhiBlock statementPhi = (StatementPhiBlock) statement;
|
||||
@ -105,16 +109,18 @@ public class PassNEliminateUnusedVars extends Pass2SsaOptimization {
|
||||
while(phiVarIt.hasNext()) {
|
||||
StatementPhiBlock.PhiVariable phiVariable = phiVarIt.next();
|
||||
VariableRef variableRef = phiVariable.getVariable();
|
||||
if(referenceInfos.isUnused(variableRef) && !Pass2ConstantIdentification.isAddressOfUsed(variableRef, getProgram())) {
|
||||
if(pass2 || getLog().isVerbosePass1CreateSsa()) {
|
||||
getLog().append("Eliminating unused variable - keeping the phi block " + variableRef.toString(getProgram()));
|
||||
}
|
||||
if(referenceInfos.isUnused(variableRef)) {
|
||||
Variable variable = getScope().getVariable(variableRef);
|
||||
if(variable != null) {
|
||||
variable.getScope().remove(variable);
|
||||
if(!variable.isVolatile()) {
|
||||
if(pass2 || getLog().isVerbosePass1CreateSsa()) {
|
||||
getLog().append("Eliminating unused variable - keeping the phi block " + variableRef.toString(getProgram()));
|
||||
}
|
||||
if(variable != null) {
|
||||
variable.getScope().remove(variable);
|
||||
}
|
||||
phiVarIt.remove();
|
||||
modified = true;
|
||||
}
|
||||
phiVarIt.remove();
|
||||
modified = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1257,7 +1257,6 @@ public class TestPrograms {
|
||||
compileAndCompare("var-init-problem");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testFastMultiply8() throws IOException, URISyntaxException {
|
||||
compileAndCompare("examples/fastmultiply/fastmultiply8");
|
||||
|
@ -195,6 +195,9 @@ sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@6
|
||||
[95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3
|
||||
to:sprites_irq::@5
|
||||
sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7
|
||||
[96] (byte) irq_sprite_ptr#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ptr#1 sprites_irq::@4/(byte) irq_sprite_ptr#2 sprites_irq::@7/(byte) irq_sprite_ptr#3 )
|
||||
[96] (byte) irq_sprite_ypos#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ypos#1 sprites_irq::@4/(byte) irq_sprite_ypos#2 sprites_irq::@7/(byte) irq_sprite_ypos#3 )
|
||||
[96] (byte) irq_cnt#3 ← phi( sprites_irq::@11/(byte) irq_cnt#1 sprites_irq::@4/(byte) irq_cnt#2 sprites_irq::@7/(byte) irq_cnt#1 )
|
||||
[96] (byte) irq_raster_next#4 ← phi( sprites_irq::@11/(byte) irq_raster_next#1 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@7/(byte) irq_raster_next#3 )
|
||||
[97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4
|
||||
[98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
|
||||
|
@ -1492,10 +1492,6 @@ Simplifying expression containing zero SPRITES_YPOS#0 in [89] *((const byte*) SP
|
||||
Simplifying expression containing zero PLAYFIELD_SPRITE_PTRS_1#0 in [103] *((byte*) PLAYFIELD_SPRITE_PTRS_1#0 + (byte) 0) ← (byte) sprites_irq::ptr#0
|
||||
Simplifying expression containing zero PLAYFIELD_SPRITE_PTRS_2#0 in [110] *((byte*) PLAYFIELD_SPRITE_PTRS_2#0 + (byte) 0) ← (byte) sprites_irq::ptr#0
|
||||
Successful SSA optimization PassNSimplifyExpressionWithZero
|
||||
Eliminating unused variable - keeping the phi block (byte) irq_cnt#3
|
||||
Eliminating unused variable - keeping the phi block (byte) irq_sprite_ypos#11
|
||||
Eliminating unused variable - keeping the phi block (byte) irq_sprite_ptr#11
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused block loop::@return
|
||||
Successful SSA optimization Pass2EliminateUnusedBlocks
|
||||
Adding number conversion cast (unumber) 4 in if((byte) sprites_init::s#1!=(number) 4) goto sprites_init::@1
|
||||
@ -1698,7 +1694,7 @@ CALL GRAPH
|
||||
Calls in [] to main:12
|
||||
Calls in [main] to sprites_init:24 sprites_irq_init:40 loop:42
|
||||
|
||||
Created 9 initial phi equivalence classes
|
||||
Created 12 initial phi equivalence classes
|
||||
Coalesced [45] main::s#6 ← main::s#1
|
||||
Coalesced [46] main::xpos#6 ← main::xpos#1
|
||||
Coalesced [47] main::ypos#6 ← main::ypos#1
|
||||
@ -1709,9 +1705,18 @@ Coalesced [62] loop::idx#4 ← loop::idx#1
|
||||
Coalesced [87] sprites_init::s#3 ← sprites_init::s#1
|
||||
Coalesced [88] sprites_init::xpos#3 ← sprites_init::xpos#1
|
||||
Coalesced [112] irq_raster_next#26 ← irq_raster_next#3
|
||||
Coalesced [121] irq_raster_next#25 ← irq_raster_next#2
|
||||
Coalesced [127] irq_raster_next#24 ← irq_raster_next#1
|
||||
Coalesced down to 9 phi equivalence classes
|
||||
Coalesced [113] irq_cnt#22 ← irq_cnt#1
|
||||
Coalesced [114] irq_sprite_ypos#26 ← irq_sprite_ypos#3
|
||||
Coalesced [115] irq_sprite_ptr#20 ← irq_sprite_ptr#3
|
||||
Coalesced [124] irq_raster_next#25 ← irq_raster_next#2
|
||||
Coalesced [125] irq_cnt#21 ← irq_cnt#2
|
||||
Coalesced [126] irq_sprite_ypos#25 ← irq_sprite_ypos#2
|
||||
Coalesced [127] irq_sprite_ptr#19 ← irq_sprite_ptr#2
|
||||
Coalesced [133] irq_raster_next#24 ← irq_raster_next#1
|
||||
Coalesced (already) [134] irq_cnt#20 ← irq_cnt#1
|
||||
Coalesced [135] irq_sprite_ypos#24 ← irq_sprite_ypos#1
|
||||
Coalesced [136] irq_sprite_ptr#18 ← irq_sprite_ptr#1
|
||||
Coalesced down to 12 phi equivalence classes
|
||||
Culled Empty Block (label) toSpritePtr1_@return
|
||||
Culled Empty Block (label) @11
|
||||
Culled Empty Block (label) main::vicSelectGfxBank1_toDd001_@return
|
||||
@ -1954,6 +1959,9 @@ sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@6
|
||||
[95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3
|
||||
to:sprites_irq::@5
|
||||
sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7
|
||||
[96] (byte) irq_sprite_ptr#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ptr#1 sprites_irq::@4/(byte) irq_sprite_ptr#2 sprites_irq::@7/(byte) irq_sprite_ptr#3 )
|
||||
[96] (byte) irq_sprite_ypos#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ypos#1 sprites_irq::@4/(byte) irq_sprite_ypos#2 sprites_irq::@7/(byte) irq_sprite_ypos#3 )
|
||||
[96] (byte) irq_cnt#3 ← phi( sprites_irq::@11/(byte) irq_cnt#1 sprites_irq::@4/(byte) irq_cnt#2 sprites_irq::@7/(byte) irq_cnt#1 )
|
||||
[96] (byte) irq_raster_next#4 ← phi( sprites_irq::@11/(byte) irq_raster_next#1 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@7/(byte) irq_raster_next#3 )
|
||||
[97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4
|
||||
[98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
|
||||
@ -2024,8 +2032,9 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) VIC_CONTROL
|
||||
(byte) irq_cnt
|
||||
(byte) irq_cnt#0 0.17391304347826086
|
||||
(byte) irq_cnt#1 3.0
|
||||
(byte) irq_cnt#2 20.0
|
||||
(byte) irq_cnt#1 1.0
|
||||
(byte) irq_cnt#2 1.0
|
||||
(byte) irq_cnt#3 60.0
|
||||
(byte) irq_raster_next
|
||||
(byte) irq_raster_next#0 0.3076923076923077
|
||||
(byte) irq_raster_next#1 1.0
|
||||
@ -2034,14 +2043,16 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) irq_raster_next#4 8.0
|
||||
(byte) irq_sprite_ptr
|
||||
(byte) irq_sprite_ptr#0 0.25806451612903225
|
||||
(byte) irq_sprite_ptr#1 20.0
|
||||
(byte) irq_sprite_ptr#2 20.0
|
||||
(byte) irq_sprite_ptr#3 20.0
|
||||
(byte) irq_sprite_ptr#1 4.0
|
||||
(byte) irq_sprite_ptr#11 60.0
|
||||
(byte) irq_sprite_ptr#2 4.0
|
||||
(byte) irq_sprite_ptr#3 4.0
|
||||
(byte) irq_sprite_ypos
|
||||
(byte) irq_sprite_ypos#0 0.27586206896551724
|
||||
(byte) irq_sprite_ypos#1 20.0
|
||||
(byte) irq_sprite_ypos#2 20.0
|
||||
(byte) irq_sprite_ypos#3 20.0
|
||||
(byte) irq_sprite_ypos#1 1.3333333333333333
|
||||
(byte) irq_sprite_ypos#11 60.0
|
||||
(byte) irq_sprite_ypos#2 2.0
|
||||
(byte) irq_sprite_ypos#3 2.0
|
||||
(void()) loop()
|
||||
(byte~) loop::$1 202.0
|
||||
(byte) loop::idx
|
||||
@ -2137,15 +2148,13 @@ Initial phi equivalence classes
|
||||
[ sprites_init::s#2 sprites_init::s#1 ]
|
||||
[ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
[ irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
|
||||
[ irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
[ irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
[ irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_raster_next#0 ] and [ irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_sprite_ypos#0 ] and [ irq_sprite_ypos#1 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_sprite_ypos#0 irq_sprite_ypos#1 ] and [ irq_sprite_ypos#2 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 ] and [ irq_sprite_ypos#3 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_sprite_ptr#0 ] and [ irq_sprite_ptr#1 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_sprite_ptr#0 irq_sprite_ptr#1 ] and [ irq_sprite_ptr#2 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 ] and [ irq_sprite_ptr#3 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_cnt#0 ] and [ irq_cnt#1 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_cnt#0 irq_cnt#1 ] and [ irq_cnt#2 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_sprite_ypos#0 ] and [ irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_sprite_ptr#0 ] and [ irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_cnt#0 ] and [ irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
Added variable main::s2#0 to zero page equivalence class [ main::s2#0 ]
|
||||
Added variable main::$6 to zero page equivalence class [ main::$6 ]
|
||||
Added variable loop::$1 to zero page equivalence class [ loop::$1 ]
|
||||
@ -2169,9 +2178,9 @@ Complete equivalence classes
|
||||
[ sprites_irq::raster_sprite_gfx_modify#0 ]
|
||||
[ render_screen_showing#0 ]
|
||||
[ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
|
||||
[ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
[ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
[ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
|
||||
[ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
[ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
[ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
[ main::s2#0 ]
|
||||
[ main::$6 ]
|
||||
[ loop::$1 ]
|
||||
@ -2194,9 +2203,9 @@ Allocated zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
Allocated zp ZP_BYTE:10 [ sprites_irq::raster_sprite_gfx_modify#0 ]
|
||||
Allocated zp ZP_BYTE:11 [ render_screen_showing#0 ]
|
||||
Allocated zp ZP_BYTE:12 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
|
||||
Allocated zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
Allocated zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Allocated zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
|
||||
Allocated zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
Allocated zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Allocated zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
Allocated zp ZP_BYTE:16 [ main::s2#0 ]
|
||||
Allocated zp ZP_BYTE:17 [ main::$6 ]
|
||||
Allocated zp ZP_BYTE:18 [ loop::$1 ]
|
||||
@ -2769,22 +2778,25 @@ sprites_irq: {
|
||||
b5_from_b11:
|
||||
b5_from_b4:
|
||||
b5_from_b7:
|
||||
//SEG159 [96] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy
|
||||
//SEG159 [96] phi (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy
|
||||
//SEG160 [96] phi (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#1] -- register_copy
|
||||
//SEG161 [96] phi (byte) irq_cnt#3 = (byte) irq_cnt#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#2] -- register_copy
|
||||
//SEG162 [96] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#3] -- register_copy
|
||||
jmp b5
|
||||
//SEG160 sprites_irq::@5
|
||||
//SEG163 sprites_irq::@5
|
||||
b5:
|
||||
//SEG161 [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1
|
||||
//SEG164 [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1
|
||||
// Setup next interrupt
|
||||
lda irq_raster_next
|
||||
sta RASTER
|
||||
//SEG162 [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG165 [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
// Acknowledge the IRQ and setup the next one
|
||||
lda #IRQ_RASTER
|
||||
sta IRQ_STATUS
|
||||
jmp breturn
|
||||
//SEG163 sprites_irq::@return
|
||||
//SEG166 sprites_irq::@return
|
||||
breturn:
|
||||
//SEG164 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
//SEG167 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
rega:
|
||||
lda #00
|
||||
regx:
|
||||
@ -2792,64 +2804,64 @@ sprites_irq: {
|
||||
regy:
|
||||
ldy #00
|
||||
rti
|
||||
//SEG165 sprites_irq::@4
|
||||
//SEG168 sprites_irq::@4
|
||||
b4:
|
||||
//SEG166 [100] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1
|
||||
//SEG169 [100] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta irq_cnt
|
||||
//SEG167 [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
|
||||
//SEG170 [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
|
||||
lda #IRQ_RASTER_FIRST
|
||||
sta irq_raster_next
|
||||
//SEG168 [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
//SEG171 [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
lax irq_sprite_ypos
|
||||
axs #-[$15]
|
||||
stx irq_sprite_ypos
|
||||
//SEG169 [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1
|
||||
//SEG172 [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1
|
||||
lax irq_sprite_ptr
|
||||
axs #-[3]
|
||||
stx irq_sprite_ptr
|
||||
jmp b5_from_b4
|
||||
//SEG170 sprites_irq::@3
|
||||
//SEG173 sprites_irq::@3
|
||||
b3:
|
||||
//SEG171 [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
//SEG174 [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
lax irq_raster_next
|
||||
axs #-[$15]
|
||||
stx irq_raster_next
|
||||
//SEG172 [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
|
||||
//SEG175 [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
|
||||
lda #SPRITES_FIRST_YPOS
|
||||
sta irq_sprite_ypos
|
||||
//SEG173 [106] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2]
|
||||
//SEG176 [106] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2]
|
||||
toSpritePtr2_from_b3:
|
||||
jmp toSpritePtr2
|
||||
//SEG174 sprites_irq::toSpritePtr2
|
||||
//SEG177 sprites_irq::toSpritePtr2
|
||||
toSpritePtr2:
|
||||
jmp b11
|
||||
//SEG175 sprites_irq::@11
|
||||
//SEG178 sprites_irq::@11
|
||||
b11:
|
||||
//SEG176 [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1
|
||||
//SEG179 [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1
|
||||
lda #toSpritePtr2_return
|
||||
sta irq_sprite_ptr
|
||||
jmp b5_from_b11
|
||||
//SEG177 sprites_irq::@1
|
||||
//SEG180 sprites_irq::@1
|
||||
b1:
|
||||
//SEG178 [108] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1
|
||||
//SEG181 [108] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuz1
|
||||
lda ptr
|
||||
sta PLAYFIELD_SPRITE_PTRS_1
|
||||
//SEG179 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2
|
||||
//SEG182 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuz1=_inc_vbuz2
|
||||
ldy ptr
|
||||
iny
|
||||
sty ptr_1
|
||||
//SEG180 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1
|
||||
//SEG183 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1
|
||||
lda ptr_1
|
||||
sta PLAYFIELD_SPRITE_PTRS_1+1
|
||||
//SEG181 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1
|
||||
//SEG184 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuz1
|
||||
lda ptr_1
|
||||
sta PLAYFIELD_SPRITE_PTRS_1+2
|
||||
//SEG182 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuz1=_inc_vbuz2
|
||||
//SEG185 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuz1=_inc_vbuz2
|
||||
ldy ptr_1
|
||||
iny
|
||||
sty ptr_2
|
||||
//SEG183 [113] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuz1
|
||||
//SEG186 [113] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuz1
|
||||
lda ptr_2
|
||||
sta PLAYFIELD_SPRITE_PTRS_1+3
|
||||
jmp b2
|
||||
@ -2931,20 +2943,20 @@ Statement [81] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gf
|
||||
Statement [83] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:22 [ sprites_irq::ptr#0 ]
|
||||
Statement [91] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a
|
||||
Statement [92] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
|
||||
Statement [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#3 ] ( [ irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [92] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a
|
||||
Statement [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ( [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ( [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a
|
||||
Statement [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
|
||||
Statement [99] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
|
||||
Statement [100] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
|
||||
Statement [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a
|
||||
Statement [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 ] ( [ irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
|
||||
Statement [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
|
||||
Statement [100] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ) always clobbers reg byte a
|
||||
Statement [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ) always clobbers reg byte a
|
||||
Statement [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ( [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_cnt#1 irq_raster_next#1 ] ( [ irq_cnt#1 irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ) always clobbers reg byte a
|
||||
Statement [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ) always clobbers reg byte a
|
||||
Statement [1] (byte) render_screen_showing#0 ← (byte) 0 [ ] ( ) always clobbers reg byte a
|
||||
Statement [3] (byte) irq_raster_next#0 ← (const byte) IRQ_RASTER_FIRST#0 [ ] ( ) always clobbers reg byte a
|
||||
Statement [4] (byte) irq_sprite_ypos#0 ← (const byte) SPRITES_FIRST_YPOS#0+(byte) $15 [ ] ( ) always clobbers reg byte a
|
||||
@ -2985,20 +2997,20 @@ Statement [69] (byte) sprites_init::xpos#1 ← (byte) sprites_init::xpos#2 + (by
|
||||
Statement [81] if(*((const byte*) RASTER#0)<(byte) sprites_irq::raster_sprite_gfx_modify#0) goto sprites_irq::@8 [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ( [ render_screen_showing#0 irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::raster_sprite_gfx_modify#0 ] ) always clobbers reg byte a
|
||||
Statement [83] if((byte) render_screen_showing#0==(byte) 0) goto sprites_irq::@1 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#0 sprites_irq::ptr#0 ] ) always clobbers reg byte a
|
||||
Statement [91] if((byte) irq_cnt#1==(byte) 9) goto sprites_irq::@3 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a
|
||||
Statement [92] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
|
||||
Statement [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#3 ] ( [ irq_sprite_ptr#0 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#3 ] ( [ irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [92] if((byte) irq_cnt#1==(byte) $a) goto sprites_irq::@4 [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ( [ irq_raster_next#0 irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 ] ) always clobbers reg byte a
|
||||
Statement [93] (byte) irq_raster_next#3 ← (byte) irq_raster_next#0 + (byte) $14 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [94] (byte) irq_sprite_ypos#3 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ( [ irq_sprite_ptr#0 irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [95] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ( [ irq_cnt#1 irq_raster_next#3 irq_sprite_ypos#3 irq_sprite_ptr#3 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 [ ] ( [ ] ) always clobbers reg byte a
|
||||
Statement [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
|
||||
Statement [99] return [ ] ( [ ] ) always clobbers reg byte a reg byte x reg byte y
|
||||
Statement [100] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 ] ) always clobbers reg byte a
|
||||
Statement [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a
|
||||
Statement [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 ] ( [ irq_raster_next#2 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
|
||||
Statement [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_raster_next#1 ] ( [ irq_raster_next#1 ] ) always clobbers reg byte a
|
||||
Statement [100] (byte) irq_cnt#2 ← (byte) 0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_cnt#2 ] ) always clobbers reg byte a
|
||||
Statement [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ( [ irq_sprite_ypos#0 irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 ] ) always clobbers reg byte a
|
||||
Statement [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ( [ irq_sprite_ptr#0 irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ( [ irq_raster_next#2 irq_cnt#2 irq_sprite_ypos#2 irq_sprite_ptr#2 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 [ irq_cnt#1 irq_raster_next#1 ] ( [ irq_cnt#1 irq_raster_next#1 ] ) always clobbers reg byte a reg byte x
|
||||
Statement [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 ] ) always clobbers reg byte a
|
||||
Statement [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ( [ irq_cnt#1 irq_raster_next#1 irq_sprite_ypos#1 irq_sprite_ptr#1 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ main::s#2 main::s#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
|
||||
@ -3010,9 +3022,9 @@ Potential registers zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ] :
|
||||
Potential registers zp ZP_BYTE:10 [ sprites_irq::raster_sprite_gfx_modify#0 ] : zp ZP_BYTE:10 ,
|
||||
Potential registers zp ZP_BYTE:11 [ render_screen_showing#0 ] : zp ZP_BYTE:11 ,
|
||||
Potential registers zp ZP_BYTE:12 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] : zp ZP_BYTE:12 ,
|
||||
Potential registers zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] : zp ZP_BYTE:13 ,
|
||||
Potential registers zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] : zp ZP_BYTE:14 ,
|
||||
Potential registers zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ] : zp ZP_BYTE:15 ,
|
||||
Potential registers zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] : zp ZP_BYTE:13 ,
|
||||
Potential registers zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] : zp ZP_BYTE:14 ,
|
||||
Potential registers zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] : zp ZP_BYTE:15 ,
|
||||
Potential registers zp ZP_BYTE:16 [ main::s2#0 ] : zp ZP_BYTE:16 , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:17 [ main::$6 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y ,
|
||||
Potential registers zp ZP_BYTE:18 [ loop::$1 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y ,
|
||||
@ -3027,14 +3039,14 @@ Potential registers zp ZP_BYTE:26 [ sprites_irq::ptr#2 ] : zp ZP_BYTE:26 , reg b
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [loop] 227.25: zp ZP_BYTE:6 [ loop::s#2 loop::s#1 ] 202: zp ZP_BYTE:18 [ loop::$1 ] 194: zp ZP_BYTE:7 [ loop::idx#2 loop::idx#0 loop::idx#1 ]
|
||||
Uplift Scope [] 60.28: zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] 60.26: zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] 25.67: zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ] 23.17: zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ] 11.97: zp ZP_BYTE:12 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] 0.4: zp ZP_BYTE:11 [ render_screen_showing#0 ]
|
||||
Uplift Scope [] 72.26: zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] 65.61: zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] 62.17: zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] 25.67: zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ] 11.97: zp ZP_BYTE:12 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] 0.4: zp ZP_BYTE:11 [ render_screen_showing#0 ]
|
||||
Uplift Scope [main] 23.1: zp ZP_BYTE:2 [ main::s#2 main::s#1 ] 22: zp ZP_BYTE:17 [ main::$6 ] 16.5: zp ZP_BYTE:16 [ main::s2#0 ] 11: zp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ] 9.62: zp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 ]
|
||||
Uplift Scope [sprites_init] 25.3: zp ZP_BYTE:8 [ sprites_init::s#2 sprites_init::s#1 ] 22: zp ZP_BYTE:19 [ sprites_init::s2#0 ] 15.58: zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
Uplift Scope [sprites_irq] 6.5: zp ZP_BYTE:10 [ sprites_irq::raster_sprite_gfx_modify#0 ] 4: zp ZP_BYTE:21 [ sprites_irq::$0 ] 4: zp ZP_BYTE:24 [ sprites_irq::ptr#4 ] 4: zp ZP_BYTE:26 [ sprites_irq::ptr#2 ] 2.67: zp ZP_BYTE:23 [ sprites_irq::ptr#3 ] 2.67: zp ZP_BYTE:25 [ sprites_irq::ptr#1 ] 2.5: zp ZP_BYTE:20 [ sprites_irq::ypos#0 ] 2.5: zp ZP_BYTE:22 [ sprites_irq::ptr#0 ]
|
||||
Uplift Scope [sprites_irq_init]
|
||||
|
||||
Uplifting [loop] best 9610 combination zp ZP_BYTE:6 [ loop::s#2 loop::s#1 ] reg byte a [ loop::$1 ] reg byte x [ loop::idx#2 loop::idx#0 loop::idx#1 ]
|
||||
Uplifting [] best 9610 combination zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ] zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ] zp ZP_BYTE:12 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] zp ZP_BYTE:11 [ render_screen_showing#0 ]
|
||||
Uplifting [] best 9610 combination zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ] zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ] zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ] zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ] zp ZP_BYTE:12 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ] zp ZP_BYTE:11 [ render_screen_showing#0 ]
|
||||
Uplifting [main] best 9330 combination reg byte y [ main::s#2 main::s#1 ] reg byte a [ main::$6 ] reg byte x [ main::s2#0 ] zp ZP_BYTE:4 [ main::ypos#2 main::ypos#1 ] zp ZP_BYTE:3 [ main::xpos#2 main::xpos#1 ]
|
||||
Limited combination testing to 100 combinations of 324 possible.
|
||||
Uplifting [sprites_init] best 9160 combination reg byte y [ sprites_init::s#2 sprites_init::s#1 ] reg byte x [ sprites_init::s2#0 ] zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
@ -3043,14 +3055,14 @@ Limited combination testing to 100 combinations of 12288 possible.
|
||||
Uplifting [sprites_irq_init] best 9136 combination
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:6 [ loop::s#2 loop::s#1 ]
|
||||
Uplifting [loop] best 9136 combination zp ZP_BYTE:6 [ loop::s#2 loop::s#1 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
Uplifting [] best 9136 combination zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Uplifting [] best 9136 combination zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Uplifting [] best 9136 combination zp ZP_BYTE:14 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
Uplifting [] best 9136 combination zp ZP_BYTE:13 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
Uplifting [] best 9136 combination zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ]
|
||||
Uplifting [] best 9136 combination zp ZP_BYTE:5 [ sin_idx#10 sin_idx#3 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
|
||||
Uplifting [] best 9136 combination zp ZP_BYTE:15 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
Uplifting [sprites_init] best 9136 combination zp ZP_BYTE:9 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:12 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
|
||||
@ -3077,13 +3089,13 @@ Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:6 [ sprites_init::xpos#2 sprites_init::x
|
||||
Allocated (was zp ZP_BYTE:10) zp ZP_BYTE:7 [ sprites_irq::raster_sprite_gfx_modify#0 ]
|
||||
Allocated (was zp ZP_BYTE:11) zp ZP_BYTE:8 [ render_screen_showing#0 ]
|
||||
Allocated (was zp ZP_BYTE:12) zp ZP_BYTE:9 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
|
||||
Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:10 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:11 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Allocated (was zp ZP_BYTE:15) zp ZP_BYTE:12 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
|
||||
Allocated (was zp ZP_BYTE:13) zp ZP_BYTE:10 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
Allocated (was zp ZP_BYTE:14) zp ZP_BYTE:11 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
Allocated (was zp ZP_BYTE:15) zp ZP_BYTE:12 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
Interrupt procedure sprites_irq clobbers AXCNZV
|
||||
Removing interrupt register storage sty regy+1 in SEG128 entry interrupt(HARDWARE_CLOBBER)
|
||||
Removing interrupt register storage regy: in SEG164 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
Removing interrupt register storage ldy #00 in SEG164 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
Removing interrupt register storage regy: in SEG167 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
Removing interrupt register storage ldy #00 in SEG167 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG0 File Comments
|
||||
@ -3601,79 +3613,82 @@ sprites_irq: {
|
||||
b5_from_b11:
|
||||
b5_from_b4:
|
||||
b5_from_b7:
|
||||
//SEG159 [96] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy
|
||||
//SEG159 [96] phi (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy
|
||||
//SEG160 [96] phi (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#1] -- register_copy
|
||||
//SEG161 [96] phi (byte) irq_cnt#3 = (byte) irq_cnt#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#2] -- register_copy
|
||||
//SEG162 [96] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#3] -- register_copy
|
||||
jmp b5
|
||||
//SEG160 sprites_irq::@5
|
||||
//SEG163 sprites_irq::@5
|
||||
b5:
|
||||
//SEG161 [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1
|
||||
//SEG164 [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1
|
||||
// Setup next interrupt
|
||||
lda irq_raster_next
|
||||
sta RASTER
|
||||
//SEG162 [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG165 [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
// Acknowledge the IRQ and setup the next one
|
||||
lda #IRQ_RASTER
|
||||
sta IRQ_STATUS
|
||||
jmp breturn
|
||||
//SEG163 sprites_irq::@return
|
||||
//SEG166 sprites_irq::@return
|
||||
breturn:
|
||||
//SEG164 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
//SEG167 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
rega:
|
||||
lda #00
|
||||
regx:
|
||||
ldx #00
|
||||
rti
|
||||
//SEG165 sprites_irq::@4
|
||||
//SEG168 sprites_irq::@4
|
||||
b4:
|
||||
//SEG166 [100] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1
|
||||
//SEG169 [100] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta irq_cnt
|
||||
//SEG167 [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
|
||||
//SEG170 [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
|
||||
lda #IRQ_RASTER_FIRST
|
||||
sta irq_raster_next
|
||||
//SEG168 [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
//SEG171 [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
lax irq_sprite_ypos
|
||||
axs #-[$15]
|
||||
stx irq_sprite_ypos
|
||||
//SEG169 [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1
|
||||
//SEG172 [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1
|
||||
lax irq_sprite_ptr
|
||||
axs #-[3]
|
||||
stx irq_sprite_ptr
|
||||
jmp b5_from_b4
|
||||
//SEG170 sprites_irq::@3
|
||||
//SEG173 sprites_irq::@3
|
||||
b3:
|
||||
//SEG171 [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
//SEG174 [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
lax irq_raster_next
|
||||
axs #-[$15]
|
||||
stx irq_raster_next
|
||||
//SEG172 [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
|
||||
//SEG175 [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
|
||||
lda #SPRITES_FIRST_YPOS
|
||||
sta irq_sprite_ypos
|
||||
//SEG173 [106] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2]
|
||||
//SEG176 [106] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2]
|
||||
toSpritePtr2_from_b3:
|
||||
jmp toSpritePtr2
|
||||
//SEG174 sprites_irq::toSpritePtr2
|
||||
//SEG177 sprites_irq::toSpritePtr2
|
||||
toSpritePtr2:
|
||||
jmp b11
|
||||
//SEG175 sprites_irq::@11
|
||||
//SEG178 sprites_irq::@11
|
||||
b11:
|
||||
//SEG176 [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1
|
||||
//SEG179 [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1
|
||||
lda #toSpritePtr2_return
|
||||
sta irq_sprite_ptr
|
||||
jmp b5_from_b11
|
||||
//SEG177 sprites_irq::@1
|
||||
//SEG180 sprites_irq::@1
|
||||
b1:
|
||||
//SEG178 [108] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
|
||||
//SEG181 [108] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
|
||||
stx PLAYFIELD_SPRITE_PTRS_1
|
||||
//SEG179 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx
|
||||
//SEG182 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG180 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
|
||||
//SEG183 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
|
||||
stx PLAYFIELD_SPRITE_PTRS_1+1
|
||||
//SEG181 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
|
||||
//SEG184 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
|
||||
stx PLAYFIELD_SPRITE_PTRS_1+2
|
||||
//SEG182 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx
|
||||
//SEG185 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx
|
||||
inx
|
||||
txa
|
||||
//SEG183 [113] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa
|
||||
//SEG186 [113] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa
|
||||
sta PLAYFIELD_SPRITE_PTRS_1+3
|
||||
jmp b2
|
||||
}
|
||||
@ -3890,8 +3905,9 @@ FINAL SYMBOL TABLE
|
||||
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
|
||||
(byte) irq_cnt
|
||||
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:12 0.17391304347826086
|
||||
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:12 3.0
|
||||
(byte) irq_cnt#2 irq_cnt zp ZP_BYTE:12 20.0
|
||||
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:12 1.0
|
||||
(byte) irq_cnt#2 irq_cnt zp ZP_BYTE:12 1.0
|
||||
(byte) irq_cnt#3 irq_cnt zp ZP_BYTE:12 60.0
|
||||
(byte) irq_raster_next
|
||||
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:9 0.3076923076923077
|
||||
(byte) irq_raster_next#1 irq_raster_next zp ZP_BYTE:9 1.0
|
||||
@ -3900,14 +3916,16 @@ FINAL SYMBOL TABLE
|
||||
(byte) irq_raster_next#4 irq_raster_next zp ZP_BYTE:9 8.0
|
||||
(byte) irq_sprite_ptr
|
||||
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:11 0.25806451612903225
|
||||
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:11 20.0
|
||||
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:11 20.0
|
||||
(byte) irq_sprite_ptr#3 irq_sprite_ptr zp ZP_BYTE:11 20.0
|
||||
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:11 4.0
|
||||
(byte) irq_sprite_ptr#11 irq_sprite_ptr zp ZP_BYTE:11 60.0
|
||||
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:11 4.0
|
||||
(byte) irq_sprite_ptr#3 irq_sprite_ptr zp ZP_BYTE:11 4.0
|
||||
(byte) irq_sprite_ypos
|
||||
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:10 0.27586206896551724
|
||||
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:10 20.0
|
||||
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:10 20.0
|
||||
(byte) irq_sprite_ypos#3 irq_sprite_ypos zp ZP_BYTE:10 20.0
|
||||
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:10 1.3333333333333333
|
||||
(byte) irq_sprite_ypos#11 irq_sprite_ypos zp ZP_BYTE:10 60.0
|
||||
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:10 2.0
|
||||
(byte) irq_sprite_ypos#3 irq_sprite_ypos zp ZP_BYTE:10 2.0
|
||||
(void()) loop()
|
||||
(byte~) loop::$1 reg byte a 202.0
|
||||
(label) loop::@1
|
||||
@ -4043,9 +4061,9 @@ zp ZP_BYTE:6 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
zp ZP_BYTE:7 [ sprites_irq::raster_sprite_gfx_modify#0 ]
|
||||
zp ZP_BYTE:8 [ render_screen_showing#0 ]
|
||||
zp ZP_BYTE:9 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
|
||||
zp ZP_BYTE:10 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
zp ZP_BYTE:11 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
zp ZP_BYTE:12 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
|
||||
zp ZP_BYTE:10 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
zp ZP_BYTE:11 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
zp ZP_BYTE:12 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
reg byte x [ main::s2#0 ]
|
||||
reg byte a [ main::$6 ]
|
||||
reg byte a [ loop::$1 ]
|
||||
@ -4492,71 +4510,74 @@ sprites_irq: {
|
||||
axs #-[3]
|
||||
stx irq_sprite_ptr
|
||||
//SEG158 [96] phi from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7 to sprites_irq::@5 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5]
|
||||
//SEG159 [96] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy
|
||||
//SEG160 sprites_irq::@5
|
||||
//SEG159 [96] phi (byte) irq_sprite_ptr#11 = (byte) irq_sprite_ptr#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#0] -- register_copy
|
||||
//SEG160 [96] phi (byte) irq_sprite_ypos#11 = (byte) irq_sprite_ypos#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#1] -- register_copy
|
||||
//SEG161 [96] phi (byte) irq_cnt#3 = (byte) irq_cnt#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#2] -- register_copy
|
||||
//SEG162 [96] phi (byte) irq_raster_next#4 = (byte) irq_raster_next#1 [phi:sprites_irq::@11/sprites_irq::@4/sprites_irq::@7->sprites_irq::@5#3] -- register_copy
|
||||
//SEG163 sprites_irq::@5
|
||||
b5:
|
||||
//SEG161 [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1
|
||||
//SEG164 [97] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4 -- _deref_pbuc1=vbuz1
|
||||
// Setup next interrupt
|
||||
lda irq_raster_next
|
||||
sta RASTER
|
||||
//SEG162 [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG165 [98] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
// Acknowledge the IRQ and setup the next one
|
||||
lda #IRQ_RASTER
|
||||
sta IRQ_STATUS
|
||||
//SEG163 sprites_irq::@return
|
||||
//SEG164 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
//SEG166 sprites_irq::@return
|
||||
//SEG167 [99] return - exit interrupt(HARDWARE_CLOBBER)
|
||||
rega:
|
||||
lda #00
|
||||
regx:
|
||||
ldx #00
|
||||
rti
|
||||
//SEG165 sprites_irq::@4
|
||||
//SEG168 sprites_irq::@4
|
||||
b4:
|
||||
//SEG166 [100] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1
|
||||
//SEG169 [100] (byte) irq_cnt#2 ← (byte) 0 -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta irq_cnt
|
||||
//SEG167 [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
|
||||
//SEG170 [101] (byte) irq_raster_next#2 ← (const byte) IRQ_RASTER_FIRST#0 -- vbuz1=vbuc1
|
||||
lda #IRQ_RASTER_FIRST
|
||||
sta irq_raster_next
|
||||
//SEG168 [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
//SEG171 [102] (byte) irq_sprite_ypos#2 ← (byte) irq_sprite_ypos#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
lax irq_sprite_ypos
|
||||
axs #-[$15]
|
||||
stx irq_sprite_ypos
|
||||
//SEG169 [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1
|
||||
//SEG172 [103] (byte) irq_sprite_ptr#2 ← (byte) irq_sprite_ptr#0 + (byte) 3 -- vbuz1=vbuz1_plus_vbuc1
|
||||
lax irq_sprite_ptr
|
||||
axs #-[3]
|
||||
stx irq_sprite_ptr
|
||||
jmp b5
|
||||
//SEG170 sprites_irq::@3
|
||||
//SEG173 sprites_irq::@3
|
||||
b3:
|
||||
//SEG171 [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
//SEG174 [104] (byte) irq_raster_next#1 ← (byte) irq_raster_next#0 + (byte) $15 -- vbuz1=vbuz1_plus_vbuc1
|
||||
lax irq_raster_next
|
||||
axs #-[$15]
|
||||
stx irq_raster_next
|
||||
//SEG172 [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
|
||||
//SEG175 [105] (byte) irq_sprite_ypos#1 ← (const byte) SPRITES_FIRST_YPOS#0 -- vbuz1=vbuc1
|
||||
lda #SPRITES_FIRST_YPOS
|
||||
sta irq_sprite_ypos
|
||||
//SEG173 [106] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2]
|
||||
//SEG174 sprites_irq::toSpritePtr2
|
||||
//SEG175 sprites_irq::@11
|
||||
//SEG176 [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1
|
||||
//SEG176 [106] phi from sprites_irq::@3 to sprites_irq::toSpritePtr2 [phi:sprites_irq::@3->sprites_irq::toSpritePtr2]
|
||||
//SEG177 sprites_irq::toSpritePtr2
|
||||
//SEG178 sprites_irq::@11
|
||||
//SEG179 [107] (byte) irq_sprite_ptr#1 ← (const byte) sprites_irq::toSpritePtr2_return#0 -- vbuz1=vbuc1
|
||||
lda #toSpritePtr2_return
|
||||
sta irq_sprite_ptr
|
||||
jmp b5
|
||||
//SEG177 sprites_irq::@1
|
||||
//SEG180 sprites_irq::@1
|
||||
b1:
|
||||
//SEG178 [108] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
|
||||
//SEG181 [108] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0) ← (byte) sprites_irq::ptr#0 -- _deref_pbuc1=vbuxx
|
||||
stx PLAYFIELD_SPRITE_PTRS_1
|
||||
//SEG179 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx
|
||||
//SEG182 [109] (byte) sprites_irq::ptr#1 ← ++ (byte) sprites_irq::ptr#0 -- vbuxx=_inc_vbuxx
|
||||
inx
|
||||
//SEG180 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
|
||||
//SEG183 [110] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 1) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
|
||||
stx PLAYFIELD_SPRITE_PTRS_1+1
|
||||
//SEG181 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
|
||||
//SEG184 [111] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 2) ← (byte) sprites_irq::ptr#1 -- _deref_pbuc1=vbuxx
|
||||
stx PLAYFIELD_SPRITE_PTRS_1+2
|
||||
//SEG182 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx
|
||||
//SEG185 [112] (byte) sprites_irq::ptr#2 ← ++ (byte) sprites_irq::ptr#1 -- vbuaa=_inc_vbuxx
|
||||
inx
|
||||
txa
|
||||
//SEG183 [113] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa
|
||||
//SEG186 [113] *((const byte*) PLAYFIELD_SPRITE_PTRS_1#0+(byte) 3) ← (byte) sprites_irq::ptr#2 -- _deref_pbuc1=vbuaa
|
||||
sta PLAYFIELD_SPRITE_PTRS_1+3
|
||||
jmp b2
|
||||
}
|
||||
|
@ -75,8 +75,9 @@
|
||||
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
|
||||
(byte) irq_cnt
|
||||
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:12 0.17391304347826086
|
||||
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:12 3.0
|
||||
(byte) irq_cnt#2 irq_cnt zp ZP_BYTE:12 20.0
|
||||
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:12 1.0
|
||||
(byte) irq_cnt#2 irq_cnt zp ZP_BYTE:12 1.0
|
||||
(byte) irq_cnt#3 irq_cnt zp ZP_BYTE:12 60.0
|
||||
(byte) irq_raster_next
|
||||
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:9 0.3076923076923077
|
||||
(byte) irq_raster_next#1 irq_raster_next zp ZP_BYTE:9 1.0
|
||||
@ -85,14 +86,16 @@
|
||||
(byte) irq_raster_next#4 irq_raster_next zp ZP_BYTE:9 8.0
|
||||
(byte) irq_sprite_ptr
|
||||
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:11 0.25806451612903225
|
||||
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:11 20.0
|
||||
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:11 20.0
|
||||
(byte) irq_sprite_ptr#3 irq_sprite_ptr zp ZP_BYTE:11 20.0
|
||||
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:11 4.0
|
||||
(byte) irq_sprite_ptr#11 irq_sprite_ptr zp ZP_BYTE:11 60.0
|
||||
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:11 4.0
|
||||
(byte) irq_sprite_ptr#3 irq_sprite_ptr zp ZP_BYTE:11 4.0
|
||||
(byte) irq_sprite_ypos
|
||||
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:10 0.27586206896551724
|
||||
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:10 20.0
|
||||
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:10 20.0
|
||||
(byte) irq_sprite_ypos#3 irq_sprite_ypos zp ZP_BYTE:10 20.0
|
||||
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:10 1.3333333333333333
|
||||
(byte) irq_sprite_ypos#11 irq_sprite_ypos zp ZP_BYTE:10 60.0
|
||||
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:10 2.0
|
||||
(byte) irq_sprite_ypos#3 irq_sprite_ypos zp ZP_BYTE:10 2.0
|
||||
(void()) loop()
|
||||
(byte~) loop::$1 reg byte a 202.0
|
||||
(label) loop::@1
|
||||
@ -228,9 +231,9 @@ zp ZP_BYTE:6 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
zp ZP_BYTE:7 [ sprites_irq::raster_sprite_gfx_modify#0 ]
|
||||
zp ZP_BYTE:8 [ render_screen_showing#0 ]
|
||||
zp ZP_BYTE:9 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
|
||||
zp ZP_BYTE:10 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
zp ZP_BYTE:11 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
zp ZP_BYTE:12 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
|
||||
zp ZP_BYTE:10 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
zp ZP_BYTE:11 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
zp ZP_BYTE:12 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
reg byte x [ main::s2#0 ]
|
||||
reg byte a [ main::$6 ]
|
||||
reg byte a [ loop::$1 ]
|
||||
|
@ -118,45 +118,45 @@
|
||||
// The line of the first IRQ
|
||||
.const IRQ_RASTER_FIRST = SPRITES_FIRST_YPOS+$13
|
||||
.const toSpritePtr1_return = PLAYFIELD_SPRITES/$40
|
||||
.label keyboard_events_size = $42
|
||||
.label render_screen_showing = $55
|
||||
.label score_bcd = $28
|
||||
.label keyboard_events_size = $43
|
||||
.label render_screen_showing = 4
|
||||
.label score_bcd = $29
|
||||
.label irq_raster_next = $56
|
||||
.label irq_sprite_ypos = $57
|
||||
.label irq_sprite_ptr = $58
|
||||
.label irq_cnt = $59
|
||||
.label current_movedown_slow = $2d
|
||||
.label current_ypos = $25
|
||||
.label current_xpos = $35
|
||||
.label current_orientation = $32
|
||||
.label current_piece_gfx = $33
|
||||
.label current_piece_char = $31
|
||||
.label level_bcd = $2e
|
||||
.label current_piece = $2f
|
||||
.label game_over = $37
|
||||
.label next_piece_idx = $36
|
||||
.label level = $2c
|
||||
.label current_movedown_slow = $2e
|
||||
.label current_ypos = $26
|
||||
.label current_xpos = $36
|
||||
.label current_orientation = $33
|
||||
.label current_piece_gfx = $34
|
||||
.label current_piece_char = $32
|
||||
.label level_bcd = $2f
|
||||
.label current_piece = $30
|
||||
.label game_over = $38
|
||||
.label next_piece_idx = $37
|
||||
.label level = $2d
|
||||
.label render_screen_render = 3
|
||||
.label render_screen_show = 2
|
||||
.label current_movedown_counter = 4
|
||||
.label lines_bcd = $26
|
||||
.label current_piece_17 = $1e
|
||||
.label render_screen_render_33 = $e
|
||||
.label current_xpos_59 = $f
|
||||
.label current_piece_gfx_64 = $10
|
||||
.label current_piece_char_68 = $12
|
||||
.label render_screen_render_65 = $e
|
||||
.label current_xpos_119 = $f
|
||||
.label current_xpos_120 = $f
|
||||
.label current_piece_gfx_112 = $10
|
||||
.label current_piece_gfx_113 = $10
|
||||
.label current_piece_char_100 = $12
|
||||
.label current_piece_char_101 = $12
|
||||
.label current_piece_96 = $1e
|
||||
.label current_piece_97 = $1e
|
||||
.label current_piece_98 = $1e
|
||||
.label current_piece_99 = $1e
|
||||
.label current_piece_100 = $1e
|
||||
.label current_movedown_counter = 5
|
||||
.label lines_bcd = $27
|
||||
.label current_piece_17 = $1f
|
||||
.label render_screen_render_33 = $f
|
||||
.label current_xpos_59 = $10
|
||||
.label current_piece_gfx_64 = $11
|
||||
.label current_piece_char_68 = $13
|
||||
.label render_screen_render_65 = $f
|
||||
.label current_xpos_119 = $10
|
||||
.label current_xpos_120 = $10
|
||||
.label current_piece_gfx_112 = $11
|
||||
.label current_piece_gfx_113 = $11
|
||||
.label current_piece_char_100 = $13
|
||||
.label current_piece_char_101 = $13
|
||||
.label current_piece_96 = $1f
|
||||
.label current_piece_97 = $1f
|
||||
.label current_piece_98 = $1f
|
||||
.label current_piece_99 = $1f
|
||||
.label current_piece_100 = $1f
|
||||
bbegin:
|
||||
// The screen currently being showed to the user. $00 for screen 1 / $20 for screen 2.
|
||||
lda #0
|
||||
@ -290,7 +290,7 @@ render_score: {
|
||||
.const score_offset = $28*5+$1c
|
||||
.const lines_offset = $28*1+$16
|
||||
.const level_offset = $28*$13+$1f
|
||||
.label screen = 5
|
||||
.label screen = 6
|
||||
lda render_screen_render
|
||||
cmp #0
|
||||
beq b1
|
||||
@ -356,12 +356,12 @@ render_score: {
|
||||
// - offset: offset on the screen
|
||||
// - bcd: The BCD-value to render
|
||||
// - only_low: if non-zero only renders the low digit
|
||||
// render_bcd(byte* zeropage(5) screen, word zeropage(7) offset, byte register(X) bcd, byte register(Y) only_low)
|
||||
// render_bcd(byte* zeropage(6) screen, word zeropage(8) offset, byte register(X) bcd, byte register(Y) only_low)
|
||||
render_bcd: {
|
||||
.const ZERO_CHAR = $35
|
||||
.label screen = 5
|
||||
.label screen_pos = 7
|
||||
.label offset = 7
|
||||
.label screen = 6
|
||||
.label screen_pos = 8
|
||||
.label offset = 8
|
||||
lda screen_pos
|
||||
clc
|
||||
adc screen
|
||||
@ -398,9 +398,9 @@ render_next: {
|
||||
// Find the screen area
|
||||
.const next_area_offset = $28*$c+$18+4
|
||||
.label next_piece_char = $5b
|
||||
.label next_piece_gfx = $a
|
||||
.label screen_next_area = $c
|
||||
.label l = 9
|
||||
.label next_piece_gfx = $b
|
||||
.label screen_next_area = $d
|
||||
.label l = $a
|
||||
cmp #0
|
||||
beq b1
|
||||
lda #<PLAYFIELD_SCREEN_2+next_area_offset
|
||||
@ -468,11 +468,11 @@ render_next: {
|
||||
// Render the current moving piece at position (current_xpos, current_ypos)
|
||||
// Ignores cases where parts of the tetromino is outside the playfield (sides/bottom) since the movement collision routine prevents this.
|
||||
render_moving: {
|
||||
.label ypos = $13
|
||||
.label ypos = $14
|
||||
.label screen_line = $5c
|
||||
.label xpos = $16
|
||||
.label i = $15
|
||||
.label l = $14
|
||||
.label xpos = $17
|
||||
.label i = $16
|
||||
.label l = $15
|
||||
stx ypos
|
||||
lda #0
|
||||
sta l
|
||||
@ -522,10 +522,10 @@ render_moving: {
|
||||
}
|
||||
// Render the static playfield on the screen (all pieces already locked into place)
|
||||
render_playfield: {
|
||||
.label screen_line = $19
|
||||
.label i = $18
|
||||
.label c = $1b
|
||||
.label l = $17
|
||||
.label screen_line = $1a
|
||||
.label i = $19
|
||||
.label c = $1c
|
||||
.label l = $18
|
||||
lda #PLAYFIELD_COLS*2
|
||||
sta i
|
||||
lda #2
|
||||
@ -567,8 +567,8 @@ render_playfield: {
|
||||
// Returns a byte signaling whether rendering is needed. (0 no render, >0 render needed)
|
||||
// play_movement(byte zeropage($5a) key_event)
|
||||
play_movement: {
|
||||
.label render = $1c
|
||||
.label return = $1c
|
||||
.label render = $1d
|
||||
.label return = $1d
|
||||
.label key_event = $5a
|
||||
lda key_event
|
||||
jsr play_move_down
|
||||
@ -595,7 +595,7 @@ play_movement: {
|
||||
// Return non-zero if a render is needed
|
||||
// play_move_rotate(byte register(A) key_event)
|
||||
play_move_rotate: {
|
||||
.label orientation = $1d
|
||||
.label orientation = $1e
|
||||
cmp #KEY_Z
|
||||
beq b1
|
||||
cmp #KEY_X
|
||||
@ -640,20 +640,20 @@ play_move_rotate: {
|
||||
}
|
||||
// Test if there is a collision between the current piece moved to (x, y) and anything on the playfield or the playfield boundaries
|
||||
// Returns information about the type of the collision detected
|
||||
// play_collision(byte zeropage($20) xpos, byte zeropage($21) ypos, byte register(X) orientation)
|
||||
// play_collision(byte zeropage($21) xpos, byte zeropage($22) ypos, byte register(X) orientation)
|
||||
play_collision: {
|
||||
.label xpos = $20
|
||||
.label ypos = $21
|
||||
.label piece_gfx = $1e
|
||||
.label yp = $21
|
||||
.label xpos = $21
|
||||
.label ypos = $22
|
||||
.label piece_gfx = $1f
|
||||
.label yp = $22
|
||||
.label playfield_line = $5e
|
||||
.label i = $60
|
||||
.label xp = $24
|
||||
.label l = $22
|
||||
.label i_2 = $23
|
||||
.label i_3 = $23
|
||||
.label i_10 = $23
|
||||
.label i_12 = $23
|
||||
.label xp = $25
|
||||
.label l = $23
|
||||
.label i_2 = $24
|
||||
.label i_3 = $24
|
||||
.label i_10 = $24
|
||||
.label i_12 = $24
|
||||
txa
|
||||
clc
|
||||
adc piece_gfx
|
||||
@ -850,7 +850,7 @@ play_move_down: {
|
||||
// Moves the next piece into the current and spawns a new next piece
|
||||
play_spawn_current: {
|
||||
.label _7 = $61
|
||||
.label piece_idx = $36
|
||||
.label piece_idx = $37
|
||||
// Move next piece into current
|
||||
ldx next_piece_idx
|
||||
txa
|
||||
@ -1001,10 +1001,10 @@ play_increase_level: {
|
||||
// Returns the number of lines removed
|
||||
play_remove_lines: {
|
||||
.label c = $67
|
||||
.label x = $3a
|
||||
.label y = $38
|
||||
.label removed = $39
|
||||
.label full = $3b
|
||||
.label x = $3b
|
||||
.label y = $39
|
||||
.label removed = $3a
|
||||
.label full = $3c
|
||||
lda #0
|
||||
sta removed
|
||||
sta y
|
||||
@ -1056,15 +1056,15 @@ play_remove_lines: {
|
||||
}
|
||||
// Lock the current piece onto the playfield
|
||||
play_lock_current: {
|
||||
.label yp = $25
|
||||
.label yp = $26
|
||||
.label playfield_line = $68
|
||||
.label xp = $3e
|
||||
.label xp = $3f
|
||||
.label i = $6a
|
||||
.label l = $3c
|
||||
.label i_2 = $3d
|
||||
.label i_3 = $3d
|
||||
.label i_7 = $3d
|
||||
.label i_9 = $3d
|
||||
.label l = $3d
|
||||
.label i_2 = $3e
|
||||
.label i_3 = $3e
|
||||
.label i_7 = $3e
|
||||
.label i_9 = $3e
|
||||
lda #0
|
||||
sta l
|
||||
sta i_3
|
||||
@ -1112,10 +1112,10 @@ play_lock_current: {
|
||||
}
|
||||
// Determine if a specific key is currently pressed based on the last keyboard_event_scan()
|
||||
// Returns 0 is not pressed and non-0 if pressed
|
||||
// keyboard_event_pressed(byte zeropage($3f) keycode)
|
||||
// keyboard_event_pressed(byte zeropage($40) keycode)
|
||||
keyboard_event_pressed: {
|
||||
.label row_bits = $6b
|
||||
.label keycode = $3f
|
||||
.label keycode = $40
|
||||
lda keycode
|
||||
lsr
|
||||
lsr
|
||||
@ -1151,8 +1151,8 @@ keyboard_event_get: {
|
||||
// Also stores current status of modifiers in keyboard_modifiers.
|
||||
keyboard_event_scan: {
|
||||
.label row_scan = $6c
|
||||
.label keycode = $41
|
||||
.label row = $40
|
||||
.label keycode = $42
|
||||
.label row = $41
|
||||
lda #0
|
||||
sta keycode
|
||||
sta row
|
||||
@ -1266,8 +1266,8 @@ render_show: {
|
||||
}
|
||||
// Initialize play data tables
|
||||
play_init: {
|
||||
.label pli = $43
|
||||
.label idx = $45
|
||||
.label pli = $44
|
||||
.label idx = $46
|
||||
lda #0
|
||||
sta idx
|
||||
lda #<playfield
|
||||
@ -1357,7 +1357,7 @@ sprites_irq_init: {
|
||||
}
|
||||
// Setup the sprites
|
||||
sprites_init: {
|
||||
.label xpos = $46
|
||||
.label xpos = $47
|
||||
lda #$f
|
||||
sta SPRITES_ENABLE
|
||||
lda #0
|
||||
@ -1386,8 +1386,8 @@ sprites_init: {
|
||||
// Initialize rendering
|
||||
render_init: {
|
||||
.const vicSelectGfxBank1_toDd001_return = 3
|
||||
.label li_1 = $47
|
||||
.label li_2 = $49
|
||||
.label li_1 = $48
|
||||
.label li_2 = $4a
|
||||
lda #3
|
||||
sta CIA2_PORT_A_DDR
|
||||
lda #vicSelectGfxBank1_toDd001_return
|
||||
@ -1456,14 +1456,14 @@ render_init: {
|
||||
}
|
||||
// Copy the original screen data to the passed screen
|
||||
// Also copies colors to $d800
|
||||
// render_screen_original(byte* zeropage($50) screen)
|
||||
// render_screen_original(byte* zeropage($51) screen)
|
||||
render_screen_original: {
|
||||
.const SPACE = 0
|
||||
.label screen = $50
|
||||
.label cols = $52
|
||||
.label oscr = $4c
|
||||
.label ocols = $4e
|
||||
.label y = $4b
|
||||
.label screen = $51
|
||||
.label cols = $53
|
||||
.label oscr = $4d
|
||||
.label ocols = $4f
|
||||
.label y = $4c
|
||||
lda #0
|
||||
sta y
|
||||
lda #<PLAYFIELD_COLORS_ORIGINAL+$20*2
|
||||
@ -1563,7 +1563,7 @@ sid_rnd_init: {
|
||||
// Utilizes duplicated gfx in the sprites to allow for some leeway in updating the sprite pointers
|
||||
sprites_irq: {
|
||||
.const toSpritePtr2_return = PLAYFIELD_SPRITES/$40
|
||||
.label raster_sprite_gfx_modify = $54
|
||||
.label raster_sprite_gfx_modify = $55
|
||||
sta rega+1
|
||||
stx regx+1
|
||||
//(*BGCOL)++;
|
||||
|
@ -107,6 +107,7 @@ main::@1: scope:[main] from main::@17 main::@25 main::@6
|
||||
[40] (word) lines_bcd#19 ← phi( main::@6/(word) lines_bcd#15 main::@17/(byte) 0 main::@25/(word) lines_bcd#15 )
|
||||
[40] (byte) current_movedown_counter#16 ← phi( main::@6/(byte) current_movedown_counter#14 main::@17/(byte) 0 main::@25/(byte) current_movedown_counter#14 )
|
||||
[40] (byte) keyboard_events_size#19 ← phi( main::@6/(byte) keyboard_events_size#16 main::@17/(byte) 0 main::@25/(byte) keyboard_events_size#16 )
|
||||
[40] (byte) render_screen_showing#13 ← phi( main::@6/(byte) render_screen_showing#1 main::@17/(byte) render_screen_showing#0 main::@25/(byte) render_screen_showing#1 )
|
||||
[40] (byte) next_piece_idx#10 ← phi( main::@6/(byte) next_piece_idx#16 main::@17/(byte) play_spawn_current::piece_idx#2 main::@25/(byte) next_piece_idx#16 )
|
||||
[40] (byte) game_over#10 ← phi( main::@6/(byte) game_over#15 main::@17/(byte) game_over#52 main::@25/(byte) game_over#15 )
|
||||
[40] (byte) current_ypos#11 ← phi( main::@6/(byte) current_ypos#19 main::@17/(byte) current_ypos#6 main::@25/(byte) current_ypos#19 )
|
||||
@ -1186,6 +1187,9 @@ sprites_irq::@7: scope:[sprites_irq] from sprites_irq::@6
|
||||
[573] (byte) irq_sprite_ptr#3 ← (byte) irq_sprite_ptr#0 + (byte) 3
|
||||
to:sprites_irq::@5
|
||||
sprites_irq::@5: scope:[sprites_irq] from sprites_irq::@11 sprites_irq::@4 sprites_irq::@7
|
||||
[574] (byte) irq_sprite_ptr#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ptr#1 sprites_irq::@4/(byte) irq_sprite_ptr#2 sprites_irq::@7/(byte) irq_sprite_ptr#3 )
|
||||
[574] (byte) irq_sprite_ypos#11 ← phi( sprites_irq::@11/(byte) irq_sprite_ypos#1 sprites_irq::@4/(byte) irq_sprite_ypos#2 sprites_irq::@7/(byte) irq_sprite_ypos#3 )
|
||||
[574] (byte) irq_cnt#3 ← phi( sprites_irq::@11/(byte) irq_cnt#1 sprites_irq::@4/(byte) irq_cnt#2 sprites_irq::@7/(byte) irq_cnt#1 )
|
||||
[574] (byte) irq_raster_next#4 ← phi( sprites_irq::@11/(byte) irq_raster_next#1 sprites_irq::@4/(byte) irq_raster_next#2 sprites_irq::@7/(byte) irq_raster_next#3 )
|
||||
[575] *((const byte*) RASTER#0) ← (byte) irq_raster_next#4
|
||||
[576] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -196,89 +196,90 @@
|
||||
(byte) VIC_RSEL
|
||||
(const byte) VIC_RSEL#0 VIC_RSEL = (byte) 8
|
||||
(byte) current_movedown_counter
|
||||
(byte) current_movedown_counter#12 current_movedown_counter zp ZP_BYTE:4 0.5333333333333333
|
||||
(byte) current_movedown_counter#14 current_movedown_counter zp ZP_BYTE:4 3.081081081081081
|
||||
(byte) current_movedown_counter#16 current_movedown_counter zp ZP_BYTE:4 8.769230769230768
|
||||
(byte) current_movedown_counter#12 current_movedown_counter zp ZP_BYTE:5 0.5333333333333333
|
||||
(byte) current_movedown_counter#14 current_movedown_counter zp ZP_BYTE:5 3.081081081081081
|
||||
(byte) current_movedown_counter#16 current_movedown_counter zp ZP_BYTE:5 8.769230769230768
|
||||
(byte) current_movedown_fast
|
||||
(const byte) current_movedown_fast#0 current_movedown_fast = (byte) $a
|
||||
(byte) current_movedown_slow
|
||||
(byte) current_movedown_slow#1 current_movedown_slow zp ZP_BYTE:45 0.17391304347826086
|
||||
(byte) current_movedown_slow#10 current_movedown_slow zp ZP_BYTE:45 4.0
|
||||
(byte) current_movedown_slow#14 current_movedown_slow zp ZP_BYTE:45 2.214285714285714
|
||||
(byte) current_movedown_slow#21 current_movedown_slow zp ZP_BYTE:45 3.135135135135135
|
||||
(byte) current_movedown_slow#23 current_movedown_slow zp ZP_BYTE:45 1.1428571428571428
|
||||
(byte) current_movedown_slow#37 current_movedown_slow zp ZP_BYTE:45 6.0
|
||||
(byte) current_movedown_slow#66 current_movedown_slow zp ZP_BYTE:45 0.26666666666666666
|
||||
(byte) current_movedown_slow#1 current_movedown_slow zp ZP_BYTE:46 0.17391304347826086
|
||||
(byte) current_movedown_slow#10 current_movedown_slow zp ZP_BYTE:46 4.0
|
||||
(byte) current_movedown_slow#14 current_movedown_slow zp ZP_BYTE:46 2.214285714285714
|
||||
(byte) current_movedown_slow#21 current_movedown_slow zp ZP_BYTE:46 3.135135135135135
|
||||
(byte) current_movedown_slow#23 current_movedown_slow zp ZP_BYTE:46 1.1428571428571428
|
||||
(byte) current_movedown_slow#37 current_movedown_slow zp ZP_BYTE:46 6.0
|
||||
(byte) current_movedown_slow#66 current_movedown_slow zp ZP_BYTE:46 0.26666666666666666
|
||||
(byte) current_orientation
|
||||
(byte) current_orientation#13 current_orientation zp ZP_BYTE:50 3.189189189189189
|
||||
(byte) current_orientation#17 current_orientation zp ZP_BYTE:50 5.523809523809523
|
||||
(byte) current_orientation#20 current_orientation zp ZP_BYTE:50 0.36734693877551017
|
||||
(byte) current_orientation#25 current_orientation zp ZP_BYTE:50 1.3333333333333333
|
||||
(byte) current_orientation#37 current_orientation zp ZP_BYTE:50 4.0
|
||||
(byte) current_orientation#7 current_orientation zp ZP_BYTE:50 3.0
|
||||
(byte) current_orientation#13 current_orientation zp ZP_BYTE:51 3.189189189189189
|
||||
(byte) current_orientation#17 current_orientation zp ZP_BYTE:51 5.523809523809523
|
||||
(byte) current_orientation#20 current_orientation zp ZP_BYTE:51 0.36734693877551017
|
||||
(byte) current_orientation#25 current_orientation zp ZP_BYTE:51 1.3333333333333333
|
||||
(byte) current_orientation#37 current_orientation zp ZP_BYTE:51 4.0
|
||||
(byte) current_orientation#7 current_orientation zp ZP_BYTE:51 3.0
|
||||
(byte*) current_piece
|
||||
(byte*) current_piece#10 current_piece zp ZP_WORD:47 3.243243243243243
|
||||
(byte*~) current_piece#100 current_piece#100 zp ZP_WORD:30 4.0
|
||||
(byte*~) current_piece#102 current_piece zp ZP_WORD:47 2.0
|
||||
(byte*) current_piece#15 current_piece zp ZP_WORD:47 1.5897435897435892
|
||||
(byte*) current_piece#17 current_piece#17 zp ZP_WORD:30 12.0
|
||||
(byte*) current_piece#28 current_piece zp ZP_WORD:47 6.0
|
||||
(byte*~) current_piece#93 current_piece zp ZP_WORD:47 2.0
|
||||
(byte*~) current_piece#96 current_piece#96 zp ZP_WORD:30 4.0
|
||||
(byte*~) current_piece#97 current_piece#97 zp ZP_WORD:30 4.0
|
||||
(byte*~) current_piece#98 current_piece#98 zp ZP_WORD:30 4.0
|
||||
(byte*~) current_piece#99 current_piece#99 zp ZP_WORD:30 4.0
|
||||
(byte*) current_piece#10 current_piece zp ZP_WORD:48 3.243243243243243
|
||||
(byte*~) current_piece#100 current_piece#100 zp ZP_WORD:31 4.0
|
||||
(byte*~) current_piece#102 current_piece zp ZP_WORD:48 2.0
|
||||
(byte*) current_piece#15 current_piece zp ZP_WORD:48 1.5897435897435892
|
||||
(byte*) current_piece#17 current_piece#17 zp ZP_WORD:31 12.0
|
||||
(byte*) current_piece#28 current_piece zp ZP_WORD:48 6.0
|
||||
(byte*~) current_piece#93 current_piece zp ZP_WORD:48 2.0
|
||||
(byte*~) current_piece#96 current_piece#96 zp ZP_WORD:31 4.0
|
||||
(byte*~) current_piece#97 current_piece#97 zp ZP_WORD:31 4.0
|
||||
(byte*~) current_piece#98 current_piece#98 zp ZP_WORD:31 4.0
|
||||
(byte*~) current_piece#99 current_piece#99 zp ZP_WORD:31 4.0
|
||||
(byte) current_piece_char
|
||||
(byte) current_piece_char#10 current_piece_char zp ZP_BYTE:49 183.9818181818182
|
||||
(byte~) current_piece_char#100 current_piece_char#100 zp ZP_BYTE:18 4.0
|
||||
(byte~) current_piece_char#101 current_piece_char#101 zp ZP_BYTE:18 22.0
|
||||
(byte) current_piece_char#16 current_piece_char zp ZP_BYTE:49 3.4324324324324325
|
||||
(byte) current_piece_char#29 current_piece_char zp ZP_BYTE:49 6.0
|
||||
(byte) current_piece_char#5 current_piece_char zp ZP_BYTE:49 0.25
|
||||
(byte) current_piece_char#68 current_piece_char#68 zp ZP_BYTE:18 48.285714285714285
|
||||
(byte) current_piece_char#10 current_piece_char zp ZP_BYTE:50 183.9818181818182
|
||||
(byte~) current_piece_char#100 current_piece_char#100 zp ZP_BYTE:19 4.0
|
||||
(byte~) current_piece_char#101 current_piece_char#101 zp ZP_BYTE:19 22.0
|
||||
(byte) current_piece_char#16 current_piece_char zp ZP_BYTE:50 3.4324324324324325
|
||||
(byte) current_piece_char#29 current_piece_char zp ZP_BYTE:50 6.0
|
||||
(byte) current_piece_char#5 current_piece_char zp ZP_BYTE:50 0.25
|
||||
(byte) current_piece_char#68 current_piece_char#68 zp ZP_BYTE:19 48.285714285714285
|
||||
(byte*) current_piece_gfx
|
||||
(byte*~) current_piece_gfx#112 current_piece_gfx#112 zp ZP_WORD:16 2.0
|
||||
(byte*~) current_piece_gfx#113 current_piece_gfx#113 zp ZP_WORD:16 11.0
|
||||
(byte*~) current_piece_gfx#117 current_piece_gfx zp ZP_WORD:51 4.0
|
||||
(byte*~) current_piece_gfx#124 current_piece_gfx zp ZP_WORD:51 4.0
|
||||
(byte*) current_piece_gfx#13 current_piece_gfx zp ZP_WORD:51 183.9818181818182
|
||||
(byte*) current_piece_gfx#18 current_piece_gfx zp ZP_WORD:51 6.047619047619047
|
||||
(byte*) current_piece_gfx#20 current_piece_gfx zp ZP_WORD:51 0.37037037037037035
|
||||
(byte*) current_piece_gfx#21 current_piece_gfx zp ZP_WORD:51 1.3333333333333333
|
||||
(byte*) current_piece_gfx#35 current_piece_gfx zp ZP_WORD:51 6.0
|
||||
(byte*) current_piece_gfx#64 current_piece_gfx#64 zp ZP_WORD:16 48.285714285714285
|
||||
(byte*) current_piece_gfx#7 current_piece_gfx zp ZP_WORD:51 4.0
|
||||
(byte*~) current_piece_gfx#112 current_piece_gfx#112 zp ZP_WORD:17 2.0
|
||||
(byte*~) current_piece_gfx#113 current_piece_gfx#113 zp ZP_WORD:17 11.0
|
||||
(byte*~) current_piece_gfx#117 current_piece_gfx zp ZP_WORD:52 4.0
|
||||
(byte*~) current_piece_gfx#124 current_piece_gfx zp ZP_WORD:52 4.0
|
||||
(byte*) current_piece_gfx#13 current_piece_gfx zp ZP_WORD:52 183.9818181818182
|
||||
(byte*) current_piece_gfx#18 current_piece_gfx zp ZP_WORD:52 6.047619047619047
|
||||
(byte*) current_piece_gfx#20 current_piece_gfx zp ZP_WORD:52 0.37037037037037035
|
||||
(byte*) current_piece_gfx#21 current_piece_gfx zp ZP_WORD:52 1.3333333333333333
|
||||
(byte*) current_piece_gfx#35 current_piece_gfx zp ZP_WORD:52 6.0
|
||||
(byte*) current_piece_gfx#64 current_piece_gfx#64 zp ZP_WORD:17 48.285714285714285
|
||||
(byte*) current_piece_gfx#7 current_piece_gfx zp ZP_WORD:52 4.0
|
||||
(byte) current_xpos
|
||||
(byte) current_xpos#100 current_xpos zp ZP_BYTE:53 0.3225806451612903
|
||||
(byte~) current_xpos#119 current_xpos#119 zp ZP_BYTE:15 1.3333333333333333
|
||||
(byte~) current_xpos#120 current_xpos#120 zp ZP_BYTE:15 7.333333333333333
|
||||
(byte) current_xpos#14 current_xpos zp ZP_BYTE:53 20.38181818181818
|
||||
(byte) current_xpos#19 current_xpos zp ZP_BYTE:53 6.047619047619047
|
||||
(byte) current_xpos#22 current_xpos zp ZP_BYTE:53 0.7999999999999999
|
||||
(byte) current_xpos#26 current_xpos zp ZP_BYTE:53 0.4666666666666666
|
||||
(byte) current_xpos#43 current_xpos zp ZP_BYTE:53 6.0
|
||||
(byte) current_xpos#59 current_xpos#59 zp ZP_BYTE:15 5.428571428571429
|
||||
(byte) current_xpos#6 current_xpos zp ZP_BYTE:53 4.0
|
||||
(byte) current_xpos#8 current_xpos zp ZP_BYTE:53 4.0
|
||||
(byte) current_xpos#100 current_xpos zp ZP_BYTE:54 0.3225806451612903
|
||||
(byte~) current_xpos#119 current_xpos#119 zp ZP_BYTE:16 1.3333333333333333
|
||||
(byte~) current_xpos#120 current_xpos#120 zp ZP_BYTE:16 7.333333333333333
|
||||
(byte) current_xpos#14 current_xpos zp ZP_BYTE:54 20.38181818181818
|
||||
(byte) current_xpos#19 current_xpos zp ZP_BYTE:54 6.047619047619047
|
||||
(byte) current_xpos#22 current_xpos zp ZP_BYTE:54 0.7999999999999999
|
||||
(byte) current_xpos#26 current_xpos zp ZP_BYTE:54 0.4666666666666666
|
||||
(byte) current_xpos#43 current_xpos zp ZP_BYTE:54 6.0
|
||||
(byte) current_xpos#59 current_xpos#59 zp ZP_BYTE:16 5.428571428571429
|
||||
(byte) current_xpos#6 current_xpos zp ZP_BYTE:54 4.0
|
||||
(byte) current_xpos#8 current_xpos zp ZP_BYTE:54 4.0
|
||||
(byte) current_ypos
|
||||
(byte) current_ypos#11 current_ypos zp ZP_BYTE:37 3.297297297297297
|
||||
(byte) current_ypos#11 current_ypos zp ZP_BYTE:38 3.297297297297297
|
||||
(byte) current_ypos#13 reg byte x 15.0
|
||||
(byte) current_ypos#19 current_ypos zp ZP_BYTE:37 1.7051282051282046
|
||||
(byte) current_ypos#3 current_ypos zp ZP_BYTE:37 4.0
|
||||
(byte) current_ypos#38 current_ypos zp ZP_BYTE:37 6.0
|
||||
(byte) current_ypos#6 current_ypos zp ZP_BYTE:37 0.3333333333333333
|
||||
(byte) current_ypos#19 current_ypos zp ZP_BYTE:38 1.7051282051282046
|
||||
(byte) current_ypos#3 current_ypos zp ZP_BYTE:38 4.0
|
||||
(byte) current_ypos#38 current_ypos zp ZP_BYTE:38 6.0
|
||||
(byte) current_ypos#6 current_ypos zp ZP_BYTE:38 0.3333333333333333
|
||||
(byte~) current_ypos#98 reg byte x 1.0
|
||||
(byte~) current_ypos#99 reg byte x 4.4
|
||||
(byte) game_over
|
||||
(byte) game_over#10 game_over zp ZP_BYTE:55 4.804347826086958
|
||||
(byte) game_over#15 game_over zp ZP_BYTE:55 3.189189189189189
|
||||
(byte) game_over#27 game_over zp ZP_BYTE:55 6.0
|
||||
(byte) game_over#52 game_over zp ZP_BYTE:55 0.34782608695652173
|
||||
(byte) game_over#65 game_over zp ZP_BYTE:55 0.42857142857142855
|
||||
(byte) game_over#10 game_over zp ZP_BYTE:56 4.804347826086958
|
||||
(byte) game_over#15 game_over zp ZP_BYTE:56 3.189189189189189
|
||||
(byte) game_over#27 game_over zp ZP_BYTE:56 6.0
|
||||
(byte) game_over#52 game_over zp ZP_BYTE:56 0.34782608695652173
|
||||
(byte) game_over#65 game_over zp ZP_BYTE:56 0.42857142857142855
|
||||
(byte) irq_cnt
|
||||
(byte) irq_cnt#0 irq_cnt zp ZP_BYTE:89 0.17391304347826086
|
||||
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:89 3.0
|
||||
(byte) irq_cnt#2 irq_cnt zp ZP_BYTE:89 20.0
|
||||
(byte) irq_cnt#1 irq_cnt zp ZP_BYTE:89 1.0
|
||||
(byte) irq_cnt#2 irq_cnt zp ZP_BYTE:89 1.0
|
||||
(byte) irq_cnt#3 irq_cnt zp ZP_BYTE:89 60.0
|
||||
(byte) irq_raster_next
|
||||
(byte) irq_raster_next#0 irq_raster_next zp ZP_BYTE:86 0.3076923076923077
|
||||
(byte) irq_raster_next#1 irq_raster_next zp ZP_BYTE:86 1.0
|
||||
@ -287,14 +288,16 @@
|
||||
(byte) irq_raster_next#4 irq_raster_next zp ZP_BYTE:86 8.0
|
||||
(byte) irq_sprite_ptr
|
||||
(byte) irq_sprite_ptr#0 irq_sprite_ptr zp ZP_BYTE:88 0.25806451612903225
|
||||
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:88 20.0
|
||||
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:88 20.0
|
||||
(byte) irq_sprite_ptr#3 irq_sprite_ptr zp ZP_BYTE:88 20.0
|
||||
(byte) irq_sprite_ptr#1 irq_sprite_ptr zp ZP_BYTE:88 4.0
|
||||
(byte) irq_sprite_ptr#11 irq_sprite_ptr zp ZP_BYTE:88 60.0
|
||||
(byte) irq_sprite_ptr#2 irq_sprite_ptr zp ZP_BYTE:88 4.0
|
||||
(byte) irq_sprite_ptr#3 irq_sprite_ptr zp ZP_BYTE:88 4.0
|
||||
(byte) irq_sprite_ypos
|
||||
(byte) irq_sprite_ypos#0 irq_sprite_ypos zp ZP_BYTE:87 0.27586206896551724
|
||||
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:87 20.0
|
||||
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:87 20.0
|
||||
(byte) irq_sprite_ypos#3 irq_sprite_ypos zp ZP_BYTE:87 20.0
|
||||
(byte) irq_sprite_ypos#1 irq_sprite_ypos zp ZP_BYTE:87 1.3333333333333333
|
||||
(byte) irq_sprite_ypos#11 irq_sprite_ypos zp ZP_BYTE:87 60.0
|
||||
(byte) irq_sprite_ypos#2 irq_sprite_ypos zp ZP_BYTE:87 2.0
|
||||
(byte) irq_sprite_ypos#3 irq_sprite_ypos zp ZP_BYTE:87 2.0
|
||||
(byte()) keyboard_event_get()
|
||||
(label) keyboard_event_get::@1
|
||||
(label) keyboard_event_get::@return
|
||||
@ -307,7 +310,7 @@
|
||||
(byte~) keyboard_event_pressed::$1 reg byte a 4.0
|
||||
(label) keyboard_event_pressed::@return
|
||||
(byte) keyboard_event_pressed::keycode
|
||||
(byte) keyboard_event_pressed::keycode#5 keycode zp ZP_BYTE:63 1.3333333333333333
|
||||
(byte) keyboard_event_pressed::keycode#5 keycode zp ZP_BYTE:64 1.3333333333333333
|
||||
(byte) keyboard_event_pressed::return
|
||||
(byte) keyboard_event_pressed::return#0 reg byte a 4.0
|
||||
(byte) keyboard_event_pressed::return#1 reg byte a 4.0
|
||||
@ -355,28 +358,28 @@
|
||||
(byte) keyboard_event_scan::event_type
|
||||
(byte) keyboard_event_scan::event_type#0 reg byte a 20002.0
|
||||
(byte) keyboard_event_scan::keycode
|
||||
(byte) keyboard_event_scan::keycode#1 keycode zp ZP_BYTE:65 2002.0
|
||||
(byte) keyboard_event_scan::keycode#10 keycode zp ZP_BYTE:65 3154.230769230769
|
||||
(byte) keyboard_event_scan::keycode#11 keycode zp ZP_BYTE:65 500.5
|
||||
(byte) keyboard_event_scan::keycode#13 keycode zp ZP_BYTE:65 1001.0
|
||||
(byte) keyboard_event_scan::keycode#14 keycode zp ZP_BYTE:65 5250.75
|
||||
(byte) keyboard_event_scan::keycode#1 keycode zp ZP_BYTE:66 2002.0
|
||||
(byte) keyboard_event_scan::keycode#10 keycode zp ZP_BYTE:66 3154.230769230769
|
||||
(byte) keyboard_event_scan::keycode#11 keycode zp ZP_BYTE:66 500.5
|
||||
(byte) keyboard_event_scan::keycode#13 keycode zp ZP_BYTE:66 1001.0
|
||||
(byte) keyboard_event_scan::keycode#14 keycode zp ZP_BYTE:66 5250.75
|
||||
(byte) keyboard_event_scan::row
|
||||
(byte) keyboard_event_scan::row#1 row zp ZP_BYTE:64 1501.5
|
||||
(byte) keyboard_event_scan::row#2 row zp ZP_BYTE:64 600.24
|
||||
(byte) keyboard_event_scan::row#1 row zp ZP_BYTE:65 1501.5
|
||||
(byte) keyboard_event_scan::row#2 row zp ZP_BYTE:65 600.24
|
||||
(byte) keyboard_event_scan::row_scan
|
||||
(byte) keyboard_event_scan::row_scan#0 row_scan zp ZP_BYTE:108 1278.0555555555554
|
||||
(byte[8]) keyboard_events
|
||||
(const byte[8]) keyboard_events#0 keyboard_events = { fill( 8, 0) }
|
||||
(byte) keyboard_events_size
|
||||
(byte) keyboard_events_size#1 keyboard_events_size zp ZP_BYTE:66 20002.0
|
||||
(byte) keyboard_events_size#10 keyboard_events_size zp ZP_BYTE:66 8100.9000000000015
|
||||
(byte) keyboard_events_size#13 keyboard_events_size zp ZP_BYTE:66 97.06451612903226
|
||||
(byte) keyboard_events_size#16 keyboard_events_size zp ZP_BYTE:66 4.461538461538461
|
||||
(byte) keyboard_events_size#19 keyboard_events_size zp ZP_BYTE:66 18.999999999999996
|
||||
(byte) keyboard_events_size#2 keyboard_events_size zp ZP_BYTE:66 20002.0
|
||||
(byte) keyboard_events_size#29 keyboard_events_size zp ZP_BYTE:66 10201.2
|
||||
(byte) keyboard_events_size#30 keyboard_events_size zp ZP_BYTE:66 429.2857142857143
|
||||
(byte) keyboard_events_size#4 keyboard_events_size zp ZP_BYTE:66 3.0
|
||||
(byte) keyboard_events_size#1 keyboard_events_size zp ZP_BYTE:67 20002.0
|
||||
(byte) keyboard_events_size#10 keyboard_events_size zp ZP_BYTE:67 8100.9000000000015
|
||||
(byte) keyboard_events_size#13 keyboard_events_size zp ZP_BYTE:67 97.06451612903226
|
||||
(byte) keyboard_events_size#16 keyboard_events_size zp ZP_BYTE:67 4.461538461538461
|
||||
(byte) keyboard_events_size#19 keyboard_events_size zp ZP_BYTE:67 18.999999999999996
|
||||
(byte) keyboard_events_size#2 keyboard_events_size zp ZP_BYTE:67 20002.0
|
||||
(byte) keyboard_events_size#29 keyboard_events_size zp ZP_BYTE:67 10201.2
|
||||
(byte) keyboard_events_size#30 keyboard_events_size zp ZP_BYTE:67 429.2857142857143
|
||||
(byte) keyboard_events_size#4 keyboard_events_size zp ZP_BYTE:67 3.0
|
||||
(byte[8]) keyboard_matrix_col_bitmask
|
||||
(const byte[8]) keyboard_matrix_col_bitmask#0 keyboard_matrix_col_bitmask = { (byte) 1, (byte) 2, (byte) 4, (byte) 8, (byte) $10, (byte) $20, (byte) $40, (byte) $80 }
|
||||
(byte()) keyboard_matrix_read((byte) keyboard_matrix_read::rowid)
|
||||
@ -393,25 +396,25 @@
|
||||
(byte[8]) keyboard_scan_values
|
||||
(const byte[8]) keyboard_scan_values#0 keyboard_scan_values = { fill( 8, 0) }
|
||||
(byte) level
|
||||
(byte) level#10 level zp ZP_BYTE:44 1.909090909090909
|
||||
(byte) level#17 level zp ZP_BYTE:44 3.135135135135135
|
||||
(byte) level#19 level zp ZP_BYTE:44 1.1428571428571428
|
||||
(byte) level#21 level zp ZP_BYTE:44 0.4444444444444444
|
||||
(byte) level#33 level zp ZP_BYTE:44 6.0
|
||||
(byte) level#10 level zp ZP_BYTE:45 1.909090909090909
|
||||
(byte) level#17 level zp ZP_BYTE:45 3.135135135135135
|
||||
(byte) level#19 level zp ZP_BYTE:45 1.1428571428571428
|
||||
(byte) level#21 level zp ZP_BYTE:45 0.4444444444444444
|
||||
(byte) level#33 level zp ZP_BYTE:45 6.0
|
||||
(byte) level_bcd
|
||||
(byte) level_bcd#11 level_bcd zp ZP_BYTE:46 2.0
|
||||
(byte) level_bcd#17 level_bcd zp ZP_BYTE:46 1.9999999999999998
|
||||
(byte) level_bcd#19 level_bcd zp ZP_BYTE:46 1.1428571428571428
|
||||
(byte) level_bcd#21 level_bcd zp ZP_BYTE:46 2.6666666666666665
|
||||
(byte) level_bcd#31 level_bcd zp ZP_BYTE:46 6.0
|
||||
(byte) level_bcd#62 level_bcd zp ZP_BYTE:46 0.6000000000000001
|
||||
(byte) level_bcd#8 level_bcd zp ZP_BYTE:46 4.0
|
||||
(byte) level_bcd#11 level_bcd zp ZP_BYTE:47 2.0
|
||||
(byte) level_bcd#17 level_bcd zp ZP_BYTE:47 1.9999999999999998
|
||||
(byte) level_bcd#19 level_bcd zp ZP_BYTE:47 1.1428571428571428
|
||||
(byte) level_bcd#21 level_bcd zp ZP_BYTE:47 2.6666666666666665
|
||||
(byte) level_bcd#31 level_bcd zp ZP_BYTE:47 6.0
|
||||
(byte) level_bcd#62 level_bcd zp ZP_BYTE:47 0.6000000000000001
|
||||
(byte) level_bcd#8 level_bcd zp ZP_BYTE:47 4.0
|
||||
(word) lines_bcd
|
||||
(word) lines_bcd#15 lines_bcd zp ZP_WORD:38 2.0338983050847457
|
||||
(word) lines_bcd#17 lines_bcd zp ZP_WORD:38 1.1428571428571428
|
||||
(word) lines_bcd#19 lines_bcd zp ZP_WORD:38 2.4400000000000004
|
||||
(word) lines_bcd#26 lines_bcd zp ZP_WORD:38 6.0
|
||||
(word) lines_bcd#29 lines_bcd zp ZP_WORD:38 1.0
|
||||
(word) lines_bcd#15 lines_bcd zp ZP_WORD:39 2.0338983050847457
|
||||
(word) lines_bcd#17 lines_bcd zp ZP_WORD:39 1.1428571428571428
|
||||
(word) lines_bcd#19 lines_bcd zp ZP_WORD:39 2.4400000000000004
|
||||
(word) lines_bcd#26 lines_bcd zp ZP_WORD:39 6.0
|
||||
(word) lines_bcd#29 lines_bcd zp ZP_WORD:39 1.0
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@10
|
||||
@ -443,11 +446,11 @@
|
||||
(byte) main::render
|
||||
(byte) main::render#1 reg byte a 202.0
|
||||
(byte) next_piece_idx
|
||||
(byte) next_piece_idx#10 next_piece_idx zp ZP_BYTE:54 2.608695652173914
|
||||
(byte) next_piece_idx#10 next_piece_idx zp ZP_BYTE:55 2.608695652173914
|
||||
(byte) next_piece_idx#12 reg byte x 3.4
|
||||
(byte) next_piece_idx#16 next_piece_idx zp ZP_BYTE:54 3.4324324324324325
|
||||
(byte) next_piece_idx#17 next_piece_idx zp ZP_BYTE:54 6.0
|
||||
(byte) next_piece_idx#30 next_piece_idx zp ZP_BYTE:54 6.0
|
||||
(byte) next_piece_idx#16 next_piece_idx zp ZP_BYTE:55 3.4324324324324325
|
||||
(byte) next_piece_idx#17 next_piece_idx zp ZP_BYTE:55 6.0
|
||||
(byte) next_piece_idx#30 next_piece_idx zp ZP_BYTE:55 6.0
|
||||
(byte~) next_piece_idx#77 reg byte x 4.0
|
||||
(byte~) next_piece_idx#78 reg byte x 22.0
|
||||
(byte()) play_collision((byte) play_collision::xpos , (byte) play_collision::ypos , (byte) play_collision::orientation)
|
||||
@ -469,13 +472,13 @@
|
||||
(byte) play_collision::c#2 reg byte x 2222.4444444444443
|
||||
(byte) play_collision::i
|
||||
(byte) play_collision::i#1 i zp ZP_BYTE:96 1615.6153846153845
|
||||
(byte~) play_collision::i#10 i#10 zp ZP_BYTE:35 2002.0
|
||||
(byte~) play_collision::i#12 i#12 zp ZP_BYTE:35 20002.0
|
||||
(byte) play_collision::i#2 i#2 zp ZP_BYTE:35 15502.0
|
||||
(byte) play_collision::i#3 i#3 zp ZP_BYTE:35 500.5
|
||||
(byte~) play_collision::i#10 i#10 zp ZP_BYTE:36 2002.0
|
||||
(byte~) play_collision::i#12 i#12 zp ZP_BYTE:36 20002.0
|
||||
(byte) play_collision::i#2 i#2 zp ZP_BYTE:36 15502.0
|
||||
(byte) play_collision::i#3 i#3 zp ZP_BYTE:36 500.5
|
||||
(byte) play_collision::l
|
||||
(byte) play_collision::l#1 l zp ZP_BYTE:34 1001.0
|
||||
(byte) play_collision::l#6 l zp ZP_BYTE:34 117.76470588235294
|
||||
(byte) play_collision::l#1 l zp ZP_BYTE:35 1001.0
|
||||
(byte) play_collision::l#6 l zp ZP_BYTE:35 117.76470588235294
|
||||
(byte) play_collision::orientation
|
||||
(byte) play_collision::orientation#0 reg byte x 2.0
|
||||
(byte) play_collision::orientation#1 reg byte x 2.0
|
||||
@ -483,7 +486,7 @@
|
||||
(byte) play_collision::orientation#3 reg byte x 2.0
|
||||
(byte) play_collision::orientation#5 reg byte x 10.0
|
||||
(byte*) play_collision::piece_gfx
|
||||
(byte*) play_collision::piece_gfx#0 piece_gfx zp ZP_WORD:30 476.3333333333333
|
||||
(byte*) play_collision::piece_gfx#0 piece_gfx zp ZP_WORD:31 476.3333333333333
|
||||
(byte*) play_collision::playfield_line
|
||||
(byte*) play_collision::playfield_line#0 playfield_line zp ZP_WORD:94 785.8571428571429
|
||||
(byte) play_collision::return
|
||||
@ -494,26 +497,26 @@
|
||||
(byte) play_collision::return#14 reg byte a 4.0
|
||||
(byte) play_collision::return#15 reg byte a 1.4285714285714284
|
||||
(byte) play_collision::xp
|
||||
(byte) play_collision::xp#1 xp zp ZP_BYTE:36 5000.5
|
||||
(byte) play_collision::xp#2 xp zp ZP_BYTE:36 6375.75
|
||||
(byte~) play_collision::xp#8 xp zp ZP_BYTE:36 2002.0
|
||||
(byte) play_collision::xp#1 xp zp ZP_BYTE:37 5000.5
|
||||
(byte) play_collision::xp#2 xp zp ZP_BYTE:37 6375.75
|
||||
(byte~) play_collision::xp#8 xp zp ZP_BYTE:37 2002.0
|
||||
(byte) play_collision::xpos
|
||||
(byte) play_collision::xpos#0 xpos zp ZP_BYTE:32 1.3333333333333333
|
||||
(byte) play_collision::xpos#1 xpos zp ZP_BYTE:32 1.0
|
||||
(byte) play_collision::xpos#2 xpos zp ZP_BYTE:32 1.0
|
||||
(byte) play_collision::xpos#3 xpos zp ZP_BYTE:32 1.0
|
||||
(byte) play_collision::xpos#4 xpos zp ZP_BYTE:32 1.3333333333333333
|
||||
(byte) play_collision::xpos#6 xpos zp ZP_BYTE:32 45.95454545454545
|
||||
(byte) play_collision::xpos#0 xpos zp ZP_BYTE:33 1.3333333333333333
|
||||
(byte) play_collision::xpos#1 xpos zp ZP_BYTE:33 1.0
|
||||
(byte) play_collision::xpos#2 xpos zp ZP_BYTE:33 1.0
|
||||
(byte) play_collision::xpos#3 xpos zp ZP_BYTE:33 1.0
|
||||
(byte) play_collision::xpos#4 xpos zp ZP_BYTE:33 1.3333333333333333
|
||||
(byte) play_collision::xpos#6 xpos zp ZP_BYTE:33 45.95454545454545
|
||||
(byte) play_collision::yp
|
||||
(byte) play_collision::yp#0 yp zp ZP_BYTE:33 6.0
|
||||
(byte) play_collision::yp#1 yp zp ZP_BYTE:33 500.5
|
||||
(byte) play_collision::yp#2 yp zp ZP_BYTE:33 812.875
|
||||
(byte) play_collision::yp#0 yp zp ZP_BYTE:34 6.0
|
||||
(byte) play_collision::yp#1 yp zp ZP_BYTE:34 500.5
|
||||
(byte) play_collision::yp#2 yp zp ZP_BYTE:34 812.875
|
||||
(byte) play_collision::ypos
|
||||
(byte) play_collision::ypos#0 ypos zp ZP_BYTE:33 1.0
|
||||
(byte) play_collision::ypos#1 ypos zp ZP_BYTE:33 1.3333333333333333
|
||||
(byte) play_collision::ypos#2 ypos zp ZP_BYTE:33 1.3333333333333333
|
||||
(byte) play_collision::ypos#3 ypos zp ZP_BYTE:33 1.3333333333333333
|
||||
(byte) play_collision::ypos#4 ypos zp ZP_BYTE:33 2.0
|
||||
(byte) play_collision::ypos#0 ypos zp ZP_BYTE:34 1.0
|
||||
(byte) play_collision::ypos#1 ypos zp ZP_BYTE:34 1.3333333333333333
|
||||
(byte) play_collision::ypos#2 ypos zp ZP_BYTE:34 1.3333333333333333
|
||||
(byte) play_collision::ypos#3 ypos zp ZP_BYTE:34 1.3333333333333333
|
||||
(byte) play_collision::ypos#4 ypos zp ZP_BYTE:34 2.0
|
||||
(void()) play_increase_level()
|
||||
(byte~) play_increase_level::$1 reg byte a 4.0
|
||||
(byte~) play_increase_level::$5 reg byte a 4004.0
|
||||
@ -538,14 +541,14 @@
|
||||
(byte) play_init::b#1 reg byte x 16.5
|
||||
(byte) play_init::b#2 reg byte x 11.0
|
||||
(byte) play_init::idx
|
||||
(byte) play_init::idx#1 idx zp ZP_BYTE:69 7.333333333333333
|
||||
(byte) play_init::idx#2 idx zp ZP_BYTE:69 6.6000000000000005
|
||||
(byte) play_init::idx#1 idx zp ZP_BYTE:70 7.333333333333333
|
||||
(byte) play_init::idx#2 idx zp ZP_BYTE:70 6.6000000000000005
|
||||
(byte) play_init::j
|
||||
(byte) play_init::j#1 reg byte y 16.5
|
||||
(byte) play_init::j#2 reg byte y 7.333333333333333
|
||||
(byte*) play_init::pli
|
||||
(byte*) play_init::pli#1 pli zp ZP_WORD:67 5.5
|
||||
(byte*) play_init::pli#2 pli zp ZP_WORD:67 8.25
|
||||
(byte*) play_init::pli#1 pli zp ZP_WORD:68 5.5
|
||||
(byte*) play_init::pli#2 pli zp ZP_WORD:68 8.25
|
||||
(void()) play_lock_current()
|
||||
(byte~) play_lock_current::$4 reg byte a 2002.0
|
||||
(label) play_lock_current::@1
|
||||
@ -561,23 +564,23 @@
|
||||
(byte) play_lock_current::c#2 reg byte x 4000.4
|
||||
(byte) play_lock_current::i
|
||||
(byte) play_lock_current::i#1 i zp ZP_BYTE:106 2333.6666666666665
|
||||
(byte) play_lock_current::i#2 i#2 zp ZP_BYTE:61 15502.0
|
||||
(byte) play_lock_current::i#3 i#3 zp ZP_BYTE:61 500.5
|
||||
(byte~) play_lock_current::i#7 i#7 zp ZP_BYTE:61 2002.0
|
||||
(byte~) play_lock_current::i#9 i#9 zp ZP_BYTE:61 20002.0
|
||||
(byte) play_lock_current::i#2 i#2 zp ZP_BYTE:62 15502.0
|
||||
(byte) play_lock_current::i#3 i#3 zp ZP_BYTE:62 500.5
|
||||
(byte~) play_lock_current::i#7 i#7 zp ZP_BYTE:62 2002.0
|
||||
(byte~) play_lock_current::i#9 i#9 zp ZP_BYTE:62 20002.0
|
||||
(byte) play_lock_current::l
|
||||
(byte) play_lock_current::l#1 l zp ZP_BYTE:60 1001.0
|
||||
(byte) play_lock_current::l#6 l zp ZP_BYTE:60 154.0
|
||||
(byte) play_lock_current::l#1 l zp ZP_BYTE:61 1001.0
|
||||
(byte) play_lock_current::l#6 l zp ZP_BYTE:61 154.0
|
||||
(byte*) play_lock_current::playfield_line
|
||||
(byte*) play_lock_current::playfield_line#0 playfield_line zp ZP_WORD:104 1100.2
|
||||
(byte) play_lock_current::xp
|
||||
(byte) play_lock_current::xp#0 xp zp ZP_BYTE:62 2002.0
|
||||
(byte) play_lock_current::xp#1 xp zp ZP_BYTE:62 5000.5
|
||||
(byte) play_lock_current::xp#2 xp zp ZP_BYTE:62 7751.0
|
||||
(byte) play_lock_current::xp#0 xp zp ZP_BYTE:63 2002.0
|
||||
(byte) play_lock_current::xp#1 xp zp ZP_BYTE:63 5000.5
|
||||
(byte) play_lock_current::xp#2 xp zp ZP_BYTE:63 7751.0
|
||||
(byte) play_lock_current::yp
|
||||
(byte) play_lock_current::yp#0 yp zp ZP_BYTE:37 4.0
|
||||
(byte) play_lock_current::yp#1 yp zp ZP_BYTE:37 500.5
|
||||
(byte) play_lock_current::yp#2 yp zp ZP_BYTE:37 250.41666666666669
|
||||
(byte) play_lock_current::yp#0 yp zp ZP_BYTE:38 4.0
|
||||
(byte) play_lock_current::yp#1 yp zp ZP_BYTE:38 500.5
|
||||
(byte) play_lock_current::yp#2 yp zp ZP_BYTE:38 250.41666666666669
|
||||
(byte()) play_move_down((byte) play_move_down::key_event)
|
||||
(byte~) play_move_down::$12 reg byte a 4.0
|
||||
(byte~) play_move_down::$2 reg byte a 4.0
|
||||
@ -642,9 +645,9 @@
|
||||
(byte) play_move_rotate::key_event
|
||||
(byte) play_move_rotate::key_event#0 reg byte a 3.0
|
||||
(byte) play_move_rotate::orientation
|
||||
(byte) play_move_rotate::orientation#1 orientation zp ZP_BYTE:29 4.0
|
||||
(byte) play_move_rotate::orientation#2 orientation zp ZP_BYTE:29 4.0
|
||||
(byte) play_move_rotate::orientation#3 orientation zp ZP_BYTE:29 0.8888888888888888
|
||||
(byte) play_move_rotate::orientation#1 orientation zp ZP_BYTE:30 4.0
|
||||
(byte) play_move_rotate::orientation#2 orientation zp ZP_BYTE:30 4.0
|
||||
(byte) play_move_rotate::orientation#3 orientation zp ZP_BYTE:30 0.8888888888888888
|
||||
(byte) play_move_rotate::return
|
||||
(byte) play_move_rotate::return#0 reg byte a 4.0
|
||||
(byte) play_move_rotate::return#2 reg byte a 0.6666666666666666
|
||||
@ -659,11 +662,11 @@
|
||||
(byte) play_movement::key_event
|
||||
(byte) play_movement::key_event#0 key_event zp ZP_BYTE:90 9.727272727272727
|
||||
(byte) play_movement::render
|
||||
(byte) play_movement::render#1 render zp ZP_BYTE:28 1.0
|
||||
(byte) play_movement::render#2 render zp ZP_BYTE:28 0.8
|
||||
(byte) play_movement::render#1 render zp ZP_BYTE:29 1.0
|
||||
(byte) play_movement::render#2 render zp ZP_BYTE:29 0.8
|
||||
(byte) play_movement::return
|
||||
(byte) play_movement::return#0 return zp ZP_BYTE:28 4.0
|
||||
(byte) play_movement::return#2 return zp ZP_BYTE:28 34.99999999999999
|
||||
(byte) play_movement::return#0 return zp ZP_BYTE:29 4.0
|
||||
(byte) play_movement::return#2 return zp ZP_BYTE:29 34.99999999999999
|
||||
(byte) play_movement::return#3 reg byte a 202.0
|
||||
(byte()) play_remove_lines()
|
||||
(label) play_remove_lines::@1
|
||||
@ -679,16 +682,16 @@
|
||||
(byte) play_remove_lines::c
|
||||
(byte) play_remove_lines::c#0 c zp ZP_BYTE:103 6000.6
|
||||
(byte) play_remove_lines::full
|
||||
(byte) play_remove_lines::full#2 full zp ZP_BYTE:59 4200.6
|
||||
(byte) play_remove_lines::full#4 full zp ZP_BYTE:59 4000.4
|
||||
(byte) play_remove_lines::full#2 full zp ZP_BYTE:60 4200.6
|
||||
(byte) play_remove_lines::full#4 full zp ZP_BYTE:60 4000.4
|
||||
(byte) play_remove_lines::r
|
||||
(byte) play_remove_lines::r#1 reg byte y 1500.2142857142858
|
||||
(byte) play_remove_lines::r#2 reg byte y 15502.0
|
||||
(byte) play_remove_lines::r#3 reg byte y 2002.0
|
||||
(byte) play_remove_lines::removed
|
||||
(byte) play_remove_lines::removed#1 removed zp ZP_BYTE:57 2002.0
|
||||
(byte) play_remove_lines::removed#11 removed zp ZP_BYTE:57 231.0
|
||||
(byte) play_remove_lines::removed#8 removed zp ZP_BYTE:57 333.8888888888889
|
||||
(byte) play_remove_lines::removed#1 removed zp ZP_BYTE:58 2002.0
|
||||
(byte) play_remove_lines::removed#11 removed zp ZP_BYTE:58 231.0
|
||||
(byte) play_remove_lines::removed#8 removed zp ZP_BYTE:58 333.8888888888889
|
||||
(byte) play_remove_lines::return
|
||||
(byte) play_remove_lines::return#0 reg byte a 4.0
|
||||
(byte) play_remove_lines::w
|
||||
@ -700,11 +703,11 @@
|
||||
(byte) play_remove_lines::w#4 reg byte x 4429.142857142857
|
||||
(byte) play_remove_lines::w#6 reg byte x 1668.3333333333335
|
||||
(byte) play_remove_lines::x
|
||||
(byte) play_remove_lines::x#1 x zp ZP_BYTE:58 15001.5
|
||||
(byte) play_remove_lines::x#2 x zp ZP_BYTE:58 2500.25
|
||||
(byte) play_remove_lines::x#1 x zp ZP_BYTE:59 15001.5
|
||||
(byte) play_remove_lines::x#2 x zp ZP_BYTE:59 2500.25
|
||||
(byte) play_remove_lines::y
|
||||
(byte) play_remove_lines::y#1 y zp ZP_BYTE:56 1501.5
|
||||
(byte) play_remove_lines::y#8 y zp ZP_BYTE:56 133.46666666666667
|
||||
(byte) play_remove_lines::y#1 y zp ZP_BYTE:57 1501.5
|
||||
(byte) play_remove_lines::y#8 y zp ZP_BYTE:57 133.46666666666667
|
||||
(void()) play_spawn_current()
|
||||
(byte~) play_spawn_current::$1 reg byte a 4.0
|
||||
(byte~) play_spawn_current::$7 $7 zp ZP_BYTE:97 0.06451612903225806
|
||||
@ -717,8 +720,8 @@
|
||||
(byte) play_spawn_current::current_piece_idx
|
||||
(byte) play_spawn_current::current_piece_idx#0 reg byte x 2.5
|
||||
(byte) play_spawn_current::piece_idx
|
||||
(byte) play_spawn_current::piece_idx#1 piece_idx zp ZP_BYTE:54 2002.0
|
||||
(byte) play_spawn_current::piece_idx#2 piece_idx zp ZP_BYTE:54 100.5
|
||||
(byte) play_spawn_current::piece_idx#1 piece_idx zp ZP_BYTE:55 2002.0
|
||||
(byte) play_spawn_current::piece_idx#2 piece_idx zp ZP_BYTE:55 100.5
|
||||
(label) play_spawn_current::sid_rnd1
|
||||
(byte) play_spawn_current::sid_rnd1_return
|
||||
(byte) play_spawn_current::sid_rnd1_return#0 reg byte a 2002.0
|
||||
@ -762,21 +765,21 @@
|
||||
(byte) render_bcd::bcd#5 reg byte x 4.0
|
||||
(byte) render_bcd::bcd#6 reg byte x 2.0
|
||||
(word) render_bcd::offset
|
||||
(word) render_bcd::offset#6 offset zp ZP_WORD:7 2.0
|
||||
(word) render_bcd::offset#6 offset zp ZP_WORD:8 2.0
|
||||
(byte) render_bcd::only_low
|
||||
(byte) render_bcd::only_low#6 reg byte y 1.0
|
||||
(byte*) render_bcd::screen
|
||||
(byte*) render_bcd::screen#0 screen zp ZP_WORD:5 2.0
|
||||
(byte*) render_bcd::screen#1 screen zp ZP_WORD:5 2.0
|
||||
(byte*) render_bcd::screen#2 screen zp ZP_WORD:5 2.0
|
||||
(byte*) render_bcd::screen#3 screen zp ZP_WORD:5 4.0
|
||||
(byte*) render_bcd::screen#4 screen zp ZP_WORD:5 4.0
|
||||
(byte*) render_bcd::screen#5 screen zp ZP_WORD:5 2.0
|
||||
(byte*) render_bcd::screen#6 screen zp ZP_WORD:5 14.0
|
||||
(byte*) render_bcd::screen#0 screen zp ZP_WORD:6 2.0
|
||||
(byte*) render_bcd::screen#1 screen zp ZP_WORD:6 2.0
|
||||
(byte*) render_bcd::screen#2 screen zp ZP_WORD:6 2.0
|
||||
(byte*) render_bcd::screen#3 screen zp ZP_WORD:6 4.0
|
||||
(byte*) render_bcd::screen#4 screen zp ZP_WORD:6 4.0
|
||||
(byte*) render_bcd::screen#5 screen zp ZP_WORD:6 2.0
|
||||
(byte*) render_bcd::screen#6 screen zp ZP_WORD:6 14.0
|
||||
(byte*) render_bcd::screen_pos
|
||||
(byte*) render_bcd::screen_pos#0 screen_pos zp ZP_WORD:7 1.6
|
||||
(byte*) render_bcd::screen_pos#2 screen_pos zp ZP_WORD:7 4.0
|
||||
(byte*) render_bcd::screen_pos#3 screen_pos zp ZP_WORD:7 2.0
|
||||
(byte*) render_bcd::screen_pos#0 screen_pos zp ZP_WORD:8 1.6
|
||||
(byte*) render_bcd::screen_pos#2 screen_pos zp ZP_WORD:8 4.0
|
||||
(byte*) render_bcd::screen_pos#3 screen_pos zp ZP_WORD:8 2.0
|
||||
(void()) render_init()
|
||||
(byte~) render_init::$15 reg byte x 16.5
|
||||
(label) render_init::@1
|
||||
@ -787,11 +790,11 @@
|
||||
(byte) render_init::i#1 reg byte y 16.5
|
||||
(byte) render_init::i#2 reg byte y 5.5
|
||||
(byte*) render_init::li_1
|
||||
(byte*) render_init::li_1#1 li_1 zp ZP_WORD:71 5.5
|
||||
(byte*) render_init::li_1#2 li_1 zp ZP_WORD:71 8.25
|
||||
(byte*) render_init::li_1#1 li_1 zp ZP_WORD:72 5.5
|
||||
(byte*) render_init::li_1#2 li_1 zp ZP_WORD:72 8.25
|
||||
(byte*) render_init::li_2
|
||||
(byte*) render_init::li_2#1 li_2 zp ZP_WORD:73 7.333333333333333
|
||||
(byte*) render_init::li_2#2 li_2 zp ZP_WORD:73 6.6000000000000005
|
||||
(byte*) render_init::li_2#1 li_2 zp ZP_WORD:74 7.333333333333333
|
||||
(byte*) render_init::li_2#2 li_2 zp ZP_WORD:74 6.6000000000000005
|
||||
(label) render_init::vicSelectGfxBank1
|
||||
(byte~) render_init::vicSelectGfxBank1_$0
|
||||
(label) render_init::vicSelectGfxBank1_@1
|
||||
@ -821,24 +824,24 @@
|
||||
(byte) render_moving::current_cell
|
||||
(byte) render_moving::current_cell#0 reg byte a 1001.0
|
||||
(byte) render_moving::i
|
||||
(byte) render_moving::i#1 i zp ZP_BYTE:21 202.0
|
||||
(byte) render_moving::i#2 i zp ZP_BYTE:21 500.5
|
||||
(byte) render_moving::i#3 i zp ZP_BYTE:21 50.5
|
||||
(byte) render_moving::i#4 i zp ZP_BYTE:21 1552.0
|
||||
(byte) render_moving::i#8 i zp ZP_BYTE:21 300.75
|
||||
(byte) render_moving::i#1 i zp ZP_BYTE:22 202.0
|
||||
(byte) render_moving::i#2 i zp ZP_BYTE:22 500.5
|
||||
(byte) render_moving::i#3 i zp ZP_BYTE:22 50.5
|
||||
(byte) render_moving::i#4 i zp ZP_BYTE:22 1552.0
|
||||
(byte) render_moving::i#8 i zp ZP_BYTE:22 300.75
|
||||
(byte) render_moving::l
|
||||
(byte) render_moving::l#1 l zp ZP_BYTE:20 151.5
|
||||
(byte) render_moving::l#4 l zp ZP_BYTE:20 11.882352941176471
|
||||
(byte) render_moving::l#1 l zp ZP_BYTE:21 151.5
|
||||
(byte) render_moving::l#4 l zp ZP_BYTE:21 11.882352941176471
|
||||
(byte*) render_moving::screen_line
|
||||
(byte*) render_moving::screen_line#0 screen_line zp ZP_WORD:92 110.19999999999999
|
||||
(byte) render_moving::xpos
|
||||
(byte) render_moving::xpos#0 xpos zp ZP_BYTE:22 202.0
|
||||
(byte) render_moving::xpos#1 xpos zp ZP_BYTE:22 667.3333333333334
|
||||
(byte) render_moving::xpos#2 xpos zp ZP_BYTE:22 620.8
|
||||
(byte) render_moving::xpos#0 xpos zp ZP_BYTE:23 202.0
|
||||
(byte) render_moving::xpos#1 xpos zp ZP_BYTE:23 667.3333333333334
|
||||
(byte) render_moving::xpos#2 xpos zp ZP_BYTE:23 620.8
|
||||
(byte) render_moving::ypos
|
||||
(byte) render_moving::ypos#0 ypos zp ZP_BYTE:19 4.0
|
||||
(byte) render_moving::ypos#1 ypos zp ZP_BYTE:19 67.33333333333333
|
||||
(byte) render_moving::ypos#2 ypos zp ZP_BYTE:19 25.375
|
||||
(byte) render_moving::ypos#0 ypos zp ZP_BYTE:20 4.0
|
||||
(byte) render_moving::ypos#1 ypos zp ZP_BYTE:20 67.33333333333333
|
||||
(byte) render_moving::ypos#2 ypos zp ZP_BYTE:20 25.375
|
||||
(void()) render_next()
|
||||
(byte~) render_next::$9 reg byte y 1.0
|
||||
(label) render_next::@1
|
||||
@ -856,23 +859,23 @@
|
||||
(byte) render_next::cell
|
||||
(byte) render_next::cell#0 reg byte a 1001.0
|
||||
(byte) render_next::l
|
||||
(byte) render_next::l#1 l zp ZP_BYTE:9 151.5
|
||||
(byte) render_next::l#7 l zp ZP_BYTE:9 18.363636363636363
|
||||
(byte) render_next::l#1 l zp ZP_BYTE:10 151.5
|
||||
(byte) render_next::l#7 l zp ZP_BYTE:10 18.363636363636363
|
||||
(word) render_next::next_area_offset
|
||||
(const word) render_next::next_area_offset#0 next_area_offset = (number) $28*(number) $c+(number) $18+(number) 4
|
||||
(byte) render_next::next_piece_char
|
||||
(byte) render_next::next_piece_char#0 next_piece_char zp ZP_BYTE:91 66.86666666666667
|
||||
(byte*) render_next::next_piece_gfx
|
||||
(byte*) render_next::next_piece_gfx#1 next_piece_gfx zp ZP_WORD:10 210.29999999999998
|
||||
(byte*) render_next::next_piece_gfx#2 next_piece_gfx zp ZP_WORD:10 1552.0
|
||||
(byte*) render_next::next_piece_gfx#3 next_piece_gfx zp ZP_WORD:10 204.0
|
||||
(byte*~) render_next::next_piece_gfx#9 next_piece_gfx zp ZP_WORD:10 4.0
|
||||
(byte*) render_next::next_piece_gfx#1 next_piece_gfx zp ZP_WORD:11 210.29999999999998
|
||||
(byte*) render_next::next_piece_gfx#2 next_piece_gfx zp ZP_WORD:11 1552.0
|
||||
(byte*) render_next::next_piece_gfx#3 next_piece_gfx zp ZP_WORD:11 204.0
|
||||
(byte*~) render_next::next_piece_gfx#9 next_piece_gfx zp ZP_WORD:11 4.0
|
||||
(byte*) render_next::screen_next_area
|
||||
(byte*) render_next::screen_next_area#10 screen_next_area zp ZP_WORD:12 204.0
|
||||
(byte*) render_next::screen_next_area#11 screen_next_area zp ZP_WORD:12 0.5
|
||||
(byte*) render_next::screen_next_area#3 screen_next_area zp ZP_WORD:12 701.0
|
||||
(byte*) render_next::screen_next_area#4 screen_next_area zp ZP_WORD:12 67.33333333333333
|
||||
(byte*) render_next::screen_next_area#5 screen_next_area zp ZP_WORD:12 684.1666666666667
|
||||
(byte*) render_next::screen_next_area#10 screen_next_area zp ZP_WORD:13 204.0
|
||||
(byte*) render_next::screen_next_area#11 screen_next_area zp ZP_WORD:13 0.5
|
||||
(byte*) render_next::screen_next_area#3 screen_next_area zp ZP_WORD:13 701.0
|
||||
(byte*) render_next::screen_next_area#4 screen_next_area zp ZP_WORD:13 67.33333333333333
|
||||
(byte*) render_next::screen_next_area#5 screen_next_area zp ZP_WORD:13 684.1666666666667
|
||||
(void()) render_playfield()
|
||||
(byte~) render_playfield::$2 reg byte a 202.0
|
||||
(byte~) render_playfield::$6 reg byte a 202.0
|
||||
@ -881,19 +884,19 @@
|
||||
(label) render_playfield::@3
|
||||
(label) render_playfield::@return
|
||||
(byte) render_playfield::c
|
||||
(byte) render_playfield::c#1 c zp ZP_BYTE:27 1501.5
|
||||
(byte) render_playfield::c#2 c zp ZP_BYTE:27 500.5
|
||||
(byte) render_playfield::c#1 c zp ZP_BYTE:28 1501.5
|
||||
(byte) render_playfield::c#2 c zp ZP_BYTE:28 500.5
|
||||
(byte) render_playfield::i
|
||||
(byte) render_playfield::i#1 i zp ZP_BYTE:24 420.59999999999997
|
||||
(byte) render_playfield::i#2 i zp ZP_BYTE:24 1034.6666666666667
|
||||
(byte) render_playfield::i#3 i zp ZP_BYTE:24 50.5
|
||||
(byte) render_playfield::i#1 i zp ZP_BYTE:25 420.59999999999997
|
||||
(byte) render_playfield::i#2 i zp ZP_BYTE:25 1034.6666666666667
|
||||
(byte) render_playfield::i#3 i zp ZP_BYTE:25 50.5
|
||||
(byte) render_playfield::l
|
||||
(byte) render_playfield::l#1 l zp ZP_BYTE:23 151.5
|
||||
(byte) render_playfield::l#2 l zp ZP_BYTE:23 30.299999999999997
|
||||
(byte) render_playfield::l#1 l zp ZP_BYTE:24 151.5
|
||||
(byte) render_playfield::l#2 l zp ZP_BYTE:24 30.299999999999997
|
||||
(byte*) render_playfield::screen_line
|
||||
(byte*) render_playfield::screen_line#0 screen_line zp ZP_WORD:25 202.0
|
||||
(byte*) render_playfield::screen_line#1 screen_line zp ZP_WORD:25 500.5
|
||||
(byte*) render_playfield::screen_line#2 screen_line zp ZP_WORD:25 1552.0
|
||||
(byte*) render_playfield::screen_line#0 screen_line zp ZP_WORD:26 202.0
|
||||
(byte*) render_playfield::screen_line#1 screen_line zp ZP_WORD:26 500.5
|
||||
(byte*) render_playfield::screen_line#2 screen_line zp ZP_WORD:26 1552.0
|
||||
(void()) render_score()
|
||||
(label) render_score::@1
|
||||
(label) render_score::@2
|
||||
@ -912,7 +915,7 @@
|
||||
(word) render_score::score_offset
|
||||
(const word) render_score::score_offset#0 score_offset = (number) $28*(number) 5+(number) $1c
|
||||
(byte*) render_score::screen
|
||||
(byte*) render_score::screen#3 screen zp ZP_WORD:5 0.75
|
||||
(byte*) render_score::screen#3 screen zp ZP_WORD:6 0.75
|
||||
(void()) render_screen_original((byte*) render_screen_original::screen)
|
||||
(label) render_screen_original::@1
|
||||
(label) render_screen_original::@2
|
||||
@ -923,30 +926,30 @@
|
||||
(byte) render_screen_original::SPACE
|
||||
(const byte) render_screen_original::SPACE#0 SPACE = (byte) 0
|
||||
(byte*) render_screen_original::cols
|
||||
(byte*) render_screen_original::cols#1 cols zp ZP_WORD:82 101.0
|
||||
(byte*) render_screen_original::cols#2 cols zp ZP_WORD:82 75.75
|
||||
(byte*) render_screen_original::cols#3 cols zp ZP_WORD:82 42.599999999999994
|
||||
(byte*) render_screen_original::cols#4 cols zp ZP_WORD:82 78.5
|
||||
(byte*) render_screen_original::cols#5 cols zp ZP_WORD:82 80.8
|
||||
(byte*) render_screen_original::cols#6 cols zp ZP_WORD:82 101.0
|
||||
(byte*) render_screen_original::cols#7 cols zp ZP_WORD:82 22.0
|
||||
(byte*) render_screen_original::cols#1 cols zp ZP_WORD:83 101.0
|
||||
(byte*) render_screen_original::cols#2 cols zp ZP_WORD:83 75.75
|
||||
(byte*) render_screen_original::cols#3 cols zp ZP_WORD:83 42.599999999999994
|
||||
(byte*) render_screen_original::cols#4 cols zp ZP_WORD:83 78.5
|
||||
(byte*) render_screen_original::cols#5 cols zp ZP_WORD:83 80.8
|
||||
(byte*) render_screen_original::cols#6 cols zp ZP_WORD:83 101.0
|
||||
(byte*) render_screen_original::cols#7 cols zp ZP_WORD:83 22.0
|
||||
(byte*) render_screen_original::ocols
|
||||
(byte*) render_screen_original::ocols#1 ocols zp ZP_WORD:78 17.75
|
||||
(byte*) render_screen_original::ocols#2 ocols zp ZP_WORD:78 67.33333333333333
|
||||
(byte*) render_screen_original::ocols#4 ocols zp ZP_WORD:78 14.0
|
||||
(byte*) render_screen_original::ocols#1 ocols zp ZP_WORD:79 17.75
|
||||
(byte*) render_screen_original::ocols#2 ocols zp ZP_WORD:79 67.33333333333333
|
||||
(byte*) render_screen_original::ocols#4 ocols zp ZP_WORD:79 14.0
|
||||
(byte*) render_screen_original::oscr
|
||||
(byte*) render_screen_original::oscr#1 oscr zp ZP_WORD:76 14.2
|
||||
(byte*) render_screen_original::oscr#2 oscr zp ZP_WORD:76 134.66666666666666
|
||||
(byte*) render_screen_original::oscr#4 oscr zp ZP_WORD:76 14.0
|
||||
(byte*) render_screen_original::oscr#1 oscr zp ZP_WORD:77 14.2
|
||||
(byte*) render_screen_original::oscr#2 oscr zp ZP_WORD:77 134.66666666666666
|
||||
(byte*) render_screen_original::oscr#4 oscr zp ZP_WORD:77 14.0
|
||||
(byte*) render_screen_original::screen
|
||||
(byte*) render_screen_original::screen#10 screen zp ZP_WORD:80 30.42857142857143
|
||||
(byte*) render_screen_original::screen#2 screen zp ZP_WORD:80 60.599999999999994
|
||||
(byte*) render_screen_original::screen#3 screen zp ZP_WORD:80 43.285714285714285
|
||||
(byte*) render_screen_original::screen#5 screen zp ZP_WORD:80 157.0
|
||||
(byte*) render_screen_original::screen#6 screen zp ZP_WORD:80 202.0
|
||||
(byte*) render_screen_original::screen#7 screen zp ZP_WORD:80 202.0
|
||||
(byte*) render_screen_original::screen#8 screen zp ZP_WORD:80 24.0
|
||||
(byte*) render_screen_original::screen#9 screen zp ZP_WORD:80 2.0
|
||||
(byte*) render_screen_original::screen#10 screen zp ZP_WORD:81 30.42857142857143
|
||||
(byte*) render_screen_original::screen#2 screen zp ZP_WORD:81 60.599999999999994
|
||||
(byte*) render_screen_original::screen#3 screen zp ZP_WORD:81 43.285714285714285
|
||||
(byte*) render_screen_original::screen#5 screen zp ZP_WORD:81 157.0
|
||||
(byte*) render_screen_original::screen#6 screen zp ZP_WORD:81 202.0
|
||||
(byte*) render_screen_original::screen#7 screen zp ZP_WORD:81 202.0
|
||||
(byte*) render_screen_original::screen#8 screen zp ZP_WORD:81 24.0
|
||||
(byte*) render_screen_original::screen#9 screen zp ZP_WORD:81 2.0
|
||||
(byte) render_screen_original::x
|
||||
(byte) render_screen_original::x#1 reg byte x 202.0
|
||||
(byte) render_screen_original::x#2 reg byte x 202.0
|
||||
@ -955,23 +958,24 @@
|
||||
(byte) render_screen_original::x#5 reg byte x 43.285714285714285
|
||||
(byte) render_screen_original::x#6 reg byte x 60.599999999999994
|
||||
(byte) render_screen_original::y
|
||||
(byte) render_screen_original::y#1 y zp ZP_BYTE:75 16.5
|
||||
(byte) render_screen_original::y#6 y zp ZP_BYTE:75 0.9166666666666666
|
||||
(byte) render_screen_original::y#1 y zp ZP_BYTE:76 16.5
|
||||
(byte) render_screen_original::y#6 y zp ZP_BYTE:76 0.9166666666666666
|
||||
(byte) render_screen_render
|
||||
(byte) render_screen_render#11 render_screen_render zp ZP_BYTE:3 3.25
|
||||
(byte) render_screen_render#15 reg byte a 13.0
|
||||
(byte) render_screen_render#18 render_screen_render zp ZP_BYTE:3 0.923076923076923
|
||||
(byte) render_screen_render#22 reg byte x 8.615384615384615
|
||||
(byte) render_screen_render#33 render_screen_render#33 zp ZP_BYTE:14 5.333333333333333
|
||||
(byte) render_screen_render#33 render_screen_render#33 zp ZP_BYTE:15 5.333333333333333
|
||||
(byte~) render_screen_render#64 reg byte x 22.0
|
||||
(byte~) render_screen_render#65 render_screen_render#65 zp ZP_BYTE:14 5.5
|
||||
(byte~) render_screen_render#65 render_screen_render#65 zp ZP_BYTE:15 5.5
|
||||
(byte~) render_screen_render#66 reg byte a 11.0
|
||||
(byte) render_screen_show
|
||||
(byte) render_screen_show#13 render_screen_show zp ZP_BYTE:2 4.333333333333333
|
||||
(byte) render_screen_show#16 render_screen_show zp ZP_BYTE:2 0.425
|
||||
(byte) render_screen_showing
|
||||
(byte) render_screen_showing#0 render_screen_showing zp ZP_BYTE:85 0.4
|
||||
(byte) render_screen_showing#1 render_screen_showing zp ZP_BYTE:85 20.0
|
||||
(byte) render_screen_showing#0 render_screen_showing zp ZP_BYTE:4 0.1276595744680851
|
||||
(byte) render_screen_showing#1 render_screen_showing zp ZP_BYTE:4 3.8000000000000003
|
||||
(byte) render_screen_showing#13 render_screen_showing zp ZP_BYTE:4 1140.0
|
||||
(void()) render_screen_swap()
|
||||
(label) render_screen_swap::@return
|
||||
(void()) render_show()
|
||||
@ -1010,12 +1014,12 @@
|
||||
(dword[5]) score_add_bcd
|
||||
(const dword[5]) score_add_bcd#0 score_add_bcd = { fill( 5, 0) }
|
||||
(dword) score_bcd
|
||||
(dword) score_bcd#0 score_bcd zp ZP_DWORD:40 0.1111111111111111
|
||||
(dword) score_bcd#14 score_bcd zp ZP_DWORD:40 3.135135135135135
|
||||
(dword) score_bcd#16 score_bcd zp ZP_DWORD:40 1.1428571428571428
|
||||
(dword) score_bcd#18 score_bcd zp ZP_DWORD:40 2.3921568627450975
|
||||
(dword) score_bcd#26 score_bcd zp ZP_DWORD:40 6.0
|
||||
(dword) score_bcd#29 score_bcd zp ZP_DWORD:40 0.8571428571428571
|
||||
(dword) score_bcd#0 score_bcd zp ZP_DWORD:41 0.1111111111111111
|
||||
(dword) score_bcd#14 score_bcd zp ZP_DWORD:41 3.135135135135135
|
||||
(dword) score_bcd#16 score_bcd zp ZP_DWORD:41 1.1428571428571428
|
||||
(dword) score_bcd#18 score_bcd zp ZP_DWORD:41 2.3921568627450975
|
||||
(dword) score_bcd#26 score_bcd zp ZP_DWORD:41 6.0
|
||||
(dword) score_bcd#29 score_bcd zp ZP_DWORD:41 0.8571428571428571
|
||||
(byte*[PLAYFIELD_LINES#0]) screen_lines_1
|
||||
(const byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 screen_lines_1 = { fill( PLAYFIELD_LINES#0, 0) }
|
||||
(byte*[PLAYFIELD_LINES#0]) screen_lines_2
|
||||
@ -1031,8 +1035,8 @@
|
||||
(byte) sprites_init::s2
|
||||
(byte) sprites_init::s2#0 reg byte x 22.0
|
||||
(byte) sprites_init::xpos
|
||||
(byte) sprites_init::xpos#1 xpos zp ZP_BYTE:70 7.333333333333333
|
||||
(byte) sprites_init::xpos#2 xpos zp ZP_BYTE:70 8.25
|
||||
(byte) sprites_init::xpos#1 xpos zp ZP_BYTE:71 7.333333333333333
|
||||
(byte) sprites_init::xpos#2 xpos zp ZP_BYTE:71 8.25
|
||||
interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
|
||||
(byte~) sprites_irq::$0 reg byte x 4.0
|
||||
(label) sprites_irq::@1
|
||||
@ -1054,7 +1058,7 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
|
||||
(byte) sprites_irq::ptr#3 reg byte a 2.6666666666666665
|
||||
(byte) sprites_irq::ptr#4 reg byte a 4.0
|
||||
(byte) sprites_irq::raster_sprite_gfx_modify
|
||||
(byte) sprites_irq::raster_sprite_gfx_modify#0 raster_sprite_gfx_modify zp ZP_BYTE:84 6.5
|
||||
(byte) sprites_irq::raster_sprite_gfx_modify#0 raster_sprite_gfx_modify zp ZP_BYTE:85 6.5
|
||||
(label) sprites_irq::toSpritePtr2
|
||||
(word~) sprites_irq::toSpritePtr2_$0
|
||||
(number~) sprites_irq::toSpritePtr2_$1
|
||||
@ -1076,99 +1080,99 @@ interrupt(HARDWARE_CLOBBER)(void()) sprites_irq()
|
||||
|
||||
zp ZP_BYTE:2 [ render_screen_show#16 render_screen_show#13 ]
|
||||
zp ZP_BYTE:3 [ render_screen_render#18 render_screen_render#11 ]
|
||||
zp ZP_BYTE:4 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
|
||||
zp ZP_WORD:5 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ]
|
||||
zp ZP_WORD:7 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ]
|
||||
zp ZP_BYTE:4 [ render_screen_showing#13 render_screen_showing#1 render_screen_showing#0 ]
|
||||
zp ZP_BYTE:5 [ current_movedown_counter#16 current_movedown_counter#14 current_movedown_counter#12 ]
|
||||
zp ZP_WORD:6 [ render_score::screen#3 render_bcd::screen#6 render_bcd::screen#0 render_bcd::screen#1 render_bcd::screen#2 render_bcd::screen#3 render_bcd::screen#4 render_bcd::screen#5 ]
|
||||
zp ZP_WORD:8 [ render_bcd::offset#6 render_bcd::screen_pos#3 render_bcd::screen_pos#0 render_bcd::screen_pos#2 ]
|
||||
reg byte y [ render_bcd::only_low#6 ]
|
||||
reg byte x [ render_bcd::bcd#6 render_bcd::bcd#0 render_bcd::bcd#1 render_bcd::bcd#2 render_bcd::bcd#3 render_bcd::bcd#4 render_bcd::bcd#5 ]
|
||||
reg byte a [ render_screen_render#15 render_screen_render#66 ]
|
||||
reg byte x [ next_piece_idx#12 next_piece_idx#77 next_piece_idx#78 ]
|
||||
zp ZP_BYTE:9 [ render_next::l#7 render_next::l#1 ]
|
||||
zp ZP_WORD:10 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ]
|
||||
zp ZP_WORD:12 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ]
|
||||
zp ZP_BYTE:10 [ render_next::l#7 render_next::l#1 ]
|
||||
zp ZP_WORD:11 [ render_next::next_piece_gfx#2 render_next::next_piece_gfx#3 render_next::next_piece_gfx#1 render_next::next_piece_gfx#9 ]
|
||||
zp ZP_WORD:13 [ render_next::screen_next_area#5 render_next::screen_next_area#10 render_next::screen_next_area#4 render_next::screen_next_area#11 render_next::screen_next_area#3 ]
|
||||
reg byte x [ render_next::c#2 render_next::c#1 ]
|
||||
reg byte x [ current_ypos#13 current_ypos#98 current_ypos#99 ]
|
||||
zp ZP_BYTE:14 [ render_screen_render#33 render_screen_render#65 ]
|
||||
zp ZP_BYTE:15 [ current_xpos#59 current_xpos#119 current_xpos#120 ]
|
||||
zp ZP_WORD:16 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ]
|
||||
zp ZP_BYTE:18 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ]
|
||||
zp ZP_BYTE:19 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ]
|
||||
zp ZP_BYTE:20 [ render_moving::l#4 render_moving::l#1 ]
|
||||
zp ZP_BYTE:21 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ]
|
||||
zp ZP_BYTE:22 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ]
|
||||
zp ZP_BYTE:15 [ render_screen_render#33 render_screen_render#65 ]
|
||||
zp ZP_BYTE:16 [ current_xpos#59 current_xpos#119 current_xpos#120 ]
|
||||
zp ZP_WORD:17 [ current_piece_gfx#64 current_piece_gfx#112 current_piece_gfx#113 ]
|
||||
zp ZP_BYTE:19 [ current_piece_char#68 current_piece_char#100 current_piece_char#101 ]
|
||||
zp ZP_BYTE:20 [ render_moving::ypos#2 render_moving::ypos#0 render_moving::ypos#1 ]
|
||||
zp ZP_BYTE:21 [ render_moving::l#4 render_moving::l#1 ]
|
||||
zp ZP_BYTE:22 [ render_moving::i#4 render_moving::i#3 render_moving::i#8 render_moving::i#2 render_moving::i#1 ]
|
||||
zp ZP_BYTE:23 [ render_moving::xpos#2 render_moving::xpos#0 render_moving::xpos#1 ]
|
||||
reg byte x [ render_moving::c#2 render_moving::c#1 ]
|
||||
reg byte x [ render_screen_render#22 render_screen_render#64 ]
|
||||
zp ZP_BYTE:23 [ render_playfield::l#2 render_playfield::l#1 ]
|
||||
zp ZP_BYTE:24 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ]
|
||||
zp ZP_WORD:25 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ]
|
||||
zp ZP_BYTE:27 [ render_playfield::c#2 render_playfield::c#1 ]
|
||||
zp ZP_BYTE:28 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 ]
|
||||
zp ZP_BYTE:24 [ render_playfield::l#2 render_playfield::l#1 ]
|
||||
zp ZP_BYTE:25 [ render_playfield::i#2 render_playfield::i#3 render_playfield::i#1 ]
|
||||
zp ZP_WORD:26 [ render_playfield::screen_line#2 render_playfield::screen_line#0 render_playfield::screen_line#1 ]
|
||||
zp ZP_BYTE:28 [ render_playfield::c#2 render_playfield::c#1 ]
|
||||
zp ZP_BYTE:29 [ play_movement::return#2 play_movement::render#1 play_movement::return#0 play_movement::render#2 ]
|
||||
reg byte a [ play_move_rotate::return#2 ]
|
||||
zp ZP_BYTE:29 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ]
|
||||
zp ZP_WORD:30 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 play_collision::piece_gfx#0 ]
|
||||
zp ZP_BYTE:30 [ play_move_rotate::orientation#3 play_move_rotate::orientation#1 play_move_rotate::orientation#2 ]
|
||||
zp ZP_WORD:31 [ current_piece#17 current_piece#96 current_piece#97 current_piece#98 current_piece#99 current_piece#100 play_collision::piece_gfx#0 ]
|
||||
reg byte x [ play_collision::orientation#5 play_collision::orientation#0 play_collision::orientation#1 play_collision::orientation#2 play_collision::orientation#3 ]
|
||||
zp ZP_BYTE:32 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ]
|
||||
zp ZP_BYTE:33 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ]
|
||||
zp ZP_BYTE:34 [ play_collision::l#6 play_collision::l#1 ]
|
||||
zp ZP_BYTE:35 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ]
|
||||
zp ZP_BYTE:36 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ]
|
||||
zp ZP_BYTE:33 [ play_collision::xpos#6 play_collision::xpos#0 play_collision::xpos#1 play_collision::xpos#2 play_collision::xpos#3 play_collision::xpos#4 ]
|
||||
zp ZP_BYTE:34 [ play_collision::yp#2 play_collision::yp#0 play_collision::ypos#0 play_collision::ypos#1 play_collision::ypos#2 play_collision::ypos#3 play_collision::ypos#4 play_collision::yp#1 ]
|
||||
zp ZP_BYTE:35 [ play_collision::l#6 play_collision::l#1 ]
|
||||
zp ZP_BYTE:36 [ play_collision::i#2 play_collision::i#3 play_collision::i#10 play_collision::i#12 ]
|
||||
zp ZP_BYTE:37 [ play_collision::xp#2 play_collision::xp#8 play_collision::xp#1 ]
|
||||
reg byte x [ play_collision::c#2 play_collision::c#1 ]
|
||||
reg byte a [ play_collision::return#15 ]
|
||||
reg byte a [ play_move_leftright::return#2 ]
|
||||
reg byte x [ play_move_down::movedown#6 play_move_down::movedown#7 play_move_down::movedown#10 play_move_down::movedown#2 play_move_down::movedown#3 ]
|
||||
zp ZP_BYTE:37 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ]
|
||||
zp ZP_WORD:38 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ]
|
||||
zp ZP_DWORD:40 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ]
|
||||
zp ZP_BYTE:44 [ level#33 level#10 level#17 level#19 level#21 ]
|
||||
zp ZP_BYTE:45 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ]
|
||||
zp ZP_BYTE:46 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ]
|
||||
zp ZP_WORD:47 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ]
|
||||
zp ZP_BYTE:49 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
|
||||
zp ZP_BYTE:50 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
|
||||
zp ZP_WORD:51 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ]
|
||||
zp ZP_BYTE:53 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
|
||||
zp ZP_BYTE:38 [ current_ypos#38 current_ypos#3 current_ypos#11 current_ypos#19 current_ypos#6 play_lock_current::yp#2 play_lock_current::yp#0 play_lock_current::yp#1 ]
|
||||
zp ZP_WORD:39 [ lines_bcd#26 lines_bcd#19 lines_bcd#15 lines_bcd#17 lines_bcd#29 ]
|
||||
zp ZP_DWORD:41 [ score_bcd#26 score_bcd#18 score_bcd#14 score_bcd#0 score_bcd#16 score_bcd#29 ]
|
||||
zp ZP_BYTE:45 [ level#33 level#10 level#17 level#19 level#21 ]
|
||||
zp ZP_BYTE:46 [ current_movedown_slow#37 current_movedown_slow#14 current_movedown_slow#21 current_movedown_slow#1 current_movedown_slow#23 current_movedown_slow#66 current_movedown_slow#10 ]
|
||||
zp ZP_BYTE:47 [ level_bcd#31 level_bcd#11 level_bcd#17 level_bcd#19 level_bcd#62 level_bcd#21 level_bcd#8 ]
|
||||
zp ZP_WORD:48 [ current_piece#28 current_piece#10 current_piece#15 current_piece#102 current_piece#93 ]
|
||||
zp ZP_BYTE:50 [ current_piece_char#29 current_piece_char#10 current_piece_char#16 current_piece_char#5 ]
|
||||
zp ZP_BYTE:51 [ current_orientation#37 current_orientation#13 current_orientation#17 current_orientation#20 current_orientation#25 current_orientation#7 ]
|
||||
zp ZP_WORD:52 [ current_piece_gfx#35 current_piece_gfx#13 current_piece_gfx#18 current_piece_gfx#124 current_piece_gfx#20 current_piece_gfx#21 current_piece_gfx#7 current_piece_gfx#117 ]
|
||||
zp ZP_BYTE:54 [ current_xpos#43 current_xpos#14 current_xpos#19 current_xpos#100 current_xpos#22 current_xpos#26 current_xpos#6 current_xpos#8 ]
|
||||
reg byte x [ play_move_down::return#3 ]
|
||||
zp ZP_BYTE:54 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
|
||||
zp ZP_BYTE:55 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
|
||||
zp ZP_BYTE:55 [ next_piece_idx#17 next_piece_idx#30 next_piece_idx#10 next_piece_idx#16 play_spawn_current::piece_idx#2 play_spawn_current::piece_idx#1 ]
|
||||
zp ZP_BYTE:56 [ game_over#65 game_over#27 game_over#10 game_over#15 game_over#52 ]
|
||||
reg byte x [ play_increase_level::b#2 play_increase_level::b#1 ]
|
||||
zp ZP_BYTE:56 [ play_remove_lines::y#8 play_remove_lines::y#1 ]
|
||||
zp ZP_BYTE:57 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ]
|
||||
zp ZP_BYTE:57 [ play_remove_lines::y#8 play_remove_lines::y#1 ]
|
||||
zp ZP_BYTE:58 [ play_remove_lines::removed#11 play_remove_lines::removed#8 play_remove_lines::removed#1 ]
|
||||
reg byte y [ play_remove_lines::r#2 play_remove_lines::r#3 play_remove_lines::r#1 ]
|
||||
zp ZP_BYTE:58 [ play_remove_lines::x#2 play_remove_lines::x#1 ]
|
||||
zp ZP_BYTE:59 [ play_remove_lines::full#4 play_remove_lines::full#2 ]
|
||||
zp ZP_BYTE:59 [ play_remove_lines::x#2 play_remove_lines::x#1 ]
|
||||
zp ZP_BYTE:60 [ play_remove_lines::full#4 play_remove_lines::full#2 ]
|
||||
reg byte x [ play_remove_lines::w#6 play_remove_lines::w#3 play_remove_lines::w#4 play_remove_lines::w#12 play_remove_lines::w#11 play_remove_lines::w#1 play_remove_lines::w#2 ]
|
||||
zp ZP_BYTE:60 [ play_lock_current::l#6 play_lock_current::l#1 ]
|
||||
zp ZP_BYTE:61 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ]
|
||||
zp ZP_BYTE:62 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ]
|
||||
zp ZP_BYTE:61 [ play_lock_current::l#6 play_lock_current::l#1 ]
|
||||
zp ZP_BYTE:62 [ play_lock_current::i#2 play_lock_current::i#3 play_lock_current::i#7 play_lock_current::i#9 ]
|
||||
zp ZP_BYTE:63 [ play_lock_current::xp#2 play_lock_current::xp#0 play_lock_current::xp#1 ]
|
||||
reg byte x [ play_lock_current::c#2 play_lock_current::c#1 ]
|
||||
zp ZP_BYTE:63 [ keyboard_event_pressed::keycode#5 ]
|
||||
zp ZP_BYTE:64 [ keyboard_event_pressed::keycode#5 ]
|
||||
reg byte x [ keyboard_event_get::return#2 keyboard_event_get::return#1 ]
|
||||
zp ZP_BYTE:64 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
|
||||
zp ZP_BYTE:65 [ keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
|
||||
reg byte x [ keyboard_event_scan::col#2 keyboard_event_scan::col#1 ]
|
||||
zp ZP_BYTE:65 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ]
|
||||
zp ZP_BYTE:66 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
|
||||
zp ZP_BYTE:66 [ keyboard_event_scan::keycode#10 keyboard_event_scan::keycode#11 keyboard_event_scan::keycode#13 keyboard_event_scan::keycode#14 keyboard_event_scan::keycode#1 ]
|
||||
zp ZP_BYTE:67 [ keyboard_events_size#10 keyboard_events_size#30 keyboard_events_size#19 keyboard_events_size#16 keyboard_events_size#13 keyboard_events_size#4 keyboard_events_size#29 keyboard_events_size#1 keyboard_events_size#2 ]
|
||||
reg byte a [ render_show::d018val#3 ]
|
||||
reg byte y [ play_init::j#2 play_init::j#1 ]
|
||||
zp ZP_WORD:67 [ play_init::pli#2 play_init::pli#1 ]
|
||||
zp ZP_BYTE:69 [ play_init::idx#2 play_init::idx#1 ]
|
||||
zp ZP_WORD:68 [ play_init::pli#2 play_init::pli#1 ]
|
||||
zp ZP_BYTE:70 [ play_init::idx#2 play_init::idx#1 ]
|
||||
reg byte x [ play_init::b#2 play_init::b#1 ]
|
||||
reg byte y [ sprites_init::s#2 sprites_init::s#1 ]
|
||||
zp ZP_BYTE:70 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
zp ZP_BYTE:71 [ sprites_init::xpos#2 sprites_init::xpos#1 ]
|
||||
reg byte y [ render_init::i#2 render_init::i#1 ]
|
||||
zp ZP_WORD:71 [ render_init::li_1#2 render_init::li_1#1 ]
|
||||
zp ZP_WORD:73 [ render_init::li_2#2 render_init::li_2#1 ]
|
||||
zp ZP_BYTE:75 [ render_screen_original::y#6 render_screen_original::y#1 ]
|
||||
zp ZP_WORD:76 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ]
|
||||
zp ZP_WORD:78 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ]
|
||||
zp ZP_WORD:80 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
|
||||
zp ZP_WORD:82 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
|
||||
zp ZP_WORD:72 [ render_init::li_1#2 render_init::li_1#1 ]
|
||||
zp ZP_WORD:74 [ render_init::li_2#2 render_init::li_2#1 ]
|
||||
zp ZP_BYTE:76 [ render_screen_original::y#6 render_screen_original::y#1 ]
|
||||
zp ZP_WORD:77 [ render_screen_original::oscr#2 render_screen_original::oscr#4 render_screen_original::oscr#1 ]
|
||||
zp ZP_WORD:79 [ render_screen_original::ocols#2 render_screen_original::ocols#4 render_screen_original::ocols#1 ]
|
||||
zp ZP_WORD:81 [ render_screen_original::screen#7 render_screen_original::screen#6 render_screen_original::screen#5 render_screen_original::screen#8 render_screen_original::screen#9 render_screen_original::screen#10 render_screen_original::screen#2 render_screen_original::screen#3 ]
|
||||
zp ZP_WORD:83 [ render_screen_original::cols#6 render_screen_original::cols#5 render_screen_original::cols#4 render_screen_original::cols#7 render_screen_original::cols#3 render_screen_original::cols#1 render_screen_original::cols#2 ]
|
||||
reg byte x [ render_screen_original::x#6 render_screen_original::x#5 render_screen_original::x#4 render_screen_original::x#1 render_screen_original::x#2 render_screen_original::x#3 ]
|
||||
zp ZP_BYTE:84 [ sprites_irq::raster_sprite_gfx_modify#0 ]
|
||||
zp ZP_BYTE:85 [ render_screen_showing#0 render_screen_showing#1 ]
|
||||
zp ZP_BYTE:85 [ sprites_irq::raster_sprite_gfx_modify#0 ]
|
||||
zp ZP_BYTE:86 [ irq_raster_next#0 irq_raster_next#4 irq_raster_next#1 irq_raster_next#2 irq_raster_next#3 ]
|
||||
zp ZP_BYTE:87 [ irq_sprite_ypos#0 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
zp ZP_BYTE:88 [ irq_sprite_ptr#0 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
zp ZP_BYTE:89 [ irq_cnt#0 irq_cnt#1 irq_cnt#2 ]
|
||||
zp ZP_BYTE:87 [ irq_sprite_ypos#0 irq_sprite_ypos#11 irq_sprite_ypos#1 irq_sprite_ypos#2 irq_sprite_ypos#3 ]
|
||||
zp ZP_BYTE:88 [ irq_sprite_ptr#0 irq_sprite_ptr#11 irq_sprite_ptr#1 irq_sprite_ptr#2 irq_sprite_ptr#3 ]
|
||||
zp ZP_BYTE:89 [ irq_cnt#0 irq_cnt#3 irq_cnt#1 irq_cnt#2 ]
|
||||
reg byte x [ keyboard_event_get::return#3 ]
|
||||
reg byte x [ main::key_event#0 ]
|
||||
zp ZP_BYTE:90 [ play_movement::key_event#0 ]
|
||||
|
@ -45,11 +45,12 @@ table_driven_irq::@6: scope:[table_driven_irq] from table_driven_irq::@5
|
||||
[24] (byte) irq_idx#2 ← (byte) 0
|
||||
to:table_driven_irq::@return
|
||||
table_driven_irq::@return: scope:[table_driven_irq] from table_driven_irq::@5 table_driven_irq::@6
|
||||
[25] return
|
||||
[25] (byte) irq_idx#3 ← phi( table_driven_irq::@5/(byte) irq_idx#1 table_driven_irq::@6/(byte) irq_idx#2 )
|
||||
[26] return
|
||||
to:@return
|
||||
table_driven_irq::@3: scope:[table_driven_irq] from table_driven_irq::@4
|
||||
[26] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0
|
||||
[27] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0
|
||||
to:table_driven_irq::@1
|
||||
table_driven_irq::@2: scope:[table_driven_irq] from table_driven_irq::@1
|
||||
[27] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0
|
||||
[28] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0
|
||||
to:table_driven_irq::@1
|
||||
|
@ -359,8 +359,6 @@ if() condition always true - replacing block destination [53] if(true) goto tabl
|
||||
Successful SSA optimization Pass2ConstantIfs
|
||||
De-inlining pointer[w] to *(pointer+w) [41] *((const byte*) SCREEN#0 + (word~) table_driven_irq::$6) ← (byte) table_driven_irq::val#0
|
||||
Successful SSA optimization Pass2DeInlineWordDerefIdx
|
||||
Eliminating unused variable - keeping the phi block (byte) irq_idx#3
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Constant right-side identified [9] (byte[]) IRQ_CHANGE_IDX#0 ← { (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT#0, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT#0, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT#0, (byte) $20, (byte) $21, (const byte) IRQ_CHANGE_NEXT#0 }
|
||||
Constant right-side identified [17] (byte~) table_driven_irq::$1 ← (const byte) VIC_SIZE#0 + (byte) 8
|
||||
Successful SSA optimization Pass2ConstantRValueConsolidation
|
||||
@ -382,6 +380,7 @@ Converting *(pointer+n) to pointer[n] [19] *((byte*~) table_driven_irq::$7) ←
|
||||
Successful SSA optimization Pass2InlineDerefIdx
|
||||
Eliminating unused variable (byte*~) table_driven_irq::$7 and assignment [17] (byte*~) table_driven_irq::$7 ← (const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Added new block during phi lifting table_driven_irq::@14(between table_driven_irq::@10 and table_driven_irq::@return)
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @4
|
||||
Adding NOP phi() at start of @6
|
||||
@ -390,12 +389,15 @@ Adding NOP phi() at start of @end
|
||||
CALL GRAPH
|
||||
Calls in [] to main:4
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Created 2 initial phi equivalence classes
|
||||
Coalesced [16] irq_idx#13 ← irq_idx#0
|
||||
Coalesced [29] irq_idx#14 ← irq_idx#1
|
||||
Coalesced [27] irq_idx#16 ← irq_idx#2
|
||||
Coalesced [30] irq_idx#15 ← irq_idx#1
|
||||
Coalesced [32] irq_idx#14 ← irq_idx#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) @4
|
||||
Culled Empty Block (label) @7
|
||||
Culled Empty Block (label) table_driven_irq::@14
|
||||
Culled Empty Block (label) table_driven_irq::@8
|
||||
Renumbering block @5 to @1
|
||||
Renumbering block @6 to @2
|
||||
@ -455,13 +457,14 @@ table_driven_irq::@6: scope:[table_driven_irq] from table_driven_irq::@5
|
||||
[24] (byte) irq_idx#2 ← (byte) 0
|
||||
to:table_driven_irq::@return
|
||||
table_driven_irq::@return: scope:[table_driven_irq] from table_driven_irq::@5 table_driven_irq::@6
|
||||
[25] return
|
||||
[25] (byte) irq_idx#3 ← phi( table_driven_irq::@5/(byte) irq_idx#1 table_driven_irq::@6/(byte) irq_idx#2 )
|
||||
[26] return
|
||||
to:@return
|
||||
table_driven_irq::@3: scope:[table_driven_irq] from table_driven_irq::@4
|
||||
[26] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0
|
||||
[27] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0
|
||||
to:table_driven_irq::@1
|
||||
table_driven_irq::@2: scope:[table_driven_irq] from table_driven_irq::@1
|
||||
[27] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0
|
||||
[28] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0
|
||||
to:table_driven_irq::@1
|
||||
|
||||
|
||||
@ -482,8 +485,9 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) VIC_SIZE
|
||||
(byte) irq_idx
|
||||
(byte) irq_idx#0 4.0
|
||||
(byte) irq_idx#1 6.6000000000000005
|
||||
(byte) irq_idx#2 20.0
|
||||
(byte) irq_idx#1 4.375
|
||||
(byte) irq_idx#2 4.0
|
||||
(byte) irq_idx#3 40.0
|
||||
(byte) irq_idx#4 19.0
|
||||
(void()) main()
|
||||
interrupt(KERNEL_MIN)(void()) table_driven_irq()
|
||||
@ -493,15 +497,14 @@ interrupt(KERNEL_MIN)(void()) table_driven_irq()
|
||||
(byte) table_driven_irq::val#0 6.166666666666666
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ irq_idx#4 irq_idx#0 irq_idx#1 ]
|
||||
Coalescing volatile variable equivalence classes [ irq_idx#4 irq_idx#0 irq_idx#1 ] and [ irq_idx#2 ]
|
||||
[ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Added variable table_driven_irq::idx#0 to zero page equivalence class [ table_driven_irq::idx#0 ]
|
||||
Added variable table_driven_irq::val#0 to zero page equivalence class [ table_driven_irq::val#0 ]
|
||||
Complete equivalence classes
|
||||
[ irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
[ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
[ table_driven_irq::idx#0 ]
|
||||
[ table_driven_irq::val#0 ]
|
||||
Allocated zp ZP_BYTE:2 [ irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Allocated zp ZP_BYTE:2 [ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Allocated zp ZP_BYTE:3 [ table_driven_irq::idx#0 ]
|
||||
Allocated zp ZP_BYTE:4 [ table_driven_irq::val#0 ]
|
||||
|
||||
@ -638,28 +641,32 @@ table_driven_irq: {
|
||||
ldy val
|
||||
sta $ff
|
||||
cpy $ff
|
||||
bcs breturn
|
||||
bcs breturn_from_b5
|
||||
jmp b6
|
||||
//SEG37 table_driven_irq::@6
|
||||
b6:
|
||||
//SEG38 [24] (byte) irq_idx#2 ← (byte) 0 -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta irq_idx
|
||||
//SEG39 [25] phi from table_driven_irq::@5 table_driven_irq::@6 to table_driven_irq::@return [phi:table_driven_irq::@5/table_driven_irq::@6->table_driven_irq::@return]
|
||||
breturn_from_b5:
|
||||
breturn_from_b6:
|
||||
//SEG40 [25] phi (byte) irq_idx#3 = (byte) irq_idx#1 [phi:table_driven_irq::@5/table_driven_irq::@6->table_driven_irq::@return#0] -- register_copy
|
||||
jmp breturn
|
||||
//SEG39 table_driven_irq::@return
|
||||
//SEG41 table_driven_irq::@return
|
||||
breturn:
|
||||
//SEG40 [25] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG42 [26] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
//SEG41 table_driven_irq::@3
|
||||
//SEG43 table_driven_irq::@3
|
||||
b3:
|
||||
//SEG42 [26] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
//SEG44 [27] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda val
|
||||
ldy idx
|
||||
sta SCREEN+-VIC_SIZE+$3f8,y
|
||||
jmp b1_from_b3
|
||||
//SEG43 table_driven_irq::@2
|
||||
//SEG45 table_driven_irq::@2
|
||||
b2:
|
||||
//SEG44 [27] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
//SEG46 [28] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuz1=vbuz2
|
||||
lda val
|
||||
ldy idx
|
||||
sta VIC_BASE,y
|
||||
@ -679,11 +686,11 @@ Statement [11] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void(
|
||||
Statement [16] (byte) table_driven_irq::idx#0 ← *((const byte[]) IRQ_CHANGE_IDX#0 + (byte) irq_idx#4) [ irq_idx#4 table_driven_irq::idx#0 ] ( [ irq_idx#4 table_driven_irq::idx#0 ] ) always clobbers reg byte y
|
||||
Statement [17] (byte) table_driven_irq::val#0 ← *((const byte[]) IRQ_CHANGE_VAL#0 + (byte) irq_idx#4) [ irq_idx#4 table_driven_irq::idx#0 table_driven_irq::val#0 ] ( [ irq_idx#4 table_driven_irq::idx#0 table_driven_irq::val#0 ] ) always clobbers reg byte y
|
||||
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:3 [ table_driven_irq::idx#0 ]
|
||||
Statement [21] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ table_driven_irq::val#0 ] ( [ table_driven_irq::val#0 ] ) always clobbers reg byte a
|
||||
Statement [21] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ irq_idx#1 table_driven_irq::val#0 ] ( [ irq_idx#1 table_driven_irq::val#0 ] ) always clobbers reg byte a
|
||||
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ table_driven_irq::val#0 ]
|
||||
Statement [24] (byte) irq_idx#2 ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a
|
||||
Statement [26] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx#1 ] ( [ irq_idx#1 ] ) always clobbers reg byte a
|
||||
Statement [27] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx#1 ] ( [ irq_idx#1 ] ) always clobbers reg byte a
|
||||
Statement [24] (byte) irq_idx#2 ← (byte) 0 [ irq_idx#2 ] ( [ irq_idx#2 ] ) always clobbers reg byte a
|
||||
Statement [27] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx#1 ] ( [ irq_idx#1 ] ) always clobbers reg byte a
|
||||
Statement [28] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx#1 ] ( [ irq_idx#1 ] ) always clobbers reg byte a
|
||||
Statement [1] (byte) irq_idx#0 ← (byte) 0 [ ] ( ) always clobbers reg byte a
|
||||
Statement [6] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
@ -693,24 +700,24 @@ Statement [10] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] (
|
||||
Statement [11] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) table_driven_irq() [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [16] (byte) table_driven_irq::idx#0 ← *((const byte[]) IRQ_CHANGE_IDX#0 + (byte) irq_idx#4) [ irq_idx#4 table_driven_irq::idx#0 ] ( [ irq_idx#4 table_driven_irq::idx#0 ] ) always clobbers reg byte y
|
||||
Statement [17] (byte) table_driven_irq::val#0 ← *((const byte[]) IRQ_CHANGE_VAL#0 + (byte) irq_idx#4) [ irq_idx#4 table_driven_irq::idx#0 table_driven_irq::val#0 ] ( [ irq_idx#4 table_driven_irq::idx#0 table_driven_irq::val#0 ] ) always clobbers reg byte y
|
||||
Statement [21] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ table_driven_irq::val#0 ] ( [ table_driven_irq::val#0 ] ) always clobbers reg byte a
|
||||
Statement [24] (byte) irq_idx#2 ← (byte) 0 [ ] ( [ ] ) always clobbers reg byte a
|
||||
Statement [26] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx#1 ] ( [ irq_idx#1 ] ) always clobbers reg byte a
|
||||
Statement [27] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx#1 ] ( [ irq_idx#1 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ] : zp ZP_BYTE:2 ,
|
||||
Statement [21] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ irq_idx#1 table_driven_irq::val#0 ] ( [ irq_idx#1 table_driven_irq::val#0 ] ) always clobbers reg byte a
|
||||
Statement [24] (byte) irq_idx#2 ← (byte) 0 [ irq_idx#2 ] ( [ irq_idx#2 ] ) always clobbers reg byte a
|
||||
Statement [27] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx#1 ] ( [ irq_idx#1 ] ) always clobbers reg byte a
|
||||
Statement [28] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 [ irq_idx#1 ] ( [ irq_idx#1 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ] : zp ZP_BYTE:2 ,
|
||||
Potential registers zp ZP_BYTE:3 [ table_driven_irq::idx#0 ] : zp ZP_BYTE:3 , reg byte a , reg byte x ,
|
||||
Potential registers zp ZP_BYTE:4 [ table_driven_irq::val#0 ] : zp ZP_BYTE:4 , reg byte x , reg byte y ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 49.6: zp ZP_BYTE:2 [ irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Uplift Scope [] 71.38: zp ZP_BYTE:2 [ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Uplift Scope [table_driven_irq] 11: zp ZP_BYTE:3 [ table_driven_irq::idx#0 ] 6.17: zp ZP_BYTE:4 [ table_driven_irq::val#0 ]
|
||||
Uplift Scope [main]
|
||||
|
||||
Uplifting [] best 928 combination zp ZP_BYTE:2 [ irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Uplifting [] best 928 combination zp ZP_BYTE:2 [ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Uplifting [table_driven_irq] best 762 combination reg byte a [ table_driven_irq::idx#0 ] reg byte x [ table_driven_irq::val#0 ]
|
||||
Uplifting [main] best 762 combination
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Uplifting [] best 762 combination zp ZP_BYTE:2 [ irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
Uplifting [] best 762 combination zp ZP_BYTE:2 [ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG0 File Comments
|
||||
@ -837,28 +844,32 @@ table_driven_irq: {
|
||||
ldy RASTER
|
||||
sty $ff
|
||||
cpx $ff
|
||||
bcs breturn
|
||||
bcs breturn_from_b5
|
||||
jmp b6
|
||||
//SEG37 table_driven_irq::@6
|
||||
b6:
|
||||
//SEG38 [24] (byte) irq_idx#2 ← (byte) 0 -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta irq_idx
|
||||
//SEG39 [25] phi from table_driven_irq::@5 table_driven_irq::@6 to table_driven_irq::@return [phi:table_driven_irq::@5/table_driven_irq::@6->table_driven_irq::@return]
|
||||
breturn_from_b5:
|
||||
breturn_from_b6:
|
||||
//SEG40 [25] phi (byte) irq_idx#3 = (byte) irq_idx#1 [phi:table_driven_irq::@5/table_driven_irq::@6->table_driven_irq::@return#0] -- register_copy
|
||||
jmp breturn
|
||||
//SEG39 table_driven_irq::@return
|
||||
//SEG41 table_driven_irq::@return
|
||||
breturn:
|
||||
//SEG40 [25] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG42 [26] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
//SEG41 table_driven_irq::@3
|
||||
//SEG43 table_driven_irq::@3
|
||||
b3:
|
||||
//SEG42 [26] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuaa=vbuxx
|
||||
//SEG44 [27] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuaa=vbuxx
|
||||
tay
|
||||
txa
|
||||
sta SCREEN+-VIC_SIZE+$3f8,y
|
||||
jmp b1_from_b3
|
||||
//SEG43 table_driven_irq::@2
|
||||
//SEG45 table_driven_irq::@2
|
||||
b2:
|
||||
//SEG44 [27] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuaa=vbuxx
|
||||
//SEG46 [28] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuaa=vbuxx
|
||||
tay
|
||||
txa
|
||||
sta VIC_BASE,y
|
||||
@ -881,6 +892,7 @@ Succesful ASM optimization Pass5NextJumpElimination
|
||||
Removing instruction lda #IRQ_RASTER
|
||||
Removing instruction ldy irq_idx
|
||||
Succesful ASM optimization Pass5UnnecesaryLoadElimination
|
||||
Replacing label breturn_from_b5 with breturn
|
||||
Replacing label b1_from_b3 with b1
|
||||
Replacing label b1_from_b2 with b1
|
||||
Removing instruction b1:
|
||||
@ -889,6 +901,8 @@ Removing instruction bend_from_b2:
|
||||
Removing instruction b1_from_table_driven_irq:
|
||||
Removing instruction b1_from_b2:
|
||||
Removing instruction b1_from_b3:
|
||||
Removing instruction breturn_from_b5:
|
||||
Removing instruction breturn_from_b6:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction b2:
|
||||
Removing instruction bend:
|
||||
@ -940,8 +954,9 @@ FINAL SYMBOL TABLE
|
||||
(const byte) VIC_SIZE#0 VIC_SIZE = (byte) $30
|
||||
(byte) irq_idx
|
||||
(byte) irq_idx#0 irq_idx zp ZP_BYTE:2 4.0
|
||||
(byte) irq_idx#1 irq_idx zp ZP_BYTE:2 6.6000000000000005
|
||||
(byte) irq_idx#2 irq_idx zp ZP_BYTE:2 20.0
|
||||
(byte) irq_idx#1 irq_idx zp ZP_BYTE:2 4.375
|
||||
(byte) irq_idx#2 irq_idx zp ZP_BYTE:2 4.0
|
||||
(byte) irq_idx#3 irq_idx zp ZP_BYTE:2 40.0
|
||||
(byte) irq_idx#4 irq_idx zp ZP_BYTE:2 19.0
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
@ -958,7 +973,7 @@ interrupt(KERNEL_MIN)(void()) table_driven_irq()
|
||||
(byte) table_driven_irq::val
|
||||
(byte) table_driven_irq::val#0 reg byte x 6.166666666666666
|
||||
|
||||
zp ZP_BYTE:2 [ irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
zp ZP_BYTE:2 [ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
reg byte a [ table_driven_irq::idx#0 ]
|
||||
reg byte x [ table_driven_irq::val#0 ]
|
||||
|
||||
@ -1078,19 +1093,21 @@ table_driven_irq: {
|
||||
//SEG38 [24] (byte) irq_idx#2 ← (byte) 0 -- vbuz1=vbuc1
|
||||
lda #0
|
||||
sta irq_idx
|
||||
//SEG39 table_driven_irq::@return
|
||||
//SEG40 [25] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG39 [25] phi from table_driven_irq::@5 table_driven_irq::@6 to table_driven_irq::@return [phi:table_driven_irq::@5/table_driven_irq::@6->table_driven_irq::@return]
|
||||
//SEG40 [25] phi (byte) irq_idx#3 = (byte) irq_idx#1 [phi:table_driven_irq::@5/table_driven_irq::@6->table_driven_irq::@return#0] -- register_copy
|
||||
//SEG41 table_driven_irq::@return
|
||||
//SEG42 [26] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
//SEG41 table_driven_irq::@3
|
||||
//SEG43 table_driven_irq::@3
|
||||
b3:
|
||||
//SEG42 [26] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuaa=vbuxx
|
||||
//SEG44 [27] *((const byte*) SCREEN#0+-(const byte) VIC_SIZE#0+(word) $3f8 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuaa=vbuxx
|
||||
tay
|
||||
txa
|
||||
sta SCREEN+-VIC_SIZE+$3f8,y
|
||||
jmp b1
|
||||
//SEG43 table_driven_irq::@2
|
||||
//SEG45 table_driven_irq::@2
|
||||
b2:
|
||||
//SEG44 [27] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuaa=vbuxx
|
||||
//SEG46 [28] *((const byte*) VIC_BASE#0 + (byte) table_driven_irq::idx#0) ← (byte) table_driven_irq::val#0 -- pbuc1_derefidx_vbuaa=vbuxx
|
||||
tay
|
||||
txa
|
||||
sta VIC_BASE,y
|
||||
|
@ -32,8 +32,9 @@
|
||||
(const byte) VIC_SIZE#0 VIC_SIZE = (byte) $30
|
||||
(byte) irq_idx
|
||||
(byte) irq_idx#0 irq_idx zp ZP_BYTE:2 4.0
|
||||
(byte) irq_idx#1 irq_idx zp ZP_BYTE:2 6.6000000000000005
|
||||
(byte) irq_idx#2 irq_idx zp ZP_BYTE:2 20.0
|
||||
(byte) irq_idx#1 irq_idx zp ZP_BYTE:2 4.375
|
||||
(byte) irq_idx#2 irq_idx zp ZP_BYTE:2 4.0
|
||||
(byte) irq_idx#3 irq_idx zp ZP_BYTE:2 40.0
|
||||
(byte) irq_idx#4 irq_idx zp ZP_BYTE:2 19.0
|
||||
(void()) main()
|
||||
(label) main::@return
|
||||
@ -50,6 +51,6 @@ interrupt(KERNEL_MIN)(void()) table_driven_irq()
|
||||
(byte) table_driven_irq::val
|
||||
(byte) table_driven_irq::val#0 reg byte x 6.166666666666666
|
||||
|
||||
zp ZP_BYTE:2 [ irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
zp ZP_BYTE:2 [ irq_idx#3 irq_idx#4 irq_idx#0 irq_idx#1 irq_idx#2 ]
|
||||
reg byte a [ table_driven_irq::idx#0 ]
|
||||
reg byte x [ table_driven_irq::val#0 ]
|
||||
|
@ -38,13 +38,13 @@ main: {
|
||||
lda #>irq
|
||||
sta KERNEL_IRQ+1
|
||||
cli
|
||||
b1:
|
||||
b2:
|
||||
lda RASTER
|
||||
cmp #$14
|
||||
bcs b1
|
||||
bcs b2
|
||||
lda #1
|
||||
sta framedone
|
||||
jmp b1
|
||||
jmp b2
|
||||
}
|
||||
irq: {
|
||||
inc BGCOL
|
||||
|
@ -19,23 +19,27 @@ main: scope:[main] from @2
|
||||
[10] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq()
|
||||
asm { cli }
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1 main::@2
|
||||
[12] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1
|
||||
main::@1: scope:[main] from main main::@2 main::@3
|
||||
[12] (bool) framedone#1 ← phi( main/(bool) framedone#11 main::@3/(bool) framedone#0 )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
[13] (bool) framedone#0 ← true
|
||||
[13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[14] (bool) framedone#0 ← true
|
||||
to:main::@1
|
||||
irq: scope:[irq] from
|
||||
[14] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0)
|
||||
[15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
|
||||
[16] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1
|
||||
[15] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0)
|
||||
[16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
|
||||
[17] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1
|
||||
to:irq::@2
|
||||
irq::@2: scope:[irq] from irq
|
||||
[17] (bool) framedone#3 ← false
|
||||
[18] (bool) framedone#3 ← false
|
||||
to:irq::@1
|
||||
irq::@1: scope:[irq] from irq irq::@2
|
||||
[18] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0)
|
||||
[19] (bool) framedone#10 ← phi( irq/(bool) framedone#11 irq::@2/(bool) framedone#3 )
|
||||
[20] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0)
|
||||
to:irq::@return
|
||||
irq::@return: scope:[irq] from irq::@1
|
||||
[19] return
|
||||
[21] return
|
||||
to:@return
|
||||
|
@ -214,9 +214,6 @@ Successful SSA optimization Pass2ConstantIdentification
|
||||
if() condition always true - replacing block destination [19] if(true) goto main::@2
|
||||
Successful SSA optimization Pass2ConstantIfs
|
||||
Rewriting conditional comparison [34] if(*((const byte*) RASTER#0)<=(byte) $32) goto irq::@1
|
||||
Eliminating unused variable - keeping the phi block (bool) framedone#1
|
||||
Eliminating unused variable - keeping the phi block (bool) framedone#10
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused block main::@return
|
||||
Successful SSA optimization Pass2EliminateUnusedBlocks
|
||||
Adding number conversion cast (unumber) $32+1 in if(*((const byte*) RASTER#0)<(byte) $32+(number) 1) goto irq::@1
|
||||
@ -229,20 +226,23 @@ Finalized unsigned number type (byte) 1
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq()
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Added new block during phi lifting irq::@3(between irq and irq::@1)
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @2
|
||||
Adding NOP phi() at start of @3
|
||||
Adding NOP phi() at start of @end
|
||||
Adding NOP phi() at start of main::@1
|
||||
CALL GRAPH
|
||||
Calls in [] to main:3
|
||||
|
||||
Created 0 initial phi equivalence classes
|
||||
Coalesced down to 0 phi equivalence classes
|
||||
Created 2 initial phi equivalence classes
|
||||
Coalesced [13] framedone#15 ← framedone#11
|
||||
Coalesced [17] framedone#16 ← framedone#0
|
||||
Coalesced [22] framedone#18 ← framedone#3
|
||||
Coalesced [26] framedone#17 ← framedone#11
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) @3
|
||||
Culled Empty Block (label) main::@1
|
||||
Renumbering block main::@2 to main::@1
|
||||
Renumbering block main::@7 to main::@2
|
||||
Culled Empty Block (label) irq::@3
|
||||
Renumbering block main::@7 to main::@3
|
||||
Adding NOP phi() at start of @begin
|
||||
Adding NOP phi() at start of @2
|
||||
Adding NOP phi() at start of @end
|
||||
@ -269,25 +269,29 @@ main: scope:[main] from @2
|
||||
[10] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq()
|
||||
asm { cli }
|
||||
to:main::@1
|
||||
main::@1: scope:[main] from main main::@1 main::@2
|
||||
[12] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1
|
||||
main::@1: scope:[main] from main main::@2 main::@3
|
||||
[12] (bool) framedone#1 ← phi( main/(bool) framedone#11 main::@3/(bool) framedone#0 )
|
||||
to:main::@2
|
||||
main::@2: scope:[main] from main::@1
|
||||
[13] (bool) framedone#0 ← true
|
||||
[13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1
|
||||
to:main::@3
|
||||
main::@3: scope:[main] from main::@2
|
||||
[14] (bool) framedone#0 ← true
|
||||
to:main::@1
|
||||
irq: scope:[irq] from
|
||||
[14] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0)
|
||||
[15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
|
||||
[16] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1
|
||||
[15] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0)
|
||||
[16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0
|
||||
[17] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1
|
||||
to:irq::@2
|
||||
irq::@2: scope:[irq] from irq
|
||||
[17] (bool) framedone#3 ← false
|
||||
[18] (bool) framedone#3 ← false
|
||||
to:irq::@1
|
||||
irq::@1: scope:[irq] from irq irq::@2
|
||||
[18] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0)
|
||||
[19] (bool) framedone#10 ← phi( irq/(bool) framedone#11 irq::@2/(bool) framedone#3 )
|
||||
[20] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0)
|
||||
to:irq::@return
|
||||
irq::@return: scope:[irq] from irq::@1
|
||||
[19] return
|
||||
[21] return
|
||||
to:@return
|
||||
|
||||
|
||||
@ -302,18 +306,19 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) RASTER
|
||||
(byte*) VIC_CONTROL
|
||||
(bool) framedone
|
||||
(bool) framedone#0 110.0
|
||||
(bool) framedone#11 20.0
|
||||
(bool) framedone#3 20.0
|
||||
(bool) framedone#0 22.0
|
||||
(bool) framedone#1 130.0
|
||||
(bool) framedone#10 40.0
|
||||
(bool) framedone#11 0.5
|
||||
(bool) framedone#3 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(void()) main()
|
||||
|
||||
Initial phi equivalence classes
|
||||
Coalescing volatile variable equivalence classes [ framedone#0 ] and [ framedone#3 ]
|
||||
Coalescing volatile variable equivalence classes [ framedone#0 framedone#3 ] and [ framedone#11 ]
|
||||
[ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Complete equivalence classes
|
||||
[ framedone#0 framedone#3 framedone#11 ]
|
||||
Allocated zp ZP_BOOL:2 [ framedone#0 framedone#3 framedone#11 ]
|
||||
[ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Allocated zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
|
||||
INITIAL ASM
|
||||
//SEG0 File Comments
|
||||
@ -382,73 +387,87 @@ main: {
|
||||
sta KERNEL_IRQ+1
|
||||
//SEG18 asm { cli }
|
||||
cli
|
||||
//SEG19 [12] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1]
|
||||
b1_from_main:
|
||||
b1_from_b3:
|
||||
//SEG20 [12] phi (bool) framedone#1 = (bool) framedone#11 [phi:main/main::@3->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG19 main::@1
|
||||
//SEG21 [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
b1_from_b2:
|
||||
jmp b1
|
||||
//SEG22 main::@1
|
||||
b1:
|
||||
//SEG20 [12] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 -- _deref_pbuc1_ge_vbuc2_then_la1
|
||||
jmp b2
|
||||
//SEG23 main::@2
|
||||
b2:
|
||||
//SEG24 [13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 -- _deref_pbuc1_ge_vbuc2_then_la1
|
||||
lda RASTER
|
||||
cmp #$14
|
||||
bcs b1
|
||||
jmp b2
|
||||
//SEG21 main::@2
|
||||
b2:
|
||||
//SEG22 [13] (bool) framedone#0 ← true -- vboz1=vboc1
|
||||
bcs b1_from_b2
|
||||
jmp b3
|
||||
//SEG25 main::@3
|
||||
b3:
|
||||
//SEG26 [14] (bool) framedone#0 ← true -- vboz1=vboc1
|
||||
lda #1
|
||||
sta framedone
|
||||
jmp b1
|
||||
jmp b1_from_b3
|
||||
}
|
||||
//SEG23 irq
|
||||
//SEG27 irq
|
||||
irq: {
|
||||
//SEG24 entry interrupt(KERNEL_MIN)
|
||||
//SEG25 [14] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
|
||||
//SEG28 entry interrupt(KERNEL_MIN)
|
||||
//SEG29 [15] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
|
||||
inc BGCOL
|
||||
//SEG26 [15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG30 [16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
lda #IRQ_RASTER
|
||||
sta IRQ_STATUS
|
||||
//SEG27 [16] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1 -- _deref_pbuc1_lt_vbuc2_then_la1
|
||||
//SEG31 [17] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1 -- _deref_pbuc1_lt_vbuc2_then_la1
|
||||
lda RASTER
|
||||
cmp #$32+1
|
||||
bcc b1
|
||||
bcc b1_from_irq
|
||||
jmp b2
|
||||
//SEG28 irq::@2
|
||||
//SEG32 irq::@2
|
||||
b2:
|
||||
//SEG29 [17] (bool) framedone#3 ← false -- vboz1=vboc1
|
||||
//SEG33 [18] (bool) framedone#3 ← false -- vboz1=vboc1
|
||||
lda #0
|
||||
sta framedone
|
||||
//SEG34 [19] phi from irq irq::@2 to irq::@1 [phi:irq/irq::@2->irq::@1]
|
||||
b1_from_irq:
|
||||
b1_from_b2:
|
||||
//SEG35 [19] phi (bool) framedone#10 = (bool) framedone#11 [phi:irq/irq::@2->irq::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG30 irq::@1
|
||||
//SEG36 irq::@1
|
||||
b1:
|
||||
//SEG31 [18] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1
|
||||
//SEG37 [20] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1
|
||||
dec BGCOL
|
||||
jmp breturn
|
||||
//SEG32 irq::@return
|
||||
//SEG38 irq::@return
|
||||
breturn:
|
||||
//SEG33 [19] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG39 [21] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
Statement [1] (bool) framedone#11 ← false [ ] ( ) always clobbers reg byte a
|
||||
Statement [6] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) RASTER#0) ← (byte) $fd [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [10] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [12] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [13] (bool) framedone#0 ← true [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ ] ( [ ] ) always clobbers reg byte a
|
||||
Statement [16] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1 [ ] ( [ ] ) always clobbers reg byte a
|
||||
Statement [17] (bool) framedone#3 ← false [ ] ( [ ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BOOL:2 [ framedone#0 framedone#3 framedone#11 ] : zp ZP_BOOL:2 ,
|
||||
Statement [1] (bool) framedone#11 ← false [ framedone#11 ] ( ) always clobbers reg byte a
|
||||
Statement [6] *((const byte*) CIA1_INTERRUPT#0) ← (const byte) CIA_INTERRUPT_CLEAR#0 [ framedone#11 ] ( main:3 [ framedone#11 ] ) always clobbers reg byte a
|
||||
Statement [7] *((const byte*) VIC_CONTROL#0) ← *((const byte*) VIC_CONTROL#0) & (byte) $7f [ framedone#11 ] ( main:3 [ framedone#11 ] ) always clobbers reg byte a
|
||||
Statement [8] *((const byte*) RASTER#0) ← (byte) $fd [ framedone#11 ] ( main:3 [ framedone#11 ] ) always clobbers reg byte a
|
||||
Statement [9] *((const byte*) IRQ_ENABLE#0) ← (const byte) IRQ_RASTER#0 [ framedone#11 ] ( main:3 [ framedone#11 ] ) always clobbers reg byte a
|
||||
Statement [10] *((const void()**) KERNEL_IRQ#0) ← &interrupt(KERNEL_MIN)(void()) irq() [ framedone#11 ] ( main:3 [ framedone#11 ] ) always clobbers reg byte a
|
||||
Statement [13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 [ ] ( main:3 [ ] ) always clobbers reg byte a
|
||||
Statement [14] (bool) framedone#0 ← true [ framedone#0 ] ( main:3 [ framedone#0 ] ) always clobbers reg byte a
|
||||
Statement [16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 [ framedone#11 ] ( [ framedone#11 ] ) always clobbers reg byte a
|
||||
Statement [17] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1 [ framedone#11 ] ( [ framedone#11 ] ) always clobbers reg byte a
|
||||
Statement [18] (bool) framedone#3 ← false [ framedone#3 ] ( [ framedone#3 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ] : zp ZP_BOOL:2 ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 150: zp ZP_BOOL:2 [ framedone#0 framedone#3 framedone#11 ]
|
||||
Uplift Scope [] 196.5: zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Uplift Scope [main]
|
||||
Uplift Scope [irq]
|
||||
|
||||
Uplifting [] best 1367 combination zp ZP_BOOL:2 [ framedone#0 framedone#3 framedone#11 ]
|
||||
Uplifting [main] best 1367 combination
|
||||
Uplifting [irq] best 1367 combination
|
||||
Uplifting [] best 1994 combination zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
Uplifting [main] best 1994 combination
|
||||
Uplifting [irq] best 1994 combination
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG0 File Comments
|
||||
@ -517,48 +536,62 @@ main: {
|
||||
sta KERNEL_IRQ+1
|
||||
//SEG18 asm { cli }
|
||||
cli
|
||||
//SEG19 [12] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1]
|
||||
b1_from_main:
|
||||
b1_from_b3:
|
||||
//SEG20 [12] phi (bool) framedone#1 = (bool) framedone#11 [phi:main/main::@3->main::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG19 main::@1
|
||||
//SEG21 [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
b1_from_b2:
|
||||
jmp b1
|
||||
//SEG22 main::@1
|
||||
b1:
|
||||
//SEG20 [12] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 -- _deref_pbuc1_ge_vbuc2_then_la1
|
||||
jmp b2
|
||||
//SEG23 main::@2
|
||||
b2:
|
||||
//SEG24 [13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 -- _deref_pbuc1_ge_vbuc2_then_la1
|
||||
lda RASTER
|
||||
cmp #$14
|
||||
bcs b1
|
||||
jmp b2
|
||||
//SEG21 main::@2
|
||||
b2:
|
||||
//SEG22 [13] (bool) framedone#0 ← true -- vboz1=vboc1
|
||||
bcs b1_from_b2
|
||||
jmp b3
|
||||
//SEG25 main::@3
|
||||
b3:
|
||||
//SEG26 [14] (bool) framedone#0 ← true -- vboz1=vboc1
|
||||
lda #1
|
||||
sta framedone
|
||||
jmp b1
|
||||
jmp b1_from_b3
|
||||
}
|
||||
//SEG23 irq
|
||||
//SEG27 irq
|
||||
irq: {
|
||||
//SEG24 entry interrupt(KERNEL_MIN)
|
||||
//SEG25 [14] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
|
||||
//SEG28 entry interrupt(KERNEL_MIN)
|
||||
//SEG29 [15] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
|
||||
inc BGCOL
|
||||
//SEG26 [15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG30 [16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
lda #IRQ_RASTER
|
||||
sta IRQ_STATUS
|
||||
//SEG27 [16] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1 -- _deref_pbuc1_lt_vbuc2_then_la1
|
||||
//SEG31 [17] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1 -- _deref_pbuc1_lt_vbuc2_then_la1
|
||||
lda RASTER
|
||||
cmp #$32+1
|
||||
bcc b1
|
||||
bcc b1_from_irq
|
||||
jmp b2
|
||||
//SEG28 irq::@2
|
||||
//SEG32 irq::@2
|
||||
b2:
|
||||
//SEG29 [17] (bool) framedone#3 ← false -- vboz1=vboc1
|
||||
//SEG33 [18] (bool) framedone#3 ← false -- vboz1=vboc1
|
||||
lda #0
|
||||
sta framedone
|
||||
//SEG34 [19] phi from irq irq::@2 to irq::@1 [phi:irq/irq::@2->irq::@1]
|
||||
b1_from_irq:
|
||||
b1_from_b2:
|
||||
//SEG35 [19] phi (bool) framedone#10 = (bool) framedone#11 [phi:irq/irq::@2->irq::@1#0] -- register_copy
|
||||
jmp b1
|
||||
//SEG30 irq::@1
|
||||
//SEG36 irq::@1
|
||||
b1:
|
||||
//SEG31 [18] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1
|
||||
//SEG37 [20] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1
|
||||
dec BGCOL
|
||||
jmp breturn
|
||||
//SEG32 irq::@return
|
||||
//SEG38 irq::@return
|
||||
breturn:
|
||||
//SEG33 [19] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG39 [21] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
}
|
||||
|
||||
@ -568,22 +601,39 @@ Removing instruction jmp b2
|
||||
Removing instruction jmp bend
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp b2
|
||||
Removing instruction jmp b3
|
||||
Removing instruction jmp b2
|
||||
Removing instruction jmp b1
|
||||
Removing instruction jmp breturn
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Replacing label b1 with b2
|
||||
Replacing label b1_from_b2 with b2
|
||||
Replacing label b1_from_irq with b1
|
||||
Removing instruction b1:
|
||||
Removing instruction b2_from_b1:
|
||||
Removing instruction bend_from_b2:
|
||||
Removing instruction b1_from_main:
|
||||
Removing instruction b1_from_b2:
|
||||
Removing instruction b1:
|
||||
Removing instruction b1_from_irq:
|
||||
Removing instruction b1_from_b2:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction b2:
|
||||
Removing instruction bend:
|
||||
Removing instruction b2:
|
||||
Removing instruction b3:
|
||||
Removing instruction b2:
|
||||
Removing instruction breturn:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
Skipping double jump to b2 in jmp b1_from_b3
|
||||
Succesful ASM optimization Pass5DoubleJumpElimination
|
||||
Relabelling long label b1_from_b3 to b1
|
||||
Succesful ASM optimization Pass5RelabelLongLabels
|
||||
Adding RTS to root block
|
||||
Succesful ASM optimization Pass5AddMainRts
|
||||
Removing instruction jmp b2
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Removing instruction b1:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @1
|
||||
@ -609,9 +659,11 @@ FINAL SYMBOL TABLE
|
||||
(byte*) VIC_CONTROL
|
||||
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
|
||||
(bool) framedone
|
||||
(bool) framedone#0 framedone zp ZP_BOOL:2 110.0
|
||||
(bool) framedone#11 framedone zp ZP_BOOL:2 20.0
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:2 20.0
|
||||
(bool) framedone#0 framedone zp ZP_BOOL:2 22.0
|
||||
(bool) framedone#1 framedone zp ZP_BOOL:2 130.0
|
||||
(bool) framedone#10 framedone zp ZP_BOOL:2 40.0
|
||||
(bool) framedone#11 framedone zp ZP_BOOL:2 0.5
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:2 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) irq::@1
|
||||
(label) irq::@2
|
||||
@ -619,8 +671,9 @@ interrupt(KERNEL_MIN)(void()) irq()
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
|
||||
zp ZP_BOOL:2 [ framedone#0 framedone#3 framedone#11 ]
|
||||
zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
@ -685,40 +738,46 @@ main: {
|
||||
sta KERNEL_IRQ+1
|
||||
//SEG18 asm { cli }
|
||||
cli
|
||||
//SEG19 main::@1
|
||||
b1:
|
||||
//SEG20 [12] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 -- _deref_pbuc1_ge_vbuc2_then_la1
|
||||
//SEG19 [12] phi from main main::@3 to main::@1 [phi:main/main::@3->main::@1]
|
||||
//SEG20 [12] phi (bool) framedone#1 = (bool) framedone#11 [phi:main/main::@3->main::@1#0] -- register_copy
|
||||
//SEG21 [12] phi from main::@2 to main::@1 [phi:main::@2->main::@1]
|
||||
//SEG22 main::@1
|
||||
//SEG23 main::@2
|
||||
b2:
|
||||
//SEG24 [13] if(*((const byte*) RASTER#0)>=(byte) $14) goto main::@1 -- _deref_pbuc1_ge_vbuc2_then_la1
|
||||
lda RASTER
|
||||
cmp #$14
|
||||
bcs b1
|
||||
//SEG21 main::@2
|
||||
//SEG22 [13] (bool) framedone#0 ← true -- vboz1=vboc1
|
||||
bcs b2
|
||||
//SEG25 main::@3
|
||||
//SEG26 [14] (bool) framedone#0 ← true -- vboz1=vboc1
|
||||
lda #1
|
||||
sta framedone
|
||||
jmp b1
|
||||
jmp b2
|
||||
}
|
||||
//SEG23 irq
|
||||
//SEG27 irq
|
||||
irq: {
|
||||
//SEG24 entry interrupt(KERNEL_MIN)
|
||||
//SEG25 [14] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
|
||||
//SEG28 entry interrupt(KERNEL_MIN)
|
||||
//SEG29 [15] *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) -- _deref_pbuc1=_inc__deref_pbuc1
|
||||
inc BGCOL
|
||||
//SEG26 [15] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
//SEG30 [16] *((const byte*) IRQ_STATUS#0) ← (const byte) IRQ_RASTER#0 -- _deref_pbuc1=vbuc2
|
||||
lda #IRQ_RASTER
|
||||
sta IRQ_STATUS
|
||||
//SEG27 [16] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1 -- _deref_pbuc1_lt_vbuc2_then_la1
|
||||
//SEG31 [17] if(*((const byte*) RASTER#0)<(byte) $32+(byte) 1) goto irq::@1 -- _deref_pbuc1_lt_vbuc2_then_la1
|
||||
lda RASTER
|
||||
cmp #$32+1
|
||||
bcc b1
|
||||
//SEG28 irq::@2
|
||||
//SEG29 [17] (bool) framedone#3 ← false -- vboz1=vboc1
|
||||
//SEG32 irq::@2
|
||||
//SEG33 [18] (bool) framedone#3 ← false -- vboz1=vboc1
|
||||
lda #0
|
||||
sta framedone
|
||||
//SEG30 irq::@1
|
||||
//SEG34 [19] phi from irq irq::@2 to irq::@1 [phi:irq/irq::@2->irq::@1]
|
||||
//SEG35 [19] phi (bool) framedone#10 = (bool) framedone#11 [phi:irq/irq::@2->irq::@1#0] -- register_copy
|
||||
//SEG36 irq::@1
|
||||
b1:
|
||||
//SEG31 [18] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1
|
||||
//SEG37 [20] *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) -- _deref_pbuc1=_dec__deref_pbuc1
|
||||
dec BGCOL
|
||||
//SEG32 irq::@return
|
||||
//SEG33 [19] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG38 irq::@return
|
||||
//SEG39 [21] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,11 @@
|
||||
(byte*) VIC_CONTROL
|
||||
(const byte*) VIC_CONTROL#0 VIC_CONTROL = (byte*) 53265
|
||||
(bool) framedone
|
||||
(bool) framedone#0 framedone zp ZP_BOOL:2 110.0
|
||||
(bool) framedone#11 framedone zp ZP_BOOL:2 20.0
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:2 20.0
|
||||
(bool) framedone#0 framedone zp ZP_BOOL:2 22.0
|
||||
(bool) framedone#1 framedone zp ZP_BOOL:2 130.0
|
||||
(bool) framedone#10 framedone zp ZP_BOOL:2 40.0
|
||||
(bool) framedone#11 framedone zp ZP_BOOL:2 0.5
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:2 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) irq::@1
|
||||
(label) irq::@2
|
||||
@ -31,5 +33,6 @@ interrupt(KERNEL_MIN)(void()) irq()
|
||||
(void()) main()
|
||||
(label) main::@1
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
|
||||
zp ZP_BOOL:2 [ framedone#0 framedone#3 framedone#11 ]
|
||||
zp ZP_BOOL:2 [ framedone#10 framedone#1 framedone#11 framedone#0 framedone#3 ]
|
||||
|
@ -28,5 +28,6 @@ irq::@1: scope:[irq] from irq
|
||||
[11] (byte) col#3 ← ++ (byte) col#0
|
||||
to:irq::@return
|
||||
irq::@return: scope:[irq] from irq irq::@1
|
||||
[12] return
|
||||
[12] (byte) col#10 ← phi( irq/(byte) col#0 irq::@1/(byte) col#3 )
|
||||
[13] return
|
||||
to:@return
|
||||
|
@ -153,8 +153,6 @@ Successful SSA optimization Pass2ConstantIdentification
|
||||
if() condition always true - replacing block destination [7] if(true) goto main::@2
|
||||
Successful SSA optimization Pass2ConstantIfs
|
||||
Rewriting conditional comparison [11] if((byte) col#12<=(byte) $a) goto main::@1
|
||||
Eliminating unused variable - keeping the phi block (byte) col#10
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused block main::@return
|
||||
Successful SSA optimization Pass2EliminateUnusedBlocks
|
||||
Adding number conversion cast (unumber) $a+1 in if((byte) col#12<(byte) $a+(number) 1) goto main::@1
|
||||
@ -167,17 +165,21 @@ Finalized unsigned number type (byte) 1
|
||||
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
||||
Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq()
|
||||
Successful SSA optimization Pass2ConstantInlining
|
||||
Added new block during phi lifting irq::@3(between irq and irq::@return)
|
||||
Adding NOP phi() at start of @2
|
||||
Adding NOP phi() at start of @3
|
||||
Adding NOP phi() at start of @end
|
||||
CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Created 2 initial phi equivalence classes
|
||||
Coalesced [6] col#15 ← col#0
|
||||
Coalesced [10] col#16 ← col#1
|
||||
Coalesced [15] col#18 ← col#3
|
||||
Coalesced [18] col#17 ← col#0
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Culled Empty Block (label) @3
|
||||
Culled Empty Block (label) irq::@3
|
||||
Renumbering block @2 to @1
|
||||
Renumbering block main::@7 to main::@3
|
||||
Renumbering block irq::@2 to irq::@1
|
||||
@ -215,7 +217,8 @@ irq::@1: scope:[irq] from irq
|
||||
[11] (byte) col#3 ← ++ (byte) col#0
|
||||
to:irq::@return
|
||||
irq::@return: scope:[irq] from irq irq::@1
|
||||
[12] return
|
||||
[12] (byte) col#10 ← phi( irq/(byte) col#0 irq::@1/(byte) col#3 )
|
||||
[13] return
|
||||
to:@return
|
||||
|
||||
|
||||
@ -223,19 +226,19 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte*) BGCOL
|
||||
(void()**) KERNEL_IRQ
|
||||
(byte) col
|
||||
(byte) col#0 1.6666666666666665
|
||||
(byte) col#0 1.9999999999999998
|
||||
(byte) col#1 22.0
|
||||
(byte) col#10 40.0
|
||||
(byte) col#12 114.0
|
||||
(byte) col#3 20.0
|
||||
(byte) col#3 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(void()) main()
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ col#12 col#0 col#1 ]
|
||||
Coalescing volatile variable equivalence classes [ col#12 col#0 col#1 ] and [ col#3 ]
|
||||
[ col#10 col#12 col#0 col#1 col#3 ]
|
||||
Complete equivalence classes
|
||||
[ col#12 col#0 col#1 col#3 ]
|
||||
Allocated zp ZP_BYTE:2 [ col#12 col#0 col#1 col#3 ]
|
||||
[ col#10 col#12 col#0 col#1 col#3 ]
|
||||
Allocated zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ]
|
||||
|
||||
INITIAL ASM
|
||||
//SEG0 File Comments
|
||||
@ -308,16 +311,20 @@ irq: {
|
||||
//SEG24 [10] if((byte) col#0==(byte) 0) goto irq::@return -- vbuz1_eq_0_then_la1
|
||||
lda col
|
||||
cmp #0
|
||||
beq breturn
|
||||
beq breturn_from_irq
|
||||
jmp b1
|
||||
//SEG25 irq::@1
|
||||
b1:
|
||||
//SEG26 [11] (byte) col#3 ← ++ (byte) col#0 -- vbuz1=_inc_vbuz1
|
||||
inc col
|
||||
//SEG27 [12] phi from irq irq::@1 to irq::@return [phi:irq/irq::@1->irq::@return]
|
||||
breturn_from_irq:
|
||||
breturn_from_b1:
|
||||
//SEG28 [12] phi (byte) col#10 = (byte) col#0 [phi:irq/irq::@1->irq::@return#0] -- register_copy
|
||||
jmp breturn
|
||||
//SEG27 irq::@return
|
||||
//SEG29 irq::@return
|
||||
breturn:
|
||||
//SEG28 [12] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG30 [13] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
}
|
||||
|
||||
@ -329,18 +336,18 @@ Statement [7] (byte) col#1 ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] ) always cl
|
||||
Statement asm { lda$dc0d } always clobbers reg byte a
|
||||
Statement [9] *((const byte*) BGCOL#0) ← (byte) col#0 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a
|
||||
Statement [10] if((byte) col#0==(byte) 0) goto irq::@return [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ col#12 col#0 col#1 col#3 ] : zp ZP_BYTE:2 ,
|
||||
Potential registers zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ] : zp ZP_BYTE:2 ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 157.67: zp ZP_BYTE:2 [ col#12 col#0 col#1 col#3 ]
|
||||
Uplift Scope [] 182: zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ]
|
||||
Uplift Scope [main]
|
||||
Uplift Scope [irq]
|
||||
|
||||
Uplifting [] best 1821 combination zp ZP_BYTE:2 [ col#12 col#0 col#1 col#3 ]
|
||||
Uplifting [] best 1821 combination zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ]
|
||||
Uplifting [main] best 1821 combination
|
||||
Uplifting [irq] best 1821 combination
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ col#12 col#0 col#1 col#3 ]
|
||||
Uplifting [] best 1821 combination zp ZP_BYTE:2 [ col#12 col#0 col#1 col#3 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ]
|
||||
Uplifting [] best 1821 combination zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ]
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG0 File Comments
|
||||
@ -413,16 +420,20 @@ irq: {
|
||||
//SEG24 [10] if((byte) col#0==(byte) 0) goto irq::@return -- vbuz1_eq_0_then_la1
|
||||
lda col
|
||||
cmp #0
|
||||
beq breturn
|
||||
beq breturn_from_irq
|
||||
jmp b1
|
||||
//SEG25 irq::@1
|
||||
b1:
|
||||
//SEG26 [11] (byte) col#3 ← ++ (byte) col#0 -- vbuz1=_inc_vbuz1
|
||||
inc col
|
||||
//SEG27 [12] phi from irq irq::@1 to irq::@return [phi:irq/irq::@1->irq::@return]
|
||||
breturn_from_irq:
|
||||
breturn_from_b1:
|
||||
//SEG28 [12] phi (byte) col#10 = (byte) col#0 [phi:irq/irq::@1->irq::@return#0] -- register_copy
|
||||
jmp breturn
|
||||
//SEG27 irq::@return
|
||||
//SEG29 irq::@return
|
||||
breturn:
|
||||
//SEG28 [12] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG30 [13] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
}
|
||||
|
||||
@ -437,11 +448,14 @@ Removing instruction jmp breturn
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Replacing label b1 with b2
|
||||
Replacing label b1_from_b2 with b2
|
||||
Replacing label breturn_from_irq with breturn
|
||||
Removing instruction b1_from_bbegin:
|
||||
Removing instruction bend_from_b1:
|
||||
Removing instruction b1_from_main:
|
||||
Removing instruction b1_from_b2:
|
||||
Removing instruction b1:
|
||||
Removing instruction breturn_from_irq:
|
||||
Removing instruction breturn_from_b1:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction b1:
|
||||
Removing instruction bend:
|
||||
@ -472,10 +486,11 @@ FINAL SYMBOL TABLE
|
||||
(void()**) KERNEL_IRQ
|
||||
(const void()**) KERNEL_IRQ#0 KERNEL_IRQ = (void()**) 788
|
||||
(byte) col
|
||||
(byte) col#0 col zp ZP_BYTE:2 1.6666666666666665
|
||||
(byte) col#0 col zp ZP_BYTE:2 1.9999999999999998
|
||||
(byte) col#1 col zp ZP_BYTE:2 22.0
|
||||
(byte) col#10 col zp ZP_BYTE:2 40.0
|
||||
(byte) col#12 col zp ZP_BYTE:2 114.0
|
||||
(byte) col#3 col zp ZP_BYTE:2 20.0
|
||||
(byte) col#3 col zp ZP_BYTE:2 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) irq::@1
|
||||
(label) irq::@return
|
||||
@ -484,7 +499,7 @@ interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
|
||||
zp ZP_BYTE:2 [ col#12 col#0 col#1 col#3 ]
|
||||
zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
@ -552,8 +567,10 @@ irq: {
|
||||
//SEG25 irq::@1
|
||||
//SEG26 [11] (byte) col#3 ← ++ (byte) col#0 -- vbuz1=_inc_vbuz1
|
||||
inc col
|
||||
//SEG27 irq::@return
|
||||
//SEG28 [12] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG27 [12] phi from irq irq::@1 to irq::@return [phi:irq/irq::@1->irq::@return]
|
||||
//SEG28 [12] phi (byte) col#10 = (byte) col#0 [phi:irq/irq::@1->irq::@return#0] -- register_copy
|
||||
//SEG29 irq::@return
|
||||
//SEG30 [13] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
}
|
||||
|
||||
|
@ -6,10 +6,11 @@
|
||||
(void()**) KERNEL_IRQ
|
||||
(const void()**) KERNEL_IRQ#0 KERNEL_IRQ = (void()**) 788
|
||||
(byte) col
|
||||
(byte) col#0 col zp ZP_BYTE:2 1.6666666666666665
|
||||
(byte) col#0 col zp ZP_BYTE:2 1.9999999999999998
|
||||
(byte) col#1 col zp ZP_BYTE:2 22.0
|
||||
(byte) col#10 col zp ZP_BYTE:2 40.0
|
||||
(byte) col#12 col zp ZP_BYTE:2 114.0
|
||||
(byte) col#3 col zp ZP_BYTE:2 20.0
|
||||
(byte) col#3 col zp ZP_BYTE:2 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) irq::@1
|
||||
(label) irq::@return
|
||||
@ -18,4 +19,4 @@ interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
|
||||
zp ZP_BYTE:2 [ col#12 col#0 col#1 col#3 ]
|
||||
zp ZP_BYTE:2 [ col#10 col#12 col#0 col#1 col#3 ]
|
||||
|
@ -36,8 +36,8 @@
|
||||
.label PLEX_SCREEN_PTR = $400+$3f8
|
||||
.label plex_show_idx = 7
|
||||
.label plex_sprite_idx = 6
|
||||
.label plex_sprite_msb = 8
|
||||
.label plex_free_next = 9
|
||||
.label plex_sprite_msb = 9
|
||||
.label plex_free_next = 8
|
||||
.label framedone = $a
|
||||
bbegin:
|
||||
// The index in the PLEX tables of the next sprite to show
|
||||
@ -263,7 +263,7 @@ plex_irq: {
|
||||
plexShowSprite: {
|
||||
.label _6 = 6
|
||||
.label plex_sprite_idx2 = $e
|
||||
.label plexFreeAdd1__2 = 9
|
||||
.label plexFreeAdd1__2 = 8
|
||||
lda plex_sprite_idx
|
||||
asl
|
||||
sta plex_sprite_idx2
|
||||
|
@ -47,6 +47,10 @@ loop: scope:[loop] from main::@1
|
||||
to:loop::@1
|
||||
loop::@1: scope:[loop] from loop loop::@6
|
||||
[17] (byte) loop::sin_idx#6 ← phi( loop/(byte) 0 loop::@6/(byte) loop::sin_idx#1 )
|
||||
[17] (byte) plex_free_next#10 ← phi( loop/(byte) plex_free_next#31 loop::@6/(byte) plex_free_next#0 )
|
||||
[17] (byte) plex_sprite_msb#11 ← phi( loop/(byte) plex_sprite_msb#0 loop::@6/(byte) plex_sprite_msb#1 )
|
||||
[17] (byte) plex_sprite_idx#10 ← phi( loop/(byte) plex_sprite_idx#0 loop::@6/(byte) plex_sprite_idx#1 )
|
||||
[17] (byte) plex_show_idx#10 ← phi( loop/(byte) plex_show_idx#0 loop::@6/(byte) plex_show_idx#1 )
|
||||
[17] (bool) framedone#12 ← phi( loop/(bool) framedone#17 loop::@6/(bool) framedone#5 )
|
||||
to:loop::@2
|
||||
loop::@2: scope:[loop] from loop::@1 loop::@2
|
||||
@ -201,52 +205,53 @@ plex_irq::@5: scope:[plex_irq] from plex_irq::@4
|
||||
[95] (bool) framedone#3 ← true
|
||||
to:plex_irq::@2
|
||||
plex_irq::@2: scope:[plex_irq] from plex_irq::@1 plex_irq::@5
|
||||
[96] *((const byte*) BORDERCOL#0) ← (byte) 0
|
||||
[96] (bool) framedone#10 ← phi( plex_irq::@1/(bool) framedone#17 plex_irq::@5/(bool) framedone#3 )
|
||||
[97] *((const byte*) BORDERCOL#0) ← (byte) 0
|
||||
to:plex_irq::@return
|
||||
plex_irq::@return: scope:[plex_irq] from plex_irq::@2
|
||||
[97] return
|
||||
[98] return
|
||||
to:@return
|
||||
plex_irq::@1: scope:[plex_irq] from plex_irq::@4
|
||||
[98] *((const byte*) RASTER#0) ← (byte) plex_irq::plexFreeNextYpos1_return#0
|
||||
[99] *((const byte*) RASTER#0) ← (byte) plex_irq::plexFreeNextYpos1_return#0
|
||||
to:plex_irq::@2
|
||||
plexShowSprite: scope:[plexShowSprite] from plex_irq::@3
|
||||
[99] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#25 << (byte) 1
|
||||
[100] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27))
|
||||
[101] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0
|
||||
[100] (byte) plexShowSprite::plex_sprite_idx2#0 ← (byte) plex_sprite_idx#25 << (byte) 1
|
||||
[101] (byte) plexShowSprite::plexFreeAdd1_ypos#0 ← *((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27))
|
||||
[102] *((const byte*) SPRITES_YPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte) plexShowSprite::plexFreeAdd1_ypos#0
|
||||
to:plexShowSprite::plexFreeAdd1
|
||||
plexShowSprite::plexFreeAdd1: scope:[plexShowSprite] from plexShowSprite
|
||||
[102] (byte~) plexShowSprite::plexFreeAdd1_$0#0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15
|
||||
[103] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#27) ← (byte~) plexShowSprite::plexFreeAdd1_$0#0
|
||||
[104] (byte~) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#27 + (byte) 1
|
||||
[105] (byte~) plexShowSprite::plexFreeAdd1_$2#0 ← (byte~) plexShowSprite::plexFreeAdd1_$1#0 & (byte) 7
|
||||
[103] (byte~) plexShowSprite::plexFreeAdd1_$0#0 ← (byte) plexShowSprite::plexFreeAdd1_ypos#0 + (byte) $15
|
||||
[104] *((const byte[8]) PLEX_FREE_YPOS#0 + (byte) plex_free_next#27) ← (byte~) plexShowSprite::plexFreeAdd1_$0#0
|
||||
[105] (byte~) plexShowSprite::plexFreeAdd1_$1#0 ← (byte) plex_free_next#27 + (byte) 1
|
||||
[106] (byte~) plexShowSprite::plexFreeAdd1_$2#0 ← (byte~) plexShowSprite::plexFreeAdd1_$1#0 & (byte) 7
|
||||
to:plexShowSprite::@5
|
||||
plexShowSprite::@5: scope:[plexShowSprite] from plexShowSprite::plexFreeAdd1
|
||||
[106] *((const byte*) PLEX_SCREEN_PTR#0 + (byte) plex_sprite_idx#25) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27))
|
||||
[107] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27)
|
||||
[108] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1
|
||||
[109] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11)
|
||||
[110] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2
|
||||
[111] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11)
|
||||
[112] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1
|
||||
[107] *((const byte*) PLEX_SCREEN_PTR#0 + (byte) plex_sprite_idx#25) ← *((const byte[PLEX_COUNT#0]) PLEX_PTR#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27))
|
||||
[108] (byte) plexShowSprite::xpos_idx#0 ← *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plex_show_idx#27)
|
||||
[109] (byte~) plexShowSprite::$11 ← (byte) plexShowSprite::xpos_idx#0 << (byte) 1
|
||||
[110] (byte~) plexShowSprite::$2 ← < *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11)
|
||||
[111] *((const byte*) SPRITES_XPOS#0 + (byte) plexShowSprite::plex_sprite_idx2#0) ← (byte~) plexShowSprite::$2
|
||||
[112] (byte~) plexShowSprite::$3 ← > *((const word[PLEX_COUNT#0]) PLEX_XPOS#0 + (byte~) plexShowSprite::$11)
|
||||
[113] if((byte~) plexShowSprite::$3!=(byte) 0) goto plexShowSprite::@1
|
||||
to:plexShowSprite::@3
|
||||
plexShowSprite::@3: scope:[plexShowSprite] from plexShowSprite::@5
|
||||
[113] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#28
|
||||
[114] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) plexShowSprite::$9
|
||||
[114] (byte~) plexShowSprite::$9 ← (byte) $ff ^ (byte) plex_sprite_msb#28
|
||||
[115] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) & (byte~) plexShowSprite::$9
|
||||
to:plexShowSprite::@2
|
||||
plexShowSprite::@2: scope:[plexShowSprite] from plexShowSprite::@1 plexShowSprite::@3
|
||||
[115] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#25 + (byte) 1
|
||||
[116] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7
|
||||
[117] (byte) plex_show_idx#16 ← ++ (byte) plex_show_idx#27
|
||||
[118] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#28 << (byte) 1
|
||||
[119] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@return
|
||||
[116] (byte~) plexShowSprite::$5 ← (byte) plex_sprite_idx#25 + (byte) 1
|
||||
[117] (byte~) plexShowSprite::$6 ← (byte~) plexShowSprite::$5 & (byte) 7
|
||||
[118] (byte) plex_show_idx#16 ← ++ (byte) plex_show_idx#27
|
||||
[119] (byte) plex_sprite_msb#3 ← (byte) plex_sprite_msb#28 << (byte) 1
|
||||
[120] if((byte) plex_sprite_msb#3!=(byte) 0) goto plexShowSprite::@return
|
||||
to:plexShowSprite::@4
|
||||
plexShowSprite::@4: scope:[plexShowSprite] from plexShowSprite::@2
|
||||
[120] (byte) plex_sprite_msb#4 ← (byte) 1
|
||||
[121] (byte) plex_sprite_msb#4 ← (byte) 1
|
||||
to:plexShowSprite::@return
|
||||
plexShowSprite::@return: scope:[plexShowSprite] from plexShowSprite::@2 plexShowSprite::@4
|
||||
[121] (byte) plex_sprite_msb#17 ← phi( plexShowSprite::@2/(byte) plex_sprite_msb#3 plexShowSprite::@4/(byte) plex_sprite_msb#4 )
|
||||
[122] return
|
||||
[122] (byte) plex_sprite_msb#17 ← phi( plexShowSprite::@2/(byte) plex_sprite_msb#3 plexShowSprite::@4/(byte) plex_sprite_msb#4 )
|
||||
[123] return
|
||||
to:@return
|
||||
plexShowSprite::@1: scope:[plexShowSprite] from plexShowSprite::@5
|
||||
[123] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#28
|
||||
[124] *((const byte*) SPRITES_XMSB#0) ← *((const byte*) SPRITES_XMSB#0) | (byte) plex_sprite_msb#28
|
||||
to:plexShowSprite::@2
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -65,9 +65,10 @@
|
||||
(byte*) YSIN
|
||||
(const byte*) YSIN#0 YSIN = (byte*) 8448
|
||||
(bool) framedone
|
||||
(bool) framedone#10 framedone zp ZP_BOOL:10 40.0
|
||||
(bool) framedone#12 framedone zp ZP_BOOL:10 57.0
|
||||
(bool) framedone#17 framedone zp ZP_BOOL:10 0.6666666666666666
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:10 20.0
|
||||
(bool) framedone#17 framedone zp ZP_BOOL:10 0.375
|
||||
(bool) framedone#3 framedone zp ZP_BOOL:10 4.0
|
||||
(bool) framedone#5 framedone zp ZP_BOOL:10 7.333333333333333
|
||||
(void()) init()
|
||||
(byte~) init::$9 reg byte a 22.0
|
||||
@ -134,7 +135,7 @@
|
||||
(number~) plexShowSprite::plexFreeAdd1_$1
|
||||
(byte~) plexShowSprite::plexFreeAdd1_$1#0 reg byte x 4.0
|
||||
(number~) plexShowSprite::plexFreeAdd1_$2
|
||||
(byte~) plexShowSprite::plexFreeAdd1_$2#0 plexFreeAdd1_$2 zp ZP_BYTE:9 1.0
|
||||
(byte~) plexShowSprite::plexFreeAdd1_$2#0 plexFreeAdd1_$2 zp ZP_BYTE:8 1.0
|
||||
(byte) plexShowSprite::plexFreeAdd1_ypos
|
||||
(byte) plexShowSprite::plexFreeAdd1_ypos#0 reg byte a 3.0
|
||||
(byte) plexShowSprite::plex_sprite_idx2
|
||||
@ -171,9 +172,10 @@
|
||||
(byte) plexSort::s#3 reg byte x 2052.5
|
||||
(byte~) plexSort::s#6 reg byte x 202.0
|
||||
(byte) plex_free_next
|
||||
(byte) plex_free_next#0 plex_free_next zp ZP_BYTE:9 20.0
|
||||
(byte) plex_free_next#27 plex_free_next zp ZP_BYTE:9 2.8333333333333335
|
||||
(byte) plex_free_next#31 plex_free_next zp ZP_BYTE:9 4.0
|
||||
(byte) plex_free_next#0 plex_free_next zp ZP_BYTE:8 1.8571428571428572
|
||||
(byte) plex_free_next#10 plex_free_next zp ZP_BYTE:8 130.0
|
||||
(byte) plex_free_next#27 plex_free_next zp ZP_BYTE:8 2.8333333333333335
|
||||
(byte) plex_free_next#31 plex_free_next zp ZP_BYTE:8 0.6000000000000001
|
||||
interrupt(KERNEL_MIN)(void()) plex_irq()
|
||||
(byte~) plex_irq::$4 $4 zp ZP_BYTE:13 11.0
|
||||
(label) plex_irq::@1
|
||||
@ -189,21 +191,24 @@ interrupt(KERNEL_MIN)(void()) plex_irq()
|
||||
(byte) plex_irq::plexFreeNextYpos1_return#0 reg byte x 4.0
|
||||
(byte) plex_irq::rasterY
|
||||
(byte) plex_show_idx
|
||||
(byte) plex_show_idx#0 plex_show_idx zp ZP_BYTE:7 4.0
|
||||
(byte) plex_show_idx#1 plex_show_idx zp ZP_BYTE:7 20.0
|
||||
(byte) plex_show_idx#0 plex_show_idx zp ZP_BYTE:7 0.46153846153846156
|
||||
(byte) plex_show_idx#1 plex_show_idx zp ZP_BYTE:7 0.8666666666666666
|
||||
(byte) plex_show_idx#10 plex_show_idx zp ZP_BYTE:7 130.0
|
||||
(byte) plex_show_idx#16 plex_show_idx zp ZP_BYTE:7 2.1666666666666665
|
||||
(byte) plex_show_idx#27 plex_show_idx zp ZP_BYTE:7 1.05
|
||||
(byte) plex_sprite_idx
|
||||
(byte) plex_sprite_idx#0 plex_sprite_idx zp ZP_BYTE:6 4.0
|
||||
(byte) plex_sprite_idx#1 plex_sprite_idx zp ZP_BYTE:6 20.0
|
||||
(byte) plex_sprite_idx#0 plex_sprite_idx zp ZP_BYTE:6 0.5
|
||||
(byte) plex_sprite_idx#1 plex_sprite_idx zp ZP_BYTE:6 0.9285714285714286
|
||||
(byte) plex_sprite_idx#10 plex_sprite_idx zp ZP_BYTE:6 130.0
|
||||
(byte) plex_sprite_idx#25 plex_sprite_idx zp ZP_BYTE:6 1.0555555555555558
|
||||
(byte) plex_sprite_msb
|
||||
(byte) plex_sprite_msb#0 plex_sprite_msb zp ZP_BYTE:8 4.0
|
||||
(byte) plex_sprite_msb#1 plex_sprite_msb zp ZP_BYTE:8 20.0
|
||||
(byte) plex_sprite_msb#17 plex_sprite_msb zp ZP_BYTE:8 2.142857142857143
|
||||
(byte) plex_sprite_msb#28 plex_sprite_msb zp ZP_BYTE:8 0.9047619047619048
|
||||
(byte) plex_sprite_msb#3 plex_sprite_msb zp ZP_BYTE:8 3.0
|
||||
(byte) plex_sprite_msb#4 plex_sprite_msb zp ZP_BYTE:8 4.0
|
||||
(byte) plex_sprite_msb#0 plex_sprite_msb zp ZP_BYTE:9 0.5454545454545454
|
||||
(byte) plex_sprite_msb#1 plex_sprite_msb zp ZP_BYTE:9 1.0
|
||||
(byte) plex_sprite_msb#11 plex_sprite_msb zp ZP_BYTE:9 130.0
|
||||
(byte) plex_sprite_msb#17 plex_sprite_msb zp ZP_BYTE:9 2.142857142857143
|
||||
(byte) plex_sprite_msb#28 plex_sprite_msb zp ZP_BYTE:9 0.9047619047619048
|
||||
(byte) plex_sprite_msb#3 plex_sprite_msb zp ZP_BYTE:9 3.0
|
||||
(byte) plex_sprite_msb#4 plex_sprite_msb zp ZP_BYTE:9 4.0
|
||||
|
||||
zp ZP_BYTE:2 [ loop::sin_idx#6 loop::sin_idx#1 ]
|
||||
reg byte x [ loop::y_idx#2 loop::y_idx#1 loop::y_idx#4 ]
|
||||
@ -215,11 +220,11 @@ reg byte x [ init::sx#2 init::sx#1 ]
|
||||
zp ZP_WORD:4 [ init::xp#2 init::xp#1 ]
|
||||
reg byte x [ init::ss#2 init::ss#1 ]
|
||||
reg byte x [ plexInit::i#2 plexInit::i#1 ]
|
||||
zp ZP_BYTE:6 [ plex_sprite_idx#25 plex_sprite_idx#0 plexShowSprite::$6 plex_sprite_idx#1 ]
|
||||
zp ZP_BYTE:7 [ plex_show_idx#27 plex_show_idx#0 plex_show_idx#16 plex_show_idx#1 ]
|
||||
zp ZP_BYTE:8 [ plex_sprite_msb#28 plex_sprite_msb#0 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 plex_sprite_msb#1 ]
|
||||
zp ZP_BYTE:9 [ plex_free_next#0 plex_free_next#27 plex_free_next#31 plexShowSprite::plexFreeAdd1_$2#0 ]
|
||||
zp ZP_BOOL:10 [ framedone#3 framedone#12 framedone#17 framedone#5 ]
|
||||
zp ZP_BYTE:6 [ plex_sprite_idx#25 plex_sprite_idx#10 plex_sprite_idx#0 plex_sprite_idx#1 plexShowSprite::$6 ]
|
||||
zp ZP_BYTE:7 [ plex_show_idx#27 plex_show_idx#10 plex_show_idx#0 plex_show_idx#1 plex_show_idx#16 ]
|
||||
zp ZP_BYTE:8 [ plex_free_next#27 plex_free_next#10 plex_free_next#31 plex_free_next#0 plexShowSprite::plexFreeAdd1_$2#0 ]
|
||||
zp ZP_BYTE:9 [ plex_sprite_msb#28 plex_sprite_msb#11 plex_sprite_msb#0 plex_sprite_msb#1 plex_sprite_msb#17 plex_sprite_msb#3 plex_sprite_msb#4 ]
|
||||
zp ZP_BOOL:10 [ framedone#10 framedone#12 framedone#17 framedone#5 framedone#3 ]
|
||||
zp ZP_BYTE:11 [ plexSort::nxt_idx#0 ]
|
||||
zp ZP_BYTE:12 [ plexSort::nxt_y#0 ]
|
||||
reg byte x [ plexSort::s#2 ]
|
||||
|
@ -28,8 +28,9 @@ irq::@2: scope:[irq] from irq
|
||||
[11] (byte) col#4 ← (byte) col#0 + (byte) 2
|
||||
to:irq::@return
|
||||
irq::@return: scope:[irq] from irq::@1 irq::@2
|
||||
[12] return
|
||||
[12] (byte) col#12 ← phi( irq::@1/(byte) col#3 irq::@2/(byte) col#4 )
|
||||
[13] return
|
||||
to:@return
|
||||
irq::@1: scope:[irq] from irq
|
||||
[13] (byte) col#3 ← ++ (byte) col#0
|
||||
[14] (byte) col#3 ← ++ (byte) col#0
|
||||
to:irq::@return
|
||||
|
@ -161,8 +161,6 @@ Successful SSA optimization Pass2ConstantIdentification
|
||||
if() condition always true - replacing block destination [7] if(true) goto main::@2
|
||||
Successful SSA optimization Pass2ConstantIfs
|
||||
Rewriting conditional comparison [11] if((byte) col#14<=(byte) $a) goto main::@1
|
||||
Eliminating unused variable - keeping the phi block (byte) col#12
|
||||
Successful SSA optimization PassNEliminateUnusedVars
|
||||
Removing unused block main::@return
|
||||
Successful SSA optimization Pass2EliminateUnusedBlocks
|
||||
Adding number conversion cast (unumber) $a+1 in if((byte) col#14<(byte) $a+(number) 1) goto main::@1
|
||||
@ -181,10 +179,12 @@ Adding NOP phi() at start of @end
|
||||
CALL GRAPH
|
||||
Calls in [] to main:2
|
||||
|
||||
Created 1 initial phi equivalence classes
|
||||
Created 2 initial phi equivalence classes
|
||||
Coalesced [6] col#17 ← col#0
|
||||
Coalesced [10] col#18 ← col#1
|
||||
Coalesced down to 1 phi equivalence classes
|
||||
Coalesced [15] col#20 ← col#4
|
||||
Coalesced [19] col#19 ← col#3
|
||||
Coalesced down to 2 phi equivalence classes
|
||||
Culled Empty Block (label) @3
|
||||
Renumbering block @2 to @1
|
||||
Renumbering block main::@7 to main::@3
|
||||
@ -223,10 +223,11 @@ irq::@2: scope:[irq] from irq
|
||||
[11] (byte) col#4 ← (byte) col#0 + (byte) 2
|
||||
to:irq::@return
|
||||
irq::@return: scope:[irq] from irq::@1 irq::@2
|
||||
[12] return
|
||||
[12] (byte) col#12 ← phi( irq::@1/(byte) col#3 irq::@2/(byte) col#4 )
|
||||
[13] return
|
||||
to:@return
|
||||
irq::@1: scope:[irq] from irq
|
||||
[13] (byte) col#3 ← ++ (byte) col#0
|
||||
[14] (byte) col#3 ← ++ (byte) col#0
|
||||
to:irq::@return
|
||||
|
||||
|
||||
@ -236,19 +237,20 @@ VARIABLE REGISTER WEIGHTS
|
||||
(byte) col
|
||||
(byte) col#0 1.9999999999999998
|
||||
(byte) col#1 22.0
|
||||
(byte) col#12 40.0
|
||||
(byte) col#14 114.0
|
||||
(byte) col#3 20.0
|
||||
(byte) col#4 20.0
|
||||
(byte) col#3 4.0
|
||||
(byte) col#4 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(void()) main()
|
||||
|
||||
Initial phi equivalence classes
|
||||
[ col#14 col#0 col#1 ]
|
||||
Coalescing volatile variable equivalence classes [ col#14 col#0 col#1 ] and [ col#3 ]
|
||||
Coalescing volatile variable equivalence classes [ col#14 col#0 col#1 col#3 ] and [ col#4 ]
|
||||
[ col#12 col#3 col#4 ]
|
||||
Coalescing volatile variable equivalence classes [ col#14 col#0 col#1 ] and [ col#12 col#3 col#4 ]
|
||||
Complete equivalence classes
|
||||
[ col#14 col#0 col#1 col#3 col#4 ]
|
||||
Allocated zp ZP_BYTE:2 [ col#14 col#0 col#1 col#3 col#4 ]
|
||||
[ col#14 col#0 col#1 col#12 col#3 col#4 ]
|
||||
Allocated zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ]
|
||||
|
||||
INITIAL ASM
|
||||
//SEG0 File Comments
|
||||
@ -331,16 +333,20 @@ irq: {
|
||||
clc
|
||||
adc #2
|
||||
sta col
|
||||
//SEG27 [12] phi from irq::@1 irq::@2 to irq::@return [phi:irq::@1/irq::@2->irq::@return]
|
||||
breturn_from_b1:
|
||||
breturn_from_b2:
|
||||
//SEG28 [12] phi (byte) col#12 = (byte) col#3 [phi:irq::@1/irq::@2->irq::@return#0] -- register_copy
|
||||
jmp breturn
|
||||
//SEG27 irq::@return
|
||||
//SEG29 irq::@return
|
||||
breturn:
|
||||
//SEG28 [12] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG30 [13] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
//SEG29 irq::@1
|
||||
//SEG31 irq::@1
|
||||
b1:
|
||||
//SEG30 [13] (byte) col#3 ← ++ (byte) col#0 -- vbuz1=_inc_vbuz1
|
||||
//SEG32 [14] (byte) col#3 ← ++ (byte) col#0 -- vbuz1=_inc_vbuz1
|
||||
inc col
|
||||
jmp breturn
|
||||
jmp breturn_from_b1
|
||||
}
|
||||
|
||||
REGISTER UPLIFT POTENTIAL REGISTERS
|
||||
@ -351,19 +357,19 @@ Statement [7] (byte) col#1 ← (byte) 0 [ col#1 ] ( main:2 [ col#1 ] ) always cl
|
||||
Statement asm { lda$dc0d } always clobbers reg byte a
|
||||
Statement [9] *((const byte*) BGCOL#0) ← (byte) col#0 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a
|
||||
Statement [10] if((byte) col#0!=(byte) 0) goto irq::@1 [ col#0 ] ( [ col#0 ] ) always clobbers reg byte a
|
||||
Statement [11] (byte) col#4 ← (byte) col#0 + (byte) 2 [ ] ( [ ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ col#14 col#0 col#1 col#3 col#4 ] : zp ZP_BYTE:2 ,
|
||||
Statement [11] (byte) col#4 ← (byte) col#0 + (byte) 2 [ col#4 ] ( [ col#4 ] ) always clobbers reg byte a
|
||||
Potential registers zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ] : zp ZP_BYTE:2 ,
|
||||
|
||||
REGISTER UPLIFT SCOPES
|
||||
Uplift Scope [] 178: zp ZP_BYTE:2 [ col#14 col#0 col#1 col#3 col#4 ]
|
||||
Uplift Scope [] 186: zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ]
|
||||
Uplift Scope [main]
|
||||
Uplift Scope [irq]
|
||||
|
||||
Uplifting [] best 1834 combination zp ZP_BYTE:2 [ col#14 col#0 col#1 col#3 col#4 ]
|
||||
Uplifting [] best 1834 combination zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ]
|
||||
Uplifting [main] best 1834 combination
|
||||
Uplifting [irq] best 1834 combination
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ col#14 col#0 col#1 col#3 col#4 ]
|
||||
Uplifting [] best 1834 combination zp ZP_BYTE:2 [ col#14 col#0 col#1 col#3 col#4 ]
|
||||
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ]
|
||||
Uplifting [] best 1834 combination zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ]
|
||||
|
||||
ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG0 File Comments
|
||||
@ -446,16 +452,20 @@ irq: {
|
||||
clc
|
||||
adc #2
|
||||
sta col
|
||||
//SEG27 [12] phi from irq::@1 irq::@2 to irq::@return [phi:irq::@1/irq::@2->irq::@return]
|
||||
breturn_from_b1:
|
||||
breturn_from_b2:
|
||||
//SEG28 [12] phi (byte) col#12 = (byte) col#3 [phi:irq::@1/irq::@2->irq::@return#0] -- register_copy
|
||||
jmp breturn
|
||||
//SEG27 irq::@return
|
||||
//SEG29 irq::@return
|
||||
breturn:
|
||||
//SEG28 [12] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG30 [13] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
//SEG29 irq::@1
|
||||
//SEG31 irq::@1
|
||||
b1:
|
||||
//SEG30 [13] (byte) col#3 ← ++ (byte) col#0 -- vbuz1=_inc_vbuz1
|
||||
//SEG32 [14] (byte) col#3 ← ++ (byte) col#0 -- vbuz1=_inc_vbuz1
|
||||
inc col
|
||||
jmp breturn
|
||||
jmp breturn_from_b1
|
||||
}
|
||||
|
||||
ASSEMBLER OPTIMIZATIONS
|
||||
@ -469,11 +479,14 @@ Removing instruction jmp breturn
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Replacing label b1 with b2
|
||||
Replacing label b1_from_b2 with b2
|
||||
Replacing label breturn_from_b1 with breturn
|
||||
Removing instruction b1_from_bbegin:
|
||||
Removing instruction bend_from_b1:
|
||||
Removing instruction b1_from_main:
|
||||
Removing instruction b1_from_b2:
|
||||
Removing instruction b1:
|
||||
Removing instruction breturn_from_b1:
|
||||
Removing instruction breturn_from_b2:
|
||||
Succesful ASM optimization Pass5RedundantLabelElimination
|
||||
Removing instruction b1:
|
||||
Removing instruction bend:
|
||||
@ -507,9 +520,10 @@ FINAL SYMBOL TABLE
|
||||
(byte) col
|
||||
(byte) col#0 col zp ZP_BYTE:2 1.9999999999999998
|
||||
(byte) col#1 col zp ZP_BYTE:2 22.0
|
||||
(byte) col#12 col zp ZP_BYTE:2 40.0
|
||||
(byte) col#14 col zp ZP_BYTE:2 114.0
|
||||
(byte) col#3 col zp ZP_BYTE:2 20.0
|
||||
(byte) col#4 col zp ZP_BYTE:2 20.0
|
||||
(byte) col#3 col zp ZP_BYTE:2 4.0
|
||||
(byte) col#4 col zp ZP_BYTE:2 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) irq::@1
|
||||
(label) irq::@2
|
||||
@ -519,7 +533,7 @@ interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
|
||||
zp ZP_BYTE:2 [ col#14 col#0 col#1 col#3 col#4 ]
|
||||
zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ]
|
||||
|
||||
|
||||
FINAL ASSEMBLER
|
||||
@ -588,12 +602,14 @@ irq: {
|
||||
clc
|
||||
adc #2
|
||||
sta col
|
||||
//SEG27 irq::@return
|
||||
//SEG28 [12] return - exit interrupt(KERNEL_MIN)
|
||||
//SEG27 [12] phi from irq::@1 irq::@2 to irq::@return [phi:irq::@1/irq::@2->irq::@return]
|
||||
//SEG28 [12] phi (byte) col#12 = (byte) col#3 [phi:irq::@1/irq::@2->irq::@return#0] -- register_copy
|
||||
//SEG29 irq::@return
|
||||
//SEG30 [13] return - exit interrupt(KERNEL_MIN)
|
||||
jmp $ea81
|
||||
//SEG29 irq::@1
|
||||
//SEG31 irq::@1
|
||||
b1:
|
||||
//SEG30 [13] (byte) col#3 ← ++ (byte) col#0 -- vbuz1=_inc_vbuz1
|
||||
//SEG32 [14] (byte) col#3 ← ++ (byte) col#0 -- vbuz1=_inc_vbuz1
|
||||
inc col
|
||||
jmp $ea81
|
||||
}
|
||||
|
@ -8,9 +8,10 @@
|
||||
(byte) col
|
||||
(byte) col#0 col zp ZP_BYTE:2 1.9999999999999998
|
||||
(byte) col#1 col zp ZP_BYTE:2 22.0
|
||||
(byte) col#12 col zp ZP_BYTE:2 40.0
|
||||
(byte) col#14 col zp ZP_BYTE:2 114.0
|
||||
(byte) col#3 col zp ZP_BYTE:2 20.0
|
||||
(byte) col#4 col zp ZP_BYTE:2 20.0
|
||||
(byte) col#3 col zp ZP_BYTE:2 4.0
|
||||
(byte) col#4 col zp ZP_BYTE:2 4.0
|
||||
interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) irq::@1
|
||||
(label) irq::@2
|
||||
@ -20,4 +21,4 @@ interrupt(KERNEL_MIN)(void()) irq()
|
||||
(label) main::@2
|
||||
(label) main::@3
|
||||
|
||||
zp ZP_BYTE:2 [ col#14 col#0 col#1 col#3 col#4 ]
|
||||
zp ZP_BYTE:2 [ col#14 col#0 col#1 col#12 col#3 col#4 ]
|
||||
|
Loading…
x
Reference in New Issue
Block a user