mirror of
https://gitlab.com/camelot/kickc.git
synced 2024-11-27 19:50:10 +00:00
Added comments to variables identified as constants.
This commit is contained in:
parent
b8ab7c6c49
commit
f0d77acb29
@ -38,7 +38,7 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
*/
|
||||
@Override
|
||||
public boolean step() {
|
||||
Map<VariableRef, ConstantValue> constants = findConstantVariables();
|
||||
Map<VariableRef, ConstantVariableValue> constants = findConstantVariables();
|
||||
LinkedHashMap<VariableRef, RValue> constAliases = new LinkedHashMap<>();
|
||||
// Update symbol table with the constant value
|
||||
Set<VariableRef> constVars = new LinkedHashSet<>(constants.keySet());
|
||||
@ -51,9 +51,10 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
continue;
|
||||
}
|
||||
|
||||
ConstantValue constVal = constants.get(constRef);
|
||||
ConstantVariableValue constVarVal = constants.get(constRef);
|
||||
Scope constScope = variable.getScope();
|
||||
|
||||
ConstantValue constVal = constVarVal.getConstantValue();
|
||||
SymbolType valueType = SymbolTypeInference.inferType(getScope(), constVal);
|
||||
SymbolType variableType = variable.getType();
|
||||
SymbolType constType = variableType;
|
||||
@ -78,7 +79,11 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
constVal);
|
||||
constantVar.setDeclaredAlignment(variable.getDeclaredAlignment());
|
||||
constantVar.setDeclaredRegister(variable.getDeclaredRegister());
|
||||
if(variable.getComments().size()>0) {
|
||||
constantVar.setComments(variable.getComments());
|
||||
} else {
|
||||
constantVar.setComments(constVarVal.getAssignment().getComments());
|
||||
}
|
||||
constScope.remove(variable);
|
||||
constScope.add(constantVar);
|
||||
constAliases.put(constRef, constantVar.getRef());
|
||||
@ -91,13 +96,49 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
return constants.size() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* A variable identified as a constant.
|
||||
*/
|
||||
private static class ConstantVariableValue {
|
||||
|
||||
/** The variable that has been determined to be constant. */
|
||||
private VariableRef variableRef;
|
||||
|
||||
/** The constant value of the variable. */
|
||||
private ConstantValue constantValue;
|
||||
|
||||
/**
|
||||
* The statement that assigns the variable its value (the assignment will be removed at the end).
|
||||
* Either a {@link StatementAssignment} or a {@link StatementPhiBlock}.
|
||||
* */
|
||||
private Statement assignment;
|
||||
|
||||
public ConstantVariableValue(VariableRef variableRef, ConstantValue constantValue, Statement assignment) {
|
||||
this.variableRef = variableRef;
|
||||
this.constantValue = constantValue;
|
||||
this.assignment = assignment;
|
||||
}
|
||||
|
||||
public VariableRef getVariableRef() {
|
||||
return variableRef;
|
||||
}
|
||||
|
||||
public ConstantValue getConstantValue() {
|
||||
return constantValue;
|
||||
}
|
||||
|
||||
public Statement getAssignment() {
|
||||
return assignment;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Find variables that have constant values.
|
||||
*
|
||||
* @return Map from Variable to the Constant value
|
||||
*/
|
||||
private Map<VariableRef, ConstantValue> findConstantVariables() {
|
||||
final Map<VariableRef, ConstantValue> constants = new LinkedHashMap<>();
|
||||
private Map<VariableRef, ConstantVariableValue> findConstantVariables() {
|
||||
final Map<VariableRef, ConstantVariableValue> constants = new LinkedHashMap<>();
|
||||
for(ControlFlowBlock block : getGraph().getAllBlocks()) {
|
||||
for(Statement statement : block.getStatements()) {
|
||||
if(statement instanceof StatementAssignment) {
|
||||
@ -113,7 +154,7 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
return constants;
|
||||
}
|
||||
|
||||
private void findConstantsPhi(Map<VariableRef, ConstantValue> constants, StatementPhiBlock phi) {
|
||||
private void findConstantsPhi(Map<VariableRef, ConstantVariableValue> constants, StatementPhiBlock phi) {
|
||||
for(StatementPhiBlock.PhiVariable phiVariable : phi.getPhiVariables()) {
|
||||
if(phiVariable.getValues().size() == 1) {
|
||||
StatementPhiBlock.PhiRValue phiRValue = phiVariable.getValues().get(0);
|
||||
@ -125,13 +166,13 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
continue;
|
||||
}
|
||||
ConstantValue constant = getConstant(phiRValue.getrValue());
|
||||
constants.put(variable, constant);
|
||||
constants.put(variable, new ConstantVariableValue(variable, constant, phi));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void findConstantsAssignment(Map<VariableRef, ConstantValue> constants, StatementAssignment assignment) {
|
||||
private void findConstantsAssignment(Map<VariableRef, ConstantVariableValue> constants, StatementAssignment assignment) {
|
||||
LValue lValue = assignment.getlValue();
|
||||
if(lValue instanceof VariableRef) {
|
||||
VariableRef variable = (VariableRef) lValue;
|
||||
@ -145,7 +186,7 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
// Constant assignment
|
||||
ConstantValue constant = getConstant(assignment.getrValue2());
|
||||
if(constant != null) {
|
||||
constants.put(variable, constant);
|
||||
constants.put(variable, new ConstantVariableValue(variable, constant, assignment));
|
||||
}
|
||||
} else {
|
||||
// Constant unary expression
|
||||
@ -154,7 +195,7 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
getConstant(assignment.getrValue2())
|
||||
);
|
||||
if(constant != null) {
|
||||
constants.put(variable, constant);
|
||||
constants.put(variable, new ConstantVariableValue(variable, constant, assignment));
|
||||
}
|
||||
}
|
||||
} else if(getConstant(assignment.getrValue1()) != null && getConstant(assignment.getrValue2()) != null) {
|
||||
@ -165,7 +206,7 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
getConstant(assignment.getrValue2()),
|
||||
getScope());
|
||||
if(constant != null) {
|
||||
constants.put(variable, constant);
|
||||
constants.put(variable, new ConstantVariableValue(variable, constant, assignment));
|
||||
}
|
||||
} else if(assignment.getrValue2() instanceof ValueList && assignment.getOperator() == null && assignment.getrValue1() == null) {
|
||||
// A candidate for a constant list - examine to confirm
|
||||
@ -204,14 +245,14 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
|
||||
if(allConstant && listType != null) {
|
||||
// Constant list confirmed!
|
||||
ConstantValue constant = new ConstantArrayList(elements, listType);
|
||||
constants.put(variable, constant);
|
||||
constants.put(variable, new ConstantVariableValue(variable, constant, assignment));
|
||||
}
|
||||
}
|
||||
} else if(Operators.ADDRESS_OF.equals(assignment.getOperator()) && assignment.getrValue1() == null) {
|
||||
// Constant address-of variable
|
||||
if(assignment.getrValue2() instanceof SymbolRef) {
|
||||
ConstantSymbolPointer constantSymbolPointer = new ConstantSymbolPointer((SymbolRef) assignment.getrValue2());
|
||||
constants.put(variable, constantSymbolPointer);
|
||||
constants.put(variable, new ConstantVariableValue(variable, constantSymbolPointer, assignment));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -292,6 +292,7 @@ gfx_init_plane_charset8: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
sta cpuBank
|
||||
.byte $32, $dd
|
||||
|
@ -2435,6 +2435,7 @@ gfx_init_plane_charset8: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
.label cpuBankIdx = $d
|
||||
//SEG139 [75] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#2 -- _deref_pbuc1=vbuz1
|
||||
@ -3193,6 +3194,7 @@ gfx_init_plane_charset8: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
//SEG139 [75] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#2 -- _deref_pbuc1=vbuaa
|
||||
sta cpuBank
|
||||
@ -4143,6 +4145,7 @@ gfx_init_plane_charset8: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
//SEG139 [75] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#2 -- _deref_pbuc1=vbuaa
|
||||
sta cpuBank
|
||||
|
@ -259,6 +259,7 @@ gfx_init_chunky: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
sta cpuBank
|
||||
.byte $32, $dd
|
||||
|
@ -2006,6 +2006,7 @@ gfx_init_chunky: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
.label cpuBankIdx = 9
|
||||
//SEG108 [59] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 -- _deref_pbuc1=vbuz1
|
||||
@ -2535,6 +2536,7 @@ gfx_init_chunky: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
//SEG108 [59] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 -- _deref_pbuc1=vbuaa
|
||||
sta cpuBank
|
||||
@ -3263,6 +3265,7 @@ gfx_init_chunky: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
//SEG108 [59] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 -- _deref_pbuc1=vbuaa
|
||||
sta cpuBank
|
||||
|
@ -58,6 +58,7 @@
|
||||
// No transparancy
|
||||
// Bit[2]==Bit[1]==0: write in any case
|
||||
.const DTV_BLIT_TRANSPARANCY_NONE = 0
|
||||
// Controls the ALU operation
|
||||
.label DTV_BLITTER_ALU = $d33e
|
||||
.const DTV_BLIT_ADD = $30
|
||||
// Blitter Control 2
|
||||
|
@ -1238,6 +1238,7 @@ INITIAL ASM
|
||||
// No transparancy
|
||||
// Bit[2]==Bit[1]==0: write in any case
|
||||
.const DTV_BLIT_TRANSPARANCY_NONE = 0
|
||||
// Controls the ALU operation
|
||||
.label DTV_BLITTER_ALU = $d33e
|
||||
.const DTV_BLIT_ADD = $30
|
||||
// Blitter Control 2
|
||||
@ -1560,6 +1561,7 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
// No transparancy
|
||||
// Bit[2]==Bit[1]==0: write in any case
|
||||
.const DTV_BLIT_TRANSPARANCY_NONE = 0
|
||||
// Controls the ALU operation
|
||||
.label DTV_BLITTER_ALU = $d33e
|
||||
.const DTV_BLIT_ADD = $30
|
||||
// Blitter Control 2
|
||||
@ -2079,6 +2081,7 @@ Score: 1561
|
||||
// No transparancy
|
||||
// Bit[2]==Bit[1]==0: write in any case
|
||||
.const DTV_BLIT_TRANSPARANCY_NONE = 0
|
||||
// Controls the ALU operation
|
||||
.label DTV_BLITTER_ALU = $d33e
|
||||
.const DTV_BLIT_ADD = $30
|
||||
// Blitter Control 2
|
||||
|
@ -124,6 +124,7 @@
|
||||
.label FORM_SCREEN = $400
|
||||
// Charset used for the FORM
|
||||
.label FORM_CHARSET = $1800
|
||||
// Number of form fields
|
||||
.const form_fields_cnt = $24
|
||||
// The number of frames to use for a full blink cycle
|
||||
.const FORM_CURSOR_BLINK = $28
|
||||
@ -1661,6 +1662,7 @@ gfx_init_plane_fill: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
sta cpuBank
|
||||
.byte $32, $dd
|
||||
|
@ -13865,6 +13865,7 @@ INITIAL ASM
|
||||
.label FORM_SCREEN = $400
|
||||
// Charset used for the FORM
|
||||
.label FORM_CHARSET = $1800
|
||||
// Number of form fields
|
||||
.const form_fields_cnt = $24
|
||||
// The number of frames to use for a full blink cycle
|
||||
.const FORM_CURSOR_BLINK = $28
|
||||
@ -17335,6 +17336,7 @@ gfx_init_plane_fill: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
.label cpuBankIdx = $43
|
||||
//SEG1003 [506] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#13 -- _deref_pbuc1=vbuz1
|
||||
@ -21155,6 +21157,7 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
.label FORM_SCREEN = $400
|
||||
// Charset used for the FORM
|
||||
.label FORM_CHARSET = $1800
|
||||
// Number of form fields
|
||||
.const form_fields_cnt = $24
|
||||
// The number of frames to use for a full blink cycle
|
||||
.const FORM_CURSOR_BLINK = $28
|
||||
@ -24225,6 +24228,7 @@ gfx_init_plane_fill: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
//SEG1003 [506] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#13 -- _deref_pbuc1=vbuaa
|
||||
sta cpuBank
|
||||
@ -27330,18 +27334,18 @@ Removing instruction b37:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
Removing unreachable instruction jmp b7
|
||||
Succesful ASM optimization Pass5UnreachableCodeElimination
|
||||
Fixing long branch [761] beq b5 to bne
|
||||
Fixing long branch [765] beq b6 to bne
|
||||
Fixing long branch [769] beq b7 to bne
|
||||
Fixing long branch [773] beq b8 to bne
|
||||
Fixing long branch [759] beq b4 to bne
|
||||
Fixing long branch [779] beq b9 to bne
|
||||
Fixing long branch [783] beq b10 to bne
|
||||
Fixing long branch [787] beq b11 to bne
|
||||
Fixing long branch [791] beq b12 to bne
|
||||
Fixing long branch [757] beq b3 to bne
|
||||
Fixing long branch [797] beq b13 to bne
|
||||
Fixing long branch [1345] bmi b2 to bpl
|
||||
Fixing long branch [762] beq b5 to bne
|
||||
Fixing long branch [766] beq b6 to bne
|
||||
Fixing long branch [770] beq b7 to bne
|
||||
Fixing long branch [774] beq b8 to bne
|
||||
Fixing long branch [760] beq b4 to bne
|
||||
Fixing long branch [780] beq b9 to bne
|
||||
Fixing long branch [784] beq b10 to bne
|
||||
Fixing long branch [788] beq b11 to bne
|
||||
Fixing long branch [792] beq b12 to bne
|
||||
Fixing long branch [758] beq b3 to bne
|
||||
Fixing long branch [798] beq b13 to bne
|
||||
Fixing long branch [1346] bmi b2 to bpl
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @68
|
||||
@ -29179,6 +29183,7 @@ Score: 11370517
|
||||
.label FORM_SCREEN = $400
|
||||
// Charset used for the FORM
|
||||
.label FORM_CHARSET = $1800
|
||||
// Number of form fields
|
||||
.const form_fields_cnt = $24
|
||||
// The number of frames to use for a full blink cycle
|
||||
.const FORM_CURSOR_BLINK = $28
|
||||
@ -31716,6 +31721,7 @@ gfx_init_plane_fill: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
//SEG1003 [506] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#13 -- _deref_pbuc1=vbuaa
|
||||
sta cpuBank
|
||||
|
@ -483,6 +483,7 @@ keyboard_matrix_read: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
sta cpuBank
|
||||
.byte $32, $dd
|
||||
|
@ -13919,6 +13919,7 @@ keyboard_matrix_read: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
.label cpuBankIdx = $f
|
||||
//SEG408 [224] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 -- _deref_pbuc1=vbuz1
|
||||
@ -20632,6 +20633,7 @@ keyboard_matrix_read: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
//SEG408 [224] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 -- _deref_pbuc1=vbuaa
|
||||
sta cpuBank
|
||||
@ -27538,6 +27540,7 @@ keyboard_matrix_read: {
|
||||
// This sets which actual memory is addressed when the CPU reads/writes to $4000-$7fff
|
||||
// The actual memory addressed will be $4000*cpuSegmentIdx
|
||||
dtvSetCpuBankSegment1: {
|
||||
// Move CPU BANK 1 SEGMENT ($4000-$7fff)
|
||||
.label cpuBank = $ff
|
||||
//SEG408 [224] *((const byte*) dtvSetCpuBankSegment1::cpuBank#0) ← (byte) dtvSetCpuBankSegment1::cpuBankIdx#3 -- _deref_pbuc1=vbuaa
|
||||
sta cpuBank
|
||||
|
@ -15,25 +15,45 @@
|
||||
.const LIGHT_BLUE = $e
|
||||
.const LIGHT_GREY = $f
|
||||
.label print_line_cursor = $400
|
||||
// The rotated point - updated by calling rotate_matrix()
|
||||
.label xr = $f0
|
||||
.label yr = $f1
|
||||
.label zr = $f2
|
||||
// The rotated point with perspective
|
||||
.label pp = $f3
|
||||
.label xp = $f4
|
||||
.label yp = $f5
|
||||
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2
|
||||
.label psp1 = $f6
|
||||
.label psp2 = $f8
|
||||
.label SCREEN = $400
|
||||
.const sz = 0
|
||||
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
||||
// f(x) = >(( x * x ))
|
||||
.label mulf_sqr1 = $2400
|
||||
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
||||
.label mulf_sqr2 = $2600
|
||||
// A single sprite
|
||||
.label SPRITE = $3000
|
||||
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
|
||||
.label PERSP_Z = $2800
|
||||
// Sine and Cosine Tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Half Sine/Cosine: signed fixed [-$20;20]
|
||||
.label SINH = $2000
|
||||
// sin(x) = cos(x+PI/2)
|
||||
// Quarter Sine/Cosine: signed fixed [-$10,$10]
|
||||
.label SINQ = $2200
|
||||
// 16 bit Sine and Cosine Tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Half Sine/Cosine: signed fixed [-$1f,$1f]
|
||||
.label SINH_LO = $4000
|
||||
// sin(x) = cos(x+PI/2)
|
||||
.label SINH_HI = $4200
|
||||
// sin(x) = cos(x+PI/2)
|
||||
// Quarter Sine/Cosine: signed fixed [-$0f,$0f]
|
||||
.label SINQ_LO = $4400
|
||||
// sin(x) = cos(x+PI/2)
|
||||
.label SINQ_HI = $4600
|
||||
.label COSH = SINH+$40
|
||||
.label COSQ = SINQ+$40
|
||||
|
@ -5676,25 +5676,45 @@ INITIAL ASM
|
||||
.const LIGHT_BLUE = $e
|
||||
.const LIGHT_GREY = $f
|
||||
.label print_line_cursor = $400
|
||||
// The rotated point - updated by calling rotate_matrix()
|
||||
.label xr = $f0
|
||||
.label yr = $f1
|
||||
.label zr = $f2
|
||||
// The rotated point with perspective
|
||||
.label pp = $f3
|
||||
.label xp = $f4
|
||||
.label yp = $f5
|
||||
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2
|
||||
.label psp1 = $f6
|
||||
.label psp2 = $f8
|
||||
.label SCREEN = $400
|
||||
.const sz = 0
|
||||
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
||||
// f(x) = >(( x * x ))
|
||||
.label mulf_sqr1 = $2400
|
||||
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
||||
.label mulf_sqr2 = $2600
|
||||
// A single sprite
|
||||
.label SPRITE = $3000
|
||||
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
|
||||
.label PERSP_Z = $2800
|
||||
// Sine and Cosine Tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Half Sine/Cosine: signed fixed [-$20;20]
|
||||
.label SINH = $2000
|
||||
// sin(x) = cos(x+PI/2)
|
||||
// Quarter Sine/Cosine: signed fixed [-$10,$10]
|
||||
.label SINQ = $2200
|
||||
// 16 bit Sine and Cosine Tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Half Sine/Cosine: signed fixed [-$1f,$1f]
|
||||
.label SINH_LO = $4000
|
||||
// sin(x) = cos(x+PI/2)
|
||||
.label SINH_HI = $4200
|
||||
// sin(x) = cos(x+PI/2)
|
||||
// Quarter Sine/Cosine: signed fixed [-$0f,$0f]
|
||||
.label SINQ_LO = $4400
|
||||
// sin(x) = cos(x+PI/2)
|
||||
.label SINQ_HI = $4600
|
||||
.label COSH = SINH+$40
|
||||
.label COSQ = SINQ+$40
|
||||
@ -8462,25 +8482,45 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
.const LIGHT_BLUE = $e
|
||||
.const LIGHT_GREY = $f
|
||||
.label print_line_cursor = $400
|
||||
// The rotated point - updated by calling rotate_matrix()
|
||||
.label xr = $f0
|
||||
.label yr = $f1
|
||||
.label zr = $f2
|
||||
// The rotated point with perspective
|
||||
.label pp = $f3
|
||||
.label xp = $f4
|
||||
.label yp = $f5
|
||||
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2
|
||||
.label psp1 = $f6
|
||||
.label psp2 = $f8
|
||||
.label SCREEN = $400
|
||||
.const sz = 0
|
||||
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
||||
// f(x) = >(( x * x ))
|
||||
.label mulf_sqr1 = $2400
|
||||
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
||||
.label mulf_sqr2 = $2600
|
||||
// A single sprite
|
||||
.label SPRITE = $3000
|
||||
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
|
||||
.label PERSP_Z = $2800
|
||||
// Sine and Cosine Tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Half Sine/Cosine: signed fixed [-$20;20]
|
||||
.label SINH = $2000
|
||||
// sin(x) = cos(x+PI/2)
|
||||
// Quarter Sine/Cosine: signed fixed [-$10,$10]
|
||||
.label SINQ = $2200
|
||||
// 16 bit Sine and Cosine Tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Half Sine/Cosine: signed fixed [-$1f,$1f]
|
||||
.label SINH_LO = $4000
|
||||
// sin(x) = cos(x+PI/2)
|
||||
.label SINH_HI = $4200
|
||||
// sin(x) = cos(x+PI/2)
|
||||
// Quarter Sine/Cosine: signed fixed [-$0f,$0f]
|
||||
.label SINQ_LO = $4400
|
||||
// sin(x) = cos(x+PI/2)
|
||||
.label SINQ_HI = $4600
|
||||
.label COSH = SINH+$40
|
||||
.label COSQ = SINQ+$40
|
||||
@ -10687,9 +10727,9 @@ Removing instruction jmp b1
|
||||
Succesful ASM optimization Pass5NextJumpElimination
|
||||
Removing instruction bbegin:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
Fixing long branch [318] bne b1 to beq
|
||||
Fixing long branch [1005] bne b2 to beq
|
||||
Fixing long branch [1015] bne b1 to beq
|
||||
Fixing long branch [338] bne b1 to beq
|
||||
Fixing long branch [1025] bne b2 to beq
|
||||
Fixing long branch [1035] bne b1 to beq
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @33
|
||||
@ -11335,25 +11375,45 @@ Score: 85538
|
||||
.const LIGHT_BLUE = $e
|
||||
.const LIGHT_GREY = $f
|
||||
.label print_line_cursor = $400
|
||||
// The rotated point - updated by calling rotate_matrix()
|
||||
.label xr = $f0
|
||||
.label yr = $f1
|
||||
.label zr = $f2
|
||||
// The rotated point with perspective
|
||||
.label pp = $f3
|
||||
.label xp = $f4
|
||||
.label yp = $f5
|
||||
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2
|
||||
.label psp1 = $f6
|
||||
.label psp2 = $f8
|
||||
.label SCREEN = $400
|
||||
.const sz = 0
|
||||
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
||||
// f(x) = >(( x * x ))
|
||||
.label mulf_sqr1 = $2400
|
||||
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
||||
.label mulf_sqr2 = $2600
|
||||
// A single sprite
|
||||
.label SPRITE = $3000
|
||||
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
|
||||
.label PERSP_Z = $2800
|
||||
// Sine and Cosine Tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Half Sine/Cosine: signed fixed [-$20;20]
|
||||
.label SINH = $2000
|
||||
// sin(x) = cos(x+PI/2)
|
||||
// Quarter Sine/Cosine: signed fixed [-$10,$10]
|
||||
.label SINQ = $2200
|
||||
// 16 bit Sine and Cosine Tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Half Sine/Cosine: signed fixed [-$1f,$1f]
|
||||
.label SINH_LO = $4000
|
||||
// sin(x) = cos(x+PI/2)
|
||||
.label SINH_HI = $4200
|
||||
// sin(x) = cos(x+PI/2)
|
||||
// Quarter Sine/Cosine: signed fixed [-$0f,$0f]
|
||||
.label SINQ_LO = $4400
|
||||
// sin(x) = cos(x+PI/2)
|
||||
.label SINQ_HI = $4600
|
||||
.label COSH = SINH+$40
|
||||
.label COSQ = SINQ+$40
|
||||
|
@ -5,11 +5,14 @@
|
||||
.pc = $801 "Basic"
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
// The rotated point - updated by calling rotate()
|
||||
.label xr = $f0
|
||||
.label yr = $f1
|
||||
.label zr = $f2
|
||||
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2.
|
||||
.label psp1 = $f3
|
||||
.label psp2 = $f5
|
||||
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
|
||||
.label PERSP_Z = $2400
|
||||
.label print_char_cursor = 4
|
||||
.label print_line_cursor = 2
|
||||
|
@ -1937,11 +1937,14 @@ INITIAL ASM
|
||||
:BasicUpstart(bbegin)
|
||||
.pc = $80d "Program"
|
||||
//SEG2 Global Constants & labels
|
||||
// The rotated point - updated by calling rotate()
|
||||
.label xr = $f0
|
||||
.label yr = $f1
|
||||
.label zr = $f2
|
||||
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2.
|
||||
.label psp1 = $f3
|
||||
.label psp2 = $f5
|
||||
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
|
||||
.label PERSP_Z = $2400
|
||||
.label print_char_cursor = 8
|
||||
.label print_line_cursor = 2
|
||||
@ -2751,11 +2754,14 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
:BasicUpstart(bbegin)
|
||||
.pc = $80d "Program"
|
||||
//SEG2 Global Constants & labels
|
||||
// The rotated point - updated by calling rotate()
|
||||
.label xr = $f0
|
||||
.label yr = $f1
|
||||
.label zr = $f2
|
||||
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2.
|
||||
.label psp1 = $f3
|
||||
.label psp2 = $f5
|
||||
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
|
||||
.label PERSP_Z = $2400
|
||||
.label print_char_cursor = 4
|
||||
.label print_line_cursor = 2
|
||||
@ -3779,11 +3785,14 @@ Score: 3781
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
//SEG2 Global Constants & labels
|
||||
// The rotated point - updated by calling rotate()
|
||||
.label xr = $f0
|
||||
.label yr = $f1
|
||||
.label zr = $f2
|
||||
// Pointers used to multiply perspective (d/z0-z) onto x- & y-coordinates. Points into mulf_sqr1 / mulf_sqr2.
|
||||
.label psp1 = $f3
|
||||
.label psp2 = $f5
|
||||
// Perspective multiplication table containing (d/(z0-z)[z] for each z-value
|
||||
.label PERSP_Z = $2400
|
||||
.label print_char_cursor = 4
|
||||
.label print_line_cursor = 2
|
||||
|
@ -9,10 +9,14 @@
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
.label print_line_cursor = $400
|
||||
// Pointers to a, b and c=a*b
|
||||
.label ap = $fd
|
||||
.label bp = $fe
|
||||
.label cp = $ff
|
||||
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
||||
// f(x) = >(( x * x ))
|
||||
.label mulf_sqr1 = $2000
|
||||
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
||||
.label mulf_sqr2 = $2200
|
||||
main: {
|
||||
.label at = 2
|
||||
|
@ -1317,10 +1317,14 @@ INITIAL ASM
|
||||
.pc = $80d "Program"
|
||||
//SEG2 Global Constants & labels
|
||||
.label print_line_cursor = $400
|
||||
// Pointers to a, b and c=a*b
|
||||
.label ap = $fd
|
||||
.label bp = $fe
|
||||
.label cp = $ff
|
||||
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
||||
// f(x) = >(( x * x ))
|
||||
.label mulf_sqr1 = $2000
|
||||
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
||||
.label mulf_sqr2 = $2200
|
||||
//SEG3 @begin
|
||||
bbegin:
|
||||
@ -2001,10 +2005,14 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
.pc = $80d "Program"
|
||||
//SEG2 Global Constants & labels
|
||||
.label print_line_cursor = $400
|
||||
// Pointers to a, b and c=a*b
|
||||
.label ap = $fd
|
||||
.label bp = $fe
|
||||
.label cp = $ff
|
||||
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
||||
// f(x) = >(( x * x ))
|
||||
.label mulf_sqr1 = $2000
|
||||
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
||||
.label mulf_sqr2 = $2200
|
||||
//SEG3 @begin
|
||||
bbegin:
|
||||
@ -2737,10 +2745,14 @@ Score: 10536
|
||||
.pc = $80d "Program"
|
||||
//SEG2 Global Constants & labels
|
||||
.label print_line_cursor = $400
|
||||
// Pointers to a, b and c=a*b
|
||||
.label ap = $fd
|
||||
.label bp = $fe
|
||||
.label cp = $ff
|
||||
// mulf_sqr tables will contain f(x)=int(x*x) and g(x) = f(1-x).
|
||||
// f(x) = >(( x * x ))
|
||||
.label mulf_sqr1 = $2000
|
||||
// g(x) = >((( 1 - x ) * ( 1 - x )))
|
||||
.label mulf_sqr2 = $2200
|
||||
//SEG3 @begin
|
||||
//SEG4 @22
|
||||
|
@ -18,6 +18,7 @@
|
||||
.const GREEN = 5
|
||||
// The number of sprites in the multiplexer
|
||||
.const PLEX_COUNT = $20
|
||||
// Location of screen & sprites
|
||||
.label SCREEN = $400
|
||||
.label SPRITE = $2000
|
||||
.label YSIN = $2100
|
||||
|
@ -2475,6 +2475,7 @@ INITIAL ASM
|
||||
.const GREEN = 5
|
||||
// The number of sprites in the multiplexer
|
||||
.const PLEX_COUNT = $20
|
||||
// Location of screen & sprites
|
||||
.label SCREEN = $400
|
||||
.label SPRITE = $2000
|
||||
.label YSIN = $2100
|
||||
@ -3314,6 +3315,7 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
.const GREEN = 5
|
||||
// The number of sprites in the multiplexer
|
||||
.const PLEX_COUNT = $20
|
||||
// Location of screen & sprites
|
||||
.label SCREEN = $400
|
||||
.label SPRITE = $2000
|
||||
.label YSIN = $2100
|
||||
@ -4310,6 +4312,7 @@ Score: 63460
|
||||
.const GREEN = 5
|
||||
// The number of sprites in the multiplexer
|
||||
.const PLEX_COUNT = $20
|
||||
// Location of screen & sprites
|
||||
.label SCREEN = $400
|
||||
.label SPRITE = $2000
|
||||
.label YSIN = $2100
|
||||
|
@ -12,7 +12,11 @@
|
||||
.const GREEN = 5
|
||||
.const LIGHT_BLUE = $e
|
||||
.label SCREEN = $400
|
||||
// Sine and Cosine tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Sine/Cosine: signed fixed [-$7f,$7f]
|
||||
.label COS = $2000
|
||||
// A single sprite
|
||||
.label SPRITE = $3000
|
||||
.label SIN = COS+$40
|
||||
// sin(x) = cos(x+PI/2)
|
||||
|
@ -2289,7 +2289,11 @@ INITIAL ASM
|
||||
.const GREEN = 5
|
||||
.const LIGHT_BLUE = $e
|
||||
.label SCREEN = $400
|
||||
// Sine and Cosine tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Sine/Cosine: signed fixed [-$7f,$7f]
|
||||
.label COS = $2000
|
||||
// A single sprite
|
||||
.label SPRITE = $3000
|
||||
.label SIN = COS+$40
|
||||
//SEG3 @begin
|
||||
@ -3376,7 +3380,11 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
.const GREEN = 5
|
||||
.const LIGHT_BLUE = $e
|
||||
.label SCREEN = $400
|
||||
// Sine and Cosine tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Sine/Cosine: signed fixed [-$7f,$7f]
|
||||
.label COS = $2000
|
||||
// A single sprite
|
||||
.label SPRITE = $3000
|
||||
.label SIN = COS+$40
|
||||
//SEG3 @begin
|
||||
@ -4202,7 +4210,7 @@ Removing instruction b12:
|
||||
Succesful ASM optimization Pass5UnusedLabelElimination
|
||||
Removing unreachable instruction jmp b4
|
||||
Succesful ASM optimization Pass5UnreachableCodeElimination
|
||||
Fixing long branch [136] bne b7 to beq
|
||||
Fixing long branch [140] bne b7 to beq
|
||||
|
||||
FINAL SYMBOL TABLE
|
||||
(label) @13
|
||||
@ -4533,7 +4541,11 @@ Score: 34700
|
||||
.const GREEN = 5
|
||||
.const LIGHT_BLUE = $e
|
||||
.label SCREEN = $400
|
||||
// Sine and Cosine tables
|
||||
// Angles: $00=0, $80=PI,$100=2*PI
|
||||
// Sine/Cosine: signed fixed [-$7f,$7f]
|
||||
.label COS = $2000
|
||||
// A single sprite
|
||||
.label SPRITE = $3000
|
||||
.label SIN = COS+$40
|
||||
//SEG3 @begin
|
||||
|
@ -195,6 +195,7 @@ clear_screen: {
|
||||
// - min is the minimum value of the generated sinus
|
||||
// - max is the maximum value of the generated sinus
|
||||
gen_sintab: {
|
||||
// amplitude/2
|
||||
.label f_2pi = $e2e5
|
||||
.label _23 = $c
|
||||
.label i = 2
|
||||
|
@ -3961,6 +3961,7 @@ clear_screen: {
|
||||
// - min is the minimum value of the generated sinus
|
||||
// - max is the maximum value of the generated sinus
|
||||
gen_sintab: {
|
||||
// amplitude/2
|
||||
.label f_2pi = $e2e5
|
||||
.label _23 = $37
|
||||
.label _24 = $39
|
||||
@ -5724,6 +5725,7 @@ clear_screen: {
|
||||
// - min is the minimum value of the generated sinus
|
||||
// - max is the maximum value of the generated sinus
|
||||
gen_sintab: {
|
||||
// amplitude/2
|
||||
.label f_2pi = $e2e5
|
||||
.label _23 = $c
|
||||
.label i = 2
|
||||
@ -7711,6 +7713,7 @@ clear_screen: {
|
||||
// - min is the minimum value of the generated sinus
|
||||
// - max is the maximum value of the generated sinus
|
||||
gen_sintab: {
|
||||
// amplitude/2
|
||||
.label f_2pi = $e2e5
|
||||
.label _23 = $c
|
||||
.label i = 2
|
||||
|
@ -3,7 +3,9 @@
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
main: {
|
||||
// RValue pointer expression (constant)
|
||||
.label screen = $400
|
||||
// Increment on a const named pointer
|
||||
.label BGCOL = $d020
|
||||
.label sc2 = screen+$51
|
||||
.label _2 = 2
|
||||
|
@ -299,7 +299,9 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
// RValue pointer expression (constant)
|
||||
.label screen = $400
|
||||
// Increment on a const named pointer
|
||||
.label BGCOL = $d020
|
||||
.label sc2 = screen+$51
|
||||
.label _2 = 5
|
||||
@ -469,7 +471,9 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
// RValue pointer expression (constant)
|
||||
.label screen = $400
|
||||
// Increment on a const named pointer
|
||||
.label BGCOL = $d020
|
||||
.label sc2 = screen+$51
|
||||
.label _2 = 2
|
||||
@ -658,7 +662,9 @@ Score: 954
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
// RValue pointer expression (constant)
|
||||
.label screen = $400
|
||||
// Increment on a const named pointer
|
||||
.label BGCOL = $d020
|
||||
.label sc2 = screen+$51
|
||||
.label _2 = 2
|
||||
|
@ -10,6 +10,7 @@ main: {
|
||||
rts
|
||||
}
|
||||
lvaluevar: {
|
||||
// LValue Variable pointer dereference
|
||||
.const b = 4
|
||||
.label screen = 2
|
||||
lda #<$400
|
||||
|
@ -481,6 +481,7 @@ main: {
|
||||
}
|
||||
//SEG25 lvaluevar
|
||||
lvaluevar: {
|
||||
// LValue Variable pointer dereference
|
||||
.const b = 4
|
||||
.label screen = 3
|
||||
.label i = 2
|
||||
@ -767,6 +768,7 @@ main: {
|
||||
}
|
||||
//SEG25 lvaluevar
|
||||
lvaluevar: {
|
||||
// LValue Variable pointer dereference
|
||||
.const b = 4
|
||||
.label screen = 2
|
||||
//SEG26 [14] phi from lvaluevar to lvaluevar::@1 [phi:lvaluevar->lvaluevar::@1]
|
||||
@ -1084,6 +1086,7 @@ main: {
|
||||
}
|
||||
//SEG25 lvaluevar
|
||||
lvaluevar: {
|
||||
// LValue Variable pointer dereference
|
||||
.const b = 4
|
||||
.label screen = 2
|
||||
//SEG26 [14] phi from lvaluevar to lvaluevar::@1 [phi:lvaluevar->lvaluevar::@1]
|
||||
|
@ -5,6 +5,7 @@
|
||||
.pc = $80d "Program"
|
||||
// The C64 screen
|
||||
.label SCREEN = $400
|
||||
// One of the bytes used for addition
|
||||
.const a = 'a'
|
||||
// The program entry point
|
||||
main: {
|
||||
|
@ -242,6 +242,7 @@ INITIAL ASM
|
||||
//SEG2 Global Constants & labels
|
||||
// The C64 screen
|
||||
.label SCREEN = $400
|
||||
// One of the bytes used for addition
|
||||
.const a = 'a'
|
||||
//SEG3 @begin
|
||||
bbegin:
|
||||
@ -368,6 +369,7 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
//SEG2 Global Constants & labels
|
||||
// The C64 screen
|
||||
.label SCREEN = $400
|
||||
// One of the bytes used for addition
|
||||
.const a = 'a'
|
||||
//SEG3 @begin
|
||||
bbegin:
|
||||
@ -523,6 +525,7 @@ Score: 253
|
||||
//SEG2 Global Constants & labels
|
||||
// The C64 screen
|
||||
.label SCREEN = $400
|
||||
// One of the bytes used for addition
|
||||
.const a = 'a'
|
||||
//SEG3 @begin
|
||||
//SEG4 [1] phi from @begin to @2 [phi:@begin->@2]
|
||||
|
@ -706,6 +706,7 @@ mulf_tables_cmp: {
|
||||
// Initialize the multiplication tables using ASM code from
|
||||
// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
||||
mulf_init_asm: {
|
||||
// Ensure the ASM tables are not detected as unused by the optimizer
|
||||
.label mem = $ff
|
||||
ldx #0
|
||||
txa
|
||||
|
@ -6919,6 +6919,7 @@ mulf_tables_cmp: {
|
||||
// Initialize the multiplication tables using ASM code from
|
||||
// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
||||
mulf_init_asm: {
|
||||
// Ensure the ASM tables are not detected as unused by the optimizer
|
||||
.label mem = $ff
|
||||
//SEG650 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- }
|
||||
ldx #0
|
||||
@ -9479,6 +9480,7 @@ mulf_tables_cmp: {
|
||||
// Initialize the multiplication tables using ASM code from
|
||||
// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
||||
mulf_init_asm: {
|
||||
// Ensure the ASM tables are not detected as unused by the optimizer
|
||||
.label mem = $ff
|
||||
//SEG650 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- }
|
||||
ldx #0
|
||||
@ -12142,6 +12144,7 @@ mulf_tables_cmp: {
|
||||
// Initialize the multiplication tables using ASM code from
|
||||
// http://codebase64.org/doku.php?id=base:seriously_fast_multiplication
|
||||
mulf_init_asm: {
|
||||
// Ensure the ASM tables are not detected as unused by the optimizer
|
||||
.label mem = $ff
|
||||
//SEG650 asm { ldx#$00 txa .byte$c9 lb1: tya adc#$00 ml1: stamula_sqr1_hi,x tay cmp#$40 txa ror ml9: adc#$00 staml9+1 inx ml0: stamula_sqr1_lo,x bnelb1 incml0+2 incml1+2 clc iny bnelb1 ldx#$00 ldy#$ff !: ldamula_sqr1_hi+1,x stamula_sqr2_hi+$100,x ldamula_sqr1_hi,x stamula_sqr2_hi,y ldamula_sqr1_lo+1,x stamula_sqr2_lo+$100,x ldamula_sqr1_lo,x stamula_sqr2_lo,y dey inx bne!- }
|
||||
ldx #0
|
||||
|
@ -2,7 +2,9 @@
|
||||
:BasicUpstart(main)
|
||||
.pc = $80d "Program"
|
||||
main: {
|
||||
// constant byte array
|
||||
.const b = 4
|
||||
// Test the result
|
||||
.label pos = $501
|
||||
.label bgcol = $d021
|
||||
.const w = b*$100
|
||||
|
@ -177,7 +177,9 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
// constant byte array
|
||||
.const b = 4
|
||||
// Test the result
|
||||
.label pos = $501
|
||||
.label bgcol = $d021
|
||||
.const w = b*$100
|
||||
@ -246,7 +248,9 @@ bend_from_b1:
|
||||
bend:
|
||||
//SEG9 main
|
||||
main: {
|
||||
// constant byte array
|
||||
.const b = 4
|
||||
// Test the result
|
||||
.label pos = $501
|
||||
.label bgcol = $d021
|
||||
.const w = b*$100
|
||||
@ -339,7 +343,9 @@ Score: 37
|
||||
//SEG8 @end
|
||||
//SEG9 main
|
||||
main: {
|
||||
// constant byte array
|
||||
.const b = 4
|
||||
// Test the result
|
||||
.label pos = $501
|
||||
.label bgcol = $d021
|
||||
.const w = b*$100
|
||||
|
@ -4,6 +4,7 @@
|
||||
.pc = $80d "Program"
|
||||
.label SCREEN = $400
|
||||
main: {
|
||||
// used vars
|
||||
.const col = 2
|
||||
.label COLS = $d800
|
||||
jsr s
|
||||
|
@ -351,6 +351,7 @@ bend_from_b2:
|
||||
bend:
|
||||
//SEG10 main
|
||||
main: {
|
||||
// used vars
|
||||
.const col = 2
|
||||
.label COLS = $d800
|
||||
.label i = 2
|
||||
@ -443,6 +444,7 @@ bend_from_b2:
|
||||
bend:
|
||||
//SEG10 main
|
||||
main: {
|
||||
// used vars
|
||||
.const col = 2
|
||||
.label COLS = $d800
|
||||
//SEG11 [5] call s
|
||||
@ -569,6 +571,7 @@ Score: 243
|
||||
//SEG9 @end
|
||||
//SEG10 main
|
||||
main: {
|
||||
// used vars
|
||||
.const col = 2
|
||||
.label COLS = $d800
|
||||
//SEG11 [5] call s
|
||||
|
@ -5,6 +5,7 @@
|
||||
.label SCREEN = $400
|
||||
.label COLORS = $d800
|
||||
.const FILL = $e6
|
||||
// The total number of voronoi points
|
||||
.const numpoints = 6
|
||||
main: {
|
||||
jsr initscreen
|
||||
|
@ -1208,6 +1208,7 @@ INITIAL ASM
|
||||
.label SCREEN = $400
|
||||
.label COLORS = $d800
|
||||
.const FILL = $e6
|
||||
// The total number of voronoi points
|
||||
.const numpoints = 6
|
||||
//SEG3 @begin
|
||||
bbegin:
|
||||
@ -1834,6 +1835,7 @@ ASSEMBLER BEFORE OPTIMIZATION
|
||||
.label SCREEN = $400
|
||||
.label COLORS = $d800
|
||||
.const FILL = $e6
|
||||
// The total number of voronoi points
|
||||
.const numpoints = 6
|
||||
//SEG3 @begin
|
||||
bbegin:
|
||||
@ -2529,6 +2531,7 @@ Score: 1628771
|
||||
.label SCREEN = $400
|
||||
.label COLORS = $d800
|
||||
.const FILL = $e6
|
||||
// The total number of voronoi points
|
||||
.const numpoints = 6
|
||||
//SEG3 @begin
|
||||
//SEG4 [1] phi from @begin to @5 [phi:@begin->@5]
|
||||
|
Loading…
Reference in New Issue
Block a user